[XCTF嘉年华体验赛](web)web2 assert函数

0x00 题目分析


浏览一遍页面,在about页面,获得如下信息


[XCTF嘉年华体验赛](web)web2 assert函数_第1张图片

访问 .git/ ,页面存在。

[XCTF嘉年华体验赛](web)web2 assert函数_第2张图片

使用githack扒下来。得到源码,进行代码审计。

分析得到:

1.flag在flag页面,要看源码才能看到。

2. 参数过滤了 ../ 也就是限定了只能在本目录

3. exists函数 对文件的存在进行判定。


0X01 解题思路


理清思路,要看源码,有哪几种方法。

1.系统命令执行,cat 等函数

2.函数执行,show_source 等

3.将文件打包 ,下载下来。

这里最有可能的就是函数执行了,虽然下面有一个  “require_once” 但是由于上面两个语句的限制,不存在远程包含。

将代码扔进软件自动审计。



很显然,关键就在assert函数,网上查找相关资料。

函数介绍参考以下页面:

https://www.douban.com/note/217557007/

对这个函数的理解就是,这个函数会执行括号里面的语句,括号里面的句子的布尔真值不是true时候,就会提示warning。

下面是对这个函数的测试。



当为true的时候就没有提示。


所以,这一题。

注意闭合前后单引号,括号等。可得参数应为 

page=1' ) == (show_source('templates/flag.php')) ;//


[XCTF嘉年华体验赛](web)web2 assert函数_第3张图片

网上找到一种这样的:

page=' and  die(highlight_file('templates/flag.php')) or '

这种写法的是利用第二个assert,最后的句子为:


执行了三个语句,里面那个 “or” 也可替换为“and”

[XCTF嘉年华体验赛](web)web2 assert函数_第4张图片

0x02 小结


神奇的php函数:assert ,这个函数可以用来写马过狗,但一句话过狗太简单了。

有什么问题不先问问神奇的海螺呢?

继续学习~~

你可能感兴趣的:([XCTF嘉年华体验赛](web)web2 assert函数)