AI辅助生成靶场源码指南:大模型自动化生成靶场skills技巧详解

AI辅助生成靶场源码指南:大模型自动化生成靶场skills技巧详解p id main toc name tableOfConte strong 目录 strong p 一 渗透准备 1 下载安装 cursor 2 明确需求 3 修改 skills 文档 二 AI 生成 web 靶场 1 index php 2 upload vuln php 3

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



 

目录

一、渗透准备

1、下载安装cursor

2、明确需求

3、修改skills文档

二、AI生成web靶场

1、index.php

2、upload_vuln.php

3、upload_secure.php

三、渗透实战

1、不安全版本

2、安全版本


本文以upload文件上传靶场为例,讲解如何使用大模型自动化生成靶场渗透源码,聚焦两大核心场景——存在大小写绕过黑名单风险的脆弱场景与完成安全加固的防御场景,系统讲解大模型自动化渗透环境的构建方法、核心skills设计逻辑,深入剖析两个场景下的代码审计要点、渗透测试方法与安全加固方案,全程贯穿孙子兵法“知己知彼,百战不殆”的核心思想,让渗透测试与安全防御的过程,成为对这一古老谋略的现代践行,最终完成的靶场效果如下所示。

首先了解本文的核心,搭建什么样的靶场用于渗透测试。我这篇文章的核心是搭建一个“攻防一体的upload靶场”,upload文件上传的渗透与防御,本质上就是“知彼”与“知己”的博弈:渗透者通过“知彼”找到靶场的安全风险点(如大小写绕过黑名单),通过“知己”运用合适的渗透技巧突破防御;防御者通过“知彼”了解渗透者的攻击手段(如大小写绕过方法),通过“知己”弥补自身代码与配置的短板,实现安全加固。这种博弈逻辑,与《孙子兵法》中“先察后战”的谋略高度契合,也是本文实践的核心指导思想。

传统的渗透环境构建依赖人工配置,需手动搭建PHP运行环境、编写upload上传代码、配置服务器参数,过程繁琐、耗时较长,且容易出现配置错误,故而目前基本上都是下载现成的靶场进行渗透。随着大模型技术的发展,利用大模型自动化构建渗透环境,成为提升渗透测试效率、快速“知彼”的关键手段——大模型可根据用户需求,自动生成靶场代码、配置运行环境、模拟靶场场景,甚至预判潜在风险,可快速掌握靶场的核心特征,为后续的渗透测试奠定基础。

这里我以cursor为例,大家用各自的擅长的大模型即可。下载并安装cursor,如下图所示。

安装cursor后按ctrl+shift+L打开大模型,我们的目标是输入skills让其自动化构建靶场。

针对upload文件上传PHP靶场,大模型自动化构建的核心目标很简单:快速生成两个可以自由切换的场景(脆弱场景:有大小写绕过黑名单风险;加固场景:做好安全加固,能抵御大小写绕过等攻击),确保靶场的PHP运行环境、上传功能、不安全场景(包含大小写绕过风险),和真实的网站应用差不多,同时提供清晰的代码结构和运行说明,让我们不用手动配置环境,就能直接开展代码审计和渗透测试。

这里呢,我们需要将需求更加细化,比如我这里会细化如下几点要求使其给予我细化版需求生成第一版skills:

(1) 自动生成PHP上传代码(包含黑名单验证逻辑,能切换脆弱场景和加固场景);

(2)确定PHP运行环境(比如集成Apache或者Nginx、PHP版本为7.4,开启文件上传权限);

(3)自动生成场景切换脚本,方便我们对比两个场景的差异;

(4)要求大模型可以自动生成靶场说明文档,讲清楚靶场的核心风险、运行方法、测试重点,帮我们快速了解靶场情况。

需求生成skills: 创建一个PHP文件上传网站,用于网络安全教育学习。 包含两个版本: 1. 漏洞版本 - 展示大小写绕过漏洞 2. 安全版本 - 修复后的加固代码 技术要求: - 使用PHP 7.4+ - 简单的HTML上传界面 - 仅允许jpg/png/gif图片上传 - 漏洞版本:仅检查文件扩展名小写形式,可被.PHP、.Php等绕过 - 安全版本:使用strtolower() + 严格MIME类型检查 + 重命名文件 - 包含详细注释说明漏洞原理和修复方法 输出结构: - index.php(主页面,可切换漏洞/安全模式) - upload_vuln.php(漏洞版处理程序) - upload_secure.php(安全版处理程序) - README.md(使用说明和漏洞解释)

Skills就是大模型的“工具箱”,每个skill对应一项具体任务,比如生成代码、配置环境、切换场景。针对upload文件上传PHP靶场。将如上需求发给cursor,等待cursor返回出版skills文件,如下图所示。

大模型首先会解析我们输入的需求,提取关键信息:upload文件上传、PHP靶场、大小写绕过黑名单、安全加固、两个场景对比。结合网络安全的相关知识,大模型会明确我们的核心需求——不只是要一个能运行的上传靶场,更重要的是要有两个场景可以对比,方便我们学习代码审计、渗透方法和加固修复,而且靶场的不安全场景要和真实网站差不多。这时候大模型返回给我们的skills,我们不能看都不看就直接用,我们需要基于此进行修改,以让大模型后续可以基于skills生成符合我们需求的php靶场。我们先来看看大模型生成的第一个版本的skills。

--- name: php-upload-vuln-lab description: >- Builds a minimal PHP 7.4+ educational file-upload lab with vulnerable and hardened variants, HTML UI, mode switching, upload directory hardening via .htaccess, and README documentation. Use when the user asks for a file upload vulnerability lab, upload bypass education, case-sensitive extension bypass demos, or secure vs insecure PHP upload handling for cybersecurity training in an isolated authorized environment only. --- # PHP File Upload Vulnerability Lab (Education) Scope and ethics - Intended only for authorized cybersecurity education (private lab, VM, classroom). Do not deploy vulnerable code to the public internet or production. - Clearly label the vulnerable path as intentionally unsafe in UI and README. When the user requests this lab Deliver this exact file set (unless they specify otherwise): | File | Role | |------|------| | `index.php` | Simple HTML upload UI; toggle between vuln and secure mode (e.g. query param `?mode=vuln` / `?mode=secure` or radio + same page). Forms POST to the correct handler. | | `upload_vuln.php` | Vulnerable upload handler (see below). | | `upload_secure.php` | Hardened upload handler (see below). | | `README.md` | Setup (PHP 7.4+, local server), safe usage, vulnerability explanation, fix summary, and how to verify each mode. | Target runtime: PHP 7.4+. Vulnerable version (`upload_vuln.php`) - Allow only images by extension list intent: `jpg`, `jpeg`, `png`, `gif`. - Intentional flaw: validate extension using only a lowercase comparison of the *original* filename extension (e.g. compare `pathinfo($name, PATHINFO_EXTENSION)` after `strtolower()` only on the comparison side while still accepting the raw upload name—or equivalently, reject only when lowercase extension is not in the list but fail to normalize the stored filename, so `.PHP` / `.Php` slip through). Goal: demonstrate case-based blacklist/bypass when validation does not normalize before decision + storage. - Use detailed comments in code explaining: why case matters on case-preserving filesystems / how Apache+PHP may still execute `.Php` depending on config; difference between display extension and stored name. Secure version (`upload_secure.php`) - Normalize extension decision with `strtolower()` on the extension used for validation. - Add strict content check: prefer `finfo_open(FILEINFO_MIME_TYPE)` / `finfo_file()` on the temp upload path; allow only image MIME types aligned with `jpg/png/gif` (e.g. `image/jpeg`, `image/png`, `image/gif`). Reject unknown/broad types. - Rename stored files: random name + forced safe extension (e.g. `.jpg`), never trust original basename for the final path. - Comment briefly: MIME can be spoofed; this is defense in depth alongside extension checks, size limits, and non-executable upload directory. Upload directory and `.htaccess` - Use a dedicated directory (e.g. `uploads/`). Ensure PHP writes it (document `chmod` in README for lab use). - `.htaccess` in that directory should disable script execution, e.g. `php_flag engine off` where supported, and/or `RemoveHandler` / `RemoveType` / ` 
   
    
     
       ` patterns appropriate for Apache. Note in README: effectiveness depends on Apache + AllowOverride; other stacks (nginx) need different config—keep README honest. `index.php` UI - Minimal HTML: file input, submit, visible mode indicator (vuln vs secure). - CSRF not required for a local lab unless user asks; mention in README that real apps need sessions/CSRF. README.md contents - How to run (`php -S localhost:8080` or Apache vhost). - Attack narrative for vuln mode (e.g. upload `shell.PHP`). - Mitigations list for secure mode. - Legal/ethical disclaimer: lab only, authorized use. Implementation notes for the agent - Keep code short and readable; prioritize teaching comments over features. - Do not add unrelated vulnerabilities unless requested. - If the user wants nginx/IIS, add a short appendix instead of bloating SKILL.md (use `reference.md`). 
     

最初我就直接拿这个skills直接生成靶场,但是发现大小写绕过使用的白名单检查,虽然代码仍有大小写绕过风险,但是这个问题会导致严重偏离我的期望,因为白名单大小写绕过没有意义,我们是无法渗透成功的。

于是,我们需要对skills进行修改,告知大模型靶场需要使用黑名单大小写绕过,而且在Windows环境中搭建,其中web服务是使用Nginx服务启动的,最终我修改后的skills如下所示。

--- name: php-upload-vuln-lab description: >- Builds a PHP 7.4+ file upload training lab with vulnerable and secure modes. The vulnerable mode demonstrates case-sensitive PHP blacklist bypass (.php blocked but .PHP/.Php/.pHP bypass). The secure mode uses strtolower() extension normalization, strict finfo MIME validation, random file renaming, and nginx-compatible guidance without .htaccess. Use when the user requests a file upload vulnerability lab, secure-vs-vulnerable comparison, or upload bypass education in an authorized isolated environment. --- # PHP 文件上传漏洞学习靶场 Skill(无 .htaccess 版本) 目标 生成一个用于网络安全教育学习的 PHP 文件上传靶场,包含: 1. 漏洞版本(`upload_vuln.php`):演示黑名单大小写绕过 2. 安全版本(`upload_secure.php`):修复后的加固实现 仅用于授权实验环境(本地/课堂/靶场),禁止用于公网或生产环境。 --- 交付文件结构(必须) text index.php upload_vuln.php upload_secure.php README.md 注意:本 Skill 明确不生成 .htaccess,默认面向 nginx(如 phpstudy+nginx)环境。 技术约束(必须满足) PHP 7.4+ 简单 HTML 上传界面 页面提示“仅允许 jpg/png/gif 图片上传” 漏洞版:仅拦截小写 php,不做大小写统一,可被 .PHP/.Php/.pHP 绕过 安全版:strtolower() + finfo 严格 MIME + 随机重命名 代码有清晰注释,说明漏洞原理与修复方案 所有页面统一 UTF-8 编码,避免中文乱码 兼容 phpstudy+nginx,避免上传后直接访问受限目录导致 403 文件生成规范 1) index.php 必须实现: 通过 ?mode=vuln 和 ?mode=secure 切换模式 根据模式设置表单 action: vuln -> upload_vuln.php secure -> upload_secure.php 页面包含: 当前模式标识 “仅允许 jpg/png/gif 图片上传”提示 风险说明:漏洞模式为故意不安全代码 
   
    
     
       可选显示安全模式上传成功提示(如 ?uploaded=1) 2) upload_vuln.php(漏洞版) 必须体现漏洞点: $extension = pathinfo($originalName, PATHINFO_EXTENSION); if ($extension === 'php') { exit('禁止上传 php 文件'); } 要求: 不使用 strtolower()(故意保留漏洞) 清晰注释说明绕过结果: test.php 被拦截 test.PHP / test.PhP / test.pHP 可绕过 故意不做 MIME 校验与重命名(用于教学对照) 包含基础异常处理(请求方法、上传失败、目录不存在等) 输出统一 UTF-8 3) upload_secure.php(安全版) 必须实现加固: 扩展名统一小写: $extension = strtolower(pathinfo($originalName, PATHINFO_EXTENSION)); 扩展名白名单: 仅允许 jpg/png/gif MIME 严格校验: 用 finfo_open(FILEINFO_MIME_TYPE) + finfo_file() 仅允许 image/jpeg、image/png、image/gif 随机重命名保存: bin2hex(random_bytes(16)) . '.' . $extension 上传成功后建议: header('Location: index.php?mode=secure&uploaded=1'); 避免直接输出上传目录链接,减少 nginx 403 误解 输出统一 UTF-8 README 要求(必须) README.md 必须包含: 项目简介(漏洞版 vs 安全版) 环境要求(PHP 7.4+,推荐 phpstudy+nginx) 目录结构(无 .htaccess) 启动方式 漏洞原理(黑名单大小写绕过) 修复说明(strtolower + MIME + 重命名) nginx 说明: 不使用 .htaccess 需在 nginx 配置中限制上传目录脚本执行 编码说明: 文件保存为 UTF-8(无 BOM) 响应头 charset=UTF-8 法律与伦理声明(仅授权学习) nginx 安全提示(写入 README) 必须提醒用户: 代码质量要求 所有 PHP 文件 declare(strict_types=1); 变量命名清晰 错误提示友好且不泄露系统路径 注释简洁明确 代码可直接运行 触发示例(供用户调用) 当用户说以下请求时应用本 Skill: “创建 PHP 文件上传漏洞靶场(不要 .htaccess)” “做一个 nginx 场景的上传漏洞和修复对照” “演示 .PHP 大小写绕过并给安全版” 安全边界 只生成教学用途代码 不生成未授权攻击脚本 强调授权、隔离、合法使用 
     

给出大模型指令,使其生成Web靶场,具体指令为“请根据 php-upload-vuln-lab Skill,在当前项目根目录生成完整靶场:创建 index.php、upload_vuln.php、upload_secure.php、uploads/和 README.md,严格按照 Skill 里描述的“php 黑名单大小写绕过”漏洞版和加固版实现。

项目的主页面,提供用户界面和功能切换。包含两个模式选项:不安全模式和安全模式。用户可通过URL参数 ?mode=vuln 或 ?mode=secure 切换不同的文件上传处理逻辑。页面显示上传表单,引导用户选择文件并提交,根据选择的模式调用对应的处理脚本,是整个教学靶场的入口点和用户交互界面。

 
   
    
      
   
    
      
       
       PHP 文件上传教学靶场 
        
       

PHP 文件上传教学靶场

说明:仅用于授权的本地/靶场/课堂环境,禁止部署到公网或生产环境。

模式切换

当前模式:

安全模式上传成功(已保存并重命名)。

上传文件

系统提示:仅允许 jpg / png / gif 图片上传

漏洞模式教学点:仅做「php 黑名单」且只拦截小写 php, 未统一大小写,因此 .PHP / .Php / .pHP 可绕过。

漏洞版本的文件上传处理脚本,用于教学演示文件上传安全风险。支持文件上传功能,但存在多个安全问题:仅拦截小写"php"扩展名(可被大小写绕过)、未进行MIME类型检查、直接使用原始文件名保存、缺少文件内容验证。当用户上传文件时,仅进行基本的错误检查,然后直接保存到uploads目录,允许上传恶意文件如WebShell,演示了不安全的文件上传实现方式。

 
   
    
     返回'; exit; } if (!isset($_FILES['file']) || !is_array($_FILES['file'])) { http_response_code(400); echo '未收到上传文件。返回'; exit; } $file = $_FILES['file']; $errorCode = (int)($file['error'] ?? UPLOAD_ERR_NO_FILE); if ($errorCode !== UPLOAD_ERR_OK) { http_response_code(400); echo '上传失败,错误码:' . $errorCode . '。返回'; exit; } $tmpPath = (string)($file['tmp_name'] ?? ''); $originalName = (string)($file['name'] ?? ''); if ($tmpPath === '' || !is_uploaded_file($tmpPath)) { http_response_code(400); echo '无效的临时文件。返回'; exit; } if (!is_dir(UPLOAD_DIR)) { http_response_code(500); echo '上传目录不存在,请先创建 uploads 目录并确保可写。返回'; exit; } $extension = (string)pathinfo($originalName, PATHINFO_EXTENSION); / * 漏洞点:只拦截小写 php * - test.php -> 拒绝 * - test.PHP -> 绕过 * - test.PhP -> 绕过 * - test.pHP -> 绕过 */ if ($extension === 'php') { http_response_code(400); echo '禁止上传 php 文件(漏洞版仅拦截小写 php,可被大小写绕过)。返回'; exit; } // 漏洞版故意:不做 MIME 检测、不重命名,直接使用原始文件名保存 $saveName = basename($originalName); $destination = UPLOAD_DIR . '/' . $saveName; if (!move_uploaded_file($tmpPath, $destination)) { http_response_code(500); echo '文件保存失败。返回'; exit; } echo ' 
   
    
      
      漏洞模式上传结果'; echo ' 
      

漏洞模式上传成功

'; echo '

提示:页面写着“仅允许 jpg/png/gif 图片上传”,但漏洞版后端仅做了错误的 php 黑名单检查。

'; echo '

文件名:' . htmlspecialchars($saveName, ENT_QUOTES, 'UTF-8') . '

'; echo '

保存路径:uploads/' . htmlspecialchars($saveName, ENT_QUOTES, 'UTF-8') . '

'; echo '

返回漏洞模式

'; echo '';

安全版本的文件上传处理脚本,用于教学演示安全的文件上传实现。实现了完整的安全措施:使用 strtolower() 统一扩展名大小写、严格的扩展名白名单(仅允许jpg/png/gif)、使用 finfo 检测真实MIME类型、随机重命名保存文件。当用户上传文件时,会进行多重验证,确保仅允许安全的图片文件上传,展示了文件上传功能的**安全实践。

 
   
    
     返回'; exit; } if (!isset($_FILES['file']) || !is_array($_FILES['file'])) { http_response_code(400); echo '未收到上传文件。返回'; exit; } $file = $_FILES['file']; $errorCode = (int)($file['error'] ?? UPLOAD_ERR_NO_FILE); if ($errorCode !== UPLOAD_ERR_OK) { http_response_code(400); echo '上传失败,错误码:' . $errorCode . '。返回'; exit; } $tmpPath = (string)($file['tmp_name'] ?? ''); $originalName = (string)($file['name'] ?? ''); if ($tmpPath === '' || !is_uploaded_file($tmpPath)) { http_response_code(400); echo '无效的临时文件。返回'; exit; } if (!is_dir(UPLOAD_DIR)) { http_response_code(500); echo '上传目录不存在,请先创建 uploads 目录并确保可写。返回'; exit; } $extension = strtolower((string)pathinfo($originalName, PATHINFO_EXTENSION)); if (!in_array($extension, ALLOWED_EXTENSIONS, true)) // MIME 检测(不要使用 $_FILES['type'],不可信) $finfo = finfo_open(FILEINFO_MIME_TYPE); if ($finfo === false) { http_response_code(500); echo '无法初始化 MIME 检测。返回';
    exit;
}

try {
    $mimeType = finfo_file($finfo, $tmpPath);
} finally {
    finfo_close($finfo);
}

if ($mimeType === false || !in_array($mimeType, ALLOWED_MIME_TYPES, true)) {
    http_response_code(400);
    echo '文件类型不合法(MIME):' . htmlspecialchars((string)$mimeType, ENT_QUOTES, 'UTF-8')
        . '。返回'; exit; } // 随机重命名保存 $randomName = bin2hex(random_bytes(16)) . '.' . $extension; $destination = UPLOAD_DIR . '/' . $randomName; if (!move_uploaded_file($tmpPath, $destination)) { http_response_code(500); echo '文件保存失败。返回'; exit; } // 不输出 uploads 链接,避免 nginx 对 uploads 的访问控制导致 403 header('Location: index.php?mode=secure&uploaded=1'); exit;

将靶场源码放到phpstudy的源码根目录中,并启动小皮的Web服务(Nginx),打开网站如下所示,默认就是不安全版本模式,选择后缀为phP的脚本文件上传。

如下所示上传成功,构造脚本的URL地址。

http://127.0.0.1/php-upload-vuln-lab/uploads/ljn_pass6.phP

访问恶意脚本,如下所示渗透成功。

打开网站进入安全模式,如下所示,选择后缀为phP的脚本文件上传,如下所示。

点击上传后提示失败,具体如下所示,防御成功。

小讯
上一篇 2026-04-15 15:19
下一篇 2026-04-15 15:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/264284.html