一步一步学习 Web 安全 3.2 二次编码注入

原理

二次编码和上一节宽字节注入异曲同工,同样也是构造数据绕过转义。代码使用转义防御后又使用了 urldecode 函数进行编码,利用urldecode() 与 PHP 本身处理编码时,两者配合失误,可以构造数据消灭『 \ 』。

具体操作是:
输入『 ' 』会被转义成『 \' 』,而我们可以知道『 ' 』的编码是『%27』,那我们就不直接输入『 ' 』,而是通过构造编码来输入:
语句:?id=1%2527 union select 1,2,3,『%25』会被编码成『%』,于是这条语句变成了:?id=1%27 union select 1,2,3,后台代码没有发现『 ' 』,所以不会触发转义,数据库执行时『%27』才被编码成『 ' 』,这时已经没有转义代码,于是 SQL 注入语句正常执行:?id=1' union select 1,2,3

你可能感兴趣的:(一步一步学习 Web 安全 3.2 二次编码注入)