摘? 要:隨著系統(tǒng)業(yè)務(wù)的擴(kuò)展或個(gè)性化功能的完善,系統(tǒng)規(guī)模不斷擴(kuò)大,人工安全檢測(cè)的方式會(huì)增加檢測(cè)成本?;赑ython的安全檢測(cè)工具能夠?yàn)楦黝愊到y(tǒng)的安全檢測(cè)節(jié)省大量的成本和人力資源,有著廣泛的前景和實(shí)際的應(yīng)用價(jià)值。Python語言是現(xiàn)階段開發(fā)安全工具的主流語言,在界面部分可以使用Python自帶的Tkinter框架,Tkinter框架有輕便簡(jiǎn)潔的特點(diǎn)。為了解決更新和擴(kuò)展不便的缺點(diǎn),在開發(fā)的過程中采取模塊化的開發(fā)方式。把每一種功能封裝成單獨(dú)的模塊,增加功能或刪除功能都可以更加的簡(jiǎn)便快捷,也為該工具的二次開發(fā)提供了便利。
關(guān)鍵詞:安全檢測(cè);漏洞;加密解密
中圖分類號(hào):TP393.08? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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? 引? 言
安全檢測(cè)人員對(duì)系統(tǒng)進(jìn)行安全檢測(cè)時(shí),可以使用這個(gè)功能對(duì)目標(biāo)主機(jī)的信息進(jìn)行簡(jiǎn)單的收集,包括目標(biāo)主機(jī)的IP、端口、操作系統(tǒng)類型等,另一方面使用者還可以使用信息批量搜索功能在互聯(lián)網(wǎng)上指定關(guān)鍵字進(jìn)行內(nèi)容的搜索,搜索引擎支持谷歌、百度、必應(yīng)等。使用者可以對(duì)目標(biāo)系統(tǒng)進(jìn)行簡(jiǎn)單的Web端的安全檢測(cè),可以檢測(cè)目標(biāo)系統(tǒng)是否存在已經(jīng)公開的漏洞,也可以進(jìn)行簡(jiǎn)單的SQL和XSS漏洞的掃描檢測(cè)。除此之外,還包括在線的加密解密和離線的加密解密功能。在線的加密解密功能需要在有網(wǎng)絡(luò)的條件下進(jìn)行使用,解密的結(jié)果比較準(zhǔn)確,離線的加密解密功能的加密功能是基于算法的,但是解密功能是基于數(shù)據(jù)字典文件的。
1? 信息收集
該功能可以將用戶輸入的域名轉(zhuǎn)化成對(duì)應(yīng)的IP地址,如果用戶輸入的是IP地址則直接使用,不再進(jìn)行轉(zhuǎn)化,可以節(jié)約系統(tǒng)運(yùn)行的時(shí)間。該功能可以探測(cè)到目標(biāo)主機(jī)開放的端口、目標(biāo)主機(jī)的操作系統(tǒng)類型以及端口對(duì)應(yīng)的服務(wù)。當(dāng)使用該功能時(shí),輸入域名或者IP之后會(huì)提示輸入要掃描的端口的范圍,一方面可以更精確地掃描,另一方面縮小掃描范圍可以大大加快掃描的速度。
功能實(shí)現(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的掃描接口,對(duì)接口發(fā)送必要的信息,然后根據(jù)返回結(jié)果來判斷以及展現(xiàn)。
2? 信息批量搜索
信息批量搜索功能是利用各大知名搜索引擎來進(jìn)行相關(guān)信息的搜索,在使用這項(xiàng)功能的時(shí)候可以指定需要使用的搜索引擎,默認(rèn)的是使用谷歌搜索引擎,還可以指定搜索結(jié)果的條數(shù),默認(rèn)的是按照搜索的頁數(shù)來確定,還可以指定搜索類型,比如只按照指定的關(guān)鍵字來抓取URL或者是指定關(guān)鍵字對(duì)應(yīng)的摘要等。
當(dāng)搜索完成之后會(huì)在空白文本框中輸出搜索的結(jié)果,可以直觀地看到,還支持把搜索的結(jié)果存儲(chǔ)到數(shù)據(jù)庫中或者是以其他的形式存儲(chǔ)起來方便以后查看。
這一部分主要是利用搜索引擎的搜索功能,通過向各大搜索引擎發(fā)送搜集信息的請(qǐng)求來獲取各大搜索引擎的響應(yīng)包,然后分析響應(yīng)包中的數(shù)據(jù)來提取需要的數(shù)據(jù)。
功能實(shí)現(xiàn)的主要代碼:
def get_data(self):
# 對(duì)選擇搜索引擎做異常處理,這里是選擇谷歌搜索引擎之后的處理流程
if self.stringChosen.get()=="谷歌":
self.seacher_en="https://www.google.com.hk/search?q="
# 對(duì)選擇的搜索類型做異常處理
if self.numberChosen.get()=="抓取相關(guān)URL":
self.seacher_content=self.entry1.get()
# 對(duì)輸入的搜索關(guān)鍵字做異常處理
if self.seacher_content=="":
messagebox.showinfo("提示","請(qǐng)輸入要搜索的關(guān)鍵字")
else:self.number_rec=self.numberChosen2.get()
self.google_main=main_.SpiderMain()
self.flag="start"
else:messagebox.showinfo("提示","請(qǐng)選擇搜索類型?。?)
3? Web指紋識(shí)別
Web指紋識(shí)別功能可以讓使用人員通過輸入目標(biāo)網(wǎng)站的域名或者是IP來進(jìn)行Web系統(tǒng)DNA的探測(cè),原理是基于數(shù)據(jù)字典的Web指紋識(shí)別,目前支持主流的各種CMS。
實(shí)現(xiàn)原理是,首先建立各個(gè)CMS的特征字典,理論上字典越大探測(cè)的結(jié)果就會(huì)越準(zhǔn)確,然后利用程序,把重組后的特征鏈接逐個(gè)向目標(biāo)主機(jī)進(jìn)行提交,根據(jù)特征鏈接是否存在來判斷是哪一種CMS。
功能實(shí)現(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漏洞檢測(cè)
Web漏洞探測(cè)主要是根據(jù)漏洞的特征編寫POC,然后加載到自建的漏洞庫中,不管是在網(wǎng)絡(luò)上還是在自建的漏洞庫中都有自己一個(gè)唯一的編號(hào),為了可以快速地確定漏洞詳情,這里推薦使用國(guó)家網(wǎng)絡(luò)漏洞庫中的統(tǒng)一標(biāo)號(hào)。然后在探測(cè)自己的網(wǎng)站是否存在漏洞時(shí)自動(dòng)調(diào)用已經(jīng)編寫好的POC來進(jìn)行檢測(cè)。漏洞探測(cè)功能主要是根據(jù)POC來進(jìn)行漏洞的探測(cè),由于漏洞的不同POC也是不同的,這里提供S2-045漏洞的POC。
對(duì)于Linux操作系統(tǒng)的服務(wù)器使用下面的payload進(jìn)行探測(cè)。
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())}"
對(duì)于Windows操作系統(tǒng)的服務(wù)器使用下面的payload進(jìn)行探測(cè)。
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? 加密解密
在線的加密解密功能,首先會(huì)要求使用者在文本框中輸入要解密的密文,然后系統(tǒng)會(huì)根據(jù)密文的哈希值來計(jì)算出這個(gè)密文的類型,然后再根據(jù)密文和密文的類型去網(wǎng)上進(jìn)行解密,程序會(huì)根據(jù)在互聯(lián)網(wǎng)上搜索到的結(jié)果進(jìn)行整理然后展示給使用者。
在線的解密功能實(shí)現(xiàn)的主要原理是通過代碼獲取到要解密的密文,然后通過程序判斷密文的類型,然后根據(jù)密文的類型在互聯(lián)網(wǎng)上批量地搜索,然后篩選出正確的結(jié)果進(jìn)行顯示。
功能實(shí)現(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)實(shí)現(xiàn)了安全人員在測(cè)試的過程中基本會(huì)使用到的功能。包括了系統(tǒng)的指紋識(shí)別,對(duì)系統(tǒng)的主機(jī)識(shí)別,還有信息搜集功能。在專業(yè)的角度來說,系統(tǒng)基本上是滿足了基礎(chǔ)的安全測(cè)試的需要,具體體現(xiàn)在,該工具可以對(duì)目標(biāo)網(wǎng)站進(jìn)行安全漏洞的檢測(cè),還有可以對(duì)目標(biāo)網(wǎng)站進(jìn)行XSS漏洞的掃描和SQL漏洞的掃描,而這些漏洞就是安全從業(yè)人員在日常的安全測(cè)試中最需要注意的地方,工具可以節(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編程實(shí)踐 [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í)手冊(cè) [M].第4版.李軍,劉紅偉譯.北京:機(jī)械工業(yè)出版社,2011.
[7] 張若愚.Python科學(xué)計(jì)算 [M].北京:清華大學(xué)出版社,2012.
[8] [美]James Payne.Python編程入門經(jīng)典 [M].張春暉譯.北京:清華大學(xué)出版社,2011.
作者簡(jiǎn)介:夏冰冰(1979-),女,漢族,山東濟(jì)南人,副教授,碩士研究生,研究方向:計(jì)算機(jī)軟件與理論。