WebInspect:強大的網(wǎng)頁程序掃描器
SPI Dynamics' WebInspect應用程序安全評估工具幫你識別已知和未知的網(wǎng)頁層漏洞。它還能檢測到Web服務器的配置屬性,以及進行常見的網(wǎng)頁攻擊,例如參數(shù)注入、跨網(wǎng)站腳本、目錄游走等等。
有趣的WebInspect的加密方法
從去年開始,我開始關注這款優(yōu)秀的WEB application漏洞掃描軟件,這東西除了速度比較慢以外,其它的功能真是不錯。我當時研究了一下,被它的用來驗證license的那幾個dll給嚇住了,里面霍然寫著一串RSA的key,我就認為這東西除了暴力破解,應該沒有其它方法。最近研究了一下RSA算法,正打算用它練練手。結果我仔細研究一下這東西,發(fā)現(xiàn)居然出奇的簡單,令我真是感到非常不可思議。
WebInspect在你注冊后,會給你發(fā)一個key文件,這個就是所謂的注冊文件,里面有你的注冊信息,然后webinspect在啟動的時候會把它解密,讀出里面的信息,所用的加密函數(shù)是hostinfo.crypt,這個函數(shù)即用來加密也用來解密,所謂的加密無非就是簡單的xor了一下,我也寫了一個程序,來調(diào)用這個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 ) //這里是我的原始注冊文件
- {
- 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#
運行一下,我們得到了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
- //結束
#p#
需要注意的是”Start IP Range”,這里修改一下,比如把216.183.127.201 216.183.127.201改成 0.0.0.0 255.255.255.255,還有個地方要改一下IPCount,把1改成一個較大的數(shù),這個是用來控制你掃描的IP總數(shù)的。做了這兩下修改(需要注意的是這個是unix格式的文本文件,windows下存的時候要小心),我們就要把它加密回去,呵呵,同樣用hostinfo.crypt(這是crypt嗎?應該叫encode才對):
- #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里驗證一下,果然沒問題,但是改過的key在線升級的時候會無效,所以正確的辦法是申請一個試用的key,在線把程序升級好,再用這個修改后的key.