> 我只想说这个比赛有毒。。。每次去参加全国总决赛都会分手。。。以后应该都不会再参加这个比赛了(恋爱脑发作中) **注意!** 比赛时间为2024年11月,因部分原因现在公开所有内容,排名可见下图,当时还没专升本,所以还在信阳师范大学 [](https://download.imxbt.cn/upload/8ed17ef01ab07caae4d0065ac61bc261.png) # 网络安全设备 ## 防火墙IP地址配置 通过ssh登录防火墙cli界面找到默认管理接口,将接口IP地址所属的网段进行md5加密后提交 ``` display interface ``` 输出中含有 ``` Internet Address is 192.168.1.1/24 ``` 答案为 `192.168.1.0/24` ## 防火墙web管理页面配置 在防火墙cli界面配置G 0/0/0接口开启https服务并将命令进行md5加密 ``` int g 0/0/0 service-manage https permit ``` ## 防火墙路由配置 防火墙上配置了一条缺省路由,请找到该路由并将下一跳的IP地址(不包含掩码)进行md5加密 ``` display ip routing-table ``` 显示有Destination/Mask,0.0.0.0就是缺省路由,NextHop的IP就是了 ## 防火墙策略配置 分析防火墙接口所属区域,并据此找到实现通信合理的安全策略,并将该条策略中的会话老化时间进行md5加密 ### 查找所属区域 ``` display interface display zone ``` ### 查找安全策略 ``` display security-policy rule all ``` **Web界面操作**: - 导航至"策略" > "安全策略" - 根据源区域和目的区域筛选策略 - 例如:如果要从trust区域访问untrust区域,查找源区域为trust,目的区域为untrust的策略 ### 查找策略中的会话老化时间 **Web界面操作**: - 在安全策略列表中找到目标策略 - 点击策略名称进入详情 - 在"高级"或"会话设置"部分查找"会话老化时间"或"会话超时时间" ``` display security-policy rule <策略名称> display firewall session aging-time # 查看各类协议的默认老化时间 ``` ## 防火墙NAT地址转换 作为网络安全管理员,你需要在操作机上通过 IE 浏览器访问防火墙 WEB 管理界面(https://ip:8443)或使用 SSH 登录 CLI,进入防火墙的 NAT 地址转换管理模块。请在该模块中找到隐藏的 flag 信息,并将该 flag 值提交。 1. **进入NAT管理模块**: - 导航至"策略" > "NAT" > "NAT策略" - 或"网络" > "NAT" 2. **查找隐藏flag**: - 仔细检查每个NAT规则的高级设置或备注字段 - 尝试右键点击页面元素并选择"检查"或"查看源代码" - 在页面源代码中搜索关键词如"flag"、"hidden"、"secret"等 ``` int g 0/0/0 service-manage https permit ``` 或者直接在cli输入 ``` display nat-policy rule all #显示所有规则 ``` ## 防火墙SSH审计配置 在防火墙中,除默认的 admin 账户外,还额外配置了一个具备 SSH 远程访问权限的审计用户。请查找该备用用户,并将该用户名转为全小写后,用 MD5 算法加密 1. **查看用户列表**: - 导航至"系统" > "用户管理/管理员" > "用户" - 查看所有配置的用户账户 2. **筛选审计用户**: - 查找用户类型为"审计"或"Audit"的账户 - 检查每个用户的权限设置,特别是SSH访问权限 ## 防火墙抗 SYN FLOOD 防护配置 防火墙中启用了抗 SYN FLOOD 攻击防护功能,该功能用于抵御基于 SYN 泛洪的拒绝服务攻击。请定位该功能模块,并将其设定的 SYN FLOOD 阈值进行 MD5 加密 - 导航至“策略” - “安全防护” - “安全防范” ## 防火墙 Syslog 日志服务器配置 防火墙设置了 Syslog 日志转发功能,将系统日志上传至指定的日志服务器。请查找该配置中目标 Syslog 服务器的 IP 地址,并将该 IP 地址进行 MD5 加密 - 导航至“系统” - “日志配置” - “日志配置” ## 防火墙 VPN 隧道配置 防火墙中配置了 VPN 隧道用于安全远程访问管理网络。作为安全管理员,请进入防火墙的 VPN 管理模块,在配置页面内查找用于 VPN 连接验证的证书指纹或隐藏信息flag - 导航至“网络” - “SSL VPN/IPSec/L2TP” # 资产梳理 ## 关键资产网络设备识别 企业资产清单中记录着所有网络设备的详细信息,除了核心设备外,还存在一台备份网络交换机。请查找该备份设备的设备名称,将其转换为全小写字符串 ``` nmap 192.168.239.0/24 ``` 192.168.239.130 ## 域名资产信息审核 企业还建立了域名资产管理系统,用于记录所有对外服务的域名信息。其中,一个域名的解析记录中嵌入了 flag 数据 ```powershell ipconfig /displaydns | findstr "example.com" dig @内部DNS_IP example.com TXT nslookup -type=TXT example.com 内部DNS_IP ``` # 安全加固 ## Linux安全基线加固 1. 确保没有空口令账号 2. 确保密码最长过期天数为90天,最小过期天数为80天,最小长度为8,密码过期警告天数为7天 3. 确保不能通过root进行远程ssh登录 4. 确保uid为0的用户只有root 5. 确保不存在.netrc和.rhosts文件 6. 确保所有与umask相关的配置文件中的umask值都是022 ```shell #空口令账号 cat /etc/shadow cat /etc/passwd | grep sh userdel username -f ``` ```shell #密码策略 nano /etc/login.defs ``` ``` PASS_MAX_DAYS 90 PASS_MIN_DAYS 80 PASS_MIN_LEN 8 PASS_WARN_AGE 7 ``` ```shell #禁止root登录 nano /etc/ssh/sshd_config ``` ```ini PermitRootLogin no ``` ```shell systemctl restart sshd ``` ```shell #uid为0 awk -F: '($3 == 0) {print $1}' /etc/passwd usermod -u 1001 test ``` ```shell # 查找并删除所有用户的.netrc文件 sudo find / -name ".netrc" -exec rm -f {} \; # 查找并删除所有用户的.rhosts文件 sudo find / -name ".rhosts" -exec rm -f {} \; ``` ```shell # 检查并设置全局umask sudo sed -i 's/umask [0-9]\+/umask 022/g' /etc/profile sudo sed -i 's/umask [0-9]\+/umask 022/g' /etc/bashrc sudo sed -i 's/umask [0-9]\+/umask 022/g' /etc/csh.cshrc # 检查用户目录下的配置文件 for user in $(cut -d: -f1 /etc/passwd); do sudo sed -i 's/umask [0-9]\+/umask 022/g' /home/$user/.[baz]* 2>/dev/null sudo sed -i 's/umask [0-9]\+/umask 022/g' /home/$user/.profile 2>/dev/null done # 设置默认umask echo "umask 022" | sudo tee -a /etc/profile echo "umask 022" | sudo tee -a /etc/bashrc ``` ## Linux 网络策略加固 1. Linux 服务器需要尽量避免在内网中被发现,请使用 iptables 禁止 icmp 协议,降低 linux 服务器被发现的几率 2. Linux 服务器本地搭建了一个 redis 服务,请用 iptables 或其他方法禁止任何外部网络来访问 redis 的默认服务端口,但本地可以访问 ```shell #ICMP iptables -A INPUT -p icmp --icmp-type any -j DROP #Redis iptables -A INPUT -p tcp --dport 6379 -s 127.0.0.1 -j ACCEPT iptables -A INPUT -p tcp --dport 6379 -j DROP iptables-save | sudo tee /etc/iptables.rules ``` ```shell nano /etc/redis/redis.conf bind 127.0.0.1 protected-mode yes systemctl restart redis ``` ## Windows关闭不必要的端口 win 安全加固服务器目前不需要用户进行远程登陆操作,请关闭服务器的 3389 端口 服务。远程登陆服务端口关闭后,点击主机桌面的”远程登陆检查”脚本将会弹出一个 windows 窗口。如 3389 端口关闭,窗口会输出一个 flag 信息,将 flag 提交,如窗口输 出其他信息,则说明远程登陆服务端口并未关闭 ### 方法一:通过系统设置禁用远程桌面 1. 右键点击"此电脑"或"我的电脑",选择"属性" 2. 在左侧菜单中点击"远程设置" 3. 在"远程"选项卡中,选择"不允许远程连接到此计算机" 4. 点击"应用",然后点击"确定" ### 方法二:通过防火墙阻止 3389 端口 1. 打开"控制面板" > "Windows Defender 防火墙" > "高级设置" 2. 在左侧选择"入站规则",然后右侧点击"新建规则" 3. 选择"端口",点击"下一步" 4. 选择"TCP",输入"3389",点击"下一步" 5. 选择"阻止连接",点击"下一步" 6. 保持所有配置文件选中(域、专用、公用),点击"下一步" 7. 输入规则名称如"阻止远程桌面3389端口",点击"完成" ### 方法三:通过注册表禁用远程桌面服务(高级方法) 1. 按 Win+R,输入 `regedit` 打开注册表编辑器 2. 导航到:`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server` 3. 找到 `fDenyTSConnections` 值,将其设置为 `1`(如果不存在则新建一个DWORD值) 4. 重启服务器使更改生效 ## nginx 安全加固 Linux 服务器部署了一个 nginx 服务,请修改 nginx 配置文件,使 nginx 禁止访问/backup 路径下的所有文件。 ```shell vim /etc/nginx/nginx.conf ``` ```yaml location = /backup { deny all; access_log off; } ``` ## nginx 安全加固 2 Linux 服务器部署了一个 nginx 服务,请修改 nginx 配置文件,使 nginx 只允许 GET、POST 请求(注:其他请求方式不返回 200 状态码即算完成要求) ```shell location / { # 允许的方法列表 if ($request_method !~ ^(GET|POST)$ ) { deny all; } } ``` ```shell location / { # 明确列出允许的HTTP方法 GET 和 POST,拒绝所有其他请求 if ($request_method !~* "^(GET|POST)$") { return 444; } } ``` # 应急响应 ## 查找异常进程所在目录 top找CPU最高的COMMAND,然后输入下面指令出来的路径就是了 ```shell ps -ef | grep PID ``` ## 寻找异常守护进程 1. **检查进程父子关系**: ```shell pstree -p ``` ```shell ps -ef --forest ps -aux ``` 查找高CPU进程的父进程,很可能是守护进程 2. **检查系统服务**: ```shell systemctl list-units --type=service --all ``` ```shell service --status-all ``` 查看可疑服务 3. **检查定时任务**: ```shell crontab -l ls /etc/cron*/* ``` 查看是否有定时重启进程的任务 4. **检查启动项**: ```shell ls -la /etc/init.d/ /etc/rc*.d/ ls -la ~/.config/autostart/ ``` ## 常见可疑守护进程位置 - /etc/systemd/system/ 下的异常服务 - /usr/lib/systemd/system/ 下的异常服务 - /etc/init.d/ 下的异常脚本 - /etc/rc.local 中添加的启动项 # 日志分析 ## apache 服务中,访问量最高的 IP 信息 访问 web 服务频率较大的 IP 往往需要重点关注,请分析日志/var/log/httpd/access_log找到访问量最高的 IP。并将 ip 进行 md5 加密后,将小写的 md5 密文进行作为 flag 信息进行提交 ```shell awk '{print $1}' /var/log/httpd/access_log | sort | uniq -c | sort -nr | head -n 1 ``` ## apache 服务中的恶意访问情况 访问 web 服务的客户端中,可能会发送恶意的请求参数,这些恶意请求需要安全工 程师定期进行进行统计、记录和分析。请分析日志/var/log/httpd/access_log 是否有包含 eval、cmd、func、cgi-bin、jndi、excute、%20、system、exec、passthru、shell_exec、popen、 proc_open 这些常见恶意请求关键词的请求记录(注:包含恶意请求关键词的请求记录 即为恶意请求),并找到恶意请求访问频率最高的 path 路径(注:path 路径不包含网址、 分隔符和查询参数,/path 中的“/”不是分隔符) ```shell grep -iE "eval|cmd|func|cgi-bin|jndi|excute|%20|system|exec|passthru|shell_exec|popen|proc_open" /var/log/httpd/access_log | awk -F'"' '{split($2,a," "); sub(/\?.*/,"",a[2]); print a[2]}' | sort | uniq -c | sort -nr | head -n 1 | awk '{print $2}' ``` ```shell grep -iE "eval|cmd|func|cgi-bin|jndi|excute|%20|system|exec|passthru|shell_exec|popen|proc_open" /var/log/httpd/access_log > malicious_requests.txt awk '{print $7}' malicious_requests.txt > raw_paths.txt sed 's/\?.*$//' raw_paths.txt > cleaned_paths.txt #提取并清理路径 sed 's|^https\?://[^/]*||' cleaned_paths.txt > final_paths.txt #去除协议和域名 sort final_paths.txt | uniq -c | sort -nr > path_frequencies.txt #统计路径频率 head -n 1 path_frequencies.txt | awk '{print $2}' ``` ## nginx 服务中,访问量最高的 IP 信息 访 问 web 服 务 频 率 较 大 的 IP 往 往 需 要 重 点 关 注 , 请 分 析 日 志/var/log/nginx/www.zwxa.com_access.log 统计访问量最高 IP 对 web 服务的访问次数。并将次数进行 md5 加密 ```shell awk '{print $1}' /var/log/nginx/www.zwxa.com_access.log | sort | uniq -c | sort -nr > ip_counts.txt top_ip=$(head -n 1 ip_counts.txt | awk '{print $2}') top_count=$(head -n 1 ip_counts.txt | awk '{print $1}') ``` ## nginx 服务中的扫描探测情况 攻击者往往会使用 HEAD 请求来探测 web 服务的路径是否存在,作为安全工程师, 你 需 要 初 步 了 解 web 服 务 被 外 部 扫 描 的 情 况 。 请 分 析 日 志 /var/log/nginx/www.zwxa.com_access.log 找到 web 服务被 HEAD 请求次数最高的 path 路 径信息。并将 path 路径进行 md5 加密 ```shell grep " HEAD /" /var/log/nginx/www.zwxa.com_access.log > head_requests.txt awk '{print $7}' head_requests.txt > paths.txt sed 's/\?.*$//' paths.txt > cleaned_paths.txt #可选 sort cleaned_paths.txt | uniq -c | sort -nr > path_counts.txt head -n 1 path_counts.txt | awk '{print $2}' ``` 31 ## nginx 中的后台登陆服务 nginx 服务在 path 路径/login 和/admin/login 都提供了后台登陆服务,并使用 POST方 式 来 传 递 登 陆 数 据 ( 比 如 用 户 名 、 密 码 等 ) , 请 分 析 日 志/var/log/nginx/www.zwxa.com_access.log 找到进行后台登陆操作次数最多的 IP ```shell grep -E 'POST /login|POST /admin/login' /var/log/nginx/www.zwxa.com_access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 1 ``` ## nginx 中的后台操作记录 在 nginx 服务中,以/admin 开头的 path 路径都是后台操作,同时后台参数都是已 POST 请求来传递数据。请分析日志/var/log/nginx/www.zwxa.com_access.log 找到除后台 登陆外,频率最多的后台操作,并提交此后台操作访问的详细 path 路径信息 ```shell cat /var/log/nginx/www.zwxa.com_access.log | \ grep '/admin/' | awk '{print $7}' | grep -v "/admin/login" | sort | uniq -c | sort -nr ``` /admin/upload ## 定位有哪些 IP 在爆破 作为一个安全工程师,你需要知道有哪些 IP 在暴力破解服务器的远程登陆密码。请分析目录/var/log/secure_anaylist 下所有的 secure 文件,找到登陆失败次数最多的 IP ```shell grep -h "Failed password" /var/log/secure_analyst/secure* | \ grep -E -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | \ sort | uniq -c | sort -nr | \ head -n 1 | awk '{print $2}' ``` ```shell cat /var/log/secure_analyst/* > all_secure_logs.log grep 'Failed password for' all_secure_logs.log | awk '{for(i=1;i<=NF;i++) if($i~/^[0-9]/) print $i}' > ip_addresses.txt cat ip_addresses.txt | sort | uniq -c | sort -nr head -n 5 ip_addresses.txt ``` ## 定位爆破用户名字典 在排查远程登陆暴力破解时,除了 IP 信息外,同时需要了解外部用户在针对什么用户名进行爆破。分析目录/var/log/secure_anaylist 下所有的 secure 文件,找到登陆失败次数最多的用户名 ```shell grep "Failed password" /var/log/secure > failed_logins.log awk '{print $10}' failed_logins.log | sort | uniq -c | sort -nr | head -n 5 ``` redis ## 定位增加的用户 linux 服务器在今年 5 月曾经添加过一个用户,请分析目录/var/log/secure_anaylist下所有的 secure 文件,找到这个用户名。 ```shell # 例如从5月1日至5月31日: for i in {01..31}; do grep "May ${i}.*useradd" /var/log/secure > secure_$i.log; done ``` ```shell grep -i "May.*useradd\|May.*new user" /var/log/secure_analyst/secure* ``` tss ## 定位经常登陆的 IP linux 服务器的远程 ssh 登陆地域通常是固定的,请分析目录/var/log/secure_anaylist下所有的 secure 文件,找到登陆成功次数最多的 IP ```shell # 搜索所有secure文件中的成功登录记录并提取IP grep -h "Accepted" /var/log/secure_analyst/secure* | awk '{print $11}' | sort | uniq -c | sort -nr ``` print \$10或者\$11就是IP了 ## 登陆 请综合分析目录/var/log/secure_anaylist 下所有的 secure 文件,判断 linux 服务是否存在登陆密码被暴力破解成功的情况(注:判断依据为登陆失败的 IP 出现在了登陆成功的 IP 列表中,即为登陆密码被暴力破解成功) ```shell # 提取所有失败的SSH尝试IP(包括无效用户和错误密码) grep -h "Failed password" /var/log/secure_analyst/secure* | \ awk '{print $11}' | \ sort | uniq > failed_ips.txt # 提取所有成功的SSH登录IP grep -h "Accepted" /var/log/secure_analyst/secure* | \ awk '{print $11}' | \ sort | uniq > success_ips.txt # 找出可疑IP(既失败过又成功登录的IP) grep -F -f failed_ips.txt success_ips.txt | sort | uniq > suspicious_ips.txt # 统计可疑IP的失败和成功次数 echo "可疑IP分析结果:" echo "IP地址 | 失败次数 | 成功次数 | 最后成功登录时间" echo "------------------------------------------------" for ip in $(cat suspicious_ips.txt); do fail_count=$(grep -c "$ip" failed_ips.txt) success_count=$(grep -c "$ip" success_ips.txt) last_success=$(grep "$ip" /var/log/secure_analyst/secure* | grep "Accepted" | tail -1 | awk '{print $1,$2,$3}') printf "%-15s | %-9s | %-9s | %s\n" "$ip" "$fail_count" "$success_count" "$last_success" done ``` no # 其他内容 ## FTP密码破解 内网其中一个服务器中存在 ftp 服务,其管理的一个用户 admin 密码过于简单,请 尝试破解,并且在破解完成后,使用 admin 用户登陆 ftp 拿到 flag.txt 文件的内容并提交 ```powershell hydra -l admin -P /usr/share/wordlists/rockyou.txt ftp://目标IP -t 4 -vV ``` ## MySQL 连接尝试复杂统计 在 MySQL 通信协议中,每当客户端与服务端建立连接时,服务端会发送 ServerGreeting 数据包。请分析流量文件 mysql_analyze.cap,统计所有客户端与 MySQL 服务端建立连接的尝试次数,但只统计那些在一分钟内完成的连接操作 ### 1. 过滤MySQL连接请求 首先在Wireshark中应用以下显示过滤器: ``` mysql.command == 1 ``` 这会显示所有MySQL客户端发起的连接请求(`Login Request`数据包)。 ### 2. 识别ServerGreeting响应 MySQL服务端在收到连接请求后会发送`Server Greeting`数据包,过滤: ``` mysql.command == 0 ``` ### 3. 统计一分钟内完成的连接 我们需要统计那些在Login Request后一分钟内收到Server Greeting的连接尝试。 #### 使用Wireshark内置统计功能 1. 点击"统计" → "对话" 2. 选择"TCP"选项卡 3. 查找MySQL服务端口(通常是3306)的对话 4. 观察每个对话的持续时间(应小于60秒) ## 登录时指定数据库名称的异常提取 在 MySQL 登录过程中,部分连接使用-D 参数指定登录数据库。请分析流量文件 mysql_analyze.cap,找出使用-D 参数时出现频率最低且数据库名称中含有数字的记录。 ## 使用Wireshark内置功能 ### 1. 打开流量文件 - 启动Wireshark - 点击"File" → "Open" → 选择`mysql_analyze.cap` ### 2. 过滤包含数据库名的登录请求 在过滤栏输入: ``` mysql.command == 1 && mysql.schema ``` 按回车应用过滤器 ### 3. 导出数据库名列表 1. 点击"File" → "Export Packet Dissections" → "As CSV..." 2. 在导出对话框中: - 勾选"Packet summary line" - 只勾选"MySQL"协议相关字段 3. 保存为`mysql_logins.csv` ### 4. 使用Excel分析 1. 打开导出的CSV文件 2. 创建数据透视表: - 行:`mysql.schema` - 值:计数 3. 筛选包含数字的数据库名: - 添加筛选器 → 文本筛选 → "包含" → 输入任意数字(0-9) 4. 按计数升序排序,最低频率的即为所需结果 ## 高级 SQL 查询中表名混淆统计 MySQL 查询操作中,表名有时会经过混淆转义(例如反引号包裹或大小写混合)。 请分析数据包 mysql_analyze.cap 中 SQL 查询命令,找出经过混淆后实际访问次数最多 的原始表名。 ### 1. 提取所有SQL查询 使用Wireshark显示过滤器: ``` mysql.command == 3 ``` 这会显示所有SQL查询命令(Query packet)。 ### 2. 识别表名混淆模式 常见混淆方式: - 反引号包裹:``table_name`` - 大小写混合:`Table_Name`、`tAbLe` - 包含特殊字符:`table@name` - 数字后缀:`table1` ### 3. 使用Wireshark统计表名出现频率 #### 方法一:使用"分组列表"功能 1. 点击"Statistics" → "Conversations" 2. 切换到"TCP"选项卡 3. 找到MySQL端口(通常3306)的通信 4. 右键 → "Apply as Filter" → "Selected" 5. 点击"Statistics" → "Packet Lengths" 6. 观察包含表名的数据包 ## 分片传输图片文件还原与完整性校验 在“数据库审计流量数据包”文件夹中,除了 mysql_analyze.cap 外,还有一个辅助 取证流量文件 ComPu.cap。该文件中记录了一次经过分片传输并重组的图片文件。请利 用该流量包还原出完整的传输图片文件,对文件内容进行完整性校验,计算图片文件的 MD5 值 ### 1. 识别图片传输会话 首先在Wireshark中打开`ComPu.cap`文件,分析传输协议: 1. **过滤HTTP流量**: ``` http ``` 或尝试其他常见图片传输协议: ``` tcp.port == 80 || tcp.port == 443 || tcp.port == 8000 ``` 2. **查找文件传输特征**: - 查找`Content-Type: image/`开头的响应头 - 查找`multipart/`内容类型的分片传输 ### 2. 提取分片数据 #### 方法一:使用Wireshark导出对象 1. 点击"File" → "Export Objects" → "HTTP..." 2. 在弹出窗口中查看所有HTTP传输的文件 3. 识别图片文件(可能显示为片段) 4. 选择所有相关片段并导出 #### 方法二:手动重组TCP流 1. 右键点击相关数据包 → "Follow" → "TCP Stream" 2. 在弹出窗口中: - 显示数据为"Raw" - 注意检查传输方向(客户端到服务端或相反) 3. 保存原始数据为二进制文件 ### 3. 重组图片文件 假设我们已导出多个分片文件(`part1.dat`, `part2.dat`等): ```bash # 在Linux/macOS或Windows的WSL中: cat part*.dat > reconstructed_image.jpg # 或在Windows PowerShell中: Get-Content -Path part*.dat -Encoding Byte | Set-Content -Path reconstructed_image.jpg -Encoding Byte -NoNewline ``` ### 4. 完整性校验 计算重组文件的MD5值: ```bash # Linux/macOS/Windows(WSL): md5sum reconstructed_image.jpg # Windows PowerShell: Get-FileHash -Algorithm MD5 reconstructed_image.jpg ``` ### 5. 验证图片完整性 1. 尝试用图片查看器打开文件 2. 如果损坏,可能需要: - 检查文件头尾是否完整 - 确认分片顺序正确 - 检查传输是否使用base64编码(需要解码) ## 自动化脚本(Python实现) ```python import hashlib from scapy.all import * def extract_and_reconstruct(pcap_file, output_file): # 读取pcap文件 packets = rdpcap(pcap_file) # 存储分片数据 fragments = [] for pkt in packets: if pkt.haslayer(Raw): payload = bytes(pkt[Raw]) # 识别图片分片特征(可根据实际情况调整) if b'\xff\xd8' in payload or b'\x89PNG' in payload: fragments.append(payload) # 重组文件 if fragments: with open(output_file, 'wb') as f: for fragment in sorted(fragments, key=lambda x: x.find(b'\xff\xd8')): f.write(fragment) # 计算MD5 with open(output_file, 'rb') as f: md5 = hashlib.md5(f.read()).hexdigest() print(f"文件已重组保存为 {output_file}") print(f"MD5校验值: {md5}") else: print("未找到图片分片数据") # 使用示例 extract_and_reconstruct('ComPu.cap', 'reconstructed_image.jpg') ```
没有评论