3-参数提交注入

明确参数类型

  • 数字,字符,搜索,Json等
  • sql语句中字符串要用引号包裹,因此在注入中如果为字符型(变量为字符串类型)就需要进行引号的闭合
  • 其中sql语句干扰(闭合)符号: '(单引号),"(双引号),%,)(括号),}(大括号)等,具体需看写法

判断参数数据类型

  • 理论上来说,只有数值型和字符型两种注入类型。
    • 通过+1、-1、and 1=1、and 1=2、注释符。与其各种变种如与各种符号结合的and 1=1、and '1'='1等等判断参数数据类型。

举例

  • id=1 and 1=1回显正常 id=1 and1=2回显错误(判断为整形)
  • id=1 and 1=1和id=1 and 1=2回显正常(判断为字符型接下来判断闭合方式)
    • id=1' and '1'='1回显正确id=1' and '1'='2回显错误(判断为【'】闭合)
    • id=1" and "1"="1 回显正常 id=1" and "1"="2回显错误(判断为【"】闭合)
  • 以上注入不成功的时候尝试1%df’ 此为宽字节注入

字符型

  • 前台页面输入的参数是「字符串」
  • 字符可以使用单引号包裹,也可以使用双引号包裹。
  • 根据包裹字符串的「引号」不同,字符型注入可以分为:
    • 单引号字符型注入
    • 双引号字符型注入
    • 带有括号的注入
      • SQL的语法,支持使用一个或多个「括号」包裹参数,使得这两个基础的注入类型存在一些变种。
        • a. 数值型+括号的注入:使用括号包裹数值型参数
        • b. 单引号字符串+括号的注入:使用括号和单引号包裹参数
        • c. 双引号字符串+括号的注入使用括号和双引号包裹参数
select \* from user where id = (1);
select \* from user where id = ((1));

select \* from user where username = ('zhangsan');
select \* from user where username = (('zhangsan'));

select \* from user where username = ("zhangsan");

请求方法

  • GET, POST,COOKIE,REQUEST(全部接收,接收get,post,cookie),HTTP头等
  • php中的$_SERVER['xxx']获取某些信息
    • 示例:$_SERVER['argv']:传递给该脚本的参数
    • $_SERVER['REQUEST_METHOD']:访问页面时的请求方法
    • $_SERVER['REMOTE_PORT']:端口
    • 如果该参数代入到sql语句中,则可能可以利用,称为HTTP头部注入,通常需要括号闭合
  • POST注入一般发生在有表单的情况下

HTTP头部参数数据注入测试?????

like模糊查询

  • 示例:select * from xxx where name like '%lisa%'
  • %在这里起到通配符的作用

注释符

  • 注释符可以将后面的语句注释掉,防止干扰导致报错,在注入时使用注释符,主要是为了消除原始查询中剩余的部分,防止语法错误
  • --空格是比较通用的注释符,mysql的专属注释符是#
    • --+通常在url中,因为在url中+会被解析成空格,在post提交中最好还是使用--空格或者#
  • 若应用过滤空格,可用/**/注释符替代

有账号和密码

  • 可以只在一个输入,也可以两个都输入,后者最好两个都输入一样的,或者在账号输入结尾加上#''
posted @ 2025-03-27 21:36  micryfotctf  阅读(36)  评论(0)    收藏  举报