摘? 要:隨著系統(tǒng)業(yè)務(wù)的擴(kuò)展或個性化功能的完善,系統(tǒng)規(guī)模不斷擴(kuò)大,人工安全檢測的方式會增加檢測成本?;赑ython的安全檢測工具能夠為各類系統(tǒng)的安全檢測節(jié)省大量的成本和人力資源,有著廣泛的前景和實際的應(yīng)用價值。Python語言是現(xiàn)階段開發(fā)安全工具的主流語言,在界面部分可以使用Python自帶的Tkinter框架,Tkinter框架有輕便簡潔的特點。為了解決更新和擴(kuò)展不便的缺點,在開發(fā)的過程中采取模塊化的開發(fā)方式。把每一種功能封裝成單獨的模塊,增加功能或刪除功能都可以更加的簡便快捷,也為該工具的二次開發(fā)提供了便利。
關(guān)鍵詞:安全檢測;漏洞;加密解密
中圖分類號:TP393.08? ? ? 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2019)10-0155-03
Abstract:With the expansion of the system business or the improvement of the personalized functions,the system scale is continuously expanded,and the method of manual security detection will increase the detection cost. Python-based security detection tools can save a lot of cost and human resources for the security detection of various systems,and have broad prospects and practical application value. The Python language is the mainstream language for developing security tools at this stage. In the interface part, you can use the Tkinter framework that comes with Python. The Tkinter framework is light and simple. In order to solve the shortcomings of updating and expanding inconvenience,a modular development method is adopted in the development process. By packaging each function into a separate module,adding or deleting functions can be made easier and faster,and it also facilitates the secondary development of the tool.
Keywords:safety inspection;vulnerability;encrypt and decode
0? 引? 言
安全檢測人員對系統(tǒng)進(jìn)行安全檢測時,可以使用這個功能對目標(biāo)主機(jī)的信息進(jìn)行簡單的收集,包括目標(biāo)主機(jī)的IP、端口、操作系統(tǒng)類型等,另一方面使用者還可以使用信息批量搜索功能在互聯(lián)網(wǎng)上指定關(guān)鍵字進(jìn)行內(nèi)容的搜索,搜索引擎支持谷歌、百度、必應(yīng)等。使用者可以對目標(biāo)系統(tǒng)進(jìn)行簡單的Web端的安全檢測,可以檢測目標(biāo)系統(tǒng)是否存在已經(jīng)公開的漏洞,也可以進(jìn)行簡單的SQL和XSS漏洞的掃描檢測。除此之外,還包括在線的加密解密和離線的加密解密功能。在線的加密解密功能需要在有網(wǎng)絡(luò)的條件下進(jìn)行使用,解密的結(jié)果比較準(zhǔn)確,離線的加密解密功能的加密功能是基于算法的,但是解密功能是基于數(shù)據(jù)字典文件的。
1? 信息收集
該功能可以將用戶輸入的域名轉(zhuǎn)化成對應(yīng)的IP地址,如果用戶輸入的是IP地址則直接使用,不再進(jìn)行轉(zhuǎn)化,可以節(jié)約系統(tǒng)運(yùn)行的時間。該功能可以探測到目標(biāo)主機(jī)開放的端口、目標(biāo)主機(jī)的操作系統(tǒng)類型以及端口對應(yīng)的服務(wù)。當(dāng)使用該功能時,輸入域名或者IP之后會提示輸入要掃描的端口的范圍,一方面可以更精確地掃描,另一方面縮小掃描范圍可以大大加快掃描的速度。
功能實現(xiàn)的主要代碼:
import nmap
class NMAP(object):? def os_cms(self,ip,port):
if ip == "wait":? return 3
else:? try:? nm = nmap.PortScanner()? # 端口的范圍 22-443
res = nm.scan(ip,port)? s = res["scan"][ip]? print(s) return s
except:? return 3
利用NMAP的掃描接口,對接口發(fā)送必要的信息,然后根據(jù)返回結(jié)果來判斷以及展現(xiàn)。
2? 信息批量搜索
信息批量搜索功能是利用各大知名搜索引擎來進(jìn)行相關(guān)信息的搜索,在使用這項功能的時候可以指定需要使用的搜索引擎,默認(rèn)的是使用谷歌搜索引擎,還可以指定搜索結(jié)果的條數(shù),默認(rèn)的是按照搜索的頁數(shù)來確定,還可以指定搜索類型,比如只按照指定的關(guān)鍵字來抓取URL或者是指定關(guān)鍵字對應(yīng)的摘要等。
當(dāng)搜索完成之后會在空白文本框中輸出搜索的結(jié)果,可以直觀地看到,還支持把搜索的結(jié)果存儲到數(shù)據(jù)庫中或者是以其他的形式存儲起來方便以后查看。
這一部分主要是利用搜索引擎的搜索功能,通過向各大搜索引擎發(fā)送搜集信息的請求來獲取各大搜索引擎的響應(yīng)包,然后分析響應(yīng)包中的數(shù)據(jù)來提取需要的數(shù)據(jù)。
功能實現(xiàn)的主要代碼:
def get_data(self):
# 對選擇搜索引擎做異常處理,這里是選擇谷歌搜索引擎之后的處理流程
if self.stringChosen.get()=="谷歌":
self.seacher_en="https://www.google.com.hk/search?q="
# 對選擇的搜索類型做異常處理
if self.numberChosen.get()=="抓取相關(guān)URL":
self.seacher_content=self.entry1.get()
# 對輸入的搜索關(guān)鍵字做異常處理
if self.seacher_content=="":
messagebox.showinfo("提示","請輸入要搜索的關(guān)鍵字")
else:self.number_rec=self.numberChosen2.get()
self.google_main=main_.SpiderMain()
self.flag="start"
else:messagebox.showinfo("提示","請選擇搜索類型?。?)
3? Web指紋識別
Web指紋識別功能可以讓使用人員通過輸入目標(biāo)網(wǎng)站的域名或者是IP來進(jìn)行Web系統(tǒng)DNA的探測,原理是基于數(shù)據(jù)字典的Web指紋識別,目前支持主流的各種CMS。
實現(xiàn)原理是,首先建立各個CMS的特征字典,理論上字典越大探測的結(jié)果就會越準(zhǔn)確,然后利用程序,把重組后的特征鏈接逐個向目標(biāo)主機(jī)進(jìn)行提交,根據(jù)特征鏈接是否存在來判斷是哪一種CMS。
功能實現(xiàn)的主要代碼:
class Webdna:def__init__(self,url):filename=os.path.join(sys.path[0],"data","data.json")
fp=open(filename)self.j=json.load(fp)self.url=urlself.loop=None fp.close()
def getmd5(self,body):m2=hashlib.md5()m2.update(body)return m2.hexdigest()
4? Web漏洞檢測
Web漏洞探測主要是根據(jù)漏洞的特征編寫POC,然后加載到自建的漏洞庫中,不管是在網(wǎng)絡(luò)上還是在自建的漏洞庫中都有自己一個唯一的編號,為了可以快速地確定漏洞詳情,這里推薦使用國家網(wǎng)絡(luò)漏洞庫中的統(tǒng)一標(biāo)號。然后在探測自己的網(wǎng)站是否存在漏洞時自動調(diào)用已經(jīng)編寫好的POC來進(jìn)行檢測。漏洞探測功能主要是根據(jù)POC來進(jìn)行漏洞的探測,由于漏洞的不同POC也是不同的,這里提供S2-045漏洞的POC。
對于Linux操作系統(tǒng)的服務(wù)器使用下面的payload進(jìn)行探測。
payloadlinux="%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='ifconfig').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=newjava.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"
對于Windows操作系統(tǒng)的服務(wù)器使用下面的payload進(jìn)行探測。
payloadwindows = "%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='ipconfig').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=newjava.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}"
5? 加密解密
在線的加密解密功能,首先會要求使用者在文本框中輸入要解密的密文,然后系統(tǒng)會根據(jù)密文的哈希值來計算出這個密文的類型,然后再根據(jù)密文和密文的類型去網(wǎng)上進(jìn)行解密,程序會根據(jù)在互聯(lián)網(wǎng)上搜索到的結(jié)果進(jìn)行整理然后展示給使用者。
在線的解密功能實現(xiàn)的主要原理是通過代碼獲取到要解密的密文,然后通過程序判斷密文的類型,然后根據(jù)密文的類型在互聯(lián)網(wǎng)上批量地搜索,然后篩選出正確的結(jié)果進(jìn)行顯示。
功能實現(xiàn)的主要代碼:
class Secret(object):
def __init__(self,text3, test4,entry):
self.text3=text3? self.text4=test4? self.entry = entry
self.web =web_decrypt
# 判斷密文類型的函數(shù)
def hash_id(self):
self.entry.delete(0 END)? var = self.text3.get('0.0',END)
self.var=var.rstrip('\n')? self.hash = Hash_ID.HashId()
res_hash=self.hash.root(self.var)? self.entry.insert(0,res_hash)
# 在線解密的功能
def online_decrypt(self):
self.text4.delete('1.0',END)? entry_val = self.entry.get()
if entry_val: if entry_val=="MD5": md5 = self.var
result=self.web.root(md5)? self.text4.insert (INSERT,result[1])
self.text4.insert(INSERT,result[2])
else:? messagebox.showinfo("提示",'暫不支持的解密類型!')
else:? messagebox.showinfo("提示","沒有判斷密文的類型!")
6? 結(jié)? 論
系統(tǒng)實現(xiàn)了安全人員在測試的過程中基本會使用到的功能。包括了系統(tǒng)的指紋識別,對系統(tǒng)的主機(jī)識別,還有信息搜集功能。在專業(yè)的角度來說,系統(tǒng)基本上是滿足了基礎(chǔ)的安全測試的需要,具體體現(xiàn)在,該工具可以對目標(biāo)網(wǎng)站進(jìn)行安全漏洞的檢測,還有可以對目標(biāo)網(wǎng)站進(jìn)行XSS漏洞的掃描和SQL漏洞的掃描,而這些漏洞就是安全從業(yè)人員在日常的安全測試中最需要注意的地方,工具可以節(jié)省大量的人力和物力,基本上符合當(dāng)初開發(fā)工具的初衷。
參考文獻(xiàn):
[1] [美]Wesley J.Chun著.Python核心編程 [M].宋吉廣譯.北京:人民郵電出版社,2008.
[2] [美]Doug Hellmann著.Python標(biāo)準(zhǔn)庫 [M].劉熾譯.北京:機(jī)械工業(yè)出版社,2012.
[3] [美]Jennifer Campbel,Paul Gries,Jason Montojo,等著. Python編程實踐 [M].唐學(xué)韜譯.北京:機(jī)械工業(yè)出版社,2012.
[4] Mark Lutz. Programming Python [M]. America:O'Reilly Media,2010.
[5] [挪]Magnus Lie Hetland.Python基礎(chǔ)教程 [M].第2版. 司維,曾軍崴,譚穎華譯.北京:人民郵電出版社,2010.
[6] [美]Mark Lutz.Python學(xué)習(xí)手冊 [M].第4版.李軍,劉紅偉譯.北京:機(jī)械工業(yè)出版社,2011.
[7] 張若愚.Python科學(xué)計算 [M].北京:清華大學(xué)出版社,2012.
[8] [美]James Payne.Python編程入門經(jīng)典 [M].張春暉譯.北京:清華大學(xué)出版社,2011.
作者簡介:夏冰冰(1979-),女,漢族,山東濟(jì)南人,副教授,碩士研究生,研究方向:計算機(jī)軟件與理論。