當前位置:
首頁 > 最新 > 從0開始編寫信息收集器

從0開始編寫信息收集器

本文作者:紅日安全 雨幕(yumu)選擇書籍:《Python 黑帽子:黑客與滲透測試編程之道》選擇理由:人生苦短,我用 python,就是很喜歡看 python方面的安全技術書。我們都知道在信息收集是整個滲透測試中無可或缺的一環,那我們老是需要一類一類信息去查詢非常耗費時間,(人生苦短,我用 python)那這時我就想做一個信息收集器,當然這類工具很多,簡直可以說是多如牛毛,那為啥我還要繼續寫呢,主要是練習編寫工具的套路(工具很渣渣(1.0版本),主要講思想,純粹拋磚引玉的一篇文章),然後賣一波 python 的廣告,哈哈哈。


0x01 需求分析

首先我們在編寫工具之前我們必須進行需求分析,只要把握好需求,我們明確自己編寫的方向,不然會出現我要你給我麵包,你給我巧克力的情況,真是使人哭笑不得。需求分析需要把「要求」或「需要」進行分析與整理,確認後形成描述完整、清晰與規範的文檔,確定需要實現哪些功能,完成哪些工作。當然這裡是你自己編寫自己的工具,所以工具的需求就由你自己決定而非別人,這樣增加了我們工具的靈活性,我們可以盡量多去參考前人寫的工具,取長補短,盡自己的努力去完善自己的工具,增強工具的粘合性。

0x00 平台選擇首先我們必須明確我們工具將要運行那種平台或者那些平台下,但是據我所知安全界絕大部分的工具都是寄生在平台下,當然也有很多工具出了對應的版本來適應環境。那我們這裡還是緊跟前人的步伐選擇平台即可,至於其他平台大家有餘力的時候可以考慮去實現(後面已經完善了下的運行)。0x01 功能需求我們這裡列出需求,只有明確好需求,後面編寫就不會陷入南轅北轍的局面。1、whois 信息2、DNS 記錄3、埠狀態4、子域名5、主機系統信息6、Robots.txt7、服務信息8、指紋識別


其實在一般的開發中是不存在這一步的,但我這裡為了讓大家更理解我這個工具的開發流程就特意抽出來講。我們知道我們在進行信息收集的功能無可避免會借用到網站資源或者輔助工具。這裡說的網站資源指的是搜索引擎、工具網站等等,而輔助工具一般會是,當然還有很多其他的工具,我這裡就不列舉了。0x00 網站資源某些特定網站提供的功能能很好輔助我們完成信息收集的任務,例如站長之家,等這些網站能為我們提供 whois 的相關信息,減少我們的時間成本,而且在線獲取信息簡單方便。

我們看圖說話,我們按類別對網址進行歸納一下,方便後續的工作(用到的我在寫,國內訪問不了小穀子)。0x01 輔助工具我寫的 1.0 版本是需要使用輔助工具 Nmap (諸神之眼),那我們我們就來簡單介紹一下 Nmap。Nmap 介紹Nmap (網路映射器)是一個開源工具,它使網路探測和安全審計得以專業化。最初由 Gordon 「Fyodor」 Lyon 發布。官網官方網站是. Nmap 是一個免費的用來實現網路探測和安全審計的開源程序。許多系統和網路管理員發現它對於一些日常的工作也有幫助。例如查看整個網路的信息,管理服務升級計劃以及監控主機和服務的正常運行。


經過辛苦的準備工作緊接著我們就得開始進入工具設計階段了,在這個階段我們會選擇面向對象的思想而不是面向編程。我把設計階段分了幾個階段:1、工具啟動階段。2、工具運行階段。3、工具結束階段。


在我們編寫之前最好畫一個工具的結構圖:

然後我們根據我們得結構圖先新建好文件,然後根據我們上面的需求對編寫我們的 py 文件。我這裡只拿出核心的主函數來講解一下我們編寫工具時的盡量使用分層,模塊思想。

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

"""

@version: v1.0

@author: yumu

@software: PyCharm

@file: Stealth.py

@time: 2018/3/31 13:12

"""

importos

fromutil.welcomeimportWelcome

fromutil.helpimportHelp

fromutil.is_selectimportselect

if__name__=="__main__":

script_path=os.path.dirname(os.path.abspath(__file__))

_cache_path=os.path.join(script_path,"output/")

ifnotos.path.exists(_cache_path):

os.makedirs(_cache_path,777)

(arg,domain) =Help.parse_args()

ifdomain=="":

Welcome().headline()

Help.help_info()

else:

select(arg,domain)

從上面看出來工具的主函數代碼是非常簡潔的,主要是因為採用了分層,模塊思想。把每個 py 文件需要完成的功能做了劃分做成了對應的模塊,分層是一個分治的思想,提高開發效率,降低維護成本。


如果不懂得可以看看這篇文章:https://jingyan.baidu.com/article/8cdccae9269b1f315413cde2.html我這裡主要講一下本地上傳 github 的幾步(必須按步驟來):1、進入我們項目所在的路徑2、列出當前目錄所有還沒有被 git 管理的文件和被 git 管理且被修改但還未提交3、添加文件(添加所有) 或者(單個文件名)4、(建議大家對單個文件注釋,這樣方便他人閱讀)5、提交代碼到遠程 git 倉庫push 完成之後,登錄 github 上可以查看到本地提交到倉庫的代碼和記錄如果項目更新了想同步 github 也可以按上面的步驟進行操作,我貼了最後兩部的圖如下:

然後就是我們項目語言的設置,在這一方面 github 識別的非常不準確,需要我們自己更改語言為 python,我們需要新建一個文件,然後添加內容如下:

*.jslinguist-language=python

*.csslinguist-language=python

*.htmllinguist-language=python


說明文檔至關重要,README.md 文件是一個項目的入門手冊,裡面需要描述項目的用途、運行環境、如何使用、版本更替信息等等。下面結合我項目詳細說明文檔介紹一下如何編寫 README.md 文件(大家可以參考一下)。0x01.項目描述 描寫項目的功能和作用Stealth 是一款收集 CMS、WHOIS 、DNS、robots.txt、子域名、埠信息、系統信息、服務信息的工具。0x02.運行環境 詳細描述工具運行的環境python 3+linux or windownmap (nmap添加到環境變數中)0x03.安裝指南 詳細描述工具如何安裝linuxgit clonehttps://github.com/ANyedt/Stealth.gitcd Stealthpip install -r requirements.txtwindowgit clonehttps://github.com/ANyedt/Stealth.gitcd Stealthpip install -r requirements.txt0x04.項目結構--方便別人了解項目的結構

.

├──Stealth.py(主函數)Mainfunction

├──requirements.txt(依賴庫)Dependentlibrary

├──config(配置文件)Profile

│├──cms.txt(cms規則文件)Cmsrulefile

│├──config.py(參數配置)Parameterconfiguration

├──output(輸出目錄)Outputdirectory

│├──whois1.html(whois信息)Whoisinformation

│└──whois2.html(whois信息)Whoisinformation

│└──rebots.txt(rebots.txt信息)Rebots.txtinformation

│├──subdomain.xls(子域名信息)Subdomaininformation

│└──subdoamin.html(匹配域名)Matchdomainname

│└──nmap_info_result.txt(系統信息,埠信息等)Systeminformation,portinformation,etc.

│└──dns.html(dns信息)DNSinformation

├──static(靜態資源目錄)Staticresourcedirectory

├──util(功能函數目錄)Functionfunctiondirectory

├──.gitattributes(語言設置)Languagesettings

└──README.md(說明文檔)Documentation

0x05.配置指南 描述配置信息配置目錄:(Configuration directory: config/config.py)

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

"""

@version: v1.0

@author: yumu

@software: PyCharm

@file: config.py

@time: 2018/3/31 17:29

"""

importsys

importrandom

# SSL證書驗證 (SSL certificate verification)

allow_ssl_verify=True

# -------------------------------------------------

# requests 配置項 (Requests configuration item)

# -------------------------------------------------

# 超時時間 (overtime time)

timeout=60

# 是否允許URL重定向 (Whether to allow URL redirection)

allow_redirects=True

# 是否使用session (Whether to use session)

allow_http_session=True

# 是否隨機使用User-Agent (Whether to use User-Agent randomly)

allow_random_user_agent=False

# 代理配置 (Agent configuration)

allow_proxies= {

}

USER_AGENTS= [

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) "

"Chrome/19.0.1036.7 Safari/535.20",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; "

"Media Center PC 5.0; .NET CLR 3.0.04506)",

"Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322;"

" .NET CLR 2.0.50727)",

"Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0;"

" .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",

"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2;"

" .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",

"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727;"

" InfoPath.2; .NET CLR 3.0.04506.30)",

"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3)"

" Arora/0.3 (Change: 287 c9dfb30)",

"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",

"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",

"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",

"Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",

"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) "

"Chrome/19.0.1036.7 Safari/535.20",

"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",

]

# 隨機生成User-Agent (Randomly Generate User-Agent)

defrandom_user_agent(condition=False):

ifcondition:

returnrandom.choice(USER_AGENTS)

else:

returnUSER_AGENTS[]

# User-Agent設置 (User-Agent settings)

headers= {

"User-Agent":random_user_agent(allow_random_user_agent)

}

# nmap命令設置 (Nmap command settings)

nmap_cmd_line=""

0x06.使用方法 Usage 描述工具如何使用1、第一種是全掃描(收集所有信息)python Stealth.py -a xxx.xxx(1.The first is full scan (collect all information) python Stealth.py -a xxx.xxx)2、第二種選擇性掃描(收集部分信息) 例如: 收集 cms 和子域名信息python Stealth.py -s -c -D xxx.xxx(2.The second selective scan (collecting some information) For example: Collecting cms and subdomain information)注意: 當我們使用選擇性掃描的時候必須加上-D選項,後面接目標(Note: When we use selective scanning we must add -D option followed by the target)在探測 cms 信息的時候可能會出現連接 error,無視即可0x07.幫助信息·Help information·

usage: python Stealth.py domain [-h] [-a] [-D] [-d] [-s] [-R] [-I]

[-c] [-w] [-q]

Collect message

optional arguments:

-h,--helpshow this help message andexit

-a,--allPerform all operations

-D,--domainDoamin

-d,--dnsDns information

-s,--subdomainSubdomain information

-R,--robotsInquire Robots.txt

-I,--infoService Information and port Information and System Info

-c,--cmsCms Information

-w,--whoisWhois information

-q,--quitQuit

0x08.演示 Demo最終結果存放在 output 目錄下。 (The final result is stored in the output directory.)

0x09、版本更替信息2018/3/31 vsesion:1.0.00x10.項目參考 描述項目的參考對象wydomainhttps://github.com/ring04h/wydomain0x11.作者信息和聯繫方式紅日安全 雨幕(yumu) (Red Day Security Rain Screen (yumu))如有其他建議,或者 bug 反饋,可發郵件到


總結來說這個工具就是一個簡單的小爬蟲,但是我們要學會嘗試去模仿,有時候看起來簡單的事情只有自己做了才知道其中的困難,有困難是件好事,知道自己的不足,才會不斷進步。最後對項目如有其他建議,或者 bug 反饋,可發郵件到或者添加微信項目地址:https://github.com/ANyedt/Stealth


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

無盡夏工作室2018福袋
分享幾張魏碑拓片

TAG:全球大搜羅 |