作者:2016-07-06阅读次数:201771评论:5
公布时间:在今年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的实践。
首先介绍一下之前外界已经公布通过未授权访问的redis获取服务器shell的两种方式:
1、 写入ssh公钥(需要清空缓存数据)
2、通过写计划任务来反弹shell(不需要清空缓存数据)
通过在服务器上直接执行redis命令和通过跨协议来操作redis有些许不同,下面开始进行测试,python测试脚本代码如下,保存为urllibi.py文件:
测试一下通过http头注入来向redis写入普通的文本:
从运行结果可以看出相当于执行了set a aaa的redis命令:
通常在实际环境中时,服务器可能禁止了ssh服务端口的对外访问,所以此处使用写计划任务来反弹shell,在利用过程中会遇到没法写入空格的问题,而写入crontab的字符串又必须要有空格
尝试set a 11%2011:
尝试set a "11%2011",set a '11%2011':
解决办法:通过Redis的通讯协议来突破空格的限制:
首先Redis是以行来划分,每行以\r\n行结束。每一行都有一个消息头:
捐款成功,感谢您的无私奉献
评论留言