Master


A collection of awesome lists, manuals, blogs, hacks, one-liners and tools for Awesome Ninja Admins.


Branch Awesome License

Created by trimstray and contributors

*** ## Who is Ninja Admins? - race of pure evil who rule the network through a monarchistic feudelic system - they never opened the door for strangers (or anyone at all) - they know very nasty piece of code like a **[fork bombs](https://en.wikipedia.org/wiki/Fork_bomb)** - they can make dd is not a **[destroyer of disks](http://www.noah.org/wiki/Dd_-_Destroyer_of_Disks)** - they know that `#!/usr/bin/env bash` superior to `#!/bin/bash` - they know that `su -` logs in completely as root - they miss and cry for **[Slackware](http://www.slackware.com/)** on production - they love the old admin nix-world ## :ballot_box_with_check: Todo - [ ] Add useful shell functions - [ ] Add one-liners for collection tools (eg. CLI Tools) - [ ] Add Ninja Admins T-Shirt stickers - [ ] Generate Awesome Ninja Admins book (eg. pdf format) ## Ninja Admins Collection #### CLI Tools ##### :black_small_square: Shells

  :small_orange_diamond: Oh My ZSH! - the best framework for managing your Zsh configuration.
  :small_orange_diamond: bash-it - a community Bash framework.

##### :black_small_square: Managers

  :small_orange_diamond: Midnight Commander - visual file manager, licensed under GNU General Public License.
  :small_orange_diamond: screen - full-screen window manager that multiplexes a physical terminal.
  :small_orange_diamond: tmux - terminal multiplexer, lets you switch easily between several programs in one terminal.

##### :black_small_square: Network

  :small_orange_diamond: Curl - command line tool and library for transferring data with URLs.
  :small_orange_diamond: HTTPie - a user-friendly HTTP client.
  :small_orange_diamond: gnutls-cli - client program to set up a TLS connection to some other computer.
  :small_orange_diamond: netcat - networking utility which reads and writes data across network connections, using the TCP/IP protocol.
  :small_orange_diamond: tcpdump - powerful command-line packet analyzer.

##### :black_small_square: Databases

  :small_orange_diamond: pgcli - postgres CLI with autocompletion and syntax highlighting.
  :small_orange_diamond: mycli - terminal client for MySQL with autocompletion and syntax highlighting.

#### Web Tools ##### :black_small_square: SSL

  :small_orange_diamond: SSL Server Test - free online service performs a deep analysis of the configuration of any SSL web server.
  :small_orange_diamond: SSL Server Test (DEV) - free online service performs a deep analysis of the configuration of any SSL web server.
  :small_orange_diamond: ImmuniWeb® SSLScan - test SSL/TLS (PCI DSS, HIPAA and NIST).
  :small_orange_diamond: Report URI - monitoring security policies like CSP and HPKP.
  :small_orange_diamond: CSP Evaluator - allows developers and security experts to check if a Content Security Policy.
  :small_orange_diamond: Common CA Database - repository of information about CAs, and their root and intermediate certificates.
  :small_orange_diamond: CERTSTREAM - real-time certificate transparency log update stream.

##### :black_small_square: HTTP Headers

  :small_orange_diamond: Security Headers - analyse the HTTP response headers (with rating system to the results).
  :small_orange_diamond: Observatory by Mozilla - set of tools to analyze your website.

##### :black_small_square: DNS

  :small_orange_diamond: ViewDNS - one source for free DNS related tools and information.
  :small_orange_diamond: DNS Spy - monitor, validate and verify your DNS configurations.
  :small_orange_diamond: DNSlytics - online investigation tool.

##### :black_small_square: Mail

  :small_orange_diamond: MX Toolbox - all of your MX record, DNS, blacklist and SMTP diagnostics in one integrated tool.

##### :black_small_square: Mass scanners (search engines)

  :small_orange_diamond: Censys - platform that helps information security practitioners discover, monitor, and analyze devices.
  :small_orange_diamond: Shodan - the world's first search engine for Internet-connected devices.
  :small_orange_diamond: GreyNoise - mass scanner (such as Shodan and Censys).

##### :black_small_square: Net-tools

  :small_orange_diamond: Netcraft - detailed report about the site, helping you to make informed choices about their integrity.
  :small_orange_diamond: Security Trails - APIs for Security Companies, Researchers and Teams.
  :small_orange_diamond: Online Curl - curl test, analyze HTTP Response Headers.
  :small_orange_diamond: Ping.eu - online Ping, Traceroute, DNS lookup, WHOIS and others.
  :small_orange_diamond: Network-Tools - network tools for webmasters, IT technicians & geeks.
  :small_orange_diamond: URL Encode/Decode - tool from above to either encode or decode a string of text.
  :small_orange_diamond: RegExr - online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
  :small_orange_diamond: Hardenize - deploy the security standards.

##### :black_small_square: Code parsers/playgrounds

  :small_orange_diamond: ShellCheck - finds bugs in your shell scripts.
  :small_orange_diamond: jsbin - live pastebin for HTML, CSS & JavaScript and more.

##### :black_small_square: Performance

  :small_orange_diamond: GTmetrix - analyze your site’s speed and make it faster.
  :small_orange_diamond: Sucuri loadtimetester - test here the performance of any of your sites from across the globe.

##### :black_small_square: Passwords

  :small_orange_diamond: Random.org - generate random passwords.
  :small_orange_diamond: Gotcha? - list of 1.4 billion accounts circulates around the Internet.
  :small_orange_diamond: have i been pwned? - check if you have an account that has been compromised in a data breach.

#### Manuals/Howtos/Tutorials ##### :black_small_square: Bash

  :small_orange_diamond: pure-bash-bible - a collection of pure bash alternatives to external processes.
  :small_orange_diamond: The Bash Hackers Wiki - hold documentation of any kind about GNU Bash.

##### :black_small_square: Unix tutorials

  :small_orange_diamond: nixCraft - linux and unix tutorials for new and seasoned sysadmin.
  :small_orange_diamond: TecMint - the ideal Linux blog for Sysadmins & Geeks.

##### :black_small_square: Hacking

  :small_orange_diamond: Hacking Articles - LRaj Chandel's Security & Hacking Blog.

#### Blogs

  :small_orange_diamond: Brendan Gregg's Blog - Brendan Gregg is an industry expert in computing performance and cloud computing.
  :small_orange_diamond: Gynvael "GynDream" Coldwind - Gynvael is a IT security engineer at Google.
  :small_orange_diamond: Michał "lcamtuf" Zalewski - "white hat" hacker, computer security expert.
  :small_orange_diamond: Mattias Geniar - developer, Sysadmin, Blogger, Podcaster and Public Speaker.
  :small_orange_diamond: Nick Craver - Software Developer and Systems Administrator for Stack Exchange.
  :small_orange_diamond: Robert Penz - IT security Expert.
  :small_orange_diamond: Scott Helme - Security Researcher, international speaker and founder of securityheaders.com and report-uri.com.
  :small_orange_diamond: Kacper Szurek - Detection Engineer at ESET.
  :small_orange_diamond: Troy Hunt - Microsoft Regional Director and Microsoft Most Valuable Professional for Developer Security.
  :small_orange_diamond: Linux Audit - the Linux security blog about Auditing, Hardening, and Compliance by Michael Boelen.
  :small_orange_diamond: Linux Security Expert - the linux security, trainings, howtos, checklists, security tools and more.
  :small_orange_diamond: The Grymoire - collection of useful incantations for wizards, be you computer wizards, magicians, or whatever.

#### Systems/Services ##### :black_small_square: Systems

  :small_orange_diamond: Slackware - the most "Unix-like" Linux distribution.
  :small_orange_diamond: OpenBSD - multi-platform 4.4BSD-based UNIX-like operating system.
  :small_orange_diamond: HardenedBSD - HardenedBSD aims to implement innovative exploit mitigation and security solutions.

##### :black_small_square: HTTP(s) Services

  :small_orange_diamond: Varnish HTTP Cache - HTTP accelerator designed for content-heavy dynamic web sites.

##### :black_small_square: Security/hardening

  :small_orange_diamond: Emerald Onion - seattle-based encrypted-transit internet service provider.
  :small_orange_diamond: Unbound - validating, recursive, and caching DNS resolver (with TLS).

#### Lists

  :small_orange_diamond: Awesome Sysadmin - amazingly awesome open source sysadmin resources.
  :small_orange_diamond: Awesome Shell - awesome command-line frameworks, toolkits, guides and gizmos.
  :small_orange_diamond: Awesome-Hacking - awesome lists for hackers, pentesters and security researchers.
  :small_orange_diamond: Command-line-text-processing - from finding text to search and replace, from sorting to beautifying text and more.

#### Hacking/Penetration testing ##### :black_small_square: Bounty programs

  :small_orange_diamond: Openbugbounty - allows any security researcher reporting a vulnerability on any website.
  :small_orange_diamond: hackerone - global hacker community to surface the most relevant security issues.
  :small_orange_diamond: bugcrowd - crowdsourced cybersecurity for the enterprise.
  :small_orange_diamond: Crowdshield - crowdsourced Security & Bug Bounty Management.

##### :black_small_square: Web Training Apps

  :small_orange_diamond: Metasploitable 2 - vulnerable web application amongst security researchers.
  :small_orange_diamond: DVWA - PHP/MySQL web application that is damn vulnerable.
  :small_orange_diamond: OWASP Mutillidae II - free, open source, deliberately vulnerable web-application.
  :small_orange_diamond: OWASP Juice Shop Project - the most bug-free vulnerable application in existence.
  :small_orange_diamond: OWASP WebGoat Project - insecure web application maintained by OWASP designed to teach web app security.
  :small_orange_diamond: Security Ninjas - open source application security training program.

#### One-liners ##### Table of Contents - **[System](#system)** * [terminal](#tool-terminal) * [mount](#tool-mount) * [fuser](#tool-fuser) * [ps](#tool-ps) * [top](#tool-top) * [kill](#tool-kill) * [find](#tool-find) * [diff](#tool-diff) * [tail](#tool-tail) * [cpulimit](#tool-cpulimit) * [pwdx](#tool-pwdx) * [tr](#tool-tr) * [chmod](#tool-chmod) * [who](#tool-who) * [screen](#tool-screen) * [du](#tool-du) * [inotifywait](#tool-inotifywait) * [openssl](#tool-openssl) * [gnutls](#tool-gnutls) * [secure-delete](#tool-secure-delete) * [dd](#tool-dd) - **[HTTP/HTTPS](#http-https)** * [curl](#tool-curl) * [httpie](#tool-httpie) - **[Network](#network)** * [ssh](#tool-ssh) * [linux-dev](#tool-linux-dev) * [tcpdump](#tool-tcpdump) * [tcpick](#tool-tcpick) * [ngrep](#tool-ngrep) * [hping3](#tool-hping3) * [netcat](#tool-netcat) * [socat](#tool-socat) * [lsof](#tool-lsof) * [netstat](#tool-netstat) * [rsync](#tool-rsync) * [host](#tool-host) * [dig](#tool-dig) * [dns-other](#tool-dns-other) - **[Programming](#programming)** * [awk](#tool-awk) * [sed](#tool-sed) * [grep](#tool-grep) System ##### Tool: [terminal](https://en.wikipedia.org/wiki/Linux_console) ###### Close shell keeping all subprocess running ```bash disown -a && exit ``` ###### Exit without saving shell history ```bash kill -9 $$ unset HISTFILE && exit ``` ###### Perform a branching conditional ```bash true && { echo success;} || { echo failed; } ``` ###### Pipe stdout and stderr to separate commands ```bash some_command > >(/bin/cmd_for_stdout) 2> >(/bin/cmd_for_stderr) ``` ###### Redirect stdout and stderr each to separate files and print both to the screen ```bash (some_command 2>&1 1>&3 | tee errorlog ) 3>&1 1>&2 | tee stdoutlog ``` ###### List of commands you use most often ```bash history | awk '{ a[$2]++ } END { for(i in a) { print a[i] " " i } }' | sort -rn | head ``` ###### Empty a file (truncate to 0 size) ```bash >filename ``` ###### Quickly backup a file ```bash cp filename{,.orig} ``` ###### Delete all files in a folder that don't match a certain file extension ```bash rm !(*.foo|*.bar|*.baz) ``` ###### Edit a file on a remote host using vim ```bash vim scp://user@host//etc/fstab ``` ###### Create a directory and change into it at the same time ```bash mkd () { mkdir -p "$@" && cd "$@"; } ``` ###### Convert uppercase files to lowercase files ```bash rename 'y/A-Z/a-z/' * ``` ###### Print a row of characters across the terminal ```bash printf "%`tput cols`s" | tr ' ' '#' ``` ###### Show shell history without line numbers ```bash history | cut -c 8- fc -l -n 1 | sed 's/^\s*//' ``` ###### Run command(s) after exit session ```bash cat > /etc/profile << __EOF__ _after_logout() { username=$(whoami) for _pid in $(ps afx | grep sshd | grep "$username" | awk '{print $1}') ; do kill -9 $_pid done } trap _after_logout EXIT __EOF__ ``` ###### Generate a sequence of numbers ```bash for ((i=1; i<=10; i+=2)) ; do echo $i ; done # alternative: seq 1 2 10 for ((i=5; i<=10; ++i)) ; do printf '%02d\n' $i ; done # alternative: seq -w 5 10 ``` ___ ##### Tool: [mount](https://en.wikipedia.org/wiki/Mount_(Unix)) ###### Mount a temporary ram partition ```bash mount -t tmpfs tmpfs /mnt -o size=64M ``` * `-t` - filesystem type * `-o` - mount options ___ ##### Tool: [fuser](https://en.wikipedia.org/wiki/Fuser_(Unix)) ###### Kills a process that is locking a file ```bash fuser -k filename ``` ###### Show what PID is listening on specific port ```bash fuser -v 53/udp ``` ___ ##### Tool: [ps](https://en.wikipedia.org/wiki/Ps_(Unix)) ###### Show a 4-way scrollable process tree with full details ```bash ps awwfux | less -S ``` ###### Processes per user counter ```bash ps hax -o user | sort | uniq -c | sort -r ``` ___ ##### Tool: [find](https://en.wikipedia.org/wiki/Find_(Unix)) ###### Find files that have been modified on your system in the past 60 minutes ```bash find / -mmin 60 -type f ``` ###### Find all files larger than 20M ```bash find / -type f -size +20M ``` ###### Find duplicate files (based on MD5 hash) ```bash find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 ``` ###### Change permission only for files ```bash cd /var/www/site && find . -type f -exec chmod 766 {} \; cd /var/www/site && find . -type f -exec chmod 664 {} + ``` ###### Change permission only for directories ```bash cd /var/www/site && find . -type d -exec chmod g+x {} \; cd /var/www/site && find . -type d -exec chmod g+rwx {} + ``` ###### Find files and directories for specific user ```bash find . -user -print ``` ###### Find files and directories for all without specific user ```bash find . \!-user -print ``` ###### Delete older files than 60 days ```bash find . -type f -mtime +60 -delete ``` ###### Recursively remove all empty sub-directories from a directory ```bash find . -depth -type d -empty -exec rmdir {} \; ``` ###### How to find all hard links to a file ```bash find -xdev -samefile filename ``` ___ ##### Tool: [top](https://en.wikipedia.org/wiki/Top_(software)) ###### Use top to monitor only all processes with the specific string ```bash top -p $(pgrep -d , ) ``` * `` - process containing str (eg. nginx, worker) ___ ##### Tool: [kill](https://en.wikipedia.org/wiki/Kill_(command)) ###### Kill a process running on port ```bash kill -9 $(lsof -i : | awk '{l=$2} END {print l}') ``` ___ ##### Tool: [diff](https://en.wikipedia.org/wiki/Diff) ###### Compare two directory trees ```bash diff <(cd directory1 && find | sort) <(cd directory2 && find | sort) ``` ___ ##### Tool: [tail](https://en.wikipedia.org/wiki/Tail_(Unix)) ###### Annotate tail -f with timestamps ```bash tail -f file | while read ; do echo "$(date +%T.%N) $REPLY" ; done ``` ###### Analyse an Apache access log for the most common IP addresses ```bash tail -10000 access_log | awk '{print $1}' | sort | uniq -c | sort -n | tail ``` ___ ##### Tool: [tar](https://en.wikipedia.org/wiki/Tar_(computing)) ###### System backup with exclude specific directories ```bash cd / tar -czvpf /mnt/system$(date +%d%m%Y%s).tgz --directory=/ \ --exclude=proc/* --exclude=sys/* --exclude=dev/* --exclude=mnt/* . ``` ###### System backup with exclude specific directories (pigz) ```bash cd / tar cvpf /backup/snapshot-$(date +%d%m%Y%s).tgz --directory=/ \ --exclude=proc/* --exclude=sys/* --exclude=dev/* \ --exclude=mnt/* --exclude=tmp/* --use-compress-program=pigz . ``` ___ ##### Tool: [dump](https://en.wikipedia.org/wiki/Dump_(program)) ###### System backup to file ```bash dump -y -u -f /backup/system$(date +%d%m%Y%s).lzo / ``` ###### Restore system from lzo file ```bash cd / restore -rf /backup/system$(date +%d%m%Y%s).lzo ``` ___ ##### Tool: [cpulimit](http://cpulimit.sourceforge.net/) ###### Limit the cpu usage of a process ```bash cpulimit -p pid -l 50 ``` ___ ##### Tool: [pwdx](https://www.cyberciti.biz/faq/unix-linux-pwdx-command-examples-usage-syntax/) ###### Show current working directory of a process ```bash pwdx ``` ___ ##### Tool: [taskset](https://www.cyberciti.biz/faq/taskset-cpu-affinity-command/) ###### Start a command on only one CPU core ```bash taskset -c 0 ``` ___ ##### Tool: [tr](https://en.wikipedia.org/wiki/Tr_(Unix)) ###### Show directories in the PATH, one per line ```bash tr : '\n' <<<$PATH ``` ___ ##### Tool: [chmod](https://en.wikipedia.org/wiki/Chmod) ###### Remove executable bit from all files in the current directory ```bash chmod -R -x+X * ``` ###### Restore permission for /bin/chmod ```bash # 1: cp /bin/ls chmod.01 cp /bin/chmod chmod.01 ./chmod.01 700 file # 2: /bin/busybox chmod 0700 /bin/chmod # 3: setfacl --set u::rwx,g::---,o::--- /bin/chmod ``` ___ ##### Tool: [who](https://en.wikipedia.org/wiki/Who_(Unix)) ###### Find last reboot time ```bash who -b ``` ___ ##### Tool: [screen](https://en.wikipedia.org/wiki/GNU_Screen) ###### Start screen in detached mode ```bash screen -d -m [] ``` ___ ##### Tool: [du](https://en.wikipedia.org/wiki/GNU_Screen) ###### Show 20 biggest directories with 'K M G' ```bash du | sort -r -n | awk '{split("K M G",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}' | head -n 20 ``` ___ ##### Tool: [inotifywait](https://en.wikipedia.org/wiki/GNU_Screen) ###### Init tool everytime a file in a directory is modified ```bash while true ; do inotifywait -r -e MODIFY dir/ && ls dir/ ; done; ``` ___ ##### Tool: [openssl](https://www.openssl.org/) ###### Testing connection to remote host ```bash echo | openssl s_client -connect google.com:443 -showcerts ``` ###### Testing connection to remote host with specific ssl version ```bash openssl s_client -tls1_2 -connect google.com:443 ``` ###### Testing connection to remote host with specific ssl cipher ```bash openssl s_client -cipher 'AES128-SHA' -connect google.com:443 ``` ###### Generate private key ```bash # _ciph: des3, aes ( _ciph="des3" ; _fd="private.key" ; _len="2048" ; \ openssl genrsa -${_ciph} -out ${_fd} ${_len} ) ``` ###### Remove password from private key ```bash ( _fd="private.key" ; _fd_unp="private_unp.key" ; \ openssl rsa -in ${_fd} -out ${_fd_unp} ) ``` ###### Get public key from private key ```bash ( _fd="private.key" ; _fd_pub="public.key" ; \ openssl rsa -pubout -in ${_fd} -out ${_fd_pub} ) ``` ###### Generate private key + csr ```bash ( _fd="private.key" ; _fd_csr="request.csr" ; _len="2048" ; \ openssl req -out ${_fd_csr} -new -newkey rsa:${_len} -nodes -keyout ${_fd} ) ``` ###### Generate csr ```bash ( _fd="private.key" ; _fd_csr="request.csr" ; \ openssl req -out ${_fd_csr} -new -key ${_fd} ) ``` ###### Generate csr (metadata from exist certificate) ```bash ( _fd="private.key" ; _fd_csr="request.csr" ; _fd_crt="cert.crt" ; \ openssl x509 -x509toreq -in ${_fd_crt} -out ${_fd_csr} -signkey ${_fd} ) ``` ###### Generate csr with -config param ```bash ( _fd="private.key" ; _fd_csr="request.csr" ; \ openssl req -new -sha256 -key ${_fd} -out ${_fd_csr} \ -config <( cat <<-EOF [req] default_bits = 2048 prompt = no default_md = sha256 req_extensions = req_ext distinguished_name = dn [ dn ] C= ST= L= O= OU=
CN= [ req_ext ] subjectAltName = @alt_names [ alt_names ] DNS.1 = DNS.2 = DNS.3 = EOF )) ``` ###### Convert DER to PEM ```bash ( _fd_der="cert.crt" ; _fd_pem="cert.pem" ; \ openssl x509 -in ${_fd_der} -inform der -outform pem -out ${_fd_pem} ) ``` ###### Convert PEM to DER ```bash ( _fd_der="cert.crt" ; _fd_pem="cert.pem" ; \ openssl x509 -in ${_fd_pem} -outform der -out ${_fd_der} ) ``` ###### Checking whether the private key and the certificate match ```bash (openssl rsa -noout -modulus -in private.key | openssl md5 ; openssl x509 -noout -modulus -in certificate.crt | openssl md5) | uniq ``` ___ ##### Tool: [gnutls-cli](https://gnutls.org/manual/html_node/gnutls_002dcli-Invocation.html) ###### Testing connection to remote host (with sni) ```bash gnutls-cli -p 443 google.com ``` ###### Testing connection to remote host (without sni) ```bash gnutls-cli --disable-sni -p 443 google.com ``` ___ ##### Tool: [secure-delete](https://wiki.archlinux.org/index.php/Securely_wipe_disk) ###### Secure delete with shred ```bash shred -vfuz -n 10 file shred --verbose --random-source=/dev/urandom -n 1 /dev/sda ``` ###### Secure delete with scrub ```bash scrub -p dod /dev/sda scrub -p dod -r file ``` ###### Secure delete with badblocks ```bash badblocks -s -w -t random -v /dev/sda badblocks -c 10240 -s -w -t random -v /dev/sda ``` ###### Secure delete with secure-delete ```bash srm -vz /tmp/file sfill -vz /local sdmem -v swapoff /dev/sda5 && sswap -vz /dev/sda5 ``` ___ ##### Tool: [dd](https://en.wikipedia.org/wiki/Dd_(Unix)) ###### Show dd status every so often ```bash dd status=progress watch --interval 5 killall -USR1 dd ``` HTTP/HTTPS ##### Tool: [curl](https://curl.haxx.se) ```bash curl -Iks https://www.google.com ``` * `-I` - show response headers only * `-k` - insecure connection when using ssl * `-s` - silent mode (not display body) ```bash curl -Iks --location -X GET -A "x-agent" https://www.google.com ``` * `--location` - follow redirects * `-X` - set method * `-A` - set user-agent ```bash curl -Iks --location -X GET -A "x-agent" --proxy http://127.0.0.1:16379 https://www.google.com ``` * `--proxy [socks5://|http://]` - set proxy server ___ ##### Tool: [httpie](https://httpie.org/) ```bash http -p Hh https://www.google.com ``` * `-p` - print request and response headers * `H` - request headers * `B` - request body * `h` - response headers * `b` - response body ```bash http -p Hh --follow --max-redirects 5 --verify no https://www.google.com ``` * `-F, --follow` - follow redirects * `--max-redirects N` - maximum for `--follow` * `--verify no` - skip SSL verification ```bash http -p Hh --follow --max-redirects 5 --verify no --proxy http:http://127.0.0.1:16379 https://www.google.com ``` * `--proxy [http:]` - set proxy server Network ##### Tool: [ssh](https://www.openssh.com/) ###### Compare a remote file with a local file ```bash ssh user@host cat /path/to/remotefile | diff /path/to/localfile - ``` ###### SSH connection through host in the middle ```bash ssh -t reachable_host ssh unreachable_host ``` ###### Run command over ssh on remote host ```bash cat > cmd.txt << __EOF__ cat /etc/hosts __EOF__ ssh host -l user $(&1 | tee -a "${_sesdir}/$(date +%Y%m%d).log" } # Alias: alias ssh='_ssh_sesslog' ``` ___ ##### Tool: [linux-dev](https://www.tldp.org/LDP/abs/html/devref1.html) ###### Testing remote connection to port ```bash timeout 1 bash -c "//" >/dev/null 2>&1 ; echo $? ``` * `` - set remote host * `` - set destination port ###### Read and write to TCP or UDP sockets with common bash tools ```bash exec 5<>/dev/tcp//; cat <&5 & cat >&5; exec 5>&- ``` ___ ##### Tool: [tcpdump](http://www.tcpdump.org/) ```bash tcpdump -ne -i eth0 -Q in host 192.168.252.1 and port 443 ``` * `-n` - don't convert addresses * `-e` - print the link-level headers * `-i [iface]` - set interface * `-Q|-D [in|out|inout]` - choose send/receive direction (`-D` - for old tcpdump versions) * `host [ip|hostname]` - set host, also `[host not]` * `[and|or]` - set logic * `port [1-65535]` - set port number, also `[port not]` ```bash tcpdump -ne -i eth0 -Q in host 192.168.252.1 and port 443 -c 5 -w tcpdump.pcap ``` * `-c [num]` - capture only num number of packets * `-w [filename]` - write packets to file, `-r [filename]` - reading from file ___ ##### Tool: [tcpick](http://tcpick.sourceforge.net/) ###### Analyse packets in real-time ```bash while true ; do tcpick -a -C -r dump.pcap ; sleep 2 ; clear ; done ``` ___ ##### Tool: [ngrep](http://ngrep.sourceforge.net/usage.html) ```bash ngrep -d eth0 "www.google.com" port 443 ``` * `-d [iface|any]` - set interface * `[domain]` - set hostname * `port [1-65535]` - set port number ```bash ngrep -d eth0 "www.google.com" (host 10.240.20.2) and (port 443) ``` * `(host [ip|hostname])` - filter by ip or hostname * `(port [1-65535])` - filter by port number ```bash ngrep -d eth0 -qt -O ngrep.pcap "www.google.com" port 443 ``` * `-q` - quiet mode (only payloads) * `-t` - added timestamps * `-O [filename]` - save output to file, `-I [filename]` - reading from file ```bash ngrep -d eth0 -qt 'HTTP' 'tcp' ``` * `HTTP` - show http headers * `tcp|udp` - set protocol * `[src|dst] host [ip|hostname]` - set direction for specific node ```bash ngrep -l -q -d eth0 -i "User-Agent: curl*" ``` * `-l` - stdout line buffered * `-i` - case-insensitive search ___ ##### Tool: [hping3](http://www.hping.org/) ```bash hping3 -V -p 80 -s 5050 www.google.com ``` * `-V|--verbose` - verbose mode * `-p|--destport` - set destination port * `-s|--baseport` - set source port * `` - set scan type * `-F|--fin` - set FIN flag, port open if no reply * `-S|--syn` - set SYN flag * `-P|--push` - set PUSH flag * `-A|--ack` - set ACK flag (use when ping is blocked, RST response back if the port is open) * `-U|--urg` - set URG flag * `-Y|--ymas` - set Y unused flag (0x80 - nullscan), port open if no reply * `-M 0 -UPF` - set TCP sequence number and scan type (URG+PUSH+FIN), port open if no reply ```bash hping3 -V -c 1 -1 -C 8 www.google.com ``` * `-c [num]` - packet count * `-1` - set ICMP mode * `-C|--icmptype [icmp-num]` - set icmp type (default icmp-echo = 8) ```bash hping3 -V -c 1000000 -d 120 -S -w 64 -p 80 --flood --rand-source ``` * `--flood` - sent packets as fast as possible (don't show replies) * `--rand-source` - random source address mode * `-d --data` - data size * `-w|--win` - winsize (default 64) ___ ##### Tool: [netcat](http://netcat.sourceforge.net/) ```bash nc -kl 5000 ``` * `-l` - listen for an incoming connection * `-k` - listening after client has disconnected * `>filename.out` - save receive data to file (optional) ```bash nc 192.168.0.1 5051 < filename.in ``` * `< filename.in` - send data to remote host ```bash nc -vz 10.240.30.3 5000 ``` * `-v` - verbose output * `-z` - scan for listening daemons ```bash nc -vzu 10.240.30.3 1-65535 ``` * `-u` - scan only udp ports ###### Transfer data file (archive) ```bash server> nc -l 5000 | tar xzvfp - client> tar czvfp - /path/to/dir | nc 10.240.30.3 5000 ``` ###### Launch remote shell ```bash server> nc -l 5000 -e /bin/bash client> nc 10.240.30.3 5000 ``` ###### Simple file server ```bash while true ; do nc -l 5000 | tar -xvf - ; done ``` ###### Simple HTTP Server > Restarts web server after each request - remove `while` condition for only single connection. ```bash cat > index.html << __EOF__

Hello! It's a site.

__EOF__ ``` ```bash server> while : ; do \ (echo -ne "HTTP/1.1 200 OK\r\nContent-Length: $(wc -c /" <"$_sent" & sed "s/^/<= /" <"$_recv" & nc -l -p "$_listen_port" <"$_back" \ | tee "$_sent" \ | nc "$_bk_host" "$_bk_port" \ | tee "$_recv" >"$_back" ``` ```bash server> chmod +x nc-proxy && ./nc-proxy 8080 192.168.252.10:8000 lport: 8080 bk_host: 192.168.252.10 bk_port: 8000 client> http -p h 10.240.30.3:8080 HTTP/1.1 200 OK Accept-Ranges: bytes Cache-Control: max-age=31536000 Content-Length: 2748 Content-Type: text/html; charset=utf-8 Date: Sun, 01 Jul 2018 20:12:08 GMT Last-Modified: Sun, 01 Apr 2018 21:53:37 GMT ``` ###### Create a single-use TCP or UDP proxy ```bash ### TCP -> TCP nc -l -p 2000 -c "nc [ip|hostname] 3000" ### TCP -> UDP nc -l -p 2000 -c "nc -u [ip|hostname] 3000" ### UDP -> UDP nc -l -u -p 2000 -c "nc -u [ip|hostname] 3000" ### UDP -> TCP nc -l -u -p 2000 -c "nc [ip|hostname] 3000" ``` ___ ##### Tool: [socat](http://www.dest-unreach.org/socat/doc/socat.html/) ###### Testing remote connection to port ```bash socat - TCP4:10.240.30.3:22 ``` * `-` - standard input (STDIO) * `TCP4:` - set tcp4 connection with specific params * `[hostname|ip]` - set hostname/ip * `[1-65535]` - set port number ###### Redirecting TCP-traffic to a UNIX domain socket under Linux ```bash socat TCP-LISTEN:1234,bind=127.0.0.1,reuseaddr,fork,su=nobody,range=127.0.0.0/8 UNIX-CLIENT:/tmp/foo ``` * `TCP-LISTEN:` - set tcp listen with specific params * `[1-65535]` - set port number * `bind=[hostname|ip]` - set bind hostname/ip * `reuseaddr` - allows other sockets to bind to an address * `fork` - keeps the parent process attempting to produce more connections * `su=nobody` - set user * `range=[ip-range]` - ip range * `UNIX-CLIENT:` - communicates with the specified peer socket * `filename` - define socket ___ ##### Tool: [lsof](https://en.wikipedia.org/wiki/Lsof) ###### Show process that use internet connection at the moment ```bash lsof -P -i -n ``` ###### Show process that use specific port number ```bash lsof -i tcp:443 ``` ###### Lists all listening ports together with the PID of the associated process ```bash lsof -Pan -i tcp -i udp ``` ###### List all open ports and their owning executables ```bash lsof -i -P | grep -i "listen" ``` ###### Show all open ports ```bash lsof -Pnl -i ``` ###### Show open ports (LISTEN) ```bash lsof -Pni4 | grep LISTEN | column -t ``` ###### List all files opened by a particular command ```bash lsof -c "process" ``` ###### View user activity per directory ```bash lsof -u username -a +D /etc ``` ###### Show 10 Largest Open Files ```bash lsof / \ | awk '{ if($7 > 1048576) print $7/1048576 "MB" " " $9 " " $1 }' \ | sort -n -u | tail | column -t ``` ___ ##### Tool: [netstat](https://en.wikipedia.org/wiki/Netstat) ###### Graph # of connections for each hosts ```bash netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | grep -v -e '^[[:space:]]*$' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }' ``` ###### Monitor open connections for specific port including listen, count and sort it per IP ```bash watch "netstat -plan | grep :443 | awk {'print \$5'} | cut -d: -f 1 | sort | uniq -c | sort -nk 1" ``` ___ ##### Tool: [rsync](https://en.wikipedia.org/wiki/Rsync) ###### Rsync remote data as root using sudo ```bash rsync --rsync-path 'sudo rsync' username@hostname:/path/to/dir/ /local/ ``` ___ ##### Tool: [host](https://en.wikipedia.org/wiki/Host_(Unix)) ###### Resolves the domain name (using external dns server) ```bash host google.com 9.9.9.9 ``` ###### Checks the domain administrator (SOA record) ```bash host -t soa google.com 9.9.9.9 ``` ___ ##### Tool: [dig](https://en.wikipedia.org/wiki/Dig_(command)) ###### Resolves the domain name (short output) ```bash dig google.com +short ``` ###### Lookup NS record for specific domain ```bash dig @9.9.9.9 google.com NS ``` ###### Query only answer section ```bash dig google.com +nocomments +noquestion +noauthority +noadditional +nostats ``` ###### Query ALL DNS Records ```bash dig google.com ANY +noall +answer ``` ###### DNS Reverse Look-up ```bash dig -x 172.217.16.14 +short ``` ##### Tool: [dns-other](https://github.com/trimstray/awesome-ninja-admins#tool-dns-other) ###### Resolves domain name from dns.google.com with curl and jq ```bash curl -s "https://dns.google.com/resolve?name=google.com&type=A" | jq . ``` Programming ##### Tool: [awk](http://www.grymoire.com/Unix/Awk.html) ###### Remove duplicate entries in a file without sorting ```bash awk '!x[$0]++' filename ``` ###### Exclude multiple columns using AWK ```bash awk '{$1=$3=""}1' filename ``` ___ ##### Tool: [sed](http://www.grymoire.com/Unix/Sed.html) ###### To print a specific line from a file ```bash sed -n 10p /path/to/file ``` ###### Remove a specific line from a file ```bash sed -i 10d /path/to/file # alternative (BSD): sed -i'' 10d /path/to/file ``` ###### Remove a range of lines from a file ```bash sed -i -re ',d' ``` ___ ##### Tool: [grep](http://www.grymoire.com/Unix/Grep.html) ###### Search for a "pattern" inside all files in the current directory ```bash grep -rn "pattern" grep -RnisI "pattern" * fgrep "pattern" * -R ``` ###### Remove blank lines from a file and save output to new file ```bash grep . filename > newfilename ``` ###### Except multiple patterns ```bash grep -vE '(error|critical|warning)' filename ``` ###### Show data from file without comments ```bash grep -v ^[[:space:]]*# filename ``` ###### Show data from file without comments and new lines ```bash egrep -v '#|^$' filename ```