20/12/2023
## [NMAP hints] ##
https://hackertarget.com/nmap-cheatsheet-a-quick-reference-guide/
Update nmap scripts etc
nmap --script-updatedb
nmap -sC -sV # get protocols and version data runs Safe scripts
nmap -Pn -sV --script vuln # VA type scan
nmap -A #runs like the -sC -sV option
https://github.com/ernw/nmap-parse-output
https://github.com/laconicwolf/Nmap-Scan-to-CSV
Instal vulners from Github
nmap -Pn -sV --script=nmap-vulners x.x.x.x
Install Vulscan from Github
git clone
https://github.com/scipag/vulscan
Run against local CVE database - the supplied CVE are all very old now...
nmap -Pn -sV --script=vulnscan/vulscan.nse --script-args vulscandb=./cve.csv x.x.x.x
Passive scan using Shodan
nmap -sn -Pn -n --script shodan-api.nse <target>
Brute force ssh using nselib/data lst files (edit to add more names/passwd)
nmap -p 22 -Pn --script ssh-brute --script-args userdb=usernames.lst,passdb=passwords.lst <X.X.X.X> --script-args ssh-brute.timeout=4s
Wordpress
nmap --script http-wordpress-enmu x.x.x.x -p 80,443
Ping scan discovery list live ip's
namp -sn 192.168.0.0/16 | awk '/Nmap scan/{gsub(/[()]/,"",$NF); print $NF > "nmap_scanned_ips"}'
nmap -sA -P0 -g 25 -f -oN output.txt fw_ip
-r don't rand ports
try -sA or -sT (if stateful FW) and -vv for verbose o/p
-n don't reverse dns
Use the O/P from a -sV scan (saved as xml) -oX and run it through searchsploit (exploitDB)
searchsploit -x --nmap ./nmap-scan.xml
https://github.com/offensive-security/exploitdb
/opt/exploit-database/searchsploit local (get Vuln/sploits on local machine - or Openssh to get these Vulns)
## [Get SSL CERT] ##
openssl s_client -connect www.google.co.uk:443 -showcerts > outfile.txt
or
echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout
-text||dates
Nmap Get Cert dates
nmap -p 443 --script ssl-cert <ip>
scan for TLS/SSL protocol with nmap
nmap -sV --script ssl-enum-ciphers -p 443 <ip>
or
nmap -Pn --script ssl-enum-ciphers x.x.x.x -p
Get sub-domains using google's crt.sh site
nmap -Pn -sn --script=hostmap-crtsh fqdn
Check HTTP Options
nmap -pn -p 443 --script http-security-headers x.x.x.x
nmap -pn -p 443 --script http-headers x.x.x.x
nmap -pn -p 443 --script http-cookie-flags x.x.x.x
curl -I www.ip.addr.here
curl -X OPTIONS www.ip.addr.here -i
Look for VHosts NB the shodan-api get Vhosts info as well.
nmap --script http-vhosts --script-args http-vhosts.collapse=200 -p80,443 x.x.x.x
remove the --script-args to get collapsed results ans it 200 then add back in to see
## Format Nmap output ##
xsltproc nmap-out.xml -o nmap-out.html
#Convert XML scan to CSV only lists main details but good Service/port overview.
# git clone the Nmap-Scan-to-CSV
python3 ../Nmap-Scan-to-CSV/nmap_xml_parser.py -f ./nmap-results.xml -csv nmap-results.csv
# Parse XML output and list ports/services/groups etc, etc
# git clone nmap-parse-output
./nmap-parse-output/nmap-parse-output ./ppte-sites.xml service http
#Get Domain from IP
dig -x ip_address +short
dig +search ip_address +noall +answer
#Find who holds to DNS records
dig ip.domain NS
#Get ANY
dig ip.domain A
# or use Host or Nslookup
## [NetCat] ##
NC proxy
mkfifo 2way
ncat -l 8080 0<2way | ncat target.ip.addr.here 80 1>2way
keeps nc server listerning
nc -l 80 -k
Simple nc scan
nc -v -z -w 2 target.ip.addr port
Simple Proxy with Socat
Socat proxy - Listen 55600/tcp localhost forward to google:80
socat TCP-LISTEN:55600,fork TCP:www.google.co.uk:80
#############################################################################
##################### SHELL SCRIPT ONE LINERS ###############################
#############################################################################
[Shell script checker]
This is a great site that checks the syntax etc of a shell script.
https://www.shellcheck.net
http://mywiki.wooledge.org/FullBashGuide
## [Search for strings from a list file] ##
Simple version,
grep -Fiwf file_1 file_2
or try -
for aa in $(cat ./list_file)
do
grep -i ${aa} Data_file
done
OR BETTER VERSION FOR GETTING "string1 string2"
cat ./list_file | while read -r line
do
grep -i "$line" ./Other_file
#or ping -c 1 "${line}" >>output_file
done
AWK Version (appears to work well)
awk 'NR==FNR{arr[$0];next} $0 in arr' file1 file2
Grep exact string from any location in lines of Text (using Grep Perl func)
good for getting patch numbers etc from a dump
grep -oP 'string.*' in_file
or get matching count
grep -o -f pattern_file log_file | sort | uniq -c
## [Check DUPs] ##
To list the strings that are common to both files
comm -12 x1 x2
or
grep -f x2 x1 items in RED are common to both files
To get just a count of strings that are common over both files
comm -12 x1 x2 | wc
or
grep -f x2 x1 | wc
grep -cf x2 x1
To list new strings that have appeared but were not in the previous dump
comm -13 x1 x2
grep -ivf x2 x1
Sort csv file by column (first) and uniq
sort -t "," -k 1,1 -u file_name
## [GREP] ##
Either or string
grep 'string1\|string2\|string3' <file_name>
Find string and print 2 lines before and after the sting match
grep -A 2 -B 2 PATTERN file_name
Get the match and (10) chars after it note the '.' after the string
grep -oP 'CVE.{0,10}'
Get the (3) chars before the string
grep -oP '.{0,3}CVE'
or grep CVE- and the next . chars
grep -oP '(CVE-)..........' ./file_name
Get just the string with wild card - so to get CVE-2022-1234
grep -oh "\w*CVE-2022-\w*" file_name
Get Email addresses from text files (full of crap)
grep -o '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' file_name
Get IP address(s) from text file
grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' file_name
Get IP addresses with 10 as the first octet
grep -Eo '10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
This is a fudge - but works :)
grep '10\. ' ./input_file
Grep text between two quotes "
grep -o '".*"' <file_name> | sed 's/"//g'
Convert file of text (column) to CSV comma seperated output
cat file_name | tr '\n' ',' > out_file
same but puts a space after the comma
perl -p -e 's/\n/, /' ./file_name > out_file
Look for string in folders/files
find . -type f -iname "*" | xargs grep "string"
## [AWK] ##
Convert output list from multi-line (CRLF) to all on one line with , (comma) seperator.
assume we are piping the output via sort and uniq etc...
sort input_file | uniq| awk 'BEGIN{ORS=", "}1'
or using tr
sort |uniq| tr '\n' ','
Print line numbers in File
awk '{print FNR "\t" $0}' file_name
Get string from file
awk -F"string" {print $NR}' file_name
Get line (23) from file
awk 'FNR==23 {print;exit}' file_name
Remove leading whitespace
awk '{$1=$1}1' file_name
Remove blank lines
awk NR file_name
or
awk 'NR > 0' file_name
Remove leading white space on lines
awk '{sub(/^[ \t]+/, ""); print}' file_name
Get second column from space delim text
awk 'NR!=1{print $2}' file_name
Get email addresses from file - The GREP versions appear to work better!
awk '{for(i=1;i<=NF;i++) { if ($(i) ~ "@") print $i}}' <file_name>
then to get f_name full address
awk -F "." '{print $1 "," $0}' <file_name> > <output.csv>
Find String and print the next 5 lines
awk '/PATTERN/ {for(i=1; i<=5; i++) {getline; print}}' file_name
or
cat file_name | awk '{if(a-->0){print;next}} /PATTERN/{a=5}' file_name
Find dups in a file
awk 'x[$1]++ == 1 { print $1 " is duplicated"}' file_name
awk '!x[$1]++ == 1 { print $1 " is not duplicated"}' file_name
List Unique lines in file
awk 'FNR==NR {a[$0]++; next} !a[$0]' file1 file2
List lines that are present in old.csv and not new.csv
awk 'NR==FNR{a[$0];next} !($0 in a)' old.csv new.csv
List like DIFF command field 1 in CSV
awk -F "," 'NR==FNR{c[$1]++;next};c[$1] == 0' file_one file_two
Add figures on each line (ignores text)
awk '{s=0; for (i=1; i=<NF; i++) s=s+$i; print s}' file_name
Work with CSV file - comma as seperator and output as a comma
awk 'BEGIN { FS = "," ; OFS = ","} ; {print $1,$2}' file_name
Show count for number of comma's per line with line number (the matching char is in the
gsub \,
awk 'BEGIN{print "count", "lineNum"}{print gsub(/\,/,"") "\t" NR}' file_name
Show lines with un-equal number of " on them
good for spotting csv import conversion issues into Excel etc.
awk -F'"' 'NF % 2 == 0 { printf("Line %d has odd quoting: %s\n", NR, $0) }' ./file_name
Sum (count) the totals for first column
awk '{sum+=$1} END {print sum}' file_name
Sum count of string in file
awk -F, '/string/ {sum += } END {print sum}' file_name
Working with csv using , and ; as delimiter
and output as csv (saves doing a $2",",$8)
awk -F "[,;]" -v OFS="," '{print $2,$8}' ./file_name
Print lines with blank 5th field (csv)
awk -F, '$5' ./file_name
Print the 2nd to last field, csv (-F [,])
awk -F "," '{print $--NF}' file_name
Grab 2nd to last field and count total if value over 7
awk -F "," '{print $--NF}' ./file_name | awk '{if ($1>=7){count++;}} END {print count}'
Print lines in CSV where number in field 8 is greater or = to 8
awk -F "," '$8 >=8' ./file_name
or where last column is >=8
awk -F, '$NR >=8' ./file_name
or where col 8 is greater 3 and less than 8 (get numbers 4-7)
awk -F "," '$8 >3 && $8 <8' ./file_name
Sum (count) where field 8 greater= to 7
awk -F "," '{if ($8>=7){count++;}} END {print count}'
Add a semi-colon at the end of each line
awk '{print $0 ";"}' in_file > out_file
Add a comma after first word on each line
awk '{$2="," OFS $2} 1' file_name
Get field 1 and last 5 chars field 2 (passwd hash?) from comma delim file
awk -F, '{print $1",", substr($0, length($0)-4)}' ./file_name
Convert/reverse IP address (output from nslookup for eg) so turn 4.3.2.10 in to 10.2.3.4
First as we want CSV O/P in format 10.2.3.4 , hostname.domain.com and we are working with 10. range
in vi 1,$ s/10/10./g
now awk the file
awk -F. '{print $4"."$3"."$2"."$1","$5}' ./file_name >results_output
## [SED] ##
http://sed.sourceforge.net/sed1line.txt
Take column text (IPs) and build a comma seperated line single line list
paste -d, -s input_file > output_file
this sed sort of works
sed 's/^\|$/"/g'|paste -sd", " - < input_file > output_file
Remove first 2 chars (. = a char)
sed 's/^..//' file_name
Subs 3rd char for an X
cat file_name | sed 's/[a-z]/X/3'
or
cat file_name | sed 's/[a-z]\{3\}/X/g'
Remove first line in file
sed '1d' file_name
Remove first to 5th lines
sed '1,5d' file_name
Remove blank lines
sed '/^$/d' file_name
Delete lines that start with a whitespace
sed 's/ .*//' file_name
Delete leading whitespace from left to first char
sed -e 's/^[ \t]*//' file_name
Replace char's (in this case a leading slash to a space, so esc with a \)
sed 's/\// /' file_name
Remove all text after the first Dot (.)
sed 's/\..*$//' ./input_file > output_file
Remove last xx chars from end of line (2 in this eg)
sed 's/..$//' inout_file > output_file
Convert Unix newlines to DOS format
sed 's/$'"/`echo \\\r`/" <file_in > file_out
Add a semi-colon at the end of each line
sed "s/$/;/g" in_file > out_file
remove comma at end of each line
sed 's/,$//' in_file > out_file
Add comma after first char on each line
sed 's/ / \, /' file_name
Convert newline to space (good for uniq output of IP addresses etc)
uniq | tr '\n' ' '
Remove quote marks on all lines but leaves text
tr -d '"' <file_in
## [VI] ##
Remove blank lines
g/^\s*$/d
remove string
g/string/d
remove evertything bar string
g!/string/d
Delete up to char
:%s/.*\ze\<CHAR\>//
Delete upto last colon (:)
:1,$ s/.*://g
Remove leading white space
at esc :
%s/^\s*//g
Append to end of every line/string
:%s/$/\appended.string/g
[General Stuff]
Get first and fifth col in TAB seperated file
cut -f 1,5 -d "Cntl v <TAB>" file_name
Same for csv "," File
cut -d ',' -f1,5 file_name
get the first 5 chars from lines of text
cut -c 1-5 file_name
use filename (from say $1) as part of O/P file - strip leading ./
NAME="$(basename ${1} /.)"
## [Web site stuff] ##
Spider site
wget -r -np --spider www.site.addr.here
Count files in (open) folder on website without downloading anything
wget -qO -
http://website_address/files/ | grep '^<tr><td' | wc -l
Get/Download files of type .txt and .doc
wget -r -A txt,doc www.website.com
Get Base 64 message body (eml/msg). Cut base64 block out then
run
#base64 -d body_snip > output_file
General random No between 5-10
aa=`echo $(( RANDOM % (10 - 5 + 1 ) + 5 ))` ; echo $aa
## [SMB scannning] ##
smbclient -L 192.168.1.15 -U administrator
smbclient -L 192.168.1.15 -U %
smbclient //192.168.1.15/C$ passwd -U administrator
nmblookup -A 192.168.1.15
## [Windows stuff] ##
Get username (needs admin)
WMIC /Node:<computer_name> ComputerSystem Get UserName
Check for M$ patches
WMIC qfe get | findstr kb_<number>
Powershell NC like usage
Test-NetConnection -ComputerName x.x.x.x -Port 80
## [Block attackers - Linux Box] ##
Add sub-net to routing table
route add -net 10.1.3.0/24 gw 127.0.0.1 lo
check routing table
route -n
Remove blocked sub-net
route del -net 10.1.3.0/24
or
route del -net 10.1.0.0/16
## Service Stuff ##
Little NC HoneyPot
while true
do
nc -l 80 < ./www-server-id.txt >> nc_honey.log
echo "====`date` ====">> nc_honey.log
echo "" >> nc_honey.log
done
Simple HTTPD Server using busybox
busybox httpd -p 80 -h /var/www/
Run busybox on Windows (stand-alone exe)
c:\bin\busybox.exe sh -l
## [TMUX] ##
tmux new session
tmux a attach to session
Cntl B -d detach
Cntl B -p previous window
Cntl B -n next window
Cntl B -c Create new window
Cntl B , Rename Window
Cntl B % Split pane Vertically
Cntl B ; switch between split pane's
## SSH stuff ##
# MobaXterm setup to RDP to Linux over ssh
in terminal on Windows PC run
ssh -L 33389:127.0.0.1:3389 -l <user_name> <remote_rdp_server>
on Windows client run
mstsc 127.0.0.1:33389
# Reverse tunnel
On remote Server_a
ssh -R 2222:localhost:22
[email protected]_workstation -p 22 (or something else less obv's)
or add -nNT to run in background (with & maybe)
on your Workstation/client
ssh server_user@localhost -p 2222
EOF