Python实现E-Mail收集插件实例教程


Posted in Python onFebruary 06, 2019

__import__函数

我们都知道import是导入模块的,但是其实import实际上是使用builtin函数import来工作的。在一些程序中,我们可以动态去调用函数,如果我们知道模块的名称(字符串)的时候,我们可以很方便的使用动态调用

def getfunctionbyname(module_name, function_name):
 module = __import__(module_name)
 return getattr(module, function_name)

通过这段代码,我们就可以简单调用一个模块的函数了

插件系统开发流程

一个插件系统运转工作,主要进行以下几个方面的操作

  • 获取插件,通过对一个目录里的.py文件扫描得到
  • 将插件目录加入到环境变量sys.path
  • 爬虫将扫描好的 URL 和网页源码传递给插件
  • 插件工作,工作完毕后将主动权还给扫描器

插件系统代码

在lib/core/plugin.py中创建一个spiderplus类,实现满足我们要求的代码

# __author__ = 'mathor'

import os
import sys
class spiderplus(object):
 def __init__(self, plugin, disallow = []):
  self.dir_exploit = []
  self.disallow = ['__init__']
  self.disallow.extend(disallow)
  self.plugin = os.getcwd() + '/' + plugin
  sys.path.append(plugin)
 
 def list_plusg(self):
  def filter_func(file):
   if not file.endswith('.py'):
    return False
   for disfile in self.disallow:
    if disfile in file:
     return False
   return True
  dir_exploit = filter(filter_func, os.listdir(self.plugin)
  return list(dir_exploit)
  
 def work(self, url, html):
  for _plugin in self.list_plusg():
   try:
    m = __import__(_plugin.split('.')[0])
    spider = getattr(m, 'spider')
    p = spider()
    s = p.run(url, html)
   except Exception as e:
    print (e)

work函数中需要传递 url,html,这个就是我们扫描器传给插件系统的,通过代码

spider = getattr(m, 'spider')
p = spider()
s = p.run(url, html)

我们定义插件必须使用class spider中的run方法调用

扫描器中调用插件

我们主要用爬虫调用插件,因为插件需要传递 url 和网页源码这两个参数,所以我们在爬虫获取到这两个的地方加入插件系统代码即可

首先打开Spider.py,在Spider.py文件开头加上

from lib.core import plugin

然后在文件的末尾加上

Python实现E-Mail收集插件实例教程

disallow = ['sqlcheck']
_plugin = plugin.spiderplus('script', disallow)
_plugin.work(_str['url'], _str['html'])

disallow是不允许的插件列表,为了方便测试,我们可以把 sqlcheck 填上

SQL 注入融入插件系统

其实非常简单,只需要修改script/sqlcheck.py为下面即可

关于Download模块,其实就是Downloader模块,把Downloader.py复制一份命名为Download.py就行

import re, random
from lib.core import Download

class spider:
 def run(self, url, html):
  if (not url.find("?")): # Pseudo-static page
   return false;
  Downloader = Download.Downloader()
  BOOLEAN_TESTS = (" AND %d=%d", " OR NOT (%d=%d)")
  DBMS_ERRORS = {
   # regular expressions used for DBMS recognition based on error message response
   "MySQL": (r"SQL syntax.*MySQL", r"Warning.*mysql_.*", r"valid MySQL result", r"MySqlClient\."),
   "PostgreSQL": (r"PostgreSQL.*ERROR", r"Warning.*\Wpg_.*", r"valid PostgreSQL result", r"Npgsql\."),
   "Microsoft SQL Server": (r"Driver.* SQL[\-\_\ ]*Server", r"OLE DB.* SQL Server", r"(\W|\A)SQL Server.*Driver", r"Warning.*mssql_.*", r"(\W|\A)SQL Server.*[0-9a-fA-F]{8}", r"(?s)Exception.*\WSystem\.Data\.SqlClient\.", r"(?s)Exception.*\WRoadhouse\.Cms\."),
   "Microsoft Access": (r"Microsoft Access Driver", r"JET Database Engine", r"Access Database Engine"),
   "Oracle": (r"\bORA-[0-9][0-9][0-9][0-9]", r"Oracle error", r"Oracle.*Driver", r"Warning.*\Woci_.*", r"Warning.*\Wora_.*"),
   "IBM DB2": (r"CLI Driver.*DB2", r"DB2 SQL error", r"\bdb2_\w+\("),
   "SQLite": (r"SQLite/JDBCDriver", r"SQLite.Exception", r"System.Data.SQLite.SQLiteException", r"Warning.*sqlite_.*", r"Warning.*SQLite3::", r"\[SQLITE_ERROR\]"),
   "Sybase": (r"(?i)Warning.*sybase.*", r"Sybase message", r"Sybase.*Server message.*"),
  }
  _url = url + "%29%28%22%27"
  _content = Downloader.get(_url)
  for (dbms, regex) in ((dbms, regex) for dbms in DBMS_ERRORS for regex in DBMS_ERRORS[dbms]):
   if (re.search(regex,_content)):
    return True
  content = {}
  content['origin'] = Downloader.get(_url)
  for test_payload in BOOLEAN_TESTS:
   # Right Page
   RANDINT = random.randint(1, 255)
   _url = url + test_payload % (RANDINT, RANDINT)
   content["true"] = Downloader.get(_url)
   _url = url + test_payload % (RANDINT, RANDINT + 1)
   content["false"] = Downloader.get(_url)
   if content["origin"] == content["true"] != content["false"]:
    return "sql found: %" % url

E-Mail 搜索插件

最后一个简单的例子,搜索网页中的 E-Mail,因为插件系统会传递网页源码,我们用一个正则表达式([\w-]+@[\w-]+\.[\w-]+)+搜索出所有的邮件。创建script/email_check.py文件

# __author__ = 'mathor'

import re
class spider():
 def run(self, url, html):
  #print(html)
  pattern = re.compile(r'([\w-]+@[\w-]+\.[\w-]+)+')
  email_list = re.findall(pattern, html)
  if (email_list):
   print(email_list)
   return True
  return False

运行python w8ay.py

Python实现E-Mail收集插件实例教程

可以看到网页中的邮箱都被采集到了

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python中pycurl库的用法实例
Sep 30 Python
Python while 循环使用的简单实例
Jun 08 Python
python 以16进制打印输出的方法
Jul 09 Python
Windows 64位下python3安装nltk模块
Sep 19 Python
在python环境下运用kafka对数据进行实时传输的方法
Dec 27 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
python批量创建指定名称的文件夹
Mar 21 Python
Django处理多用户类型的方法介绍
May 18 Python
python自动化测试之异常及日志操作实例分析
Nov 09 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
python BeautifulSoup库的安装与使用
Dec 17 Python
python神经网络学习 使用Keras进行简单分类
May 04 Python
使用TensorFlow实现二分类的方法示例
Feb 05 #Python
Tensorflow分类器项目自定义数据读入的实现
Feb 05 #Python
在Python 字典中一键对应多个值的实例
Feb 03 #Python
Django csrf 两种方法设置form的实例
Feb 03 #Python
解决django前后端分离csrf验证的问题
Feb 03 #Python
Python利用heapq实现一个优先级队列的方法
Feb 03 #Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 #Python
You might like
php对关联数组循环遍历的实现方法
2015/03/13 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
JavaScript File API文件上传预览
2016/02/02 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
js读取本地文件的实例
2017/12/22 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
js实现轮播图特效
2020/05/28 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
python实现飞船大战
2020/04/24 Python
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
什么是数据抽象
2016/11/26 面试题
三分钟英语演讲稿
2014/04/24 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
第一军规观后感
2015/06/12 职场文书
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python
Python时间操作之pytz模块使用详解
2022/06/14 Python
html中两种获取标签内的值的方法
2022/06/16 jQuery