More Related Content Similar to Scapy presentation Similar to Scapy presentation (20) Scapy presentation1. How to Use Scapy
AshiGirl96( ๑・ิิ・ټ๑) from ZareGoto
6. 通信プロトコルとは?
ネットワークを介してコンピュータ同士が通信を行う上で、相互に決められた約束事の
集合。通信手順、通信規約などと呼ばれることもある。
英語しか使えない人と日本語しか使えない人では会話ができないように、対応している
プロトコルが異なると通信することができない。人間同士が意思疎通を行う場合に、
どの言語を使うか(日本語か英語か)、どんな媒体を使って伝達するか(電話か手紙か)、
というように2つの階層に分けて考えることができるが、コンピュータ通信においても、
プロトコルの役割を複数の階層に分けて考える。
階層化することによって、上位のプロトコル(を実装したソフトウェア)は自分のすぐ下の
プロトコルの使い方(インターフェース)さえ知っていれば、それより下で何が起きているかを
まったく気にすることなく通信を行うことができる。電話機の操作法さえ知っていれば、
電話会社の交換局で何が起きているか知らなくても電話が使えるのと同じである。
現在インターネットで標準となっているIPは第3層(ネットワーク層)の、TCPやUDPは第4層
(トランスポート層)のプロトコルであり、HTTPやFTP、SMTP、POPなどは第5層(セッション層)
以上のプロトコルである。
http://e-words.jp/w/E38397E383ADE38388E382B3E383AB.html 参照
8. How to INSTALL!!!
さすがに Python はインストールしてるって前提で行きます
$ cd /tmp
$ wget scapy.net
$ unzip scapy-latest.zip
$ cd scapy-2.* For UNIX like
$ sudo python setup.py install
For Windows
http://www.secdev.org/projects/scapy/doc/installation.html
Windows知らない(;*´Д`)。
9. STARTING USAGE!!!!
“On Python”
$ sudo scapy
Welcome to Scapy (2.0.1-dev)
>>>
Pythonをベースとしてる
インタプリタ
➡ファイルの場合
python ***.py
from scapy.all import *
10. AT FIRST STEPS!!!!
Let’s building some packets!!
$ sudo scapy
1 >>> ping = IP(dst='192.168.1.13')/ICMP()
1.pingとは 2 >>> ping.show()
2.IPプロトコル:
ネットワークが 3 ###[ IP ]###
4 version= 4 データグラムや
疎通しているか 5 ihl= None パケットを
確認するための 6 tos= 0x0
7 len= None 中断するのに
コマンド 8 id= 1 使われる主要
(この場合パケット) 9 flags= な通信プロトコル
10 frag= 0
11 ttl= 64 3.ICMPプロトコル:
ping は,ICMPのechoコ 12 proto= icmp 4.作ったパケットの IPのデータグラム処理に
マンドを利用して、 13 chksum= 0x0
中身を おける誤りの
14 src= 172.16.247.139
指定した相手先 15 dst= ***.***.**.*** 見るための関数 通知や通信に
(IPアドレス)に 16 options= '' Packet.show() 関する情報の
『全く一緒の文字列 17 ###[ ICMP ]### そしてその下が 通知などの
18 type= echo-request
返して!』という感じ 19 code= 0
パケットの構造に プロトコル
で疎通をはかる。 20 chksum= 0x0 なっている
21 id= 0x0
22 seq= 0x0
11. Other
5.このように 『/』でプロトコルを区切ることで、2つのレイヤを構成することが出来る
6.IPの引数で src=”送信元” dst=”送信先”
TCPは主にport番号や FLAGを指定することが出来る。
>>> ex=Ether()/IP(dst=”reon3.rosx.net”)/TCP()/"GET /profile3.html HTTP/1.0 nn"
>>> hexdump(ex)
00 02 15 37 A2 44 00 AE F3 52 AA D1 08 00 45 00 ...7.D...R....E.
00 43 00 01 00 00 40 06 78 3C C0 A8 05 15 42 23 .C....@.x<....B#
FA 97 00 14 00 50 00 00 00 00 00 00 00 00 50 02 .....P........P.
20 00 BB 39 00 00 47 45 54 20 2F 69 6E 64 65 78 ..9..GET /index
2E 68 74 6D 6C 20 48 54 54 50 2F 31 2E 30 20 0A .html HTTP/1.0 .
0A
7. hexdump(引数)で パケットexを16進数で見る事が出来る。
8.『/』で文字列も一緒に書くと、一緒に入ることが出来る。
12. After that
9.パケットを機械語にすることができる
>>>b = str(a)
>>> b
'x00PVxe3xd5<x00x0c)C>xfdx08x00Ex00x00Fx00x01x00x00@
x06x80x89xacx10xf7x8bx1b`;,x00x14x00P
x00x00x00x00x00x00x00x00Px02 x00Kxf1x00x00GET /profile3.html HTTP/
1.0 nn'
10.詳細に知ることも出来る。
>>> c = Ether(b)
>>> c
<Ether dst=00:50:56:e3:d5:3c src=00:0c:29:43:3e:fd type=0x800 |<IP
version=4L ihl=5L tos=0x0 len=70 id=1 flags= frag=0L ttl=64 proto=tcp
chksum=0x8089 src=172.16.247.139 dst=27.96.59.44 options='' |<TCP
sport=ftp_data dport=www seq=0 ack=0 dataofs=5L reserved=0L flags=S
window=8192 chksum=0x4bf1 urgptr=0 options=[] |<Raw load='GET /
profile3.html HTTP/1.0 nn' |>>>>
13. READING .PCAP FILE!!!!
1 from scapy.all import *
2
3 a = rdpcap("/root/Desktop/q9.pcap")
4 a[45].pdfdump(layer_shift=1)
5 a[45].psdump("/root/Desktop/q9.eps",layer_shift=1)
このように.pcapのファイルが開けました。
そして右の図のように.pcapの中身を
具体的(GUI)に見るようにすることも
できます。他にも,
a.show2()
などの関数で、パケットの中身をCUIで
わかりやすく見ることが可能です。
他にも
a.summary()
a.sprintf
a.command()
などなどたくさんあります。
14. LET’S SEND PACKETS!!!!
11.パケットを送る関数は send() と sendp() です
send() : レイヤ3に向かってパケットを送ります。
sendp() : レイヤ2に向かってパケットを送ります。
send() sendp()
>>> send(IP(dst="1.2.3.4")/ICMP()) >>> sendp( Ether() / IP ( dst= "1.2.3.4" , ttl = (1,4)), iface ="eth1")
. ....
Sent 1 packets. Sent 4 packets.
15. パケットを送ったらその答えが返ってくる関数sr(),srp()
sr() : レイヤ3に向かってパケットを送り、レスポンスが変数に入る
srp() : レイヤ2に向かってパケットを送り、レスポンスが変数に入る
sr()
>>> ping = IP(dst="192.168.1.6")/ICMP()/"PLEASE RESPONSE"
>>> a = sr1(ping)
同じ文字列が
Begin emission: 返ってきてるので、
.*Finished to send 1 packets. 成功したことが
わかる(*‘ω‘ *)
Received 2 packets, got 1 answers, remaining 0 packets
>>> hexdump(a)
0000 45 00 00 2B 0A 58 00 00 80 01 CB 2F C0 A8 01 06 E..+.X...../....
0010 AC 10 F7 8B 00 00 CD E4 00 00 00 00 50 4C 45 41 ............PLEA
0020 53 45 20 52 45 53 50 4F 4E 53 45 00 00 00 SE RESPONSE...
>>>
20. SYNスキャンとは?
サーバにログを残さずにポートスキャン出来る『ステルススキャンの一種』です。
普通にポートスキャンをすると、ログが残ってしまうため、それを回避するため、
通信の手順の最後にキャンセルを意味するパケットを送ることにより手順を
中断させ、ログを残さないようにする。
一般的(3ウェアハンドシェイク) SYN スキャン
RST
http://e-words.jp/w/E38397E383ADE38388E382B3E383AB.html ,
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Tcp_normal.svg 参照
21. For Example:
>>> sr(IP(dst="192.168.1.1")/
TCP(sport=RandShort(),dport=[22,80,443],flags="S"))
Explanation:
ターゲットを”192.168.1.1”として、
送信元のポートはランダムなものにして、
送信先のポートは 22(SSH)、80(HTTP)か443(HTTPS)
にして、FLAGは”S”(SYNフラグ)を送る。
どのような反応になるか見ましょう。
22. sprintf()関数を使って、レスポンスのフラグがどのようになっているか見ると、
www(HTTP)と HTTPSはポートが閉まっていること(RA)がわかります。
SSHはどうやら、開いているようなので後で閉じようと思います←
>>> ans,unans=_
>>> ans.summary(lambda(s,r): r.sprintf("%TCP.sport% -> %TCP.dport% : %TCP.flags%"))
ssh -> 12936 : SA
www -> 12044 : RA
https -> 13527 : RA
>>>
root@bt:~$ nmap -p 22 80 443 192.168.1.1
Starting Nmap 6.25 ( http://nmap.org ) at 2013-02-26 10:33 EST
Invalid target host specification: 80
Invalid target host specification: 443
Nmap scan report for 192.168.1.1
Host is up (0.00044s latency).
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds
念のために、本当に合ってるか nmapで調べた所、
22/tcp open ssh とsshだけポートが開いてることが確認出来ました。