취약점을 찾기 까지는 얼마 걸리지 않았는데 실제 구현하는데 오래 걸렸다.
열시간 이상 걸린 듯....
오래 걸린 이유는? 디버깅을 잘 못한다. 문제가 무엇인지 잘 모른다.
mprotect 함수가 한번 호출되고 두번째 또 호출되면 두번째 권한으로 설정된다. 이것을 알아야 했다. 그리고 rop 프레임워크를 만들어서 돌리는 것도 중요하다. 변경되는 데이터 입출력은 ida보다는 gdb가 편하다. 이유는 빠르기 때문이다. ida에서 취약점을 찾았으면 구현은 peda나 gdb에서 구현해야 한다. 아마도 strace 로 구현을 하면 좀더 빠르지 않을까 한다.
시간이 걸려도 어셈단위로 어떤 기능을 하는지 정확하게 파악하는 것도 중요하다. 10분 먼저 하려다가 1시간 더 걸릴 수 있다. 수학 문제 푸는 것과 같이 느리지만 안전하게 꾸준한 것이 빠르다.
바이너리에 put가 출력되는 것에 주목하고 gets로 문자열을 입력받는 다는 것에 주목하자. 쉘코드가 살아있다는 것을 의미한다.
gets()가 널을 받아드린다. 대신에 \n은 입력할 수 없다.
'CTF' 카테고리의 다른 글
[tum ctf 2016] haggis - crpyto (0) | 2016.10.03 |
---|---|
[SCTF 2016] pwn2 한땀 한땀 ROP read /bin/sh (0) | 2016.09.16 |
[tokyo 2016] ReverseBox (0) | 2016.09.12 |
[tokyo ctf 2016]greeting (0) | 2016.09.06 |
bctf2016-bcloud (0) | 2016.03.21 |