mgchem's log
article thumbnail
Published 2023. 11. 4. 20:39
Lab3: Attacklab (phase 4) Study/CS

Overview

 

Phase 4, 5는 각각 phase 2, 3과 같이 touch2, touch3 함수를 알맞는 argument와 함께 call하는 것이 목표로,

실행하고자 하는 machine code를 직접 input으로 넣어주었던(Code injection) phase 2, 3과 달리

이미 존재하는 machine code의 일부를 gadget으로 사용하는 ROP(Return-Oriented Programming)를 사용해야 한다.

 

touch2 함수의 구성과 해당 phase 2를 푸는 과정은 지난 게시물에서 다루었다.

요약하면 %rdi에 자신의 cookie값이 들어있는 상태에서 touch2 함수를 call하면 된다.

 


 

ROP

 

Phase 4에 쓰이는 gadget은 start_farm 함수와 mid_farm 함수 사이에 위치한다.

 

$ objdump -d rtarget > rtarget.d

 

rtarget의 전체 내용을 disassemble한 결과인 rtarget.d를 열어 start_farm과 mid_farm 사이를 살펴보자.

 

 

Input으로 넣어줄 수 있는 내용은 stack에 저장되고, 해당 내용은 pop이나 ret을 통해서만 사용할 수 있다.

%rdi가 cookie값(8B 크기)을 가진 채로 touch2 함수를 call하기 위해서는 아래의 과정이 필요하다.

 

0. cookie값과 touch2 함수의 주소를 포함하는 input string을 넣어준다.

1. pop %rax로 %rax에 cookie값을 넣는다.

2. mov %rax, %rdi로 %rdi에 cookie값을 넣는다.

3. ret로 touch2 함수가 실행된다.

 

위의 gadget farm에서 적절한 gadget을 찾으면

gadget 1) 0x401ad9 : 58 90 90 90 c3 (popq %rax 이후 nop 3회, ret)

gadget 2) 0x401ac0 : 89 c7 c3 (movl %eax, %edi 이후 ret)

 

Buffer 24자리는 임의로 00으로 채우고 return address는 gadget 1로 가도록 d9 1a 40 00 00 00 00 00으로 둔다.

gadget 1에서 popq %rax가 실행되는데 %rax에 cookie값이 들어와야 하므로 return address 다음에는 cookie값을 둔다.

주의할 점은 pop'q'이므로 cookie값은 8B 크기에 맞추어야 한다.

cookie값이 0x12345678일 경우 78 56 34 12 00 00 00 00으로 둔다.

 

다음으로 gadget 1에서 실행되는 ret에 의해 gadget 2로 이동해야 한다.

따라서 gadget 2의 위치 c0 1a 40 00 00 00 00 00를 둔다.

 

gadget 2에서는 movl %eax, %edi가 실행되어 cookie값이 %edi에 들어오고,

뒤이은 ret에 의해 touch2로 이동해야하므로 touch2 함수의 위치 f5 18 40 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 00 00 d9 1a 40 00 00 00 00 00 78 56 34 12 00 00 00 00 c0 1a 40 00 00 00 00 00 f5 18 40 00 00 00 00 00

 

$ ./hex2raw < 4.txt > 4-raw.txt
$ ./rtarget < 4-raw.txt

해당 hex를 txt파일로 저장하고, hex2raw로 해당 ascii code에 대응하는 string을 생성하여 rtarget에 입력하면 성공.

 

'Study > CS' 카테고리의 다른 글

[PyTorch] loss nan 문제 해결  (1) 2024.11.25
Lab3: Attacklab (phase 5)  (0) 2023.11.05
Lab3: Attacklab (phase 3)  (0) 2023.11.01
Lab3: Attacklab (phase 2)  (1) 2023.10.30
Lab3: Attacklab (phase 1)  (0) 2023.10.29
profile

mgchem's log

@mgchem

뱁새의 다리찣기