24 KiB
Ανασκόπηση Πηγαίου Κώδικα / Εργαλεία SAST
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Υποστήριξη HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Κατευθύνσεις και Λίστες εργαλείων
- https://owasp.org/www-community/Source_Code_Analysis_Tools
- https://github.com/analysis-tools-dev/static-analysis
Πολυγλωσσικά Εργαλεία
Naxus - AI-Gents
Υπάρχει ένα δωρεάν πακέτο για ανασκόπηση PRs.
Semgrep
Είναι ένα εργαλείο Ανοιχτού Κώδικα.
Υποστηριζόμενες Γλώσσες
Κατηγορία | Γλώσσες |
---|---|
GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX |
Beta | Kotlin · Rust |
Πειραματική | Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · |
Γρήγορη Εκκίνηση
{% 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 %}
Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση semgrep για VSCode για να αποκτήσετε τα ευρήματα μέσα στο VSCode.
SonarQube
Υπάρχει μια εγκαταστάσιμη δωρεάν έκδοση.
Γρήγορη Εκκίνηση
{% 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
Υπάρχει μια εγκαταστάσιμη δωρεάν έκδοση αλλά σύμφωνα με την άδεια μπορείτε να χρησιμοποιείτε μόνο τη δωρεάν έκδοση του codeQL σε έργα Ανοιχτού Κώδικα.
Εγκατάσταση
{% 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 %}
Quick Start - Ετοιμάστε τη βάση δεδομένων
{% hint style="success" %} Το πρώτο πράγμα που πρέπει να κάνετε είναι να ετοιμάσετε τη βάση δεδομένων (δημιουργήστε το δέντρο κώδικα) ώστε αργότερα οι ερωτήσεις να εκτελούνται πάνω σε αυτήν. {% endhint %}
- Μπορείτε να επιτρέψετε στο codeql να αναγνωρίσει αυτόματα τη γλώσσα του repo και να δημιουργήσει τη βάση δεδομένων
{% 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" %} Αυτό συνήθως θα προκαλέσει ένα σφάλμα λέγοντας ότι έχει καθοριστεί περισσότερη από μία γλώσσα (ή ανιχνεύθηκε αυτόματα). Ελέγξτε τις επόμενες επιλογές για να το διορθώσετε! {% endhint %}
- Μπορείτε να το κάνετε αυτό χειροκίνητα υποδεικνύοντας το repo και τη γλώσσα (λίστα γλωσσών)
{% 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 %}
- Αν το repo σας χρησιμοποιεί περισσότερες από 1 γλώσσα, μπορείτε επίσης να δημιουργήσετε 1 DB ανά γλώσσα υποδεικνύοντας κάθε γλώσσα.
{% 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
να αναγνωρίσει όλες τις γλώσσες για εσάς και να δημιουργήσει μια βάση δεδομένων ανά γλώσσα. Πρέπει να του δώσετε ένα GITHUB_TOKEN.
{% 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 %}
Γρήγορη Εκκίνηση - Ανάλυση του κώδικα
{% hint style="success" %} Τώρα είναι επιτέλους η ώρα να αναλύσετε τον κώδικα {% endhint %}
Θυμηθείτε ότι αν χρησιμοποιήσατε πολλές γλώσσες, μια βάση δεδομένων ανά γλώσσα θα έχει δημιουργηθεί στη διαδρομή που καθορίσατε.
{% 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 %}
Γρήγορη Εκκίνηση - Σκριπταρισμένη
{% 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 %}
Μπορείτε να οπτικοποιήσετε τα ευρήματα στο https://microsoft.github.io/sarif-web-component/ ή χρησιμοποιώντας την επέκταση VSCode SARIF viewer.
Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση VSCode για να αποκτήσετε τα ευρήματα μέσα στο VSCode. Θα χρειαστεί να δημιουργήσετε μια βάση δεδομένων χειροκίνητα, αλλά στη συνέχεια μπορείτε να επιλέξετε οποιαδήποτε αρχεία και να κάνετε κλικ στο Δεξί Κλικ
-> CodeQL: Run Queries in Selected Files
Snyk
Υπάρχει μια εγκαταστάσιμη δωρεάν έκδοση.
Γρήγορη Εκκίνηση
# 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
Μπορείτε επίσης να χρησιμοποιήσετε την snyk VSCode Extension για να αποκτήσετε ευρήματα μέσα στο VSCode.
Insider
Είναι Ανοιχτού Κώδικα, αλλά φαίνεται μη συντηρούμενο.
Υποστηριζόμενες Γλώσσες
Java (Maven και Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C#, και Javascript (Node.js).
Γρήγορη Εκκίνηση
# 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
Δωρεάν για δημόσια αποθετήρια.
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: Στατικός σαρωτής ασφαλείας κώδικα (SAST) για εφαρμογές Node.js που υποστηρίζεται από libsast και semgrep.
# 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 είναι να σας βοηθήσει να ανιχνεύσετε τη χρήση εκδόσεων βιβλιοθηκών JS με γνωστές ευπάθειες.
# Install
npm install -g retire
# Run
cd /path/to/repo
retire --colors
Electron
- electronegativity: Είναι ένα εργαλείο για την αναγνώριση κακών ρυθμίσεων και προτύπων ασφαλείας σε εφαρμογές βασισμένες σε Electron.
Python
- Bandit: Ο Bandit είναι ένα εργαλείο σχεδιασμένο για να βρίσκει κοινά ζητήματα ασφαλείας στον κώδικα Python. Για να το κάνει αυτό, ο Bandit επεξεργάζεται κάθε αρχείο, δημιουργεί ένα AST από αυτό και εκτελεί κατάλληλα πρόσθετα στους κόμβους του AST. Μόλις ο Bandit ολοκληρώσει τη σάρωση όλων των αρχείων, δημιουργεί μια αναφορά.
# Install
pip3 install bandit
# Run
bandit -r <path to folder>
- safety: Το Safety ελέγχει τις εξαρτήσεις Python για γνωστές ευπάθειες ασφαλείας και προτείνει τις κατάλληλες διορθώσεις για τις ευπάθειες που ανιχνεύονται. Το Safety μπορεί να εκτελείται σε μηχανές προγραμματιστών, σε CI/CD pipelines και σε παραγωγικά συστήματα.
# Install
pip install safety
# Run
safety check
Pyt: Μη συντηρούμενο.
.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
Task | Command |
---|---|
Execute Jar | java -jar [jar] |
Unzip Jar | unzip -d [output directory] [jar] |
Create Jar | jar -cmf META-INF/MANIFEST.MF [output jar] * |
Base64 SHA256 | sha256sum [file] | cut -d' ' -f1 | xxd -r -p | base64 |
Remove Signing | rm META-INF/.SF META-INF/.RSA META-INF/*.DSA |
Delete from Jar | zip -d [jar] [file to remove] |
Decompile class | procyon -o . [path to class] |
Decompile Jar | procyon -jar [jar] -o [output directory] |
Compile class | javac [path to .java file] |
Πηγαίνετε
https://github.com/securego/gosec
PHP
Wordpress Plugins
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Discovery
- Burp:
- Spider και ανακάλυψη περιεχομένου
- Sitemap > φίλτρο
- Sitemap > δεξί κλικ στο domain > Engagement tools > Βρείτε scripts
waybackurls <domain> |grep -i "\.js" |sort -u
Static Analysis
Unminimize/Beautify/Prettify
- https://prettier.io/playground/
- https://beautifier.io/
- Δείτε μερικά από τα εργαλεία που αναφέρονται στο 'Deobfuscate/Unpack' παρακάτω.
Deobfuscate/Unpack
Σημείωση: Ίσως να μην είναι δυνατόν να γίνει πλήρης αποσυμπίεση.
- Βρείτε και χρησιμοποιήστε αρχεία .map:
- Αν τα αρχεία .map είναι εκτεθειμένα, μπορούν να χρησιμοποιηθούν για εύκολη αποσυμπίεση.
- Συνήθως, το foo.js.map αντιστοιχεί στο foo.js. Αναζητήστε τα χειροκίνητα.
- Χρησιμοποιήστε JS Miner για να τα αναζητήσετε.
- Βεβαιωθείτε ότι διεξάγεται ενεργή σάρωση.
- Διαβάστε 'Tips/Notes'
- Αν βρεθούν, χρησιμοποιήστε Maximize για να αποσυμπιέσετε.
- Χωρίς αρχεία .map, δοκιμάστε το JSnice:
- Αναφορές: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
- Συμβουλές:
- Αν χρησιμοποιείτε jsnice.org, κάντε κλικ στο κουμπί επιλογών δίπλα στο κουμπί "Nicify JavaScript" και αποεπιλέξτε "Infer types" για να μειώσετε την ακαταστασία στον κώδικα με σχόλια.
- Βεβαιωθείτε ότι δεν αφήνετε κενές γραμμές πριν από το script, καθώς μπορεί να επηρεάσει τη διαδικασία αποσυμπίεσης και να δώσει ανακριβή αποτελέσματα.
- Για μερικές πιο σύγχρονες εναλλακτικές στο JSNice, μπορείτε να δείτε τα εξής:
- https://github.com/pionxzh/wakaru
-
Javascript decompiler, unpacker και unminify toolkit
Το Wakaru είναι ο Javascript decompiler για σύγχρονα frontend. Επαναφέρει τον αρχικό κώδικα από μια συσκευασμένη και μεταγλωττισμένη πηγή.
- https://github.com/j4k0xb/webcrack
-
Deobfuscate obfuscator.io, unminify και unpack bundled javascript
- https://github.com/jehna/humanify
-
Un-minify Javascript code χρησιμοποιώντας ChatGPT
Αυτό το εργαλείο χρησιμοποιεί μεγάλα γλωσσικά μοντέλα (όπως ChatGPT & llama2) και άλλα εργαλεία για να αποσυμπιέσει τον κώδικα Javascript. Σημειώστε ότι τα LLMs δεν εκτελούν καμία δομική αλλαγή – παρέχουν μόνο υποδείξεις για την μετονομασία μεταβλητών και συναρτήσεων. Η βαριά εργασία γίνεται από το Babel σε επίπεδο AST για να διασφαλιστεί ότι ο κώδικας παραμένει 1-1 ισοδύναμος.
- https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html
-
Χρησιμοποιώντας LLMs για να αντιστρέψετε την ελαχιστοποίηση ονομάτων μεταβλητών Javascript
- Χρησιμοποιήστε
console.log()
;
- Βρείτε την τιμή επιστροφής στο τέλος και αλλάξτε την σε
console.log(<packerReturnVariable>);
ώστε ο αποσυμπιεσμένος js να εκτυπώνεται αντί να εκτελείται. - Στη συνέχεια, επικολλήστε τον τροποποιημένο (και ακόμα αποσυμπιεσμένο) js στο https://jsconsole.com/ για να δείτε τον αποσυμπιεσμένο js να καταγράφεται στην κονσόλα.
- Τέλος, επικολλήστε την αποσυμπιεσμένη έξοδο στο https://prettier.io/playground/ για να την ομορφύνετε για ανάλυση.
- Σημείωση: Αν εξακολουθείτε να βλέπετε συσκευασμένο (αλλά διαφορετικό) js, μπορεί να είναι αναδρομικά συσκευασμένο. Επαναλάβετε τη διαδικασία.
References
- YouTube: DAST - Javascript Dynamic Analysis
- https://blog.nvisium.com/angular-for-pentesters-part-1
- https://blog.nvisium.com/angular-for-pentesters-part-2
- devalias's GitHub Gists:
- Deobfuscating / Unminifying Obfuscated Web App Code
- Reverse Engineering Webpack Apps
- etc
Tools
Less Used References
- https://cyberchef.org/
- https://olajs.com/javascript-prettifier
- https://jshint.com/
- https://github.com/jshint/jshint/
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.