相关知识点:
大部分网站通常使用addslashes()、mysql_real_escape_string()、mysql_escape_string()函数或者开启GPC的方式来防止注入,如果某处使用了urldecode或者rawurldecode函数,则会导致二次解码生成单引号而引发注入。
我们利用%2527 传入时自动解码一次编程%25,这时addslasher()等相关函数找不到单引号等符号,然后后面又进行urldecode时,解码出 单引号 从而引发注入
相关知识点:
magic_quotes_gpc(魔术引号开关)
magic_quotes_gpc函数在php中的作用是判断解析用户提交的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。
单引号(’)、双引号(”)、反斜线(\)等字符都会被加上反斜线
简单来说:magic_quotes_gpc的作用:当PHP的传参中有特殊字符就会再前面加转义字符’\’,来做一定的过滤
宽字节容易出现的地方 :数据库编码为非英文编码那么就有可能产生宽字节注入。MySql的编码设置为了SET NAMES ‘gbk’或是 SET character_set_client =gbk,这样配置会引发编码转换从而导致的注入漏洞。
宽字节注入原理:宽字节SQL注入就是PHP发送请求到MySql时使用了语句
SET NAMES ‘gbk’ 或是SET character_set_client =gbk 进行了一次编码,但是又由于一些不经意的字符集转换导致了宽字节注入。
因为我们用单引号闭合的时候,会自动被转移添加\,
小技巧:有的时候我们也可以用16进制来代替字符串
二次解码注入
知识点:PHP中常用过滤函数如addslashes()、mysql_real_escape_string()、mysql_escape_string()或者使用魔术引号GPC开关来防止注入,原理都是给单引号(’)、双引号(”)、反斜杠(\)和NULL等特殊字符前面加上反斜杠来进行转义。
但是这些函数在遇到urldecode()函数时,就会因为二次解码引发注入。urldecode()函数是对已编码的URL进行解码。引发注入的原因其实很简单,PHP本身在处理提交的数据之前会进行一次解码,例如/test.php?id=1这个URL,我们构造字符串/test.php?id=1%2527,PHP第一次解码,%25解码成了%,于是url变成了/test.php?id=%27;然后urldecode()函数又进行了一次解码,%27解码成了’,于是最终URL变成了/test.php?id=1’,单引号引发了注入。rawurldecode()也会产生同样的问题,因此这两个函数需要慎用。
xss过滤尖括号
$str = strtolower(@$_POST["keyword"]);
$str = preg_replace("//", '', $str);
input是有一个比较奇葩的payload的,那就是
这个payload会把input当做img标签来用
此处用 “ type=image src=x onerror=alert(1) “ 闭合前后双引号,构造即可
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.