[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 ,这个函数可以用来写马过狗,但一句话过狗太简单了。

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

继续学习~~

时间: 2024-08-07 08:19:53

[XCTF嘉年华体验赛](web)web2 assert函数的相关文章

assert函数和捕获异常

assert函数: C语言和C++都有一个专为调试而准备的工具函数,就是 assert()函数. 这个函数是在C语言的 assert.h 库文件里定义的,所以包含到C++程序里我们用以下语句: #include <cassert> assert()函数需要有一个参数,它将测试这个输入参数的真 or 假状态. 如果为真,Do nothing,继续往下执行! 如果为假,中断执行! 看下边演示:test.cpp #include <cassert> int main() { int i

ASSERT函数

assert宏的原型定义在<assert.h>中,其作用是假设它的条件返回错误,则终止程序运行,原型定义:  #include <assert.h>  void assert( int expression );  assert的作用是现计算表达式 expression ,假设其值为假(即为0),那么它先向stderr打印一条出错信息,  然后通过调用 abort 来终止程序执行. http://www.chongtang.me/index.php/1419 提高程序健壮性之ass

assert()函数用法总结

assert()函数用法总结 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行.请看下面的程序清单badptr.c: #include <stdio.h>

assert函数的应用场景

在SQLite的源码中,经常可以看到assert函数的身影,主要是应用于调试模式下的断言,就是判断传递进来的语句是真还是假,如果是真,继续执行,如果是假,中断,并且显示当前中断的文件以及行号.但是这里有一个问题:在发行版本上,是禁用的. 在VS的调试模式下,如果出现空指针,实际上,也会马上定位到该行空指针,并且有一个清晰的堆栈,凭什么需要多此一举??一直未曾明白. 由于尝试学习SQLite组织代码的结构和方式,并且顺便提带一下关于C++的异常处理,throw ,exception从来没有出现在我

使用ASP在IIS创建WEB站点的函数

程序代码: '=========================================================='函数介绍:创建WebSite'本函数使用ADSI,需要Administrators组用户权限'函数名称:CreateWebSite(Computer,IPAddr,PortNum,HostName,WebSiteDirectory,LogDirectory,WebSiteInfo,GuestUserName,GuestUserPass,StartOrStop)'用法

剖析ASSERT函数

 搜集与总结了assert函数的用法,记于此,以备后续与查找使用: assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息, 然后通过调用 abort 来终止程序运行. http://www.chongta

assert()函数用法总结——转

assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行.请看下面的程序清单badptr.c: #include <stdio.h>#include <a

[转载]C++Assert()函数

assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行.请看下面的程序清单badptr.c: #include <stdio.h> #include <

assert函数应用

目录 1 assert概念 2 assert作用 3 assert用法 3.1 检测调用者传过来的指针参数是否正常 3.2 判断某个变量的范围 3.3 assert只检验一个地方 3.4 不能使用改变环境的语句 1 assert概念 ??函数名:assert ??头文件:#include<assert.h> ??函数原形:void assert( int expression ) 2 assert作用 ??assert的作用是先计算expression表达式的值,如果计算结果为真,继续运行下面