欢迎来到代码驿站!

当前位置:首页 >

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

时间:2023-01-06 09:04:01|栏目:|点击:

Base64注入攻击

Base64攻击的测试地址:http://127.0.0.1/sqli/base64.php?id=MQ%3d%3d。

从URL中可以看出,ID参数经过Base64编码(%3d是=的URL编码格式),解码后发现ID为1,尝试加上一个单引号并一起转换成Base64编码,如图59所示。

图59 对1'进行Base64编码

当访问id=1'编码后的网址时(http://127.0.0.1/sqli/base64.php?id=MSc%3d),页面返回错误。1 and 1=1和1 and 1=2的Base64编码分别为MSBhbmQgMT0x和MSBhbmQgMT0y,再次访问id=MSBhbmQgMT0x和id=MSBhbmQgMT0y,返回结果如图60和图61所示。

图60 访问id=MSBhbmQgMT0x的结果

图61 访问id=MSBhbmQgMT0y的结果

从返回结果可以看到,访问od=1 and 1=1时,页面返回与id=1相同的结果,而访问od=1 and 1=2时,页面返回与id=1不同的结果,所以该网页存在SQL注入漏洞。

接着,使用order by查询字段,使用union方法完成此次注入。

Base64注入代码分析

在Base64注入页面中,程序获取GET参数ID,利用base_decode()对参数ID进行Base64解码,然后直接将解码后的$id拼接到select语句中进行查询。通过while循环将查询结果输出到页面,代码如下所示。

<?php
$id = base64_decode(@$_GET['id']);
$con = mysqli_connect("localhost","root","root","test");
// 检测连接
if (mysqli_connect_errno())
{
    echo "连接失败: " . mysqli_connect_error();
}
mysqli_select_db($con,'test');

$sql = "select * from users where id=$id";
$result = mysqli_query($con,$sql);

if (!$result)
{
    exit("error");
}
while($row = mysqli_fetch_array($result))
{
    echo "ID:".$row['id']."<br >";
    echo "user:".$row['username']."<br >";	
    echo "pass:".$row['password']."<br >";
    echo "<hr>";
}
mysqli_close($con);
echo "now use ".$sql."<hr>";
?>

由于代码没有过滤解码后的$id,且将$id直接拼接到SQl语句中,所以存在SQL注入漏洞。当访问id=1 union select 1,2,3--+(访问时,先进行Base64编码)时,执行的SQL语句为:

select * from users where `id`=1 union select 1,2,3--+

此时SQL语句可以分为select * from users where `id`=1和union select 1,2,3两条,利用第二条语句(Union查询)就可以获取数据库中的数据。

这种攻击方式还有其他利用场景,例如,如果有WAF,则WAF会对传输中的参数ID进行检查,但由于传输中的ID经过Base64编码,所以此时WAF很有可能检测不到危险代码,进而绕过了WAF检测。

上一篇:R语言如何实现多元线性回归

栏    目:

下一篇:React 的调和算法Diffing 算法策略详解

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

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

推荐教程

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

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

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

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

Copyright © 2020 代码驿站 版权所有