Sqli-Labs 是一个印度人的开源项目平台。里面包含了基本的各种注入类型,同时又有get和post类型,以及一些基本的绕过学习。
项目地址:https://github.com/Audi-1/sqli-labs
Lesson-3 #Get - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)
运行测试环境:http://localhost/sqli-labs-master/Less-3/
输入ID参数1:http://localhost/sqli-labs-master/Less-3/?id=1 ,返回正常,继续测试陆续输入2,3,4,5,6....,均返回正常,而且随着参数ID值的改变,页面返回的name和Password的值也会出现不同。
我输入单引号进行测试:
【 http://localhost/sqli-labs-master/Less-3/?id=1%27 】
网站报出错误信息:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'') LIMIT 0,1' at line 1
根据报错的SQL语法信息:
' ' 1' ') LIMIT 0,1 '
推测SQL语句中含有(),尝试闭合:
select * from table where id = ('$ID')
当输入1' )and ('1'='1,则SQL语句变成:
select * from table where id = ('1' )and ('1'='1')
除此之外,也可以尝试截断SQL语句
当输入1') and 1=1 --+,则SQL语句变成:
select * from table where id = ('1') and 1=1 --+')
查看源码:
重点关注这段SQL查询语句:
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
通过网站的报错信息可以慢慢推断网站所用的SQL语句,在进行构造注入。
继续测试一下:
使用SQLMAP来测试一下:
SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。