这是第一节安全开发系列的文章,面向新手学习高手勿看。找了一个测试对象。这里的话不做敏感操作只逆向破解网站的加密并编写成模拟登录
function encryptByDES(message, key){
var keyHex = CryptoJS.enc.Utf8.parse(key);
var encrypted = CryptoJS.DES.encrypt(message, keyHex, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.ciphertext.toString();
}
import execjs
file = open('1.js','r')
aaa = file.read()
js = execjs.compile(aaa)
res = js.call('encryptByDES', '123123')
print(res)
这里对比一下跟网站的加密是否一样,可以看到我输入了明文123123加密后跟网站的加密是一样的这里也就完成了逆向加密跟python去交互的动作...
接下来要做的就是模拟一个登录的动作,因为编写带有攻击性的脚本是不具备授权的所以就模拟一个登录点到为此。
import execjs
import fontTools.t1Lib
import requests
file = open('1.js','r')
aaa = file.read()
js = execjs.compile(aaa)
res = js.call('encryptByDES', '123123')
def js():
js = execjs.compile(aaa)
res = js.call('encryptByDES', '123123')
url = 'http://passport2.chaoxing.com/fanyalogin'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
"Cookie": "JSESSIONID=72F3128DBEBC1339C040B974E489F192;"
}
data = {
"uname":"13188888881",
"password":res,
"t":"true"
}
# pro = {
# "http":"http://127.0.0.1:8080"
# }
response = requests.post(url,data=data,headers=headers).content.decode()
print(response+res)
if __name__ == '__main__':
js()
如果你遇到这种情况进行注入爆破等动作编写脚本。可以直接循环“加密的内容,再把它传入到password中即可实现。最后可以看到模拟登录正常...
最后还有一枚逻辑漏洞小彩蛋,在数据包的参数中可以看到有一个“t参数,t参数显示t=true。如果把t参数改为t=false,意思就是关闭。这时候输入明文就可以直接登录网站不会进行加密了。也可以省去很多动作,比如遇到一些混淆之类的js等等等...”
欢迎关注,长期免费公开课。
欢迎添加投稿咨询。稿费100-1500元
原文始发于微信公众号(四季安全团队):【安全开发1】通过JS逆向与编写爆破,注入程序
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论