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实现统计代码行数的方法
May 22 Python
结合Python的SimpleHTTPServer源码来解析socket通信
Jun 27 Python
Python中生成Epoch的方法
Apr 26 Python
python实现批量按比例缩放图片效果
Mar 30 Python
Python paramiko模块的使用示例
Apr 11 Python
对Python 语音识别框架详解
Dec 24 Python
Python3.5局部变量与全局变量作用域实例分析
Apr 30 Python
python 计算两个列表的相关系数的实现
Aug 29 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
Python argparse模块使用方法解析
Feb 20 Python
了解一下python内建模块collections
Sep 07 Python
python爬取微博评论的实例讲解
Jan 15 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/08/26 PHP
关于COOKIE个数与大小的问题
2011/01/17 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
轮播图组件js代码
2016/08/08 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
[04:40]2016个国际邀请赛中国区预选赛场地——华西村观战指南
2016/06/25 DOTA
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
python实现下载指定网址所有图片的方法
2015/08/08 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
Python编程实现蚁群算法详解
2017/11/13 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
毕业生个人求职信范文分享
2014/01/05 职场文书
美国留学经济担保书
2014/05/20 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
python spilt()分隔字符串的实现示例
2021/05/21 Python
React列表栏及购物车组件使用详解
2021/06/28 Javascript
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers