头歌----恶意流量监测

2024-06-22 08:51:09 浏览数 (2)

第一关:RE库的使用

任务描述

本关任务:编写一个能正则匹配出 ip 地址的小程序。

相关知识

为了完成本关任务,你需要掌握:

  1. re 的主要功能函数;
  2. re.search 函数;
  3. 例子。
re 的主要功能函数

常用的功能函数包括: compilesearchmatchsplitfindall(finditer)sub(subn)

re.search 函数

re.search 扫描整个字符串并返回第一个成功的匹配。

函数语法:

  1. re.search(pattern, string, flags=0)

函数参数说明:

参数

含义

pattern

匹配的正则表达式

string

要匹配的字符串。

flags

标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

例子
  1. import re
  2. line=&#https://cloud.tencent.com/developer/article/x27;www.python.org&#https://cloud.tencent.com/developer/article/x27;
  3. trueIp =re.search(&#https://cloud.tencent.com/developer/article/x27;python&#https://cloud.tencent.com/developer/article/x27;,line)
  4. print(trueIp)

输出: www.python.org <_sre.SRE_Match object; span=(0, 11), match=&#https://cloud.tencent.com/developer/article/x27;192.168.1.1&#https://cloud.tencent.com/developer/article/x27;>

编程要求

根据提示,在右侧编辑器 begin-end 内补充代码,使用 re.search 匹配出 IP 地址。

测试说明

平台会对你编写的代码进行测试: 代码请写在 Evidence 函数里,path 为存放 IP 的文件路径,文件内容为:192.168.1.1 请读取出文件内容,并用 re.search 匹配并输出结果;

预期输出: <re.Match object; span=(0, 11), match=&#https://cloud.tencent.com/developer/article/x27;192.168.1.1&#https://cloud.tencent.com/developer/article/x27;>

代码语言:javascript复制
import re

def Evidence(path):
    with open(path, &#https://cloud.tencent.com/developer/article/x27;r&#https://cloud.tencent.com/developer/article/x27;) as file:
        content = file.read()
        ip_pattern = r&#https://cloud.tencent.com/developer/article/x27;d{1,3}.d{1,3}.d{1,3}.d{1,3}&#https://cloud.tencent.com/developer/article/x27;
        ip_match = re.search(ip_pattern, content)
        print(ip_match)

第2关:pcap 包的读取

任务描述

本关任务:编写一个能读取 pcap 文件的程序

相关知识

为了完成本关任务,你需要掌握:如何读取 pcap 文件。

pcap 文件是常用的数据报存储格式,可以理解为就是一种文件格式,只不过里面的数据是按照特定格式存储的,所以我们想要解析里面的数据,也必须按照一定的格式。

编程要求

根据提示,在右侧编辑器 begin-end 内补充代码,读取 pcap 文件,并对其进行解析,输出要求的内容。

测试说明

要求输出以 192.168.8.130 为源地址和目标地址的包出现的次数; 预期输出: IP:192.168.8.130发了10次包,接收了9次包

代码语言:javascript复制
from scapy.all import *
from scapy.layers.inet import *
from scapy.layers.l2 import *

def Evidence(path):
    packets = rdpcap(path)
    src_ip = "192.168.8.130"
    count_sent = 0
    count_received = 0

    for packet in packets:
        if IP in packet:
            if packet[IP].src == src_ip:
                count_sent  = 1
            if packet[IP].dst == src_ip:
                count_received  = 1

    print(f"IP:{src_ip}发了{count_sent}次包,接收了{count_received}次包")

第三关:pcap包的使用

任务描述

本关任务:编写一个能从 pcap 包检测 XSSSQL 注入攻击的小程序。

相关知识

为了完成本关任务,你需要掌握:1.re库的使用,2.pcap包的读取。

re.compile 函数

compile 函数用于编译正则表达式,生成一个正则表达式(Pattern)对象,供 match()search() 这两个函数使用。

语法格式为:

  1. re.compile(pattern[, flags])

参数

含义

pattern

一个字符串形式的正则表达式

flags

可选,表示匹配模式,比如忽略大小写,多行模式等

flag 具体参数为:

属性和方法

描述

re.S(DOTALL)

使.匹配包括换行在内的所有字符

re.I(IGNORECASE)

使匹配对大小写不敏感

re.L(LOCALE)

做本地化识别(locale-aware)匹配,法语等

re.M(MULTILINE)

多行匹配,影响^和$

re.X(VERBOSE)

该标志通过给予更灵活的格式以便将正则表达式写得更易于理解

re.U

根据Unicode字符集解析字符,这个标志影响w,W,b,B

例子
  1. pattern = re.compile(&#https://cloud.tencent.com/developer/article/x27;匹配XSS攻击的正则表达式&#https://cloud.tencent.com/developer/article/x27;, flags=re.)
  2. result_list = pattern.findall(data)
  3. for https://cloud.tencent.com/developer/article/x in result_list:
  4. print (&#https://cloud.tencent.com/developer/article/x27;恶意攻击序号:&#https://cloud.tencent.com/developer/article/x27; str(count_bad))
  5. print (&#https://cloud.tencent.com/developer/article/x27;检测到XSS(跨站脚本攻击)!&#https://cloud.tencent.com/developer/article/x27;)
  6. print (data)
编程要求

有一个 pcap 文件 src/step3/1.pcap,需要检测其中的恶意流量。 请对其进行检测并按返回测试说明的格式返回。检测到一次攻击将记录一次序号,先检测 XSS 再检测 SQL 注入。 测试数据由评测系统读取并传递给 Evidence 函数,期间产生的输出将会与规定的输出进行比较,详细要求请见测试说明。 提示: 其中 XSS 攻击使用的 payload 有:

  1. <script>alert(1)</script>
  2. <iMg src=https://cloud.tencent.com/developer/article/x onError=Alert(1) />

其中 SQL 注入使用的 payload 有:

  1. admin&#https://cloud.tencent.com/developer/article/x27; union select user,password from users--
  2. -3 uNion SeleCt user(),database(),3,4```

同时在 pcap 解析出的数据中,特殊符号是经过浏览器 url 编码的,如:

  1. "<"号会变成<
  2. admin&#https://cloud.tencent.com/developer/article/x27; union select user,password from users-- 会变成
  3. admin' union select user,password from users--+
测试说明

测试输入:无; 预期输出: 恶意攻击序号:1 检测到XSS(跨站脚本攻击)! username=&password=123&Login=Login 恶意攻击序号:2 检测到SQL注入攻击! username=-3 uNion SeleCt user(),database(),3,4&password=123&Login=Login

代码语言:javascript复制
from scapy.all import *
import re

def Evidence(pcap_path):
    # 请在此添加实现代码 #
    # ********** Begin *********#
    datas = []
    count_bad = 0  # 检测到的攻击数量
    packets = rdpcap(pcap_path)  # 读取pcap文件
    for packet in packets:
        if &#https://cloud.tencent.com/developer/article/x27;TCP&#https://cloud.tencent.com/developer/article/x27; in packet:
            datas = str(packet[&#https://cloud.tencent.com/developer/article/x27;TCP&#https://cloud.tencent.com/developer/article/x27;].payload).split(&#https://cloud.tencent.com/developer/article/x27;rn&#https://cloud.tencent.com/developer/article/x27;)
            for data in datas:
                # 检测XSS onerror/**/= onerror=
                pattern = re.compile(&#https://cloud.tencent.com/developer/article/x27;(\<|<)(body|layer|div|meta|style|base|object|input|img|a|iframe|svg|tehttps://cloud.tencent.com/developer/article/xtarea)(.*?)(onmouseover|onerror|onload|onfocus)(\=|=)|(\<|<)script(\>|>)(javascript:|alert|confirm|prompt|autofocus)(\(|())&#https://cloud.tencent.com/developer/article/x27;, flags=re.IGNORECASE)
                result_list = pattern.findall(data)
                for https://cloud.tencent.com/developer/article/x in result_list:
                    count_bad  = 1
                    print(&#https://cloud.tencent.com/developer/article/x27;恶意攻击序号:&#https://cloud.tencent.com/developer/article/x27;   str(count_bad))
                    print(&#https://cloud.tencent.com/developer/article/x27;检测到XSS(跨站脚本攻击)!&#https://cloud.tencent.com/developer/article/x27;)
                    print(data)
                # 检测SQL注入
                pattern = re.compile(&#https://cloud.tencent.com/developer/article/x27;(?:(union(.*?)select))|select. (from|limit)|(?:from\W information_schema\W)|(?:((?:current_)(user|database|schema|connection_id)))\s*$|into(\s ) (?:dump|out)file\s*|group\s by. \(|sleep\((\s*)(\d*)(\s*)$|(having|rongjitest)&#https://cloud.tencent.com/developer/article/x27;, flags=re.IGNORECASE)
                result_list = pattern.findall(data)
                for https://cloud.tencent.com/developer/article/x in result_list:
                    count_bad  = 1
                    print(&#https://cloud.tencent.com/developer/article/x27;恶意攻击序号:&#https://cloud.tencent.com/developer/article/x27;   str(count_bad))
                    print(&#https://cloud.tencent.com/developer/article/x27;检测到SQL注入攻击!&#https://cloud.tencent.com/developer/article/x27;)
                    print(data)
    # ********** End **********#

0 人点赞