php中两个函数可能导致的sql注入
sprintf
https://www.php.net/manual/zh/function.sprintf.php
漏洞demo:
<?php
$name = addslashes($_GET['a']);
$sql = "select * from '{$name}' where %d";
echo $sql . '<br>';
echo sprintf($sql,1);
意思也就是说当String $format 内容可控的时候,我们可以利用执行sprintf函数的时候来干掉\,造成单引号逃逸。
url:?a=123456%1$%27

json_decode
<?php
echo json_encode(['a'=>"123"]) . '<br>'; //用于数组json编码后的模板
$name = addslashes($_GET['a']);
echo $name . '<br>';
$post_data = json_decode(str_replace('\\','',$name),1);
var_dump($post_data);
利用json_decode函数在将字符串解码成数组的时候,会去掉其中转义字符。
以上两个函数相对而言较为生僻,防范的不是那么严谨,但是都是存在实例的。
实例参考链接:
浙公网安备 33010602011771号