是很简单的知识,大佬勿喷
1.整数型注入
整数型注入判断条件: 1 and 1=1 回显正常,1 and 1=2 回显错误 基本可以判断为整数型注入。
接下来以简单的题目为例,靶场为CTFHub技能树-Web-SQL注入部分
判断为整数型注入,接下来判断列数
1 order by 3时无回显,因此列数为2
当然我们也可以使用union来判断列数
1 union select 1,2时有回显,也可以判断出列数为2
接下来通过database函数查询数据库名,
这里id为-1的原因是回显只有一条,因此需要让前面的查询返回不了数据
接下来查询数据表,在MySQL5.0以上的版本有一个名为information_schema的数据库里面存放了所有数据库的信息,比如表名、列名等,我们可以通过它来查询sqli库的表名
这里返回了sqli的一个数据表flag,但有时候一个数据库不一定只包含一个数据表,我们可以通过limit函数指定输出第几个,也可以用group_concat()将多条数据组合成字符串输出。这里使用group_concat()
这里输出了这个数据库两个表的名称,接下来查询列名
知道了所有信息后,我们可以查询flag了
2.字符型注入
判断条件:1′ and ‘1’=’1 返回正常,1′ and ‘1’=’2 返回错误
判断为字符型注入,接下来我们就需要解决后面引号的问题
可以通过在最后面加上’;#’的方式解决,’;’代表语句结束,’#’可以将后面的引号注释掉
然后其他和整数型基本一样
3.报错注入
只显示查询成功或者失败
我们可以通过报错注入得到结果,下面介绍利用extractvalue()函数报错注入的办法,语法如下:
extractvalue(XML_document, XPath_string);
第一个参数XML_document为String格式,表示XML文档对象的名称。第二个参数Xpath_string表示Xpath格式的字符串。
extractvalue()函数的作用是从目标XML中返回包含所查询值的字符串。当第二个参数不符合Xpath语法时,会产生报错信息,并且将查询结果放在报错信息内。该漏洞在MySQL版本号大于5.1.5时存在。
下面进行实战。
这里取出的Flag并不完整,是因为extractvalue()函数的最长报错为32位,可以使用字符串截取函数获取剩下的字符