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 list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
python学习入门细节知识点
Mar 29 Python
Python正则表达式匹配和提取IP地址
Jun 06 Python
Python动态语言与鸭子类型详解
Jul 01 Python
python pandas时序处理相关功能详解
Jul 03 Python
python中多个装饰器的调用顺序详解
Jul 16 Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 Python
python opencv 实现对图像边缘扩充
Jan 19 Python
matplotlib quiver箭图绘制案例
Apr 17 Python
Python异常处理机制结构实例解析
Jul 23 Python
calendar在python3时间中常用函数举例详解
Nov 18 Python
举例讲解Python装饰器
Dec 24 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
解析php中获取url与物理路径的总结
2013/06/21 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
vue.js表格分页示例
2016/10/18 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
Python自动连接ssh的方法
2015/03/07 Python
Python的Django框架安装全攻略
2015/07/15 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
总经理助理工作职责
2014/02/06 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
2014年基建工作总结
2014/12/12 职场文书
三峡大坝导游词
2015/01/31 职场文书
2019 入党申请书范文
2019/07/10 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
Win11任务栏太宽了怎么办?一招解决Win11任务栏太宽问题
2021/11/21 数码科技