基本ROP
ret2text
[NewStarCTF 2023 公开赛道]ret2text
(64)

execve本身并不是一个后门函数。
实际上,execve是一个标准的系统调用函数,用于在 Linux和类 Unix 系统中执行一个新的程序。
它的原型如下:
该函数接受三个参数:
1. filename:要执行的程序的文件名或路径。
2. argv:一个以 NULL 结尾的字符串数组,表示传递给新程序的命令行参数。
3. envp:一个以 NULL 结尾的字符串数组,表示新程序的环境变量。当调用execve函数时,它会将当前进程替换为新程序的代码,并开始执行新程序。
新程序接收argv和envp作为命令行参数和环境变量。
ret2shellcode

未开启NX保护,可以shellcode


v4_addr = int(r.recvline()[33:-1],16):
使用切片操作 [33:-1] 从接收到的数据中提取出地址部分。这个切片操作假设地址信息从第34个字符开始(因为Python的索引是从0开始的),并且忽略最后一个字符(通常是换行符 \n )。
将提取出的地址字符串转换为整数。 int() 函数用于将字符串转换为整数,这里的基数是16,因为地址通常是以十六进制形式表示的。
shellcode.ljust(0x60+8, b'a') :
• shellcode :这是一段用于执行攻击者希望在目标机器上执行的代码的二进制序列,通常是一个shellcode,它能够创建一个反向shell或者执行其他恶意操作。
• ljust(width, fillchar) :这是一个字符串方法,用于将原字符串左对齐,并使用 fillchar (在这里是 b'a' ,即ASCII码中的'a'字符)填充至指定的 width 宽度。如果原字符串超过这个宽度,则不会截断。
需要指定架构,因为pwn中默认生成的shellcode是32位的,所以不进行指定的话是打不通的,当遇到64位程序的时候一定要进行指定
ret2libc
ctfshow pwn48
(puts)(32)

[NewStarCTF 2023 公开赛道]ret2libc
(puts)(64)

ret栈对齐
ctfshow pwn45
(write)(32)

ctfshow pwn46
(write)(64)

write函数原型
ssize_t write(int fildes, const void *buf, size_t nbyte);
参数:
• fildes :文件描述符,这是一个非负整数,用于标识一个打开的文件或者其他类型的文件描述符。
• buf :指向要写入数据的缓冲区的指针。
• nbyte :要写入的字节数。
返回值:
• 成功时,返回写入的字节数。
• 如果发生错误,返回 -1 ,并设置 errno 以指示错误类型。
write 函数会尝试将 nbyte 字节的数据从 buf 指向的缓冲区写入到 fildes 指定的文件描述符。如果写入成功,它返回实际写入的字节数。如果返回的值小于 nbyte ,则可能意味着写入操作没有完成,或者遇到了文件末尾(EOF)。
puts函数原型
int puts(const char *str);
•参数:
• str :指向一个以 null 结尾的字符串的指针,该字符串将被输出到标准输出。
• 返回值:• 成功时返回一个非负整数。• 如果发生错误,则返回 EOF (通常是 -1)。
puts 函数会输出传入的字符串,并在字符串的末尾添加一个换行符。如果字符串本身以换行符结尾, puts 会再添加一个换行符,因此输出可能会包含两个连续的换行符。
基本ROP的更多相关文章
- 一步一步学ROP之linux_x64篇
一步一步学ROP之linux_x64篇 一.序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防 ...
- 一步一步学ROP之linux_x86篇
一步一步学ROP之linux_x86篇 作者:蒸米@阿里聚安全 一.序 ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过 ...
- Windows XP PRO SP3 - Full ROP calc shellcode
/* Shellcode: Windows XP PRO SP3 - Full ROP calc shellcode Author: b33f (http://www.fuzzysec ...
- Rop 文件上传解决思路
由于服务请求报文是一个文本,无法直接传送二进制的文件内容,因此必须采用某种转换机制将二进制的文件内容转换为字符串.Rop 采用如下的方式对上传文件进行编码:<fileType>@<B ...
- rop框架签名功能控制
平台级控制: 通过<rop:annotation-driven/>的 sign-enable 属性即可开启或关闭服务平台签名验证功能:<rop:annotation-driven s ...
- rop框架中@ServiceMethod注解属性
@ServiceMethod 属性 method :代码服务方法名version :表 示 版 本 号 group:服务分组名.服务的分组没有特殊的意义,您可以为服务定义一个分组,以便在事件监听器.服 ...
- Linux内核ROP学习
0x00 前言 1.SMEP(Supervisor Mode Execution Protection):一种减缓内核利用的cpu策略,禁止内核态到用户态内存页的代码执行(32位的addresses ...
- 栈溢出之rop到syscall
当程序开启了nx,但程序有syscall调用的时候.这时栈溢出的利用就可以通过rop来执行syscall的59号调用execve('/bin/sh',null,null),这是这次alictf一道pw ...
- 20145236《网络对抗》进阶实验——64位Ubuntu 17.10.1 ROP攻击
20145236<网络对抗>进阶实验--64位Ubuntu 17.10.1 ROP攻击 基础知识 ROP攻击 ROP全称为Retrun-oriented Programmming(面向返回 ...
- 蒸米一步一步ROP X64学习笔记
原文地址https://segmentfault.com/a/1190000007406442,源代码地址https://github.com/zhengmin1989/ROP_STEP_BY_STE ...
随机推荐
- Java中使用BigDecimal进行double类型的计算(高精度,可保留几位小数)
Java中 小数直接进行乘除运算,会出现精度问题导致计算结果有误需要使用 BigDecimal 类型辅助运算,保证精度无误源码: import java.math.BigDecimal;import ...
- YAML 文件基本语法格式(十四)
一.YAML 文件基本语法格式 前面我们得 Kubernetes 集群已经搭建成功了,现在我们就可以在集群里面来跑我们的应用了.要在集群里面运行我们自己的应用,首先我们需要知道几个概念. 第一个当然就 ...
- 4Templates Bootstrap Navbars and Links
链接 传递参数
- Maya 2019.2 Mtoa 无法正常加载并报错
事件起因: 在开始安装 Maya2019.2 时自动安装的 Mtoa 的版本为 5.3.1,但是在插件管理器里无法启用插件,于是乎去网上下了一个低的版本 5.1.1,虽然可以使用但是渲染出来的东西不能 ...
- Ant Design Vue 在表格中插入图片
这两天一直在用 Antdv 做一些小 demo,今天在做表格的时候想在表格中插入图片,简单翻了下文档和国内的博客,发现所有的方法竟然都不好使,最后还是在官网的示例代码中看到相关的部分,不得不说这种 u ...
- 全网最适合入门的面向对象编程教程:55 Python字符串与序列化-字节序列类型和可变字节字符串
全网最适合入门的面向对象编程教程:55 Python 字符串与序列化-字节序列类型和可变字节字符串 摘要: 在 Python 中,字符编码是将字符映射为字节的过程,而字节序列(bytes)则是存储这些 ...
- springboot起步依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...
- 【USB3.0协议学习】Topic2·USB3.0的LTSSM分析
一.什么是LTSSM,处于USB层次中的哪个位置? LTSSM是链路训练状态机的简称,位于USB3.0协议的link layer,共有12种状态,在链路的两端,也就是Downstream port和U ...
- Vue-Router 是干什么的,原理是什么?
传统的项目中,页面的切换和跳转使用的是超链接实现,但是目前的SPA 是基于组件和路由实现的,页面的切换和跳转是由路由机制完成,区别是更新了视图但不重新请求页面: 原理是把url 和组件之间建立映射关系 ...
- k8s的ReplicationController
ReplicationController 存活探针 Kubemetes有以下三种探测容器的机制: HTTPGET探针对容器的IP地址(你指定的端口和路径)执行HTTPGET请求,如果探测器收到响应, ...