SSRF+Redis+WebShell
<?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();
}
?>
可以看到过滤了file、dict等协议,但还可以get传参info查看phpinfo
可以得知它内网地址是172.18.0.3
或许可以尝试用get url传递http请求尝试探测端口
我们可以使用burpsuit快速扫描试试
payload numbers设置1-10000端口再高就没有常用的端口了
通过lengtn基本判断没有可用端口服务开放,除了80
但是我们知道了内网地址之后不仅是可用对端口进行扫描还可以进行网段的横向渗透扫描
我们尝试一下172.18.0.1
看下去貌似是一个apache2的默认网页
使用burpsuit扫描一下呢
发现还是没有什么可用的服务
再试下172.18.0.2呢
发现返回了一个Go away有点可疑?我们用burpsuit扫描看看
我们发现了6379端口好像存在服务?对应的是redis服务尝试访问看看
实时确实如此出现了redis的error
既然我们知道了在它的内网之上这台主机开放了redis的服务我们是否可以结合gopher+redis进行webshell写入呢?
我们尝试使用gopherus编写一个简单的redis+phpwebshell
我们再进行二次编码
如何进行get传参
发现正在转圈,有可能成功?尝试访问一下我们利用redis写入的webshell
提示404NotFound?是没有写入成功?
是这样吗,有可能是上传写入的路径不是默认的www/html下?
尝试一下upload目录呢?
再次利用gopherus构造payload
再进行二次编码,传入
貌似成功了?
我们访问一下试试呢?
事实确实如此