技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
攻防视角下的敏感信息泄露之检测与防护
1398133550745333
渗透测试
192浏览 · 2025-03-13 18:01
返回文档
攻防视角下的敏感信息泄露之检测与防护
前言
在日常渗透测试和安全研究中,敏感信息泄露一直是个老生常谈的话题,但是找起来的时候可能无从下手,结合OWASP总结下来的场景,每种都会进行详细的分析,并提出利用和防护思路
集中式硬编码密码
描述
当人们编写概念验证时,他们通常从硬编码的密钥开始,例如代码中的密码。如果我们忘记删除这些硬编码的密钥怎么办?
您能发现我们在 Java 代码中寻找的秘密吗?在容器中查找它怎么样?
有时,更简单的工具是最有效的。尝试克隆存储库并使用 grep 查看您找到的内容。也可以使用 Git-secrets 或 Trufflehog 进行查找。只需深入研究代码即可!
基础
首先我们了解一下什么是集中式硬编码密码
集中式硬编码密码是指将密码直接写入到程序代码中的一种做法,并且这些密码通常是被集中管理或存储在一个特定的位置。
这里直接举一个例子
可以看到数据库的账号和密码没有经过任何的处理,直接展现在了代码中
progress
题目给了代码库
https://github.com/OWASP/wrongsecrets/tree/master/src/main/java/org/owasp/wrongsecrets
当然可以直接搜索,在 github 中但是还有其他的不必要的代码
这里选择直接下载下来,因为 linux 中有 grep 命令可以匹配
然后我们先下载
下载完成之后查找
首先我们需要递归查找,以免漏掉了
方法一
-r 或 --recursive 选项表示递归地在目录中搜索。即不仅会搜索指定文件中的内容,还会搜索指定目录及其所有子目录中的文件。
结果如下
大概看一看应该就可以知道是在
解码之后交了也不对,离谱
不过不重要,学习收集的方法就 ok 了
方法二
其实目前已经有很多工具可以使用了比如 Trufflehog
Trufflehog
TruffleHog 是最强大的密钥发现、分类、验证和分析工具。在此上下文中,secret 是指计算机用于向另一台计算机验证自身的凭据。这包括 API 密钥、数据库密码、私有加密密钥等...
大概效果如下
如何安装就不说了简单说一下怎么使用
首先下载一下
完成之后我们可以使用了
大概的效果如下,可以看到给出了类型和地段
但是结果很多,我们只需要密码的话还可以匹配一下
然后把 UEBzc3dvcmQxMjM=解码
按理来说很像了,还是错的,不过不重要,思路 ok 就可以了
反思
现在,您可以知道您可以轻松检测代码中存储的许多密钥。即使代码已编译,您仍然可以对其进行逆向工程以查找密钥。这就是为什么硬编码的 secret 从来都不是一个好主意。我们经常陷入一种误解,即如果我不能对其进行逆向工程,那么攻击者也不能,这就是为什么许多人认为 C/C++/Golang 中的硬编码比 Java 中的硬编码更安全。
所以我们就不要在代码中直接放入我们的密码就好了
硬编码密码 2
基础
application.properties 文件
application.properties 是 Spring Boot 应用的配置文件,它用于定义应用的各种设置和属性。你可以在 application.properties 文件中配置数据库连接、日志设置、端口、Spring Boot 自动配置的参数等。
比如一个例子
可以看见里面还是有我们的数据库密码,用户密码啥的
progress
题目描述
开发人员没有直接对密码进行硬编码,而是尝试将其隐藏在 Spring Boot 的 application.properties 中。
这样,就不能再直接在 .java 或编译的 .class 文件中找到它。那么你怎么能检测到它呢?
您可以通过 SAST 解决方案(如 truffleHog 和 git-secrets)以及手动检查您的 application.properties 轻松检测到这一点。
首先找到这个文件很多方法
方法一
直接在文件中查找
可以使用 find 命令
find 命令可以帮助你在指定目录及其子目录中搜索文件
然后两个文件都读取一下
这个文件可以看出来是没有什么信息的
看一下其他的
内容很多,但是关键内容
或者我们 grep 匹配一下
也可以的
成功
反思
正如你所看到的,我们比 challenge1 有更多的灵活性。但是:我们在代码中仍然有密码!
虽然我们现在可以在后面的阶段轻松地重载变量 - 正如你在接下来的挑战中看到的那样,我们经常看到 secret 被存储为 Spring Config 或 Spring Cloud 配置的一部分,而不会在后面的阶段覆盖它。这意味着每个有权访问 Spring Cloud 配置的人现在都可以了解密钥是什么。
基于 Docker ENV的密码
基础
在 Docker 中,ENV 是一个用于设置环境变量的指令,它可以在 Dockerfile 中声明环境变量,并在容器运行时使用。使用 ENV 来设置密码或者其他敏感信息是 Docker 容器中常见的一种做法,但它并不推荐用于生产环境中的敏感数据,因为环境变量可以通过某些工具或日志轻松访问到。因此,我们需要理解基础知识,并在实际应用中采取适当的措施。
比如我们见到的
progress
我们已经拉取了 docker 了,现在我们来寻找寻找
首先想着查看一下配置的信息
方法一
docker inspect
其中"DOCKER_ENV_PASSWORD=This is it",就是
方法二 docker history
然后查看一下历史记录
可以看到构建的命令都列出来了
平时测试最好是全都看,我这里为了做题,直接匹配了
成功
其他方法
当然还给了其他方法,不过都大差不差了
在线访问 Docker 存储库:
转到 WrongSecrets docker 存储库
查看与您相关的标签。在那里,您可以找到用于编写容器的所有命令。DOCKER_ENV_PASSWORD 的价值是什么?
使用 Dockle Dockle:
按照 Github 页面的说明安装 Dockle
`运行 dockle jeroenwillemsen/wrongsecrets:
并使用其输出进行 Secret 搜寻。
执行到容器中并转储 ENV-vars:
`使用 docker run jeroenwillemsen/wrongsecrets:
在本地启动容器
通过在下一个终端中执行 docker ps 来查找容器 ID
`做 docker exec -it
sh
在容器中执行 env 。
反思
正如您现在所知道的,您可以轻松检测存储在容器中的任何密钥。无论是 ENV、文件还是其他属性:如果系统可以读取它,那么人类也可以。
鉴于让容器不可变且具有版本控制是最佳实践,除非您再次从注册表中删除它,否则您通常会将密钥永久保存在容器中。
然后一些重要的环境变量比如
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AMAZON_AWS_ACCESS_KEY_ID
AMAZON_AWS_SECRET_ACCESS_KEY
GH_TOKEN
GITHUB_TOKEN
GH_ENTERPRISE_TOKEN
GITHUB_ENTERPRISE_TOKEN
.......
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
发布投稿
热门文章
1
飞塔防火墙漏洞深度利用及调试环境搭建
2
Linux Shellcode开发(Stager & Reverse Shell)
3
Windows Shellcode开发(x64 stager)
4
Fuzz挖掘sudo提权漏洞:一次堆溢出如何逆向分析出提权思路
5
1.6K主机全域沦陷实录:从单点突破到域控接管的终极横向渗透链
近期热点
一周
月份
季度
1
飞塔防火墙漏洞深度利用及调试环境搭建
2
Linux Shellcode开发(Stager & Reverse Shell)
3
Windows Shellcode开发(x64 stager)
4
Fuzz挖掘sudo提权漏洞:一次堆溢出如何逆向分析出提权思路
5
1.6K主机全域沦陷实录:从单点突破到域控接管的终极横向渗透链
暂无相关信息
暂无相关信息
优秀作者
1
一天
贡献值:18800
2
T0daySeeker
贡献值:18700
3
1174735059082055
贡献值:15000
4
Yale
贡献值:14000
5
1674701160110592
贡献值:13000
6
LeeH
贡献值:10000
7
MeteorKai
贡献值:9000
8
熊猫正正
贡献值:8000
9
lufei
贡献值:8000
10
Bu0uCat
贡献值:8000
目录
攻防视角下的敏感信息泄露之检测与防护
前言
集中式硬编码密码
基础
progress
方法一
方法二
反思
硬编码密码 2
基础
progress
方法一
反思
基于 Docker ENV的密码
基础
progress
方法一 docker inspect
方法二 docker history
其他方法
反思
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板