您当前的位置: 首页 > 

姜小孩.

暂无认证

  • 5浏览

    0关注

    51博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

[GXYCTF2019]禁止套娃

姜小孩. 发布时间:2022-03-23 22:41:06 ,浏览量:5

怠惰了十天,终于续更了,我这些天断断续续的在学着审计TP框架,进度很慢,尽量快些写成博客发出来吧

[GXYCTF2019]禁止套娃

Buu就一点不好,就是没法扫目录,看了robots.txt看了F12看了源代码,什么提示也没有,搜了一下发现是.git源码泄露,

上工具!GitHack下载源码!

代码分析:

  1. GET传入一个exp参数,传入的参数不为空就执行这个参数的内容

  2. 过滤了几个伪协议data:、filter:、php:、phar:

  3. 一开始不了解,通过这个题查到了(?R)?是代表递归调用当前表达式,所以只能无参数绕过(?R是引用当前表达式,后面再加?是递归调用)

  4. 过滤了一些关键字,限制一些函数的使用

传🐎getshell不行的话,那我们就只能读flag了,在源码中可以看到flag就在flag.php,所以我们的思路就应该是读取flag.php,首先要知道当前目录下的文件。

根据3了解到exp必须是a(b());这种类型才行,那我们不能ls了(呜呜呜

找新的函数,找到了scandir()函数,它可以扫描当前目录下的文件,我们看看是如何构造才能符合这个题吧

再看个函数localeconv() ,函数返回一包含本地数字及货币格式信息的数组。而数组的第一项就是.current()返回数组中的当前单元,默认取第一个值。

scandir函数的返回值是一个数组

current()/pos():函数返回数组中的当前元素,初始指向第一个元素。

还有一个知识点:

打印current(localeconv())永远都是打印一个点

那我们第一步查看当前目录文件就是:

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

现在的问题就变成了怎么看到flag.php,我们观察到他在数组的倒数第二个位置!这里我们就用到了两个函数next()和array_reverse() 

next()

函数将内部指针指向数组中的下一个元素,并输出。

arrar_reverse()

arrar_reverse()函数以反向的元素顺序返回数组

我们看到array知道这是一个数组如果用一个逆序排序,再用一个next不就可以用highlight_file输出了吗!

所以最后的payload:

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

感谢今天不怠惰的自己,感谢BUU提供题!

关注
打赏
1652274937
查看更多评论
立即登录/注册

微信扫码登录

0.0444s