加密对抗靶场enctypt-labs通关

admin 2024年11月23日22:15:18评论85 views字数 3606阅读12分1秒阅读模式

对Xz师傅的js加密靶场的通关记录,本人纯web菜鸡,写出来的东西仅供参考,谢谢师傅们了!

01

AES固定key

抓包发现数据传输被加密了,直接搜索加密字段定位到算法位置

加密对抗靶场enctypt-labs通关
加密对抗靶场enctypt-labs通关

简单的分析,就是一个固定key 和iv 的aes加密,直接还原明文数据

{"username":"admin","password":"1234"}

autodecoder

加密对抗靶场enctypt-labs通关
加密对抗靶场enctypt-labs通关
加密对抗靶场enctypt-labs通关

02

AES服务端获取key

来看第二关,发起了两个请求,分别获取aes_key和aes_iv,然后利用算法对数据进行加密传输

加密对抗靶场enctypt-labs通关

定位到算法部分我们可以注意到,只要服务器的session不过期,那么我们获取到的key 和 iv就是固定的

加密对抗靶场enctypt-labs通关
加密对抗靶场enctypt-labs通关
{"aes_key":"t3giDeeWT99XilzCslD9EQ==","aes_iv":"+jVQ1xurlO1dvxYRk9TvRA=="}

还原明文数据

加密对抗靶场enctypt-labs通关
{"username":"admin","password":"1234"}

autodecoder

加密对抗靶场enctypt-labs通关
加密对抗靶场enctypt-labs通关

03

RSA加密

来到第三关,

加密对抗靶场enctypt-labs通关
定位算法,这里可以看到只有公钥,没有私钥的部分,所以只能进行加密,无法解密;好在靶场只有登录测试,不涉及越权等其他模块,问题不大
加密对抗靶场enctypt-labs通关
还原明文数据
加密对抗靶场enctypt-labs通关
{"username":"admin","password":"1234"}
autodecoder
加密对抗靶场enctypt-labs通关
加密对抗靶场enctypt-labs通关

04

AES+RSA加密

第四关,
加密对抗靶场enctypt-labs通关
分析下数据包,一般这种格式的都是对称+非对称组合加密,每次请求包的key都会变化,然后我们去看加密方法
加密对抗靶场enctypt-labs通关
可以看到,key 和 iv是随机生成的,前端只能获取到公钥,不能对数据进行解密,这还玩个蛋,后面想到可以替换js从而实现固定key 和 iv,直接覆盖即可,这里我直接拿前面第一关的密钥了
加密对抗靶场enctypt-labs通关
还原明文数据
{"username":"admin","password":"1234"}
autodecoder
加密对抗靶场enctypt-labs通关
因为key 和 iv 固定,直接password进行爆破即可
加密对抗靶场enctypt-labs通关

05

DES规律key

来到第五关,可以看到,username是明文传输的,只对password进行了加密
加密对抗靶场enctypt-labs通关
定位到算法,分析一下,如果username=test,那么key就是key66666,iv就是9999test
加密对抗靶场enctypt-labs通关
还原明文数据
{"username":"admin","password":"1234"}
autodecoder
加密对抗靶场enctypt-labs通关
加密对抗靶场enctypt-labs通关
加密对抗靶场enctypt-labs通关

06

明文加签

第六关,
加密对抗靶场enctypt-labs通关
一看这个sign,就知道这一关要对付的就是他,定位到算法,可以看到sign是通过对dataToSign这个字段进行HmacSHA256进行加密的,因为有key,所以只要篡改dataToSign即可,这里还有个细节要注意,timestamp是10位的,下一关是13位的
加密对抗靶场enctypt-labs通关
如果后台没有校验timestamp超时的话,只要在password修改后再加签一下即可绕过
还原明文数据
{"username":"admin","password":"123456","nonce":"q3az51nhwqq","timestamp":1700000000,"signature":"a2f50e7b7829f2cef59e346b538f5755ed6b1c066801bf0e0624b1e28c7d5417"}
在这一关,autodecoder没有对应的算法,我们用python自写接口加解密
from flask import Flask, requestimport jsonimport reimport base64from Crypto.Cipher import AESfrom Crypto.Util.Padding import padfrom Crypto.Util.Padding import unpadfrom urllib.parse import quotefrom urllib.parse import unquotefrom Crypto.Cipher import DESimport hashlibimport hmacfrom binascii import hexlifyfrom binascii import unhexlifyapp = Flask(__name__)username = "admin"nonce = "q3az51nhwqq"timestamp=1700000000secret_key = "be56e057f20f883e"@app.route('/encode',methods=["POST"])  # base64加密def encrypt():    param = request.form.get('dataBody')    re_pass = r'"password":"(.*?)",'    re_sign = r'"signature":"(.*?)"'    re_nonce = r'"nonce":"(.*?)",'    re_timestamp = r'"timestamp":(.*?),'    password = re.search(re_pass, param).group(1)    new_nonce = re.search(re_nonce, param).group(1)    new_timestamp = re.search(re_timestamp, param).group(1)    data_to_sign = f"{username}{password}{nonce}{timestamp}"    new_signature = hmac.new(secret_key.encode('utf-8'), data_to_sign.encode('utf-8'), hashlib.sha256).hexdigest()    new_param = re.sub(re_sign, f'"signature":"{new_signature}"', param)    new_param = re.sub(re_nonce, f'"nonce":"{nonce}",', new_param)    new_param = re.sub(re_timestamp, f'"timestamp":"{timestamp}",', new_param)return new_param@app.route('/decode',methods=["POST"])def decrypt():    param = request.form.get('dataBody')return paramif __name__ =='__main__':      app.run(host="0.0.0.0",port="5000")
加密对抗靶场enctypt-labs通关

07

防重放

第七关,
加密对抗靶场enctypt-labs通关
我们发现username 和 password都是明文(心想那岂不是可以直接上我的祖传字典进行一波爆破),当然不会这么简单,多次放包提示我们:

No Repeater ,md 什么样的开发会提示No Repeater,实锤Xz师傅真黑客!

加密对抗靶场enctypt-labs通关
定位到算法,分析禁止重放模块的函数generateRequestData使用了RSA对时间戳进行了加密,也就是timestamp是13位的
加密对抗靶场enctypt-labs通关
还原成明文
{"username":"admin","password":"1234","random":"1700000000000"}
我们只需要在爆破password的同时,一块修改timestamp即可,我们用yakit的热加载来快速实现
rsa = func(random){    public_key = `-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRvA7giwinEkaTYllDYCkzujviNH+up0XAKXQot8RixKGpB7nr8AdidEvuo+wVCxZwDK3hlcRGrrqt0Gxqwc11btlMDSj92Mr3xSaJcshZU8kfj325L8DRh9jpruphHBfh955ihvbednGAvOHOrz3Qy3CbocDbsNeCwNpRxwjIdQIDAQAB-----END PUBLIC KEY-----    `return codec.EncodeBase64(codec.RSAEncryptWithPKCS1v15(public_key, f'${random}')~)}req = result => {    r1=time.Now().Unix()returnrsa(r1*1000)}
加密对抗靶场enctypt-labs通关

08

加签key在服务端(安全无解)

最后一关,
加密对抗靶场enctypt-labs通关
加密对抗靶场enctypt-labs通关
分析函数sendDataWithNonceServer,签名先去服务端获取,然后再对password、username、timestamp进行带签登录,加解密都由服务器端完成
加密对抗靶场enctypt-labs通关
GG,只能靠弱口令了,admin / 123456,尝试一波,哈哈,弱口令才是yyds
ps: (MDZZ)
加密对抗靶场enctypt-labs通关

09

参考文章

https://github.com/SwagXz/encrypt-labs

原文始发于微信公众号(安全的黑魔法):加密对抗靶场enctypt-labs通关

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月23日22:15:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   加密对抗靶场enctypt-labs通关https://cn-sec.com/archives/3428935.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息