因为代码量非常少,所以就叫“小框架”吧。

接口非常简陋,但是好处是适配POC脚本的时候很灵活,兼容性高,不需要任何研究成本。

简单来说,你按照自己的想法和习惯开发一个POC验证程序,它只要做到三点,即:

1. 接收一个目标地址字符串作为输入参数。

2. 定义一个名称为 "exploit" 的函数供小框架来调用。

3. 当验证成功时返回一个自定义的字符串作为标志。

就完全可以满足使用小框架的条件了。

针对以上条件再说一下细节。

小框架负责将字符串参数传递给POC程序,逻辑上讲最少要传递目标地址,想再接一些其他参数也完全可以,只要你的POC程序可以正确解析和处理就可以,完全由你自己来控制。

小框架在读取POC程序之后会调用名为 "exploit" 的函数,并获取返回结果,就好比操作系统载入一个PE程序之后会调用 "main()" 函数的道理一样,至于这个函数里面又调用了其他哪些函数,就完全是由你自己来自由定制了。

POC程序,或者说 "exploit" 函数验证成功的时候返回一个表示成功的自定义字符串,这个不必解释了,那么验证失败的时候呢?当然也可以返回另一个标志字符串,但是我个人一般习惯直接丢弃验证失败的目标结果不做记录,这个看个人需求了,也是自由定制的。

小框架使用Python来开发,Python 2 和 3 无缝兼容执行。

上代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*- import argparse
import importlib
import sys
import threadpool def main():
parser = argparse.ArgumentParser(description="Multithreading Batch Processing Framework")
parser.add_argument("-s", "--script", type=open, required=True, help="script file")
parser.add_argument("-i", "--input", type=open, required=True, help="input file")
parser.add_argument("-t", "--thread", default=1, type=int, help="number of threads") try:
args = parser.parse_args()
except IOError as e:
print(e)
sys.exit(1) poolsize = args.thread
some_callable = get_some_callable(args.script)
list_of_args = get_list_of_args(args.input) global log try:
log = open("log_" + args.input.name, "w")
except IOError as e:
print(e)
sys.exit(1) pool = threadpool.ThreadPool(poolsize)
reqs = threadpool.makeRequests(some_callable, list_of_args, callback)
[pool.putRequest(req) for req in reqs]
pool.wait()
pool.dismissWorkers(poolsize)
pool.joinAllDismissedWorkers() log.close() def get_some_callable(script):
try:
script = importlib.import_module(script.name.split(".")[0])
some_callable = script.exploit
except (AttributeError, ImportError) as e:
print(e)
sys.exit(1)
else:
return some_callable def get_list_of_args(input):
list_of_args = list()
list_of_temp = input.readlines()
for i in list_of_temp:
list_of_args.append(i.strip())
return list_of_args def callback(request, result):
if result:
log.write(result + "\n")
print(result) if __name__ == "__main__":
main()

使用Python开发的POC多线程批量执行小框架的更多相关文章

  1. Python开发的3种命令执行方法

    在python开发中,我们常常需要执行命令,修改相关信息.那对于初学者来说,python中如何执行命令呢?今天,小编就为大家分享3种python命令执行的方法. 1. 使用os.system(&quo ...

  2. 使用python进行接口自动化测试,批量执行测试用例

    工作中,使用python的requests库进行接口自动化测试是一个比较不错的选择,今天就以某网站的免费接口为例,展示以get请求进行批量执行测试用例.话不多说直接开讲 分析一下接口信息, 请求地址: ...

  3. Python开发程序:RPC异步执行命令(RabbitMQ双向通信)

    RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 不懂rpc的请移步h ...

  4. Python开发基础-Day30多线程锁机制

    GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,是为了实现不同线程对共享资源访问的互斥,才引入了GIL 在Cpython解释器 ...

  5. Python开发基础-Day29多线程

    概念 进程:进程就是一个程序在一个数据集上的一次动态执行过程 程序:代码 数据集:程序执行过程中需要的资源 进程控制块:完成状态保存的单元 线程:线程是寄托在进程之上,为了提高系统的并发性 线程是进程 ...

  6. shell脚本安装python、pip-----非交互式的--批量执行函数

    首先把pip-.tgz 安装包放在 /usr/local 下面,按照顺序先安装pip,再安装python.不要先安装或只安装python,否则很容易出错, cat >>pip-python ...

  7. Python开发【十八章】:Web框架

    Web框架本质 1.众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 #!/usr/bin/env python # -*- codin ...

  8. c#实现用SQL池(多线程),定时批量执行SQL语句 【转】

    在实际项目开发中,业务逻辑层的处理速度往往很快,特别是在开发Socket通信服务的时候,网络传输很快,但是一旦加上数据库操作,性能一落千丈,数据库操作的效率往往成为一个系统整体性能的瓶颈.面对这问题, ...

  9. c#实现用SQL池(多线程),定时批量执行SQL语句

    在实际项目开发中,业务逻辑层的处理速度往往很快,特别是在开发Socket通信服务的时候,网络传输很快,但是一旦加上数据库操作,性能一落千丈,数据库操作的效率往往成为一个系统整体性能的瓶颈.面对这问题, ...

随机推荐

  1. 解决springboot jar包冲突

    直接导入springboot父项依赖,其它相关springboot依赖version不用写,由spring自动依赖. <parent> <groupId>org.springf ...

  2. STDIN_FILENO和stdin

    title: STDIN_FILENO和stdin date: 2019/03/15 22:03:22 toc: true --- STDIN_FILENO和stdin https://blog.cs ...

  3. git使用方法收藏

    基本的提交:https://www.cnblogs.com/jackchensir/p/8306448.html 菜鸟教程: http://www.runoob.com/git/git-basic-o ...

  4. Precision 7520双硬盘无法识别固态硬盘

    将RAID ON 修改为AHCI,如图1,会使得 win10无法 启动,如图2 图 1 图 2 可以开legacy,如图3,让电脑可以从u盘启动,如图4,但是也无法查看到固态硬盘 图 3 图 4 网上 ...

  5. canvans生成图片<p>标签文字不居中

    尝试使用magin 0px auto ;width:100%解决.

  6. Ext.net按钮事件中使用Response.Redirect的一个问题

    今天遇到一个Response.Redirect问题 通过Ext.net按钮写发送事件时,连接中会多出一个&amp,如果后台不进行UrlEncode操作的话,就会出问题,可是很不幸的是,有些跳转 ...

  7. vue组件中data为什么必须是个函数

    <body> <div id="app"> <counter></counter> </div> <templat ...

  8. numpy数组取每一列的数据

    也可以运用到列表中,a原本是一个列表的嵌套,将a转为了数组进行此操作,可以取固定的值,这就是numpy的好处.

  9. qt学习笔记

    Part 1基本思路 学习目标:(熟练)使用 qt 制作符合要求的 ui FAQ:1)学习Qt5还是Qt4? 重要的是学习的方法而不是内容,掌握了正确的学习方法就可以很快完成另一者的学习,综合来看,Q ...

  10. 关于mvc中传递匿名对象,view中无法解析

    最近做项目用到MVC,发现用linq查询得到的数据是匿名类型对象,通过模型绑定.或者ViewBag.ViewData进行数据传递后,View解析报错:“object 未包含xx的定义”: 没找到好的解 ...