28 KiB
Αναθεώρηση Πηγαίου Κώδικα / Εργαλεία SAST
Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα κόλπα σας στο hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Οδηγίες και Λίστες εργαλείων
- 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 |
Experimental | 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 %}
Γρήγορη Έναρξη - Προετοιμασία της βάσης δεδομένων
{% hint style="success" %} Το πρώτο πράγμα που πρέπει να κάνετε είναι να προετοιμάσετε τη βάση δεδομένων (δημιουργία του δέντρου κώδικα), έτσι ώστε αργότερα να εκτελούνται οι ερωτήσεις πάνω σε αυτήν. {% endhint %}
- Μπορείτε να επιτρέψετε στο codeql να αναγνωρίσει αυτόματα τη γλώσσα του αποθετηρίου και να δημιουργήσει τη βάση δεδομένων
{% 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 %}
- Μπορείτε να το κάνετε χειροκίνητα δηλώνοντας το αποθετήριο και τη γλώσσα (λίστα γλωσσών)
{% 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 %}
- Εάν το αποθετήριό σας χρησιμοποιεί περισσότερες από 1 γλώσσες, μπορείτε επίσης να δημιουργήσετε 1 βάση δεδομένων ανά γλώσσα που υποδεικνύει κάθε γλώσσα.
{% 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. Θα πρέπει ακόμα να δημιουργήσετε μια βάση δεδομένων με το χέρι, αλλά στη συνέχεια μπορείτε να επιλέξετε οποιαδήποτε αρχεία και να κάνετε κλικ στο Right Click
-> 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 για να λάβετε ευρήματα μέσα στο 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 ελέγχει τις εξαρτήσεις της Python για γνωστές ευπάθειες ασφάλειας και προτείνει τις κατάλληλες διορθώσεις για τις ευπάθειες που ανιχνεύονται. Το Safety μπορεί να εκτελεστεί σε μηχανές προγραμματιστών, σε αγωγούς CI/CD και σε συστήματα παραγωγής.
# 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
RUST είναι μια γλώσσα προγραμματισμού που έχει σχεδιαστεί για την ανάπτυξη ασφαλών και αποδοτικών συστημάτων λογισμικού. Έχει ένα σύστημα τύπων που επιτρέπει τον έλεγχο των σφαλμάτων κατά τη μεταγλώττιση, εξαλείφοντας τις συνήθεις ευπάθειες ασφάλειας που συνήθως συναντώνται σε άλλες γλώσσες προγραμματισμού. Επιπλέον, η RUST παρέχει αυστηρές κανόνες για τη διαχείριση της μνήμης, εξαλείφοντας τα σφάλματα που σχετίζονται με τη διαχείριση μνήμης όπως τα buffer overflows και τα null pointer dereferences.
Η RUST χρησιμοποιείται ευρέως για την ανάπτυξη λογισμικού υψηλής απόδοσης, όπως λειτουργικά συστήματα, ενσωματωμένα συστήματα και δικτυακές εφαρμογές. Επίσης, η RUST παρέχει εργαλεία για τον έλεγχο του κώδικα, όπως το Rustfmt για τη μορφοποίηση του κώδικα και το Clippy για τον έλεγχο της ποιότητας του κώδικα και την ανίχνευση πιθανών σφαλμάτων.
Αν και η RUST είναι μια σχετικά νέα γλώσσα προγραμματισμού, έχει κερδίσει δημοτικότητα λόγω των ασφαλείας και της απόδοσής της. Εάν είστε προγραμματιστής και ενδιαφέρεστε για την ανάπτυξη ασφαλούς και αποδοτικού λογισμικού, η RUST είναι μια εξαιρετική επιλογή.
# Install
cargo install cargo-audit
# Run
cargo audit
#Update the Advisory Database
cargo audit fetch
Java
Java είναι μια αντικειμενοστραφής γλώσσα προγραμματισμού που χρησιμοποιείται ευρέως για την ανάπτυξη εφαρμογών. Είναι μια γλώσσα υψηλού επιπέδου και ανεξάρτητη πλατφόρμας, που σημαίνει ότι μπορεί να τρέξει σε διάφορες πλατφόρμες χωρίς να απαιτείται ανακατασκευή του κώδικα. Η γλώσσα Java χρησιμοποιείται ευρέως για την ανάπτυξη web εφαρμογών, κινητών εφαρμογών, ενσωματωμένων συστημάτων και πολλών άλλων εφαρμογών.
Η ανάπτυξη εφαρμογών Java γίνεται συνήθως με τη χρήση ενός ενσωματωμένου ανάπτυξης περιβάλλοντος (IDE) όπως το Eclipse ή το IntelliJ IDEA. Αυτά τα εργαλεία παρέχουν πολλές λειτουργίες για την ανάπτυξη, τη δοκιμή και την αποσφαλμάτωση των εφαρμογών Java.
Για την ανάπτυξη ασφαλών εφαρμογών Java, είναι σημαντικό να γίνει έλεγχος του κώδικα για πιθανές ευπάθειες ασφάλειας. Υπάρχουν διάφορα εργαλεία αναθεώρησης κώδικα που μπορούν να χρησιμοποιηθούν για αυτόν τον σκοπό, όπως το FindBugs, το PMD και το Checkstyle. Αυτά τα εργαλεία ελέγχουν τον κώδικα για πιθανά προβλήματα ασφάλειας, όπως αδυναμίες ελέγχου πρόσβασης, ανεπιθύμητες πρακτικές προγραμματισμού και πιθανές ευπάθειες.
Επιπλέον, είναι σημαντικό να εφαρμοστούν καλές πρακτικές ασφάλειας κατά την ανάπτυξη εφαρμογών Java. Αυτές περιλαμβάνουν τη χρήση ασφαλών βιβλιοθηκών, την αποφυγή χρήσης ανακλαστικής πρόσβασης, την αποτροπή ανεπιθύμητων προσβάσεων στη βάση δεδομένων και την αποτροπή ευπάθειας στις επιθέσεις διασποράς.
Τέλος, είναι σημαντικό να παρακολουθούνται τα ανοικτά προβλήματα ασφάλειας και να ενημερώνεται το λογισμικό Java με τις τελευταίες ενημερώσεις ασφαλείας. Αυτό μπορεί να γίνει μέσω της χρήσης εργαλείων όπως το OWASP Dependency-Check, το οποίο ελέγχει τις εξαρτήσεις του λογισμικού για γνωστά προβλήματα ασφάλειας.
# 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
Εργασία | Εντολή |
---|---|
Εκτέλεση Jar | java -jar [jar] |
Ξεσυμπίεση Jar | unzip -d [κατάλογος εξόδου] [jar] |
Δημιουργία Jar | jar -cmf META-INF/MANIFEST.MF [output jar] * |
Base64 SHA256 | sha256sum [αρχείο] | cut -d' ' -f1 | xxd -r -p | base64 |
Αφαίρεση Υπογραφής | rm META-INF/.SF META-INF/.RSA META-INF/*.DSA |
Διαγραφή από το Jar | zip -d [jar] [αρχείο προς αφαίρεση] |
Αποσυναρμολόγηση κλάσης | procyon -o . [διαδρομή προς την κλάση] |
Αποσυναρμολόγηση Jar | procyon -jar [jar] -o [κατάλογος εξόδου] |
Μεταγλώττιση κλάσης | javac [διαδρομή προς το αρχείο .java] |
Πήγαινε
https://github.com/securego/gosec
PHP
Wordpress Plugins
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Ανακάλυψη
- Burp:
- Ανίχνευση περιεχομένου με το Spider
- Sitemap > φίλτρο
- Sitemap > δεξί κλικ στον τομέα > Εργαλεία συμμετοχής > Εύρεση scripts
waybackurls <domain> |grep -i "\.js" |sort -u
Στατική Ανάλυση
Αναστροφή Ελαχιστοποίησης/Ομορφοποίησης
Αποκωδικοποίηση/Ξεπακετάρισμα
Σημείωση: Μπορεί να μην είναι δυνατή η πλήρης αποκωδικοποίηση.
- Βρείτε και χρησιμοποιήστε αρχεία .map:
- Εάν τα αρχεία .map είναι προσβάσιμα, μπορούν να χρησιμοποιηθούν για εύκολη αποκωδικοποίηση.
- Συνήθως, το foo.js.map αντιστοιχεί στο foo.js. Αναζητήστε τα χειροκίνητα.
- Χρησιμοποιήστε το JS Miner για να τα βρείτε.
- Βεβαιωθείτε ότι πραγματοποιείται ενεργός σάρωση.
- Διαβάστε τις 'Συμβουλές/Σημειώσεις'
- Εάν βρεθούν, χρησιμοποιήστε το Maximize για αποκωδικοποίηση.
- Χωρίς αρχεία .map, δοκιμάστε το JSnice:
- Αναφορές: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
- Συμβουλές:
- Εάν χρησιμοποιείτε το jsnice.org, κάντε κλικ στο κουμπί επιλογών δίπλα στο κουμπί "Nicify JavaScript" και απενεργοποιήστε την επιλογή "Infer types" για να μειώσετε την περιττή πληροφορία στον κώδικα με σχόλια.
- Βεβαιωθείτε ότι δεν αφήνετε κενές γραμμές πριν από το σενάριο, καθώς μπορεί να επηρεάσει τη διαδικασία αποκωδικοποίησης και να δώσει ανακριβή αποτελέσματα.
- Χρησιμοποιήστε το console.log();
- Βρείτε την τιμή επιστροφής στο τέλος και αλλάξτε τη σε
console.log(<packerReturnVariable>);
ώστε να εκτυπωθεί ο αποκωδικοποιημένος js αντί να εκτελεστεί. - Στη συνέχεια, επικολλήστε το τροποποιημένο (και ακόμα αποκωδικοποιημένο) js στο https://jsconsole.com/ για να δείτε το αποκωδικοποιημένο js που καταγράφεται στην κονσόλα.
- Τέλος, επικολλήστε την αποκωδικοποιημένη έξοδο στο https://prettier.io/playground/ για να την ομορφοποιήσετε για ανάλυση.
- Σημείωση: Εάν εξακολουθείτε να βλέπετε συμπιεσμένο (αλλά διαφορετικό) js, μπορεί να είναι αναδρομικά συμπιεσμένο. Επαναλάβετε τη διαδικασία.
Αναφορές
- https://www.youtube.com/watch?v=_v8r_t4v6hQ
- https://blog.nvisium.com/angular-for-pentesters-part-1
- https://blog.nvisium.com/angular-for-pentesters-part-2
Εργαλεία
Λιγότερο Χρησιμοποιούμενες Αναφορές
- https://cyberchef.org/
- https://olajs.com/javascript-prettifier
- https://jshint.com/
- https://github.com/jshint/jshint/
Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι υποστήριξης του HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε The PEASS Family, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα κόλπα σας στο hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.