Python打造漏洞扫描器 1

本文介绍了一个Python实现的多线程爬虫,用于网站爬取,并结合简单的SQL注入工具,检测网站是否存在SQL注入漏洞。文章详细阐述了爬虫的编写思路和SQL判断方法,包括URL去重、正则表达式的应用以及WAF的初步判断。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

网站爬虫+SQL注入检测

一、实验介绍

扫描器需要实现功能的思维导图:

此处输入图片的描述

1.1 实验内容

编写一个简单的多线程爬虫,用于对网站地址进行爬取,编写一个简单的sql注入工具,用于对网站地址进行sql注入的检测。

1.2 实验知识点

  • 多线程的使用
  • 网站爬虫的基本知识
  • SQL注入的基本原理
  • SQL检测工具编写,多参数URL的sql注入检测
  • 正则表达式的基本知识

1.3 实验环境

  • Python 2.7
  • Xfce终端
  • sublime

1.4 适合人群

本课程难度为一般,属于中级级别课程,适合具有Python基础的用户,熟悉python基础知识加深巩固。

1.5 代码获取

你可以通过下面命令将代码下载到实验楼环境中,作为参照对比进行学习。

$ wget http://labfile.oss.aliyuncs.com/courses/761/w8ay_1.zip$ unzip w8ay_1.zip

二、实验原理

简单的扫描器雏形编写,爬虫+sql判断程序,后续优化以此雏形为基础。

2.1 爬虫编写思路

首先需要开发一个爬虫用于收集网站的链接,爬虫需要记录一下已经爬取的链接和待爬取的链接,并且去重复,用python的set()就可以解决,大概流程是:

  1. 输入url
  2. 下载解析出url
  3. url去重,判断是否为本站
  4. 加入到待爬去列表
  5. 重复循环即可

2.2 SQL判断思路

  • 通过在url 后面加上 AND %d=%d 或者 OR NOT (%d>%d)
  • %d后门的数字是随机可变的
  • 然后搜索网页中特殊关键词,比如:
    mysql中是 SQL syntax.*MySQLMicrosoft SQL Server是 Warning.*mssql_Microsoft Access 是 Microsoft Access DriverOracle 是 Oracle errorIBM DB2 是 DB2 SQL errorSQLite 是 SQLite.Exception 等等....
  • 通过这些关键词就可以判断出所用的数据库
  • 我们还要判断一下waf之类的东西,有这种东西就直接停止
  • 简单的方法就是用特定的url访问,如果出现了像 ip banned ,firewall之类的关键词,可以判断出是waf了
  • 具体的正则表达式是 (?i)(\A|\b)IP\b.*\b(banned|blocked|bl(a|o)ck\s?list|firewall)
  • 当然我们只是简单的来判断是否有注入,用这个思路写个脚本,非常简单

三、开发准备

在线环境已经安装好了这些库,如果不是用的在线环境,请先安装这些库

pip install requestspip install beautifulsoup4

打开Xfce终端,进入 Code 目录,创建 work 文件夹, 将其作为课程的工作目录。

项目目录结构

/w8ay.py //项目启动主文件/lib/core //核心文件存放目录/lib/core/config.py //配置文件/script //插件存放/exp //exp和poc存放

四、实验步骤

4.1 sql检测脚本编写

用一个字典存储数据库特征:

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.*"),}

通过正则,如果发现我们的正则语句,就可以判断出是哪个数据库了。

for (dbms, regex) 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值