| 关键词: 编码 字符 进制 seLeCt Unicode 字符串 关键字 引号 函数 大小写 |
SQL注入绕过大小写绕过 根据应用程序的过滤规则,通常会对恶意关键字设置黑名单,如果存在恶意关键字,应用程序就会退出运行。但在过滤规则中可能存在过滤不完整或只过滤小写或大小的情况,没有针对大小写组合进行过滤,导致可以通过大小写混写来绕过关键字过滤! 双写关键字绕过 编码绕过 双重URL编码绕过(有些过滤规则并未对参数进行解码,而程序处理时会解码!) URL编码: ![]() 构造: 16进制编码 MySQL数据库可以识别16进制数据,会对其进行自动转换! PHP配置开启了GPC,会自动对单引号进行转义,所以将注入的数据转换为16进制,就不需要使用单引号了! 16进制编码后: Unicode编码绕过 Unicode编码: 形式:“\u”或者是“%u”加上4位16进制Unicode码值! IIS中间件可以识别Unicode字符,当URL中存在Unicode字符时,IIS会自动进行转换! ![]() ASCII编码: char()函数可以将字符转换为ASCII码 内联注释绕过: MySQL会执行/! .../中语句! /! 50010/:50010表示5.00.10 MySQL版本号 当MySQL数据库的实际版本号大于内联注释中的版本号时,就会执行内联注释内的语句! 空格过滤绕过: 会将空格加入黑名单!可以使用制表符,换行符,括号、反引号,/**/等来代替空格! 换行符,不可见字符,需要url编码! ![]() 其他: and可替换为&& or可替换为|| =转换为like,greatest,between 等价函数与命令: hex()、bin() ==> ascii() SQL注入防御
pdo mysqli (语法结构已经生成了,参数传进来的都当做字符串字面值!) 但某些场景只能采用字符串拼接的方式,这时要严格检查参数的数据类型!
该函数会将 name 中包含的一些特殊字符进行编码,这样 sql 引擎就不会将name中的字符串当成sql命令来进行语法分析了!
白名单或黑名单过滤
PHP配置: |
| 本文出处: https://www.toutiao.com/a6885606119067091467/ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|