Copy Link
Add to Bookmark
Report

Echo Magazine Issue 19 Phile 0x009

eZine's profile picture
Published in 
Echo Magazine
 · 21 Aug 2020

  

______ _ _____
___ __ _(_) __|___ __| |___|____ |
/ _ \ / _` | |\ \ / _ \ / _` |__ \ |_ |
\__ | | | | |_\ \ (_) | | | |__) |__| |
|___/|_| |_|_|____\___/|_| |_|___/_____|


[ echo|zine, volume 6 issue 19 ]

Scapy: obrak-abrik paket data
Brought To You By : y3dips
email: y3dips/et/echo/dot/or/dot/id
URL: http://y3dips/dot/echo/dot/or/dot/id

======= Pendahuluan ---|

Scapy adalah suatu program yang dibuat menggunakan bahasa pemrograman python
dan sangat "powerfull" dalam berinteraksi untuk memanipulasi paket di jaringan.
Scapy mampu "membangun" dan memecah 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.py

======= Persiapan ---|

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
| report_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
| <IP version=4L ihl=5L 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='' |<ICMP
| type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding
| load='\xac\x9e\xc0\xa8\x01e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
| >>>
| >>>
|-----------------------

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
| <IP version=4L ihl=5L tos=0x0 len=28 id=82 flags= frag=0L ttl=64 proto=icmp
| chksum=0xf654 src=192.168.1.133 dst=192.168.1.101 options='' |<ICMP
| type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |<Padding
| load='\xac\x9e\xc0\xa8\x01e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
| >>>
|------------------------

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 <target>"
sys.exit(1)

target=sys.argv[1]
p=IP(dst=target)/ICMP()
sr1(p)
----- scping.py ----------------------

Mari kita ujicobakan

|---------------------
| devil scapy # ./scping.py
| Usage: ./scping.py <target>
| 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

======= Shout ---|

[1] Ana, Keep Faith on us :)
[2] k-159, the_day, az001, lirva32, the_hydra, negative, and all echo|staff
[3] Indonesian security community (underground/upperground/clown)


*- $e19dot009dottxt - echo|zine - issue#19 - 080808 -*

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT