Wargame & CTF/FTZ
[FTZ] Level13 Write-up
cg10036
2019. 6. 19. 00:51
buf를 덮어 씌우고 RET을 덮어 씌워서 이 문제를 풀어야 한다. 하지만 i라는 놈이 있다.
buf와 RET 사이에 i가 있다. 그리고 i의 변조 유무를 감지한다. buf를 오버플로우 시켜서 RET을 수정하게 된다면 i도 수정되게 된다. 그렇게 때문에 i 부분을 덮어 씌울때는 아무 값이나 덮어 씌우면 안되고, i의 값을 덮어 씌워야 한다.
일단 buf의 크기와 RET이 있는 장소를 알아보자.
[ebp-12], 0x1234567을 보니 [ebp-12]가 i인것을 추측할 수 있다.
그렇다면 0x418 - 12 = 1036이 buf의 크기일것이다.
그리고 esp, 0x8을 한다. 그 뒤에 SFP와 RET이 있을것이다.
결론적으로, 이렇게 된다.
[buf(1036)][i(12)][DUMMY(8)][SFP(4)][RET(4)]
1036을 아무 값으로 채우고, i부분은 \x67\x45\x23\x01로 채우고, DUMMY와 SFP는 아무 값으로 채우고, RET부분을 EGG쉘 주소로 채우면 될 것 이다.
EGG쉘을 export하고 확인해준다.
잘 들어갔다. 이제 printf("%p\n", getenv("EGG"));로 EGG쉘 주소를 따준다.
0xbffff8b0라고 나왔다. 이제 파이썬으로 argument를 넘겨준다.
./attackme `python -c 'print "A"*1036+"\x67\x45\x23\x01"+"B"*12+"\xb0\xf8\xff\xbf"'`
Level14 : what the nigga want?