---
# System prepended metadata

title: NMAP TRY HACK ME

---

NMAP TRY HACK ME

# Introduction
- Như chúng ta đã biết port trong 1 url thường chạy các dịch vụ khác nhau trên từng cổng ví dụ cổng 80 dùng http và 443 dùng cho https hay 22 cho ssh.Khi ta tiến hành tấn công hay lấy thông tin của 1 web nào đó thì ta cần xác định các service trên cổng nào đó có thể khai thác và công cụ cực mạnh cho điều này chính là nmap.
- Có khoảng 65535 port khả dụng trên 1 máy tính trong đó các cổng tiêu chuẩn như http ,https,ssh .... có khoảng 1024 cổng.
- Nmap là 1 công cụ giúp ta scan các cổng trên 1 domain hay 1 ip cụ thể để giup ta xác định các service trên cổng đó .

# How To Use

- nmap có rất nhiều lựa chọn cho việc quét 1 ip hay domain dưới đây ta điểm qua 1 vài option cơ bản:

`nmap --help`:liệt kê cách sử dụng nmap cho các bạn.
## Scan
Phương Pháp quét TCP:
- Có những option cơ bản như `-sS` ,`-sT` hai cái này cho kết quả khá giống nhau dùng cái nào cũng đc chức năng của nó đơn giản là xem cổng nào mở.
`nmap -sS ip(domain)`
- Và có -sA sẽ kiểm tra xem cổng có bị lọc hoặc chặn bởi hệ thống tường lửa hay không (tìm trạng thái của cổng).
`nmap -sA ip(domain)`

Phương pháp quét UDP:
- option là `-sU` nó giống với trên tìm cổng mở thường là các cổng UDP.
`nmap -sU ip(domain)`

Quét cổng:
- `nmap -p 80,443 target` cổng 80 và 443
- `nmap -p 80-150 target` từ cổng 80 tới 150
- `nmap -p- target` full port
Quét full:
- option:`-A` , quét tất cả các cổng ,thông tin service hệ điều hành ...
`nmap -A target`

Còn 1 vài option khác ít dùng như:
- TCP Null Scans (-sN)
- TCP FIN Scans (-sF)
- TCP Xmas Scans (-sX)
## Information
Tìm Hệ điều hành
- Với option `-O` ta các thể có thông tin về hệ điều hành trên mục tiêu .
`nmap -O target`

Phiên bản dịch vụ đang chạy
- option:`-sV`
`nmap -sV target`

Thêm thông tin khi quét
- option:`-v` or `-vv`(nhiều thông tin hơn)
`nmap -v optionScan target`

## Output
Lưu với 3 định dạng chuẩn cùng 1 lúc(**.txt,.xml,.gnmap**)
- option :`-oA`
`nmap -oA namefile`

lưu với file **.txt**
- option:`-oN`

lưu với file **.xml**
- option:`-oX`

lưu với file **.gnmap**
- option:`-oG`
# Explain scan type
## TCP Connect Scans
- TCP Connect Scans với option là `-sT` 
- Để hiểu được thì các bạn cần phải hiểu về TCP three-way handshake.Đơn giản là khi client gửi cho server 1 gói tin SYS và nếu nhận được server sẽ gửi lại gói tin SYS/ACK và người dùng nhận được thì sẽ gửi lại gói ACK thế là xong 3 bước .
- Với 3 bước cơ bản này giao thức TCP nó giúp thiết lập kêt nối 1 cách chính xác và truyền dữ liệu đầy đủ.
- ![1.jpg](https://muirlandoracle.co.uk/wp-content/uploads/2020/03/image-2.png).
- Vậy nếu server ko nhận được gói tin thì sao? thì nó sẽ trả lại 1 gói tin là  RST tới client và đóng kết nối điêu này được ghi trong tài liệu RFC 9293:
`"... If the connection does not exist (CLOSED), then a reset is sent in response to any incoming segment except another reset. A SYN segment that does not match an existing connection is rejected by this means"`
- ![1.jpg](https://i.imgur.com/vUQL9SK.png).
- nmap dựa vào cách trên để xác định 1 port mở hay đóng . Tuy nhiên trong vài trường hợp server co thể câu hình 1 firewall làm drop goi tin khiên ra ko nhận được gì cả khi gửi gói tin SYS đi.
## SYN Scans
- SYN Scans hay còn gọi là `half-open` và `stealth` với option là `-sS`
- Cũng như quét TCP trên dùng three-way handshake nhưng khi nhận gói tin ACK-SYN thì nó lại gửi gói tin RST tới server để đóng kết nối (**ngăn máy chủ cố gắng liên tục thực hiện yêu cầu**)
- Lợi ích:
  - bypass nếu nó kiểm tra three-way handshake.
  - không bị ghi lại log trên server.
  - Tốc độ nhanh do ko cần kết nối hoàn chỉnh.
- Bất lợi
  - yêu cầu quyền root 
  - Đôi khi làm server ko ổn định. 
## UDP Scans
- Khác với TCP kết nối UDP không dựa trên hanđ-sake hay gì nó chỉ đơn giải là gửi gói tin đi và không đảm bảo được người nhận có nhận được không vì thế UDP thường dùng cho các kết nối ưu tiên tốc độ hơn.Điều này khiến cho xác định cổng UDP mở hay đóng rất khó khăn.
- option `-sU`
- khi 1 gói tin gủi tới 1 cổng UDP mà nhận được gói tin trả về thì đơn giản là cổng đó mở .Còn nếu không có phản hồi nmap sẽ cho ta kết quả là `open|filtered` có thể cổng đang mở hoặc đang bị firewall chặn.
- Còn khi ta nhận về 1 gói tin ICMP (ping) chứa thông tin `port unreachable` thì cổng đó đang đóng .
## NULL, FIN and Xmas
- NULL scan đơn giải là ta gửi 1 TCP request mà không set flag gì cả ,nếu nhận về RST thì port đóng.
- FIN cũng giống trên nhưng ta set flag là FIN(dùng để đóng 1 kết nối) nhận về RST thì port đóng.
- Xmas chúng ta sẽ set flag là PSH, URG and FIN nhận về RST thì port đóng.
## ICMP Network Scanning
- Đây đơn giản là scan kiểu ping xem có thể ping đễn các địa chỉ p nào trong 1 mạng.
`nmap -sn ip/number_bit_network`
# NSE Scripts
## Overview
- The Nmap Scripting Engine (NSE) là 1 tính năng mở rộng cực kì mạnh mẽ của nmap,thêm vào rất nhiều chức năng thú vị.NSE script dược viết bằng ngôn ngữ lua ,nó dùng cho rất nhiều mục đích như tìm lỗ hổng và tự động khai thác.NSE rất hữu ích cho việc trinh sát.
- có rất nhiều chức năng được phân loại như:
  - safe:- Won't affect the target
  - intrusive:- Not safe: likely to affect the target
  - vuln:- Scan for vulnerabilities
  - exploit:- Attempt to exploit a vulnerability
  - auth:- Attempt to bypass authentication for running services (e.g. Log into an FTP server anonymously)
  - brute:- Attempt to bruteforce credentials for running services
  - discovery:- Attempt to query running services for further information about the network (e.g. query an SNMP server).
- còn khá nhiều các bạn có thể đọc thểm ở:
`https://nmap.org/book/nse-usage.html`
## Working with the NSE
- các bạn có thể scan vuln bằng câu lệnh sau 
`nmap --script=vuln option target`
- Hay để cụ thể hơn có thể dùng như sau:
`--script=<script-name>`

e.g :
`--script=http-fileupload-exploiter`
`--script=smb-enum-users,smb-enum-shares`
- Đôi khi có các script yêu cầu đối số truyền vào chúng ta sẽ có thêm 1 option nữa là `--script-args` cho việc này.
- thêm đối số như sau`<script-name>.<argument>`

e.g:
`nmap -p 80 --script http-put --script-args http-put.url='/dav/shell.php',http-put.file='./shell.php'`

- nếu không biết dùng và có tham số nào ta có thể dùng `nmap --script-help <script-name>`
.Nó sẽ cho các bạn link để đọc ko thì các bạn tự search.
## Searching for Scripts
- Các bạn có thể tìm trên trang chủ chính của nmap.
- Tìm script của nmap được lưu mặc định trên linux là `/usr/share/nmap/scripts`.Ta có thể dùng `ls` để liệt kê những scriptt phù hợp.
e.g:
`ls -l /usr/share/nmap/scripts/*http*`
- File /usr/share/nmap/scripts/script.db là một tập tin cơ sở dữ liệu quan trọng của Nmap chứa thông tin về các script NSE.Ta có thể tìm kiếm các script có săn trong file này cho 1111 lỗ hổng bất kì.
- ta sẽ truy xuất thông tin bằng `grep` 
`grep "ftp" /usr/share/nmap/scripts/script.db`
- Install new script:
`sudo wget -O /usr/share/nmap/scripts/<script-name>.nse https://svn.nmap.org/nmap/scripts/<script-name>.nse`
`nmap --script-updatedb`(**câu lệnh này dùng để update dữ liệu cho file script.db**)
#  Firewall Evasion
- Chúng ta đã nói trên các phương thức quetst tcp trên đều có thể bypass firewall cấu hình tthoong thường vậy còn cấu hình cao hơn thì sao.
- Nmap hỗ trợ rất nhiều tính năng bypass firewall .Như cấu hình firewall của window sẽ chặn tất cả gói tin ICMP  khi ping tới nó làm cho nmap hiểu nhầm đây là 1 deadhost và ko scan.Chúng ta có thể bypass điều này bằng option `-Pn` nmap sẽ bỏ qua việc ping và cho rằng host này luôn sống và scan nó.Tuy nhiên việc này nếu host chết thật thì ..... khá tốn thời gian đó.
- Dươi đây là 1 vài option hữu ích nữa:
  - f:- Used to fragment the packets (i.e. split them into smaller pieces) making it less likely that the packets will be detected by a firewall or IDS.
  - An alternative to -f, but providing more control over the size of the packets:` --mtu <number>`, accepts a maximum transmission unit size to use for the packets sent. This must be a multiple of 8.
  - `--scan-delay <time>ms`:- used to add a delay between packets sent. This is very useful if the network is unstable, but also for evading any time-based firewall/IDS triggers which may be in place.
  - `--badsum`:- this is used to generate in invalid checksum for packets. Any real TCP/IP stack would drop this packet, however, firewalls may potentially respond automatically, without bothering to check the checksum of the packet. As such, this switch can be used to determine the presence of a firewall/IDS.
    
- Còn khá nhiều nên mình sẽ để link ở đây:
https://nmap.org/book/man-bypass-firewalls-ids.html
