【攻防世界】MISC - low

0x01 下载题目的附件

0x03 图片属性和 exif 信息 

 

没有得到有用信息

0x04 修改图片的宽高

使用 010 Editor 修改图片的宽高都为 613,结果图片坏了,直接打不开了,寄!赶紧改回去

题目是 “low” 有没有可能是暗示把图片的高度调低呢,但是宽高只要改的不合理图片就会坏掉,把高改成 - 612 也就是图片倒过来了而已

0x06 甜蜜的,受不了了,图片在线一把梭!!!

有二维码信息,拿手机或者二维码识别网站扫一下,得到 flag {139711e8e9ed545e}

0x07 参考了一下别人的解法 

用画图工具打开 bmp 图片,其次将其另存为 png 格式,接着使用 stegsolve 打开图片也可以得到二维码,扫描得出 flag

### BabyRSA 加密挑战的解题思路 #### 背景介绍 RSA 是一种基于大整数分解困难性的公钥密码体制。BabyRSA 通常作为初学者级别的 RSA 挑战,其核心目标是通过已知的信息(如公钥 \(n\) 和 \(e\),以及可能的部分明文或密文),恢复私钥或原始消息。 在攻防世界或其他 CTF 平台中的 BabyRSA 题目中,可能存在以下常见漏洞或简化条件[^1]: - 使用较小的素数 \(p\) 或 \(q\),使得因子分解变得容易。 - 提供部分信息(如低指数加密、未填充的消息等)。 - 密钥生成过程中存在错误配置(如 \(d\) 较小或泄露部分比特位)。 --- #### 常见解法分析 ##### 方法一:因数分解攻击 如果题目提供了模数 \(n\) 的值,并且该数值相对较小,则可以尝试对其进行质因数分解。一旦成功找到两个素数 \(p\) 和 \(q\),即可计算欧拉函数 \(\phi(n)\): \[ n = p \times q, \quad \phi(n) = (p-1)(q-1) \] 接着利用扩展欧几里得算法求出私钥 \(d\): \[ d \cdot e \equiv 1 \mod{\phi(n)} \] 最后使用私钥 \(d\) 对密文进行解密操作。 ```python from sympy import factorint def factorize_n(n): factors = factorint(n) if len(factors) != 2 or sum(factors.values()) != 2: raise ValueError("Factorization failed.") return list(factors.keys()) def compute_phi(p, q): return (p - 1) * (q - 1) def find_d(e, phi): from sympy import mod_inverse return mod_inverse(e, phi) # Example usage n = 9876543210123456789 # Replace with actual value of n ciphertext = 1234567890 # Replace with ciphertext e = 65537 # Common public exponent try: primes = factorize_n(n) p, q = primes[0], primes[1] phi = compute_phi(p, q) d = find_d(e, phi) plaintext = pow(ciphertext, d, n) print(plaintext) except Exception as ex: print(ex) ``` --- ##### 方法二:低加密指数攻击 当公共指数 \(e\) 很小时(例如 \(e=3\)),可能会发生所谓的 **低加密指数攻击**。在这种情况下,如果没有对消息进行适当填充,可能导致直接提取根号得到原消息: \[ m = c^{1/e} \] 此方法适用于 \(m^e < n\) 的情况,即消息长度较短时。 ```python import gmpy2 def low_exponent_attack(c, e, n): root = int(gmpy2.iroot(c, e)[0]) if root**e == c: return root else: raise ValueError("Low exponent attack failed.") # Example usage c = 1234567890 # Replace with ciphertext e = 3 # Low encryption index result = low_exponent_attack(c, e, None) print(result) ``` --- ##### 方法三:Wiener Attack 对于某些实现不当的情况,\(d\) 可能非常小,从而允许应用 Wiener 攻击来快速推导出私钥。这种方法依赖于连分数展开技术,能够高效解决特定场景下的问题。 ```python from Crypto.PublicKey import RSA from fractions import Fraction def wiener_attack(e, n): frac = Fraction(e, n) convergents = [] while True: numer = frac.numerator denom = frac.denominator k = numer d = denom phi_estimated = (e * d - 1) / k sqrt_estimate = int((n - phi_estimated + 1)**0.5) if abs(sqrt_estimate**2 - (n - phi_estimated + 1)) < 1e-5: break next_frac = frac.limit_denominator() if not next_frac: break frac = next_frac convergents.append(next_frac) return d # Example usage e = 65537 # Public key component n = 98765432101 # Modulus N private_key = wiener_attack(e, n) print(private_key) ``` --- ### 总结 以上介绍了三种常见的 BabyRSA 解题策略——因数分解攻击、低加密指数攻击和 Wiener 攻击。具体采用哪种方式取决于题目给出的具体参数及其特性。建议结合实际环境测试每种方案的有效性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值