首页 > 其他分享 >Venom ctf 密码题 狂飙

Venom ctf 密码题 狂飙

时间:2024-03-18 22:15:21浏览次数:21  
标签:AES factors ctf flag Venom key combo combinations 狂飙

题目如下,懒得找题目qaq
import os
from flag import flag
from Crypto.Util.number import *
from Crypto.Cipher import AES
m = 88007513702424243702066490849596817304827839547007641526433597788800212065249
key = os.urandom(24)
key = bytes_to_long(key)
n = m % key
flag += (16 - len(flag) % 16) * b'\x00'
iv = os.urandom(16)
aes = AES.new(key,AES.MODE_CBC,iv)
enc_flag = aes.encrypt(flag)

print(n)
print(enc_flag)
print(iv)

103560843006078708944833658339172896192389513625588

b'\xfc\x87\xcb\x8e\x9d\x1a\x17\x86\xd9~\x16)\xbfU\x98D\xfe\x8f\xde\x9c\xb0\xd1\x9e\xe7\xa7\xefiY\x95C\x14\x13C@j1\x9d\x08\xd9\xe7W>F2\x96cm\xeb'

b'UN\x1d\xe2r<\x1db\x00\xdb\x9a\x84\x1e\x82\xf0\x86'

刚开始第一个想法是爆破,遍历key值,利用n = m % key的关系求key值然后求aes,显然,key太大了,代码运算不出来

后面经高人指点,重新整理一下思路!
既然是AES加密,那么先写解密代码 decrypt_flag = aes.decrypt(enc_flag).rstrip(b"\x00") # .rstrip(b"\x00")用来补位
又因为题目aes = AES.new(key,AES.MODE_CBC,iv),所以现在求key就可以
又因为题目给了 n = m % key , 那就有关系 n = m - x * key (m > n , x取得未知数), 所以x * key = m - n
在m , n已知的情况下, 我们可以得到x * key的值,然后亚夫分解一下,得到3, 37, 439, 3939851, 5036645362649, 265898280367, 342291058100503482469327892079792475478873这几个数字的乘积
所以,写个函数将上面的数字的所有分成两组的乘积可能性列出来就是所有可能的key值,然后库库遍历,flag就是最后几个结果
`from itertools import combinations
from Crypto.Util.number import bytes_to_long
from Crypto.Cipher import AES

iv = b'UN\x1d\xe2r<\x1db\x00\xdb\x9a\x84\x1e\x82\xf0\x86'
enc_flag = b'\xfc\x87\xcb\x8e\x9d\x1a\x17\x86\xd9~\x16)\xbfU\x98D\xfe\x8f\xde\x9c\xb0\xd1\x9e\xe7\xa7\xefiY\x95C\x14\x13C@j1\x9d\x08\xd9\xe7W>F2\x96cm\xeb'

给定的因数列表

factors = [3, 37, 439, 3939851, 5036645362649, 265898280367, 342291058100503482469327892079792475478873]

def factor_combinations(factors):
all_combinations = set()

# 单独存在的因数
all_combinations.update(factors)

# 两两相乘的组合
for combo in combinations(factors, 2):
    all_combinations.add(combo[0] * combo[1])

# 三个相乘的组合
for combo in combinations(factors, 3):
    all_combinations.add(combo[0] * combo[1] * combo[2])

# 更多因数相乘的组合
for r in range(4, len(factors) + 1):
    for combo in combinations(factors, r):
        all_combinations.add(eval('*'.join(map(str, combo))))

return sorted(all_combinations)

生成所有可能的组合

all_combinations = factor_combinations(factors)
zifu = []
for i in all_combinations:

# 打印所有组合
# for combo in (all_combinations, 1):
#     print(f"{combo}")
# 科学计数法表示的大整数
scientific_notation = i

# 将科学计数法转换为整数
integer_value = int(scientific_notation)

# 将整数转换为字节表示
byte_representation = integer_value.to_bytes((integer_value.bit_length() + 7) // 8, 'big')

print(byte_representation)
zifu.append(byte_representation)

for i in zifu:
if len(i)==24:
aes = AES.new(i, AES.MODE_CBC, iv)
decrypted_flag = aes.decrypt(enc_flag).rstrip(b"\x00")
print(decrypted_flag)
`
结果如下:flag{cf735a4d-f9d9-5110-8a73-5017fc39b1b0}

标签:AES,factors,ctf,flag,Venom,key,combo,combinations,狂飙
From: https://www.cnblogs.com/futihuanhuan/p/18081557

相关文章

  • VCTF-archived elephant
    vctf-archivedelephant官方wp:Venom-WP/2024VenomCTF/2024_vctf_web_archived-elephant/writeup/readme.mdatmain·ChaMd5Team/Venom-WP·GitHub一道0day题目,挺好玩的,赛后复现一下。由于预期解官方写的已经非常详细了,这里就复现了一下非预期解:利用这个漏洞的触发点其......
  • 从0到1:CTFer成长之路网上平台的使用以及docker环境配置
    1.首先安装docker(这里在kali里演示)sudosu#以root身份运行aptinstalldocker.io#安装dockersystemctlstartdocker#启动dockersystemctlenabledocker.service#将docker服务设置为开机自启docker-v#查看是否安装成功,回显版本号说明安装成功2.配置yml文件并启动ap......
  • CTF练习日记——[SUCTF 2019]EasySQL 1
    查询1试试试试堆叠注入1;showdatabases;#来查询数据库,以及1;showtables;#查询表再看看表里面的字段名1,showcolumnsfromFlag;#显示nonono,到这里之后我不太懂就参考了http://t.csdnimg.cn/MHwz1,利用1;setsql_mode=PIPES_AS_CONCAT;select1,得到flag:flag......
  • CTF练习日记——[强网杯 2019]随便注 1
    先点查询1试试:再试试查询1',看是否存在字符注入:?inject=1'#利用orderby查看有几个字段:?inject=1'orderby3#,?inject=1'orderby2#可以知道有两个字段,接下来利用联合查询:?inject=1'unionselect1,2#发现select被过滤了,那咱们利用堆叠注入来查看数据库,表名,?inject=1......
  • VCTF-Forensics
    这个取证有点意思,也没有套太多。下载附件,直接FTK打开,我们发现两个分区,其中一个又hint.zip和一个图片,发现里面图片一致,一眼丁真明文攻击:打开见key:直接PasswordkitForensics开梭:然后FTK继续开,找到flag.txt,里面是个字符串,一眼十六进制转出摩斯密码:解密,是个奶牛快传:......
  • buuctf靶机笔记3
    BUUXSSCOURSE首页如此显然是持久性xss将数据存储到后台管理员访问后台触发xss后可以盗取cookie对后台进行登录但我们还不知道后台地址先尝试:<script>alert(1)</script>提交成功尝试访问没有触发弹窗可能后台存在过滤尝试用img标签:<imgsrc='11'onerror=alert(11......
  • CTF 题型 python原型链污染 题记和总结
    CTF题型python原型链污染题记和总结文章目录一般特征关键函数(判断python原型链污染依据)1.[GeekChanlleng2023ezpython]解题思路反思总结2.[DASCTF2023七月挑战赛]json识别`unicode`**全局变量获取**解题思路1读env:污染__globals____file__-->../../../......
  • 2024年VCTF纳新赛 crypto 狂飙
    题目:importosfromflagimportflagfromCrypto.Util.numberimport*fromCrypto.CipherimportAESm=88007513702424243702066490849596817304827839547007641526433597788800212065249key=os.urandom(24)key=bytes_to_long(key)n=m%keyflag+=(16-len(......
  • NSSCTF_pwn_notepage(1)
    NSSCTF_pwn_刷题笔记page(1)[SWPUCTF2021新生赛]gift_pwnfrompwnimport*io=remote('node4.anna.nssctf.cn',28991)padding=16+8shell=0x4005B6payload=b'A'*padding+p64(shell)io.sendline(payload)io.interactive()[SWPUCTF2021新生赛]......
  • [GFCTF 2021]where_is_shell :)shell use new posture
    [GFCTF2021]where_is_shellshell的特殊姿势看上去很简单的栈溢出,但是问题在于找不到能用的/bin/sh或者sh这里出现了一个shell的新姿势:可以利用system($0)获得shell权限,$0在机器码中为\x24\x30在tips函数中正好有\x24\x30可以用来构造,所以需要取出0x400541关于ida打......