关于SSRF的相关案例(2月公开赛Web-ssrfme)

目录

考点

源码

解题步骤

1.将web-ssrfme.zip解压缩在Ubuntu下

2.拉取成功ssrfme镜像

3.使用端口访问文件

4.扫描附近可能的服务器

5.使用buresuite继续抓包

6.猜想它可能存在得物理

7.进行多次解码

8.读取flag


考点

主要就是redis未授权访问

源码

<?php
highlight_file(__file__);
function curl($url){  
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_HEADER, 0);
   echo curl_exec($ch);
   curl_close($ch);
}
 
if(isset($_GET['url'])){
   $url = $_GET['url'];
 
   if(preg_match('/file\:\/\/|dict\:\/\/|\.\.\/|127.0.0.1|localhost/is', $url,$match))
  {
       die('No, No, No!');
  }
   curl($url);
}
if(isset($_GET['info'])){
   phpinfo();
}
?>

解题步骤

1.将web-ssrfme.zip解压缩在Ubuntu下

Docker-compose up -d 

更新后的镜像重新启动容器

2.拉取成功ssrfme镜像

3.使用端口访问文件

可以看到有一个过滤条件,它限制了file,dict协议,127.0.0.1和localhost 也不能用,其实就是不想你探测内网端口,也不能读取内网服务文件。

但是!它可以通过phpinfo了条件。

给info随便赋一个值,出来了php界面,可以观察到hostname主机和端口,而172.21.0.3是可以绕过127.0.0.1这个条件,我们可以在这个地址上测试,不断的改变端口值,端口不一样,出来的值也会有所区别

当端口为6379的时候,没有任何区别

因为一直这样试很费时间,所以使用burpsuite去检测端口

设置检测端口1-1000

只开放了一个80端口,也没有数据库,如果按172.21.0.3路径一直找端口,肯定是不行的

所以可以想一想,可能有时候会不只开了一个服务器

4.扫描附近可能的服务器

0.3和0.4都访问没有什么变化

只有0.2可以,所以可以把关注点放在0.2的服务器

5.使用buresuite继续抓包

这时发现开放了6379和80端口

6.猜想它可能存在得物理

位置端口发现了,现在要想可能存放的物理地方,一般会考虑会在/var/www/html/

发现upload有可执行权限,可以通过这个目录去访问。

但是在真实比赛中,很难知道文件名,可以使用字典去试

然后加载在路径下,判断长度是否一致,如果一致,说明就有这个文件

获取到shell后,传递到路径里

7.进行多次解码

再进行二次编码

再执行过程中,创建了一个shell.php

8.读取flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值