WAF Bypass
Uppercase and Lowercase
Suppose the WAF filters union using str_replace():
$sql = str_replace("union", "" , $sql);This filter only filters lowercase union, so we can use things like UNION or UNion.
Repeated String
Suppose the developer uses $sql = str_replace("union", "" , $sql); and uppercase/lowercase is properly handled. We can still bypass this filter using unionunion. Note that str_replace() only removes union once, so unionunion becomes union.
Doulbe URL Encoding
If the WAF only calls urldecode() once, we can URL encode our payload twice to bypass the filter.
and/or
Suppose the WAF filters and and or:
The following payloads will be filtered:
We can bypass this filter using the following payload:
union
Suppose the WAF filters and, or, and union:
The following payloads will be filtered:
We can bypass this filter using the following payload:
The || symbol expands the scope of select, which has similar effect as union select.
where
Suppose the WAF filters and, or, union, and where:
The following payloads will be filtered:
We can bypass this filter using the following payload:
Here limit 1,1 has the same functionality as where. limit 1,1 means start from index 1 and only select 1 entry.
limit
Suppose the WAF filters and, or, union, where and limit:
The following payload will be filtered:
We can bypass this filter using the following payload:
group by
Suppose the WAF filters and, or, union, where, limit and group by:
The following payload will be filtered:
We can bypass this filter using the following payload:
select and single quote
Suppose the WAF filters and, or, union, where, limit, group by, select and single quote:
The following payload will be filtered:
We can bypass this filter using the following payload:
hex, unhex and substr
Suppose the WAF filters and, or, union, where, limit, group by, select, single quote, hex, unhex, and substr:
The following payload will be filtered:
We can bypass this filter using the following payload:
whitespace
Suppose the WAF filters and, or, union, where, limit, group by, select, single quote, hex, unhex, substr, and space:
The following payload will be filtered:
We can bypass this filter using the following payload:
Here /**/ is an empty comment, which is equivalent to a whitespace.
equal sign
Suppose the WAF filters and, or, union, where, limit, group by, select, single quote, hex, unhex, substr, space, and =:
The following payload will be filtered:
We can bypass this filter using the following payload:
Here like matches more results than =, but we can use it just like = anyway.
Last updated
Was this helpful?