본문 바로가기

cyberpeace 3.0 ITCTF - crySYS 본문

Notepad

cyberpeace 3.0 ITCTF - crySYS

Seongjun_You 2022. 1. 11. 09:00

read함수 밖에 없는 아주 간단한 코드이다.

출력도 없어서 leak을 못했다.

 

먼저 bss영역에 /bin/sh를 삽입한다.

그 후 read의 got를 1byte overwrite 하여 syscall를 이용하기로 했다.

하지만 rax를 수정할 방법을 찾기가 어려웠다.

read의 반환값을 이용하려고 했지만 이상하게 되지 않았다.

다행히 가젯 중에 pop rbp가 있어서 이를 이용했다.

 

pop rbp에 0x5f를 넣고 lea rax, [rbp+buf] 쪽으로 ret을 했다.

buf가 -0x50이기때문에 rax에 0xf가 들어갔다.

그 후 call에서 syscall이 실행되어 sigreturn을 진행하려 했다.

레지스터 값들도 모두 0으로 초기화 되어있길래 syscall이 잘 먹혔다 생각해서

기분이 좋았지만

여기서부터가 삽질의 시간이었다.

레지스터에 값들을 넣어 execve('/bin/sh',0,0)을 실행할려했으나

레지스터에 값들이 들어가는 순서가 엉망이었다.

rdi에는 값조차 들어가지 않았다.

 

이렇게 하루 삽질을 하여 레지스터에 원하는 값들을 넣어서

syscall을 진행하려 했으나 SIGSEGV가 떴다.

메모리 영역을 잘못 참조했나 생각해서 다시 샅샅이 뒤졌지만 실패했다.

 

눈물 나는 삽질이었다.

 

 

 

 

 

cbd2d300-dc64-4aae-8d51-671a6d0e5b5f.zip
0.93MB

바이너리이다.

 

'Notepad' 카테고리의 다른 글

fork 디버깅, PIE 디버깅  (0) 2022.03.06
LoadLibrary  (0) 2022.02.16
tiny backdoor (삽질)  (0) 2022.01.29
validator-revenge (해결)  (0) 2022.01.14
iofile_vtable_check (해결)  (0) 2021.11.23
Comments