使用C#winform編寫滲透測試工具--Web指紋識別


使用C#winform編寫滲透測試工具--web指紋識別

本篇文章主要介紹使用C#winform編寫滲透測試工具--Web指紋識別。在滲透測試中,web指紋識別是信息收集關鍵的一步,通常是使用各種工具如WhatWebWapplyzer、Whatruns等進行網站的指紋識別,以獲取CMS類型、Web服務組件類型及版本信息,根據識別的信息在網站查詢相應組件的漏洞,進行滲透測試。

  • 下面是使用C#winform編寫的滲透測試工具,前面我們已經完成了端口掃描、敏感目錄掃描和暴力破解等工作,這一部分將介紹如何實現web指紋識別。

目錄

  1. 常見指紋檢測對象
  2. 指紋識別方法
  3. 代碼實現
  4. 軟件使用步驟

一、常見指紋檢測對象

  1. CMS信息:比如大漢CMS、織夢、帝國CMS、phpcms、ecshop等;

  2. 前端技術:比如HTML5、jquery、bootstrap、pure、ace等;

  3. Web服務器:比如Apache、lighttpd, Nginx, IIS等;

  4. 應用服務器:比如Tomcat、Jboss、weblogic、websphere等;

  5. 開發語言:比如PHP、Java、Ruby、Python、C#等;

  6. 操作系統信息:比如linux、win2k8、win7、kali、centos等;

  7. CDN信息:是否使用CDN,如cloudflare、360cdn、365cyd、yunjiasu等;

  8. WAF信息:是否使用waf,如Topsec、Jiasule、Yundun等;

  9. IP及域名信息:IP和域名注冊信息、服務商信息等;

  10. 端口信息:有些軟件或平台還會探測服務器開放的常見端口。

二、指紋識別方法

引用自Web指紋識別技術研究與優化實現

1. 特定特定文件的MD5

CMS是Content Management System的縮寫,意為"內容管理系統",這是百度百科的解釋,意思是相當於網站的建站模板,整個網站架構已經集成好了,只需要你部署和安裝,便可以搭起一個網站,這樣雖然方便了開發人員建設網站,但也帶來新的安全問題,如果cms本身有安全問題如一些高危漏洞,那么使用這個cms的所有網站都會存在這種安全漏洞,所以我們在進行滲透測試的時候,如果可以探測出網站使用的框架,那么我們便可以尋找這個框架的漏洞,從而成功拿下這個網站,所以在滲透過程中,探測網站的cms是一件很重要的事,網上有開源的常見的cms的字典庫,我們可以手寫一個cms識別程序來對cms進行識別,方便我們進行滲透。

2. 正常頁面或錯誤網頁中包含的關鍵字

先訪問首頁或特定頁面如robots.txt等,通過正則的方式去匹配某些關鍵字,如Powered by Discuz、dedecms等。或者可以構造錯誤頁面,根據報錯信息來判斷使用的CMS或者中間件信息,比較常見的如tomcat的報錯頁面。

3. 請求頭信息的關鍵字匹配

根據網站response返回頭信息進行關鍵字匹配,whatweb和Wappalyzer就是通過banner信息來快速識別指紋,之前fofa的web指紋庫很多都是使用的這種方法,效率非常高,基本請求一次就可以,但搜集這些規則可能會耗時很長。而且這些banner信息有些很容易被改掉。
根據response header一般有以下幾種識別方式:

  • 查看http響應報頭的X-Powered-By字段來識別;
  • 根據Cookies來進行判斷,比如一些waf會在返回頭中包含一些信息,如360wzws、Safedog、yunsuo等;
  • 根據header中的Server信息來判斷,如DVRDVS-Webs、yunjiasu-nginx、Mod_Security、nginx-wallarm等;
  • 根據WWW-Authenticate進行判斷,一些路由交換設備可能存在這個字段,如NETCORE、huawei、h3c等設備。

4. 部分URL中包含的關鍵字,比如wp-includes、dede等URL關鍵特征

通過規則庫去探測是否有相應目錄,或者根據爬蟲結果對鏈接url進行分析,或者對robots.txt文件中目錄進行檢測等等方式,通過url地址來判別是否使用了某CMS,比如wordpress默認存在wp-includes和wp-admin目錄,織夢默認管理后台為dede目錄,solr平台可能使用/solr目錄,weblogic可能使用wls-wsat目錄等。

5. 開發語言的識別

web開發語言一般常見的有PHP、jsp、aspx、asp等,常見的識別方式有:

  • 通過爬蟲獲取動態鏈接進行直接判斷是比較簡便的方法。
    asp判別規則如下<a[^>]*?href=(‘|”)[^http][^>]*?\.asp(\?|\#|\1),其他語言可替換相應asp即可。
  • 通過X-Powered-By進行識別
    比較常見的有X-Powered-By: ASP.NET或者X-Powered-By: PHP/7.1.8
  • 通過Set-Cookie進行識別
    這種方法比較常見也很快捷,比如Set-Cookie中包含PHPSSIONID說明是php、包含JSESSIONID說明是java、包含ASP.NET_SessionId說明是aspx等。

三、代碼實現

  • 以調用字典的形式對網站特定文件和特定文件的MD5值進行檢測,判斷網站的CMS,如python安全編程之指紋識別和b站視頻Python安全編程,但該方法比較依賴字典的准確性。
  • 使用在線測試網站如Wappalyzer提供的Api接口,該軟件就是基於該方法進行開發。

使用python編寫腳本調用Api接口

import requests
import zlib
import json
import sys

def whatweb(url):
    response = requests.get(url, verify=False)
    whatweb_dict = {"url":response.url,"text":response.text,"headers":dict(response.headers)}
    whatweb_dict = json.dumps(whatweb_dict)
    whatweb_dict = whatweb_dict.encode()
    whatweb_dict = zlib.compress(whatweb_dict)
    data = {"info":whatweb_dict}
    return requests.post("http://whatweb.bugscaner.com/api.go", files=data)

if __name__ == '__main__':
    # request = whatweb("http://whatweb.bugscaner.com/apidoc.html")
    request = whatweb(sys.argv[1])
    # print(u"今日識別剩余次數")
    # print(request.headers["X-RateLimit-Remaining"])
    y = request.json()
    print(u"識別結果:")
    try:
        print("CMS:", y['CMS'] )
    except:
        print("CMS:未識別")
    try:
        print("Programming Languages:", y['Programming Languages'])
    except:
        print("Programming Languages:未識別")
    try:
        print("JavaScript Frameworks:", y['JavaScript Frameworks'])
    except:
        print("JavaScript Frameworks:未識別")
    try:
        print("CDN:", y['CDN'])
    except:
        print("CDN:未識別")
    try:
        print("Advertising Networks", y['Advertising Networks'])
    except:
        print("Advertising Networks:未識別")
    try:
        print("Web Servers", y['Web Servers'])
    except:
        print("Web Servers:未識別")

C#調用腳本

對於python腳本中包含第三方模塊的情況,同樣,通過直接創建Process進程,調用python腳本,返回掃描結果。

  • 創建按鈕按下事件button1_Click,運行“調用python腳本”函數runPythonwebfinger()
private void button12_Click(object sender, EventArgs e)
        {
            richTextBox7.Clear();
            runPythonwebfinger();//運行python函數
            label35.Text = "開始掃描...";
        }
  • 實例化一個python進程 調用.py 腳本
void runPythonwebfinger()
        {
            string url = textBox5.Text;
            p = new Process();
            string path = "web_fingerprint_v2.py";//待處理python文件的路徑,本例中放在debug文件夾下
            string sArguments = path;
            ArrayList arrayList = new ArrayList();
            arrayList.Add(url);//需要挖掘的域名
            foreach (var param in arrayList)//拼接參數
            {
                sArguments += " " + param;
            }
            p.StartInfo.FileName = @"D:\Anaconda\python.exe"; //沒有配環境變量的話,可以寫"xx\xx\python.exe"的絕對路徑。如果配了,直接寫"python"即可
            p.StartInfo.Arguments = sArguments;//python命令的參數
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            p.Start();//啟動進程
            //MessageBox.Show("啟動成功");
            p.BeginOutputReadLine();
            p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived_webfinger);
            Console.ReadLine();
            //p.WaitForExit();
        }
  • 輸出接收事件函數
void p_OutputDataReceived_webfinger(object sender, DataReceivedEventArgs e)
        {
            var printedStr = e.Data;
            Action at = new Action(delegate ()
            {
                //接受.py進程打印的字符信息到文本顯示框
                richTextBox7.AppendText(printedStr + "\n");
                label35.Text = "掃描結束";
            });
            Invoke(at);
        }

軟件使用步驟

*首先在url欄中輸入地址,點擊開始查詢,最后得到網站指紋信息。

github地址:https://github.com/Chenmengx/Penetration-testing-tool


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM