首页 > 代码库 > [XCTF嘉年华体验赛](web)web2 assert函数

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

0x00 题目分析


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

 

技术分享

访问 .git/ ,页面存在。

技术分享

使用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‘)) ;//

 

技术分享

网上找到一种这样的:

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

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

 

技术分享

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

技术分享

0x02 小结


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

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

继续学习~~

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