본문 바로가기

pwn/HackCTF

Unexploitable #1

problem

HackCTF에 Unexploiatable의 첫 번째 문제입니다

 

main

 

gift()

main함수에서 fgets함수에서 BOF가 발생하는 것과 gift함수에서 system함수를 제공하는 것을 알 수 있습니다

bof 취약점이 존재하지만 메모리 릭을 위해서 fwrite함수를 사용해야 하고 3번째 인자를 넣어줄 pop rdx 가젯이 없고 rtc기법을 사용하기에는 입력받는 메모리가 너무 적은 등의 문제로 익스 하는데 어려운 이 존재합니다

 

gdb main

fgets함수는 rbp-0x10의 주소에 데이터를 저장하게 되는데 fake ebp를 통해 SFP값을 원하는 값 +0x10을 넣어준다면 원하는 주소에 데이터를 넣어 줄수 있습니다

 

 fgets함수

만약이 fgets함수를 SFP를 변조한 뒤 다시 ret를 0x40074d주소를 넣어 다시 fgets가 수행되도록하면 결국 leave fgets leave ret로 leave ret 가젯을 따로 사용하지 않아도 사용하게 되는 효과를 볼 수 있습니다(stack pivoting이 가능)

gift

그리고 rdi 레지스터에 fake ebp로 우리가 원하는 데이터를 넣은(/bin/sh) 주소를 넣어 주고 0x4006cf로 가게 되면 원하는 명령어를 system함수로 실행시킬 수 있게 될 것입니다

 

그럼 익스 흐름을 생각해보면

  1. SFP값을 변조
  2. ret를 통해 다시 fgets함수 호출하여 변조한 SFP값-0x10(bss+0x600)에 /bin/sh문자열 저장
  3. leave ret를 통해 pop rdi로 bss+0x600주소 저장 후 gift함수에 move edi명령어 이후로 이동

 

익스 성공

익스가 잘 된것 같습니다

exploit code

풀고 나서 다른 분이 푼 것을 보니까 .dynstr 섹션에서 sh문자열을 가져와서 푸는 방법도 있는 것 같은데 그것도 한번 해보는 것도 좋을 듯합니당

'pwn > HackCTF' 카테고리의 다른 글

ezshell  (0) 2022.03.05
babyfsb  (0) 2022.02.10
Keygen  (0) 2021.12.12
poet  (0) 2021.08.12
BOF_PIE  (0) 2021.08.06