1. 什么是目录遍历漏洞

“目录遍历漏洞”的英文名称是Directory Traversal 或 Path Traversal。指攻击者通过在URL或参数中构造

  • ../
  • ..%2F
  • /%c0%ae%c0%ae/
  • %2e%2e%2f

或类似的跨父目录字符串,完成目录跳转,读取操作系统各个目录下的敏感文件。很多时候,我们也把它称作“任意文件读取漏洞”。

2. Python和Django的目录遍历漏洞

历史上python和django曾爆出多个目录遍历漏洞,例如:

  1. CVE-2009-2659  Django directory traversal flaw
  2. CVE-2013-4315   python-django: directory traversal with “ssi” template tag
  3. 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的目录遍历漏洞(任意文件读取)相关推荐

  1. 目录遍历漏洞和文件读取漏洞的区别

    目录遍历漏洞 通过操作URL强行访问web目录以外的文件,目录和命令.网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件.配置文件等,攻击者利用该信息 ...

  2. python open 函数漏洞_python和django的目录遍历漏洞

    (20210205学习笔记) 攻击者通过请求 http://220.181.185.228/../../../../../../../../../etc/sysconfig/network-scrip ...

  3. Kali学习笔记31:目录遍历漏洞、文件包含漏洞

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 目录遍历漏洞: 应用程序如果有操作文件的功能,限制不严 ...

  4. Web漏洞-任意文件读取漏洞

    任意文件读取漏洞 原理 任意文件读取是属于文件操作漏洞的一种,通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感文件,正常读取的文件没有经过 ...

  5. XEE漏洞任意文件读取

    目录 一.XEE漏洞简介 1.什么是XEE漏洞 2.XML介绍 二.XXE 漏洞代码详解 1.XXE 漏洞代码 2.XXE 漏洞演示 3.读取 PHP 文件 三.无回显文件读取 1.实验拓扑 2.Ka ...

  6. wsgiserver python 漏洞_新型任意文件读取漏洞的研究

    0x00 前言 早前发现boooom在乌云上发了很多个任意文件读取的漏洞,都是形如 http://target/../../../../etc/passwd 这样.当时感觉很新奇,因为正常情况下,通常 ...

  7. 目录浏览(目录遍历)漏洞和任意文件读取/下载漏洞

    目录 目录浏览(目录遍历)漏洞 任意文件读取/下载漏洞 目录浏览(目录遍历)漏洞 目录浏览漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件 ...

  8. 目录遍历漏洞和任意文件下载漏洞

    目录浏览(目录遍历)漏洞 目录浏览漏洞是由于网站存在配置缺陷,导致网站目录可以被任意浏览,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件.配置文件等,攻击者利用该信息可以为进一步入侵网站做准备 ...

  9. CVE-2020-25540:ThinkAdmin未授权列目录/任意文件读取漏洞复现

    目录 1. 简介 2. 影响范围 3. 环境搭建 3.1 安装Composer 4. 漏洞复现 4.1 列举目录 4.2 任意文件读取 1. 简介 ThinkAdmin 是基于 ThinkPHP后台开 ...

最新文章

  1. CSS——float属性备忘笔记
  2. 一口气用 Python 写了13个小游戏,摸鱼达人!
  3. 【ICML2021】学习权衡不完美的示范
  4. linux avd 界面,Android Studio创建AVD
  5. JS键盘事件(非常详细)
  6. springboot转发http请求_如何实现Http请求报头的自动转发
  7. 学java需要哪些js知识点_JS重要知识点
  8. 程序员必备算法——算法相关链接总结
  9. ssm项目之Bookstrap创建页面并分页查询
  10. cvEqualizeHist() 直方图均衡化(多通道彩图)
  11. 参数篡改(Parameter Tampering)
  12. directX学习系列8 颜色融合(转)
  13. 四种Linux硬盘分区方式,首次安装Linux之磁盘分区
  14. Python 爬虫学习笔记(十(2))scrapy爬取图书电商实战详解
  15. 在线直播: 在 gTech 工作是一番怎样的体验?
  16. 高分辨率对地观测系统重大科技专项简介
  17. 小数点如何用计算机二进制表示,计算机二进制小数点表示法
  18. JAVA复健DateNote.001
  19. PPI是什么?pixels per inch像素密度是什么?PPI如何计算?
  20. 串口调试助手源代码 qt编写 带协议解析 帧判断 通信数据保存等功能

热门文章

  1. adb删除内置音乐软件教程
  2. 如何掌握计算机专业英语
  3. iOS 利用余弦函数实现卡片浏览工具
  4. 8个让你收入翻倍的高质量免费网站
  5. 有道云笔记MarkDown插入图片
  6. 发那科机器人圆弧指令怎么用_发那科 FANUC 机器人软浮动功能使用方法及应用详解...
  7. 基于bs4的python爬虫+mongoDB
  8. 年省百万纸张,连锁百强企业“天虹”上线法大大电子合同
  9. 互联网黑话生成器(一款能熟练应用“赋能、抓手、闭环、沉淀、打通”等词汇的文章生成器)
  10. 采用UWB定位技术开发的室内定位系统源码