iFrame Injection
- low
#引号绕过,适当闭合
http://127.0.0.1/iframei.php?ParamUrl="></iframe><script>alert("GetPass")</script><iframe&ParamWidth=250&ParamHeight=234
- mid
<!--注释绕过
"></iframe><script>alert(1)</script><!--
- high
无法绕过
总结
addslashes注入方法
- 宽字节注入
宽字节注入
- 设置数据库字符为gbk导致宽字节注入
gbk是多字节编码,两个字节代表一个汉字,而php为单字节编码,又gbk编码存在如運的编码中存在****,故php在读取運时,获取 一个\,再加上addslashes自身会对出现的 特殊字符(如 ’ ")进行转义为 ’ ,故合并之后会出现 \\ ’ ,用\ 转义\,进行绕过。 - 使用icon,mb_convert_encoding转换字符编码函数导致宽字节注入
- 编码解码导致的绕过
- url解码导致绕过addslashes
对输入字段进行两次编码,(因为一次浏览器默认会对输入内容进行一次decode),故在后端再次解码之后就会出现 ’ 进行闭合。 - base64解码导致绕过addslashes (同理)
- json编码导致绕过addslashes
addslashes之后获得 ’ json编码之后转移为 \\’
json编码绕过addslashes是因为json编码会把\转换为\\
- 注释绕过
<!--
addslashes防御方法
- 编码宽字节注入
(1)使用mysql_set_charset(GBK)指定字符集
(2)使用mysql_real_escape_string进行转义
原理是,mysql_real_escape_string与addslashes的不同之处在于其会考虑当前设置的字符集,不会出现前面e5和5c拼接为一个宽字节的问题,但是这个“当前字符集”如何确定呢?就是使用mysql_set_charset进行指定。上述的两个条件是“与”运算的关系,少一条都不行。 - 编码解码导致的绕过
对解码后的字符再次进行过滤