今天碰到了一道bugku里的题
题目提示在index里
http://123.206.87.240:8005/post/index.php?file=show.php
抓包抓不到东西 然后百度了一下发现了一个协议
php://filter 可用来读取文件源码
格式为:
php://filter/read=convert.base64-encode/resource=[文件路径]
他的意思是 我们可以用base64的编码方式来读取index.php 也就是网页源文件
所以可以构建payload:
http://123.206.87.240:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
😕/filter用途较为广泛 通过filter的名字就可以看出来它可以过滤很多东西
filter_var() - 通过一个指定的过滤器来过滤单一的变量
filter_var_array() - 通过相同的或不同的过滤器来过滤多个变量
filter_input - 获取一个输入变量,并对它进行过滤
filter_input_array - 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
例如
<?php
$content = '<?php exit; ?>';
$content .= $_POST['txt'];
file_put_contents($_POST['filename'], $content);
其中 exit()是输出一条消息 并推出当前脚本
可以通过php://filter绕过这里的限制
对我们想要写入的一句话木马进行base64编码后利用php://filter/read的解码功能
然后就可以成功上传webshell
有大佬说还可以利用此协议解决php和标准XML冲突的问题 还没看明白 日后补充