PHP反序列化题目中对符号|PHP反序列化题目中对符号 “&“ 的记录

【PHP反序列化题目中对符号|PHP反序列化题目中对符号 “&“ 的记录】近日在研习那本《CTF特训营》,发现了一些知识盲区,特此记录
参考:
https://skysec.top/2017/06/20/GCTF的一道php反序列化题目
https://github.com/paul-axe/ctf
PHP因为其和C的密切关系其语言特性和C有十分相似的地方,其中一个就是这个PHP引用(&)
在反序列化题目中通过引用可以达到绕过某些过滤的目的
这里摘抄一个代码片段
PHP反序列化题目中对符号|PHP反序列化题目中对符号 “&“ 的记录
文章图片



大体的意思就是需要构造一个不被转义的php tag(即绕过htmlspecialchars()),从renderVars方法中可以看到,返回的$ content在过滤前会被 $ this->view[“content”]赋值。


如果我们能在赋值之前控制$this->view,将其变成字符串而非数组,那么便可以绕过过滤(如图8-7所示),这里需要用到2017 GCTF中的一个方法(见参考)。


这个方法利用的是“&”符,比如“ $ this->vars[“text”]=& $ this->view; ”,此时只要改变 $ text的值,即可达到更改 $ this->view的目的。


需要注意的是有无&符号反序列化的结果当然是不同的,但这个不同在表面是看不出来的
PHP反序列化题目中对符号|PHP反序列化题目中对符号 “&“ 的记录
文章图片



这个不同在hex里才能有所体现


PHP反序列化题目中对符号|PHP反序列化题目中对符号 “&“ 的记录
文章图片

因此生成payload时应该直接urlencode,防止粘贴来粘贴去的有些应用直接给你去掉了

    推荐阅读