我正在尝试了解如何通过addslashes
在 PHP 和 MySQL 中出于教育目的来攻击网站。
在阅读了这个主题和这个主题之后,我试图了解它如何绕过类似0xbf27
可以0xbf5c27
通过 using转换为的东西addslashes
。
所以我手动执行一个查询来设置字符集。
set character set 'gbk';
用于此目的的字符必须뼧
是bf27
。根据他们在上述主题中所说的,它必须转换为类似的东西,bf5c27
但是当我在实验室中使用这样的 PHP 代码对其进行测试时:
$query = "SELECT first_name, last_name FROM users WHERE user_id = '".addslashes($id)."';";
echo $query;
$result = mysql_query($query) or die( '<pre>' . mysql_error() . '</pre>' );
当我在我的文本字段中插入时뼧
,执行的确切查询是:
SELECT first_name, last_name FROM users WHERE user_id = '뼧';
所以似乎没有什么特别的事情发生!
在此之后,我尝试构建另一个 PHP 脚本以了解发生了什么,因此我构建了一个没有任何 MySQL 执行(test.php)的简单脚本,例如:
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php
$command = $_REQUEST[ 'id' ];;
$output = addslashes($command);
echo "<pre>$output</pre>"; ?>
</body>
</html>
然后我使用如下 URL 执行文件:
http://127.0.0.1/test.php?id=뼧
如果你看到上面的 PHP 代码,它会回显:
뼧
以上3个字符的十六进制代码为:
eb bc a7
好吧,我只是想想发生了什么,
我的问题是:
它向我展示了什么
뼧
?(这似乎有些不寻常,因为它不包含类似的东西5c
or27
?为什么第一个脚本没有显示类似上述三个字符的内容
echo $query;
?我怎样才能真正像他们描述的那样执行它(在上述 2 个主题中)?
更新 1: 感谢Goktay Kaykusuz所说,我知道我的编码有问题。它的 POC 是我在终端上对其进行测试,结果如下:
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<pre>뼧</pre> </body>
</html>
所以我知道它将结果转换为 UTF8(在 Chrome 中)但在终端中正常工作。
但是问题仍然存在,因为它无需任何奇妙的绕过即可工作(这正是一个简单的字符串应该是的。)