代码分析
<?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协议,127.0.0.1和localhost 也不能用,其实就是不想你探测内网端口,也不能读取内网服务文件。
查看内网ip
目前还不知道当前主机的内网ip,但是源码提供了一个查看phpinfo的功能:
查看phpinfo,如下图,可以看到当前主机的内网ip为172.17.0.3:
查看内网端口
我们可以使用ssrf扫描一下这个内网主机的端口,这里使用burpsuite:
利用gopherus写入shell
探测发现6379redis在活动,可以利用gopherus写入shell
可以看看内容写的啥
进行二次编码
更改shel.php
我们这里要改一下shell.php的内容,改为查看flag
<?php system(\"cat /flag\");?>
查看flag
然后我们就可以查看一下flag
成功