python和django的目录遍历漏洞(任意文件读取)
1. 什么是目录遍历漏洞
“目录遍历漏洞”的英文名称是Directory Traversal 或 Path Traversal。指攻击者通过在URL或参数中构造
- ../
- ..%2F
- /%c0%ae%c0%ae/
- %2e%2e%2f
或类似的跨父目录字符串,完成目录跳转,读取操作系统各个目录下的敏感文件。很多时候,我们也把它称作“任意文件读取漏洞”。
2. Python和Django的目录遍历漏洞
历史上python和django曾爆出多个目录遍历漏洞,例如:
- CVE-2009-2659 Django directory traversal flaw
- CVE-2013-4315 python-django: directory traversal with “ssi” template tag
- Python CGIHTTPServer File Disclosure and Potential Code Execution
内置的模块和Django模板标签,均受过影响。程序员稍不谨慎,就可能写下有漏洞的代码。
3. 漏洞代码示例
为了演示漏洞的原理,我们写了一段存在明显漏洞的代码:
# -*- coding: utf-8 -*-
import sys
import SocketServer
import BaseHTTPServer
import threading
import time
import exceptions
import osclass MyHttpRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):def do_GET(self):self.send_response(200)self.send_header('Content-type','text/plain')self.end_headers()if os.path.isfile(self.path):file = open(self.path)self.wfile.write(file.read())file.close()else:self.wfile.write('hello world')class ThreadedHttpServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):__httpd = None@staticmethoddef get():if not ThreadedHttpServer.__httpd:ThreadedHttpServer.__httpd = ThreadedHttpServer(('0.0.0.0', 80), MyHttpRequestHandler)return ThreadedHttpServer.__httpddef main():try:httpd = ThreadedHttpServer.get()httpd.serve_forever()except exceptions.KeyboardInterrupt:httpd.shutdown()except Exception as e:print eif __name__ == '__main__':main()
在处理GET请求时,我直接取path,然后使用open函数打开path对应的静态文件,并HTTP响应文件的内容。这里出现了一个明显的目录遍历漏洞,对path未做任何判断和过滤。
当我请求http://localhost/etc/passwd时,self.path对应的值是/etc/passwd,而open(‘/etc/passwd’),自然可以读取到passwd文件。
那攻击者为什么要构造/../../../../../../etc/passwd呢? 这是为了防止程序过滤或丢失最左侧的/符号,让起始目录变成脚本当前所在的目录。攻击者使用多个..符号,不断向上跳转,最终到达根/,而根/的父目录就是自己,因此使用再多的..都无差别,最终停留在根/的位置,如此,便可通过绝对路径去读取任意文件。
4. 漏洞扫描
该漏洞扫描有多种扫描方法,可使用nmap的http-passwd脚本扫描(http://nmap.org/nsedoc/scripts/http-passwd.html),用法:
nmap –script http-passwd –script-args http-passwd.root=/test/ IP地址
还可以写几行python脚本,检查HTTP响应中是否存在关键字,只需几行代码,主要是:
import httplib
conn = httplib.HTTPConnection(host, timeout=20)
conn.request('GET', '/../../../../../../../../../etc/passwd')
html_doc = conn.getresponse().read()
还发现一些小伙伴通过curl来检查主机是否存在漏洞,确实也很方便:
curl http://localhost/../../../../../../../etc/passwd
5. 漏洞修复
针对低版本的django和python引入的目录遍历,可选择升级python和django。
若是开发自行处理URL不当引入,则可过滤self.path,递归地过滤掉”..“,并限定号base_dir。 当发现URL中存在..,可直接响应403。
转自:http://www.lijiejie.com/python-django-directory-traversal/
python和django的目录遍历漏洞(任意文件读取)相关推荐
- 目录遍历漏洞和文件读取漏洞的区别
目录遍历漏洞 通过操作URL强行访问web目录以外的文件,目录和命令.网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件.配置文件等,攻击者利用该信息 ...
- python open 函数漏洞_python和django的目录遍历漏洞
(20210205学习笔记) 攻击者通过请求 http://220.181.185.228/../../../../../../../../../etc/sysconfig/network-scrip ...
- Kali学习笔记31:目录遍历漏洞、文件包含漏洞
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 目录遍历漏洞: 应用程序如果有操作文件的功能,限制不严 ...
- Web漏洞-任意文件读取漏洞
任意文件读取漏洞 原理 任意文件读取是属于文件操作漏洞的一种,通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感文件,正常读取的文件没有经过 ...
- XEE漏洞任意文件读取
目录 一.XEE漏洞简介 1.什么是XEE漏洞 2.XML介绍 二.XXE 漏洞代码详解 1.XXE 漏洞代码 2.XXE 漏洞演示 3.读取 PHP 文件 三.无回显文件读取 1.实验拓扑 2.Ka ...
- wsgiserver python 漏洞_新型任意文件读取漏洞的研究
0x00 前言 早前发现boooom在乌云上发了很多个任意文件读取的漏洞,都是形如 http://target/../../../../etc/passwd 这样.当时感觉很新奇,因为正常情况下,通常 ...
- 目录浏览(目录遍历)漏洞和任意文件读取/下载漏洞
目录 目录浏览(目录遍历)漏洞 任意文件读取/下载漏洞 目录浏览(目录遍历)漏洞 目录浏览漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件 ...
- 目录遍历漏洞和任意文件下载漏洞
目录浏览(目录遍历)漏洞 目录浏览漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件.配置文件等,攻击者利用该信息可以为进一步入侵网站做准备 ...
- CVE-2020-25540:ThinkAdmin未授权列目录/任意文件读取漏洞复现
目录 1. 简介 2. 影响范围 3. 环境搭建 3.1 安装Composer 4. 漏洞复现 4.1 列举目录 4.2 任意文件读取 1. 简介 ThinkAdmin 是基于 ThinkPHP后台开 ...
最新文章
- CSS——float属性备忘笔记
- 一口气用 Python 写了13个小游戏,摸鱼达人!
- 【ICML2021】学习权衡不完美的示范
- linux avd 界面,Android Studio创建AVD
- JS键盘事件(非常详细)
- springboot转发http请求_如何实现Http请求报头的自动转发
- 学java需要哪些js知识点_JS重要知识点
- 程序员必备算法——算法相关链接总结
- ssm项目之Bookstrap创建页面并分页查询
- cvEqualizeHist() 直方图均衡化(多通道彩图)
- 参数篡改(Parameter Tampering)
- directX学习系列8 颜色融合(转)
- 四种Linux硬盘分区方式,首次安装Linux之磁盘分区
- Python 爬虫学习笔记(十(2))scrapy爬取图书电商实战详解
- 在线直播: 在 gTech 工作是一番怎样的体验?
- 高分辨率对地观测系统重大科技专项简介
- 小数点如何用计算机二进制表示,计算机二进制小数点表示法
- JAVA复健DateNote.001
- PPI是什么?pixels per inch像素密度是什么?PPI如何计算?
- 串口调试助手源代码 qt编写 带协议解析 帧判断 通信数据保存等功能
热门文章
- adb删除内置音乐软件教程
- 如何掌握计算机专业英语
- iOS 利用余弦函数实现卡片浏览工具
- 8个让你收入翻倍的高质量免费网站
- 有道云笔记MarkDown插入图片
- 发那科机器人圆弧指令怎么用_发那科 FANUC 机器人软浮动功能使用方法及应用详解...
- 基于bs4的python爬虫+mongoDB
- 年省百万纸张,连锁百强企业“天虹”上线法大大电子合同
- 互联网黑话生成器(一款能熟练应用“赋能、抓手、闭环、沉淀、打通”等词汇的文章生成器)
- 采用UWB定位技术开发的室内定位系统源码