棺材里伸手,死要钱!
--古吉拉特邦 莫迪大仙
引言:由于有些题目实在是让人抓挠,我看完题解后难以接受知识机械的执行获取flag,所以我想着尽可能用我的语言去进行解释!
由于是验证猜想实验,所以我不会注重于得到flag。如果想知道解题思路移步至下述文章:
一、实验准备
1、phpstudy
2、firefox浏览器
3、hackbar插件
(如果大家有需要上述工具可私信)
二、实验原因
1、产生原因:
由于在实验中过滤了字符%,但是我们的payload中依旧使用了?c=tac%09fla?.php||,那么%09是否在传入参数后自己转码成了Tab键?
三、实验过程
1、在本地创建rce.php文件,将题目拷贝至其中
2、添加输出验证语句
如果验证成功则输出:成功过滤!
<?php
//设置编码方式为utf-8
header("Content-Type:text/html;charset=utf-8");
if(isset($_GET['c'])){
$c=$_GET['c'];
echo $c;//输出变量$c接受到的值,再进行过滤前进行输出
echo "<br>";//美观输出换行
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){
echo "成功过滤!!";//如果成功过滤则输出过滤成功
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
?>
3、访问地址
payload:
http://localhost/rce.php?c=tac%09fla?.txt||
查看结果,第一次输出$c的值发现%09没有被接受而是自动转换成了Tab键,所以可以通过后续验证进行绕过,但是还是会有人会有疑惑,那不是直接变成空格了吗?Tab的输出确像空格键但是还是存在差别
至此验证完成,欢迎不同的讨论声音!