
Data thu thập được chia làm 3 loại:
* Thông tin về hệ thống
* Thông tin về mạng
* Thông tin về tổ chức
Dưới đây là một bộ hướng dẫn chung để bắt đầu thu thập dấu vết của một mục tiêu:
* Thực hiện tìm kiếm nâng cao trên Google (Google hacking/dorking)
* Thu thập thông tin từ các trang web mạng xã hội
* Thu thập thông tin từ trang web của mục tiêu
* Thực hiện dấu vết trên các email có nguồn gốc từ mục tiêu
* Sử dụng công cụ đăng ký tên miền trực tuyến để lấy thông tin miền
* Thu thập thông tin DNS
* Thực hiện dấu vết mạng
* Thực hiện kỹ thuật social engineering
# Step by step to reconnaissance
# 1. Xác định domain và địa chỉ IP
Giải thích: Xác định địa chỉ IP của domain và giải địa chỉ của địa chỉ đấy giúp mở xác định scope và tránh bị out scope. Xác định rõ scope cho việc recon
# 2. Liệt kê subdomains và các bản ghi DNS
## 2.1 Liệt kê các bản ghi DNS
Một số loại bản ghi:
* SOA: Bản ghi SOA là bản ghi quan trọng đầu tiên trong mỗi vùng DNS (zone file). Nó chứa thông tin kiểm soát và quản trị của một miền, bản ghi SOA có thể cung cấp những thông tin quan trọng về cơ sở hạ tầng DNS của một tổ chức

Trong đó:
- *ns1.gandi.net.* là Primary DNS server – máy chủ DNS chính cho zone.
- *hostmaster.gandi.net.* là Email quản trị viên DNS, ghi theo chuẩn DNS (dấu @ viết thành .)
- *1746662400* là số hiệu phiên bản. Dùng để kiểm tra đồng bộ giữa các DNS servers
- *10800* là Refresh – (giây) Máy chủ DNS phụ sẽ đợi 3 giờ trước khi hỏi bản ghi mới từ máy chủ chính
- *604800* là Expire – Sau 7 ngày mà không cập nhật được từ máy chủ chính, máy chủ phụ sẽ bỏ zone.
- *10800* là Minimum TTL – Thời gian các máy chủ khác cache bản ghi
* TXT: Bản ghi TXT cho phép lưu trữ văn bản tùy ý trong hệ thống DNS. Nó thường được sử dụng để xác minh tên miền, chống giả mạo email, hoặc cung cấp các thông tin kỹ thuật.

* A: Bản ghi A trong DNS (Domain Name System) ánh xạ tên miền (domain name) → địa chỉ IPv4.

* MX:là một bản ghi trong hệ thống DNS (Domain Name System) dùng để chỉ định máy chủ email chịu trách nhiệm nhận và xử lý thư điện tử cho một tên miền cụ thể. Bản ghi MX giúp xác định các máy chủ email chịu trách nhiệm nhận và xử lý thư điện tử cho tên miền mục tiêu, điều này có thể cung cấp thông tin hữu ích trong các cuộc tấn công phishing hoặc tấn công vào hạ tầng email của mục tiêu.

* NS: là bản ghi dùng để chỉ định máy chủ tên (DNS servers) chịu trách nhiệm phân giải tên miền (domain name) thành địa chỉ IP tương ứng. Trong quá trình recon bản ghi NS giúp tìm ra các máy chủ DNS liên quan đến một tên miền và thu thập thông tin quan trọng về cơ sở hạ tầng của mục tiêu.

**Zone transfer:** là một "vùng DNS" là tập hợp tất cả các bản ghi DNS (như SOA, A, MX, CNAME, v.v.) của một tên miền hoặc subdomain. Zone transfer là cơ chế để đồng bộ hóa dữ liệu giữa máy chủ DNS chính và máy chủ phụ, đảm bảo cả hai có cùng thông tin DNS
### 2.1.3 Một số công cụ để xem DNS record
#### dig
Cách dig thu thập thông tin về DNS record
* Truy vấn từ máy chủ DNS gốc: Nếu máy chủ DNS mà dig yêu cầu không có thông tin về tên miền, nó sẽ liên hệ với máy chủ DNS gốc (root DNS servers) để bắt đầu quá trình phân giải.
* Truy vấn đến TLD: Máy chủ DNS gốc cung cấp thông tin về các máy chủ DNS có thẩm quyền cho tên miền cấp cao hơn (TLD servers).
* Khi dig đã có thông tin về máy chủ DNS có thẩm quyền (bản ghi SOA)cho tên miền mục tiêu, nó sẽ gửi truy vấn đến máy chủ DNS này để lấy các bản ghi DNS cụ thể (A, MX, TXT, v.v.).
Cách sử dụng:
* Truy vấn bản ghi: dig <domain> <loại bản ghi>

* Truy vấn đến zone transfer: dig AXFR \<sub server\> <pri server>

* Truy vấn chỉ định namespace: dig <tên class> <loại bản ghi> @<tên server>. Việc thay đổi namespace giúp xác định phiên bản phần mềm DNS
* IN (Internet): Dùng cho các truy vấn thông thường (A, MX, CNAME, v.v.)
* CH (Chaos): Một class đặc biệt, thường được dùng để truy vấn thông tin meta về máy chủ DNS, như phiên bản phần mềm (ví dụ: VERSION.BIND)

## 2.2 Liệt kê subdomains
Giải thích: Liệt kê các subdomain giúp mở rộng phạm vi tấn công và tập trung vào 1 scope. Xác định các dịch vụ và công nghệ liên quan (Một subdomain như jenkins.example.com có thể tiết lộ một instance Jenkins không được bảo mật, dễ bị tấn công nếu không yêu cầu xác thực).

kiểm tra DNS giúp xác định dịch vụ bên thứ 3, thu thập thông tin về các bản ghi DNS,...
* Kiểm tra loại bản ghi DNS. Một sộ bản ghi như A, AAAA, CNAME, MX, TXT, NS, SOA, SRV, PTR có thể chứa các thông tin về mail server, CA,...
* Kiểm tra DNS Transfer
## Tech Stack thường được sử dụng
* Sử dụng **API** của một số dịch vụ cung cấp open source.
* Thực hiện **pull cert** hoặc thông qua các dịch vụ bên ngoài
* Với **DNS** thực hiện các kĩ thuật: Brute forcing, Reverse DNS sweeping, NSEC zone walking, Zone transfers, FQDN alterations/permutations, FQDN Similarity-based Guessing
* **Reverse DNS sweeping:** Quét các địa chỉ ip trong cùng màng với domain đã thu được địa chỉ



* **Zone transfer:** Zone Transfer là quá trình sao chép toàn bộ dữ liệu DNS (DNS zone file) từ một DNS server – thường được dùng để đồng bộ dữ liệu giữa các DNS server


> Kết quả fail
* **FQDN Similarity-based Guessing:** FQDN Similarity-based Guessing là một kỹ thuật dùng để dự đoán subdomains hoặc tên miền tương tự bằng cách phân tích cấu trúc tên miền đầy đủ
* **Kiểm tra quá trình rounting** giữa các hops trong topo mạng: ASNLookup, BGPTools, BGPView, BigDataCloud, IPdata, IPinfo, RADb, Robtex, ShadowServer, TeamCymru
* **ASNLookup:** ASN (Autonomous System Number) là một số duy nhất, giúp các hệ thống mạng (Autonomous Systems) trong Internet giao tiếp với nhau. Một Autonomous System (AS) là một nhóm các máy chủ hoặc mạng mà được quản lý và hoạt động bởi một tổ chức hoặc nhà cung cấp dịch vụ mạng.

* **IPinfo:**

* **Trace routing**


* **Scraping**:
* **Google dorking**:


* **Web Archives**:
* **Wayback machine**
## Đánh giá và so sánh một số công cụ
### Subfinder
Subfinder không brute-force, thay vào đó:
* Gọi tới public sources như: VirusTotal, Censys, Shodan, CertSpotter, etc.
* Trích xuất subdomain từ certificate, DNS records, cache, etc.
* Tuy nhiên một số trang web yêu cầu API key nên cần phải cấu hình ~/.config/subfinder/provider-config.yaml



Trước khi thêm một API key mới

Sau khi thêm một API key mới

#### Ưu điểm
* Là passive nên không tương tác trực tiếp với hệ thống
* Dễ tích hợp với các tool khác
#### Nhược điểm
* Phụ thuộc vào bên thứ 3
* Do không brute-force nên có thể bỏ lỡ các subdomain không public
* Dữ liệu có thể bị outdate
### httpx
HTTPX hoạt động bằng cách gửi các request HTTP/HTTPS đến danh sách các domain/subdomain mà được cung cấp để xác định các subdomain chạy webserver. Vì vậy nó thường được đi kèm với subdomain.
#### Một số option thường được sử dụng
* -sc: hiện thị kèm với status code

* -ip: hiện thị địa chỉ ip

* -td: hiện thị công nghệ sử dụng

* -server: hiển thị tên webserver

* -fc: lọc các status code được chỉ định

**Xem thêm: https://github.com/projectdiscovery/httpx**
### Amass
Amass hoạt động theo mô hình Modular Pipeline – từng bước riêng biệt nhưng có thể kết hợp linh hoạt. Amass có thể thu thập thông tin từ open source hoặc thực hiện brute-force
Tech stack của amass:
**Tech Stack**

Amass hoạt động dựa trên 3 options chính:
* amass intel: Discover target namespaces for enumerations
* amass enum: Perform enumerations and network mapping
* amass db: Manipulate the Amass graph database
#### Amass Intel
Subcommand hoặc mô-đun có thể hỗ trợ thu thập thông tin open source về tổ chức và cho phép tìm thêm các tên miền gốc liên quan đến tổ chức (giống subfinder)
> Usage: amass intel [options] [-whois -d DOMAIN] [-addr ADDR -asn ASN -cidr CIDR]
> chỉ định đến file config với option -config: -config .config/amass/config.yaml
**Lưu ý**: phải config data source (API key)
https://github.com/owasp-amass/amass/blob/master/examples/datasources.yaml
#### Amass Enum
* Normal : Chạy lệnh amass ***enum -d example.com***. Chế độ này sẽ thu thập dữ liệu từ các nguồn và sử dụng DNS để xác thực và điều tra các namespaces trong phạm vi tên miền đã cung cấp.

* Active: Chạy lệnh amass enum --active -d example.com -p 80,443,8080. Chế độ này thực hiện tất cả các bước của chế độ Normal, đồng thời chủ động tìm kiếm thêm bằng cách: lấy chứng chỉ TLS, thực hiện chuyển vùng DNS (DNS zone transfers), sử dụng NSEC walking (một kỹ thuật DNS), và thu thập dữ liệu từ web (web crawling). Lệnh này cũng chỉ định các cổng (ports) cần quét: 80, 443, 8080 hoặc brute-force subdomain
> Link subdomain wordlist: https://raw.githubusercontent.com/danTaler/WordLists/refs/heads/master/Subdomain.txt


* Pasive: Chạy lệnh amass enum --passive -d example.com. Chế độ này chỉ lấy thông tin từ các nguồn dữ liệu có sẵn và chấp nhận chúng một cách thụ động, không thực hiện thêm bất kỳ hành động chủ động nào.
***Sự khác nhau sự amass enum passive và amass intel***
||Amass Intel|Amass Enum --passive|
|--|--|--|
|Mục đích|Tìm các tên miền gốc liên quan đến tổ chức hoặc dải IP|Tìm các subdomain của một tên miền cụ thể|
|Phạm vi|Tập trung vào các domain root|Tập trung vào các subdomain|
|Phương pháp|Reverse WHOIS, IP lookup, SSL cert analysis.|Thu thập dữ liệu từ các nguồn thụ động (PassiveDNS, Censys, v.v.)|
|Tương tác|Thụ động, nhưng có thể phân tích dữ liệu sâu hơn (như chứng chỉ SSL)|Thụ động, nhưng có thể phân tích dữ liệu sâu hơn (như chứng chỉ SSL)|
***Ưu điểm***
* Linh hoạt giữa passive và active (có kết hợp cả thu thập thông tin từ open source và brute-force)
* Tích hợp db giúp thuận tiện trong việc truy xuất
* Tích hợp nhiều công nghệ
* Kết hợp giữa các search engine và trang web tìm kiểm mã nguồn mở giúp mở rộng phạm vi tìm kiếm
***Nhược điểm***
* Khó config
* Yêu cầu API key từ các trang web tìm kiếm open source
Ngoài ra còn một số tool khác như theHarvester, Sublist3r, Assetfinder, ...
# 3. Thu thập email
Giải thích: Thu thập email là một cách hiệu quả để tìm kiếm địa chỉ email và có thể cả tên người dùng thuộc về một tổ chức. Những email này hữu ích theo nhiều cách, chẳng hạn như cung cấp cho chúng ta một danh sách tiềm năng để thực hiện các cuộc tấn công phía máy khách, tiết lộ quy ước đặt tên được sử dụng trong tổ chức hoặc lập bản đồ người dùng trong tổ chức.
### Các kĩ thuật thường được sử dụng
* **Cào web:** Quét các trang web để tìm email trong nội dung HTML hoặc các tệp công khai (như PDF, tài liệu)
* **Google Dorks:** kết hợp nhiều truy vấn. Ví dụ:

* **Reverse WHOIS Lookup:** Phân tích bản ghi WHOIS để tìm email của admin hoặc chủ sở hữu tên miền. Tìm email trong trường "Admin Email" hoặc "Registrant Email" (nếu không bị ẩn bởi dịch vụ bảo mật WHOIS)
* **DNS Enumeration:** Phân tích các bản ghi DNS (như MX, TXT) để suy ra email liên quan đến máy chủ email.
* **Thu thập email từ open source:** hu thập email từ các nguồn công khai như mạng xã hội, diễn đàn, hoặc dữ liệu rò rỉ.
### Các tool thường được sử dụng
* Google dorking: Một số option hay được sử dụng intext, inurl, filetype, site, ... kết hợp với các toán tử điều kiện như "" hoặc |,...

* Hunter.io: https://hunter.io/dashboard
* We leak Info
# 4. Kiểm tra virtual host
VH là một kỹ thuật cho phép nhiều trang web chia sẻ cùng một địa chỉ IP. Mỗi trang web được liên kết với một hostname (tên miền) duy nhất, giúp định hướng các yêu cầu đến đúng trang web. Chủ yếu sử dụng fuzzing để kiểm tra vhost

Hai cơ chế chính có thể được sử dụng để truy cập một trang web trên vhost:
* HTTP: sử dụng header Host trong yêu cầu. Client sử dụng chỉ thị để kết nối tới tên miền của máy chủ. Ngoài ra, nó có thể sử dụng chỉ thị để chỉ định số cổng TCP mà máy chủ đang lắng nghe.
* HTTPS: sử dụng phần mở rộng Server Name Indication với TLS. Client chỉ định tên máy chủ mà nó muốn kết nối tới ngay từ đầu của quá trình bắt tay. Server Name Indication là một phần mở rộng của giao thức TLS , giúp client chỉ định tên miền mà nó muốn kết nối tới ngay từ bước đầu của quá trình bắt tay TLS
## Đánh giá và so sánh một số công cụ
### Gobuster
Gobuster gửi các request với trường host trong header được thay thế bằng wordlist được cung cấp
> GET / HTTP/1.1
>
> Host: <tên_vhost_từ_wordlist>
Gobuster dựa vào status code và response size để xác định liệu vhost đó có tồn tại hay không
# 5. Scan port đang mở
### Xác định firewall
Gửi các gói tin scan với nmap quan sát các trạng thái trả về
* Nếu tất cả các cổng đều đóng hoặc lọc (filtered) → Có thể có firewall chặn quét cổng.
* Nếu phản hồi có vẻ chậm hoặc có sự thay đổi về thời gian phản hồi → Có thể có IDS/IPS hoặc firewall kiểm soát lưu lượng.
### TCP Connect Scan
Cơ chế hoạt động theo quá trình bắt tay 3 bước, có thể xem lại quá trình ở phần trên. Tuy nhiên vì không cần duy trì kết nối, sau khi xác định được cổng mở, gửi gói ACK/RST để hủy kết nối. Điều quan trọng là nếu bạn không phải là privileged user, đây là cách khả thi nhất để quét cổng. Nếu 1 cổng đóng nó sẽ phản hồi gói SYN bằng 1 gói với ACK/RST.


### TCP SYN Scan
Sau khi nhận được gói phản hồi SYN/ACK cho thấy cổng mở, ta gửi gói RST để hủy quá trình, điều này giảm khả năng bị ghi lại trong quá trình quét. Nếu cổng đóng, ta nhận lại gói RST/ACK như quá trình bắt tay.

### UDP Scan
Giống như quá trình UDP ping để discovery host ở phần trước. Nếu 1 port mở, ta nhận không nhận lại 1 phản hồi nào cả. Tuy nhiên nếu port đóng, ta nhận lại 1 ICMP type 3, code 3.

Việc quét cổng UDP thường không đáng tin cậy, vì các tường lửa và bộ định tuyến có thể chặn các gói ICMP. Điều này có thể dẫn đến kết quả sai lệch trong quá trình quét, và sẽ thường xuyên thấy các quét cổng UDP hiển thị tất cả các cổng UDP đều mở trên máy được quét.
* Cổng 53 - DNS
* Cổng 123 - NTP (Network Time Protocol)
* Cổng 161/162 - SNMP (Simple Network Management Protocol)
* Cổng 137/138 - NetBIOS
* Cổng 69 - TFTP (Trivial File Transfer Protocol)
* Cổng 1900 - SSDP (Simple Service Discovery Protocol)
* Cổng 520 - RIP (Routing Information Protocol)
* Cổng 1812/1813 - RADIUS (Remote Authentication Dial-In User Service)
* Cổng 500 - ISAKMP (Internet Security Association and Key Management Protocol)
* Cổng 514 - Syslog
* Cổng 1194 - OpenVPN
### Scan OS
Trong nmap hỗ trợ xác định OS bằng flag -O


### Scan kiểm tra service đang chạy trên các port
Nếu tồn tại các port đang mở đang chạy các dịch vụ khác như SMB, SMTP, SNMP thì tiếp tục scan các dịch vụ đấy
#### FTP
Trong trương hợp FTP cho phép đăng nhập với user anonymous thì có thể tận dụng để đọc file
#### SMB
* Scan netbios: giúp xác định các thị bị hoặc smb server khác với user, ....
* Kiểm tra kết nối ko cần authen
#### SMTP
#### SNMP
# 6. Xác định công nghệ (frameworks, libraries, CMS)
Kiểm tra công nghệ sử dụng giúp dễ dàng tấn công vào hệ thống.
* Nếu trang có trạng thái 404 không được exception cần thận thì thường trả về trang web status 404 mặc định của ngôn ngữ website
* Các ứng dụng được xây dựng trên CMS thường có những điểm đặc trưng riêng. Các web này thường có một trang web với banner về CMS mà web site đó sử dụng
* Kiểm tra code front-end có thể tiết lộ về công nghệ sử dụng. Với ajax thường sẽ có dấu #, với vuejs thường có biểu tượng chữ v màu xanh
* Quan sát header của request, response (banner grabbing) có thể có thông tin về webserver, thông tin về các method được phép, ...Những header quan trọng như Server, X-Powered-by hay X-Generator có thể cho biết backend được viết bằng gì, sử dụng loại reverse proxy nào.
* Kiểm tra xem server sử dụng reverse proxy nào
* Kiểm tra nếu server có đặt Strict-Transport-Security (HSTS) . Header này giúp đảm bảo rằng server luôn sử dụng https để có thể tránh được một số kiểu tấn công như ssl strip.
* Các tổ chức thường nhúng thẻ META thông tin vào nội dung web để hỗ trợ các công nghệ khác nhau như trình đọc màn hình, xem trước mạng xã hội, lập chỉ mục công cụ tìm kiếm, v.v. Thông tin siêu như vậy có thể có giá trị đối với người thử nghiệm trong việc xác định các công nghệ được sử dụng và các đường dẫn / chức năng bổ sung để khám phá và thử nghiệm.
Tool: securityheaders.com
# 7. Kiểm tra SSL/TLS
Kiểm tra SSL/TLS xác định version đang sử dụng có an toàn không. Các version SSL 2.0, SSL 3.0 và TLS 1.0/1.1 đã lỗi thời và có nhiều lỗ hổng nghiêm trọng
Sử dụng chứng chỉ self-signed (tự ký) trong môi trường sản xuất.
Chứng chỉ hết hạn, không được gia hạn.
Chứng chỉ được cấp bởi CA không uy tín hoặc đã bị thu hồi.
Weak Ciphers: Chạy lệnh sau, để ý bất cứ những ciphers nào không được rate mức A.
> crt.sh
> nmap --script ssl-enum-ciphers -p 443 www.example.com
## 11. Scan các lỗ hổng (VA)
Sử dụng các công cụ để scan các lỗ hổng bảo mật
Tool:
* Nessus
* Nuclei
* Osmedeus
## 12. Kiểm tra file robots.txt, .DS_Store và sitemap.xml nếu có
* Tệp robots.txt là một tệp văn bản được đặt trong thư mục gốc của website để hướng dẫn các công cụ tìm kiếm (Googlebot, Bingbot, v.v.) về những trang hoặc thư mục nào nên hoặc không nên thu thập dữ liệu. Một số website thường để cả đường dẫn đến sitemap.xml trong robots.txt.
* Tệp security.txt: security.txt là một tiêu chuẩn được đề xuất cho phép các trang web xác định các chính sách bảo mật và chi tiết liên hệ. The file may be present either in the root of the webserver or in the .well-known/ directory
* humans.txt là một sáng kiến để biết những người đằng sau một trang web. Nó có dạng một tệp văn bản chứa thông tin về những người khác nhau đã đóng góp vào việc xây dựng trang web.
* Kiểm tra chính sách cross domain:
Kiểm tra chính sách cross domain bằng cách thêm crossdomain.xml vào cuối page.
* Kiểm tra file sitemap.xml, sitemap.xsl, sitemap.xsd chứa sitemap của website
> welknow foler:
>
> https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml
>
> https://en.wikipedia.org/wiki/Well-known_URI#List_of_well-known_URIs
## 13. Kiểm tra các thư mục ẩn và endpoints
Kiểm tra các thư mục ẩn giúp khai thác thêm thông tin và mở rộng scope khai thác. Trên website luôn tồn tại các trang web giới hạn đặc quyền chỉ admin được phép. Các trang web ấy được giấu đi khỏi người có đặc quyền thấp
|Thư mục/File|Mô tả|Nguy Cơ|
|--|--|--|
|.git/|Git repo|Có thể dump toàn bộ mã nguồn nếu truy cập được .git/config, .git/HEAD, .git/index...|
|.svn/|Subversion repo|Rò rỉ lịch sử commit, có thể liệt kê file qua .svn/entries|
|.hg/|Mercurial repo|Như .git, có thể truy xuất lịch sử mã nguồn|
|.DS_Store|File ẩn của macOS|Dò được tên file, thư mục, gợi ý cấu trúc|
|.idea/|Cấu hình PHPStorm/IntelliJ|Có thể chứa thông tin cấu hình, kết nối DB, path dự án|
|.vscode/|Cấu hình Visual Studio Code|Thường chứa config dev, đôi khi có script test nội bộ|
|node_modules/|Thư viện JS (Node.js)|Có thể chứa file test/debug nội bộ, không nên public|
|backup/, old/, test/, dev/|Thư mục tạm|Hay bị bỏ quên, có thể chứa phiên bản lỗi|
|.env, config.php.bak, .bak|File cấu hình|Có thể lộ DB, API key, thông tin nhạy cảm|
### Thư mục .git,.svn
Chứa thông tin về quá trình commit của code. Nếu được tiếp cận thì có thể trace ngược lại để đọc các commit, các thông tin nhạy cảm như APIkey,...
### Thư mục đăng nhập của admin
Chứa login form cho admin. Nếu tài khoản admin yếu có thể chiếm quyền admin từ đây.
### Backup file
Khi sử dụng vim để edit file sẽ có một bản backup file với tên là **.filename.swp**. Hoặc khi sử dụng gedit thì backup file sẽ lấy tên file cộng với kí tự "~" để làm file backup
Một số file backup có đuôi .bak được tạo ra nhưng quên không ẩn đi
## Thư mục /error
Thư mục /error trên các trang web thường là nơi chứa các trang lỗi được hiển thị khi xảy ra sự cố.
Các trang lỗi được cấu hình kém (mặc định) thường tiết lộ thông tin nhạy cảm, ví dụ:
* Phiên bản server: Apache/2.4.41 (Ubuntu)
* Thư mục gốc hệ thống: /var/www/html/error/
* Stack trace khi có lỗi (PHP, Python, ASP.NET)
* Lỗi kết nối CSDL (mysqli_connect(): Access denied...)
* Đường dẫn file nội bộ (in /home/user/public_html/index.php on line 42)
### File cấu hình của web server
* File **.htaccess** được cấu hình trong apache tomcat server
* File **.htpasswd** là một tệp cấu hình quan trọng trong môi trường Apache HTTP Server. Nó chứa các thông tin mã hóa của tên người dùng và mật khẩu, dùng để xác thực người dùng khi truy cập vào các thư mục hoặc tệp yêu cầu bảo vệ.
* File **tomcat-user.xml** chứa thống tin về người dùng của tomcat server. Trong file này có chứa thông tin đăng nhập cho tài khoản manager. File **php.ini** là file cấu hình quan trọng trong môi trường PHP. Nó kiểm soát các cài đặt của PHP như bộ nhớ, thời gian thực thi, kiểu lỗi, và các cài đặt khác ảnh hưởng đến hoạt động của các ứng dụng PHP..Khi chiếm được thông tin này thì có toàn quyền quản lí tomcat server.
Ngoài ra còn có các file **nginx.conf** cho nginx,...
* Trong CMS joomla có file manifest chứa định nghĩa cấu trúc và thông tin của một extension plugin, template, ...
### Fuzzing các thư mục
* Quản trị: admin, login, dashboard, wp-admin, phpmyadmin.
* Phát triển: dev, staging, test, beta.
* Sao lưu: backup, backups, archive, old, users.csv, backup.sql.
* Cấu hình: config, .env, settings, conf.
* Tệp nhạy cảm: .git, .svn, robots.txt, sitemap.xml.
* Các thư mục frontend quan trọng: /components, /pages, /store, /utils
* /components: Chứa các component tái sử dụng
* /pages: Chứa các trang chính như /login, /admin, /dashboard
* /store: Chứa dữ liệu global như user auth, token, settings.
* /utils: Chứa các hàm tiện ích như xử lý ngày giờ, request API, encode/decode.
* File /settings.php: quan trọng trong CMS như Drupal, tiết lộ thông tin về thông tin kết nối CSDL (username, password), Biến môi trường (environment config), Secret key,....
* File config.php
* File localsettings.php
* File configuration.php
* Thư mục META-INF: Thư mục META-INF chứa các tệp cấu hình, metadata, hoặc tài nguyên cần thiết để Java hoặc môi trường ứng dụng nhận dạng và cấu hình ứng dụng. Các tệp trong thư mục này có thể bao gồm:

### Các endpoints tiêu biểu
* /admin, /administrator, /admin_panel, /admin/login: Các thư mục này thường liên quan đến các trang quản trị của ứng dụng. Đây là nơi chứa các endpoint dành cho quản trị viên
* /api, /v1/api, /rest, /graphql: Các thư mục này thường chứa các API endpoints của ứng dụng, nơi các yêu cầu RESTful API hoặc GraphQL được xử lý. Kiểm tra những thư mục này là rất quan trọng, vì chúng có thể chứa lỗ hổng API, xác thực kém, hoặc exposed sensitive data.
* /login, /logout, /auth, /signin, /reset-password: Các endpoint liên quan đến xác thực và đăng nhập
* /user, /profile: Thư mục liên quan đến thông tin người dùng. Các endpoint này có thể chứa thông tin nhạy cảm và dễ bị tấn công nếu không được bảo mật đúng cách
* /uploads, /files, /assets, /images, /.ssh: Thư mục tải lên, dễ bị tấn công với file upload vulnerabilities
* /docs, /documentation: Tài liệu API, dễ lộ thông tin nếu không bảo mật
* /config, /settings: Cấu hình ứng dụng, có thể chứa thông tin quan trọng
* /search: Endpoint tìm kiếm dễ bị khai thác
* /debug, /dev: Thư mục debug, có thể tiết lộ thông tin cấu trúc hệ thống
* /httpd: chứa access log
* /log: chứa log
* /plugins: chứa plugins
Nếu ứng dụng sử dụng API, rất có thể sẽ tìm thấy tài liệu về các endpoint qua các chuẩn như OpenAPI, Swagger, GraphQL, hoặc RAML.
* Swagger/OpenAPI: Kiểm tra nếu ứng dụng có file swagger.json hoặc openapi.json. Thông thường, tài liệu này được lưu ở các endpoint như /swagger.json hoặc /v2/api-docs.
* Một số ứng dụng sử dụng Jira là một phần mềm quản lý dự án và theo dõi lỗi:
* /plugins/servlet/oauth/view-consumer-info
* /confluence/plugins/servlet/oauth/view-consumer-info
Ví dụ: https://target.com/swagger.json hoặc https://target.com/api/v1/docs.
* GraphQL: Nếu ứng dụng sử dụng GraphQL, kiểm tra xem endpoint thường là /graphql. Có thể sử dụng các công cụ như GraphiQL hoặc Postman để tương tác và khám phá các query/mutation của GraphQL.
* /api/1/nginx: cấu hình nginx
* Ứng dụng sử dụng php thường sử dụng composer để quản lý dependencies.
* composer.json: chứa thông tin về các dependencies
## 14. Data leak từ webpage
Đối với các ứng dụng web hiện đại, việc sử dụng JavaScript phía client cho giao diện người dùng ngày càng trở nên phổ biến. Các công nghệ xây dựng giao diện phổ biến như ReactJS, AngularJS hoặc Vue đều sử dụng JavaScript phía client. Tương tự như các phần chú thích và metadata trong mã HTML, nhiều lập trình viên cũng hardcode thông tin nhạy cảm vào các biến JavaScript trên giao diện.
Thông tin nhạy cảm có thể bao gồm:
* API Key riêng tư (ví dụ: Khóa API Google Map không bị hạn chế quyền truy cập),
* Địa chỉ IP nội bộ
* Các path (ví dụ: đường dẫn đến các trang quản trị ẩn hoặc các chức năng quan trọng),
* Thông tin xác thực (credentials).
Những thông tin này có thể bị rò rỉ từ mã JavaScript phía front-end, tạo cơ hội cho kẻ tấn công lợi dụng.
### Review webpage comments and metadata
* Kiểm tra source code html comment
* Lộ API Key
* Các thẻ META
* Kiểm tra hardcode
* Lệnh fetch có thể đọc data từ nguồn không được bảo vệ
### Identifying Source Map Files js
Các tệp source map thường sẽ được tải khi DevTools được mở. Người kiểm thử có thể tìm thấy tệp source map bằng cách thêm phần mở rộng “.map” sau phần mở rộng của mỗi tệp JavaScript bên ngoài. Ví dụ, nếu một người kiểm thử thấy tệp /static/js/main.chunk.js, họ có thể kiểm tra tệp source map của nó bằng cách truy cập /static/js/main.chunk.js.map.
## 15. Xác định các tham số
Fuzzing tham số
### Xác định tham số từ các nguồn khác nhau
* Tham số trong URL (Query Parameters):
Kiểm tra các tham số trong URL (GET parameters) như ?id=1, ?user=admin
* Tham số trong form (POST Parameters):
* Tham số trong API Endpoints
* Tham số trong HTTP Headers
### Test các method
* Kiểm tra hoạt động của các method (GET, POST, HEAD, OPTIONS). Trong một số trường hợp HEAD có thể bypass quá trình xác thực. Tìm kiếm một page mà khi bạn truy cập thì bị chuyển hướng 302. Lúc này, sử dụng method HEAD thay thế cho GET. Nếu bạn nhận được response là 200, thì có nghĩa là access control có gì đó không đúng lắm.
## 16. Test Session
Trong ứng dụng có nhiều session. Test bằng cách đăng kí 1 tài khoản rồi chỉnh sửa các session nếu bị logout thì xác định đượ session đó có liên quan đến việc đăng nhập
### Kiểm tra hạn sử dụng của cookie, session
Nếu cookie session có thời gian sống quá dài, kẻ tấn công có thể đánh cắp cookie và sử dụng nó để chiếm quyền truy cập tài khoản.
### Kiểm tra phạm vi của cookie hoặc session
### Kiểm tra cookie httpOnly
Nếu ko kiểm tra cookie có thể bị đánh cắp
### Kiểm tra trạng thái của session trước và sau khi đăng nhập
### Kiểm tra các thông tin được lưu trong cookie
## 17. Kiểm tra form đăng kí
### Kiểm tra người dùng có tồn tại hay không
Thông qua việc đăng kí username có thể biết được username có tồn tại hay không.
### Kiểm tra khả năng authen bằng bruteforce
Kết hợp với các header để bypass chặn đăng nhập
* X-Forwarded-For: 127.0.0.1
* X-Real-IP: 127.0.0.1
* X-Original-URL: /admin
* X-HTTP-Method-Override: GET (Cho phép gửi method POST nhưng được ghi đè method khác)