티스토리 뷰
level 15를 풀어보장.
힌트를 보면
14번과 비슷하지만 check변수를 포인터로 선언했다.
일단 gdb를 보자.
main+3과 main+6에서 0x38과0x4만큼 스택을 확장했다. 총 60만큼이다.
main+21에 fgets가 있고 main+17에서 eax에 ebp-56의 값을 복사했다. 그럼 ebp-56에 buf가 있다.
main+29에서 ebp-16의 값을 eax에 복사했고, main+32에서 eax의 값과 0xdeadbeef의 값을 비교한다. 그럼 ebp-16에 check가 위치해 있겠다.
그리고 main+38에서 jne 명령어가 있는데 이 명령어는 cmp결과 값이 거짓이면 해당 명령어를 실행한다. 즉 eax와 0xdeadbeef를 비교했을 때 거짓이면 main+77로 이동한다는 것이다.
그럼 check와 0xdeadbeef를 어떻게 비교할지 고민해보자.
사실 이게 좀 어려웠다.
main+32에서 eax와 0xdeadbeef를 비교하기 위해 메모리에 0xdeadbeef를 올려놨을 것이다.
그걸 이용해 메모리에 있는 0xdeadbeef의 위치를 찾아 check자리에 그 위치를 넣으면 된다.
이 주소를 확인해보자.
0x80484b2가 0xdeadbeef의 시작위치이다. 왜냐하면 little endian 방식이기 때문에 거꾸로 들어간다. \xef\xbe\xad\xde. 확인을 해보면
0x80484b2에서 ef로 시작하는걸 볼 수 있다.
그럼 0xdeadbeef의 시작주소가 0x80484b2라는걸 알았으니 익스플로잇을 해보자.
buf의 크기 40만큼 \x90으로 채워주고 0xdeadbeef의 주소를 넣어주면 check를 바꿀수 있다.
성공
'포너블 > FTZ' 카테고리의 다른 글
FTZ level17 풀이 (0) | 2020.08.17 |
---|---|
FTZ level16풀이 (0) | 2020.08.17 |
FTZ level14 풀이 (0) | 2020.08.17 |
FTZ level 12풀이 (0) | 2020.08.14 |
FTZ level11풀이 (0) | 2020.08.14 |
- Total
- Today
- Yesterday
- automotive
- SOME/IP
- 케라스
- 이상탐지
- json2html
- 머신러닝
- 크로스 엔트로피
- CAN-FD
- porks
- PCA
- automotive ethernet
- problem statement
- AVB
- cuckoo
- 차량용 이더넷
- AE
- 단순선형회귀
- 논문 잘 쓰는법
- many-to-many
- Python
- many-to-one
- 로지스틱회귀
- 차량 네트워크
- Ethernet
- SVM
- AVTP
- one-to-many
- 딥러닝
- HTML
- 회귀
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |