Quantcast
Viewing all articles
Browse latest Browse all 9596

Hack Redis via Python urllib HTTP Header Injection

Hack Redis via python urllib HTTP Header Injection

作者: Jim 公布时间: 2016-07-06 阅读次数: 519 评论: 0

分享

版权所有,转载请注明出处!

0x00 Introduction

在今年6月BLINDSPOT披露了Python urllib http头注入漏洞:http://blog.blindspotsecurity.com/2016/06/advisory-http-header-injection-in.html

通过这个漏洞,如果使用了Python的urllib库,并且请求的url为用户可控,那么就可能存在内网被探测的风险,如果本机或内网服务器中装有未授权访问的redis,那么服务器则有被getshell的风险。

本文主要讲述通过Python urllib http头注入来实现对内网未授权redis服务进行getshell的实践。

0x01 Redis Vulnerability

首先介绍一下之前外界已经公布通过未授权访问的redis获取服务器shell的两种方式:1、 写入ssh公钥(需要清空缓存数据)


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

2、通过写计划任务来反弹shell (不需要清空缓存数据)


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

0x02 Attack Redis

通过在服务器上直接执行redis命令和通过跨协议来操作redis有些许不同,下面开始进行测试,python测试脚本代码如下,保存为urllibi.py文件:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

测试一下通过http头注入来向redis写入普通的文本:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

从运行结果可以看出相当于执行了set a aaa的redis命令:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

通常在实际测试时,要求不能清空服务器的缓存数据,所以此处使用写计划任务来反弹shell,在利用过程中会遇到没法写入空格的问题,而写入crontab的字符串又必须要有空格尝试set a 11%2011:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

尝试set a "11%2011",set a '11%2011':


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

无论是编码空格为%20还是两端加单双引号,发现都不会成功。

解决办法:通过Redis的通讯协议来突破空格的限制:

首先Redis是以行来划分,每行以\r\n行结束。每一行都有一个消息头:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

下面来试一下如何执行set a “like you”:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

转换为实际的每个字节的形式字符串为:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

从执行结果可以看出,空格成功插入:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

接下来尝试将计划任务的命令字符串写入redis:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

这里的\n需要使用%0a才行,不然直接写\n反斜杠会被过滤掉:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

0x03 POC

将四个步骤合为一个url搞定:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

执行效果如下:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

在192.168.53.1上监听12345端口,shell就这样弹了过来:


Image may be NSFW.
Clik here to view.
Hack Redis via Python urllib HTTP Header Injection

0x04 References

http://blog.blindspotsecurity.com/2016/06/advisory-http-header-injection-in.html

http://drops.wooyun.org/papers/16905

http://blog.csdn.net/qqyanchong/article/details/8686685

http://www.CodeSec.Net/vuls/85188.html

http://zone.wooyun.org/content/23858

Viewing all articles
Browse latest Browse all 9596

Trending Articles