cryptohack wp (CRYPTO ON THE WEB篇)(持续更新)
Posted Cryglz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cryptohack wp (CRYPTO ON THE WEB篇)(持续更新)相关的知识,希望对你有一定的参考价值。
Token Appreciation
import jwt
jwt_token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmbGFnIjoiY3J5cHRve2p3dF9jb250ZW50c19jYW5fYmVfZWFzaWx5X3ZpZXdlZH0iLCJ1c2VyIjoiQ3J5cHRvIE1jSGFjayIsImV4cCI6MjAwNTAzMzQ5M30.shKSmZfgGVvd2OSB2CGezzJ3N6WAULo3w9zCl_T47KQ"
decoded_jwt = jwt.decode(jwt_token, options="verify_signature": False)
print(decoded_jwt)
JWT Sessions
浏览器用于将JWT发送到服务器的HTTP头名称可能因应用程序的实现方式而异。然而,最常用的名称是“Authorization”。
在大多数情况下,头将采用以下格式:
Authorization: Bearer
其中
所以flag就是:authorization
No Way JOSE
进入一个API交互页面:
根据代码,先试试admin:
当把这一串token传上去,显示:
并没有flag。。。。试着去解码以下他:
JWT由3部分组成:标头(Header)、有效载荷(Payload)和签名(Signature)。在传输的时候,会将JWT的3部分分别进行Base64编码后用.进行连接形成最终传输的字符串:
JWTString = Base64(Header).Base64(Payload).HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
将admin:的值改为true:
得到:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiYWRtaW4iOnRydWV9.CxKAPL3ryUMNCisd3UUDFzI8UtMugBH-luvnO8zwxck,但是,这还不行,因为仅修改了有效负载部分,JOSE 标头仍表示算法为HS256. 然而,由于 JWT 只是 Base64url 编码的,我们可以创建我们自己的 JOSE 标头,利用“none”算法绕过。
import base64
JOSE_header = \'"typ":"JWT","alg":"none"\'
JOSE_bytes = JOSE_header.encode(\'ascii\')
base64_bytes = base64.b64encode(JOSE_bytes)
JOSE_header_encoded = base64_bytes.decode(\'ascii\')
print(JOSE_header_encoded)
得到:eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0=,=可以忽略,然后我们得到一个完整的token
eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJ1c2VybmFtZSI6ImFkbWluIiwiYWRtaW4iOnRydWV9.CxKAPL3ryUMNCisd3UUDFzI8UtMugBH-luvnO8zwxck
提交后:
Crypto-RSA-1
i春秋第二届春秋欢乐赛RSA256 WP
题目链接:RSA256
0x00 查看题目内容
下载文件并解压,发现压缩包里有三段密文以及一个公钥
0x01 使用openssl查看公钥
看到public.key以后用kali linux里的openssl查看
查看一下openssl 中rsa的相关命令
[email protected]:~/Desktop# openssl rsa -help
Usage: rsa [options]
Valid options are:
-help Display this summary
-inform format Input format, one of DER NET PEM
-outform format Output format, one of DER NET PEM PVK
-in val Input file
-out outfile Output file
-pubin Expect a public key in input file
-pubout Output a public key
-passout val Output file pass phrase source
-passin val Input file pass phrase source
-RSAPublicKey_in Input is an RSAPublicKey
-RSAPublicKey_out Output is an RSAPublicKey
-noout Don‘t print key out
-text Print the key in text
-modulus Print the RSA key modulus
-check Verify key consistency
-* Any supported cipher
-pvk-strong Enable ‘Strong‘ PVK encoding level (default)
-pvk-weak Enable ‘Weak‘ PVK encoding level
-pvk-none Don‘t enforce PVK encoding
-engine val Use engine, possibly a hardware device
0x02 把N转成十进制
因为N是十六进制数 所以得把N转换成十进制才能用在线分解网站将其分解
[email protected]:~/Desktop# python
Python 2.7.15 (default, Jul 28 2018, 11:29:29)
[GCC 8.1.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> Modulus=0xD99E952296A6D960DFC2504ABA545B9442D60A7B9E930AFF451C78EC55D555EB
>>> Modulus
98432079271513130981267919056149161631892822707167177858831841699521774310891L
0x03因式分解
将n进行因式分解来得到我们的p和q (推荐使用http://factordb.com/)
0x04 生成私钥解密
import gmpy2
import rsa
p = 302825536744096741518546212761194311477
q = 325045504186436346209877301320131277983
n = p * q
e = 65537
d = int(gmpy2.invert(e , (p-1) * (q-1)))
privatekey = rsa.PrivateKey(n , e , d , p , q)
with open("encrypted.message1" , "rb") as f:
print(rsa.decrypt(f.read(), privatekey).decode())
with open("encrypted.message2" , "rb") as f:
print(rsa.decrypt(f.read(), privatekey).decode())
with open("encrypted.message3" , "rb") as f:
print(rsa.decrypt(f.read(), privatekey).decode())
以上是关于cryptohack wp (CRYPTO ON THE WEB篇)(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章