From bb660efeeca2df52025ce44057594ff13b0f63b5 Mon Sep 17 00:00:00 2001 From: Levon 'noptrix' Kayan Date: Wed, 22 Apr 2026 00:08:38 +0300 Subject: [PATCH] httpgrep: version bump. --- cracker/sshprank/README.md | 54 +++++++++++++++---- scanner/httpgrep/README.md | 42 +++++++++++---- scanner/httpgrep/release/httpgrep-2.4.tar.gz | Bin 5141 -> 0 bytes scanner/httpgrep/release/httpgrep-2.6.tar.gz | Bin 0 -> 6230 bytes 4 files changed, 75 insertions(+), 21 deletions(-) delete mode 100644 scanner/httpgrep/release/httpgrep-2.4.tar.gz create mode 100644 scanner/httpgrep/release/httpgrep-2.6.tar.gz diff --git a/cracker/sshprank/README.md b/cracker/sshprank/README.md index d280d74..0a55da6 100644 --- a/cracker/sshprank/README.md +++ b/cracker/sshprank/README.md @@ -20,7 +20,7 @@ usage sshprank [opts] | -modes +mode options -h - single host or host list to crack. multiple ports can be separated by comma, e.g.: 127.0.0.1:22,222,2022 @@ -46,31 +46,53 @@ modes format: [:ports]. multiple ports can be separated by comma (default port: 22) -options +scan options -r - generate random ipv4 addresses, check for open sshd port and crack for login (only with -m option!) + +credential options + -u - single username or user list (default: root) -p - single password or password list (default: root) -c - list of user:pass combination + +brute options + + -e - exclude host after first login was found. continue + with other hosts instead + -E - exit sshprank completely after first login was found + -z - shuffle target list randomly before cracking + (only with -h ). saves to 'random_targets.txt' + -Z - random brute: pick random target + creds each attempt. + total attempts, 0 = infinite (use with -h, -u/-p) + +exec options + -C - read commands from file (line by line) or execute a single command on host if login was cracked -N - do not output ssh command results + +thread options + -x - num threads for parallel host crack (default: 50) -S - num threads for parallel service crack (default: 20) -X - num threads for parallel login crack (default: 5) -B - num threads for parallel banner grabbing (default: 70) + +timeout options + -T - num sec for auth and connect timeout (default: 5s) -R - num sec for (banner) read timeout (default: 3s) + +output options + -o - write found logins to file. format: ::: (default: owned.txt) - -e - exclude host after first login was found. continue - with other hosts instead - -E - exit sshprank completely after first login was found -v - verbose mode. show found logins, sshds, etc. (default: off) -misc +misc options -H - print help -V - print version information @@ -78,7 +100,7 @@ misc examples # crack targets from a given list with user admin, pw-list and 20 host-threads - $ sshprank -h sshds.txt -u admin -P /tmp/passlist.txt -x 20 + $ sshprank -h sshds.txt -u admin -p /tmp/passlist.txt -x 20 # first scan then crack from founds ssh services using 'root:admin' $ sudo sshprank -m '-p22,2022 --rate 5000 --source-ip 192.168.13.37 \ @@ -94,6 +116,15 @@ examples # grab banners and output to file with format supported for '-h' option $ sshprank -b hosts.txt > sshds2.txt + + # shuffle target list and crack + $ sshprank -h sshds.txt -z -u root -p /tmp/passes.txt + + # random brute: 500 random attempts from ip/user/pass lists + $ sshprank -h sshds.txt -u /tmp/users.txt -p /tmp/passes.txt -Z 500 + + # random brute infinite (ctrl+c to stop) + $ sshprank -h sshds.txt -u /tmp/users.txt -p /tmp/passes.txt -Z 0 ``` # Author @@ -103,9 +134,12 @@ noptrix # Notes - quick'n'dirty code -- sshprank is already packaged and available for [BlackArch Linux](https://www.blackarch.org/) -- My master-branches are always stable; dev-branches are created for current work. -- All of my public stuff you find are officially announced and published via [nullsecurity.net](https://www.nullsecurity.net). +- sshprank is already packaged and available for [BlackArch + Linux](https://www.blackarch.org/) +- My master-branches are always stable; dev-branches are created for current + work. +- All of my public stuff you find are officially announced and published via + [nullsecurity.net](https://www.nullsecurity.net). # License diff --git a/scanner/httpgrep/README.md b/scanner/httpgrep/README.md index f464a6e..acac641 100644 --- a/scanner/httpgrep/README.md +++ b/scanner/httpgrep/README.md @@ -20,7 +20,7 @@ usage httpgrep -h -s [opts] | -opts +target options -h - single host/url or host-/cidr-range or file containing hosts or file containing URLs, e.g.: foobar.net, @@ -29,27 +29,47 @@ opts file. -p - port to connect to (default: 80 if hosts were given) -t - use TLS/SSL to connect to service - -u - URI to search given strings in, e.g.: /foobar/, /foo.html - (default: /) - -s - a single string/regex or multile strings/regex in a file - to find in given URIs and HTTP response headers, - e.g.: 'tomcat 8', '/tmp/igot0daysforthese.txt' - -S - search strings in given places (default: headers,body) + -u - URI or comma-separated URIs or file with URIs (one per + line) to search given strings in, e.g.: /foobar/, + /foo.html, /admin,/login, /tmp/paths.txt (default: /) + -r - perform reverse dns lookup for given IPv4 addresses + NOTE: this will slow down the scanz + +http options + -X - specify HTTP request method to use (default: get). use '?' to list available methods. -a - http auth credentials (format: 'user:pass') -U - set custom User-Agent (default: firefox, rv84, windows) + -A - use random user-agent per request + -R - set custom headers (format: 'foo=bar;lol=lulz;...') + -C - set cookies (format: 'foo=bar;lol=lulz;...') + -F - don't follow HTTP redirects + -P - use proxy (format: '[http|https|socks4|socks5]://host:port') + +search options + + -s - a single string/regex or multile strings/regex in a file + to find in given URIs and HTTP response headers, + e.g.: 'tomcat 8', '/tmp/igot0daysforthese.txt' + -S - search strings in given places (default: headers,body) -b - num bytes to read from response. offset == response[0]. (default: 64) + -i - use case-insensitive search + +scan options + -x - num threads for concurrent scans and checks (default: 80) -c - num seconds for socket timeout (default: 3.0) - -i - use case-insensitive search - -r - perform reverse dns lookup for given IPv4 addresses - NOTE: this will slow down the scanz + -f - only report responses with given HTTP status codes, + e.g.: '200', '200,301,302' + +output options + -l - log found matches to file -v - verbose mode (default: quiet) -misc +misc options -H - print help -V - print version information diff --git a/scanner/httpgrep/release/httpgrep-2.4.tar.gz b/scanner/httpgrep/release/httpgrep-2.4.tar.gz deleted file mode 100644 index 6338a43de97566c7c16ac03e5a1ab57c8a1c98bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5141 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 diff --git a/scanner/httpgrep/release/httpgrep-2.6.tar.gz b/scanner/httpgrep/release/httpgrep-2.6.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..03f44cf223a9aaeaf86bc946712f9284090e9e43 GIT binary patch literal 6230 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