[CTFHub] 2021-第四届红帽杯网络安全大赛-Web-find_it

[CTFHub] 2021-第四届红帽杯网络安全大赛-Web-find_it

看群里说CTFHub上复现了, 我来看看

本来想按照红帽杯的套路来试一下,发现phpinfo里莫得flag了

只能想想其他办法咯



#Really easy...

$file=fopen("flag.php","r") or die("Unable 2 open!");

$I_know_you_wanna_but_i_will_not_give_you_hhh = fread($file,filesize("flag.php"));


$hack=fopen("hack.php","w") or die("Unable 2 open");

$a=$_GET['code'];

if(preg_match('/system|eval|exec|base|compress|chr|ord|str|replace|pack|assert|preg|replace|create|function|call|\~|\^|\`|flag|cat|tac|more|tail|echo|require|include|proc|open|read|shell|file|put|get|contents|dir|link|dl|var|dump/',$a)){
     
	die("you die");
}
if(strlen($a)>33){
     
	die("nonono.");
}
fwrite($hack,$a);
fwrite($hack,$I_know_you_wanna_but_i_will_not_give_you_hhh);

fclose($file);
fclose($hack);
?>

preg_match()过滤了eval但是!!!!!

Eval它没ban

所以我们可以写’大’马

构造payload:

/?code=

蚁剑连马

拿到flag:

[CTFHub] 2021-第四届红帽杯网络安全大赛-Web-find_it_第1张图片

但是作为菜鸡

我还是要重新思考一下这道题的思路:

代码中有几个函数需要注意一下

比如fopen(),fwrite(),fread()

fread() 函数读取文件
$I_know_you_wanna_but_i_will_not_give_you_hhh = fread($file,filesize("flag.php"));

也就是说,这里已经读到了flag

$a=$_GET['code'];
fwrite($hack,$a);
fwrite($hack,$I_know_you_wanna_but_i_will_not_give_you_hhh);
这里又都写到了hack.php

所以也就是说,我们再绕通配符写马的时候,flag也被传进了hack.php中

但是为什么看不到呢(具体我也不知道,知道的大哥哥可以告诉我学习一下)

但是我想到了另外一个函数show_source()

show_source() 函数对文件进行语法高亮显示。

随机构造payload:

/?code=
也没有被ban的项,正常传入

然后访问hack.php

flag他就出来了。。。。

同时还有我传入的payload

搞一波骚操作!

[CTFHub] 2021-第四届红帽杯网络安全大赛-Web-find_it_第2张图片

所以,今天又学到了新姿势~~~~

你可能感兴趣的:(CTF)