本篇文章给大家分享的是有关python如何调用jsDES加密,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
小伙伴提出了几个问题我们来一一解决吧
回顾一下背景:其实这个站每个月都会多家厂家做渗透,但也许看到密码加密了就pass这个方式了,但是当你肯比别人付出更多的耐心,就能比别人看到更多的风景,挖到更多的漏洞。
前提:是可暴力破解的,因为如果登陆几次就禁止此账号登陆了作此尝试意义不大。DES是对称加密,开发使用前端进行加密的所以不得不写上key到页面或js上。有了这个key,可以进行对密码同样加密之后,进行暴力破解。
问题一:第一,就是那个在线加解密网站可否说下呢看了表哥的文章去找 连找几个都不没找到需求加密方式的加解密网站。
回答一:加密网站是:
http://tool.chacuo.net/cryptdes。然后选用的是:
其实,细心一点可以发现我上次提及加密网站的时候,数据包截图中有个Referer字段,那里可以找到。
问题二:写的登录加密内容是
encryptByDES('{"username":"admin","password":"12345678"','232cb85***cd354'),解密之后的是iKUJ1等一长字符串,那这个232cb85跟解密后的有什么关系呢这个没理解。
回答二:因为该网站已经换了一种加密方式了,可以跟你仔细讲讲。其实des的key,知道原文跟密文也可以暴力破解出key的。
先理清一下思路,他页面中的加密函数是这样子的:
<script type="text/javascript">
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.toString();
}
</script>
而同时在页面中定义了加密的key
也从上得知道加密的原文格式为:{"username":username”,"password":password},密码原文根据key进行des加密
所以根据以上情报可知得出关系:
1,要加密的原文为:
{"username":"admin","password":"12345678"}
2,key为232cb851727762bbf7dd097da3bcd354
(原网站改用其他非对称加密了,可以说下这个key,虽然也没说是哪个网站)
3,加密方式:
加密模式ECB,填充pkcs7padding,偏移量0,输出base64
4,密文:
iKUJ1KTtfI4NqIHAf7QQha71W4vil4uLWR1YQREFkJLsx1W/aKLcnt9Ni7PalkpP
问题三:通过burp重放数据包方式证明方法行不通 是怎么证明的。
证明方法是当你快速重复按的时候返回包是这样的:
只是在包里unicode编码了,不能直观看出,但实际上解码过后是一下这样的。在页面上会显示:“请不要这么快提交,稍后再试”。
问题四:接下来保存的js顺序还是有点错误我看截图f12控制台上mode-ecb.js不是在md5.js文件上么怎么保存时候其顺序在md5.js文件下方了。
回答四:对的,一开始我也遇到这个问题卡在这里,实际上只要按原网站正常加载顺序写在自己的html里面就可以实现了。
原网站加载顺序是这样的:
实际上加密用到的只有两个,mode-ecb.js和tripledes.js。
文末附上加密的JavaScript脚本,和暴力破解的脚本,和模拟的加密暴力破解源码。
所以测试的Html里应该这么写。(控制台能调用成功就可以放到python脚本去进行运行。)
<script src="tripledes.js"></script>
<script src="mode-ecb.js"></script>
<script type="text/javascript">
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.toString();
}
</script>
然后再控制台就可以尝试了,输入:
encryptByDES('{"username":"admin","password":"12345678"}','232cb851727762bbf7dd097da3bcd354');
用到python脚本模块里,只需要新建一个js文件,把两个按顺序贴到里面就可以直接调用了。见附件main_total.js。
问题五:文章中提到遇到的页面jsdes加密方式是pkcs7padding,是怎样确定这个页面的加密方式的?
回答五:注意细心观察页面js就可以发下他加密的填充方式了。
拓展:
写了一个简单模拟此次加密暴力破解的练习页面,在文末附件,可以尝试。
登陆成功截图。直接输入正确密码点击登陆无效(因为密码很简单,为了要脚本解题和避免一题多解,一定要自己构造http请求才能成功。)
接替成功截图。
最容易犯错误的是,贴了js文件,没有贴页面的js没有贴进去。
暴力破解判断特征就寻找返回的特点就好了。
使用python脚本暴力破解gif:
附上js加密和测试页面和爆破脚本,请自行下载。
下载链接:
https://pan.baidu.com/s/1kXlGkIVd7YDkRCtov01nOw
提取码:k8rg
main_total.js是合并的版本,test.php是模拟登陆的页面。
以上就是python如何调用jsDES加密,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/223669.html