Pages

Lập trình shell




Làm thế nào để viết shell script:
1. Sử dụng bất kỳ trình soạn thảo nào như: vi, mcedit...
2. Sau khi viết shell script thì thiết lập quyền thực thi cho nó theo cấu trúc:
chmod permission your-script-name
Ví dụ:
$ chmod +x your-script-name
$ chmod 755 your-script-name
3. Thực thi script bằng cấu trúc:
bash your-script-name
sh your-script-name
./your-script-name
Ví dụ:
$ bash bar
$ sh bar
$ ./bar
Ghi chú: Cấu trúc ./ có nghĩa là thư mục hiện hành, nhưng . (dot) nghĩa là thực thi lệnh trong shell với shell hiện hành. Cấu trúc dot như sau:
. shell_script
Ví dụ:
$ . foo
Shell script sau sẽ in "Knowledge is Power" trên màn hình:
$ vi first
#
# My first shell script
#
clear
echo "Knowledge is Power"
Sau khi lưu file, thay đổi quyền (chmod 755 first) => chạy script này như sau:
$ ./first
Ghi chú: Shell script file có bằng phần mở rộng là .sh để dễ dàng xác định đó là shell script.

Các biến trong Shell:
Để xử lý dữ liệu/thông tin, dữ liệu phải được giữ trong bộ nhớ RAM của máy tính. RAM được chia thành nhiều vị trí nhỏ, và mỗi vị trí có một số duy nhất được gọi là địa chỉ bộ nhớ - được sử dụng để lưu dữ liệu. Bạn có thể gán tên cho vùng nhớ này => gọi là biến bộ nhớ hoặc biến.

Trong Linux (Shell), có hai loại biến:
1. Biến hệ thống - được tạo và duy trì bởi chính Linux. Loại biến này được định nghĩa bằng các mẫu tự hoa.
2. Biến do người dùng định nghĩa (UDV - User Defined variables) - được tạo và duy trì bởi người dùng. Loại biến này được định nghĩa bằng các mẫu tự thường.

Bạn có thể xem danh sách các biến hệ thống bằng lệnh set hoặc env. Một vài biến hệ thống quan trọng:
BASH=/bin/bash - tên shell.
BASH_VERSION=1.14.7(1) - phiên bản của shell.
COLUMNS=80 - số cột cho màn hình.
HOME=/home/vivek - thư mục nhà.
LINES=25 - số dòng của màn hình.
LOGNAME=students - tên đăng nhập của người dùng.
OSTYPE=Linux - Loại hệ điều hành.
PATH=/usr/bin:/sbin:/bin:/usr/sbin - Thiết lập đường dẫn.
PS1=[\u@\h \W]\$ - thiết lập prompt.
PWD=/home/students/Common - thư mục hiện hành.
SHELL=/bin/bash - tên shell.
USERNAME=vivek - user nào hiện đang đăng nhập vào PC.
Bạn có thể in ra bất kỳ biến môi trường nào như sau:
$ echo $USERNAME
$ echo $HOME

Làm thế nào để định nghĩa UDV:
Sử dụng cấu trúc sau:
variable name=value - value được gán cho 'variable name' và value phải nằm bên phải dấu =
Ví dụ:
$ no=10
$ vech=Bus

Nguyên tắc đặt tên biến (cả UDV và biến hệ thống):
1. Biến phải bắt đầu bằng ký tự alphanumeric hoặc underscore (_), theo sau bởi một hoặc nhiều ký tự alphanumeric.
Ví dụ:
Các biến hợp lệ: HOME, SYSTEM_VERSION, vech, no…
2. Không có khoảng trắng giữa hai bên dấu bằng khi gán giá trị biến.
Ví dụ:
Các khai báo sau sẽ có lỗi:
$ no =10
$ no= 10
$ no = 10
3. Phân biệt chữ hoa và thường.
Ví dụ:
Các biến sau sẽ khác nhau:
$ no=10
$ No=11
$ NO=20
$ nO=2
4. Bạn có thể định nghĩa biến NULL như sau:
$ vech=
$ vech=""
Khi in ra các biến NULL này, thì không có gì trên màn hình bởi vì chúng không có giá trị.
5. Không sử dụng ?, *...để đặt tên cho biến.
In và truy cập giá trị của UDV:
$variablename
hoặc echo $variablename

Tính toán trong Shell:
Sử dụng các phép toán số sau theo cấu trúc sau:
expr op1 math-operator op2
Ví dụ:
$ expr 1 + 3
$ expr 2 - 1
$ expr 10 / 2
$ expr 20 % 3
$ expr 10 \* 3
$ echo `expr 6 + 3`

Trích dẫn (quote):
Có 3 loại quote:
1. " (double quote): Bất kỳ thứ gì trong đây đều bị hủy ý nghĩa của ký tự đó (trừ \ và $)
2. ' (single quote): Duy trì không thay đổi.
3. ` (back quote): thực thi lệnh.
Ví dụ:
$ echo "Today is date" => in ra Today is date
$ echo "Today is `date`". => in ra Today is Tue Jan....

Trạng thái kết thúc (exit status):
Mặc định trong Linux nếu lệnh/shell script được thực thi, nó sẽ trả về hai loại giá trị - được sử dụng để xem lệnh/shell script được thực thi thành công hay không.
1. Nếu trả về giá trị là 0 - thành công.
2. Không phải 0, lệnh không thành công hoặc có một vài lỗi khi thực thi lệnh/shell script.
=> giá trị này gọi exit status.
Ví dụ:
unknow1file không tồn tại trong đĩa cứng thì lệnh “rm unknow1file” sẽ in ra lỗi như sau:
rm: cannot remove `unkowm1file': No such file or directory.
Và sau đó nếu bạn gõ lệnh $ echo $? thì nó sẽ in ra giá trị nonzero để chỉ có lỗi.

Câu lệnh read:
Sử dụng để nhận dữ liệu từ bàn phím và lưu vào biến.
Cấu trúc:
read variable1, variable2,...variableN
Ví dụ:
Script sau sẽ hỏi tên người dùng và chờ họ nhập vào từ bàn phím. Sau khi người dùng nhập tên và nhấn Enter thì tên sẽ được lưu trong biến fname.
$ vi sayH
#
#Script to read your name from key-board
#
echo "Your first name please:"
read fname
echo "Hello $fname, Lets be friend!"
Chạy nó như sau:
$ chmod 755 sayH
$ ./sayH
Your first name please: vivek
Hello vivek, Lets be friend!

Wild cards:
1. *: phù hợp với bất kỳ chuỗi hoặc nhóm ký tự nào.
Ví dụ:
$ ls * - hiển thị tất cả các file.
$ ls a* - hiển thị tất cả các file mà tên của nó bắt đầu bằng mẫu tự 'a'.
$ ls *.c - hiển thị tất cả các file có bằng mở rộng là .c

2. ?: phù hợp bất kỳ 1 ký tự nào.
Ví dụ:
$ ls ? - hiển thị tất cả các file mà tên của nó có chiều dài 1 ký tự.
$ ls fo? - hiển thị tất cả các file mà tên của nó có 3 ký tự và tên file bắt đầu bằng fo.

3. [...]: phù hợp bất kỳ 1 trong các ký tự trong dấu ngoặc.
Ví dụ:
$ ls [abc]* - thể hiện tất cả các file bắt đầu với mẫu tự a, b, c.

Ghi chú:
[..-..]: Một cặp các ký tự được phân chia bởi dấu trừ để ghi nhận một dãy.
Ví dụ:
$ ls /bin/[a-c]* - hiển thị tất cả các file bắt đầu với mẫu tự a, b, c.
Nếu ký tự đầu tiên theo sau [ là ! hoặc ^, thì bất kỳ ký tự nào không phù hợp sẽ được hiển thị.
$ ls /bin/[!a-o]
$ ls /bin/[^a-o]
=> sẽ hiển thị tất cả các file trong thư mục bin mà ký tự đầu tiên không phải là a, b, c...o.

Nhiều lệnh trên một dòng lệnh:
command1;command2
Ví dụ:
$ date;who - sẽ in ra ngày hiện tại theo sau là tên người dùng đăng nhập hiện tại.

Dòng lệnh:
Khi thực thi lệnh sau (giả sử file "grate_stories_of" không tồn tại trên hệ thống).
$ ls grate_stories_of - sẽ in ra thông báo “grate_stories_of: No such file or directory”
ls là tên của lệnh và shell sẽ thực thi lệnh này.
Từ đầu tiên của dòng lệnh là ls - tên của lệnh cần thực thi.
Phần còn lại là các tham số của lệnh này.
Ví dụ:
$ tail +10 myf - tên lệnh là tail và tham số là +10 và myf.
Ghi chú: $# nắm giữ các tham số của dòng lệnh. $* hoặc $@ tham chiếu đến các tham số được chuyển đến script.

Chuyển hướng:
Hầu hết các lệnh đều kết xuất ra màn hình hoặc nhận tham số từ bàn phím. Nhưng trong Linux thì có thể gửi kết xuất đến hoặc đọc dữ liệu từ tập tin.
Ví dụ:
$ ls cho kết xuất ra màn hình, để gửi kết xuất ra tập tin thì sử dụng lệnh sau:
$ ls > filename
1) Ký hiệu >:
command > filename - kết xuất kết quả của lệnh ra file. Nếu như file tồn tại, nó sẽ ghi đè lên, ngược lại file mới sẽ được tạo.
2) Ký hiệu >>:
command >> filename - kết xuất kết quả đến phần cuối của file. Nếu như file tồn tại, nó sẽ được mở và thông tin mới được ghi vào cuối file, không sợ mất dữ liệu/thông tin trước. Và nếu file không tồn tại, thì file mới được tạo.
Ví dụ:
$date >> myfiles
3) Ký hiệu <:
command < filename - nhận dữ liệu từ file thay vì bàn phím.
Ví dụ:
$ cat < myfiles
$ sort < sname > sorted_names - lệnh sort lấy dữ liệu từ file tên là sname và kết xuất kết quả ra file tên là sorted_names.

Pipes:
Định nghĩa: Một pipe là một nơi lưu tạm kết xuất của một lệnh và sau đó chuyển vào input của lệnh thứ hai. Pipe được sử dụng để chạy nhiều hơn 2 lệnh trên cùng một dòng lệnh.

Filter:
Nếu một lệnh chấp nhận input từ stdin và xuất nó ra stdout thì được gọi là filter. Một filter thực thi một vài xử lý trên input và cho ra ouput. Ví dụ: Giả sử bạn có một file được gọi là 'hotel.txt' với 100 dòng dữ liệu. Và bạn chỉ muốn in ra dòng từ 20 đến 30 và lưu kết qủa này vào file gọi là 'hlist' thì sử dụng lệnh sau:
$ tail +20 < hotel.txt | head -n30 >hlist1
=> Ở đây lệnh head là một filter nhận input từ lệnh tail (lệnh tail bắt đầu chọn từ dòng 20 trong file 'hotel.txt'. Và chuyển các dòng này làm input cho head, cuối cùng chuyển ouput đến file 'hlist'.)

Process:
Tiến trình là một chương trình (lệnh) để thực thi một công việc xác định. Trong Linux khi bạn khởi tạo một tiến trình, nó sẽ cho tiến trình đó một con số gọi là PIP hoặc process-id, PID khởi đầu từ 0 đến 65535.
Ví dụ:
$ls -lR - lệnh ls sẽ liệt kê các file trong thư mục hoặc tất cả thư mục con trong thư mục hiện hành - nó là một tiến trình.

Tại sao có tiến trình:
Vì Linux là hệ điều hành đa người dùng, đa nhiệm. Nghĩa là bạn có thể chạy nhiều hơn 2 tiến trình đồng thời nếu bạn muốn.
Ví dụ:
Để tìm nhiều file mà bạn có trên hệ thống, bạn có thể thực hiện lệnh sau:
$ ls / -R | wc -l
=> lệnh này sẽ mất nhiều thời gian để tìm kiếm tất cả các file trên hệ thống, vì thế bạn có thể chạy lệnh này ở background:
$ ls / -R | wc -l &
Do đó một thể hiện của lệnh đang chạy được gọi là process và một con số được in ra bởi shell gọi là process-id (PID), PID này có thể sử dụng để xác định tiến trình đang chạy.
Các lệnh liên quan đến process:
• ps - xem tiến trình đang chạy.
• kill - dừng bất kỳ tiến trình nào bởi PID của nó.
• killall- dừng tiến trình bởi tên của nó.
• ps -ag - lấy thông tin về tất cả các tiến trình đang chạy.
• kill 0 - dừng tất cả các tiến trình trừ shell của bạn.
• command & - chạy lệnh ở background.
• ps aux - hiển thị chủ sở hữu của các tiến trình cùng với các tiến trình đó.
• ps ax | grep process-U-want-to-see - xem từng tiến trình đang chạy hoặc không chạy.
• top - xem tiến trình đang chạy và các thông tin khác như bộ nhớ, CPU usage cùng với thời gian thực.
• pstree - hiển thị cây các tiến trình.

(Nguồn từ http://www.freeos.com/guides/lsst/)
thudinh Network and Security

Firewall Filter (ACL)


Creating a Firewall filter

 - Enter into firewall filter mode by creating a filter with name filter1
 - Configure the match-condition that permit traffic from address 192.168.10.5, and block all other traffic by creating a term by name term1.
- Create term by name term2 that blocks only the single IP address 196.145.25.5
- Create a term by name term3 that allows traffic from any ip address.

user@R1>configure
[edit]
user@R1#edit firewall family inet filter filter1
[edit firewall family inet filter filter1]
user@R1#set term term1 from source-address 192.168.10.5/24
[edit firewall family inet filter filter1]
user@R1#set term term1 then accept
[edit firewall family inet filter filter1]
user@R1#set term term2 from source-address 196.145.25.5/24
[edit firewall family inet filter filter1]
user@R1#set term term2 then reject
[edit firewall family inet filter filter1]
user@R1#set term term3 then accept
[edit firewall family inet filter filter1]
user@R1#exit
[edit]

Applying firewall filter to an interface


user@R1#edit interfaces so-0/0/0 unit 0 family inet
[edit interfaces so-0/0/0 unit 0 family inet]
user@R1#set filter input filter1
[edit interfaces so-0/0/0 unit 0 family inet]
user@R1#exit
[edit]
user@R1#show

thudinh Network and Security

Configuring static routes


Configure a static route with destination sub-network number as 172.16.1.0, subnet mask as 24 and IP address of the next-hop router in the destination path to 172.16.2.1.

user@R1>configure
[edit]
user@R1#edit routing-options
[edit routing-options]
user@R1#edit static route 172.16.1.0/24
[edit routing-options static route 172.16.1.0/24]
user@R1#set next-hop 172.16.2.1
[edit routing-options static route 172.16.1.0/24]
user@R1#exit
[edit routing-options]
user@R1#exit
[edit]
user@R1#
thudinh Network and Security

Basic command on router juniper (Lệnh cơ bản Juniper)


          1.      Entering configuration mode on a Router, and exit

           user@R1>configure
           [edit]
           user@R1#exit
           user@R1>

          2.      Setting host name
user@R1>configure
[edit]
user@R1#edit system
[edit system]
user@R1#set host-name juniper1
[edit system]
user@R1#exit
[edit]
user@R1#exit

           3.      Configuring the Root Password (encrypted password)
            user@R1>configure
           [edit]
           user@R1#edit system root-authentication
           [edit system root-authentication ]
           user@R1#set encrypted-password 24adr3e
           [edit system root-authentication ]
           user@R1#exit
           [edit]
           user@R1#

4.      Configuring DNS Name Server

user@R1>configure
[edit]
user@R1#edit system
[edit system]
user@R1#set name-server 192.168.1.11
[edit system]
user@R1#exit
[edit]
user@R1#

5.      Configuring Backup Router

user@R1>configure
[edit]
user@R1#edit system
[edit system]
user@R1#set backup-router 172.16.1.2
[edit system]
user@R1#exit
[edit]
user@R1#

6.      Router Interface Address Configuration

user@R1>configure
[edit]
user@R1#edit interfaces so-1/1/0
[edit interfaces so-1/1/0]
user@R1#edit unit 0 family inet
[edit interfaces so-1/1/0 unit 0 family inet]
user@R1#set address192.168.2.1 /24
[edit interfaces so-1/1/0 unit 0 family inet]
user@R1#exit
[edit interfaces so-1/1/0]
user@R1#exit
[edit]
user@R1#

7.      Shutdown an interface

user@R1>configure
[edit]
user@R1#edit interfaces so-0/0/0
[edit interfaces so-0/0/0]
user@R1#set disable
[edit interfaces so-0/0/0]
user@R1#exit
[edit]
user@R1#

8.      Set interface description

user@R1>configure
[edit]
user@R1#edit interfaces so-0/0/0
[edit interfaces so-0/0/0]
user@R1#set description "interface-so-0/0/0"
[edit interfaces so-0/0/0]
user@R1#exit
[edit]
user@R1#

9.      Configuring the Encapsulation on a Physical Interface

user@R1>configure
[edit]
user@R1#edit interfaces so-0/0/0
[edit interfaces so-0/0/0]
user@R1#set encapsulation ppp
[edit interfaces so-0/0/0]
user@R1#exit
[edit]
user@R1#

10.  Setting bandwidth on an interface

Set bandwidth of so-0/0/0 unit 0 as 1000k

 

 

 



thudinh Network and Security

Setting up IDP on the Juniper SRX


Trước khi thực hiện: SRX cần ra được Internet, cấu hình DNS


Intrusion Detection Prevention (IDP); or sometimes known as IPS, is a feature of the Juniper SRX range. IDP is available on the branch SRX’s all the way through to the datacentre versions and is a fantastic item under the IT Services feature set. IDP is particularly useful as another layer of security to inspect data transmissions between client and server and perform an actions upon it, a good example is IDP’s ability to detect known Shell code buffer overflow exploits that are out there in the wild and stop them in their tracks AND also block that IP for set period of time, like 1 hour, 1 day or a week! These buffer overflow style attacks are typically launched at a server once traditional enumeration steps have been performed by the remote attacker. To thwart the enumeration attacks juniper makes use of SCREENS, but that is a discussion for another time.
so how do we configure an SRX for IDP?
Step by Step IDP configuration
The first thing you do is tell the Juniper were to get the latest packages for the IDP updates from

root@iLab.SRX#set security idp security-package url https://services.netscreen.com/cgi-bin/index.cgi
root@iLab.SRX#commit
Next we download the packages to the device, first checking that the we can see the update server, the actually downloading the packages
root@iLab.SRX> request security idp security-package download check-server
Download is already in progress..

root@iLab.SRX> request security idp security-package download
Download is already in progress..
you can monitor the status of the IDP package download with the following command, just keep checking the status until you get the completed notification
root@iLab.SRX> request security idp security-package download status    
In progress: Downloading ..

Check again;
root@iLab.SRX> request security idp security-package download status   
Done;Successfully downloaded from(https://services.netscreen.com/cgi-bin/index.cgi).
Version info:2946(Thu Jul  6 01:10:33 2017 UTC, Detector=12.6.130170603)

Once the download of the IDP definitions is complete we install those definitions

root@iLab.SRX> request security idp security-package install
Will be processed in async mode. Check the status using the status checking CLI

check status: 
root@iLab.SRX> request security idp security-package install status
In progress:performing DB update for an xml (SignatureUpdate.xml)

check again;
root@iLab.SRX> request security idp security-package install status   
Done;Attack DB update : successful - [UpdateNumber=2946,ExportDate=Thu Jul  6 01:10:33 2017 UTC,Detector=12.6.130170603]
     Updating control-plane with new detector : successful
     Updating data-plane with new attack or detector : not performed
      due to no active policy configured.

Get policy templates;
root@iLab.SRX> request security idp security-package download policy-templates
Will be processed in async mode. Check the status using the status checking CLI

root@iLab.SRX> request security idp security-package download status 
Done;Successfully downloaded from(https://services.netscreen.com/cgi-bin/index.cgi).
Version info:2946

Install policy templates

root@iLab.SRX>request security idp security-package install policy-templates                    
Will be processed in async mode. Check the status using the status checking CLI

root@iLab.SRX> request security idp security-package install status 
Done;policy-templates has been successfully updated into internal repository
     (=>/var/db/scripts/commit/templates.xsl)!

Here is the results
root@iLab.SRX# set security idp idp-policy ?
Possible completions:
  <policy-name>        IDP policy name
  Client-And-Server-Protection  IDP policy name
  Client-And-Server-Protection-1G  IDP policy name
  Client-Protection    IDP policy name
  Client-Protection-1G  IDP policy name
  DMZ_Services         IDP policy name
  DNS_Service          IDP policy name
  File_Server          IDP policy name
  Getting_Started      IDP policy name
  IDP_Default          IDP policy name
  Recommended          IDP policy name
  Server-Protection    IDP policy name
  Server-Protection-1G  IDP policy name
  Web_Server           IDP policy name
[edit]

We have 2 ways to use IDP:
1. active IDP default and use the available templates
2. we create the actual IDP rule and then apply these to policy

To monitor the effectiveness of the IDP policies, you can perform the following commands. The ‘attack table’ command shows how many and what type of exploits have been launched at your servers and is quite informative
show security idp active-policy
> show security idp attack table
> show security idp status
> show security idp application-statistics

thudinh Network and Security

iRule select Pool on F5 big-ip


when HTTP_REQUEST {
    switch -glob [string tolower [HTTP::host]] {
     
        "abc*.com.vn" { pool Pool_01 }
     
        "xyz*.com.vn" { pool Pool_02}

.......


    }      
}



Select pool when check destination port of client

when CLIENT_ACCEPTED {
    if {([TCP::local_port] >= 2223)
    && ([TCP::local_port] <= 2230) } {
      pool Web01_range
    } else reject
}
thudinh Network and Security

iRule redirect from HTTP to HTTPs on F5 big-ip



when HTTP_REQUEST {
       HTTP::redirect "https://[HTTP::host][HTTP::uri]"
    }

-------------------------------------------------------------------------------------------------------
Another example of redirection from http to https when it is conditional

when HTTP_REQUEST {
   set host [string tolower [HTTP::host]]
   if { ($host ends_with ".abc.com") && !($host starts_with "admin") } {
        HTTP::redirect "https://[HTTP::host][HTTP::uri]"  }
   

}

thudinh Network and Security

Hướng dẫn đính kèm file trong Word


Mọi công cụ trong Microsoft Office đều cho phép người dùng có thể chèn file, đính kèm file vào Excel, Word, Power Point để có thể thuận tiện hơn trong việc mở file mà không cần phải thực hiện thêm thao tác tìm kiếm và mở file.
Chẳng hạn khi chúng ta thực hiện trình chiếu trên Powerpoint, bạn có thể chèn thêm file word, video, hình ảnh,... để làm sinh động thêm bài thuyết trình của mình. Hay với Word, người dùng hoàn toàn có thể chèn bất cứ mọi loại file như hình ảnh, file Powerpoint, file Excel vào trong văn bản. Thao tác này sẽ giúp người xem có thể truy cập vào file đính kèm nhanh chóng, mà không cần phải tải thêm về máy để xem, tiết kiệm nhiều thời gian làm việc. Nếu bạn chưa biết cách thực hiện có thể theo dõi bài hướng dẫn của Quản trị mạng.
Bước 1:
Bạn mở file Word muốn đính kèm file ngoài vào nội dung văn bản. Tiếp theo, chúng ta đặt con trỏ tại nơi muốn chèn file và chọn Insert.
Đính kèm file
Bước 2:
 Đính kèm file
Bước 3:
Xuất hiện giao diện cửa sổ Object. Tại mục Create from file chúng ta sẽ tích chọn Display as icon để hiển thị file đính kèm dưới dạng icon. Bạn tích chọn Browse để chọn file muốn đình kèm trong Word từ trong máy tính.
Đính kèm file
Ngay sau đó xuất hiện thư mục trong máy tính. Chúng ta tìm đến nơi chứa file chèn trong Word và nhấn Insert để chọn file.
Đính kèm file trong WordCuối cùng nhấn OK để lưu lại.
Đính kèm file WordKết quả, nội dung văn bản đã chèn thêm file Word đính kèm. Chúng ta thực hiện các thao tác như trên để có thể chèn thêm các loại file như Excel, Powerpoint.
Đính kèm file Chỉ với những thao tác đơn giản và cơ bản mà bạn đã có thể đính kèm thêm mọi loại dữ liệu vào trong nội dung Word, từ văn bản, bảng thống kê, hoặc bài thuyết trình,.... Điều này sẽ giúp người nhận văn bản có thể nhận và xem ngay các file đính kèm, mà không cần phải tốn thêm thời gian tải thêm file đính kèm về máy tính.



Nguồn: quantrimang.com
thudinh Network and Security

Hướng dẫn sử dụng Nmap để scan port trên Kali linux




Mạng là một chủ đề rộng lớn đối với nhiều người mới tìm hiểu. Có các lớp và giao thức khác nhau, và nhiều công cụ tiện ích mà phải nắm rõ để có thể sử dụng hiệu quả

Bài viết này sẽ hướng dẫn cho bạn hiểu rõ khái niệm về port (cổng) và sẽ chứng minh làm thế nào nmap có thể được sử dụng để lấy được thông tin từ các port

Lưu ý: Bài viết này sẽ hướng dẫn bạn sử dụng Nmap để quét Ipv4, tuy nhiên vẫn quét được Ipv6 nếu có thêm tùy chọn cho Nmap

Port là gì ? 


Có rất nhiều lớp trong mô hình mạng nói chung, lớp vận chuyển đóng vai trò cung cấp các thông tin liên lạc giữa các ứng dụng hệ thống với nhau, và lớp này thì được kết nối với Port.

Một số điều lưu ý mà bạn cần biết về port

- Port là một số hiệu ID cho 1 ứng dụng nào đó.
- Mỗi ứng dụng chỉ có thể chạy trên một hoặc nhiều port và mang tính độc quyền, không có ứng dụng khác được "chạy ké".
- Chính vì tính độc quyền nên các ứng dụng có thể chỉnh sửa để cho phép chạy với một port khác. Ví dụ IIS/Apache làm web server có thể dùng 80 là default nhưng có thể đổi thành 81 82 83 v.v... tùy ý.
- Port cũng có phân chia làm Internal và External .
- Số hiệu từ 1->65535.

Một số thuật ngữ mà bạn cần nắm rõ
  • Port: Là một địa chỉ mạng thực hiện bên trong hệ điều hành giúp phân biệt các traffic khác nhau của từng ứng dụng riêng lẻ
  • Internet Sockets: Là một tập tin xác định địa chỉ IP gắn kết với port, nhằm để xử lý dữ liệu như các giao thức.
  • Binding: Là quá trình mà một ứng dụng hoặc dịch vụ (service) sử dụng Internet Sockets để xử lý nhập và xuất các dữ liệu
  • Listen: Ám chỉ việc "lắng nghe" đợi chờ khi bạn thực hiện Binding đến một port / giao thức / IP nào đó. Hiểu nôm na là chờ đời dữ liệu gửi về từ phía bên máy chủ
  • Port Scanning: Port Scanning là quá trình cố gắng để kết nối với một port để có thể thu thập thông tin về các port đang mở và những dịch vụ, ứng dụng, hệ điều hành phía sau nó


Cổng thì được xác định từ số 1 đến số thứ 65535. Trong đó
  • Những cổng từ 1->1024 được kết hợp với các dịch vụ của hệ điều hành Linux và Unix, những cổng này bạn cần phải có quyền Root để có thể khởi chạy dịch vụ
  • Những cổng từ 1024 -> 49151 là những cổng bạn có thể 'đăng kí' đến IANA, việc đăng kí không mấy khó khăn, bạn có thể thoải mái sử dụng những cổng này khi đăng kí hoàn tất
  • Những cổng từ 49152 -> 65535 là những cổng không thể 'đăng kí', và những cổng này chỉ sử dụng cho mục đích cá nhân mà thôi, không thể kết nối thành mạng lưới được


Một số Port (cổng) thông dụng trong internet:
  • Cổng 80: Khi một người sử dụng địa chỉ IP hay HostName của các bạn trong bộ duyệt, bộ duyệt sẽ quan sát địa chỉ IP trên cổng 80 theo mặc định cho những trang Web.
  • Cổng 81: Khi một người sử dụng nhập địa chỉ IP hay HostName của các bạn trong bộ duyệt, bộ duyệt sẽ quan sát địa chỉ IP trên cổng 80. Nếu Cổng thì bị tắc nghẽn, Cổng 81 được sử dụng như một Cổng xen kẽ cho một website hosting nào đó.
  • Cổng 20: Dùng để vận chuyển dữ liệu FPT
  • Cổng 21: Khi người nào đó thử nối tới dịch vụ FTP của các bạn, khách hàng FTP sẽ cố gắng kết nối trên Cổng 21 theo mặc định. Thì cổng 21 mở cho những khách FTP đăng nhập và nối tới server của các bạn
  • Cổng 22: Nếu bạn chạy một SSH Secure Shell, cổng này được yêu cầu cho Khách hàng SSH để nối tới người phục vụ của các bạn.
  • Cổng 23 :Nếu bạn Telnet, cổng này được yêu cầu cho Khách hàng Telnet đến server. Telnet có thể được sử dụng cho những cổng khác để kiểm tra những công tác dịch vụ, nhưng để sử dụng telnet cho admin và đăng nhập từ xa thì cổng 23 phải mở.
  • Cổng 25: Khi người nào đó gửi một thư từ thông báo tới server SMTP của bạn, thư từ sẽ đi tới server của bạn trên Cổng 25. Đây là tiêu chuẩn SMTP (thủ tục vận chuyển Thư từ)
  • Cổng 2525: Khi người nào đó gửi một thư từ thông báo tới server SMTP của bạn, thư từ sẽ để đi vào tới server của các bạn trên Cổng 25. Cổng 2525 xen kẽ được dùng bởi TZO cho những công tác lưu trữ và truyền lại. Đây là một cổng không tiêu chuẩn, nhưng sẻ hữu ích nếu SMTP (thủ tục vận chuyển Thư từ) bị tắc nghẽn
  • Cổng 43: Dùng để Whois tên miền
  • Cổng 53: Dùng để DNS
  • Cổng 67: Cổng của DHCP server
  • Cổng 68: Cổng của DHCP client
  • Cổng 110: Khi bạn chạy một máy tính, những người sử dụng sẽ vào theo đường POP3 (Nghi thức cơ quan bưu điện) hay IMAP4 (giao thức truy nhập Thông báo Internet) khôi phục thư từ của họ. POP3 là nghi thức tốt nhất để truy nhập những hòm thư
  • Cổng 113: Dùng cho các mạng IRC
  • Cổng 119: Khi bạn chạy một server Tin tức, điển hình những khách hàng Tin tức muốn nối tới người phục vụ. Tin tức của các bạn sẽ nối trên cổng 119. Cái này chuyển những nhu cầu để mở để chạy server tin tức.
  • Cổng 143 : IMAP4 hay giao thức truy nhập Thông báo Internet đang trở nên phổ biến hơn và được sử dụng để khôi phục Thư Internet từ một server từ xa. Từ đó tất cả các thông báo đều được cất giữ trên server, Nó dùng để sử dụng trực tuyến, ngoại tuyến và offline
  • Cổng 161: SNMP
  • Cổng 194: IRC
  • Cổng 389 : LDAP hay giao thức truy nhập Thư mục Lightweight đang trở nên phổ biến cho sự Truy nhập Thư mục
  • Cổng 587: Cũng là cổng SMTP
  • Cổng 631: Cổng CUPS printing daemon
  • Cổng 666: Cổng riêng và duy nhất của game DOOM
  • Cổng 443 : Cổng được dùng để kết nối các dịch vụ an toàn HTTPS
  • Cổng 1503 & 1720 :MS NetMeeting và VOIP cho phép bạn kết nối tới host Internet nhằm phục vụ các cuộc họp trực tuyến. NetMeeting là một sản phẩm tự do mà bạn có thể tìm thấy trên Website Microsoft Tại địa chỉ http://www.microsoft.com/
  • Cổng 3389: Cổng 3389 được sử dụng cho Windows. Nếu bạn muốn từ xa kết nối tới máy tính của bạn để điều khiển từ xa, thì yêu cầu cổng 3389 phải mở.
  • Cổng 5590: Khi bạn chạy một Server VNC từ xa để kiểm soát PC của các bạn, nó sẽ sử dụng cổng 5900.
  • Cổng 5631: Cổng này cũng được dùng để remote các máy tính từ xa


Ngoài ra còn có 1 số port như :
Warcraft 3 là 6112
Age of Empire 2 : 2300-2400, 47624
Võ lâm truyền kỳ : 5622 , 6xxx
AOL Messenger : 5190
ICQ 2000 : 5190
MSN Messenger : 1863
Port 37: Time

Bạn có thể xem các cổng của các ứng dụng bằng cách xem tài liệu hướng dẫn của ứng dụng đó. Ngoài ra, để xem chi tiết về các cổng, bạn gõ lệnh sau để xem

         less /etc/services

Các port thông dụng trong Linux 


. . .
tcpmux          1/tcp                           # TCP port service multiplexer
echo            7/tcp
echo            7/udp
discard         9/tcp           sink null
discard         9/udp           sink null
systat          11/tcp          users
daytime         13/tcp
daytime         13/udp
netstat         15/tcp
qotd            17/tcp          quote
msp             18/tcp                          # message send protocol
. . .

Để kiểm tra xem máy tính của bạn đang mở những port nào thì dùng lệnh sau 


          netstat -plunt

Đây là kết quả 

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      785/sshd       
tcp6       0      0 :::22                   :::*                    LISTEN      785/sshd

Nmap là gì ? 

  • Nmap (Network Mapper) là một công cụ quét, theo dõi và đánh giá bảo mật một hệ thống mạng được phát triển bởi Gordon Lyon (hay còn được biết đến với tên gọi Fyodor Vaskovich).
  • Nmap được công bố lần đầu tiên vào tháng 9 năm 1997.
  • Nmap là phần mềm mã nguồn mở miễn phí, ban đầu chỉ được phát triển trên nền tảng Linux sau đó được phát triển trên nhiều nền tảng khác nhau như Windows, Solari, Mac OS… và phát triển thêm phiên bản giao diện người dùng (zenmap).


Các chức năng của nmap:  
  • Phát hiện host trong mạng.
  • Liệt kê các port đang mở trên một host.
  • Xác định các dịch vụ chạy trên các port đang mở cùng với phần mềm và phiên bản đang dùng.
  • Xác đinh hệ điều hành của thiết bị.
  • Chạy các script đặc biệt.


Cài đặt Nmap 

Bạn sử dụng 2 lệnh sau
apt-get update
apt-get install nmap

Hướng dẫn Scan port với NMap 

Sử dụng nmap

+ Xác định mục tiêu

Việc đầu tiên khi sử dụng nmap là xác định mục tiêu cần quét, mục tiêu có thể là 1 domain, 1 IP, 1 dải địa chỉ IP, 1 danh sách (file) các IP và domain. Ví dụ:

Quét 1 IP
nmap 192.168.1.1
Quét 1 dải IP
nmap 192.168.1.1/24
Quét 1 domain
nmap google.com
Quét 1 danh sách các mục tiêu từ 1 file với tùy chọn -iL
nmap -iL list.txt

+ Phát hiện các host trong mạng (host discovery)

Tại sao cần host discovery, đối với 1 mục tiêu xác định thì có vẻ không cần thiết nhưng đối với mục tiêu là 1 dải mạng với hàng nghìn host, việc quét hàng nghìn port trên mỗi host sẽ tốn rất nhiều thời gian vì vậy việc xác định các host đang chạy sẽ rút ngắn thời gian trong quá trình quét. nmap sử dụng một số kĩ thuật sau để thực hiện host discovery:
  • TCP SYN Ping:–PS
  • TCP ACK Ping: –PA
  • UDP Ping: –PU
  • ARP Ping (sử dụng trong mạng LAN): -PR
  • ICMP type 8 (echo request): -PE
  • ICMP type 13 (timestamp request): -PP
  • ICMP type 17(Address mask request): -PA
Khi gửi các gói tin trên tới 1 port của mục tiêu nếu nmap nhận được phản hồi (có thể là SYN-ACK, RST, các gói tin ICMP) thì nmap sẽ coi host đó tồn tại trong mạng, không quan tâm đến trạng thái của port. Nếu không nhận được gói tin phản hồi thì nmap sẽ coi là host không tồn tại. Mặc đinh nmap sử dụng gói tin ICMP echo request, ICMP timespam request, TCP SYN to port 443, TCP ACK to port 80, tương đương với

–PE –PP –PS443 –PA80

Sử dụng tùy chọn –sn (No port scan) để thực hiện quá trình host discovery (nmap sẽ dừng lại sau khi xác định các host đang chạy và không thực hiện việc quét port). Tùy chon –Pn để bỏ qua host discovery nmap sẽ chuyển qua quá trình quét port.

*Bạn có thể thực hành Nmap tới server của Nmap tại địa chỉ scanme.nmap.org
*Việc scan port rất tốn thời gian, do đó bạn cần phải kiên nhẫn chờ đợi

Các lệnh phổ biến trong Nmap

1, Quét hệ điều hành của Server

          nmap -O remote_host

Nếu server báo down , thì bạn sử dụng lệnh sau

         nmap -PN remote_host

Sử dụng "-" hoặc "/24" để quét nhiều host / server cùng lúc

          nmap -PN xxx.xxx.xxx.xxx-yyy

2, Quét một mạng rộng hơn

          nmap -sP network_address_range

3, Quét mà không tra cứu DNS (Điều này sẽ giúp bạn quét nhanh hơn)

          nmap -n remote_host

4, Quét một port cụ thể thay vì quét chung các port thông dụng

          nmap -p port_number remote_host

5, Quét kết nối TCP, Nmap sẽ thực hiện việc quét bắt tay 3 bước

           nmap -sT remote_host

6, Quét kết nối UDP

          nmap -sU remote_host

7, Quét TCP và UDP từng port (Khá lâu để hoàn tất)

          nmap -n -PN -sT -sU -p- remote_host

8, Quét TCP SYN scan (-sS):

          nmap -sS remote_host

9, Quét vời các cờ -sN, -sF, -sX

          nmap -PN -p port_number -sN remote_host

10, Quét xác định phiên bản của dịch vụ đang chạy trên host

          nmap -PN -p port_number -sV remote_host

Chi tiết về các kĩ thuật quét 

TCP SYN scan (-sS): nmap gửi một gói tin TCP-SYN tới 1 port của mục tiêu. Nếu nhận được ACK_SYN thì port đó đang ở trạng thái open, nmap sẽ gửi gói tin RST để đóng kết nối thay vì gửi ACK để hoàn tất quá trình bắt tay 3 bước (vì thế kỹ thuật này còn được gọi là half open scan). Nếu nhận được RST thì port đó ở trạng thái close. Nếu sau 1 số lần gửi mà không nhận được trả lời hoặc nhận được ICMP type 3 (unreachable error) thì port đó ở trạng thái filtered (đã bị firewall chặn).


TCP connect scan (-sT): Kỹ thuật này cho kết quả tương tự như TCP SYN scan, nếu nhận được ACK-SYN nmap sẽ gửi gói tin ACK để hoàn tất quá trình bắt tay 3 bước. TCP connect scan được dùng khi user không có quyền truy cập raw packet để thực hiện SYN scan (thường thì với quyền root trên linux mới có thể sử dụng SYN scan). TCP connect scan sẽ sử dụng TCP stack của hệ điều hành để tạo ra 1 kết nối bình thường với mục tiêu, do thực hiện 1 kết nối đầy đủ nên kỹ thuật này dễ bị phát hiện bởi hệ thống log của mục tiêu do đó SYN scan thường được sử dụng nhiều hơn để tránh bị phát hiện.

UDP scan (-sU): nmap gửi gói tin UDP tới 1 port của mục tiêu nếu nhận được gói tin ICMP port unreachable error (type 3, code 3) thì port đó ở trạng thái close. Nếu nhận được ICMP unreachable errors (type 3, codes 1, 2, 9, 10, or 13) thì port đó ở trạng thái filtered. Nếu không nhận được gì thì port ở trạng thái open|filtered. Nếu nhận được gói tin UDP thì port đó ở trạng thái open


TCP NULL, FIN, and Xmas scans (-sN, -sF, -sX): đây là kỹ thuật sư dụng các gói tin TCP với không có cờ nào được bật cờ FIN được bật cờ FIN, PSH và URG được bật 3 kỹ thuật này được gộp chung vào 1 nhóm vì chúng cho kết quả giống nhau. Khi 3 loại gói tin này được gửi đi nếu nhận được RST thì port ở trạng thái close, nếu nhận được các loại gói tin ICMP (type 3, code 1, 2, 3, 9, 10, or 13) thì port ở trạng thái filtered, còn nếu không nhận được gói tin trả lời thì port ở trạng thái open|filtered


Ngoài ra nmap còn có 1 số tùy chọn với các kỹ thuật khác nâng cao (-sY,-sM, -sO, -sZ, -sI) có thể tham khảo thêm tại http://nmap.org/book/man-port-scanning-techniques.html

+ Lựa chọn port và thứ tự quét. Mặc định nmap sẽ quét 1000 port phổ biến nhất (xem tại file nmap-service) với thứ tụ ngẫu nhiên.

Tùy chọn –p : lựa chọn chính xác các port cần quét, nếu quét đồng thời nhiều giao thức thì thêm các chữ cái đứng trước số port

T: TCP, U: UDP, S: SCTP, or P: IP Protocol.

Ví dụ:



Trong trường hợp này nmap sẽ quét các port UDP 53 và 4000, quét các port TCP 444, từ 1 đến 100, từ 8000 đến 8010 bằng kỹ thuật SYN scan.

Tùy chon –F (Fast scan): nmap quét 100 port phổ biến nhất thay vì mặc định 1000 port.

Tùy chọn –top-ports : quét n port phổ biến nhất.

Tùy chọn –r: thứ tự quét các port từ thấp lên cao thay vì mặc định là ngẫu nhiên.

+ Xác đinh dịch vụ, phiên bản, hệ điều hành. Mặc định sau khi quét các port, nmap sẽ xác định dịch vụ đang chạy trên các port dựa vào file nmap-services (các port mặc định của từng service) tuy nhiên một số server cấu hình các dịch vụ không chạy trên các cổng mặc định. Để xác định rõ port nào chạy dịch vụ nào nmap sử dụng tùy chọn –sV. Với tùy chọn này nmap sẽ xác định được dịch vụ và phiên bản phần mềm chạy trên từng port dựa vào banner khi kết nối với port đó

Các port và dịch vụ tương ứng nmap xác định dựa trên port mặc định.


Các port và dịch vụ, phiên bản phần mềm nmap xác định khi có tùy chọn –sV

Ở trên nmap xác định port 444 chạy https thay vì mặc định snpp. Nmap hỗ trợ việc xác định hệ điều hành bằng tùy chọn –O. Nmap xác định hệ điều hành dựa trên TCP/IP stack fingerprint của mục tiêu (ví dụ như Sequence Number, window size, các Options và thứ tự của chúng trong TCP header, Identification number trong IP header, …). Có thể tham khảo thêm tại http://nmap.org/book/man-os-detection.html


+ Nmap hỗ trợ chạy các script đặc biệt:

Nmap Scripting Engine (NSE) là một trong những chức năng linh hoạt và mạnh mẽ nhất của Nmap. Nó cho phép người dùng viêt và chia sẻ những đoạn script đơn giản để thực hiện những công việc khác nhau trong lĩnh vực networking một cách tự động. Những đoạn script có thể sử dụng để phát hiện các lỗ hổng, thậm chí khai thác các lỗ hổng. Các script (.nse file) nằm trong thư mục script khi cài đặt nmap, người dùng có thể tùy biến chỉnh sửa, thêm các scirpt khác. Để thực hiện chức năng này của nmap sử dụng tùy chọn


–script |||[,…]
Script trace route theo geoIP


Script phát hiện lỗ hổng MS08-067 trên port 445 của windows XP

+ Lưu lại kết quả quét 
Cuối cùng Nmap cho phép người dùng có thể lưu lại kết quả quét của mình dưới dạng text hoặc xml (có thể dùng kết quả làm đầu vào cho một số công cụ khác) với các tùy chọn:

-oN (normal output)

-oX (xml output)



Nguồn: mystown.com
thudinh Network and Security

Adsense

Translate