零 insert注入和update注入一样
delect型和他们也差不多
就是用burp抓包改一下id就ok
一 SQL注入漏洞-基于http header的注入
什么是http header
有些时候,后台开发人员为了验证客户端头信息(比如常用的cookie验证)
或者通过http header头信息获取客户端的一些信息,比如useragent、accept字段等等。
会对客户端的http header信息进行获取并使用SQL进行处理,如果此时没有足够的安全考虑,则可能会导致基于http header的SQL Inject漏洞。
根据提示输入密码
后台对HTTP头数据进行了获取
进行了相关的数据库操作
我们通过burp的数据包进行测试
用repeater打开
修改user-agent的内容
为firefox' or updatexml(1,concat(0x7e,database()),0) or '
返回了数据库的名称
二 基于boolian的盲注
什么是盲注?
在有些情况下,后台使用了错误消息屏蔽方法(比如@ )屏蔽了报错
此时无法在根据报错信息来进行注入的判断。
这种情况下的注入,称为“盲注"
根据表现形式的不同,盲注又分为based boolean和based time两种类型
基于boolean的盲注主要表现症状
0.没有报错信息
1.不管是正确的输入,还是错误的输入,都只显示两种情况(我们可以认为是0或者1)
2.在正确的输入下,输入and 1= 1/and 1= 2发现可以判断
在尝试了之前的方法后,发现之前的方法都不行
kobe' and ascii(substr(database(),1,1))>113#
这句话的意思是将数据库名称的第一个字母是什么做判断
无输出说明为假
继续尝试
kobe' and ascii(substr(database(),1,1))=112#
有结果说明为真
对应ACSII码得知第一个字母为q
后面的以此类推
三 基于时间的盲注
如果说基于boolean的窗注在页面上还可以看到0 or 1的回显的话
那么基于time的盲注完全就啥都看不到了
但还有一个条件,就是“时间”, 通过特定的输入,判断后台执行的时间,从而确认注入
常用的Teat Payload
kobe’ and sleep(5)#
看看输入: kobe和输入kobe and sleep(5)#的区别,从而判断这里存在based time的SQL注入漏洞。
输入kobe and sleep(5)#会延时返回
说明有payload
确实有延时
输入判断语句
kobe' and if((substr(database(),1,1))='p',sleep(5),null)#
如果是就暂停五秒
如果不是就不暂停
暂停了 说明首字母是p,后面以此类推
四 SQL Inject漏洞之表(列)名的暴力破解
首先随便输入一个payload
kobe' and exists(select * from aa)#
和暴力破解流程一样
结果如下
五 宽字节注入
当后端对用户的输入做了转义时,比如利用addslashes()或mysql_escape_string()函数
此时输入id=1’其中的单引号会被转义而变成id=1\\'
这样就使得单引号无法闭合数据库中的语句,一般情况下是很难绕过的。但是有两种情况可以通过宽字节注入绕过
第一种情况是当数据库的编码为GBK时,注入格式为id=1%df',因为反斜杠\\的编码为%5c,所以参数传到后端经过转义后就会变成id=1%df%5c',其中GBK会将%df%5c编码成一个繁体字,这样反斜杠就失去了转义的效果,使得单引号逃逸出来闭合了语句
第二种情况是,若后端的代码中有转换字符编码的函数,道理其实一样,就是将用户输入的参数用宽字节去解释了,从而使单引号逃逸
随便发一个
然后抓包
再发送到repeater
修改name为
1%df'union select 1,2#
得到结果如下