힌트가 매우 길다.
디버깅해서 메모리구조랑 변수를 확인해보자
0x100만큼이므로 256바이트이다.
메모리구조를 확인하면
가 되겠고
낮은->높은주소 순으로 fds count x check string[100] 이 되겠다.
그리고 힌트로 주어진 소스코드의 동작 방식을 보면 0x08값을 전달해야 string[count] 배열의 인덱스를 1바이트 감소시킬 수 있기 때문에
여기서는 16진수 0x08을 입력해야한다.
근데 read()함수, gets()함수와 같이 인자값이 키보드 입력값으로 받는경우에는 16진수값을 파이프를 통해 전달해야한다.
즉 attackme를 실행하고 \x08을 입력하게 되면 4개의 문자가 따로 전달된다는 뜻이다.
그러면 공격코드를 작성하면
(python -c 'print "\x08\x08\x08\x08"+"\xef\xbe\xad\xde"'; cat) | /home/level18/attackme
통과가 된걸 확인
'Pwnable > FTZ' 카테고리의 다른 글
FTZ Level20 풀이(미해결) (0) | 2016.07.17 |
---|---|
FTZ Level19 풀이(미해결) (0) | 2016.07.17 |
FTZ Level17 풀이(해결) (0) | 2016.07.17 |
FTZ Level16 풀이 (0) | 2016.07.17 |
FTZ Level15 풀이(해결) (0) | 2016.07.16 |