GET基于报错的SQL注入
SQL注入分类
GET基于报错的SQL注入发现
你先下载sqli,还有phpstudy集成环境
上述你之前都玩过
浏览器输入ip/sqli
你会看到类似于树的分支一样的东西
当中第一个Less1就是今天我们要学的
还有后面几个带有Error
重点看那行黄字
然后浏览器输入ip/sqli/Less-1/?id=1
回车
界面就变了
数字可以自行改变
接下来后面加一个单引号
再次回车
’‘14‘’LIMIT 0,1’ at line 1’
先去掉左右单引号
‘14‘’LIMIT 0,1’ at line 1
然后再去掉14左右单引号
这是由于由于你输的是14’
结果:输入14是对的,但是输入14’是错的
所以猜测应该是字符型注入
原语句
select * from admin where id=‘id’ limit 0,1
为什么呢?
因为输入14’后,放回sql语句中就凭白无故多出一个引号’
所以肯定报错
基于数字型报错
上面学的是基于字符型报错
现在来看基于数字型报错
浏览器输入
IP/sqli/Less-2/?id=1’
之后报错
错误为 'LIMIT 0,1
多出了一个单引号
猜测原sql语句为
select * from admin where id=id limit 0,1
基于单引号加括号的报错数字型注入
浏览器输入IP/sqli/Less-2/?id=1正确
输入IP/sqli/Less-2/?id=1’错误
错误为
’1‘’)LIMIT 0,1
由于有个后括号
所以前面也有一个前括号
去掉1’左右单引号
最后sql语句为
select * from admin where id=(‘id’) limit 0,1
浏览器输入ip/sqli/Less-3/?id=1’) --%20就成功了
%20表示空格
基于双引号字符型报错注入
id=1’还是id=1)))都正确
因为它是字符型输入
把你的输入都当成字符串处理了
你可以输入id=1“或id=1"
反斜杠的作用就是转义,不当做字符串处理,当作实际sql语句处理
我们来讨论id=1
分析自己来
最后结果
select * from admin where id=(“id”) limit 0,1
GET基于报错的SQL注入利用
我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据。
如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。
ORDER BY ASE 升序排序
我们选择上述的第一种情况进行测试
原语句
select * from admin where id=‘id’ limit 0,1
浏览器输入ip/sqil/Less-1/?id=1 order by 15 并无反应,始终显示成功
接下来输入ip/sqil/Less-1/?id=1’ order by 15 --+ 显示失败
id中的1’ order by 15 --+写到了下面sql语句中的id后两个引号之内
比较难理解,自己想吧
原sql语句变为
select *from admin where id=’id‘ order by 10 --+’ limit 0,1
然后浏览器在输入ip/sqil/Less-1/?id=1’ order by 3 --+显示成功
所以一个行中有三个字段
UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行
浏览器输入id=0’ UNION SELECT 1,user(),database() --+
结果如下图
你可以上上面那种图的几个非常长的命令纳入一下格式
/?id=复制粘贴到这
利用sqlmap测试
batch意思就是使用默认设置
不然一会儿一会儿就会让你选择
测试完之后,得到数据库名
你在命令后面加上数据库名在测试
然后得到表名
再加上表明继续测试
最得到字段名
继续测试
最后得到字段中的内容