您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)python怎樣調(diào)用jsDES加密,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
0x00 burpsuite的局限性
今天的滲透工作中黑盒測試遇到一個DES加密的登陸方式,遇到了很多坑,最終是通過python調(diào)用js進(jìn)行des加密入手了這個站。
這次的情況是這樣的,當(dāng)我測試登陸的時候,發(fā)現(xiàn)發(fā)送登錄請求時,驗證碼時可以復(fù)用的,原因是登陸失敗時沒有刷新session的值,導(dǎo)致圖形驗證碼可以復(fù)用。測試驗證碼可復(fù)用的方法就是burpsuite抓取登陸請求包發(fā)送到repeater里面不斷gogogogo,如果提示錯誤是驗證碼錯誤就說明漏洞不存在,但提示賬號或密碼錯誤就說明驗證碼可以復(fù)用。
美滋滋可以暴力破解,但是看到post的數(shù)據(jù)是加密的,為什么我知道是DES加密。原因是仔細(xì)觀察他的html頁面源代碼。發(fā)現(xiàn)這樣一段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();
}
并且發(fā)現(xiàn)開發(fā)這把加密密鑰也寫進(jìn)了html里面,看到發(fā)送登陸請求時調(diào)用這個des加密函數(shù)encryptByDES,
頁面的js總是處處有驚喜。下面就進(jìn)入正題說說我的pythondes加密爬坑記。
首先第一反應(yīng)我是想到使用burpsuite進(jìn)行paylaod處理暴力破解。
以前遇到的一些md5加密,sha1都可以在這里處理payload,然后簡單的就可以進(jìn)行加密暴力破解了。
但是在這里找不到DES、RSA、AES等加密方式,這就是burpsuite的局限性。我們再來看看有什么方法可以進(jìn)行此加密密碼。
0x02 理解js中的“DES加密”
我們理解了他原本登陸的函數(shù),我們可以在瀏覽器F12里的控制臺,就直接可以調(diào)用他的加密函數(shù)。登陸加密的內(nèi)容就是這個{"username":"admin","password":"12345678"}
encryptByDES('{"username":"admin","password":"12345678"}','232cb85*************cd354');
發(fā)現(xiàn)跟登陸請求包的post參數(shù)是一樣的。但暴力破解總不可能這樣一次次輸入的。
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) #轉(zhuǎn)base64編碼返回
第一個坑點,我發(fā)現(xiàn)這個模塊只有des的ECB和CBC模式加密,并且填充方式只有pkcs5padding,和nomalpadding兩種。我需要的是pkcs7padding!?。。?/p>
第二個坑點,正常des加密key固定是8位的,3des加密是16或者24位的。但是,頁面源代碼里給我的是64位?。?!什么肥事?。。?!無奈之下另外一個想法,去在線加密看看。
0x04 設(shè)計DES加密api
到了在線加密,找了三個網(wǎng)站,其他兩個網(wǎng)站都報的是key位數(shù)錯誤,真的是要8位才行,但是唯獨(dú)這個網(wǎng)站可以。之前再頁面源代碼中可以看到j(luò)s代碼DES加密方式是ECB模式的,并且是以pkcs7_padding的填充方式,加密過后是跟原來登陸請求包的加密數(shù)據(jù)是一樣的。
并且看到他的查詢數(shù)據(jù)包,是post需要加密的內(nèi)容并返回加密過后的密碼的,所以打算使用python寫個加密的api的http請求?然后提取密碼再進(jìn)行登陸的暴力破解。
的確是可以這樣加密暴力破解的。但是當(dāng)我使用burpsuite快速的重放了這個數(shù)據(jù)包,就發(fā)現(xiàn)這方法不可行。
除非5秒請求一次。我在不知道賬號不知道密碼的情況下,還猜測不了用戶存不存在的情況下,這種情況是不可取的。(如果存在的用戶返回密碼錯誤。用戶不存在的時候返回賬號不存在,可以根據(jù)登陸的返回結(jié)果來猜測用戶存不存在)。
Api思路2
我們退一步回到該登陸頁面再看看,當(dāng)我們訪問登陸頁面的時候,一共額外加載了這幾個js文件。
進(jìn)去看了下真正用于des加密的三個js是如下圖
我們可以點擊它然后查看響應(yīng)可以看到j(luò)s的代碼,都然后保存到本地,然后可以把他們寫成自己的api。
這是把他們加密的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>
于是可以寫到自己網(wǎng)站的一個頁面添加輸入和輸出的標(biāo)簽,我們直接可以輸入輸出加密結(jié)果了,但這還不是最優(yōu)的解法,這樣的話,還是要請求一次自己的網(wǎng)站再發(fā)一次登陸的請求。效率比直接再python加密再暴力破解低了一半!
0x05 python調(diào)用js——execjs
最后,我使用了一個python直接可以執(zhí)行js代碼的模塊,相信除了登陸加密的用途外,其他地方都非常有用。
這個模塊叫execjs,然后把三個加密的js按順序疊加寫到一個文件里就可以了。
首先加密的函數(shù)時這樣的,首先讀取加密的js。
defget_js():#這個是獲取js的函數(shù)
f= open('C:\Users\\3s_NwGeek\Desktop\\des.js','r')
line = f.readline()
htmlstr = ''
whileline:
htmlstr = htmlstr+line
line = f.readline()
returnhtmlstr
這個是加密的函數(shù)。先獲取js然后解析js代碼再調(diào)用js的函數(shù)并傳參就可以返回加密的密碼了。
defDesEncrypt(str,key):#這個是des加密的函數(shù)
jsstr= get_js()#獲取js
ctx= execjs.compile(jsstr)#解析js代碼
password=ctx.call('encryptByDES',str,key)#調(diào)用encryptByDES函數(shù),并傳參原文str和加密key
password=(password.encode("unicode_escape").decode("string_escape")).decode('unicode-escape').encode('utf-8')#解碼,解出來是unicode的
returnpassword
使用原來的原文進(jìn)行加密,返回的結(jié)果是跟原來的請求包一樣的
{"username":"admin","password":"12345678"}
iKUJ1KTtfI4NqIHAf7QQha71W4vil4uLWR1YQREFkJLsx1W/aKLcnt9Ni7PalkpP
0x06 后話
tips:最后直接使用協(xié)程進(jìn)行暴力破解,其實事先,我把滲透調(diào)研表的聯(lián)系人和負(fù)責(zé)人,還有整個部門的姓名信息,加了進(jìn)去制作成一個用戶字典。比如說,姓名叫張三豐,那么就會有,zhangsanfeng,zhang_sanfeng,zhang_sf,zsf。然后制作了16個用戶再加常用的admin和root進(jìn)行大字典的暴力破解。
排坑5小時,暴破5分鐘。
最終激動的顫抖叫出來“yes?。。。?!”了
其實這個站每個月都會多家廠家做滲透,但也許看到密碼加密了就pass這個方式了,但是當(dāng)你肯比別人付出更多的耐心,就能比別人看到更多的風(fēng)景,挖到更多的漏洞。
看完上述內(nèi)容,你們對python怎樣調(diào)用jsDES加密有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。