[CVE-2016-5699] Python HTTP header injection in httplib/http.client

0 概述

Python2.x 3.x 的urllib/urllib2从数据解析到发包的整个流程中,均未对URL提供安全性过滤或检查.导致换行符可被插入到HTTP数据流,使攻击者可以注入额外的HTTP头和请求方法.

本文将重点介绍:

  • HTTP 请求头基础
  • Python urllib/urllib2 核心代码逻辑
  • 漏洞验证过程及代码分析

1 位置

Python 2.x urllib2.py - httplib.py
Python 3.x urllib.py - http/client.py


2 HTTP请求头&换行符

为什么注入换行符就可以修改HTTP的请求头呢.

抓个GET请求看下

get请求报文图片

图片中可以看到在HTTP报文是连续且可读的,每行以\r\n结束,分别对应%0d,%0a

2.1 使用nc敲一个请求

nc www.cdxy.me 80

然后输入以下两行:
GET HTTP/1.1
Host: www.cdxy.me

就可以看到服务器解析这个GET请求并返回的结果:

nc-1


3 漏洞PoC

3.1 脚本

#!/usr/bin/env python3  
# test.py

import sys
import urllib
import urllib.error
import urllib.request   

url = sys.argv[1]   

try:
    info = urllib.request.urlopen(url).info()
    print(info)
except urllib.error.URLError as e:
    print(e)

3.2 正常的请求头

nc -l -v 127.0.0.1 -p 12345 监听本机12345端口
python3 test.py http://127.0.0.1:12345/index.html发出请求

这里写图片描述

左边可以看到本机12345端口收到的请求头,也就是我们Python脚本发出的请求头.

3.3 注入换行符后

使用恶意构造的URL:
htt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值