BUUCTF-[GXYCTF2019]禁止套娃

题目

打开靶机后发现就一句话,burpsuite也抓不到重要信息,于是用dirsearch扫描一下

python3 dirsearch.py -u http://d61508ba-cde6-41b2-a2ca-0f69ccadb80e.node4.buuoj.cn:81/

发现了这些,盲猜为git信息泄露,使用GitHack下载源码(GitHack大佬教程

python GitHack.py http://d61508ba-cde6-41b2-a2ca-0f69ccadb80e.node4.buuoj.cn:81/.git

下载后发现就只有一个index.php文件,看一下源码:

开始审计源码,我们最终的目标是执行@eval($_GET['exp']),从这开始瞄一下大佬的wp,因为我的脚本基础差的没眼看

php正则

对于第二个if,(?R)是引用当前表达式,(?R)?这里多一个?表示可以有引用,也可以没有。引用一次正则则变成了[a-z,_]+[a-z, _]+\((?R)?\),可以迭代下去,那么它所匹配的就是print(echo(1))、a(b(c()));类似这种可以括号和字符组成的,这其实是无参数RCE比较典型的例子。

无参数RCE总结

先构建payload查看flag的位置

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

localeconv(),回显数组,第一个数组是字符"."点号

解释一下上面的参数:

pos(),传入数组,回显第一个数组的值,pos可以用current代替

所以pos(localeconv())等价于.号

而函数scandir(.)意思是以数组的形式回显当前目录下的所有文件

再配合print_r函数输出数组

flag在第四个数组里 ,我们只要想办法包涵这个文件即将flag.php调到第一个数组里或者是数组指针指向flag.php,这里有两个函数可以使用。

PHP array_reverse() 函数 (w3school.com.cn)数组反转

PHP next() 函数 (w3school.com.cn) 数组指针移动下一位

所以可以先利用函数array_reverse将数组反转,flag就在第二位了,再利用next指向第二位数组,在用文件显示包涵即可输出flag.php文件,构造payload

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

成功获取flag:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余切66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值