Web 4-24

攻防世界——NaNNaNNaNNaN-Batman

题目:Web 4-24
1.附件没有后缀,用记事本打开后发现 script 标签,一个JS代码,不过中间乱码了。然后还是把文件后缀改为了HTML,用浏览器打开,发现
Web 4-24
代码还是乱的,,,输入一些东西,也没有过多反应。

2.还是看不懂,然后把内容部分执行函数eval修改为alert,弹窗显示正常。
congratulation,得到
第二种方法:将代码中的eval()函数换成console.log()也可将js代码完整显示出来。
Web 4-24
3.代码复制,整理。这里可以用一个在线工具,专门整理美化JS代码的。
Online JavaScript Beautifier
整理得到:

function $() {     var e = document.getElementById("c").value;     if (e.length == 16)         if (e.match(/^be0f23/) != null)             if (e.match(/233ac/) != null)                 if (e.match(/e98aa$/) != null)                     if (e.match(/c7be9/) != null) {                         var t = ["fl", "s_a", "i", "e}"];                         var n = ["a", "_h0l", "n"];                         var r = ["g{", "e", "_0"];                         var i = ["it'", "_", "n"];                         var s = [t, n, r, i];                         for (var o = 0; o < 13; ++o) {                             document.write(s[o % 4][0]);                             s[o % 4].splice(0, 1)                         }                     } } document.write('<input id="c"><button οnclick=$()>Ok</button>'); delete _ 

其实就是只要输入的与几个if中一 一匹配即可。
要满足上面的if,在正则中^表示开头,$表示末尾,同时还要满足长度为16位,删除一些重复的刚刚好。
可以得出要构造一个字符串,并且满足以下条件:
长度为16
以be0f23开头
以e98aa结尾
包含233ac
包含c7be9

提交内容:be0f233ac7be98aa
得到:flag{it’s_a_h0le_in_0ne}

当然还有另一种解法:
就是直接把中间那段代码直接运行,丢给浏览器的控制台,跑出来就是flag。
或者自己写出运行结果

                        var t = ["fl", "s_a", "i", "e}"];                         var n = ["a", "_h0l", "n"];                         var r = ["g{", "e", "_0"];                         var i = ["it'", "_", "n"];                         var s = [t, n, r, i];                         for (var o = 0; o < 13; ++o) {                             document.write(s[o % 4][0]);                             s[o % 4].splice(0, 1) 

Web 4-24
总结:本题考查的是javascript的代码审计、正则表达式。

easy_RSA

Web 4-24
RSA是什么
RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制

RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥
轻松学习RSA加密算法原理

解题
RSA的算法涉及三个参数,n、e、d。其中,n是两个大质数p、q的积,n的二进制表示所占用的位数,就是所谓的密钥长度。e和d是一对相关的值,e可以任意取,但要求e与(p-1)(q-1)互质;再选择d,要求
(de)mod((p-1)*(q-1))=1。(n,e),(n,d)就是密钥对。其中(n,e)为公钥,(n,d)为私钥。RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^d mod n;B=A^e mod n;(公钥加密体制中,一般用公钥加密,私钥解密)e和d可以互换使用,即:A=B^d mod n;B=A^e mod n
直接给了p,q,e,求d,即为暴力破解RSA的私钥之一的d。

写脚本:

import math  #求欧拉函数f(n) def getEuler(prime1, prime2):     return (prime1-1)*(prime2-1) #求私钥d def getDkey(e,Eulervalue):#可以辗转相除法    k=1    while True:       if (((Eulervalue * k) + 1) %e)== 0:          (d,m)=divmod(Eulervalue * k + 1,e)          return d       #避免科学计数法最后转int失去精度       k+=1 #求明文 def Ming(c,d,n):    return pow(c,d,n)  if  __name__=='__main__':    p=473398607161    q=4511491    d=getDkey(17, getEuler(p,q))    print('私钥为: %d'%d) 

Web 4-24
cyberpeace{125631357777427553}

版权声明:玥玥 发表于 2021-04-25 3:33:41。
转载请注明:Web 4-24 | 女黑客导航