无参函数得读取

1.源码展示

<?php
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {    
    eval($_GET['code']);
} else {
    show_source(__FILE__);
}

这里我们需要注意一下:正则表达式的意思为只能执行函数,但不能设置参数

2.使用函数

1.implode() — 用字符串连接数组元素
2.reset() — 将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值,即重置所有值
3.get_defined_vars() — 返回由所有已定义变量所组成的数组,包含调用 get_defined_vars() 作用4.域内所有已定义的变量、环境变量、服务器变量、用户定义变量列表
5.readfile — 读取文件并写入到输出缓冲
6.getcwd() — 取得当前工作目录
7.dirname() — 返回 path 的父目录。当参数path中没有 / 时,返回 .
8.chdir() — 改变目录,成功返回1
9.scandir() — 列出指定路径中的文件和目录,‘.’代表当前目录,'..'代表上级目录
10.array_reverse() — 接受数组 array 作为输入并返回一个单元为相反顺序的新数组
11.next() — 返回的是下一个数组单元的值并将数组指针向前移动了一位
12.current() - 返回数组中的当前值
13.end() - 将数组的内部指针指向最后一个单元
14.prev() - 将数组的内部指针倒回一位
15.each() - 返回数组中当前的键/值对并将数组指针向前移动一步
16.localtime() — 取得本地时间
17time() — 返回当前的 Unix 时间戳,从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数

3.步骤一

问题:如何列出当前的目录下的文件

关键点:获取 ' . '这个符号,然后使用scandir来列出当前目录下的文件

使用getcwd来获取当前文件的路径,然后通过chdir将工作目录切换到getcwd路径,chdir执行成功后,会返回1这个值。

然后再用dirname来接受1这个值,当dirname的path路径中没有'/'时,会返回一个' . '。

此时使用scandir来接受' . ',即可扫描出当前目录下的文件

当想要找的flag.txt文件不在此目录时,可以搭配使用dirname和chdir切换目录

获取' . '的另一种方式:使用chr(46),

可以使用chr(current(localtime(time())))来获取,Array[0]的值跟随当地时间的秒钟,因此是可以获取到46,但是不一定回一次成功。

4步骤二(方法一)

问题:如何去控制输出数组单元的位置

我们获取了一个以当前目录下文件为值的一个数组,然后通过current、next、pre、end和array_reverse来控制数组输出哪个单元值,但是控制的范围有限,只能控制到首尾各两个数组单元

5步骤二(方法二)


问题:如何绕过WAF,达到随意传值

首先使用get_defined_vars获取了所有定义的变量,然后使用reset函数重置所有变量,只留下了一个通过get传参过来的1变量,最后使用implode拼接字符串,由此绕过了只能用函数,不能定义参数的WAF,变相的完成了一个可以随意传参的目的

此时,将print改为eval就可以随意执行函数了。

即:

6.总结

1.使用dirname获取' . ',是因为当dirname的path参数中没有'/'时,它会认为没有父目录,所以返回的当前目录' . '
2.返回值
返回 path 的父目录。如果在path中没有斜线,则返回一个点('.'),表示当前目录。否则返回的是把path中结尾的/component(最后一个斜线以及后面部分)去掉之后的字符串。

3.绕过WAF的方法是使用无参数函数的返回值来代表该code变量,然后控制返回的值为我们能够修改的变量,因此WAF检查的全是无参数函数,但是代码执行函数后,其值就变成了我们所能够控制的变量值

  • 23
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值