跳到主要内容

第 7 周

· 阅读需 3 分钟
Hsieh
Hsieh
提示

客户端安全漏洞包括 XSS 跨站脚本攻击的三大类型与实战利用,以及文件上传漏洞的多种绕过技术。通过 BlueLotus 靶场练习掌握 XSS 攻击流程,实战 Upload_Labs 靶场学习前端验证、黑名单、白名单、条件竞争等绕过技巧,结合 BurpSuite 插件 Upload_Auto_Fuzz 提升漏洞挖掘效率。

XSS

cross site scripting, 用户端执行了在 Web 插入的恶意 JavaScript 代码

类型

反射型

用户端点击链接请求到恶意 JavaScript 代码, 用户端解析恶意 JavaScript 代码将客户数据发往恶意服务器

存储型

通过输入框把恶意代码存入目标网站的数据库, 当有客户端访问某个页面时读取到数据库的JavaScript 代码, 会在客户端执行 JavaScript 代码

DOM 型

特殊的反射型 xss, 不需要向服务器请求恶意代码

练习

BlueLotus

  1. 安装部署

通过 install.php 自动安装, 要求为 php5 环境

  1. 输入 <img src=# onerror=alert(1) /> 测试是否有 xss 漏洞

  2. 创建恶意JavaScript代码, 构建恶意链接, 恶意链接包含恶意 JavaScript 的URL路径

  1. 开发者模式修改请求框长度限制, 输入恶意链接让用户端请求恶意 JavaScript 代码并解析执行

  1. 获取到用户端的敏感信息

文件上传

靶场搭建

  1. 安装 upload-labs
docker pull c0ny1/upload-labs
docker run --name upload-labs -d -p 80:80 c0ny1/upload-labs
  1. 确保 web 目录下有 upload 目录,并且文件属主属组为 www-data
docker exec -it upload-labs
mkdir /var/www/html/upload
chown www-data:www-data /var/www/html/upload

绕过前端验证

  1. 在 F12 中禁用 JavaScript, 上传文件 1.php, 文件内容如下
<?php phpinfo();?>
  1. 访问上传的文件

绕过服务器验证

黑名单绕过

  1. 修改 POST 请求头的 Content-Type 为下面类型之一绕过

  1. 响应包中找到上传后随机生成的文件名

白名单绕过

  1. 空字节 URL 编码中表示为 %00, 十六进制表示为 0x00, php 能安全解析, OS 底层 C API 处理空字节时会截断

  2. 构造文件名为1.php%00.png, 将 %00 URL解码为空字节

  1. 通过了 php 检查后写磁盘时, .png 被操作系统截断, 保存为 1.php, 响应包中查看文件名

  1. 查看上传路径

条件竞争

删除文件的代码执行需要时间; 配置多线程, 不断上传文件, 同时手动不断访问链接, 访问会生成新文件, 新文件不会被删除

Upload_Auto_Fuzz

安装配置

  1. 下载 java 开发的 python 解释器 jython.jar, 指定位置

  1. 插件中添加 upload_auto_fuzz.py 脚本

使用指南