第一部分课堂笔记一、XSS 漏洞概述1.1 什么是 XSS术语说明XSSCross-Site Scripting跨站脚本攻击本质恶意脚本被浏览器当作合法 HTML/JS 解析执行成因对用户输入未做过滤或未做输出转义1.2 XSS 三种类型对比类型存储方式数据库参与影响范围反射型 XSS不存储URL 参数直接反射❌仅当前用户存储型 XSS存入数据库持久化存储✅所有访问用户DOM型 XSS纯客户端操作 DOM 树❌当前用户反射型 XSS恶意脚本通过URL 参数传递给服务器后端$_GET获取后未处理直接拼接到 HTML像镜子一样从服务器反射回用户浏览器存储型 XSS恶意脚本存入数据库其他用户访问时从数据库读取并执行危害最大—— 自动化传播影响所有访问者DOM型 XSS完全在客户端执行不经过服务器通过修改DOM 树来执行恶意脚本攻击者构造恶意 URL受害者点击触发1.3 XSS 利用三条件用户输入可控浏览器能解析执行恶意代码有回显机制攻击者能看到结果二、PHP 基础2.1 $_GET 传参// URL: level1.php?name张三$str$_GET[name];// $str 张三GET 参数在 URL?后面多个参数用连接参数明文显示安全性低2.2 htmlspecialchars() 函数$strscriptalert(1)/script;echohtmlspecialchars($str);// 输出lt;scriptgt;alert(1)lt;/scriptgt;// 浏览器不会执行只显示为文本字符实体编码lt;gt;quot;#039;或apos;⚠️ 旧版本默认只编码双引号不编码单引号三、XSS 绕过技巧3.1 引号闭合绕过!-- 原始代码 --inputvalue用户输入!-- 攻击者输入 onclickalert(1) --inputvalueonclickalert(1)提前闭合双引号跳出 value 属性用onclick/onfocus等事件执行代码3.2 大小写绕过!-- 过滤了 on 但未做大小写转换 --INPUTONFOCUSalert(1)3.3 双写绕过过滤 on → 输入 oonn → 删除 on → 剩下 on 过滤 script → 输入 scrscriptipt → 删除 script → 剩下 script3.4 javascript:伪协议ahrefjavascript:alert(1)点击/a3.5 事件属性注入事件触发条件onclick点击时onfocus获得焦点时onerror加载错误时onload加载完成时3.6 编码绕过Unicode 编码对特殊字符编码绕过过滤绕过要满足能骗过后端校验 能被浏览器解码不同编码方式效果不同需要反复测试3.7 注释符绕过javascript:alert(123)//http:用//把后面的内容变成注释解决协议冲突3.8 换行符绕过URL 换行符编码%0a HTML 中将换行符解析为空格四、一句话木马WebShell4.1 什么是 一句话木马?phpeval($_POST[cmd]);?极简恶意代码通过一个文件控制服务器核心eval()函数 —— 将参数作为 PHP 代码执行4.2 从代码执行到系统命令// 攻击者传入system(whoami)// eval() 执行后等价于system(whoami);system()函数执行系统命令本质代码执行 → 系统命令执行4.3 常用 WebShell 管理工具工具说明蚁剑现代 WebShell 管理工具冰蝎加密流量免杀性强菜刀经典老牌工具4.4 Windows 实时保护会自动删除一句话木马文件需关闭实时保护和防火墙关闭后会再次自动开启五、文件上传漏洞5.1 攻击流程攻击者上传恶意文件(.php) ↓ 绕过前端校验改后缀/抓包改请求 ↓ 文件存入服务器 ↓ 必须知道存储路径才能利用5.2 常见绕过方式改后缀test.php→test.png抓包改请求用 Burp Suite 拦截后改回.php前端校验不可靠用户可轻易修改5.3 关键点上传成功 ≠ 可利用还需知道存储路径实际路径与预期路径可能不同六、环境配置6.1 常见工具工具用途phpstudyPHP 集成环境DVWAWeb 安全靶场皮卡丘 (pikachu)XSS 练习靶场XSS LabsXSS 专项练习Burp Suite抓包代理工具6.2 数据库连接排查步骤检查PHP 版本如切换到 7.3检查端口号默认 3306可能为 3307检查密码是否一致检查配置文件如inc-config.inc.php区分本地环境和 Ubuntu 环境6.3 常用命令# 重启 Nginxcdsbin ./nginx-sreload# 查看历史会话 (Open Code)opencode session list opencode session-ssession_id七、HTTP 请求头字段利用关卡操作目标说明第11关Referer头修改来源页面标识第12关User-Agent头修改客户端标识第13关Cookie修改 Cookie 信息八、各关卡要点速查关卡考察点关键提示1GET 传参正确页面传参2无过滤输出直接注入 script3htmlspecialchars单引号/双引号差异4函数功能理解看源码分析5大小写/事件绕过不能使用 on 事件6关键词插入下划线大写字母绕过7单次替换过滤双写绕过8引号实体化her 属性/javascript:9http:// 校验协议头 注释绕过10隐藏表单值移除隐藏属性11Referer 修改Burp Suite 抓包12User-Agent 修改T-ua 字段13Cookie 修改T-cookie 字段14简单无特殊限制15页面嵌套iframe 思路16空格/斜线被替换%0a 换行符绕过第二部分面试题一、XSS 基础概念Q1: 什么是 XSS 攻击全称是什么A:XSS 全称是Cross-Site Scripting跨站脚本攻击。攻击者将恶意脚本注入到网页中当其他用户访问时浏览器会执行这些恶意代码从而达到攻击目的。Q2: XSS 攻击产生的原因是什么A:根本原因是对用户输入的数据没有做充分的过滤和转义处理导致恶意代码被浏览器当作合法 HTML/JavaScript 解析执行。Q3: XSS 分为哪三种类型有什么区别类型存储数据库影响范围反射型不存储URL 参数反射❌仅当前用户存储型存入数据库持久化✅所有访问用户DOM型纯客户端不经过服务器❌当前用户Q4: 存储型 XSS 为什么比反射型 XSS 危害更大A:存储型 XSS 的恶意代码会持久化存储在服务器数据库中所有访问该页面的用户都会自动触发不需要攻击者持续介入传播范围更广、影响更大。二、XSS 利用与绕过Q5: 反射型 XSS 的攻击流程是怎样的A:攻击者构造恶意URL → 受害者点击 → 浏览器向服务器发送请求 → 服务器将恶意参数拼接到HTML中返回 → 浏览器执行恶意脚本Q6: 前端校验如 maxlength能否防止 XSS为什么A:不能。前端校验很容易被绕过通过浏览器开发者工具直接删除或修改限制属性通过 Burp Suite 等代理工具拦截请求绕过前端校验Q7: htmlspecialchars() 函数的作用是什么A:将 HTML 特殊字符、、、等转换为 HTML 实体编码使其在浏览器中以普通文本显示不会被解析为 HTML 标签从而防止 XSS 攻击。Q8: 如何使用 htmlspecialchars() 时需要注意什么A:注意引号处理。旧版本默认只转义双引号不转义单引号需要通过参数显式指定。建议明确设置ENT_QUOTES参数来同时编码单引号和双引号。Q9: 列举几种常见的 XSS 绕过方法。A:大小写绕过SCRIPT、ONFOCUS双写绕过scrscriptipt→ 过滤后变成script引号闭合 onclickalert(1)javascript:伪协议a hrefjavascript:alert(1)事件属性注入onfocus、onerror、onclick编码绕过Unicode 编码、HTML 实体编码注释绕过javascript:alert(1)//http:换行符绕过%0a替代空格Q10: URL 中 javascript: 伪协议遇到 http: 冲突怎么解决A:使用双斜线注释符//将后面的 http: 变成注释javascript:alert(123)//http:三、一句话木马Q11: 什么是一句话木马A:一种极简的恶意代码通常只有一行。核心是使用eval()等动态代码执行函数将攻击者传入的参数当作代码执行。典型示例?phpeval($_POST[cmd]);?Q12: 一句话木马如何将代码执行转为系统命令执行A:通过传入system()函数调用如system(whoami)eval()会将其作为 PHP 代码执行从而执行系统命令。Q13: 常见的 WebShell 管理工具有哪些A:蚁剑、冰蝎、菜刀Q14: Windows 实时保护对一句话木马有什么影响A:Windows Defender 实时保护会自动检测并删除一句话木马文件。需要手动关闭实时保护才能正常使用但关闭后可能会自动重启。四、文件上传漏洞Q15: 文件上传漏洞常见的绕过方式有哪些A:修改文件后缀绕过前端校验如.php→.png用Burp Suite 抓包修改请求将后缀改回.php利用服务器解析漏洞如 Apache 解析/test.php.jpgQ16: 文件上传攻击的关键是什么A:两个关键点上传成功绕过服务端限制知道路径必须知道文件在服务器的具体存储位置才能访问利用五、综合与实战Q17: 如何区分反射型 XSS 和存储型 XSSA:用不同浏览器测试。在 Chrome 中触发 XSS 后用 Edge 访问同一页面若弹窗存储型代码已存入数据库若不弹窗反射型代码未持久化Q18: XSS 攻击的三个必要条件是什么A:用户输入可控浏览器能解析执行恶意代码有回显机制让攻击者看到结果Q19: DOM型 XSS 和反射型/存储型 XSS 的最大区别是什么A:DOM型 XSS完全在客户端执行不经过服务器通过修改 DOM 树实现攻击反射型和存储型都需要与服务器交互。Q20: 如何防御 XSS 攻击A:输入过滤过滤用户输入中的恶意字符输出转义使用htmlspecialchars()等函数转义输出设置 HTTPOnly防止 Cookie 被 JS 读取CSP 策略通过 Content-Security-Policy 限制脚本来源对用户输入进行白名单验证避免直接在 HTML 中拼接用户输入Q21: 数据库连接失败的常见原因有哪些A:端口号错误默认 3306实际可能为 3307密码不匹配PHP 版本不兼容配置文件和实际服务参数不一致服务未启动Q22: 在实际渗透测试中如何定位文件上传的存储路径A:上传成功后的返回信息可能包含路径信息根据常见 CMS 默认路径猜测通过目录扫描工具探测查看 HTTP 响应中的路径回显。Q23: 解释一下 PHP 中的 eval() 和 system() 函数的安全风险。A:eval()将字符串作为 PHP 代码执行攻击者可传入任意恶意代码system()执行外部系统命令攻击者可执行whoami、ipconfig、rm -rf /等危险命令两者结合eval(system(...))可实现从代码执行到系统命令执行的转换Q24: Burp Suite 在 XSS 测试中的作用是什么A:拦截和修改 HTTP 请求绕过前端校验修改 HTTP 头字段如 Referer、User-Agent、Cookie分析请求/响应内容观察参数传递和数据回显。Q25: PHP 版本切换为什么会影响靶场运行A:不同版本的 PHP 对函数支持、语法解析和默认配置存在差异。例如 DVWA 可能需要 PHP 5.3而皮卡丘需要 PHP 7.3。版本不匹配会导致函数不存在或语法错误。
第八天笔记
第一部分课堂笔记一、XSS 漏洞概述1.1 什么是 XSS术语说明XSSCross-Site Scripting跨站脚本攻击本质恶意脚本被浏览器当作合法 HTML/JS 解析执行成因对用户输入未做过滤或未做输出转义1.2 XSS 三种类型对比类型存储方式数据库参与影响范围反射型 XSS不存储URL 参数直接反射❌仅当前用户存储型 XSS存入数据库持久化存储✅所有访问用户DOM型 XSS纯客户端操作 DOM 树❌当前用户反射型 XSS恶意脚本通过URL 参数传递给服务器后端$_GET获取后未处理直接拼接到 HTML像镜子一样从服务器反射回用户浏览器存储型 XSS恶意脚本存入数据库其他用户访问时从数据库读取并执行危害最大—— 自动化传播影响所有访问者DOM型 XSS完全在客户端执行不经过服务器通过修改DOM 树来执行恶意脚本攻击者构造恶意 URL受害者点击触发1.3 XSS 利用三条件用户输入可控浏览器能解析执行恶意代码有回显机制攻击者能看到结果二、PHP 基础2.1 $_GET 传参// URL: level1.php?name张三$str$_GET[name];// $str 张三GET 参数在 URL?后面多个参数用连接参数明文显示安全性低2.2 htmlspecialchars() 函数$strscriptalert(1)/script;echohtmlspecialchars($str);// 输出lt;scriptgt;alert(1)lt;/scriptgt;// 浏览器不会执行只显示为文本字符实体编码lt;gt;quot;#039;或apos;⚠️ 旧版本默认只编码双引号不编码单引号三、XSS 绕过技巧3.1 引号闭合绕过!-- 原始代码 --inputvalue用户输入!-- 攻击者输入 onclickalert(1) --inputvalueonclickalert(1)提前闭合双引号跳出 value 属性用onclick/onfocus等事件执行代码3.2 大小写绕过!-- 过滤了 on 但未做大小写转换 --INPUTONFOCUSalert(1)3.3 双写绕过过滤 on → 输入 oonn → 删除 on → 剩下 on 过滤 script → 输入 scrscriptipt → 删除 script → 剩下 script3.4 javascript:伪协议ahrefjavascript:alert(1)点击/a3.5 事件属性注入事件触发条件onclick点击时onfocus获得焦点时onerror加载错误时onload加载完成时3.6 编码绕过Unicode 编码对特殊字符编码绕过过滤绕过要满足能骗过后端校验 能被浏览器解码不同编码方式效果不同需要反复测试3.7 注释符绕过javascript:alert(123)//http:用//把后面的内容变成注释解决协议冲突3.8 换行符绕过URL 换行符编码%0a HTML 中将换行符解析为空格四、一句话木马WebShell4.1 什么是 一句话木马?phpeval($_POST[cmd]);?极简恶意代码通过一个文件控制服务器核心eval()函数 —— 将参数作为 PHP 代码执行4.2 从代码执行到系统命令// 攻击者传入system(whoami)// eval() 执行后等价于system(whoami);system()函数执行系统命令本质代码执行 → 系统命令执行4.3 常用 WebShell 管理工具工具说明蚁剑现代 WebShell 管理工具冰蝎加密流量免杀性强菜刀经典老牌工具4.4 Windows 实时保护会自动删除一句话木马文件需关闭实时保护和防火墙关闭后会再次自动开启五、文件上传漏洞5.1 攻击流程攻击者上传恶意文件(.php) ↓ 绕过前端校验改后缀/抓包改请求 ↓ 文件存入服务器 ↓ 必须知道存储路径才能利用5.2 常见绕过方式改后缀test.php→test.png抓包改请求用 Burp Suite 拦截后改回.php前端校验不可靠用户可轻易修改5.3 关键点上传成功 ≠ 可利用还需知道存储路径实际路径与预期路径可能不同六、环境配置6.1 常见工具工具用途phpstudyPHP 集成环境DVWAWeb 安全靶场皮卡丘 (pikachu)XSS 练习靶场XSS LabsXSS 专项练习Burp Suite抓包代理工具6.2 数据库连接排查步骤检查PHP 版本如切换到 7.3检查端口号默认 3306可能为 3307检查密码是否一致检查配置文件如inc-config.inc.php区分本地环境和 Ubuntu 环境6.3 常用命令# 重启 Nginxcdsbin ./nginx-sreload# 查看历史会话 (Open Code)opencode session list opencode session-ssession_id七、HTTP 请求头字段利用关卡操作目标说明第11关Referer头修改来源页面标识第12关User-Agent头修改客户端标识第13关Cookie修改 Cookie 信息八、各关卡要点速查关卡考察点关键提示1GET 传参正确页面传参2无过滤输出直接注入 script3htmlspecialchars单引号/双引号差异4函数功能理解看源码分析5大小写/事件绕过不能使用 on 事件6关键词插入下划线大写字母绕过7单次替换过滤双写绕过8引号实体化her 属性/javascript:9http:// 校验协议头 注释绕过10隐藏表单值移除隐藏属性11Referer 修改Burp Suite 抓包12User-Agent 修改T-ua 字段13Cookie 修改T-cookie 字段14简单无特殊限制15页面嵌套iframe 思路16空格/斜线被替换%0a 换行符绕过第二部分面试题一、XSS 基础概念Q1: 什么是 XSS 攻击全称是什么A:XSS 全称是Cross-Site Scripting跨站脚本攻击。攻击者将恶意脚本注入到网页中当其他用户访问时浏览器会执行这些恶意代码从而达到攻击目的。Q2: XSS 攻击产生的原因是什么A:根本原因是对用户输入的数据没有做充分的过滤和转义处理导致恶意代码被浏览器当作合法 HTML/JavaScript 解析执行。Q3: XSS 分为哪三种类型有什么区别类型存储数据库影响范围反射型不存储URL 参数反射❌仅当前用户存储型存入数据库持久化✅所有访问用户DOM型纯客户端不经过服务器❌当前用户Q4: 存储型 XSS 为什么比反射型 XSS 危害更大A:存储型 XSS 的恶意代码会持久化存储在服务器数据库中所有访问该页面的用户都会自动触发不需要攻击者持续介入传播范围更广、影响更大。二、XSS 利用与绕过Q5: 反射型 XSS 的攻击流程是怎样的A:攻击者构造恶意URL → 受害者点击 → 浏览器向服务器发送请求 → 服务器将恶意参数拼接到HTML中返回 → 浏览器执行恶意脚本Q6: 前端校验如 maxlength能否防止 XSS为什么A:不能。前端校验很容易被绕过通过浏览器开发者工具直接删除或修改限制属性通过 Burp Suite 等代理工具拦截请求绕过前端校验Q7: htmlspecialchars() 函数的作用是什么A:将 HTML 特殊字符、、、等转换为 HTML 实体编码使其在浏览器中以普通文本显示不会被解析为 HTML 标签从而防止 XSS 攻击。Q8: 如何使用 htmlspecialchars() 时需要注意什么A:注意引号处理。旧版本默认只转义双引号不转义单引号需要通过参数显式指定。建议明确设置ENT_QUOTES参数来同时编码单引号和双引号。Q9: 列举几种常见的 XSS 绕过方法。A:大小写绕过SCRIPT、ONFOCUS双写绕过scrscriptipt→ 过滤后变成script引号闭合 onclickalert(1)javascript:伪协议a hrefjavascript:alert(1)事件属性注入onfocus、onerror、onclick编码绕过Unicode 编码、HTML 实体编码注释绕过javascript:alert(1)//http:换行符绕过%0a替代空格Q10: URL 中 javascript: 伪协议遇到 http: 冲突怎么解决A:使用双斜线注释符//将后面的 http: 变成注释javascript:alert(123)//http:三、一句话木马Q11: 什么是一句话木马A:一种极简的恶意代码通常只有一行。核心是使用eval()等动态代码执行函数将攻击者传入的参数当作代码执行。典型示例?phpeval($_POST[cmd]);?Q12: 一句话木马如何将代码执行转为系统命令执行A:通过传入system()函数调用如system(whoami)eval()会将其作为 PHP 代码执行从而执行系统命令。Q13: 常见的 WebShell 管理工具有哪些A:蚁剑、冰蝎、菜刀Q14: Windows 实时保护对一句话木马有什么影响A:Windows Defender 实时保护会自动检测并删除一句话木马文件。需要手动关闭实时保护才能正常使用但关闭后可能会自动重启。四、文件上传漏洞Q15: 文件上传漏洞常见的绕过方式有哪些A:修改文件后缀绕过前端校验如.php→.png用Burp Suite 抓包修改请求将后缀改回.php利用服务器解析漏洞如 Apache 解析/test.php.jpgQ16: 文件上传攻击的关键是什么A:两个关键点上传成功绕过服务端限制知道路径必须知道文件在服务器的具体存储位置才能访问利用五、综合与实战Q17: 如何区分反射型 XSS 和存储型 XSSA:用不同浏览器测试。在 Chrome 中触发 XSS 后用 Edge 访问同一页面若弹窗存储型代码已存入数据库若不弹窗反射型代码未持久化Q18: XSS 攻击的三个必要条件是什么A:用户输入可控浏览器能解析执行恶意代码有回显机制让攻击者看到结果Q19: DOM型 XSS 和反射型/存储型 XSS 的最大区别是什么A:DOM型 XSS完全在客户端执行不经过服务器通过修改 DOM 树实现攻击反射型和存储型都需要与服务器交互。Q20: 如何防御 XSS 攻击A:输入过滤过滤用户输入中的恶意字符输出转义使用htmlspecialchars()等函数转义输出设置 HTTPOnly防止 Cookie 被 JS 读取CSP 策略通过 Content-Security-Policy 限制脚本来源对用户输入进行白名单验证避免直接在 HTML 中拼接用户输入Q21: 数据库连接失败的常见原因有哪些A:端口号错误默认 3306实际可能为 3307密码不匹配PHP 版本不兼容配置文件和实际服务参数不一致服务未启动Q22: 在实际渗透测试中如何定位文件上传的存储路径A:上传成功后的返回信息可能包含路径信息根据常见 CMS 默认路径猜测通过目录扫描工具探测查看 HTTP 响应中的路径回显。Q23: 解释一下 PHP 中的 eval() 和 system() 函数的安全风险。A:eval()将字符串作为 PHP 代码执行攻击者可传入任意恶意代码system()执行外部系统命令攻击者可执行whoami、ipconfig、rm -rf /等危险命令两者结合eval(system(...))可实现从代码执行到系统命令执行的转换Q24: Burp Suite 在 XSS 测试中的作用是什么A:拦截和修改 HTTP 请求绕过前端校验修改 HTTP 头字段如 Referer、User-Agent、Cookie分析请求/响应内容观察参数传递和数据回显。Q25: PHP 版本切换为什么会影响靶场运行A:不同版本的 PHP 对函数支持、语法解析和默认配置存在差异。例如 DVWA 可能需要 PHP 5.3而皮卡丘需要 PHP 7.3。版本不匹配会导致函数不存在或语法错误。