网络安全实战之靶场渗透技术(靶场 网络安全)
sinye56 2024-10-04 11:12 9 浏览 0 评论
信息收集
端口扫描
nmap找到三个开放的 TCP 端口,FTP (21)、SSH (22) 和 Python 托管的 HTTP (5000):
发现存在ftp匿名登录,使用ftp进行登录。
Flask App
访问5000端口,发现开启了web服务。
在登录框测试了一些常规漏洞,SQL注入和弱口令都没有用。
【一一帮助安全学习,所有资源关注我,私信回复“资料”获取一一】
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
网站上没有什么有趣的东西,我们去注册看看:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JuUqjTGv-1666254322221)(https://upload-images.jianshu.io/upload_images/26472780-e99697bf5b49f6cd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
登录之后,重定向到/dashboard这个目录下。
“添加注释”按钮指向/add_note,它有一个表格。尝试提交一个note进行测试。
它显示在我的仪表板上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SDZtKtZ4-1666254322239)(https://upload-images.jianshu.io/upload_images/26472780-abe0e1ed7ae5972a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
尝试各种 XSS 有效负载,但一切似乎都正确地转义了。“Notes” ( /notes) 现在显示我的笔记:
单击它会导致/note/3并显示注释:
我将尝试通过检查其他注释 ID(/note/1)。例如,点击“升级到VIP”的链接显示该选项当前不可用
漏洞发现
JWT解密
尝试解密cookie。
Flask cookie 看起来很像 JWT。我将尝试flask-unsign,一个用于解码、暴力破解和制作 Flask cookie 的工具,它可以工作:
目录爆破
没有发现啥可以利用的地方,就继续看cookie。
Flask Unsign解密
使用flask-unsign解密
flask-unsign --decode--cookie'.eJwlx0EKgCAQBdCrDH_torU3iZCQHC0wBUcpEO-e0OrxOnYfrZws0FsH1QmkHQeLQGHNjWxhSvmhmENgR1eCGUbh7z6ra2ms0IRLsjdDY3mdx_gAqEYfRw.YkOi3g.uAoRysM25q2FzuEUmYMaCRMQ4aA'{'_flashes': [('success', 'You are now logged in')], 'logged_in': True, 'username': '0xdf'}
cookie:eyJsb2dnZWRfaW4iOnRydWUsInVzZXJuYW1lIjoiYWRtaW4ifQ.Yxvarg.S9d5IqA4nL7CBjzYp4CfnG8IoLk
命令:
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOnRydWUsInVzZXJuYW1lIjoiYWRtaW4ifQ.Yxvarg.S9d5IqA4nL7CBjzYp4CfnG8IoLk'
使用flask-unsign. Flask cookie 使用秘密签名,因此在不知道该密码的情况下无法修改它们。可以进行暴力破解来测试弱密码,并通过flask-unsign来提供该功能。–unsign-w,运行它会rockyou.txt返回错误:
它似乎将文件中的“123456”通过添加–no-lteral-eval. 我将添加它,它可以很快找到秘密:
以管理员身份访问测试
生成一个管理员的cookie,然后替换到浏览器当中去。
eyJsb2dnZWRfaW4iOnRydWUsInVzZXJuYW1lIjoiYWRtaW4ifQ.YxvdIw.PpnxZ3h8WkIo_5JMIfhCDD7hXo8
带有 Cookie 的暴力用户名
使用time将可能的用户名生成一个cookie 列表。
代码分析
这将获取一个名称列表并生成我需要的所有 cookie。这实际上很慢,运行时间超过 8 分钟。这是因为每项工作都必须启动,其中包括导入所有 Flask。
我可以深入研究一下flask-unsign源代码,并跟踪我用–sign.
@lru_cache()
def get_serializer(secret: str, legacy: bool, salt: str) -> URLSafeTimedSerializer:
"""
Get a (cached) serializer instance
:param secret: Secret key
:param salt: Salt
:param legacy: Should the legacy timestamp generator be used?
:return: Flask session serializer
"""
if legacy:
signer = LegacyTimestampSigner
else:
signer = TimestampSigner
return URLSafeTimedSerializer(
secret_key=secret,
salt=salt,
serializer=TaggedJSONSerializer(),
signer=signer,
signer_kwargs={
'key_derivation': 'hmac',
'digest_method': hashlib.sha1})
向后追溯,我可以发现默认的 salt 是“cookie-session”。我知道或只是在文件顶部导入的其他内容。我可以使用它来生成我自己的脚本:
#!/usr/bin/env python3
import hashlib
import sys
from flask.json.tag import TaggedJSONSerializer
from itsdangerous import TimestampSigner, URLSafeTimedSerializer
if len(sys.argv) < 2:
print(f"{sys.argv[0]} [wordlist]")
sys.exit()
with open(sys.argv[1], 'r') as f:
names = f.readlines()
for name in names:
cookie = URLSafeTimedSerializer(
secret_key='secret123',
salt='cookie-session',
serializer=TaggedJSONSerializer(),
signer=TimestampSigner,
signer_kwargs={
'key_derivation': 'hmac',
'digest_method': hashlib.sha1
}
)
print(cookie.dumps({"logged_in": True, "username": name.strip()}))
使用wfuzz检查每个 cookie,隐藏 302 响应(重定向回/login
枚举到一个,解码为blue,发现一个blue用户。
使用登录 Oracle 的暴力用户名
使用wfuzz对所有用户发送登录请求,并注意任何不响应“无效凭据”的用户。有一个文件: names.txt
它返回了一个有效的用户名,blue(就像我通过制作 cookie 找到的一样)。我将flask-unsign用来制作 cookie:
站点访问/枚举
无论我以哪种方式获得blue的cookie,替换 Firefox 开发工具中的当前 cookie,然后重新加载/dashboard显示我现在以blue登录:
还有“导入笔记”和“导出笔记”按钮。我稍后会回到这些。
发现FTP登录的用户和密码。
FTP登录
发现一个 是关于密码安全的PDF,下载下来,然后进行分析。
发现了默认的用户名格式。
以 ftp_admin 身份访问 FTP
ftp_admin@Noter!
有一个目录files和一个PDF。目录为空:
发现2个zip文件,将它们都下载到本地。
md 到 pdf 中的 RCE
使用unzip -l查看压缩包文件内容。
使用diff命令比较2个压缩包的区别。
我app.py将从每个中提取,并将它们重命名为app-1.pyand app-2.py:
继续使用diff进行比较。运行diff app-1.py app-2.py显示第一个对数据库有不同的信任:
来源分析
该代码很有趣,export_note_local在andexport_node_remote函数中有一个有趣的东西。每个人都会得到一个注释,要么在本地读取它,要么从给定的 URL 读取它,然后用来针对它subprocess运行一个nodeJavaScript 程序。例如,来自export_node_local:
rand_int = random.randint(1,10000)
command = f"node misc/md-to-pdf.js /pre>{note['body']}' {rand_int}"
subprocess.run(command, shell=True, executable="/bin/bash")
return send_file(attachment_dir + str(rand_int) +'.pdf', as_attachment=True)
CVE-2021-23639
漏洞描述:
影响 md-to-pdf包,版本 <5.0.0
md-to-pdf是一个用于将 Markdown 文件转换为 PDF 的 CLI 工具。此软件包的受影响版本容易受到远程代码执行 (RCE) 的影响,因为它利用库灰质来解析前端内容,而不禁用 JS 引擎。
该package-lock.json文件将给出所需 JavaScript 包的版本。我将从档案中提取它并通过以下方式找到它grep:
google搜索这个包和漏洞利用会返回一个页面:
攻击者可以将有效载荷放入传入的降价中,这将导致 RCE。
获取权限
反向壳
创建一个md文件,写入反弹shell的语句来利用它。
本地先启动一个80端口,然后使用nc进行监听,接着使用网站的Export功能。
反弹Shell
获得user.txt
获得第一个user.txt文件,使用cat命令进行查看。
MySQL
我们在其中一个脚本中发现了 mysql 凭据。由于这是一个 CTF,这样的事情总是会引起怀疑。
我们检查mysql是否在本地运行:
我们在默认端口 3306 上看到它。我们还可以检查服务,看看它是否以 root 身份运行
在 MySQL 中利用 UDF
这是。所以我们知道 mysql 以 root 身份运行,并且我们有 root 凭据来登录它。使用 Exploit-DB 上的漏洞利用我们可以将源代码复制到盒子中,编译它,然后使用它在 mysql 中创建的共享库以 root 身份执行代码。
让我们使用 searchsploit 获取代码:
本地开启一个web服务,将文件下载到目标机器上。
接着使用gcc进行编译。
然后下载到目标机器上。
MYsql登录
在之前获取到了机器的用户和密码,然后进行登录。
权限提升
Raptor
漏洞利用:
有很多关于如何使用称为 Raptor 的代码来利用以 root 身份运行的 MySQL,我的想法是,我将编写一个共享库,将 SQL 中的命令运行到插件目录中,然后添加一个命令来访问它并以 root 身份执行。
我需要获取漏洞利用文件的副本并使用注释中的说明进行编译:
将脚本文件上传上去。
漏洞利用过程
1.创建一个foo表并将二进制文件读入其中:
2.查看插件目录
3.将二进制文件写入上面的插件目录,并将其作为用户定义的函数加载:
4.测试文件权限。
5.运行。
mysql复制bash并将其更改为 SUID:
需要找一个文件运行的地方不是/dev/shm,因为它已经安装nosuid:
而/tmp会正常工作。因为bash删除 privs,运行它会返回一个非 root的 shell:
获得root.txt
读取root.txt
总结:
靶机主要是从信息收集开始,发现是flask搭建的,然后使用flask unsign进行解密,暴力破解。接着使用枚举出的用户进行FTP登录,FTP登录之后,下载pdf文件,发现管理员账号和密码规则,然后登录FTP管理员,接着下载压缩包,进行文件分析,发现可以使用CVE-2021-23639历史漏洞可以获取权限,在文件中发现存在mysql服务,接着进行权限提升,获取到了root文件。
相关推荐
- 程序员:JDK的安装与配置(完整版)_jdk的安装方法
-
对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...
- Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置
-
一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...
- 麒麟系统安装JAVA JDK教程_麒麟系统配置jdk
-
检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...
- 学习笔记-Linux JDK - 安装&配置
-
前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...
- Linux新手入门系列:Linux下jdk安装配置
-
本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...
- 测试员必备:Linux下安装JDK 1.8你必须知道的那些事
-
1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...
- Linux 下安装JDK17_linux 安装jdk1.8 yum
-
一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...
- 在Ubuntu系统中安装JDK 17并配置环境变量教程
-
在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...
- 如何在 Linux 上安装 Java_linux安装java的步骤
-
在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...
- Windows和Linux环境下的JDK安装教程
-
JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...
- linux安装jdk_linux安装jdk软连接
-
JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...
- linux安装jdk,全局配置,不同用户不同jdk
-
jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...
- 运维大神教你在linux下安装jdk8_linux安装jdk1.7
-
1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...
- window和linux安装JDK1.8_linux 安装jdk1.8.tar
-
Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...
- 最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?
-
默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)