ASLR이 꺼진 환경에서 가능한 exploit이다.
buf에 128byte를 넣고 더미 데이터 4byte "bbbb"를 넣어준다음에 gop gadget으로 jump를 해준다.
처음 jump를 해줄 곳은 0x76e9ad44의 주소이다. pop {r4, pc}를 하면 r4에 (/bin/sh의 주소 -6byte)를 넣어 주고
pc에는 0x76e9ad40의 주소를 넣어준다. 그러면 r4=&(/bin/sh)-6 이되고 pc=0x76e9ad40 이므로 add r0, r4, #6으로 jump를 할 것이다. 이때 r4=&(/bin/sh)-6이므로 add r0, r4, #6의 명령어로 인해 r0=/bin/sh의 주소가 들어갈 것이다.
그런다음 다시 pop {r4, pc}명령어가 실행이 되는데 이때 r4에는 더미 값을 넣어주고 pc에는 system 함수의 주소를 넣어준다. 이때 여기서 필요한 가젯들은 /bin/sh 문자열의 주소와 system함수의 주소이다.
system 함수의 주소는 gdb에 break main을 걸어주고 p system 명령어로 구해준다.
/bin/sh 문자열의 주소는 다음과 같이 소스코드를 작성해 준다.
실행 화면이다. 그런데 진짜 저기에 있을까?
진짜 존재한다.
그럼 우리가 필요한 모든 가젯들이 모였다.
"A"*132
0x76e9ad44=pop {r4, pc}명령어의 주소값
0x76f96b6c=/bin/sh문자열의 주소값
0x76e9ad40=add r0, r4, #6명령어의 주소값
"B"*4=r4에 들어갈 더미값
0x76ea39c8=system함수의 주소값
다음과 같이 RTL_exploit.py로 저장해주면
되는것 같다. python 실행 화면에서는 ASLR이 Enable이라고 되어 있지만 ASLR은 작동하지 않는다.
왜저러는지 모르겠다.
'ARM아키텍쳐' 카테고리의 다른 글
[ARM] ROPlevel1 (0) | 2020.05.04 |
---|---|
[ARM] exploit RTL Chaining (0) | 2020.03.25 |
[ARM] Hello World!_Part 2 (0) | 2020.01.13 |
[ARM] Hello World!_Part 1 (0) | 2020.01.08 |
[ARM] exploit_ROP (0) | 2019.12.22 |