python怎样调用jsDES加密

今天就跟大家聊聊有关python怎样调用jsDES加密,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

0x00  burpsuite的局限性

今天的渗透工作中黑盒测试遇到一个DES加密的登陆方式,遇到了很多坑,最终是通过python调用js进行des加密入手了这个站。

python怎样调用jsDES加密

这次的情况是这样的,当我测试登陆的时候,发现发送登录请求时,验证码时可以复用的,原因是登陆失败时没有刷新session的值,导致图形验证码可以复用。测试验证码可复用的方法就是burpsuite抓取登陆请求包发送到repeater里面不断gogogogo,如果提示错误是验证码错误就说明漏洞不存在,但提示账号或密码错误就说明验证码可以复用。

python怎样调用jsDES加密

美滋滋可以暴力破解,但是看到post的数据是加密的,为什么我知道是DES加密。原因是仔细观察他的html页面源代码。发现这样一段javascript代码。

functionencryptByDES(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();

}

并且发现开发这把加密密钥也写进了html里面,看到发送登陆请求时调用这个des加密函数encryptByDES

python怎样调用jsDES加密

页面的js总是处处有惊喜。下面就进入正题说说我的pythondes加密爬坑记

首先第一反应我是想到使用burpsuite进行paylaod处理暴力破解。

以前遇到的一些md5加密,sha1都可以在这里处理payload,然后简单的就可以进行加密暴力破解了。

python怎样调用jsDES加密

但是在这里找不到DES、RSA、AES等加密方式,这就是burpsuite的局限性。我们再来看看有什么方法可以进行此加密密码。

0x02   理解js中的“DES加密”

python怎样调用jsDES加密

我们理解了他原本登陆的函数,我们可以在浏览器F12里的控制台,就直接可以调用他的加密函数。登陆加密的内容就是这个{"username":"admin","password":"12345678"}

encryptByDES('{"username":"admin","password":"12345678"}','232cb85*************cd354');

python怎样调用jsDES加密

发现跟登陆请求包的post参数是一样的。但暴力破解总不可能这样一次次输入的。

0x03  pythonDES加密模块——pydes

然后再想想了,看python有没有DES的加密模块的,有的。Pydes模块,这里有两个坑点。

这是pydes模块官方的使用模板

importbase64

frompyDes import *

Des_Key= "12345678" #Key

Des_IV= "" #自定IV向量

defDesEncrypt(str):

   k= des(Des_Key, CBC, Des_IV, pad=None, padmode=PAD_PKCS5)

   EncryptStr= k.encrypt(str)

   returnbase64.b64encode(EncryptStr) #转base64编码返回

第一个坑点,我发现这个模块只有des的ECB和CBC模式加密,并且填充方式只有pkcs5padding,和nomalpadding两种。我需要的是pkcs7padding!!!!

第二个坑点,正常des加密key固定是8位的,3des加密是16或者24位的。但是,页面源代码里给我的是64位!!!什么肥事!!!!无奈之下另外一个想法,去在线加密看看。

0x04  设计DES加密api

到了在线加密,找了三个网站,其他两个网站都报的是key位数错误,真的是要8位才行,但是唯独这个网站可以。之前再页面源代码中可以看到js代码DES加密方式是ECB模式的,并且是以pkcs7_padding的填充方式,加密过后是跟原来登陆请求包的加密数据是一样的。

python怎样调用jsDES加密

并且看到他的查询数据包,是post需要加密的内容并返回加密过后的密码的,所以打算使用python写个加密的api的http请求?然后提取密码再进行登陆的暴力破解。

python怎样调用jsDES加密

的确是可以这样加密暴力破解的。但是当我使用burpsuite快速的重放了这个数据包,就发现这方法不可行。

python怎样调用jsDES加密

python怎样调用jsDES加密

除非5秒请求一次。我在不知道账号不知道密码的情况下,还猜测不了用户存不存在的情况下,这种情况是不可取的。(如果存在的用户返回密码错误。用户不存在的时候返回账号不存在,可以根据登陆的返回结果来猜测用户存不存在)。

Api思路2

我们退一步回到该登陆页面再看看,当我们访问登陆页面的时候,一共额外加载了这几个js文件。

python怎样调用jsDES加密

进去看了下真正用于des加密的三个js是如下图

python怎样调用jsDES加密

我们可以点击它然后查看响应可以看到js的代码,都然后保存到本地,然后可以把他们写成自己的api。

python怎样调用jsDES加密

这是把他们加密的js保存下来再自己写的html页面(js顺序要正确)

<script src="core.js"></script>

<script src="tripledes"></script>

<script src="md5.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>

python怎样调用jsDES加密

于是可以写到自己网站的一个页面添加输入和输出的标签,我们直接可以输入输出加密结果了,但这还不是最优的解法,这样的话,还是要请求一次自己的网站再发一次登陆的请求。效率比直接再python加密再暴力破解低了一半!

0x05   python调用js——execjs

最后,我使用了一个python直接可以执行js代码的模块,相信除了登陆加密的用途外,其他地方都非常有用。

这个模块叫execjs,然后把三个加密的js按顺序叠加写到一个文件里就可以了。

首先加密的函数时这样的,首先读取加密的js。

defget_js():#这个是获取js的函数
  f= open('C:/Users//3s_NwGeek/Desktop//des.js','r')
  line = f.readline()
   htmlstr = ''
 
whileline:
      htmlstr = htmlstr+line
       line = f.readline()
  returnhtmlstr

这个是加密的函数。先获取js然后解析js代码再调用js的函数并传参就可以返回加密的密码了。
defDesEncrypt(str,key):#这个是des加密的函数

  jsstr= get_js()#获取js
  ctx= execjs.compile(jsstr)#解析js代码
 password=ctx.call('encryptByDES',str,key)#调用encryptByDES函数,并传参原文str和加密key
 password=(password.encode("unicode_escape").decode("string_escape")).decode('unicode-escape').encode('utf-8')#解码,解出来是unicode的
  returnpassword

使用原来的原文进行加密,返回的结果是跟原来的请求包一样的

{"username":"admin","password":"12345678"}

iKUJ1KTtfI4NqIHAf7QQha71W4vil4uLWR1YQREFkJLsx1W/aKLcnt9Ni7PalkpP

0x06 后话

tips最后直接使用协程进行暴力破解,其实事先,我把渗透调研表的联系人和负责人,还有整个部门的姓名信息,加了进去制作成一个用户字典。比如说,姓名叫张三丰,那么就会有,zhangsanfeng,zhang_sanfeng,zhang_sf,zsf。然后制作了16个用户再加常用的admin和root进行大字典的暴力破解。

排坑5小时,暴破5分钟。

最终激动的颤抖叫出来“yes!!!!!”了

python怎样调用jsDES加密

其实这个站每个月都会多家厂家做渗透,但也许看到密码加密了就pass这个方式了,但是当你肯比别人付出更多的耐心,就能比别人看到更多的风景,挖到更多的漏洞。

看完上述内容,你们对python怎样调用jsDES加密有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/225906.html

(0)
上一篇 2022年1月8日 21:01
下一篇 2022年1月8日

相关推荐

发表回复

登录后才能评论