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?