이번엔 roplevel2를 풀어보겠다. (ASLR은 disabled인 상태.)
이번엔 gadget라는 함수가 주어져 있다. 이를 이용하여 r0에 /bin/sh 문자열을 넣고 pc에 system의 주소를 넣어 shell을 획득해 보겠다. 하지만 여기서 r0에 /bin/sh를 넣는 대신 코드에 주어진 str1과 str2그리고 str3를 이용하여 명령어를 따로 넣어줄 수 있다. 두가지 방법을 시도해보겠다.
첫 번째 방법으로 /bin/sh를 system함수에 전달하는 방법을 사용해보겠다.
코드를 살펴보면 buff에 16byte를 할당받는다. 그럼 20byte dummy data를 넣어줌으로써 overflow를 일으킬 수 있다.
gadget의 address이다. 여기서 20byte를 넣어준 후 jump할 주소가 0x00010514가 아니라 0x00010518이어야 한다.
그 이유는 push를 하면 stack의 data들이 변경 되기 때문이다.
따라서 0x00010518로 jump를 하면 0x0001051c에 pop {r0, pc}명령어로 인해 r0와 pc에 인자를 넣어줄 수가 있다. 이때 r0에 /bin/sh 주소와 system주소를 넣어주면 shell을 얻을 수 있을 것이다.
'ARM아키텍쳐' 카테고리의 다른 글
[ARM] Boot Loader 설치 (0) | 2023.01.11 |
---|---|
[ARM] Cross-Compiler 설치 (0) | 2023.01.11 |
[ARM] ROPlevel1 (0) | 2020.05.04 |
[ARM] exploit RTL Chaining (0) | 2020.03.25 |
[ARM] Hello World!_Part 2 (0) | 2020.01.13 |