Web 4-24實戰篇
- 攻防世界——NaNNaNNaNNaN-Batman
- easy_RSA
攻防世界——NaNNaNNaNNaN-Batman
題目:
1.附件沒有后綴,用記事本打開后發現 script 標簽,一個JS代碼,不過中間亂碼了,然后還是把檔案后綴改為了HTML,用瀏覽器打開,發現

代碼還是亂的,,,輸入一些東西,也沒有過多反應,
2.還是看不懂,然后把內容部分執行函式eval修改為alert,彈窗顯示正常,
congratulation,得到
第二種方法:將代碼中的eval()函式換成console.log()也可將js代碼完整顯示出來,

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)

總結:本題考查的是javascript的代碼審計、正則運算式,
easy_RSA

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)

cyberpeace{125631357777427553}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279937.html
標籤:其他
上一篇:06@ssh服務的使用及配置
下一篇:微信加密與登錄驗證分析
