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函数在将字符串解码成数组的时候,会去掉其中转义字符。
以上两个函数相对而言较为生僻,防范的不是那么严谨,但是都是存在实例的。
实例参考链接: