基于Python的安全检测的研究与实现
2019-09-10夏冰冰
摘 要:随着系统业务的扩展或个性化功能的完善,系统规模不断扩大,人工安全检测的方式会增加检测成本。基于Python的安全检测工具能够为各类系统的安全检测节省大量的成本和人力资源,有着广泛的前景和实际的应用价值。Python语言是现阶段开发安全工具的主流语言,在界面部分可以使用Python自带的Tkinter框架,Tkinter框架有轻便简洁的特点。为了解决更新和扩展不便的缺点,在开发的过程中采取模块化的开发方式。把每一种功能封装成单独的模块,增加功能或删除功能都可以更加的简便快捷,也为该工具的二次开发提供了便利。
关键词:安全检测;漏洞;加密解密
中图分类号:TP393.08 文献标识码: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 引 言
安全檢测人员对系统进行安全检测时,可以使用这个功能对目标主机的信息进行简单的收集,包括目标主机的IP、端口、操作系统类型等,另一方面使用者还可以使用信息批量搜索功能在互联网上指定关键字进行内容的搜索,搜索引擎支持谷歌、百度、必应等。使用者可以对目标系统进行简单的Web端的安全检测,可以检测目标系统是否存在已经公开的漏洞,也可以进行简单的SQL和XSS漏洞的扫描检测。除此之外,还包括在线的加密解密和离线的加密解密功能。在线的加密解密功能需要在有网络的条件下进行使用,解密的结果比较准确,离线的加密解密功能的加密功能是基于算法的,但是解密功能是基于数据字典文件的。
1 信息收集
该功能可以将用户输入的域名转化成对应的IP地址,如果用户输入的是IP地址则直接使用,不再进行转化,可以节约系统运行的时间。该功能可以探测到目标主机开放的端口、目标主机的操作系统类型以及端口对应的服务。当使用该功能时,输入域名或者IP之后会提示输入要扫描的端口的范围,一方面可以更精确地扫描,另一方面缩小扫描范围可以大大加快扫描的速度。
功能实现的主要代码:
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的扫描接口,对接口发送必要的信息,然后根据返回结果来判断以及展现。
2 信息批量搜索
信息批量搜索功能是利用各大知名搜索引擎来进行相关信息的搜索,在使用这项功能的时候可以指定需要使用的搜索引擎,默认的是使用谷歌搜索引擎,还可以指定搜索结果的条数,默认的是按照搜索的页数来确定,还可以指定搜索类型,比如只按照指定的关键字来抓取URL或者是指定关键字对应的摘要等。
当搜索完成之后会在空白文本框中输出搜索的结果,可以直观地看到,还支持把搜索的结果存储到数据库中或者是以其他的形式存储起来方便以后查看。
这一部分主要是利用搜索引擎的搜索功能,通过向各大搜索引擎发送搜集信息的请求来获取各大搜索引擎的响应包,然后分析响应包中的数据来提取需要的数据。
功能实现的主要代码:
def get_data(self):
# 对选择搜索引擎做异常处理,这里是选择谷歌搜索引擎之后的处理流程
if self.stringChosen.get()=="谷歌":
self.seacher_en="https://www.google.com.hk/search?q="
# 对选择的搜索类型做异常处理
if self.numberChosen.get()=="抓取相关URL":
self.seacher_content=self.entry1.get()
# 对输入的搜索关键字做异常处理
if self.seacher_content=="":
messagebox.showinfo("提示","请输入要搜索的关键字")
else:self.number_rec=self.numberChosen2.get()
self.google_main=main_.SpiderMain()
self.flag="start"
else:messagebox.showinfo("提示","请选择搜索类型!!")
3 Web指纹识别
Web指纹识别功能可以让使用人员通过输入目标网站的域名或者是IP来进行Web系统DNA的探测,原理是基于數据字典的Web指纹识别,目前支持主流的各种CMS。
实现原理是,首先建立各个CMS的特征字典,理论上字典越大探测的结果就会越准确,然后利用程序,把重组后的特征链接逐个向目标主机进行提交,根据特征链接是否存在来判断是哪一种CMS。
功能实现的主要代码:
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漏洞探测主要是根据漏洞的特征编写POC,然后加载到自建的漏洞库中,不管是在网络上还是在自建的漏洞库中都有自己一个唯一的编号,为了可以快速地确定漏洞详情,这里推荐使用国家网络漏洞库中的统一标号。然后在探测自己的网站是否存在漏洞时自动调用已经编写好的POC来进行检测。漏洞探测功能主要是根据POC来进行漏洞的探测,由于漏洞的不同POC也是不同的,这里提供S2-045漏洞的POC。
对于Linux操作系统的服务器使用下面的payload进行探测。
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操作系统的服务器使用下面的payload进行探测。
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 加密解密
在线的加密解密功能,首先会要求使用者在文本框中输入要解密的密文,然后系统会根据密文的哈希值来计算出这个密文的类型,然后再根据密文和密文的类型去网上进行解密,程序会根据在互联网上搜索到的结果进行整理然后展示给使用者。
在线的解密功能实现的主要原理是通过代码获取到要解密的密文,然后通过程序判断密文的类型,然后根据密文的类型在互联网上批量地搜索,然后筛选出正确的结果进行显示。
功能实现的主要代码:
class Secret(object):
def __init__(self,text3, test4,entry):
self.text3=text3 self.text4=test4 self.entry = entry
self.web =web_decrypt
# 判断密文类型的函数
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 结 论
系统实现了安全人员在测试的过程中基本会使用到的功能。包括了系统的指纹识别,对系统的主机识别,还有信息搜集功能。在专业的角度来说,系统基本上是满足了基础的安全测试的需要,具体体现在,该工具可以对目标网站进行安全漏洞的检测,还有可以对目标网站进行XSS漏洞的扫描和SQL漏洞的扫描,而这些漏洞就是安全从业人员在日常的安全测试中最需要注意的地方,工具可以节省大量的人力和物力,基本上符合当初开发工具的初衷。
参考文献:
[1] [美]Wesley J.Chun著.Python核心编程 [M].宋吉广译.北京:人民邮电出版社,2008.
[2] [美]Doug Hellmann著.Python标准库 [M].刘炽译.北京:机械工业出版社,2012.
[3] [美]Jennifer Campbel,Paul Gries,Jason Montojo,等著. Python编程实践 [M].唐学韬译.北京:机械工业出版社,2012.
[4] Mark Lutz. Programming Python [M]. America:O'Reilly Media,2010.
[5] [挪]Magnus Lie Hetland.Python基础教程 [M].第2版. 司维,曾军崴,谭颖华译.北京:人民邮电出版社,2010.
[6] [美]Mark Lutz.Python学习手册 [M].第4版.李军,刘红伟译.北京:机械工业出版社,2011.
[7] 张若愚.Python科学计算 [M].北京:清华大学出版社,2012.
[8] [美]James Payne.Python编程入门经典 [M].张春晖译.北京:清华大学出版社,2011.
作者简介:夏冰冰(1979-),女,汉族,山东济南人,副教授,硕士研究生,研究方向:计算机软件与理论。