BUGKU_PWN_OVERFLOW2_WP
WP_OVERFLOW2
拿到程序,首先放到我们的kali里面看看是多少位的程序,然后在看看有没有什么安全属性

64位程序,并且开启了RELRO,NX
也就是说,这道题我们需要使用ROP绕过
使用ida64打开这个程序,对这个程序的伪代码进行分析

首先看看main函数

发现最开始定义的buf是32个字节
然后在memset中讲buf给清空了,然后read函数讲100字节的数据丢给了buf,这里可以产生栈溢出漏洞
我们在函数列表中可以发现我们无法找到/bin/sh这个函数,这里有两个方法可以找到bin/sh
- shift+F12,可以找到一些关键词
- 使用ROPgadget进行过滤
我们看第一种方法的效果

然后我们在看到第二种方法的效果

知道了/bin/sh的地址以后
我们还需要找system的地址

现在我们有了system的地址,/bin/sh的地址也有的,我们要将/bin/sh的地址传递给system需要知道RDI寄存器的地址
这里是这样解释的
system()函数的第一个参数需要通过RDI寄存器传递。如果没有使用pop rdi; ret的ROP gadget,就无法将/bin/sh字符串的地址加载到RDI寄存器中,也就无法调用system()函数。
这里我们需要继续使用到ROPgadget了

为什么是POP rdi而不是直接rdi
原因:pop rdi 是一条汇编指令,它的作用是将栈顶的值弹出并存储到寄存器 RDI 中。而 rdi 是 RDI 寄存器本身。
Exp构造:

随机推荐
- linux 安装navicat16-premium-cs 并破解
https://ylyhappy.gitee.io/posts/linux/install-navciat.html #破解navicat16 使用 navicat-keygen for linux ...
- Spark内存调优
一.概述Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优.本文旨 ...
- H2数据库用户自定义函数方法及范例
H2数据库,是Java实现的内存数据库.可使用它作为嵌入式内存数据库,但就其特性还用更多值得应用在实际项目中的意义.之前的一篇Blog中已经描述过其使用方法及丰富的连接数据库方式. 官方主页:http ...
- .NET Core 类型系统(Types System)底层原理浅谈
C#类型系统 C# 是一种强类型语言. 每个变量和常量都有一个类型,每个求值的表达式也是如此. 每个方法声明都为每个输入参数和返回值指定名称.类型和种类(值.引用或输出). .NET 类库定义了内置数 ...
- C# 设置label(标签)控件的背景颜色为透明
有时候,我们需要将控件的背景颜色设定为透明,比如说label(标签)控件.那么,如何将控件的背景颜色设定为透明?是不是只要将控件的BackColor属性设为Transparent(透明)就可以了呢?答 ...
- 即时通讯技术文集(第32期):IM开发综合技术合集(Part5) [共12篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第32 期. [- 1 -] IM开发干货分享:如何优雅的实现大量离线消息的可靠投递 [链接] ...
- IM跨平台技术学习(三):vivo的Electron技术栈选型、全方位实践总结
本文由vivo技术团队Yang Kun分享,原题"electron 应用开发优秀实践",本文有修订. 1.引言 在上篇<Electron初体验(快速开始.跨进程通信.打包.踩 ...
- C#利用Vosk开源模型语音识别
#C#利用Vosk开源模型语音识别 #by wgscd 模型下载:VOSK Models (alphacephei.com) 找到chinese Chinese vosk-model- ...
- 彻底讲透Spring Bean生命周期,源码深度剖析!
前言本篇文章主要是要介绍如何在Spring IoC 容器中 如何管理Spring Bean生命周期. 在应用开发中,常常需要执行一些特定的初始化工作,这些工作都是相对比较固定的,比如建立数据库连接,打 ...
- biancheng-数据结构
目录http://c.biancheng.net/data_structure/ 1数据结构入门2线性表3栈和队列4字符串5数组和广义表6树存储结构7图存储结构8动态内存管理9查找表结构10排序算法1 ...