hacktricks/network-services-pentesting/pentesting-web/code-review-tools.md

29 KiB

सोर्स कोड रिव्यू / SAST टूल्स

AWS हैकिंग सीखें शुरुआत से लेकर एक्सपर्ट तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

मार्गदर्शन और टूल्स की सूचियाँ

मल्टी-लैंग्वेज टूल्स

Naxus - AI-Gents

PRs की समीक्षा के लिए एक निःशुल्क पैकेज है।

Semgrep

यह एक ओपन सोर्स टूल है।

समर्थित भाषाएँ

श्रेणी भाषाएँ
GA C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX
बीटा 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

त्वरित प्रारंभ - डेटाबेस तैयार करें

{% 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 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 को सभी भाषाओं की पहचान करने की अनुमति भी दे सकते हैं और प्रत्येक भाषा के लिए एक DB बना सकते हैं। आपको इसे एक 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/*

त्वरित प्रारंभ - कोड का विश्लेषण करें

{% hint style="success" %} अब आखिरकार कोड का विश्लेषण करने का समय आ गया है {% endhint %}

याद रखें कि यदि आपने कई भाषाओं का उपयोग किया है, तो प्रत्येक भाषा के लिए एक DB आपके द्वारा निर्दिष्ट पथ में बनाया गया होगा।

{% 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

त्वरित प्रारंभ - स्क्रिप्टेड

{% 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: Node.js एप्लिकेशन्स के लिए Static security code scanner (SAST) जो 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 पायथन निर्भरताओं को ज्ञात सुरक्षा संवेदनशीलताओं के लिए जांचता है और पता चली संवेदनशीलताओं के लिए उचित समाधान सुझाता है। 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

# Install
cargo install cargo-audit

# Run
cargo audit

#Update the Advisory Database
cargo audit fetch

जावा

# 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
कार्य कमांड
जार निष्पादित करें java -jar [jar]
जार अनजिप करें unzip -d [output directory] [jar]
जार बनाएं jar -cmf META-INF/MANIFEST.MF [output jar] *
बेस64 SHA256 sha256sum [file] | cut -d' ' -f1 | xxd -r -p | base64
हस्ताक्षर हटाएं rm META-INF/.SF META-INF/.RSA META-INF/*.DSA
जार से हटाएं zip -d [jar] [file to remove]
क्लास डिकम्पाइल करें procyon -o . [path to class]
जार डिकम्पाइल करें procyon -jar [jar] -o [output directory]
क्लास कम्पाइल करें javac [path to .java file]

Go

https://github.com/securego/gosec

PHP

Psalm और PHPStan.

Wordpress Plugins

https://www.pluginvulnerabilities.com/plugin-security-checker/

Solidity

JavaScript

Discovery

  1. Burp:
  • Spider और सामग्री की खोज करें
  • Sitemap > filter
  • Sitemap > डोमेन पर राइट-क्लिक > Engagement tools > Find scripts
  1. WaybackURLs:
  • waybackurls <domain> |grep -i "\.js" |sort -u

Static Analysis

Unminimize/Beautify/Prettify

Deobfuscate/Unpack

नोट: पूरी तरह से deobfuscate करना संभव नहीं हो सकता है।

  1. .map फाइलों का पता लगाएं और उपयोग करें:
  • यदि .map फाइलें उजागर होती हैं, तो वे आसानी से deobfuscate करने के लिए उपयोग की जा सकती हैं।
  • आमतौर पर, foo.js.map foo.js के लिए मैप करता है। उन्हें मैन्युअली खोजें।
  • JS Miner का उपयोग करके उनकी खोज करें।
  • सक्रिय स्कैन सुनिश्चित करें।
  • 'Tips/Notes' पढ़ें।
  • यदि मिल जाए, तो Maximize का उपयोग करके deobfuscate करें।
  1. .map फाइलों के बिना, JSnice का प्रयास करें:
  • संदर्भ: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
  • टिप्स:
  • यदि jsnice.org का उपयोग कर रहे हैं, तो "Nicify JavaScript" बटन के बगल में विकल्प बटन पर क्लिक करें, और "Infer types" को अन-सेलेक्ट करें ताकि कोड को कमेंट्स से भरने से बचा जा सके।
  • सुनिश्चित करें कि स्क्रिप्ट से पहले कोई खाली लाइनें न छोड़ें, क्योंकि यह deobfuscation प्रक्रिया को प्रभावित कर सकता है और गलत परिणाम दे सकता है।
  1. console.log() का उपयोग करें;
  • अंत में रिटर्न वैल्यू ढूंढें और इसे console.log(<packerReturnVariable>); में बदल दें ताकि deobfuscated js प्रिंट हो जाए बजाय इसके कि वह execute हो।
  • फिर, संशोधित (और अभी भी obfuscated) js को https://jsconsole.com/ में पेस्ट करें ताकि deobfuscated js को कंसोल में लॉग किया जा सके।
  • अंत में, deobfuscated आउटपुट को https://prettier.io/playground/ में पेस्ट करें ताकि इसे विश्लेषण के लिए सुंदर बनाया जा सके।
  • नोट: यदि आप अभी भी पैक किए गए (लेकिन अलग) js को देख रहे हैं, तो संभवतः यह पुनरावृत्ति से पैक किया गया है। प्रक्रिया को दोहराएं।

Analyze

संदर्भ: https://medium.com/techiepedia/javascript-code-review-guide-for-bug-bounty-hunters-c95a8aa7037a

खोजें के लिए:

  • Anti-debug loading
  • Angular: enableProdMode
  • Secrets
  • उपयोग करें:
  • JS Miner
  • RegHex पैटर्न
  • gf पैटर्न
  • संबंधित शब्दकोश पैटर्न के लिए Grep करें:
  • pass, user, admin
  • auth, login, sign, challenge, 2fa
  • key, apikey, api_key, api-key, jwt, token
  • secret, security, secure
  • ...
  • मैन्युअल समीक्षा
  • यदि API कुंजी मिली है, तो संभावित उपयोग सिंटैक्स के लिए यहां जांचें: https://github.com/streaak/keyhacks.
  • Vuln functions
  • InnerHTML() - यदि आपको यह मिला है, तो इसका मतलब है कि यदि उचित सैनिटाइजेशन नहीं होता है तो XSS के लिए संभावित अवसर हो सकता है। यहां तक कि अगर आपका पेलोड सैनिटाइज किया जाता है, तो चिंता न करें। कोड का अनुसरण करें और पता लगाएं कि सैनिटाइजेशन कहां होता है। इसे अध्ययन करें और सैनिटाइजेशन को पार करने का प्रयास करें।
  • Postmessage() - यदि आपने मेरी पिछली पोस्ट (https://medium.com/techiepedia/what-are-sop-cors-and-ways-to-exploit-it-62a5e02100dc) पढ़ी है, तो आप देखेंगे कि Postmessage() संभावित CORS मुद्दे की ओर ले जा सकता है। यदि फ़ंक्शन का दूसरा पैरामीटर * पर सेट है, तो आप भाग्यशाली हैं। मेरी पिछली पोस्ट को देखें ताकि इसके पीछे के तंत्र को और अधिक समझ सकें।
  • String.prototype.search() - यह फ़ंक्शन सामान्य लगता है। यह खतरनाक फ़ंक्शन क्यों हो सकता है? खैर, इसका कारण यह है कि कुछ डेवलपर्स ने इसका उपयोग एक स्ट्रिंग के अंदर दूसरी स्ट्रिंग की घटना को ढूंढने के लिए किया है। हालांकि, इस फ़ंक्शन में “.” वाइल्डकार्ड के रूप में माना जाता है। इसलिए, यदि इस फ़ंक्शन का उपयोग सैनिटाइजेशन चेक के रूप में किया जाता है, तो आप इसे “.” इनपुट करके आसानी से बायपास कर सकते हैं। Filedescryptor की hackerone रिपोर्ट देखें: https://hackerone.com/reports/129873
  • Endpoints & params
  • LinkFinder और JS Miner का उपयोग करें।
  • Vuln libs & deps
  • Retire.js और NPM (नीचे स्क्रॉल करें सुरक्षा अनुभाग > सभी संस्करण लिंक) का उपयोग करें।
  • Cloud URLs
  • JS Miner का उपयोग करें।
  • Subdomains
  • JS Miner का उपयोग करें।
  • Logic Flaws
  • स्थितिजन्य जागरूकता प्राप्त करें:
  • use strict;?
  • क्लाइंट-साइड नियंत्रणों के लिए Grep करें:
  • disable, enable, hidden, hide, show
  • catch, finally, throw, try
  • input, validate, verify, valid, correct, check, confirm, require, ..
  • गैर-प्राइमेटिव्स के लिए Grep करें:
  • function , =>
  • class

Dynamic Analysis

संदर्भ

उपकरण

Less Used References

Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

  • यदि आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं, तो SUBSCRIPTION PLANS देखें!
  • official PEASS & HackTricks swag प्राप्त करें
  • The PEASS Family की खोज करें, हमारा एक्सक्लूसिव NFTs संग्रह
  • 💬 Discord group में शामिल हों या telegram group या Twitter पर मुझे 🐦 @carlospolopm का पालन करें
  • HackTricks और HackTricks Cloud github repos में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।