文章目录
- 前言
- 一、刑法
- 二、SQL介绍
- 三、SQL注入原理
- 四、HTML中请求
- 五、SQL-libs中漏洞细分
- 联合注入
- 报错注入
- 布尔盲注
- 延时注入
- cookie注入
- base64注入
- 宽字节注入
- 二次注入
- 堆叠注入
- XFF注入
- 六、常见的SQL绕过方式
- 总结
前言
本文介绍了SQL注入里面常用到的十大注入方式,这里介绍的更多的是方法和技巧。如果需要更加详细的有关SQL漏洞的介绍,请关注我,在我的SQL闯关栏里就有我对于SQL闯关内容的详解。最后希望读者能谅解本文是以大段的的文字进行叙述的,而没有参加更多的图片。其实我还是想更好的通过叙述的方式来让我的读者领略SQL-libs中的技巧和方法。最后希望能给看我作品的人得以启发和思考。
一、刑法
中华人民共和国刑法(第285、286条)
第二百八十五条 违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。
第二百八十六条 违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。 违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。 故意制作、传播计算机病毒等破坏程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚。
二、SQL介绍
1:SQL中的主要结构
SQL中的主要结构是:一库三表六字段
一库:information_schema库
三表:schemata表、tables表、columns表
六字段:在schemata表中的字段是schema_name;在tables表中的字段是table_name和table_schema两个字段;在columns表中的字段是column_name、table_name和table_schema三个字段
三、SQL注入原理
SQL注入原理:主要是攻击者通过向页面的指定位置输入包括特殊字符的语句,而有些页面的前端和后端的数据库没有对其进行过滤和处理,使得攻击者能通过这些包括特殊字符的语句达到直接登录成功的结果
四、HTML中请求
1:HTML的请求方式
GET请求:特点是能直接通过对URL网址的编写改变HTML页面显示的内容,显示的内容可能是正确的库名表名字段名等敏感信息,因此完成SQL注入攻击的效果。然而也正是因为这个原因它的保密性不强,所以现在大部分网站都采用的是接下来介绍的POST请求。
POST请求:特点主要是有登入认证的用户交互界面,主要应用于我们常见的认证登录程序,包括密码和账号的登录。
PUT请求:用于向服务器上传新的数据,或者用于更新已有资源。PUT请求也将数据放在请求的主体中。
DELETE请求:用于删除服务器上的资源。
HEAD请求:与GET请求类似,但只返回响应头部,而不返回实际的响应体。
2:HTML中常见字符的转义
#:表示锚点,在SQL注入中常用到#来进行对后面的内容进行注释。对#URL编码是%23
':常见的包裹符之一,在URL中进行编码转义是%27
":常见的包裹符之一,在URL中进行编码转义是%22
空格:空格在URL中进行编码转义是%20
&:&在URL中进行编码转义是%26,一般情况下我们要在URL中输入相关的&&符号时,就需要对其进行转义,转义的结果是%26%26
注意:web站点一般端口号是80,默认的端口号就是80,如果特殊的网站它的端口号不是80我们需要在域名或IP地址的后面加上:然后加上对应的端口号
web站点一般我们打开的页面是服务器上面的网站的index.html界面,对于大多数网站它的默认初始界面就是这个
3:HTML中的请求头、请求体和请求数据辨别方法
请求头:特点一般情况是我们对网页进行Burpsuite进行抓包后的第一行,这一行一般包括请求的方式和请求的网址
请求体:一般是在第一行请求头之后的内容,区别于请求数据的是,请求体一般会和请求数据隔一行,且请求体一般是处于请求界面(Burpsuite抓包的界面)的中间部分
请求数据:特点位置一般是在我们Burpsuite抓包界面的最后面,和请求体之间会有一空白行的分隔
五、SQL-libs中漏洞细分
SQL-libs主要涉及到的漏洞的分类如下
- 联合注入
- 报错注入
- 布尔盲注
- 延时注入
- cookie注入
- base64注入
- 宽字节注入
- 二次注入
- 堆叠注入
- XFF注入
1:联合注入
常用的函数有:
order by 主要用于表中的字段数;
union select 通过表中有多少个字段爆出数据库中指定的内容;
group_concat 查找数据库中指定的内容的名称
常用语句示例
order by示例
http://192.168.182.30/sql/Less-1/?id=1%27%20order%20by%203%23
union select示例
http://192.168.182.30/sql/Less-1/?id=-1%27%20union%20select%201,2,3%23
group_concat示例
http://192.168.182.30/sql/Less1/?id=-1%27%20union%20select%201,2,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27%23
这里只介绍一部分内容,要想详细看请看我之前发的文章:SQL闯关第一关
2:报错注入
常用的函数有:
floor()
extractvalue()
updatexml()
geometrycollection()
multipoint()
polygon()
multipolygon()
linestring()
multilinestring()
exp()
这里只介绍updatexml函数,对应的是SQL-libs中的第十七关。详细内容参考我之前发的:SQL闯关第十七关
updatexml语句示例
这里主要用于Burpsuite中的数据抓包后的界面
uname=admin&passwd=111' or updatexml(1,concat(0x7e,(select database()),0x7e),0)#&submit=Submit
详细要看SQL注入第十七关
3:布尔盲注
常用的函数有:
length()用于判断里面相关内容的字符长度;
count()常用于判断数据库中表的个数或表中字段的个数;
substr()这个函数有三个参数,使用这个函数时需要填上这三个参数,第一个参数为要查询的内容,第二个参数为查询内容的第几个,第三个参数为步长
常用语句示例
length()示例
http://192.168.182.30/sql/Less-8/?id=1' and length(database())=8%23
count()示例
http://192.168.182.30/sql/Less-8/?id=1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name = 'users')=3%23
substr()示例
http://192.168.182.30/sql/Less-8/?id=1' and substr(database(),1,1)='s'%23
这里只介绍一部分内容,要想详细看请看我之前发的文章:SQL闯关第八关
4:延时注入
常用的函数有:
if(expr(1),expr(2),expr(3))这三个参数在延迟注入中常填以下数据,第一个参数填要验证的正确的语句,第二个参数填sleep(5)代表将进程休眠5秒,第三个参数填1其实这里可以填任何的数字,我的理解是非零的数,因为非0数的布尔值为True。这个if函数的执行顺序为如果expr(1)正确就执行expr(2)不执行expr(3)。否则如果expr(1)是错误的,不执行expr(2),而选择执行expr(3)。
sleep()主要作用是休眠后再执行命令,例如sleep(5)代表先休眠5秒之后在执行之后的命令。
常用语句示例
if()示例
http://192.168.182.30/sql/Less-9/?id=1' and if(length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6,sleep(5),1)%23
sleep()示例
http://192.168.182.30/sql/Less-9/?id=1' and sleep(5)%23
这里只介绍一部分内容,要想详细看请看我之前发的文章:SQL闯关第九关
5:cookie注入
对于cookie注入而言,实验的基础在我们已经知道了一组正确的用户名和密码。之后也是登录这个账号后用Burpsuite进行抓包,在cookie的位置进行注入
这里只举一个示例
Cookie: uname=' union select 1,database(),version()%23
具体涉及到的是SQL-libs的第二十关,就是在cookie这个位置采取之前用过的函数和方法来进行爆破,第二十关采取的是联合注入的方式
6:base64注入
base64注入顾名思义就是将我们要用到的语句通过base64进行转码转义
这里可以参考SQL-libs中的二十二关
7:宽字节注入
这种注入常应用于中文数据库用的是GBK编码。
注入的原理主要是此时数据库每次当我们输入时都会先将我们输入的内容进行转义。也就是常说的%5c,而此时我们要做的是要在单引号(')之前加上%df,这个语句在GBK编码上面的含义是一个繁体的连字。因此做到了之后的闭合。
注意:在SQL-libs这个靶场上,我们知道数据库的名为security,我们在table_schema=database()的时候可以这样写,如果我们要用到的语句是table_schema='security'时要清楚这样写是错误的,需要将security进行十六进制的转义,同时要在开头加上0x,而对八进制需要在开头加上0o
8:二次注入
对于二次注入原理就是网站关于前台进行了特殊字符的过滤,而对于后台数据库没有进行再次过滤,因此出现了二次漏洞。这里可以参考第二十四关。
第二十四关主要的破解原理是先在登陆界面点击新建用户和密码。新建的用户名为admin'#,密码随便填。之后用这个新建的用户名和密码进行登录,登录后修改密码,实际上修改的就是admin的密码。
9:堆叠注入
基于以上的注入方式我们其实做到的更多的是查阅数据库的操作。而如果要实现数据库的其他操作,例如增删改,就需要用到堆叠注入。
常用的函数有
insert into
delete
常用语句示例
insert into示例
http://192.168.182.30/sql/Less-38/?id=1' ;insert into users(id,username,password) values ('38','Less-38','hello')--+
delete示例
http://192.168.182.30/sql/Less-38/?id=1' ;delete from users where id = '38' and username = 'Less-38' and password = 'hello'--+
涉及堆叠注入的关在SQL中是第三十八关
10:XFF注入
这里实验的对象为合天实验室的运行环境
合天实验室的网址为
https://www.hetianlab.com/
具体的关卡需要读者自行寻找,可以实现XFF注入。
六、常见的SQL绕过方式
我只列举几种常见的方式,有兴趣的朋友们可以去百度上搜索,这里由于要符合规定只能说到这里
大小写绕过
双写绕过
内敛注释绕过
十六进制绕过
函数绕过
反引号绕过
总结
笔者写这些不易,请读者多多关注......