SQL注入之 base64注入攻击

本文分析了一种特殊的SQL注入攻击——Base64注入。通过分析代码实现过程,揭示了如何利用未过滤的base64解码参数进行SQL注入攻击,并展示了具体的实验步骤和技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1 base64注入代码分析

2 实验过程


1 base64注入代码分析

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

<?php
header("Content-Type:text/html;charset=utf8");
$con=mysqli_connect("localhost","root","qwer","security");
mysqli_set_charset($con,'utf8');
if(!$con){
  echo "Connect failed : ".mysqli_connect_error();
}
 
$id=base64_decode($_GET['id']);
$sql="select * from users where id=".$id;
$result=mysqli_query($con,$sql);
$row=mysqli_fetch_array($result);
 
if ($row) {
	echo "id:".$row['id']."<br>";
	echo "用户名:".$row['username']."<br>";
	echo "密码:".$row['password']."<br>";
}else{
	print_r(mysqli_error());
}
 
echo '<hr><br>';
echo "查询的语句是:$sql";
?>

由于代码没有过滤解码后的$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检测。

数据库

2 实验过程

base64编码解码一大堆在线网站或者burpsuite的Decoder模块都可以。

从URL中可以看出,ID参数经过base64编码(%3d是=的URL编码格式),解码后发现ID为1


尝试加上一个单引号并一起转成base64编码, 如图所示。
当访问id=1'编码后的网址 base64.php?id=MSc%3d), 页面返回错误。


1 and 1=1和1 and 1= 2的base64编码分别为MSBhbmQgMT0x和MSBhbmQgMT0y,再次访问id=MSBhbmQgMT0x和
id= MSBhbmQgMT0y,返回结果如下两图所示。

从返回结果可以看到,访问id=1 and 1= 1时,页面返回与id= 1相同的结果,而访问id=1 and 1=2时,页面返回与id= 1不同的结果,所以该网页存在SQL注入漏洞。接着,使用order by查询字段,使用Union方法完成此次注入。

https://www.jianshu.com/p/8a11bf55aaee (后续的跟这个链接即可👌)

假设所有的表名全部查询完毕,已知库名和表名,开始查询字段名,这里以emails表名为例,union注入的查询语句如下所示。在2的位置粘贴语句,括号还是不可少,结果如图所示,获取了emails表的第一个字段名。

id=-1 union select 1,(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0, 1),3

对id=后面的字符串进行base64编码,得到

id=LTEgdW5pb24gc2VsZWN0IDEsKHNlbGVjdCBjb2x1bW5fbmFtZSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIHdoZXJlIHRhYmxlX3NjaGVtYT0nc2VjdXJpdHknIGFuZCB0YWJsZV9uYW1lPSdlbWFpbHMnIGxpbWl0IDAsIDEpLDM=

 

### 实验环境准备 为了进行DVWA SQL注入攻击实验,需先搭建好测试平台。确保已安装并配置了DVWA(Damn Vulnerable Web Application),并将安全级别设置为低以便于初次学习[^1]。 ```bash # 启动DVWA服务 service apache2 start ``` ### 测试SQL注入漏洞 当安全等级设为`Low`时,可直接输入恶意字符串进入ID参数框中提交请求。例如,在URL栏里修改`id`值为`' or '1'='1`,这将绕过正常的查询条件使所有记录都符合条件从而被显示出来[^4]。 对于更复杂的场景如`Medium`及以上难度,则可能需要用到自动化工具辅助分析。比如使用Sqlmap这款强大的开源渗透测试工具来探测以及利用SQL注入缺陷: ```python import os os.system(''' python sqlmap.py \ -u "http://192.168.171.10/vulnerabilities/sqli/?id=1&Submit=Submit#" \ --cookie="security_level=0; PHPSESSID=ho05i9sr7evr6chgqs3d0d3n50; security=low" \ -D dvwa --tables ''') ``` 上述命令指定了目标网址、会话Cookie,并告诉sqlmap去枚举指定数据库中的表格名称[^2]。 ### 构造有效载荷 了解如何构建特定的有效载荷是掌握SQL注入技术的关键部分之一。考虑如下情况:假设存在一个简单的SELECT查询语句用于检索给定ID对应的数据条目;此时可以通过附加额外的逻辑表达式改变原有意图达到控制输出的目的。像这样的一句话就可以实现这一点:`select * from users where user_id = 1 OR 1=1 /*`[^3]。 ### 验证结果反馈机制 值得注意的是,不同应用对于异常状况有不同的处理方式——有的可能会抛出详细的错误提示帮助调试程序同时也暴露了内部结构信息;而另一些则仅给出模糊的消息或者根本没有回应。因此,在实际操作过程中要善于观察页面变化规律以推测背后发生的交互过程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值