我不确定是什么问题。我认为这是一个编码问题。我想要的是
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挑战,因此,是的,该代码易受注入攻击。
中的V参数pack
采用32位无符号值(小尾数字节顺序),因此你的调用看起来像
pack('V', 0x00000041) === "A\0\0\0"
你可以使用trim去除多余的空值,例如可以使用其他选项 c
pack('c', 0x41) === "A"
trim()有效,我使用的是“ V”,因此它可以遍历整个流,即逐字接受。我非常感激。我本来应该想到的,谢谢!