2024春秋杯冬季赛day2writeup_cyi

news/2025/1/18 19:39:08/文章来源:https://www.cnblogs.com/xhzccy/p/18678762

 

解题过程

misc Weevil's Whisper

操作内容:

筛选http流,一开始就把马上传了

搜索可知这是weevely的webshell

这篇讲的很详细了

https://xz.aliyun.com/t/11246?time__1311=Cq0xRD0Q0QD%3DdGNeeeqk75YitmczLbD#toc-5

拿了这篇的解密脚本

https://blog.csdn.net/m0_74091653/article/details/144152597

习惯性从后面解起

如该题使用自己编写的脚本代码请详细写出,不允许截图

 

<?php

$k="161ebd7d";$kh="45089b3446ee";$kf="4e0d86dbcf92";$p="lFDu8RwONqmag5ex";

function x($t,$k){

$c=strlen($k);

$l=strlen($t);

$o="";

for($i=0;$i<$l;){

  for($j=0;($j<$c&&$i<$l);$j++,$i++){

    $o.=$t{$i}^$k{$j};

    }

    }

    return $o;

    }

$msg = "Sap6risomCodHP/PqrQaqvueeU+wURkueAeGLStP+bQE+HqsLq39zTQ2L1hsAA==";

echo(@gzuncompress(@x(@base64_decode($msg),$k)));

?>

flag值:

flag{arsjxh-sjhxbr-3rdd78dfsh-3ndidjl}

misc NetHttP

操作内容:

一开始看到zmxh,直接手搓,最后来个fakeflag,人傻了

流量逻辑挺简单,上来差不多直接rce,读了个私钥文件出来,后面就是echo base64编码后的mw文件和假flag文件

调教gpt

先用tshark导出,长这样

tshark -r "D:\contest\NetHttP.pcapng" -Y "http" -T fields -e tcp.stream -e frame.number -e frame.len -e http.request.uri -e http.response.code > http_traffic.txt

帧长度为465和469都是密文的

Base64解码得到

S0I3iWhvszKbOM/OalKTA0fpm5O5chVVnYGyKd5nV4erAzRbV6V6w8b/UiOfQEc3Ijh00hFjYFU1HaxNub9GnlPS/lcam5mATkf2sJS6JgpJo6AShVRxWDYKKrojeUeBZj5MEPI8/4DGGGuHFxmx2bxAahdDe1cGnjTZGWONpNI=

证书文件,不过是加过密的

Key在流量最开始:gdkfksy05lx0nv8dl

解密得到私钥

https://www.ssleye.com/ssltool/priv_get.html

如该题使用自己编写的脚本代码请详细写出,不允许截图

from collections import defaultdict

import re

import base64

# 读取提取的 HTTP 流量数据

with open("C:\\Users\\86139\\Desktop\\http_traffic.txt", "r") as file:

lines = file.readlines()

# 按流号组织数据

stream_data = defaultdict(list)

for line in lines:

# 使用 strip() 去除换行符,然后按制表符分割

fields = line.strip().split("\t")

# 检查字段数量

if len(fields) == 5:

stream_id, frame_num, frame_len, request_uri, response_code = fields

else:

# 如果字段不足,填充缺失字段为空字符串

fields += [""] * (5 - len(fields)) # 确保字段数量为 5

stream_id, frame_num, frame_len, request_uri, response_code = fields

# 将数据添加到流号对应的列表中

stream_data[stream_id].append({

"frame_num": frame_num,

"frame_len": int(frame_len) if frame_len else 0, # 如果 frame_len 为空,默认值为 0

"request_uri": request_uri,

"response_code": response_code

})

# 正则表达式匹配 echo%20 和 %20 之间的值

base64_pattern = re.compile(r"echo%20([^%]+)%20")

# 正则表达式匹配单引号里的值

single_quote_pattern = re.compile(r"==\s*'([^']+)'")

flag=''

# 查找符合条件的流

for stream_id, packets in stream_data.items():

request_packet = None

response_packet = None

# 查找请求包和响应包

for packet in packets:

if packet["request_uri"] != "" and (packet["frame_len"] == 469 or packet["frame_len"] == 465): # 修改为实际的请求包长度

request_packet = packet

if packet["response_code"] != "" and packet["frame_len"] == 66: # 修改为实际的响应包长度

response_packet = packet

# 如果找到匹配的请求和响应包,则输出请求 URL 并提取 Base64 数据

if request_packet and response_packet:

print(f"Stream ID: {stream_id}")

print(f"Request URL: {request_packet['request_uri']}")

# 提取 Base64 数据

base64_match = base64_pattern.search(request_packet["request_uri"])

if base64_match:

base64_value = base64_match.group(1) # 提取 Base64 编码的值

try:

# Base64 解码

decoded_value = base64.b64decode(base64_value).decode('utf-8')

print(f"Extracted Base64: {base64_value}")

print(f"Decoded Value: {decoded_value}")

# 提取单引号里的值

single_quote_match = single_quote_pattern.search(decoded_value)

if single_quote_match:

single_quote_value = single_quote_match.group(1)

flag += single_quote_value

print(f"Value inside single quotes: '{single_quote_value}'")

else:

print("No value found inside single quotes.")

except Exception as e:

print(f"Error decoding Base64: {e}")

else:

print("No Base64 data found in the request URL.")

print("-" * 40)

print(flag)

import base64

# RSA 参数
n = 75198391834610743089994427445022622171591577121191724448299339002435832997164232218413508119298295123274196848013892501604504507367027410527023618161491726166765575077336751590544863722532358737240337140569730023629526218796143738463727597005256155751094703947322244106639054703290232743344051122409847668979
d = 47823271942181380918380117208311303072917059719458472058236845602980348253487465624475587910710493956741157673197903864601280854518063619685915091953443290538916965993327948549512195024615088046785300748165298087812720446099735944950660175124872626742440697531498487595767064570672468310421018941583067770553

# Base64 解码密文
s = 'S0I3iWhvszKbOM/OalKTA0fpm5O5chVVnYGyKd5nV4erAzRbV6V6w8b/UiOfQEc3Ijh00hFjYFU1HaxNub9GnlPS/lcam5mATkf2sJS6JgpJo6AShVRxWDYKKrojeUeBZj5MEPI8/4DGGGuHFxmx2bxAahdDe1cGnjTZGWONpNI='
c_bytes = base64.b64decode(s)

# 将字节串转换为整数
c_int = int.from_bytes(c_bytes, byteorder='big')

# RSA 解密
m_int = pow(c_int, d, n)

# 将解密后的整数转换为字节串
m_bytes = m_int.to_bytes((m_int.bit_length() + 7) // 8, byteorder='big')

# 解码为字符串
try:
plaintext = m_bytes.decode('utf-8')
print("Decrypted plaintext:", plaintext)
except UnicodeDecodeError:
print("Decrypted bytes (not valid UTF-8):", m_bytes)

flag值:

flag{343907d2-35a3-4bfe-a5e1-5d6615157851}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/871393.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

长期更新IntelliJ IDEA安装永久破解教程

IntelliJ IDEA版本亲测IntelliJ IDEA 2024.3.2 ✔ IntelliJ IDEA 2024.3.1 ✔ IntelliJ IDEA 2024.2.* ✔ 介绍 JetBrains是一家专注于创建智能开发工具的前沿软件公司, 旗下常用的软件有IntelliJ IDEA、PhpStorm、PyCharm、Rider、RubyMine、RustRover、WebStorm、Goland、CLi…

5k之力!!!

卡了不知道多少页...(

长期更新IDEA安装永久破解教程

IntelliJ IDEA版本亲测Version 2024.3.2 ✔ Version 2024.3.1 ✔ Version 2024.2.* ✔ 介绍 JetBrains是一家专注于创建智能开发工具的前沿软件公司, 旗下常用的软件有IntelliJ IDEA、PhpStorm、PyCharm、Rider、RubyMine、RustRover、WebStorm、Goland、CLion等。 IntelliJ ID…

windows hyper-v 虚拟机 虚拟磁盘链无法访问 父级虚拟硬盘的标识符和差异磁盘的标识符不匹配 解决方法

参考链接:修复链断裂的虚拟磁盘 - 知乎 报错信息:试了很多方法没有找到合适的方案, 上图中的编辑按钮是灰色,解决方法,点击浏览,随便选一个可选项,选中后,编辑按钮就可用了 然后点击浏览,再把原来的虚拟硬盘重新选回来,这时候,你会发现编辑已经可用了,这个是有点气…

hadoop--mapreduce--Slider

https://incubator.apache.org/projects/slider.html

python 的版本、依赖包、虚拟环境管理

如何对 python 进行版本,依赖包的管理我并不是 python 开发者,但突然对这个话题感兴趣,所以就和 AI 聊了起来,以下是一些聊天笔记。 注意,这里可能有部分内容是过时或者错误的,以官方文档或者实际效果为准。在电脑上安装 python 之后,就可以直接在控制台执行 python 脚本…

How Far Are We to GPT-4V? Closing the Gap to Commercial Multimodal Models with Open-Source Suites

InternVL1.5: 更强的视觉编码器,动态处理高分辨率图像,高质量的双语数据集。主要内容 对标商业模型,提出InternVL1.5。更强的视觉编码器(InternViT-6B),动态处理高分辨率图像(将图像分成448*448的tails,最高支持4K分辨率),高质量的双语数据集(显著提高了OCR和中文相…

在ByteTrack中使用DanceTrack数据集

从github下载DanceTrack项目(不包含数据集,数据集需要单独下载) git clone https://github.com/DanceTrack/DanceTrack.git修改convert_dance_to_coco.py中数据集的位置,然后运行,将数据集格式转化为coco格式将DanceTrack中ByteTrack中的相关文件拷贝到ByteTrack项目中 Danc…

EdgeRunner

WSL2配置代理 - Sherioc - 博客园 EdgeRunner论文解读环境配置显示报错是FlashAttention需要CUDA 11.7及以上版本。 之前FriNet是CUDA 11.1,重新装了CUDA 11.8(并且已经改好设置),但是还是构建失败。 2025/1/18,又能构建了……(very slow)代码 首先注意到了License 1、l…

1月15日证书来啦!工信部人才交流中心PostgreSQL中级/高级认证

恭喜在2024年11月参加工信部人才交流中心PostgreSQL管理员PG中级和PG高级认证考试的各位同学,之前已经能够查到电子版的证书,现在纸质版证书也到啦! 部分学员电子证书:部分学员纸质证书:............ 为什么选择工信人才PostgreSQL认证: 发证机构:工信部人才交流中心属于…

「NOIP2024」 树上查询

update 2024/12/28 题目描述 给定一棵树,每次询问区间 \([l,r]\) 的 \[\max_{l \le l \le r \le r \land r - l + 1 \ge k}\text{dep}_ {\text{LCA*}(l, r)} \]引理证明 先来证两个区间 \(\text{LCA}\) 的引理: 对于 \(\text{LCA} \{ l, l + 1, \dots r\}\) 我们有 \(\text{L…

Flask Web开发实战:入门、进阶与原理解析PDF免费下载

PythonWeb框架Flask开发团队成员撰写,内容全面,从基础知识到进阶实战,再到源码分析,提供完善的Flask学习路径适读人群 :本书适合了解Python基本语法,想要自己动手做网站的编程人员;熟悉Python。想要从事Python Web开发的后端工程师、运维工程师和爬虫工程师;香葱Django…