
अत्यंत तेज़ पेंटेस्टिंग सूट
install · usage · modules · docs · contribute
तेज़, समवर्ती recon से exploitation तक एक बाइनरी में। हर स्कैनर एक connection-pooled http क्लाइंट साझा करता है।
sif एक recon और exploitation स्कैनर है जो पूरी श्रृंखला एक बाइनरी में चलाता है: subdomain enum, पोर्ट स्कैन, क्रॉलर, nuclei, फ्रेमवर्क/CVE डिटेक्शन, JS सीक्रेट निष्कर्षण, web-vuln प्रोब (CORS/XSS/redirect), क्लाउड और टेकओवर जाँच। 25+ स्कैन प्रकार, एक कमांड।
sif -u https://example.com -dnslist -ports -crawl -js -framework -nuclei
nuclei और colly लाइब्रेरी के रूप में संकलित हैं, shelled out के बजाय (ट्री में कोई exec.Command नहीं है), इसलिए यह एक एकल स्थिर बाइनरी है जिसमें कोई रनटाइम निर्भरता नहीं है और कुछ भी जोड़ने की आवश्यकता नहीं है।
हर स्कैनर एक साझा http क्लाइंट और work-stealing worker पूल के माध्यम से चलता है। -proxy, -H, -cookie और -rate-limit पूरे रन पर एक साथ लागू होते हैं, कनेक्शन पूल किए जाते हैं और स्कैन भर में पुन: उपयोग किए जाते हैं (एकल-होस्ट रन ~50 अनुरोधों के लिए 50 बार डायल करने के बजाय एक कनेक्शन का पुन: उपयोग करता है), और एक धीमा होस्ट बाकी को रोकता नहीं है। वह साझा क्लाइंट इसका उपयोग करने का व्यावहारिक कारण है, बजाय अलग-अलग उपकरणों की एक श्रृंखला को जोड़ने के। पोर्ट स्कैनिंग connect()-आधारित है, इसलिए rustscan और nmap अभी भी कच्चे पोर्ट स्कैन में तेज़ हैं।
यह stdin से लक्ष्य पढ़ता है और -silent के तहत प्रति पंक्ति एक निष्कर्ष प्रिंट करता है, इसलिए यह रचना करता है:
subfinder -d example.com | sif -silent -crawl -js -nuclei | notify
-diff एक पुन: स्कैन को मॉनिटर में बदल देता है जो केवल बदली हुई चीज़ों की रिपोर्ट करता है, -notify slack/discord/telegram/webhook पर पोस्ट करता है, और रन sarif और markdown में निर्यात करता है।
brew tap vmfunc/sif
brew install sif
अपने पसंदीदा aur हेल्पर का उपयोग करके इंस्टॉल करें:
yay -S sif
# या
paru -S sif
# nixpkgs (घोषणात्मक: configuration.nix या home-manager में जोड़ें)
environment.systemPackages = [ pkgs.sif ];
# या अनिवार्य रूप से
nix profile install nixpkgs#sif
# या बिना इंस्टॉल किए चलाएं
nix run nixpkgs#sif -- -u https://example.com -headers -sh -framework
रिपॉजिटरी में एक flake भी है अगर आप स्रोत से बनाना चाहते हैं:
nix run github:vmfunc/sif
curl -1sLf 'https://dl.cloudsmith.io/public/sif/deb/setup.deb.sh' | sudo -E bash
sudo apt-get install sif
नवीनतम बाइनरी releases से प्राप्त करें।
git clone https://github.com/vmfunc/sif.git
cd sif
make
go 1.25+ की आवश्यकता है
git clone https://aur.archlinux.org/sif.git
cd sif
makepkg -si
# बुनियादी स्कैन
./sif -u https://example.com
# डायरेक्टरी फ़ज़िंग
./sif -u https://example.com -dirlist medium
# सबडोमेन एनुमरेशन
./sif -u https://example.com -dnslist medium
# पोर्ट स्कैनिंग
./sif -u https://example.com -ports common
# जावास्क्रिप्ट फ्रेमवर्क डिटेक्शन + क्लाउड मिसकॉन्फिग
./sif -u https://example.com -js -c3
# shodan होस्ट इंटेलिजेंस (SHODAN_API_KEY env var आवश्यक)
./sif -u https://example.com -shodan
# securitytrails डोमेन डिस्कवरी (SECURITYTRAILS_API_KEY env var आवश्यक)
# सबडोमेन + संबंधित डोमेन खोजता है, फिर सभी को स्कैन करता है
./sif -u https://example.com -securitytrails -headers
# sql recon + lfi स्कैनिंग
./sif -u https://example.com -sql -lfi
# web vuln प्रोब (cors, open redirect, reflected xss)
./sif -u https://example.com -cors -redirect -xss
# फ्रेमवर्क डिटेक्शन (cve lookup के साथ)
./sif -u https://example.com -framework
# एक व्यापक स्कैन
./sif -u https://example.com -dirlist small -dnslist small -ports common -headers -sh -cms -framework -git -whois
सभी विकल्पों के लिए ./sif -h चलाएं।
कुछ उप-कमांड बिना स्कैन किए चलते हैं:
# संस्करण प्रिंट करें (रिलीज़ बिल्ड पर स्टैम्प होते हैं; स्थानीय बिल्ड git describe का उपयोग करते हैं)
./sif version
# नवीनतम रिलीज़ नोट्स दिखाएं (-pn भी)
./sif patchnote
पहली बार जब आप एक नई रिलीज़ चलाते हैं, sif उस रिलीज़ के नोट्स एक बार प्रिंट करता है। इसे बंद करने के लिए SIF_NO_PATCHNOTES=1 सेट करें।
sif का एक मॉड्यूलर आर्किटेक्चर है। मॉड्यूल yaml में परिभाषित होते हैं और उपयोगकर्ताओं द्वारा बढ़ाए जा सकते हैं।
ये सभी स्कैनर में प्रत्येक आउटबाउंड अनुरोध पर लागू होते हैं:
# एक socks5 प्रॉक्सी के माध्यम से कस्टम हेडर, कुकी और 20 req/s कैप के साथ स्कैन करें
./sif -u https://example.com -headers -proxy socks5://127.0.0.1:1080 -H "Authorization: Bearer tok" -cookie "session=abc" -rate-limit 20
एक स्कैनर जो हेडर को स्पष्ट रूप से सेट करता है (जैसे api key) हमेशा वैश्विक डिफ़ॉल्ट पर जीतता है।
रन के निष्कर्षों को ci/cd या triage के लिए फ़ाइल में लिखें:
# स्कैन करें और sarif और markdown दोनों रिपोर्ट उत्पन्न करें
./sif -u https://example.com -headers -cors -sarif out.sarif -md out.md
sarif आउटपुट github कोड स्कैनिंग द्वारा अंतर्ग्रहण योग्य है; markdown प्रति लक्ष्य एक पढ़ने योग्य सारांश है।
-diff एक पुन: स्कैन को मॉनिटर में बदल देता है: sif प्रत्येक लक्ष्य के सामान्यीकृत निष्कर्षों को एक json फ़ाइल में स्नैपशॉट करता है, और अगले रन पर केवल डेल्टा (+ new / - gone) उस स्नैपशॉट के विरुद्ध रिपोर्ट करता है, फिर उसे ओवरराइट करता है। किसी लक्ष्य के लिए पहले रन में कोई बेसलाइन नहीं होती, इसलिए सब कुछ + new होता है। स्नैपशॉट -store में जाते हैं (प्रति लक्ष्य एक सैनिटाइज़ की गई फ़ाइल); जब अनसेट होते हैं तो log dir का पुन: उपयोग करते हैं, <user-config>/sif/state पर गिरते हैं।
# बेसलाइन रन, फिर बाद में पुन: स्कैन करें और केवल वही देखें जो बदला है
./sif -u https://example.com -sh -cors -diff
./sif -u https://example.com -sh -cors -diff
स्नैपशॉट हमेशा फिर से लिखा जाता है, इसलिए प्रत्येक रन पिछले वाले के विरुद्ध अंतर करता है। डेल्टा chrome है (यह सामान्य आउटपुट सिंक / stderr पर -silent के तहत सवार होता है), निष्कर्ष स्ट्रीम नहीं।
निष्कर्षों को चैट/webhook सिंक पर भेजें ताकि एक सतत recon रन जो कुछ मिलता है उस पर अलर्ट करे। हर प्रदाता एक एकल POST है साझा http क्लाइंट के माध्यम से, इसलिए वैश्विक प्रॉक्सी/रेट-लिमिट/हेडर कॉन्फ़िग लागू होता है।
प्रदाता env-प्रथम कॉन्फ़िगर होते हैं; एक yaml फ़ाइल (-notify-config) प्रति-फ़ील्ड ओवरराइड करती है। yaml कुंजियाँ projectdiscovery/notify से मेल खाती हैं, इसलिए एक मौजूदा कॉन्फ़िग पोर्ट हो जाता है:
# एक स्कैन के दौरान मिले medium+ निष्कर्षों पर slack को अलर्ट करें
export SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
./sif -u https://example.com -cors -xss -notify -notify-severity medium
बिना गंतव्य वाले प्रदाता को छोड़ दिया जाता है; कुछ भी कॉन्फ़िगर न होने पर, -notify एक मूक no-op है। slack/discord/telegram एक फिक्स्ड-चौड़ाई निष्कर्ष ब्लॉक प्राप्त करते हैं; सामान्य वेबहुक संरचित json ({count, findings[]}) प्राप्त करता है।
sif stdin से लक्ष्य पढ़ता है और नग्न होस्ट स्वीकार करता है, इसलिए यह एक यूनिक्स पाइपलाइन में गिर जाता है। -silent सभी बैनर/स्पिनर/लॉग chrome को stderr पर रूट करता है और stdout पर प्रति पंक्ति एक सामान्यीकृत निष्कर्ष प्रिंट करता है ([severity] target module title):
# subfinder होस्ट फीड करता है, sif उन्हें जांचता है, notify निष्कर्ष भेजता है
subfinder -d example.com | sif -silent -probe | notify
| फ़्लैग | विवरण |
|---|---|
| stdin | एक पाइप किया गया लक्ष्य स्ट्रीम (प्रति पंक्ति एक होस्ट/url) -u/-f के साथ पढ़ी जाती है |
स्कीम-रहित होस्ट डिफ़ॉल्ट https://; एक स्पष्ट http:///https:// रखा जाता है; कोई अन्य स्कीम (ftp://, ...) अस्वीकार कर दी जाती है।
उपलब्ध मॉड्यूल सूचीबद्ध करें:
./sif -lm
विशिष्ट मॉड्यूल चलाएं:
# id द्वारा चलाएं
./sif -u https://example.com -m sqli-error-based,xss-reflected
# टैग द्वारा चलाएं
./sif -u https://example.com -mt owasp-top10
# सभी मॉड्यूल चलाएं
./sif -u https://example.com -am
~/.config/sif/modules/ में अपने स्वयं के मॉड्यूल बनाएं। मॉड्यूल nuclei टेम्पलेट्स के समान yaml प्रारूप का उपयोग करते हैं:
id: my-custom-check
info:
name: my custom security check
author: you
severity: medium
description: checks for something specific
tags: [custom, recon]
type: http
http:
method: GET
paths:
- "{{BaseURL}}/admin"
- "{{BaseURL}}/login"
matchers:
- type: status
status:
- 200
- type: word
part: body
words:
- "admin panel"
- "login"
condition: or
पूर्ण मॉड्यूल प्रारूप के लिए docs/modules.md देखें।
योगदान स्वागत योग्य है। दिशानिर्देशों के लिए contributing.md देखें।
# प्रारूप
gofmt -w .
# lint
go run github.com/golangci/golangci-lint/v2/cmd/[email protected] run
# परीक्षण
go test ./...
समर्थन, सुविधा चर्चा और पेंटेस्टिंग टिप्स के लिए हमारे discord में शामिल हों:
| फ़्लैग | विवरण |
|---|
-dirlist | डायरेक्टरी और फ़ाइल फ़ज़िंग (small/medium/large) |
-mc | dirlist: इन स्थिति कोड से मिलान करें (कॉमा सूची, जैसे 200,301) |
-fc | dirlist: इन स्थिति कोड को फ़िल्टर करें (कॉमा सूची) |
-fs | dirlist: इन बॉडी आकारों के उत्तरों को फ़िल्टर करें (कॉमा सूची) |
-fw | dirlist: इन शब्द गणनाओं वाले उत्तरों को फ़िल्टर करें (कॉमा सूची) |
-fr | dirlist: उन उत्तरों को फ़िल्टर करें जिनका बॉडी इस regex से मेल खाता है |
-ac | soft-404 वाइल्डकार्ड बेसलाइन को ऑटो-कैलिब्रेट करें (dirlist, sql) |
-w | dirlist: कस्टम वर्डलिस्ट (स्थानीय फ़ाइल या url; -dirlist आकार को ओवरराइड करता है) |
-e | dirlist: प्रत्येक शब्द में जोड़े जाने वाले एक्सटेंशन (कॉमा सूची, जैसे php,bak,env) |
-dnslist | सबडोमेन एनुमरेशन (small/medium/large) |
-ports | पोर्ट स्कैनिंग (common/full) |
-nuclei | nuclei टेम्पलेट्स के साथ कमजोरी स्कैनिंग |
-dork | स्वचालित google dorking |
-js | जावास्क्रिप्ट विश्लेषण + सीक्रेट और एंडपॉइंट निष्कर्षण |
-c3 | क्लाउड स्टोरेज मिसकॉन्फ़िगरेशन |
-headers | http हेडर विश्लेषण |
-sh | सुरक्षा हेडर विश्लेषण (गायब/कमज़ोर हेडर) |
-st | सबडोमेन टेकओवर डिटेक्शन |
-cms | cms डिटेक्शन |
-whois | whois लुकअप |
-git | उजागर git रिपॉजिटरी डिटेक्शन |
-shodan | shodan लुकअप (SHODAN_API_KEY आवश्यक) |
-securitytrails | डोमेन डिस्कवरी + लक्ष्य विस्तार (SECURITYTRAILS_API_KEY आवश्यक) |
-sql | sql recon |
-lfi | स्थानीय फ़ाइल समावेशन |
-jwt | jwt डिस्कवरी + ऑफ़लाइन कमजोरी विश्लेषण (alg:none, weak hmac, exp, संवेदनशील क्लेम) |
-openapi | openapi/swagger स्पेक एक्सपोज़र प्रोब (पथ + unauth एंडपॉइंट गिनता है) |
-favicon | favicon हैश फ़िंगरप्रिंटिंग (shodan-शैली mmh3, तकनीक मिलान + pivot क्वेरी) |
-cors | cors मिसकॉन्फ़िगरेशन प्रोब |
-redirect | ओपन रिडायरेक्ट प्रोब |
-xss | रिफ्लेक्टेड xss प्रोब |
-framework | cve लुकअप के साथ फ्रेमवर्क डिटेक्शन |
-crawl | वेब क्रॉलर (स्पाइडर समान-होस्ट लिंक/स्क्रिप्ट/फॉर्म) |
-crawl-depth | अधिकतम क्रॉल रिकर्सन गहराई (डिफ़ॉल्ट 2) |
-passive | निष्क्रिय सबडोमेन/url डिस्कवरी (लक्ष्य पर शून्य ट्रैफ़िक) |
-probe | लाइव-होस्ट प्रोब (स्थिति, शीर्षक, सर्वर, रिडायरेक्ट चेन) |
| फ़्लैग | विवरण |
|---|
-proxy | सभी ट्रैफ़िक को प्रॉक्सी (http/https/socks5 url) के माध्यम से रूट करें |
-H, --header | भेजने के लिए कस्टम हेडर (दोहराए जा सकने वाले या कॉमा-सेपरेटेड, "Key: Value") |
-cookie | हर अनुरोध के साथ भेजने के लिए कुकी हेडर |
-rate-limit | प्रति सेकंड अधिकतम अनुरोध (0 = असीमित, डिफ़ॉल्ट 0) |
| फ़्लैग | विवरण |
|---|
-sarif | इस फ़ाइल में एक sarif 2.1.0 रिपोर्ट लिखें |
-markdown, -md | इस फ़ाइल में एक markdown रिपोर्ट लिखें |
-silent | सादा आउटपुट: chrome stderr पर, प्रति पंक्ति एक निष्कर्ष stdout पर (पाइपलाइनों के लिए) |
-diff | प्रत्येक लक्ष्य के अंतिम स्नैपशॉट के बाद से केवल जोड़े/हटाए गए निष्कर्षों को दिखाएं |
-store | -diff के लिए स्नैपशॉट निर्देशिका (डिफ़ॉल्ट: log dir, अन्यथा <user-config>/sif/state) |
| फ़्लैग | विवरण |
|---|
-notify | स्कैन के बाद प्रत्येक कॉन्फ़िगर किए गए प्रदाता को निष्कर्ष भेजें |
-notify-severity | भेजने के लिए न्यूनतम गंभीरता (info/low/medium/high/critical, डिफ़ॉल्ट medium) |
-notify-config | एक notify-संगत yaml कॉन्फ़िग का पथ (env vars को ओवरराइड करता है) |
| env var | yaml कुंजी | प्रदाता |
|---|
SLACK_WEBHOOK_URL | slack_webhook_url | slack incoming webhook |
DISCORD_WEBHOOK_URL | discord_webhook_url | discord वेबहुक |
TELEGRAM_BOT_TOKEN | telegram_api_key | telegram bot api (चैट आईडी भी चाहिए) |
TELEGRAM_CHAT_ID | telegram_chat_id | telegram गंतव्य चैट |
NOTIFY_WEBHOOK_URL | webhook_url | सामान्य json वेबहुक (संरचित निष्कर्ष) |
![]() vmfunc 🚧 🧑🏫 📆 🛡️ 💻 | ![]() ProjectDiscovery 📦 | ![]() macdoos 💻 | ![]() Matthieu Witrowiez 🤔 | ![]() tessa 🚇 💬 📓 | ![]() Eva 📝 🖋 🔬 🛡️ ⚠️ 💻 | ![]() Zoa Hickenlooper 💻 |
![]() acxtrilla 📦 |