Archive for Dev. (junyup2)

์ง€์‹์„ ์ฑ„์›Œ๊ฐ€๋Š” ใ€Ž๊ฐœ๋ฐœ์ž/ํ™”์ดํŠธํ•ด์ปคใ€๋ฅผ ๋ชฉํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ธ”๋กœ๊ทธ

Wargame & CTF/SegFault

[SegFault] (SQLi Advanced) - SQL Injection Point3

Gearvirus(junyup2) 2023. 12. 14. 19:48

[SegFault] (SQLi Advanced)

SQL Injection Point3

flag๋ฅผ ์ฐพ์œผ์„ธ์š”!

๋ฌธ์ œ ํŒŒ์•…

์œ„์˜ ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐฝ์ด ๋‚˜์˜จ๋‹ค.

์šฐ์„  ํšŒ์›๊ฐ€์ž… ์ง„ํ–‰ ํ›„ ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•œ๋‹ค.

์‚ฌ์šฉํ•œ ๊ณ„์ • : gear / 1234

 

๋งˆ์ดํŽ˜์ด์ง€๋ฅผ ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ ๋…ธ์ถœ๋˜์–ด ์žˆ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ๊ฒŒ์‹œํŒ์„ ํ™•์ธํ•ด๋ณธ๋‹ค.

 

SQL Injection Point

๊ฒŒ์‹œํŒ์— ๊ธ€์„ ํ•˜๋‚˜ ์ž‘์„ฑํ•œ ํ›„ ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์‚ดํŽด๋ณด๊ธฐ๋กœ ํ•œ๋‹ค.

๊ฒ€์ƒ‰์ฐฝ์˜ ์ž…๋ ฅ์— ๋Œ€ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ option_val์™€ sort ๋ผ๊ณ  ๋˜์–ด ์žˆ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์šฐ์„  sort ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ™•์ธํ•ด๋ณด๊ธฐ ์œ„ํ•ด ์‚ดํŽด๋ณธ๋‹ค.

sort ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ์ฐธ/๊ฑฐ์ง“ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒฐ๊ณผ ๋ณ€ํ•˜๋Š” ๊ฒƒ์ด ์—†์—ˆ๋‹ค.

๋‹ค์Œ์€ option_val ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ  ์ด์šฉํ•˜์—ฌ ์ฐธ์ธ ๊ฐ’๊ณผ ๊ฑฐ์ง“์ธ ๊ฐ’์— ๋Œ€ํ•˜์—ฌ ํ™•์ธํ•ด๋ณธ๋‹ค.

option_val = 1=1 and username

์œ„์™€ ๊ฐ™์ด ์ฐธ์ธ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒฝ์šฐ ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

option_val = 1=2 and username

๋ฐ˜๋ฉด ์œ„์™€ ๊ฐ™์ด ๊ฑฐ์ง“์ธ ๊ฐ’์˜ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค.

์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL Injection์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋œ๋‹ค.


ํ’€์ด ๊ณผ์ • (ํ•ด๊ฒฐ ๋ฐฉ์•ˆ)

1. SQL Injection ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํŒ๋‹จ

๊ฒŒ์‹œํŒ์˜ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•œ Union SQL Injection์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ํ™•์ธํ•˜์˜€๋‹ค.

 

2. Column์˜ ๊ฐœ์ˆ˜ ํŒŒ์•…ํ•˜๊ธฐ

order by ์ ˆ์„ ์ด์šฉํ•˜์—ฌ ์กด์žฌํ•˜๋Š” COLUMN์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•œ๋‹ค.

option_val = username order by 1~10#

1~10๊นŒ์ง€๋Š” ๊ฒ€์ƒ‰์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€๋งŒ 11๋ถ€ํ„ฐ๋Š” ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์˜€๋‹ค. ์ด๋Š” ์ •๋ ฌ ๊ฐ€๋Šฅํ•œ ์ปฌ๋Ÿผ์˜ ๊ฐœ์ˆ˜๊ฐ€ 10๊ฐœ๋ผ๋Š” ์˜๋ฏธ๋กœ์„œ COLUMN์˜ ๊ฐœ์ˆ˜๊ฐ€ 10๊ฐœ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

3. ์ถœ๋ ฅ๋˜๋Š” Column์˜ ์œ„์น˜ ํŒŒ์•…ํ•˜๊ธฐ

1~10์˜ COLUMN์ค‘ ์ถœ๋ ฅ๋˜๋Š” ์ปฌ๋Ÿผ์˜ ์œ„์น˜๋ฅผ ํŒŒ์•…ํ•ด์•ผํ•œ๋‹ค.

option_val = username union select 1,2,3,4,5,6,7,8,9,10#

๊ทธ ๊ฒฐ๊ณผ ์œ„์™€ ๊ฐ™์ด 1~10์˜ COLUMN์ค‘ 1~4์˜ ์ปฌ๋Ÿผ์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

UserID | Title | Views | Date
     1      |    2   |     3    |    4 

 

๊ณต๊ฒฉ Format ์„ค์ •ํ•˜๊ธฐ

๋ณธ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ 1~10์˜ ์ปฌ๋Ÿผ ์ค‘ 1~4์˜ ์ปฌ๋Ÿผ์ด ์ถœ๋ ฅ๋˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ๊ทธ ์ค‘ ์•„๋ฌด ์œ„์น˜์—๋‚˜ ์›ํ•˜๋Š” SQL ๊ตฌ๋ฌธ์„ ์‚ฝ์ž…ํ•˜๋ฉด๋œ๋‹ค.

option_val=username select _____,2,3,4,5,6,7,8,9,10#

 

4. DB ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

DB์˜ ์ด๋ฆ„์ด sqli_8์ธ ๊ฒƒ์„ ํ™•์ธํ•˜์˜€๋‹ค.

 

5. Table ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

๋ณธ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ where ๋ฌธ์ด ๋จนํžˆ์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด limit์„ ํ†ตํ•ด ํ™•์ธํ•˜์—ฌ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด TABLE์˜ ๊ฐœ์ˆ˜๋ฅผ ๋จผ์ € ํ™•์ธํ•ด ์ฃผ์—ˆ๋‹ค.

์ด 64๊ฐœ์˜ Table์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์˜€๊ณ 

MySQL์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” Table๋“ค ๋’ค์— ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ง„ํ–‰ํ•˜์˜€๋‹ค.

 

6. Column ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

์œ„์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฐพ์•„ ์ฃผ์—ˆ๋‹ค.

 

7. Data ์ถœ๋ ฅํ•˜๊ธฐ

์œ„์—์„œ ํ™•์ธํ•œ ๋ฐ”์™€ ๊ฐ™์ด flag_Table์˜ flagData ์ปฌ๋Ÿผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ด๋ณธ๋‹ค.

์ ˆ์ฐจ์— ๋”ฐ๋ผ ์ง„ํ–‰ํ•œ ๊ฒฐ๊ณผ ์œ„์™€ ๊ฐ™์ด ์›ํ•˜๋Š” flag๋ฅผ ํš๋“ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.


์ƒ๊ฐํ•ด๋ณผ ์ 

๋ณธ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ order by, sort๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ Injection Point ์˜€๋Š”๋ฐ, ๋‹ค๋ฅธ ๋ฌธ์ œ๋“ค๊ณผ๋Š” ๋‹ฌ๋ฆฌ ํ•ด๋‹น ๊ตฌ๋ฌธ์— ์‚ฝ์ž…ํ•จ์— ์žˆ์–ด WHERE๊ฐ€ ๋จนํžˆ์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
์ด์— ์ „์ œ์ ์ธ ๊ฐœ์ˆ˜๋ฅผ ํŒŒ์•…ํ•˜๊ณ  limit์„ ์ด์šฉํ•˜์—ฌ ์ฐพ์•„๊ฐ€๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์—ฌ๋Ÿฌ์ค„์ด ๋‚˜์˜ค์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋‚˜ ์œ„์™€ ๊ฐ™์ด ํŠน์ • ๊ตฌ๋ฌธ์ด ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ์—๋Š” ์ง€์žฅ์ด ์—†๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ฌ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์งˆ๋ฌธ ํ™˜์˜, ์ˆ˜์ • ๋ฐ ๋ณด์™„์— ๋Œ€ํ•œ ์ง€์  ํ™˜์˜