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计算三角函数之acos()方法的使用
May 15 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
Mar 19 Python
wxPython实现窗口用图片做背景
Apr 25 Python
一看就懂得Python的math模块
Oct 21 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
Oct 22 Python
使用python进行拆分大文件的方法
Dec 10 Python
python psutil模块使用方法解析
Aug 01 Python
简述 Python 的类和对象
Aug 21 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 Python
python爬虫线程池案例详解(梨视频短视频爬取)
Feb 20 Python
python迷宫问题深度优先遍历实例
Jun 20 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
用libtemplate实现静态网页生成
2006/10/09 PHP
用PHP读取flv文件的播放时间长度
2009/09/03 PHP
php 无法载入mysql扩展
2010/03/12 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
基于jquery创建的一个图片、视频缓冲的效果样式插件
2012/08/28 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
微信小程序radio组件使用详解
2018/01/31 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python统计文本文件内单词数量的方法
2015/05/30 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
python3 实现调用串口功能
2019/12/26 Python
使用css3制作动感导航条示例
2014/01/26 HTML / CSS
台湾专柜女包:KINAZ
2019/12/26 全球购物
C语言笔试集
2012/07/24 面试题
extern在函数声明中是什么意思
2014/01/19 面试题
顶岗实习计划书
2014/01/10 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
英语导游词
2015/02/13 职场文书
毕业设计工作总结
2015/08/14 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python