使用Python开发的POC多线程批量执行小框架
因为代码量非常少,所以就叫“小框架”吧。
接口非常简陋,但是好处是适配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多线程批量执行小框架的更多相关文章
- Python开发的3种命令执行方法
在python开发中,我们常常需要执行命令,修改相关信息.那对于初学者来说,python中如何执行命令呢?今天,小编就为大家分享3种python命令执行的方法. 1. 使用os.system(&quo ...
- 使用python进行接口自动化测试,批量执行测试用例
工作中,使用python的requests库进行接口自动化测试是一个比较不错的选择,今天就以某网站的免费接口为例,展示以get请求进行批量执行测试用例.话不多说直接开讲 分析一下接口信息, 请求地址: ...
- Python开发程序:RPC异步执行命令(RabbitMQ双向通信)
RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 不懂rpc的请移步h ...
- Python开发基础-Day30多线程锁机制
GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,是为了实现不同线程对共享资源访问的互斥,才引入了GIL 在Cpython解释器 ...
- Python开发基础-Day29多线程
概念 进程:进程就是一个程序在一个数据集上的一次动态执行过程 程序:代码 数据集:程序执行过程中需要的资源 进程控制块:完成状态保存的单元 线程:线程是寄托在进程之上,为了提高系统的并发性 线程是进程 ...
- shell脚本安装python、pip-----非交互式的--批量执行函数
首先把pip-.tgz 安装包放在 /usr/local 下面,按照顺序先安装pip,再安装python.不要先安装或只安装python,否则很容易出错, cat >>pip-python ...
- Python开发【十八章】:Web框架
Web框架本质 1.众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 #!/usr/bin/env python # -*- codin ...
- c#实现用SQL池(多线程),定时批量执行SQL语句 【转】
在实际项目开发中,业务逻辑层的处理速度往往很快,特别是在开发Socket通信服务的时候,网络传输很快,但是一旦加上数据库操作,性能一落千丈,数据库操作的效率往往成为一个系统整体性能的瓶颈.面对这问题, ...
- c#实现用SQL池(多线程),定时批量执行SQL语句
在实际项目开发中,业务逻辑层的处理速度往往很快,特别是在开发Socket通信服务的时候,网络传输很快,但是一旦加上数据库操作,性能一落千丈,数据库操作的效率往往成为一个系统整体性能的瓶颈.面对这问题, ...
随机推荐
- sklearn_收入模型
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- 《Unbroken》
<Unbroken> 献给正在奋力向前的你 You can’t connect the dots looking forward, you can only connect them lo ...
- HttpServletRequest基础
一.请求行 二.请求消息头 三.请求正文(重要) 1.获取表单(request)提交的数据 (1)getParameter(name):根据表单name属性的名字,获取name的值 (2)getPar ...
- AFM论文精读
深度学习在推荐系统的应用(二)中AFM的简单回顾 AFM模型(Attentional Factorization Machine) 模型原始论文 Attentional Factorization M ...
- react native 中时间选择插件
npm install react-native-datepicker --save import DatePicker from 'react-native-datepicker'; <Vie ...
- CF1153C Serval and Parenthesis Sequence
题目地址:CF1153C Serval and Parenthesis Sequence 思路:贪心 如果有解,那么 \(s_0 = (\) && \(s_{n-1} = )\) &a ...
- 手写代码 - java.util.List 相关
1-ArrayList 访问元素,不能使用ArrayList[0]形式!!!! 必须使用ArrayList.get(0);
- mysql登录报错“Access denied for user 'root'@'localhost' (using password: YES”)的处理方法
环境 CentosOS 6.5 ,已安装mysql 情景 root密码忘记,使用普通用户无法登录 解决 问题一 无法使用mysql命令 参考文章:https://www.cnblogs.com/com ...
- Python爬虫基础之requests
一.随时随地爬取一个网页下来 怎么爬取网页?对网站开发了解的都知道,浏览器访问Url向服务器发送请求,服务器响应浏览器请求并返回一堆HTML信息,其中包括html标签,css样式,js脚本等.我们之前 ...
- linux只端口监听及杀死进程
centOs7操作记录~ 1:查看端口占用情况: 命令:netstat -lnp|grep #posrNum 可以看到11788 正在运行java程序正在占用8044端口: 命令:ps 11788 可 ...