Warm tip: This article is reproduced from serverfault.com, please click

encoding-的PHP

(encoding - PHP)

发布于 2020-11-29 00:31:03

我不确定是什么问题。我认为这是一个编码问题。我想要的是

pack('V', 0x41) == "A"

返回true。即使mb_detect_encoding()的编码都返回ASCII码,并且两者都在回显时在屏幕上显示“ A”,但情况并非如此。真正的问题是,当打包的字符串包含在sql查询中时:

 $sql = "SELECT item_name, item_description FROM items WHERE item_name LIKE '$querystr%'";

即使打印到屏幕上的字符串是等效的,它也无法执行查询。这是我正在创建的CTF挑战,因此,是的,该代码易受注入攻击。

Questioner
neatzsche
Viewed
11
Musa 2020-11-29 08:48:19

中的V参数pack采用32位无符号值(小尾数字节顺序),因此你的调用看起来像

pack('V', 0x00000041) === "A\0\0\0"

你可以使用trim去除多余的空值,例如可以使用其他选项 c

pack('c', 0x41) === "A"