vmfunc d0bdcf1690 feat: shared http client with proxy, custom headers and rate limiting
every scanner spun up its own &http.Client, so there was no single place
to apply a proxy, custom headers, a cookie or a rate limit. add an
internal/httpx package that builds one configured transport at startup and
hand it to every scanner via httpx.Client(timeout), keeping behavior
identical when nothing is set (plain client when Configure was never
called).

- httpx.Configure wires -proxy (http/https/socks5), -H/--header, -cookie
  and -rate-limit into a package-level RoundTripper that paces via a
  rate.Limiter and only sets headers the caller hasn't already, so a
  scanner's explicit api key still wins.
- route the scan/wordlist downloads that used http.DefaultClient through
  the shared client too; ports tcp dialing is left untouched.
- clamp -threads to a floor of 1: it feeds wg.Add across the scanners, so
  0 was a silent no-op and a negative value panicked the waitgroup.

document the new flags in the readme, usage docs and man page.
2026-06-09 17:28:14 -07:00
2024-11-14 06:51:54 +01:00
2026-01-06 06:35:32 +01:00


what is sif?

sif is a modular pentesting toolkit written in go. it's designed to be fast, concurrent, and extensible. run multiple scan types against targets with a single command.

./sif -u https://example.com -headers -sh -cms -framework -git

install

homebrew (macos)

brew tap vmfunc/sif
brew install sif

arch linux (aur)

install using your preferred aur helper:

yay -S sif
# or
paru -S sif

nix

# nixpkgs (declarative — add to configuration.nix or home-manager)
environment.systemPackages = [ pkgs.sif ];

# or imperatively
nix profile install nixpkgs#sif

# or just run it without installing
nix run nixpkgs#sif -- -u https://example.com -headers -sh -framework

the repo also ships a flake if you want to build from source:

nix run github:vmfunc/sif

debian/ubuntu (apt)

curl -1sLf 'https://dl.cloudsmith.io/public/sif/deb/setup.deb.sh' | sudo -E bash
sudo apt-get install sif

from releases

grab the latest binary from releases.

from source

git clone https://github.com/vmfunc/sif.git
cd sif
make

requires go 1.23+

aur (manual install)

git clone https://aur.archlinux.org/sif.git
cd sif
makepkg -si

usage

# basic scan
./sif -u https://example.com

# directory fuzzing
./sif -u https://example.com -dirlist medium

# subdomain enumeration
./sif -u https://example.com -dnslist medium

# port scanning
./sif -u https://example.com -ports common

# javascript framework detection + cloud misconfig
./sif -u https://example.com -js -c3

# shodan host intelligence (requires SHODAN_API_KEY env var)
./sif -u https://example.com -shodan

# securitytrails domain discovery (requires SECURITYTRAILS_API_KEY env var)
# discovers subdomains + associated domains, then scans all of them
./sif -u https://example.com -securitytrails -headers

# sql recon + lfi scanning
./sif -u https://example.com -sql -lfi

# framework detection (with cve lookup)
./sif -u https://example.com -framework

# a broad sweep
./sif -u https://example.com -dirlist small -dnslist small -ports common -headers -sh -cms -framework -git -whois

run ./sif -h for all options.

commands

a couple of subcommands run without scanning:

# print the version (release builds are stamped; local builds use git describe)
./sif version

# show the latest release notes (also -pn)
./sif patchnote

the first time you run a new release, sif prints that release's notes once. set SIF_NO_PATCHNOTES=1 to turn that off.

modules

sif has a modular architecture. modules are defined in yaml and can be extended by users.

built-in scan flags

flag description
-dirlist directory and file fuzzing (small/medium/large)
-dnslist subdomain enumeration (small/medium/large)
-ports port scanning (common/full)
-nuclei vulnerability scanning with nuclei templates
-dork automated google dorking
-js javascript analysis
-c3 cloud storage misconfiguration
-headers http header analysis
-sh security header analysis (missing/weak headers)
-st subdomain takeover detection
-cms cms detection
-whois whois lookups
-git exposed git repository detection
-shodan shodan lookup (requires SHODAN_API_KEY)
-securitytrails domain discovery + target expansion (requires SECURITYTRAILS_API_KEY)
-sql sql recon
-lfi local file inclusion
-framework framework detection with cve lookup

http options

these apply to every outbound request across all scanners:

flag description
-proxy route all traffic through a proxy (http/https/socks5 url)
-H, --header custom header to send (repeatable or comma-separated, "Key: Value")
-cookie cookie header to send with every request
-rate-limit max requests per second (0 = unlimited, default 0)
# scan through a socks5 proxy with a custom header, cookie and 20 req/s cap
./sif -u https://example.com -headers -proxy socks5://127.0.0.1:1080 -H "Authorization: Bearer tok" -cookie "session=abc" -rate-limit 20

a scanner that sets a header explicitly (e.g. an api key) always wins over the global default.

yaml modules

list available modules:

./sif -lm

run specific modules:

# run by id
./sif -u https://example.com -m sqli-error-based,xss-reflected

# run by tag
./sif -u https://example.com -mt owasp-top10

# run all modules
./sif -u https://example.com -am

custom modules

create your own modules in ~/.config/sif/modules/. modules use a yaml format similar to nuclei templates:

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

see docs/modules.md for the full module format.

contribute

contributions welcome. see contributing.md for guidelines.

# format
gofmt -w .

# lint
golangci-lint run

# test
go test ./...

community

join our discord for support, feature discussions, and pentesting tips:

discord

contributors

vmfunc
vmfunc

🚧 🧑‍🏫 📆 🛡️ 💻
ProjectDiscovery
ProjectDiscovery

📦
macdoos
macdoos

💻
Matthieu Witrowiez
Matthieu Witrowiez

🤔
tessa
tessa

🚇 💬 📓
Eva
Eva

📝 🖋 🔬 🛡️ ⚠️ 💻
Zoa Hickenlooper
Zoa Hickenlooper

💻
acxtrilla
acxtrilla

📦

acknowledgements


bsd 3-clause license · made by vmfunc, xyzeva, and contributors
Languages
Go 99.2%
Makefile 0.6%
Nix 0.2%