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

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

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

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

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

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

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

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

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

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

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

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

上代码:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import argparse
  5. import importlib
  6. import sys
  7. import threadpool
  8.  
  9. def main():
  10. parser = argparse.ArgumentParser(description="Multithreading Batch Processing Framework")
  11. parser.add_argument("-s", "--script", type=open, required=True, help="script file")
  12. parser.add_argument("-i", "--input", type=open, required=True, help="input file")
  13. parser.add_argument("-t", "--thread", default=1, type=int, help="number of threads")
  14.  
  15. try:
  16. args = parser.parse_args()
  17. except IOError as e:
  18. print(e)
  19. sys.exit(1)
  20.  
  21. poolsize = args.thread
  22. some_callable = get_some_callable(args.script)
  23. list_of_args = get_list_of_args(args.input)
  24.  
  25. global log
  26.  
  27. try:
  28. log = open("log_" + args.input.name, "w")
  29. except IOError as e:
  30. print(e)
  31. sys.exit(1)
  32.  
  33. pool = threadpool.ThreadPool(poolsize)
  34. reqs = threadpool.makeRequests(some_callable, list_of_args, callback)
  35. [pool.putRequest(req) for req in reqs]
  36. pool.wait()
  37. pool.dismissWorkers(poolsize)
  38. pool.joinAllDismissedWorkers()
  39.  
  40. log.close()
  41.  
  42. def get_some_callable(script):
  43. try:
  44. script = importlib.import_module(script.name.split(".")[0])
  45. some_callable = script.exploit
  46. except (AttributeError, ImportError) as e:
  47. print(e)
  48. sys.exit(1)
  49. else:
  50. return some_callable
  51.  
  52. def get_list_of_args(input):
  53. list_of_args = list()
  54. list_of_temp = input.readlines()
  55. for i in list_of_temp:
  56. list_of_args.append(i.strip())
  57. return list_of_args
  58.  
  59. def callback(request, result):
  60. if result:
  61. log.write(result + "\n")
  62. print(result)
  63.  
  64. if __name__ == "__main__":
  65. 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. jupyter nootbook本地使用指南

    本地文件读入jupyter notebook 在文件夹内,shift+鼠标右键,出现菜单中选择“”在此处打开命令窗口“”,输入jupyter notebook, 可以把本地文件读入jupyter.

  2. 状压dp(状态压缩&&dp结合)学习笔记(持续更新)

    嗯,作为一只蒟蒻,今天再次学习了状压dp(学习借鉴的博客) 但是,依旧懵逼·································· 这篇学习笔记是我个人对于状压dp的理解,如果有什么不对的 ...

  3. [面试]volatile类型修饰符/内存屏障/处理器缓存

    volatile类型修饰符 本篇文章的目的是为了自己梳理面试知识点, 在这里做一下笔记. 绝大部分内容是基于这些文章的内容进行了copy+整理: 1. http://www.infoq.com/cn/ ...

  4. 当前标识没有对“C:\WINDOWS\Microsoft.NET\...”的写访问权限的解决办法

    1.需要重新注册IIS服务扩展,在开始运行中输入以下命令运行:aspnet_regiis -i 32位的Windows: --------------------------------------- ...

  5. Oracle启动操作

    转自:https://www.cnblogs.com/mellowsmile/p/4610942.html 1.启动oracle数据库: 从root切换到oracle用户进入:su - oracle ...

  6. Apache Spark 章节1

    作者:jiangzz 电话:15652034180 微信:jiangzz_wx 微信公众账号:jiangzz_wy 背景介绍 Spark是一个快如闪电的统一分析引擎(计算框架)用于大规模数据集的处理. ...

  7. luogu P5319 [BJOI2019]奥术神杖

    传送门 要求的东西带个根号,这玩意叫几何平均数,说到平均数,我们就能想到算术平均数(就是一般意义下的平均数),而这个东西是一堆数之积开根号,所以如果每个数取对数,那么乘法会变成加法,开根号变成除法,所 ...

  8. 异常处理--logging模块

    一. 异常处理 1. 异常类型: 语法错误 : 空格 缩进 语法规则 应该在我们写代码的时候就避免 逻辑错误: 应该在程序当中写代码处理 条件判断 异常处理 2. 常见的报错类型: Attribute ...

  9. 【转载】大白话Docker入门(二)

    原文:https://yq.aliyun.com/articles/63517?spm=a2c4e.11153940.blogcont63035.15.12011c3fddklk0 上篇的大白话Doc ...

  10. 【原创】大数据基础之Impala(3)部分调优

    1)将coordinator和executor角色分离 By default, each host in the cluster that runs the impalad daemon can ac ...