WebInspect:強(qiáng)大的網(wǎng)頁(yè)程序掃描器
SPI Dynamics' WebInspect應(yīng)用程序安全評(píng)估工具幫你識(shí)別已知和未知的網(wǎng)頁(yè)層漏洞。它還能檢測(cè)到Web服務(wù)器的配置屬性,以及進(jìn)行常見(jiàn)的網(wǎng)頁(yè)攻擊,例如參數(shù)注入、跨網(wǎng)站腳本、目錄游走等等。
>>去網(wǎng)絡(luò)安全工具百寶箱看看其它安全工具
有趣的WebInspect的加密方法
從去年開(kāi)始,我開(kāi)始關(guān)注這款優(yōu)秀的WEB application漏洞掃描軟件,這東西除了速度比較慢以外,其它的功能真是不錯(cuò)。我當(dāng)時(shí)研究了一下,被它的用來(lái)驗(yàn)證license的那幾個(gè)dll給嚇住了,里面霍然寫(xiě)著一串RSA的key,我就認(rèn)為這東西除了暴力破解,應(yīng)該沒(méi)有其它方法。最近研究了一下RSA算法,正打算用它練練手。結(jié)果我仔細(xì)研究一下這東西,發(fā)現(xiàn)居然出奇的簡(jiǎn)單,令我真是感到非常不可思議。
WebInspect在你注冊(cè)后,會(huì)給你發(fā)一個(gè)key文件,這個(gè)就是所謂的注冊(cè)文件,里面有你的注冊(cè)信息,然后webinspect在啟動(dòng)的時(shí)候會(huì)把它解密,讀出里面的信息,所用的加密函數(shù)是hostinfo.crypt,這個(gè)函數(shù)即用來(lái)加密也用來(lái)解密,所謂的加密無(wú)非就是簡(jiǎn)單的xor了一下,我也寫(xiě)了一個(gè)程序,來(lái)調(diào)用這個(gè)crypt:
- #include "stdafx.h"
- #include
- #include
- int Crypt (
- int encrypt,
- int key,
- int keysize,
- int msg,
- int msgsize);
- typedef int(WINAPI* pCrypt) (
- int encrypt,
- int key,
- int keysize,
- int msg,
- int msgsize);
- void main(int argc, char* argv[])
- {
- HINSTANCE m_hDll;
- pCrypt m_crypt;
- FILE *stream;
- FILE *fout;
- int numread;
- char key[50];
- char msg[2048];
- memset((void *)msg,0,2048);
- m_hDll=LoadLibrary("hostinfo.dll");
- if (m_hDll < (HINSTANCE) HINSTANCE_ERROR)
- {
- m_hDll = NULL;
- return;
- }
- m_crypt = (pCrypt)GetProcAddress(m_hDll, "crypt");
- if( (stream = fopen( "mmm1.key", "r+b" )) != NULL ) //這里是我的原始注冊(cè)文件
- {
- numread = fread( key, sizeof( char ), 50, stream );//頭上50字節(jié)是key
- if (numread != -1)
- printf("key is : %s",key);
- numread = fread( msg, sizeof( char ), 2048, stream );//剩下的是加密后的內(nèi)容
- if (numread != -1){
- m_crypt(1,(int )key,50,(int )msg,numread); //參數(shù)1的值等于1的,是解密
- if( (fout = fopen( "mmm1.txt", "w+t" )) != NULL )
- {
- fwrite(key,sizeof(char),50,fout);
- fwrite(msg,sizeof(char),numread,fout);
- fclose(fout);
- }
- printf("msg is : %s",msg);
- }
- fclose(stream);
- }
- return ;
- }
#p#
運(yùn)行一下,我們得到了mmm1.txt,它的內(nèi)容如下:
- //下面是文件內(nèi)容
- 33383131352E31313131363839383135 SPI License File
- Company=xxx ltd.
- Contact=xxx xxx-
- Address1=xxx#
- Address2=
- City=xxx
- State=
- PostalCode=xxx
- Country=CHN
- Phone=xxxx
- Fax=
- EMail=
- [Start IP Range]
- 216.183.127.201 216.183.127.201
- [End IP Range]
- MaxPageCount=0
- MaxIssueCount=0
- ValidFrom=5/8/2004
- ValidTo=5/23/2007
- RequireHTTPSFeedback=True
- VerificationURL=https://download.spidynamics.com/spiXMLVulDB/spiXMLVulDB.asp
- MaxABS=20
- MaxGlobal=10
- IPCount=1
- IPScanCount=0
- Product=
- ProductionKey=True
- MacIDs=
- IPScanned=216.183.127.201:19
- End SPI License File
- //結(jié)束
#p#
需要注意的是”Start IP Range”,這里修改一下,比如把216.183.127.201 216.183.127.201改成 0.0.0.0 255.255.255.255,還有個(gè)地方要改一下IPCount,把1改成一個(gè)較大的數(shù),這個(gè)是用來(lái)控制你掃描的IP總數(shù)的。做了這兩下修改(需要注意的是這個(gè)是unix格式的文本文件,windows下存的時(shí)候要小心),我們就要把它加密回去,呵呵,同樣用hostinfo.crypt(這是crypt嗎?應(yīng)該叫encode才對(duì)):
- #include "stdafx.h"
- #include
- #include
- int Crypt (
- int encrypt,
- int key,
- int keysize,
- int msg,
- int msgsize);
- typedef int(WINAPI* pCrypt) (
- int encrypt,
- int key,
- int keysize,
- int msg,
- int msgsize);
- void main(int argc, char* argv[])
- {
- HINSTANCE m_hDll;
- pCrypt m_crypt;
- FILE *stream;
- FILE *fout;
- int numread;
- char key[50];
- char msg[2048];
- memset((void *)msg,0,2048);
- m_hDll=LoadLibrary("hostinfo.dll");
- if (m_hDll < (HINSTANCE) HINSTANCE_ERROR)
- {
- m_hDll = NULL;
- return;
- }
- m_crypt = (pCrypt)GetProcAddress(m_hDll, "crypt");
- if( (stream = fopen( "mmm1.txt", "r+b" )) != NULL )
- {
- numread = fread( key, sizeof( char ), 50, stream );
- if (numread != -1)
- printf("key is : %s",key);
- numread = fread( msg, sizeof( char ), 2048, stream );
- if (numread != -1){
- m_crypt(0,(int )key,50,(int )msg,numread);// //參數(shù)1的值等于0的,是加密
- if( (fout = fopen( "mmm2.key", "w+b" )) != NULL )
- {
- fwrite(key,sizeof(char),50,fout);
- fwrite(msg,sizeof(char),numread,fout);
- fclose(fout);
- }
- }
- fclose(stream);
- }
- return ;
- }
這樣我們得到了mmm2.key,放到webinspect里驗(yàn)證一下,果然沒(méi)問(wèn)題,但是改過(guò)的key在線(xiàn)升級(jí)的時(shí)候會(huì)無(wú)效,所以正確的辦法是申請(qǐng)一個(gè)試用的key,在線(xiàn)把程序升級(jí)好,再用這個(gè)修改后的key.