Crypto(CTF)

Crypto方向CTF笔记

一些知识

-ZIP文件的16进制开头是 504B(0xPK)

-观察各种明显的进制

-wireshark异常流量分析,寻找data长度异常的包(将包的大小进行排序)。

-ZERO ONE(01)组合的字符串,考虑二进制转字符串或者摩斯密码

-替代密码(维吉尼亚密码,rot3,凯撒密码)。http://quipqiup.com/ 词频分析网站

-Python libnum库,求逆元、生成素数等功能。

-openssl查看.pub和.key文件。

-熟悉rsa计算流程

-栅栏密码以及W型,poem codes(诗歌密码)

-RSA低加密指数广播攻击:明文m和公钥e相同,攻击者利用拦截的密文c1,c2,c3…,和n1,n2,n3…。完成攻击。攻击原理:https://www.jianshu.com/p/8ebccf708c40

-base编码:base16(数字0-9和字母A-F)、base32(字母A-Z和数字2-7)、base64(A-Z、a-z、0-9、+、/)、base58(base58编码去掉了几个看起来会产生歧义的字符,如 0 (零), O (大写字母O), I (大写的字母i) and l (小写的字母L) ,和几个影响双击选择的字符,如/, +)。

-ICMP协议最主要的作用是PING

-openssl基本使用方法:

openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]

-in filename:指明私钥文件
-out filename:指明将提取出的公钥保存至指定文件中
-pubout:根据私钥提取出公钥
eg:查看公钥.key

openssl rsa -pubin -text -modulus -in gy.key

eg:利用私钥解密

openssl rsautl -decrypt -in key.txt -inkey psa.key -out flag.txt

-RSA解密脚本

import gmpy2
import rsa
p = 273821108020968288372911424519201044333
q = 280385007186315115828483000867559983517
n = 76775333340223961139427050707840417811156978085146970312315886671546666259161
e = 65537
d = int(gmpy2.invert(e,(p-1)*(q-1)))
privatekey = rsa.PrivateKey(n,e,d,p,q)
with open("E:\\fllllllag.txt","rb") as f:
    print(rsa.decrypt(f.read(),privatekey).decode())

-RSA公钥e常见值:3、17、65537

-openssl中pem文件格式:

version | pad | n | pad | e | pad | d | pad | p | pad | q | pad | x1 | pad | x2 | pad | x3
其中,pad是填充信息,x1=d mod (p−1),x2=d mod (q−1),x3=p−1 mod q
\x02为pad开头的标记,\x02后面两位的是内容长度
私钥信息按照上述顺序排列好之后,再进行base64编码。

-RSA素数分解问题:给定两个不同的n的时候一定要看看n1,n2有没有最大公约数(素数),如果有,那么该最大公约数就是两者共同的p

-RSA共模攻击:给定两个相同的n的时候,那就要考虑共模攻击了。
http://blog.chinaunix.net/uid-10376640-id-5820055.html

-维吉尼亚密码破解网站:https://guballa.de/vigenere-solver

-查看pem后缀文件

import gmpy2
from Crypto.Util.number import *
from Crypto.PublicKey import RSA

#若给出公钥文件,从公钥文件中分解出n和e
public_key1 = RSA.importKey(open(r"G:\ctf\CTF题目\c2d6e7158d7b4cd6a747774f0bdc5f72\publickey1.pem",'rb').read())
public_key2 = RSA.importKey(open(r"G:\ctf\CTF题目\c2d6e7158d7b4cd6a747774f0bdc5f72\publickey2.pem",'rb').read())
#int型
n1 = public_key1.n
e1 = public_key1.e
n2 = public_key2.n
e2 = public_key2.e

-base64隐写术:在这里插入图片描述https://blog.csdn.net/l8947943/article/details/123507255

-RsaCtfTools使用方法:

将key.pem与cipher.bin移到与RsaCtfTool.py同目录下:

sudo python3 RsaCtfTool.py --publickey key.pem --uncipherfile cipher.bin --attack fermat
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值