SQL注入之 base64注入攻击

目录

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=

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值