代码审计从入门到放弃(三)

机电学院浏览次数:  发布时间:2019-09-11

  本次是phplimit这道题,本篇文章提供了3种解法,即如何利用无参数函数进行RCE/任意文件读取

  代码会将$_GET[code]中满足正则/[^W]+((?R)?)/的部分,替换为空,然后查看是否剩下的部分强等于;

  我们只能input函数,但函数中不能使用参数,否则判断句右边经过替换,将不止剩余分号;

  那么有没有办法通过无参数函数,达到RCE的目的呢?答案显然是不可能的,没有参数,怎么传递我们需要执行的指令呢?

  所以我们的目标也变得很明确:通过某种无参数函数获取指定位置的变量value,达到RCE的目的。

  那么思路又变得清晰了,http header就是我们的突破口。我们可以更改header中的各项属性,以及其value。

  那么现在思路又进一步变为:寻找nginx函数,以获取http headers

  这里我们可以转换一下思路,之间获取http headers,我们能获取非常多的属性,也就是说我们的可修改位置非常多,相当于一个面。但其实我们只要能够获取,并修改1条属性就够了,例如cookie或是X-Forward-For等等……

  文件会话管理器仅允许会话 ID 中使用以下字符:a-z A-Z 0-9 ,(逗号)和 - 减号)

  我们通过php session的控制,达成了RCE的目的,那么我们有没有其他类似的方法呢?

  此函数返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、  天将图库杭州市率先推出30辆纯电动换电出租。服务器变量和用户定义的变量。

  为什么一定要RCE呢?这个题既然flag放在文件里,我们能不能直接读文件就行?

  之前的方法都基于可以进行RCE,可以说我们是把题目难度又加大了,实际上,我们只进行任意文件读取即可

  即可发现flag文件,那么问题又回到之前,如果取数组指定位置的值,我们需要取的位置是第3个,我们有的方法如下

  但此时,我们的值变为了bool值,我们为了遍历目录,需要让他变回来,所以我们先进行目录上跳

  这种开放式的题目非常有趣,可以帮助我们了解许多php黑魔法和各种组合,我相信方法远不止这3种,欢迎各位讨论!