Gerapy漏洞实战:手把手复现CVE-2021-32849远程命令执行(附环境搭建指南)
最近在梳理一些开源Web框架的历史漏洞时,Gerapy的CVE-2021-32849引起了我的注意。这个漏洞的成因非常典型,属于开发者对用户输入信任过度,直接拼接进系统命令导致的经典命令注入。对于从事安全研究、渗透测试或者想深入理解Web应用安全的朋友来说,亲手搭建环境、调试并复现一遍,远比只看分析报告收获大得多。这篇文章,我就带你从零开始,一步步把漏洞环境搭起来,并利用BurpSuite等工具,完整地走通整个漏洞利用链。过程中,我会重点分享我在搭建和复现时踩过的坑,以及在不同操作系统下构造有效Payload的细微差别。
1. 环境搭建:从零到一的实战准备
搭建一个可复现的漏洞环境,是安全研究的第一步,也是最容易让人“从入门到放弃”的一步。Gerapy基于Python的Django框架,并依赖Scrapyd等服务,环境配置上稍有疏忽就可能失败。我建议你准备一个干净的Linux环境,比如Ubuntu 20.04 LTS或Kali Linux,这能避免很多因系统版本或已有包冲突带来的问题。
首先,我们需要安装指定版本的Gerapy。漏洞影响版本是0.9.7及以下,这里我们就安装0.9.7版本。由于网络原因,直接使用pip install可能会很慢甚至失败,使用国内镜像源是更稳妥的选择。
# 更新包管理器并安装必要的系统依赖
sudo apt-get update
sudo apt-get install -y python3-pip python3-dev git
# 使用豆瓣源安装指定版本的gerapy及其核心依赖scrapyd
pip3 install gerapy==0.9.7 -i https://pypi.doubanio.com/simple --trusted-host pypi.doubanio.com
pip3 install scrapyd -i https://pypi.doubanio.com/simple --trusted-host pypi.doubanio.com
安装完成后,可以通过以下命令验证Gerapy是否安装成功:
gerapy version
如果输出版本号0.9.7,说明安装正确。
接下来是初始化Gerapy项目。Gerapy的运行需要数据库和配置文件,这个过程和大多数Django项目类似。
# 1. 初始化,这会在当前目录创建`gerapy`文件夹作为项目根目录
gerapy init
# 2. 进入项目目录
cd gerapy
# 3. 迁移数据库,创建必要的表结构
gerapy migrate
# 4. 创建超级管理员账户,用于登录后台管理界面
gerapy createsuperuser
执行createsuperuser时,会交互式地让你输入用户名、邮箱和密码,请务必记住你设置的账号密码。
注意:在执行
gerapy migrate时,如果遇到关于sqlite3版本或表创建失败的错误,可以尝试先删除目录下的db.sqlite3文件(如果存在),再重新执行迁移命令。这通常是旧数据库文件与新模型不兼容导致的。
在启动Gerapy服务之前,还需要先启动其依赖的服务Scrapyd。Scrapyd是一个用于部署和运行Scrapy爬虫的服务,Gerapy通过它来管理爬虫任务。新开一个终端窗口,运行:
scrapyd
你会看到Scrapyd服务默认在6800端口启动。
最后,回到gerapy目录,启动Django开发服务器:
gerapy runserver 0.0.0.0:8000
现在,打开浏览器访问 http://你的服务器IP:8000,应该能看到Gerapy的登录界面。用刚才创建的超级管理员账号登录,即可进入后台管理界面。至此,漏洞环境就准备就绪了。

&spm=1001.2101.3001.5002&articleId=152762230&d=1&t=3&u=4594cf2487334c9697a75d56903c302d)
1469

被折叠的 条评论
为什么被折叠?



