- 注册
- 09 10, 2024
- 消息
- 186
JavaScript:
## 漏洞标题为:Django 上传文件时路径遍历漏洞
## 漏洞类型为:路径遍历
## 漏洞等级为:中危
## 漏洞简介为
Django是Django基金会的一套基于Python语言的开源Web应用框架。该框架包括面向对象的映射器、视图系统、模板系统等。
Django 2.2至2.2.20, 3.0至3.0.14, 3.1至3.1.8 存在路径遍历漏洞,该漏洞允许通过上传的具有合适文件名的文件来遍历目录。
## 漏洞cve为:CVE-2021-28658
漏洞ID为:CNNVD-202104-352:http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-202104-352
## 补丁 diff:
http://launchpadlibrarian.net/531049456/python-django_1.8.7-1ubuntu5.14_1.8.7-1ubuntu5.15.diff.gz
### poc:
构造上传文件名为:`../test.txt `她是`../test.txt`的变形
poc代码参考部分:
```
def test_filename_traversal_upload(self):
if not os.path.isdir(UPLOAD_TO):
os.makedirs(UPLOAD_TO)
self.addCleanup(shutil.rmtree, MEDIA_ROOT)
file_name = '../test.txt',
payload = client.FakePayload()
payload.write(
'\r\n'.join([
'--' + client.BOUNDARY,
'Content-Disposition: form-data; name="my_file"; '
'filename="%s";' % file_name,
'Content-Type: text/plain',
'',
'file contents.\r\n',
'\r\n--' + client.BOUNDARY + '--\r\n',
]),
)
r = {
'CONTENT_LENGTH': len(payload),
'CONTENT_TYPE': client.MULTIPART_CONTENT,
'PATH_INFO': '/upload_traversal/',
'REQUEST_METHOD': 'POST',
'wsgi.input': payload,
}
response = self.client.request(**r)
result = json.loads(response.content.decode('utf-8'))
self.assertEqual(response.status_code, 200)
self.assertEqual(result['file_name'], 'test.txt')
self.assertIs(os.path.exists(os.path.join(MEDIA_ROOT, 'test.txt')), False)
self.assertIs(os.path.exists(os.path.join(UPLOAD_TO, 'test.txt')), True)
```