20 KiB
Kaynak kodu İncelemesi / SAST Araçları
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da 🐦 @hacktricks_live'i takip edin.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Rehberlik ve Araç Listeleri
- https://owasp.org/www-community/Source_Code_Analysis_Tools
- https://github.com/analysis-tools-dev/static-analysis
Çok Dilli Araçlar
Naxus - AI-Gents
PR'leri incelemek için ücretsiz bir paket bulunmaktadır.
Semgrep
Bu bir Açık Kaynak araçtır.
Desteklenen Diller
Kategori | Diller |
---|---|
GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX |
Beta | Kotlin · Rust |
Deneysel | Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · |
Hızlı Başlangıç
{% code overflow="wrap" %}
# Install https://github.com/returntocorp/semgrep#option-1-getting-started-from-the-cli
brew install semgrep
# Go to your repo code and scan
cd repo
semgrep scan --config auto
{% endcode %}
Ayrıca, bulguları VSCode içinde almak için semgrep VSCode Extension kullanabilirsiniz.
SonarQube
Yüklenebilir ücretsiz bir sürüm vardır.
Hızlı Başlangıç
{% code overflow="wrap" %}
# Run the paltform in docker
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
# Install cli tool
brew install sonar-scanner
# Go to localhost:9000 and login with admin:admin or admin:sonar
# Generate a local project and then a TOKEN for it
# Using the token and from the folder with the repo, scan it
cd path/to/repo
sonar-scanner \
-Dsonar.projectKey=<project-name> \
-Dsonar.sources=. \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.token=<sonar_project_token>
{% endcode %}
CodeQL
Kurulabilir ücretsiz bir versiyon vardır, ancak lisansa göre ücretsiz codeQL versiyonunu yalnızca Açık Kaynak projelerinde kullanabilirsiniz.
Kurulum
{% code overflow="wrap" %}
# Download your release from https://github.com/github/codeql-action/releases
## Example
wget https://github.com/github/codeql-action/releases/download/codeql-bundle-v2.14.3/codeql-bundle-osx64.tar.gz
# Move it to the destination folder
mkdir ~/codeql
mv codeql-bundle* ~/codeql
# Decompress it
cd ~/codeql
tar -xzvf codeql-bundle-*.tar.gz
rm codeql-bundle-*.tar.gz
# Add to path
echo 'export PATH="$PATH:/Users/username/codeql/codeql"' >> ~/.zshrc
# Check it's correctly installed
## Open a new terminal
codeql resolve qlpacks #Get paths to QL packs
{% endcode %}
Hızlı Başlangıç - Veritabanını Hazırlayın
{% hint style="success" %} Yapmanız gereken ilk şey veritabanını hazırlamak (kod ağacını oluşturmak) ve böylece daha sonra sorgular bunun üzerinde çalıştırılabilir. {% endhint %}
- Codeql'nin repo dilini otomatik olarak tanımlamasına ve veritabanını oluşturmasına izin verebilirsiniz.
{% code overflow="wrap" %}
codeql database create <database> --language <language>
# Example
codeql database create /path/repo/codeql_db --source-root /path/repo
## DB will be created in /path/repo/codeql_db
{% endcode %}
{% hint style="danger" %} Bu genellikle bir hata tetikleyecektir ve birden fazla dilin belirtildiğini (veya otomatik olarak tespit edildiğini) söyleyecektir. Bunu düzeltmek için sonraki seçeneklere bakın! {% endhint %}
- Bunu manuel olarak belirterek repo ve dili yapabilirsiniz (diller listesi)
{% code overflow="wrap" %}
codeql database create <database> --language <language> --source-root </path/to/repo>
# Example
codeql database create /path/repo/codeql_db --language javascript --source-root /path/repo
## DB will be created in /path/repo/codeql_db
{% endcode %}
- Eğer reposunuz 1'den fazla dil kullanıyorsa, her dili belirterek her dil için 1 DB de oluşturabilirsiniz.
{% code overflow="wrap" %}
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create <database> --source-root /path/to/repo --db-cluster --language "javascript,python"
# Example
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create /path/repo/codeql_db --source-root /path/to/repo --db-cluster --language "javascript,python"
## DBs will be created in /path/repo/codeql_db/*
{% endcode %}
codeql
'in sizin için tüm dilleri tanımlamasına ve her dil için bir DB oluşturmasına da izin verebilirsiniz. Buna bir GITHUB_TOKEN vermeniz gerekiyor.
{% code overflow="wrap" %}
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create <database> --db-cluster --source-root </path/to/repo>
# Example
export GITHUB_TOKEN=ghp_32849y23hij4...
codeql database create /tmp/codeql_db --db-cluster --source-root /path/repo
## DBs will be created in /path/repo/codeql_db/*
{% endcode %}
Hızlı Başlangıç - Kodu Analiz Et
{% hint style="success" %} Artık kodu analiz etme zamanı geldi {% endhint %}
Birden fazla dil kullandıysanız, her dil için bir DB belirtilen yolda oluşturulmuş olacaktır.
{% code overflow="wrap" %}
# Default analysis
codeql database analyze <database> --format=<format> --output=</out/file/path>
# Example
codeql database analyze /tmp/codeql_db/javascript --format=sarif-latest --output=/tmp/graphql_results.sarif
# Specify QL pack to use in the analysis
codeql database analyze <database> \
<qls pack> --sarif-category=<language> \
--sarif-add-baseline-file-info \ --format=<format> \
--output=/out/file/path>
# Example
codeql database analyze /tmp/codeql_db \
javascript-security-extended --sarif-category=javascript \
--sarif-add-baseline-file-info --format=sarif-latest \
--output=/tmp/sec-extended.sarif
{% endcode %}
Hızlı Başlangıç - Scriptli
{% code overflow="wrap" %}
export GITHUB_TOKEN=ghp_32849y23hij4...
export REPO_PATH=/path/to/repo
export OUTPUT_DIR_PATH="$REPO_PATH/codeql_results"
mkdir -p "$OUTPUT_DIR_PATH"
export FINAL_MSG="Results available in: "
echo "Creating DB"
codeql database create "$REPO_PATH/codeql_db" --db-cluster --source-root "$REPO_PATH"
for db in `ls "$REPO_PATH/codeql_db"`; do
echo "Analyzing $db"
codeql database analyze "$REPO_PATH/codeql_db/$db" --format=sarif-latest --output="${OUTPUT_DIR_PATH}/$db).sarif"
FINAL_MSG="$FINAL_MSG ${OUTPUT_DIR_PATH}/$db.sarif ,"
echo ""
done
echo $FINAL_MSG
{% endcode %}
Bulguları https://microsoft.github.io/sarif-web-component/ adresinde veya VSCode uzantısı SARIF viewer kullanarak görselleştirebilirsiniz.
Ayrıca bulguları VSCode içinde almak için VSCode uzantısını kullanabilirsiniz. Yine de manuel olarak bir veritabanı oluşturmanız gerekecek, ancak ardından herhangi bir dosyayı seçip Sağ Tık
-> CodeQL: Seçilen Dosyalarda Sorguları Çalıştır
seçeneğine tıklayabilirsiniz.
Snyk
Yüklenebilir ücretsiz bir sürüm bulunmaktadır.
Hızlı Başlangıç
# Install
sudo npm install -g snyk
# Authenticate (you can use a free account)
snyk auth
# Test for open source vulns & license issues
snyk test [--all-projects]
# Test for code vulnerabilities
## This will upload your code and you need to enable this option in: Settings > Snyk Code
snyk test code
# Test for vulns in images
snyk container test [image]
# Test for IaC vulns
snyk iac test
You can also use the snyk VSCode Extension to get findings inside VSCode.
Insider
It's Açık Kaynak, but looks bakımsız.
Supported Languages
Java (Maven ve Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C#, ve Javascript (Node.js).
Quick Start
# Check the correct release for your environment
$ wget https://github.com/insidersec/insider/releases/download/2.1.0/insider_2.1.0_linux_x86_64.tar.gz
$ tar -xf insider_2.1.0_linux_x86_64.tar.gz
$ chmod +x insider
$ ./insider --tech javascript --target <projectfolder>
DeepSource
Açık repos için ücretsizdir.
NodeJS
yarn
# Install
brew install yarn
# Run
cd /path/to/repo
yarn audit
npm audit
pnpm
# Install
npm install -g pnpm
# Run
cd /path/to/repo
pnpm audit
- nodejsscan: Node.js uygulamaları için libsast ve semgrep tarafından desteklenen statik güvenlik kod tarayıcısı (SAST).
# Install & run
docker run -it -p 9090:9090 opensecurity/nodejsscan:latest
# Got to localhost:9090
# Upload a zip file with the code
- RetireJS: Retire.js'in amacı, bilinen güvenlik açıklarına sahip JS-kütüphane sürümlerinin kullanımını tespit etmenize yardımcı olmaktır.
# Install
npm install -g retire
# Run
cd /path/to/repo
retire --colors
Electron
- electronegativity: Electron tabanlı uygulamalardaki yanlış yapılandırmaları ve güvenlik anti-paterni tanımlamak için bir araçtır.
Python
- Bandit: Bandit, Python kodundaki yaygın güvenlik sorunlarını bulmak için tasarlanmış bir araçtır. Bunu yapmak için Bandit her dosyayı işler, ondan bir AST oluşturur ve AST düğümleri üzerinde uygun eklentileri çalıştırır. Bandit tüm dosyaları taradıktan sonra bir rapor oluşturur.
# Install
pip3 install bandit
# Run
bandit -r <path to folder>
- safety: Safety, bilinen güvenlik açıkları için Python bağımlılıklarını kontrol eder ve tespit edilen açıklar için uygun düzeltmeleri önerir. Safety, geliştirici makinelerinde, CI/CD boru hatlarında ve üretim sistemlerinde çalıştırılabilir.
# Install
pip install safety
# Run
safety check
Pyt: Bakımı yapılmıyor.
.NET
# dnSpy
https://github.com/0xd4d/dnSpy
# .NET compilation
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe test.cs
RUST
# Install
cargo install cargo-audit
# Run
cargo audit
#Update the Advisory Database
cargo audit fetch
Java
# JD-Gui
https://github.com/java-decompiler/jd-gui
# Java compilation step-by-step
javac -source 1.8 -target 1.8 test.java
mkdir META-INF
echo "Main-Class: test" > META-INF/MANIFEST.MF
jar cmvf META-INF/MANIFEST.MF test.jar test.class
Görev | Komut |
---|---|
Jar Çalıştır | java -jar [jar] |
Jar Aç | unzip -d [çıkış dizini] [jar] |
Jar Oluştur | jar -cmf META-INF/MANIFEST.MF [çıkış jar] * |
Base64 SHA256 | sha256sum [dosya] | cut -d' ' -f1 | xxd -r -p | base64 |
İmzayı Kaldır | rm META-INF/.SF META-INF/.RSA META-INF/*.DSA |
Jar'dan Sil | zip -d [jar] [silinecek dosya] |
Sınıfı Decompile | procyon -o . [sınıfın yolu] |
Jar'ı Decompile | procyon -jar [jar] -o [çıkış dizini] |
Sınıfı Derle | javac [yol .java dosyası] |
Git
https://github.com/securego/gosec
PHP
Wordpress Eklentileri
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Keşif
- Burp:
- İçeriği tarayın ve keşfedin
- Sitemap > filtre
- Sitemap > alan adına sağ tıklayın > Etkileşim araçları > Scriptleri Bul
waybackurls <domain> |grep -i "\.js" |sort -u
Statik Analiz
Unminimize/Beautify/Prettify
- https://prettier.io/playground/
- https://beautifier.io/
- Aşağıda 'Deobfuscate/Unpack' bölümünde bahsedilen bazı araçlara da bakın.
Deobfuscate/Unpack
Not: Tamamen deobfuscate etmek mümkün olmayabilir.
- .map dosyalarını bulun ve kullanın:
- Eğer .map dosyaları açığa çıkmışsa, bunlar kolayca deobfuscate etmek için kullanılabilir.
- Genellikle, foo.js.map foo.js'e karşılık gelir. Manuel olarak arayın.
- Onları bulmak için JS Miner kullanın.
- Aktif tarama yapıldığından emin olun.
- 'İpuçları/Notlar'ı okuyun.
- Bulunduğunda, deobfuscate etmek için Maximize kullanın.
- .map dosyaları olmadan, JSnice'ı deneyin:
- Referanslar: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
- İpuçları:
- jsnice.org kullanıyorsanız, "Nicify JavaScript" butonunun yanındaki seçenekler butonuna tıklayın ve "Infer types" seçeneğini kaldırarak kodu yorumlarla karıştırmamaya dikkat edin.
- Scriptin önünde boş satır bırakmadığınızdan emin olun, çünkü bu deobfuscate sürecini etkileyebilir ve yanlış sonuçlar verebilir.
- JSNice için daha modern alternatifler arıyorsanız, aşağıdakilere göz atabilirsiniz:
- https://github.com/pionxzh/wakaru
-
Javascript decompiler, unpacker ve unminify aracı
Wakaru, modern frontend için Javascript decompiler'dır. Paketlenmiş ve dönüştürülmüş bir kaynaktan orijinal kodu geri getirir.
- https://github.com/j4k0xb/webcrack
-
obfuscator.io'yu deobfuscate et, unminify et ve paketlenmiş javascript'i aç
- https://github.com/jehna/humanify
-
ChatGPT kullanarak Javascript kodunu un-minify et
Bu araç, Javascript kodunu un-minify etmek için büyük dil modelleri (ChatGPT & llama2 gibi) ve diğer araçları kullanır. LLM'lerin herhangi bir yapısal değişiklik yapmadığını unutmayın - yalnızca değişkenleri ve fonksiyonları yeniden adlandırmak için ipuçları sağlar. Ağır iş, kodun 1-1 eşdeğer kalmasını sağlamak için AST seviyesinde Babel tarafından yapılır.
- https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html
-
JavaScript değişken adı minifikasyonunu tersine çevirmek için LLM'leri kullanma
console.log()
kullanın;
- Sonunda dönen değeri bulun ve
console.log(<packerReturnVariable>);
olarak değiştirin, böylece deobfuscate edilmiş js çalıştırılmak yerine yazdırılır. - Ardından, değiştirilmiş (ve hala obfuscate edilmiş) js'i https://jsconsole.com/ yapıştırarak deobfuscate edilmiş js'in konsola yazdırıldığını görün.
- Son olarak, deobfuscate edilmiş çıktıyı https://prettier.io/playground/ yapıştırarak analiz için güzelleştirin.
- Not: Eğer hala paketlenmiş (ama farklı) js görüyorsanız, bu muhtemelen özyinelemeli olarak paketlenmiştir. Süreci tekrarlayın.
Referanslar
- YouTube: DAST - Javascript Dinamik Analiz
- https://blog.nvisium.com/angular-for-pentesters-part-1
- https://blog.nvisium.com/angular-for-pentesters-part-2
- devalias'ın GitHub Gists:
- Obfuscate Edilmiş Web Uygulama Kodunu Deobfuscate Etme / Unminify Etme
- Webpack Uygulamalarını Tersine Mühendislik
- vs
Araçlar
Daha Az Kullanılan Referanslar
- https://cyberchef.org/
- https://olajs.com/javascript-prettifier
- https://jshint.com/
- https://github.com/jshint/jshint/
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da 🐦 @hacktricks_live'i takip edin.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.