Web安全原理剖析(四)——报错注入攻击[通俗易懂]

Web安全原理剖析(四)——报错注入攻击[通俗易懂]报错注入攻击

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用


1.8 报错注入攻击

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

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


Web安全原理剖析(四)——报错注入攻击[通俗易懂]


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

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


Web安全原理剖析(四)——报错注入攻击[通俗易懂]


图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所示。


Web安全原理剖析(四)——报错注入攻击[通俗易懂]


图30 利用updatexml获取user()

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

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


Web安全原理剖析(四)——报错注入攻击[通俗易懂]


图31 利用updatexml获取database()

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

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

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


Web安全原理剖析(四)——报错注入攻击[通俗易懂]


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

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

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


Web安全原理剖析(四)——报错注入攻击[通俗易懂]


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


1.9 报错注入代码分析

  在报错注入页面中,程序获取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()等函数将要查询的内容输出到页面上。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187611.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Jmeter下载安装配置—测试小白

    Jmeter下载安装配置—测试小白一,进入官网:http://jmeter.apache.org/1.第一步进入官网如下图2.选择进行下载,下载下来为一个压缩包,解压即可。3.我下载的是jmeter4.0版本,对应jdk1.8。然后就进行解压。个人认为要注意3点:1.解压之后压缩包叫apache-jmeter-4.0.zip,如是src.zip后缀的都不对,打开之后会报错不可用,因为里面缺少我们下一步将要配置的环境变量.jar文件…

    2022年5月29日
    34
  • 简单介绍一下Spring / java中Spring框架7大核心模块的作用,如何在面试中侃侃而谈?/ Spring体系常用项目一览

    简单介绍一下Spring / java中Spring框架7大核心模块的作用,如何在面试中侃侃而谈?/ Spring体系常用项目一览合法程序媛2017-10-2309:35优效学院,名师执教,学习更优效,IT在线教育领导者。三人行必有我师,人生是需要不断学习的,在这里我们相遇就是缘分,欢迎大家加群—-四六零五七零八二四—-让我们共同进步!希望各位可以看完这篇文章,也欢迎大家在下面留言讨论,天冷了,也动动手指转发收藏一下,谢谢大家!Spring是一个开源的控制反转(InversionofC

    2022年7月8日
    20
  • SpringBoot 出现 Content type ‘application/x-www-form-urlencoded;charset=UTF-8’ not supported

    SpringBoot 出现 Content type ‘application/x-www-form-urlencoded;charset=UTF-8’ not supported问题点1:如果Content-Type设置为“application/x-www-form-urlencoded;charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果前端POST请求中的body是Json对象的话,会报上述错误。请求中传JSON时设置的Content-Type如果是application/json或者text/json时,…

    2022年7月27日
    74
  • 使用docker启动mysql8.0挂载配置文件_docker的特点

    使用docker启动mysql8.0挂载配置文件_docker的特点使用docker启动MySQL8.0因为mysql8对登录密码的加密方式做了调整,所以每次安装完mysql都要去翻翻教程,特此记录下,方便以后查看docker启动脚本#!/bin/bashdockerrm-fmysql8dockerrun–namemysql8\-eMYSQL_ROOT_PASSWORD=123456\-v/usr/local/mysql/logs:/logs\-v/usr/local/mysql/data:/var/lib/mys

    2022年10月5日
    4
  • rpm卸载安装包「建议收藏」

    rpm卸载安装包「建议收藏」rpm卸载安装包之rpm-qa|grep-invid|sort目标首先本人是想要卸载通过下面命令查询到的安装包rpm-qa|grep-invid|sort找到两个文件但是由于想卸载(base)[root@localhostname]#rpm-qa|grep-invid|sortnvidia-detect-510.47.03-1.el7.elrepo.x86_64nvidia-driver-local-repo-rhel7-510.47.03-1.0-1.x86_

    2022年9月22日
    3
  • 计算机启动显示安装程序正在启动服务,安装程序正在启动服务需要多久

    计算机启动显示安装程序正在启动服务,安装程序正在启动服务需要多久大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。安装程序正在启动服务需要多久,这个主要看软件大小,安装完成就会自动运行的,要是系统不断的提示,这个就不一定了,时间可能会很久的,需要耐心等待。程序,香港和台湾对英文procedure的中文翻译,编程语言中的procedure在大陆翻译为“过程”,在港台和其他领域则翻译为“程序”。在大陆于计算机科学、电脑工程、电子工程、电机工程、机…

    2022年6月29日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号