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服务器变量$_SERVERphp__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

posted @   karasbai  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示