buu刷题记录

[ACTF新生赛2020]crypto-aes

from Cryptodome.Cipher import AES
import os
import gmpy2
from flag import FLAG
from Cryptodome.Util.number import *

def main():
    key=os.urandom(2)*16
    iv=os.urandom(16)
    print(bytes_to_long(key)^bytes_to_long(iv))
    aes=AES.new(key,AES.MODE_CBC,iv)
    enc_flag = aes.encrypt(FLAG)
    print(enc_flag)
if __name__=="__main__":
    main()
91144196586662942563895769614300232343026691029427747065707381728622849079757
b'\x8c-\xcd\xde\xa7\xe9\x7f.b\x8aKs\xf1\xba\xc75\xc4d\x13\x07\xac\xa4&\xd6\x91\xfe\xf3\x14\x10|\xf8p'

分析:整体观察一下,发现是CBC模式下的AES。key是32字节(256bits),iv是16字节(128bits),所以两者异或的结果其实是key的低128bits与iv异或,再加上key的高128bits。即输出结果的高128bits就是key的高128bits,从而能得到key。

xor = 91144196586662942563895769614300232343026691029427747065707381728622849079757
key = long_to_bytes(xor)[:16]*2

这里需要注意的一点是,输出的结果的高位部分在左侧,低位部分在右侧,一开始我就是想不通为什么取[:16]部分。

得到了key之后,取低128bits再与输出结果的低128bits进行异或得到iv

整体代码如下:

from gmpy2 import *
from Crypto.Util.number import *
from Crypto.Cipher import AES

xor = 91144196586662942563895769614300232343026691029427747065707381728622849079757
enc_flag = b'\x8c-\xcd\xde\xa7\xe9\x7f.b\x8aKs\xf1\xba\xc75\xc4d\x13\x07\xac\xa4&\xd6\x91\xfe\xf3\x14\x10|\xf8p'

key = long_to_bytes(xor)[:16]*2
iv = bytes_to_long(key[16:])^bytes_to_long(long_to_bytes(xor)[16:])
iv = long_to_bytes(iv)

aes = AES.new(key,AES.MODE_CBC,iv)
flag = aes.decrypt(enc_flag)
print(flag)

[羊城杯 2020]RRRRRRRSA

import hashlib
import sympy
from Crypto.Util.number import *

flag = 'GWHT{************}'

flag1 = flag[:19].encode()
flag2 = flag[19:].encode()
assert(len(flag) == 38)

P1 = getPrime(1038)
P2 = sympy.nextprime(P1)
assert(P2 - P1 < 1000)

Q1 = getPrime(512)
Q2 = sympy.nextprime(Q1)

N1 = P1 * P1 * Q1
N2 = P2 * P2 * Q2

E1 = getPrime(1024)
E2 = sympy.nextprime(E1)

m1 = bytes_to_long(flag1)
m2 = bytes_to_long(flag2)

c1 = pow(m1, E1, N1)
c2 = pow(m2, E2, N2)


output = open('secret', 'w')
output.write('N1=' + str(N1) + '\n')
output.write('c1=' + str(c1) + '\n')
output.write('E1=' + str(E1) + '\n')
output.write('N2=' + str(N2) + '\n')
output.write('c2=' + str(c2) + '\n')
output.write('E2=' + str(E2) + '\n')
output.close()

                
<think>首先,用户查询是关于“buu平台ssrf课程1”的相关内容。用户提到了引用[1]到[4],但这些引用似乎是从之前的对话或上下文中提取的具体内容,并非直接相关的课程材料。用户说:“上述引用仅供参考,并不是用户真正的需求”,所以我需要专注于用户的核心问题:查找BUU平台上的SSRF课程1相关内容。 BUU平台可能指的是一个网络安全学习平台,比如“Bugku University”或类似的东西,但我不确定具体的上下文。在引用中,提到了“buu题记”,这暗示BUU可能是一个CTF平台或在线学习平台,涉及SSRF(Server-Side Request Forgery)漏洞。 用户明确说:“我想查找buu平台上ssrf课程1的相关内容”,并且之前的引用涉及SSRF漏洞的实例和工具。 回顾系统级指令: - 所有行内数学表达式必须使用 $...$。 - 独立公式使用 $$...$$。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 用户的上一次问题是关于SSRF在BUU平台上的内容,所以我需要基于提供的引用和知识来回答。 分析引用: - [^1]:讨论SOAP的SSRF方法,提到CRLF注入和payload修改。 - [^2]:提到SoapClient类用于SSRF攻击。 - [^3]:涉及SSRFMe题目,DNS重绑定漏洞,打Redis。 - [^4]:提到0day和Leaking题目。 用户的问题是关于“SSRF课程1”,所以我应该假设这是一个具体的课程或学习资源。 作为AI,我没有实时访问BUU平台的知识库,但我可以基于常见网络安全资源和这些引用推测内容。 可能的回答结构: 1. **理解问题**:确认用户的需求是关于BUU平台的SSRF课程。 2. **提供相关信息**:基于引用和常识,描述SSRF漏洞的基础知识、常见攻击方法(如SOAP、DNS重绑定)、工具(如redis-ssrf)、以及BUU平台上的相关题目。 3. **生成相关问题**:在末尾添加相关问题。 4. **引用标识**:如果引用内容,末尾添加[^number]。 由于用户说引用仅供参考,我应该优先基于推理提供内容。 推测SSRF相关内容: - SSRF基础:服务器伪造请求,访问内部资源。 - 在BUU平台:常见题目如“SSRFMe”或类似。 - 从引用[3]:提到“[网鼎杯 2020 玄武组]SSRFMe”,这可能是BUU上的一道题目。 - 课程1可能涵盖基础概念、工具和实践。 回答步骤: 1. **介绍SSRF**:简要解释SSRF是什么。 2. **BUU平台课程内容**:基于引用,推测课程可能包括: - SSRF via SOAPClient (from [^1] and [^2]) - DNS rebinding attacks (from [^3]) - Redis exploitation (from [^3] with tools like redis-rogue-server) - Practical challenges like "SSRFMe" on BUU. 3. **提供资源**:建议用户查看具体题目或外部资源。 4. **生成相关问题**:如关于具体工具、防御方法等。 5. **确保中文**:整个回答用中文撰写。 6. **格式**:如果有数学表达式,用$...$,但SSRF话题可能不涉及数学,所以可能不需要。如果有变量或代码,用行内格式。 最终回答框架: - 开头:确认用户兴趣。 - 主体:描述推测的SSRF课程内容。 - 结尾:生成相关问题。 </think>### BUU平台SSRF课程1相关内容分析 基于您提供的引用和常见网络安全资源,我将帮助您梳理BUU平台上SSRF(Server-Side Request Forgery)课程1的可能内容。SSRF是一种服务器端请求伪造漏洞,允许攻击者利用服务器发起任意请求,常用于访问内部资源或绕过防火墙。BUU平台(如Bugku CTF平台)常以实践题目形式教授此类漏洞。以下是基于引用[1]、[2]、[3]、[4]的综合推测(引用仅供参考,我会结合普遍知识构建回答): 1. **SSRF基础概念与实践** SSRF课程1可能从基础入手,涵盖漏洞原理、攻击向量和简单利用方法: - 原理:SSRF允许恶意用户强制服务器向内部或外部系统发送请求(例如,访问localhost或内网服务)。 - 常见攻击向量:如SOAPClient类的利用(引用[2]),它可用于伪造HTTP请求[^2]。课程可能引用类似“[网鼎杯 2020 玄武组]SSRFMe”题目(引用[3]),演示如何处理不支持自定义Headers的场景(如使用CRLF注入和payload修改,如 `\0` 和 `\0\0` 技巧)[^1]。 - 实践工具:课程可能推荐工具如 `redis-ssrf.py` 或 `redis-rogue-server`(引用[3]),用于自动化SSRF攻击Redis等数据库[^3]。 2. **DNS重绑定与内部资源访问** 课程1通常会深入DNS重绑定漏洞,这是SSRF的进阶技术: - 漏洞机制:通过操纵DNS响应,使服务器重复请求恶意域名,从而绕过IP限制(例如,访问 `http://0.0.0.0/hint.php` 以获取敏感信息,如Redis密码)[^3]。 - 实操案例:BUU题目如“SSRFMe”可能被纳入课程,要求学习者利用SSRF打Redis服务(如设置键值或执行命令),引用工具如GitHub上的开源脚本进行复现[^3]。 3. **Payload构建与防御** 课程可能覆盖攻击payload的自定义技巧和防御策略: - Payload修改:教学中会教导如何利用特殊字符(如前缀 `s` 或 `S`)和编码绕过限制(引用[1]),例如在SOAP请求中注入CRLF攻击[^1]。 - 防御方法:课程可能总结常见防护措施,如输入验证、URL白名单和使用安全库(参考引用[4]的0day概念)[^4]。 为了深入学习,我建议您直接在BUU平台搜索“SSRF课程1”或相关题目(如“SSRFMe”)。此外,可参考外部资源: - [SSRF漏洞详解与实战](https://zhuanlan.zhihu.com/p/103506795)(通用教程)。 - GitHub工具库如[xmsec/redis-ssrf](https://github.com/xmsec/redis-ssrf)(用于Redis攻击实践)[^3]。 如果您有具体题目名称或代码片段,我可以帮助分析细节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值