27 April 2010

Obrak-abrik paket data dengan SCAPY

Scapy adalah suatu program yang dibuat menggunakan bahasa pemrograman python dan sangat
"powerfull" dalam berinteraksi untuk memanipulasi paket di jaringan.
Scapy mampu "membangun" danmemecah paket-paket dari berbagai jenis protokol yang ada, men-transimi-kannya, menangkapnya,
menerima permintaan dan menjawabnya, dan banyak lagi.
Scapy dapat digunakan untuk
menangani berbagai kegiatan yang berhubungan dengan jaringan, seperti kegiatan "scanning",
"tracerouting", "attack" atau "network discovery". Scapy bahkan
dapat mengajarkan kita semua proses-proses dari suatu protokol.
Scapy diciptakan oleh Philippe Biondi
dan versi terakhirnya dapat di unduh di http://hg.secdev.org/scapy/raw-file/tip/scapy.#Baiklah, bagi
yang telah mengunduh
programnya dapat langsung
menjalankannya dengan terlebih
dahulu menginstall python serta
berbagai library dan aplikasi lain
(tcpdump, gnuplot, pyx, crypt,
graphviz, imagemagick, visual)
yang dibutuhkannya telah terinstall
di komputer anda.
|--------------------------- | devil
scapy # ./scapy.py | Welcome to
Scapy (1.2.0.2) | >>>
|-------------------------- Atau untuk
para pengguna gentoo dapat
dengan melakukan installasi via
"port emerge"
|------------------------- | devil ~ #
emerge --search scapy |
Searching... | [ Results for search
key : scapy ] | [ Applications found :
1 ] | | * net-analyzer/scapy | Latest
version available: 1.1.1-r1 | Latest
version installed: [ Not Installed ] |
Size of files: 143 kB | Homepage:
http://www.secdev.org/projects/
scapy/ | Description: A Python
interactive packet manipulation
program for mastering the network
| License: GPL-2
|-------------------------- kemudian
dapat menginstallnya dengan
melakukan "emerge scapy", dan
untuk menjalankannya cukup
mengetikkan scapy dimanapun
|--------------------------- | devil ~ #
scapy | Welcome to Scapy (v1.1.1 /
f88d99910220) | >>>
|-------------------------- =======
Lingkungan ---| Hal pertama yang
dapat kita lakukan adalah dengan
mempelajari penggunaan scapy
tersebut baik dari berbagai
dokumentasi di internet atau secara
manual dengan membaca help()
yang ada. Salah satu perintah/fungsi
yang terpenting dari menggunakan
scapy adalah ls(), ls() akan
menampilkan informasi protokol
yang didukung oleh scapy.
|------------------------- | >>> ls() |
ARP : ARP | ASN1_Packet : None |
BOOTP : BOOTP | CookedLinux :
cooked linux | DHCP : DHCP options
| DNS : DNS | DNSQR : DNS
Question Record | DNSRR : DNS
Resource Record | Dot11 : 802.11 |
Dot11ATIM : 802.11 ATIM | ............
|------------------------- bahkan
dengan menggunakan perintah ls
(object) kita akan mendapatkan
informasi detil dari tiap protokol
yang didukung oleh scapy.
|--------------------------- | >>> ls
(ARP) | hwtype : XShortField = (1) |
ptype : XShortEnumField = (2048) |
hwlen : ByteField = (6) | plen :
ByteField = (4) | op : ShortEnumField
= (1) | hwsrc : ARPSourceMACField =
(None) | psrc : SourceIPField =
(None) | hwdst : MACField =
('00:00:00:00:00:00') | pdst : IPField
= ('0.0.0.0') |---------------------------
Sedangkan untuk melakukan list
semua perintah/fungsi yang
terdapat di Scapy dapat
menggunakan lsc()
|--------------------------- | lsc() |
>>> lsc() | sr : Send and receive
packets at layer 3 | sr1 : Send
packets at layer 3 and return only
the first answer | srp : Send and
receive packets at layer 2 | srp1 :
Send and receive packets at layer 2
and return only the first answer |
srloop : Send a packet at layer 3 in
loop and print the answer each time
| srploop : Send a packet at layer 2
in loop and print the answer each
time | sniff : Sniff packets | p0f :
Passive OS fingerprinting: which OS
emitted this TCP SYN ? |
arpcachepoison : Poison target's
cache with (your MAC,victim's IP)
couple | send : Send packets at layer
3 | sendp : Send packets at layer 2 |
traceroute : Instant TCP traceroute |
arping : Send ARP who-has
requests to determine which hosts
are up | ls : List available layers, or
infos on a given layer | lsc : List user
commands | queso : Queso OS
fingerprinting | nmap_fp : nmap
fingerprinting | ureport_ports :
portscan a target and output a
LaTeX table | dyndns_add : Send a
DNS add message to a nameserver
for "name" to have a new "rdata" |
dyndns_del : Send a DNS delete
message to a nameserver for
"name" | is_promisc : Try to guess if
target is in Promisc mode. The
target is provided by its ip. |
promiscping : Send ARP who-has
requests to determine which hosts
are in promiscuous mode
|------------------------------- Untuk
melihat detil tiap perintah/fungsi
tersebut pun cukup mudah, dengan
mempergunakan lsv() juga
|------------------------------- | >>>
lsc(sr) | Send and receive packets at
layer 3 | nofilter: put 1 to avoid use
of bpf filters | retry: if positive, how
many times to resend unanswered
packets | if negative, how many
times to retry when no more
packets are | answered | timeout:
how much time to wait after the last
packet has been sent | verbose: set
verbosity level | multi: whether to
accept multiple answers for the
same stimulus | filter: provide a BPF
filter | iface: listen answers only on
the given interface | | >>> lsc(ls) |
List available layers, or infos on a
given layer

======= Ujicoba ---| Baiklah,
mudah-mudahan setelah mengenal
beberapa hal tentang scapy, maka
sekarang kita akan mencoba
menggunakan scapy untuk
menggantikan berbagai peralatan
"hacking" dan jaringan yang sering
kita gunakan. -------- Mengganti
perintah/program Ping --- |
Sekarang kita akan mencoba menggantikan perintah/program
Ping yang biasanya kita lakukan
menggunakan scapy, untuk itu kita
akan memanfaatkan protokol ICMP()
dan IP() yang digunakan oleh program Ping
| >>>
ls(ICMP) | type : ByteEnumField = (8)
| code : ByteField = (0) | chksum :
XShortField = (None) | id :
XShortField = (0) | seq : XShortField
= (0) | >>> ls(IP) | version : BitField =
(4) | ihl : BitField = (None) | tos :
XByteField = (0) | len : ShortField =
(None) | id : ShortField = (1) | flags :
FlagsField = (0) | frag : BitField = (0) |
ttl : ByteField = (64) | proto :
ByteEnumField = (0) | chksum :
XShortField = (None) | src : Emph =
(None) | dst : Emph = ('127.0.0.1') |
options : IPoptionsField = ('')
|Setelah mengetahui detil mengenai tiap-tiap
bagian dari protokol tersebut, maka
saatnya kita akan mencoba menggantikan perintah Ping
tersebut menggunakan Scapy.
|------------------------- | devil scapy
# ./scapy.py | Welcome to Scapy
(1.2.0.2) | >>> ip=IP() | >>>
icmp=ICMP() | >>>
ip.dst="192.168.1.133" | >>> sr1(ip/
icmp) | Begin emission: | .Finished
to send 1 packets. | * | Received 2
packets, got 1 answers, remaining 0
packets | tos=0x0 len=28 id=34 flags= frag=0L
ttl=64 proto=icmp |
chksum=0xf684 src=192.168.1.133
dst=192.168.1.101 options='' || type=echo-reply code=0
chksum=0xffff id=0x0 seq=0x0 |
| >>> | >>> |
Untuk memastikannya, kita dapat
menjalankan tcpdump
|devil ~ #
tcpdump -vv 'icmp[icmptype] =
icmp-echo' | tcpdump: WARNING:
eth0: no IPv4 address assigned |
tcpdump: listening on eth0, link-type
EN10MB (Ethernet), capture size 96
bytes | 22:04:33.716319 IP (tos 0x0,
ttl 64, id 1, offset 0, flags [none],
proto ICMP | (1), length 28)
192.168.1.101 > 192.168.1.133: ICMP
echo request, id 0, seq 0, | length 8
|Dan jika anda
tidak percaya bahwa kegiatan yang
dilakukan adalah sama dengan
melakukan 1 kali ping, maka silahkan
anda bandingkan hasilnya dengan
hasil program Ping,
| devil ~ #
ping 192.168.1.133 | PING
192.168.1.133 (192.168.1.133) 56(84)
bytes of data. | 64 bytes from
192.168.1.133: icmp_seq=1 ttl=64
time=2.30 ms | | devil ~ # tcpdump
-vv 'icmp[icmptype] = icmp-echo' |
tcpdump: listening on eth0, link-type
EN10MB (Ethernet), capture size 96
bytes | 22:07:06.571457 IP (tos 0x0,
ttl 64, id 0, offset 0, flags [DF], proto
ICMP | (1), length 84) 192.168.1.101 >
192.168.1.133: ICMP echo request, id
9804, seq | 1, length 64
|semuanya
adalah sama, kecuali berapa
settingan ICMP() yang kita biarkan
default sehingga berbeda, apakah
mungkin kita bisa mengelabui p0f ?
(dengan memainkan settingan
sequence, id, dsb) Atau bisa saja
dengan 1 baris perintah untuk
menggantikan program Ping.
|------------------------- | >>> sr1(IP
(dst="192.168.1.133")/ICMP()) | Begin
emission: | .Finished to send 1
packets. | * | Received 2 packets,
got 1 answers, remaining 0 packets
| len=28 id=82 flags= frag=0L ttl=64
proto=icmp | chksum=0xf654
src=192.168.1.133 dst=192.168.1.101
options='' |code=0 chksum=0xffff id=0x0
seq=0x0 || >>> |------------------------
ya..ya..ya, cuma bermain dengan
"style" :) Sekarang, sebagai
pelengkap kita bisa melihat detil
variabel yang terlibat dengan semua
yang kita lakukan sebelumnya
|---------------------- | >>> ls(ip) |
version : BitField = 4 (4) | ihl : BitField
= None (None) | tos : XByteField = 0
(0) | len : ShortField = None (None) |
id : ShortField = 1 (1) | flags :
FlagsField = 0 (0) | frag : BitField = 0
(0) | ttl : ByteField = 64 (64) | proto :
ByteEnumField = 0 (0) | chksum :
XShortField = None (None) | src :
Emph = '192.168.1.101' (None) | dst :
Emph = '192.168.1.133' ('127.0.0.1') |
options : IPoptionsField = '' ('') | >>>
ls(icmp) | type : ByteEnumField = 8
(8) | code : ByteField = 0 (0) |
chksum : XShortField = None (None)
| id : XShortField = 0 (0) | seq :
XShortField = 0 (0) | >>>
|----------------------- Yupe,
sekarang mudah-mudahan semua
makin jelas. ======= Menulis kode
---| Ya, kita sekarang akan menulis
kode yang tadi kita ketikkan kedalam
sebuah program berbasiskan
python dan menggunakan scapy
sebagai module dari program kita.
----- scping.py -----------------------
#!/usr/bin/env python import sys
from scapy import * if len
(sys.argv) != 2: print "Usage: ./
scping.py " sys.exit(1)
target=sys.argv[1] p=IP(dst=target)/
ICMP() sr1(p) ----- scping.py
ujicobakan |
devil scapy # ./scping.py | Usage: ./
scping.py | devil scapy # ./
scping.py 192.168.1.133 | Begin
emission: | .Finished to send 1
packets. | * | Received 2 packets,
got 1 answers, remaining 0 packets
| devil scapy # ./scping.py
192.168.1.135 <--- gagal | WARNING:
Mac address to reach 192.168.1.135
not found |----------------------
Karena kita belum mendefinisikan
berbagai jenis error dan kondisi
lainnya, maka wajar jika hal ini
terjadi, silahkan anda berkreasi
dengan program buatan anda :)
Silahkan anda bermain main dengan
protokol lainnya TCP(), UDP(), atau
DNS() :P ======= Real life Exploit
---| Tau tentang celah DNS baru-
baru ini yang sangat
menghebohkan dunia per-internet-
an? Tebak saja, versi scapy-nya pun
telah dirilis [3] ======= Penutup ---|
Selain berbagai kelebihannya, scapy
juga diakui memiliki beberapa
kelemahan, kemampuannya baru di
klaim 85% bisa menyamai NMAP,
selain itu juga scappy relatif lebih
lambat dalam bererapa hal, tetapi
tidak untuk belajar, terutama belajar
membuat exsploit. Python
memberikan kemudahan dalam
membuat program, dan Scapy
melengkapinya :), tulisan inipun
sengaja hanya untuk
memperkenalkan teman-teman
semua kepada scapy, dengan
harapan dapat bermain lebih kreatif
lagi dengan Scapy. Semoga,
petunjuk yang sedikit dari saya yang hanya memiliki sedikit ilmu ini dapat bermanfaat, amin.
Referensi ---| [1] Scapy help [2]
https://www.secdev.org/projects/
scapy/ [3] http://
www.milw0rm.com/exploits/6123

0 komentar:

My Profile

Foto Saya
Mac Osqy
Kalibaru, Banyuwangi, Indonesia
Aku orang nya biasa-biasa aja, kepada siapa aja ramah, santun dan segan... normal-normal aja sepertinya sama seperti yang lain. travelling adalah hoby ku, meski dengan modal pas-pasan dan bondo tekat, lawan aja asal hati senang.... dunia nyata sampai maya pun aku coba tembus dengan sebuah harapan tertentu... hal terburuk yang paling membingungkan adalah target, hmmm... bikin badan Keook aja, ampun deh pokoknya! seni merupakan mainan kecilku tanpa harus tau apa itu C+, C++, binary dan asembly yang menjadi buyut sebuah bahasa... Namanya juga LAMER bisa apa??? tapi aku harus tetap berkarya meski hanya dengan modal mesin dari keluarga Penryn, dan selalu berharap bisa meminang keluarga Clarksfield nantinya.
Lihat profil lengkapku

Music

Diberdayakan oleh Blogger.

Pageviews

Facebook

Banner 468x60

Navigation

Popular Posts

Blogroll

About

Blogger templates

IP

Blogger news

user online

Followers