Arief Yudhawarman

Masih belajar buat blog

tcpdump dan wireshark untuk sniffing network

with 2 comments

tcpdump is a packet sniffer. It is able to capture traffic that passes through a machine. It operates on a packet level, meaning that it captures the actual packets that fly in and out of your computer. It can save the packets into a file. You can save whole packets or only the headers. Later you can “play” recorded file and apply different filters on the packets, telling tcpdump to ignore packets that you are not interested to see.

Under the hood, tcpdump understands protocols and host names. It will do all in its power to see what host sent each packet and will tell you its name instead of the IP address.

It is exceptionally useful tool for debugging what might have caused certain networking related problem. It is an excellent tool to learn new things.
Referensi: TCP Dump For Dummies

Contoh-contoh pemakaian tcpdump mulai dari yang simple sampai advanced ada di referensi atas. Sekarang penulis ingin menunjukkan contoh pemakaian tcpdump yang lain. Contoh client dengan ip 192.168.0.252 yang trafiknya akan di-sniffing di sisi router. Berikut ini contoh pemakaian dengan tcpdump yang dijalankan oleh root:

  1. Melihat trafik ke dan dari tcp port 80

    tcpdump -A -n -i eth0 tcp port 80 and host 192.168.0.252

    Keterangan option di atas:
    -A : Print each packet (minus its link level header) in ASCII. Handy for capturing web pages.
    -n : Don’t convert addresses (i.e., host addresses, port numbers, etc.) to names.
    -i : Listen on interface.
    Di sisi client, jalankan perintah di bawah, pastikan nc atau netcat telah terinstall.

    echo -e "GET / HTTP/1.0\nHost: http://www.yahoo.com\n" | nc -v -w 1 http://www.yahoo.com 80

    Hasilnya:

    17:55:47.248130 IP 192.168.0.252.60124 > 98.137.149.56.80: S 4026738437:4026738437(0) win 5840 <mss 1460,sackOK,timestamp 328454640 0,nop,wscale 6>
    E..<..@.@..`....b..8...P..'....................
    ............
    17:55:47.664392 IP 98.137.149.56.80 > 192.168.0.252.60124: S 2240490772:2240490772(0) ack 4026738438 win 5792 <mss 1352,sackOK,timestamp 1381835728 328454640,nop,wscale 8>
    E..<..@.5..Vb..8.....P....-...'.....g......H...
    R]#.........
    17:55:47.664628 IP 192.168.0.252.60124 > 98.137.149.56.80: . ack 1 win 92 <nop,nop,timestamp 328454744 1381835728>
    E..4..@.@..g....b..8...P..'...-....\.
    .....
    ...XR]#.
    17:55:47.664726 IP 192.168.0.252.60124 > 98.137.149.56.80: P 1:37(36) ack 1 win 92 <nop,nop,timestamp 328454744 1381835728>
    E..X..@.@..B....b..8...P..'...-....\.B.....
    ...XR]#.GET / HTTP/1.0
    Host: www.yahoo
    17:55:48.082385 IP 98.137.149.56.80 > 192.168.0.252.60124: . ack 37 win 23 <nop,nop,timestamp 1381836147 328454744>
    E..4.{@.5...b..8.....P....-...'*...........
    R]%s...X
    17:55:48.113185 IP 98.137.149.56.80 > 192.168.0.252.60124: P 1:894(893) ack 37 win 23 <nop,nop,timestamp 1381836170 328454744>
    E....}@.5..db..8.....P....-...'*...........
    R]%....XHTTP/1.0 302 Found
    Date: Wed,
    17:55:48.113217 IP 98.137.149.56.80 > 192.168.0.252.60124: F 894:894(0) ack 37 win 23 <nop,nop,timestamp 1381836170 328454744>
    E..4..@.5...b..8.....P....0...'*...........
    R]%....X
    17:55:48.114195 IP 192.168.0.252.60124 > 98.137.149.56.80: . ack 894 win 120 <nop,nop,timestamp 328454857 1381836170>
    E..4..@.@..e....b..8...P..'*..0....x.".....
    ....R]%.
    17:55:48.114269 IP 192.168.0.252.60124 > 98.137.149.56.80: F 37:37(0) ack 895 win 120 <nop,nop,timestamp 328454857 1381836170>
    E..4..@.@..d....b..8...P..'*..0....x. .....
    ....R]%.
    17:55:48.552500 IP 98.137.149.56.80 > 192.168.0.252.60124: . ack 38 win 23 <nop,nop,timestamp 1381836614 328454857>
    E..4..@.5...b..8.....P....0...'+...........
    R]'F....
    

    Terlihat di atas data yang dikirim oleh client di baris 13 dan 14, alih-alih “Host: http://www.yahoo.com&#8221; yang dicetak adalah “Host: http://www.yahoo”, hal ini karena secara default tcpdump hanya snarf snaplen sebesar 68 bytes. Tambahkan option -s 0 untuk menangkap semua isi paket. Agar hanya paket yang keluar dari ip 192.168.0.252 yang dipantau maka gunakan option src di depan host 192.168.0.252. Untuk mengerti arti paket-paket di atas, penulis menganjurkan pembaca untuk membuka link Spy on Yourself with tcpdump.

  2. Melihat trafik ke tcp port 80

    tcpdump -A -s 0 -n -i eth0 tcp port 80 and src host 192.168.0.252

    Kemudian jalankan nc di sisi client:

    echo -e "GET / HTTP/1.0\nHost: http://www.yahoo.com\n" | nc -v -w 1 http://www.yahoo.com 80

    Hasilnya:

    15:19:19.802205 IP 192.168.0.252.38153 > 98.137.149.56.80: S 3748445221:3748445221(0) win 5840 <mss 1460,sackOK,timestamp 347704245 0,nop,wscale 6>
    E..<7.@.@.I.....b..8.	.P.l.%.........p.........
    ............
    15:19:20.217112 IP 192.168.0.252.38153 > 98.137.149.56.80: . ack 2380149639 win 92 <nop,nop,timestamp 347704349 1466517179>
    E..47.@.@.I.....b..8.	.P.l.&..3....\.......
    ....WiF.
    15:19:20.217318 IP 192.168.0.252.38153 > 98.137.149.56.80: P 0:36(36) ack 1 win 92 <nop,nop,timestamp 347704349 1466517179>
    E..X7.@.@.I.....b..8.	.P.l.&..3....\.......
    ....WiF.GET / HTTP/1.0
    Host: www.yahoo.com
    
    15:19:20.662646 IP 192.168.0.252.38153 > 98.137.149.56.80: . ack 894 win 120 <nop,nop,timestamp 347704460 1466517615>
    E..47.@.@.I.....b..8.	.P.l.J..7....x.......
    ....WiHo
    15:19:20.662725 IP 192.168.0.252.38153 > 98.137.149.56.80: F 36:36(0) ack 895 win 120 <nop,nop,timestamp 347704460 1466517615>
    E..47.@.@.I.....b..8.	.P.l.J..7....x.......
    ....WiHo
    

    Terlihat di baris 10, “Host: http://www.yahoo.com&#8221; telah tertulis lengkap.

  3. Menggunakan wireshark untuk mengamati hasil sniffing
    Pada TCP 3-way handshake terjadi pertukaran informasi antara client dengan server sbb:

    1. Client mengirim paket SYN.
    2. Server menjawab dengan SYN, ACK
    3. Client membalas dengan ACK.

    tcp 3-way handshake

    Gambar 1: TCP 3-Way Handshake (Sumber: Transmission Control Protocol)

    Selanjutnya terjadi aliran data dari client ke server dan sebaliknya sampai client mengirimkan FIN untuk mengakhiri sesi tcp. Untuk memahami cara kerja protokol tcp, silahkan pembaca membuka Transmission Control Protocol. Pengamatan paket pertukaran informasi ini lebih mudah dengan alat bantu wireshark dibandingkan tcpdump. Dengan wireshark kita bisa melihat packet summary, packet detail dan stream hex ascii. Kita ulangi perintah tcpdump sebelumnya namun kali ini hasil sniffing disimpan ke file dump.cap agar nanti dibaca oleh wireshark:
    tcpdump -w dump.cap -s 0 -i eth0 tcp port 80 and src host 192.168.0.252
    Sekali lagi di sisi client jalankan nc seperti langkah sebelumnya. Jalankan wireshark untuk membaca file dump.cap:

    wireshark -r dump.cap

    Berikut ini ditampilkan tiga gambar berturut-turut hasil screenshot wireshark.
    packet sumary wireshark

    Gambar 2: packet sumary

    Gambar 3: packet detail

    Gambar 4: stream hex ascii

    Gambar 2 baris 3 memperlihatkan packet dari client yang berisi data “GET / …”, packet ini mempunyai tcp flags 0x18 (PSH,ACK) seperti yang ditunjukkan di gambar 3. Selanjutnya diperlihatkan isi paket data yaitu Hypertext Transfer Protocol di gambar 4 baik berupa paket detail “GET / HTTP/1.0\n” maupun stream hex ascii “474554202f20485454502f312e300a486f73743a207777772e7961686f6f2e636f6d0a0a”. Untuk mempelajari lebih lanjut mengenai wireshark silahkan kunjungi situs dokumentasi wireshark.

  4. Melihat trafik ke tcp port 80 dengan tcp flags ACK,PSH
    Pada sniffing network yang lalu tcpdump menampilkan semua paket dengan tcp flags diset SYN, SYN ACK, ACK, dll. Untuk analisa selanjutnya tcpdump hanya menampilkan paket-paket dengan tcp flags ACK,PSH. Ini berarti hanya paket-paket yang berisikan data dari client seperti GET, HOST, dll yang dianalisa, paket-paket yang lain dilewatkan. Berdasarkan gambar 3 di atas, tcp flags ACK,PSH mempunyai nilai hex 0x18. Nilai ini berada pada header tcp offset 13 (mulai bytes ke-0). Berikut ini format header tcp yang penulis kutip dari TCP Header Format :

        0                   1                   2                   3   
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |          Source Port          |       Destination Port        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                        Sequence Number                        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Acknowledgment Number                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Data |           |U|A|P|R|S|F|                               |
       | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
       |       |           |G|K|H|T|N|N|                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           Checksum            |         Urgent Pointer        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Options                    |    Padding    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                             data                              |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    

    Perintah tcpdump agar hanya menangkap paket tcp port 80 dengan tcp flags ACK,PSH dari client 192.168.0.252 (di sini ada tambahkan option -X untuk mencetak tampilan dalam HEX dan ASCII):

    tcpdump -A -X -v -s 0 -n -i eth0 tcp port 80 and src host 192.168.0.252 and '(tcp[13] = 24)'

    Nah, sekarang jalankan script nc yang sama di sisi client. Hanya ada 1 paket yang ditangkap oleh tcpdump:

    20:24:57.275750 IP (tos 0x0, ttl  64, id 63003, offset 0, flags [DF], proto: TCP (6), length: 88) 192.168.0.252.58319 > 98.137.149.56.80: P, cksum 0xd7ae (correct), 1626181033:1626181069(36) ack 262298067 win 92 
    	0x0000:  4500 0058 f61b 4000 4006 8b1e c0a8 00fc  E..X..@.@.......
    	0x0010:  6289 9538 e3cf 0050 60ed 8da9 0fa2 59d3  b..8...P`.....Y.
    	0x0020:  8018 005c d7ae 0000 0101 080a 14ff 7c1c  ...\..........|.
    	0x0030:  587f cdbd 4745 5420 2f20 4854 5450 2f31  X...GET./.HTTP/1
    	0x0040:  2e30 0a48 6f73 743a 2077 7777 2e79 6168  .0.Host:.www.yah
    	0x0050:  6f6f 2e63 6f6d 0a0a                      oo.com..
    
  5. tcpdump tingkat lanjut
    Pada kesempatan ini kita akan memanfaatkan fitut tcpdump tingkat lanjut yakni menangkap paket yang mengandung data tertentu. Misalnya menangkap paket tcp port ftp dengan data berisi username dan password. Sebelumnya jalankan tcpdump untuk menangkap trafik tcp port ftp dengan tcp flags ACK,PSH:

    tcpdump -A -X -v -n -i eth1 tcp port ftp and src host 172.16.2.62 and '(tcp[13] = 24)'

    Di terminal satunya penulis membuka sesi anonymous ftp ke ftp.microsoft.com.

    yudi@ubuntu:~$ ftp ftp.microsoft.com
    Connected to ftp.microsoft.akadns.net.
    220 Microsoft FTP Service
    Name (ftp.microsoft.com:yudi): anonymous
    331 Anonymous access allowed, send identity (e-mail name) as password.
    Password:
    230-Welcome to FTP.MICROSOFT.COM. Also visit http://www.microsoft.com/downloads.
    230 User logged in.
    Remote system type is Windows_NT.
    ftp> quit
    221 Thank you for using Microsoft products.
    yudi@ubuntu:~$
    


    Dan ini hasil yang ditangkap tcpdump:

    21:35:00.464763 IP (tos 0x10, ttl 64, id 55186, offset 0, flags [DF], proto TCP (6), length 68) 172.16.2.62.55770 > 64.4.30.34.21: P, cksum 0x39cc (correct), 754510724:754510740(16) ack 1577460229 win 5840 
    	0x0000:  4510 0044 d792 4000 4006 569d ac10 023e  E..D..@.@.V....>
    	0x0010:  4004 1e22 d9da 0015 2cf8 eb84 5e06 2205  @.."....,...^.".
    	0x0020:  8018 16d0 39cc 0000 0101 080a 025e 3f92  ....9........^?.
    	0x0030:  071a d635 5553 4552 2061 6e6f 6e79 6d6f  ...5USER.anonymo
    	0x0040:  7573 0d0a                                us..
    21:35:09.502503 IP (tos 0x10, ttl 64, id 55188, offset 0, flags [DF], proto TCP (6), length 75) 172.16.2.62.55770 > 64.4.30.34.21: P, cksum 0x7a8d (correct), 16:39(23) ack 73 win 5840 
    	0x0000:  4510 004b d794 4000 4006 5694 ac10 023e  E..K..@.@.V....>
    	0x0010:  4004 1e22 d9da 0015 2cf8 eb94 5e06 224d  @.."....,...^."M
    	0x0020:  8018 16d0 7a8d 0000 0101 080a 025e 4866  ....z........^Hf
    	0x0030:  071a d789 5041 5353 2062 696c 6c40 7769  ....PASS.bill@wi
    	0x0040:  6e64 6f77 732e 636f 6d0d 0a              ndows.com..
    21:35:09.716979 IP (tos 0x10, ttl 64, id 55191, offset 0, flags [DF], proto TCP (6), length 58) 172.16.2.62.55770 > 64.4.30.34.21: P, cksum 0xff40 (correct), 39:45(6) ack 176 win 5840 
    	0x0000:  4510 003a d797 4000 4006 56a2 ac10 023e  E..:..@.@.V....>
    	0x0010:  4004 1e22 d9da 0015 2cf8 ebab 5e06 22b4  @.."....,...^.".
    	0x0020:  8018 16d0 ff40 0000 0101 080a 025e 489b  .....@.......^H.
    	0x0030:  071a db10 5359 5354 0d0a                 ....SYST..
    21:35:11.179298 IP (tos 0x10, ttl 64, id 55193, offset 0, flags [DF], proto TCP (6), length 58) 172.16.2.62.55770 > 64.4.30.34.21: P, cksum 0x09ab (correct), 45:51(6) ack 192 win 5840 
    	0x0000:  4510 003a d799 4000 4006 56a0 ac10 023e  E..:..@.@.V....>
    	0x0010:  4004 1e22 d9da 0015 2cf8 ebb1 5e06 22c4  @.."....,...^.".
    	0x0020:  8018 16d0 09ab 0000 0101 080a 025e 4a09  .............^J.
    	0x0030:  071a db26 5155 4954 0d0a                 ...&QUIT..
    

    Apabila diperhatikan data username dan password yang dikirimkan client ftp tertulis sebagai karakter ascii yaitu ‘USER’ dan ‘PASS’ berturut-turut. Agar tcpdump dapat menangkap hanya data login maka gunakan karakter hexadecimal sebagai ganti ascii. Untuk konversi string ‘USER’ dan ‘PASS’ ke hexadecimal buka situs String – ASCII, HEX, Binary Converter (apabila dicermati tampilan paket data di atas juga menampilkan data hex yang bersesuaian dengan ascii):
       ‘USER’ (ascii) => ‘0x55534552’ (hex)
       ‘PASS’ (ascii) => ‘0x50415353’ (hex)
    Masalah selanjutnya adalah bagaimana memberitahu tcpdump untuk mencari data hex yang sesuai dengan pola yang kita buat? Kita tidak bisa menyuruh tcpdump agar mencari paket yang mengandung data tertentu semata. Kita harus memberitahu tcpdump dimana data yang dicari ini berada. Pola hex ini harus dicari di bagian data dari tcp header. Informasi mengenai ini ada di tcp[12] dan di lakukan operasi “>>2”, shift bit ke kanan sebanyak 2x, singkatnya “tcp[12]>>2”.

    tcp[12] = 0x80 (hexa) atau 10000000 (binary)
    10000000 >> 2 = 100000 = 20 (hexa) = 32 (decimal)
    


    Data terdapat di offset bytes ke-32 dari tcp header.
    Kemudian jumlah karakter yang akan dicari masing-masing sebanyak 4. Perintah di bawah ini akan membuat tcpdump menampilkan data tcp port ftp dengan tcp flags ACK,PSH dan mengandung data ‘USER’ atau ‘PASS’:

    tcpdump -A -n -v -i eth1 tcp port ftp and src host 172.16.2.62 and '(tcp[13] = 24 and (tcp[(tcp[12]>>2):4] = 0x55534552 or tcp[(tcp[12]>>2):4] = 0x50415353))'

    Hasil eksekusi perintah setelah client membuka sesi anonymous ftp ke ftp.microsoft.com:

    22:12:25.729643 IP (tos 0x10, ttl 64, id 44435, offset 0, flags [DF], proto TCP (6), length 68) 172.16.2.62.53024 > 64.4.30.34.21: P, cksum 0x9673 (correct), 1612997068:1612997084(16) ack 776558804 win 5840 
    E..D..@.@......>@..". ..`$a..IX......s.....
    .f.6..C.USER anonymous
    
    22:12:35.336077 IP (tos 0x10, ttl 64, id 44437, offset 0, flags [DF], proto TCP (6), length 75) 172.16.2.62.53024 > 64.4.30.34.21: P, cksum 0xd685 (correct), 16:39(23) ack 73 win 5840 
    E..K..@.@......>@..". ..`$a..IY............
    .f....D.PASS bill@windows.com
    

    Catatan, sesusai manual tcpdump, ukuran data yang ditangkap adalah berturut-turut 1, 2, atau 4 bytes. Apabila ingin menangkap lebih dari itu harus menggunakan operator ‘and’. Untuk bacaan lebih lanjut selain manual tcpdump, tutorial yang terdapat di Tcpdump Advanced Filters menarik dipelajari.

  6. Menangkap paket tcp port 80 dan paket data berisi “POST”

    tcpdump -A -vv -s 0 -i eth1 tcp port 80 and src host 172.16.2.62 and '(tcp[13] = 24 and tcp[(tcp[12]>>2):4] = 0x504F5354)'

    Login ke webmail, seperti telkomnet, tidak melalui protokol yang secure seperti https akan memperlihatkan username dan passwordnya secara jelas (CLEAR TEXT) seperti di bawah ini:

    14:08:28.715361 IP (tos 0x0, ttl 64, id 56752, offset 0, flags [DF], proto TCP (6), length 1258) ubuntu.local.50538 > netkuis.telkom.net.www: P, cksum 0x4a27 (correct), 701355231:701356437(1206) ack 733747563 win 92 
    E.....@.@..U...>}....j.P)...+..k...\J'.....
    .L	p...gPOST /josso/signon/login.do?josso_back_to=http://main.telkom.net/mail/index.php HTTP/1.1
    Host: login.telkom.net
    User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-us,en;q=0.5
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Referer: http://mail.telkom.net/
    Cookie: JOSSO_SESSIONID=-; JSESSIONID=1E753F0DDF33F937577D9E23D703359A
    Content-Type: multipart/form-data; boundary=---------------------------1360248880207313369957503098
    Content-Length: 542
    
    -----------------------------1360248880207313369957503098
    Content-Disposition: form-data; name="josso_username"
    
    username
    -----------------------------1360248880207313369957503098
    Content-Disposition: form-data; name="josso_password"
    
    password
    -----------------------------1360248880207313369957503098
    Content-Disposition: form-data; name="login.x"
    
    14
    -----------------------------1360248880207313369957503098
    Content-Disposition: form-data; name="login.y"
    
    15
    -----------------------------1360248880207313369957503098--
    

Bahan bacaan:

  1. TCP Dump For Dummies
  2. Spy on Yourself with tcpdump
  3. Transmission Control Protocol
  4. TCP Header Format
  5. Using tcpdump and Wireshark to sniff and analyse your network traffic
  6. Tcpdump Advanced Filters

Last update: 2010-05-06 14:14 +07:00

Written by awarmanf

April 29, 2010 at 9:45 am

Posted in Linux, sniffing

Tagged with , ,

2 Responses

Subscribe to comments with RSS.

  1. […] Tidak mudah atau mustahil untuk mendrop akses ke facebook dari user ultrasurf. Yang bisa dilakukan adalah mendrop koneksi dari agent ultrasurf itu sendiri, yaitu saat ultrasurf membuka koneksi dengan ip servernya, tepatnya saat agent ultrasurf sudah melewati TCP 3-Way Handshake dan sebuah paket baru yang berisi data “Client Hello” dikirim ke ip server. Di samping tcpdump, alat bantu yang berguna untuk analisa paket data adalah wireshark. Penjelasan lengkap mengenai tcpdump dan wireshark bisa dibaca di blog penulis tcpdump dan wireshark untuk sniffing network. […]

  2. nice share gan😀

    Putra Perdana

    July 19, 2013 at 3:12 am


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: