iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Web网络安全分析二次注入攻击原理详解
  • 222
分享到

Web网络安全分析二次注入攻击原理详解

2024-04-02 19:04:59 222人浏览 独家记忆
摘要

目录二次注入攻击二次注入代码分析二次注入攻击 二次注入攻击的测试地址:Http://127.0.0.1/sqli/double1.PHP?username=test 和 ht

二次注入攻击

二次注入攻击的测试地址:Http://127.0.0.1/sqli/double1.PHP?username=test 和 http://127.0.0.1/sqli/double2.php?id=1。 其中,double1.php页面的功能是注册用户名,也是插入SQL语句的地方;double2.php页面的功能是通过参数ID读取用户名和用户信息。

第一步,访问double1.php?username=test',如图40所示。

 

图40 注册用户名test'

从页面返回结果可以看到用户名test'对用的ID为9,访问double2.PHP?id=9,结果如图41所示。

 

图40 访问test'的信息

从返回结果可以看到服务端返回了Mysql的错误(多了一个单引号引起的语法错误),这时回到第一步,先访问double1.php?username=test' order by 1--+,获取一个新的id=10,当再次访问double2.php?id=10时,页面返回空白;再次尝试,访问double1.php?username=test' order by 10--+,获取一个新的id=11,当再次访问double2.php?id=11时,页面返回错误信息(Unknown column ‘10' in ‘order clause'),如图42所示。

 

图42 访问order by 10的结果

这说明空白页面就是正常返回,通过不断地尝试,笔者判断出数据库中一共有3个字段。

访问double1.php?username=test' uNIOn select 1,2,3--+,获取一个新id=12,再访问double2.php?id=12,发现页面返回了union select中的1和2字段,结果如图43所示。

 

图43 使用Union语句的结果

在2或3的位置,插入我们的语句,比如访问double1.php?username=test' union select 1,user(),3--+,获得新的id=13,再访问double2.php?id=13,得到user()的结果,如图44所示,使用此方法就可以获取数据库中的数据。

 

图44 利用二次注入获取数据

二次注入代码分析

二次注入中double1.php页面的代码如下所示,实现了简单的用户注册功能,程序获取到GET参数username的参数passWord,然后将username和password拼接到SQL语句,使用insert语句插入到数据库中。由于参数username使用addslashes进行转义(转义了单引号,导致单引号无法闭合),参数password进行了MD5哈希,所以此处不存在SQL注入漏洞。


<?php header('Content-type:text/html;charset=utf-8');
$con=mysqli_connect("localhost","root","root","test");
if (mysqli_connect_errno())
{
    echo "连接失败: " . mysqli_connect_error();
}
$username = @$_GET['username'];
$password = @$_GET['password'];
$result = mysqli_query($con,"insert into users(`username`,`password`) values ('".addslashes($username)."','".md5($password)."')");
echo "新的id为:".mysqli_insert_id($con);
?>

当访问username=test'&password=123456时,执行的SQL语句为:


insert into users(`username`,`password`) values ('test\'','e10adc3949ba59abbe56e057f20f883e')

从图45中的数据库里可以看到,插入的用户是test'。

 

图45 插入到数据库中的数据

在二次注入中double2.php中的代码如下所示。首先将GET参数ID转换成int类型(防止拼接到SQL语句时,存在SQL注入漏洞),然后到users表中获取ID对应的username,接着到person表中查询username对应的数据。


<?php header('Content-type:text/html;charset=utf-8');
$con=mysqli_connect("localhost","root","root","test");
if (mysqli_connect_errno())
{
    echo "连接失败: " . mysqli_connect_error();
}
$id = intval(@$_GET['id']);

$result = mysqli_query($con,"select * from users where `id`=".$id);
$row = mysqli_fetch_array($result);

$username = $row['username'];
$result2 = mysqli_query($con,"select * from person where `username`='".$username."'");
if (!$result2)
{
    echo mysqli_error($con);
    exit();
}
if($row2 = mysqli_fetch_array($result2))
{
    echo $row2['username'] . " : " . $row2['money'];

}
else
{
    echo mysqli_error($con);
}
?>

但是此处没有对$username进行转义,在第一步中我们注册的用户名是test',此时执行的SQL语句为:


select * from users where `username`='test''

单引号被带入SQL语句中,由于多了一个单引号,所以页面会报错。

以上就是WEB网络安全分析二次注入攻击原理详解的详细内容,更多关于Web网络安全二次注入攻击的资料请关注编程网其它相关文章!

--结束END--

本文标题: Web网络安全分析二次注入攻击原理详解

本文链接: https://www.lsjlt.com/news/156216.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言怎么计算字符串长度
    在C语言中,可以使用内置的strlen()函数来计算字符串的长度。该函数位于string.h头文件中。以下是一个示例代码: #inc...
    99+
    2024-05-14
    c语言
  • c语言怎么判断三个数的大小
    可以通过比较三个数之间的大小关系来判断它们的大小。以下是一个示例代码: #include <stdio.h> int ...
    99+
    2024-05-14
    c语言
  • c++排序函数sort怎么使用
    在C++中,使用sort函数对容器中的元素进行排序,可以按照默认的升序排列,也可以自定义排序规则。 下面是一个简单的例子,对一个ve...
    99+
    2024-05-14
    c++
  • c++中string的compare函数怎么使用
    在C++中,可以使用string的compare函数来比较两个string对象的大小。该函数的原型如下: int compare(c...
    99+
    2024-05-14
    c++
  • c++中string的compare函数有什么用
    c++中string的compare函数用于比较两个字符串的大小关系。该函数返回一个整数值,表示两个字符串的比较结果。 具体来说,如...
    99+
    2024-05-14
    c++
  • c++中print函数的功能有哪些
    在C++中,通常使用std::cout来进行输出操作,而不是使用print函数。std::cout是C++标准库中的一个输出流对象,...
    99+
    2024-05-14
    c++
  • c语言数据结构怎么使用
    在C语言中,数据结构可以通过定义结构体来实现。以下是一些常见的数据结构的使用方法示例: 链表: #include <std...
    99+
    2024-05-14
    c语言
  • c++中print函数的用法是什么
    在C++中没有内置的print函数,但可以使用cout来输出内容到控制台。cout是C++标准库中的一个输出流对象,可以使用<...
    99+
    2024-05-14
    c++
  • c++中concept的用法是什么
    在C++20中,Concept是一种新的语言特性,用于定义类型要求和约束。Concept可以被用来约束函数模板、类模板和普通函数的参...
    99+
    2024-05-14
    c++
  • c++中concept的作用是什么
    在C++中,concept的作用是定义一种通用的约束,用于限制模板参数的类型范围。通过使用concept,可以在编译时对模板参数进行...
    99+
    2024-05-14
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作