NSSCTF [鹤城杯 2021]EasyP
小刀剌屁股,开了眼了,所以说搞渗透的心眼一个比一个脏,今天这题就是。先看题目
进去就是一串代码
<?php include 'utils.php'; if (isset($_POST['guess'])) { $guess = (string) $_POST['guess']; if ($guess === $secret) { $message = 'Congratulations! The flag is: ' . $flag; } else { $message = 'Wrong. Try Again'; } } if (preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])) { exit("hacker :)"); } if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){ exit("hacker :)"); } if (isset($_GET['show_source'])) { highlight_file(basename($_SERVER['PHP_SELF'])); exit(); }else{ show_source(__FILE__); } ?>
代码审计,一些函数不认识,看见个preg_match过滤就想着直接用php://fliter冲了,毫无疑问,失败,然后试了一下,/?show_source,直接爆hacker!好家伙,我还没传呢,不行,先去看看那几个不认识的函数到底是啥。
1.$_SERVER['PHP_SELF'— 获取当前正在执行脚本的文件名,他会将URL中路径地址截断出来,例如URL为http://localhost/test/7ghost.php/,那么 $_SERVER[“PHP_SELF”] 对应的值即为:/test/7ghost.php/,并且他只会截断路径地址出来,不会包含URL中给的一些值,比如URL为http://localhost/test/7ghost.php?par=123&par2=333 而 $_SERVER[“PHP_SELF”] 的值为 /test/7ghost.php
下面是我看的两篇大佬的文章
PHP服务器变量$_SERVER,php__self,PHP中 $_SERVER[“PHP_SELF”] 作用和含义
2.basename
basename()是PHP中的一个函数,它的作用是返回一个路径中的文件名部分,例如: Basename()是php中的一个函数,它的作用是返回一个路径中的文件名部分,例如:
$path = " /var/ww/html/index.php " ; $filename = basename( $path ) ; echo $filename; //输出: index.php
在上面的例子中,basename()函数将'$path变量中的路径/var/oow/html/index.php转换为文件名index.php并存储在 $filename 变量中。如果在调用basename()函数时提供了第二个参数,那么该参数将被作为文件扩展名来过滤掉文件名中的扩展名部分。
综上,我之前完全就是错误的方向,这题是直接过滤的URL中的内容,只要传递参数就会包含show_source就会爆hacker,所以没办法使用php伪协议来做。他在开始给了一个utils.php,flag应该就在这个文件里面,但是他直接过滤掉了utlis.php,所以我们没法直接前往这个页面,现在就是要想办法来绕过这个过滤,并且要给show_source一个值使它不能为空。这边确实搞不懂怎么绕过,只能去网上找大佬了。
看了大佬的文章之后,知道了只需要在需要绕过的内容后面加上非ASCLL码 使其后面的内容被识别成乱码就行,例如%88,中文,韩文,日文,UTF-8或其他的非ASCLl字符集,而show_resource可以使用show.resource或者show[resource来绕过,这部分我写的不是特别清楚,建议大家可以移步大佬的文章看看,他做了详细演示。最后得到下面的playload。
playload:/index.php/utils.php/%88?show[source=1
成功拿到flag
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!