首页 > 数据库 >渗透测试学习篇(SQL注入漏洞)

渗透测试学习篇(SQL注入漏洞)

时间:2024-07-30 15:53:14浏览次数:9  
标签:渗透 漏洞 --+ SQL 页面 id select 注入

今天来和大家讲渗透测试的要学习的第一个漏洞,也是一个比较常见,且容易发现的漏洞~~~

首先要和大家说一个基础的知识,对于MySQL来说>=5.0 版 本有一个内置库information_schema (这个库会重要,是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息~~~)

我们都知道,在很多数据库里面的名称中会存在“.”这个符号,这里代表下一级的意思(经常使用)!!!!

接下来就开始讲正式的内容了~~~

一、基础知识

1.常见的函数

sleep() :延时执行、输出结果

length() :返回字段结果长度

count() :聚合函数、返回查询对象的总数

concat() : 拼接字符串,将一个或多个字符串拼接为一个字符串

group_concat() :使用分割符将一个或多个字符串连接成一个字符串,是concat()的特殊形式,第一个参数是其它参数的分隔符,分隔符的位置在连接的两个字符串之间,分隔符可以是一个字符串,也可以是其它参数

substr() :此函数用来截取字符串得一部分

mid() :此函数用来截取字符串得一部分

ascii() / ord() 将某个字符串转化为ascii值

hex() 使用hex对数据进行十六进制编码

if(A,B,C) 条件判断:A为条件、如果条件成立执行B,不成立执行C

limit :限制查询数量

这是一些基础的函数,后面我会在讲到每种类型的sql注入的时候讲他对应的函数的~~~

2.读取函数

在sql注入的时候我们通常会使用读取函数去读取数据库的内容,或者写入一句话木马之类的

但是这个是有一个重要的前提的

前提:

  • 必须对目录有写的权限,这样才能写入成功
  • 必须知道网站得绝对路径
  • 在 数 据 库 配 置 文 件 ( my.ini ) 中 , 配 置 项 必 须 = 空     secure_file_priv=''

(这是必要的前提~~~)

二、简介

1.SQL注入介绍

SQL注入是指Web应用程序对用户输入数据合法性进行判断、处理,前端传入的参数是攻击者可控的,并且参数可以被带入到数据库中执行

2.危害

SQL注入是一种高危的漏洞,危害很大,在工作中,可以尽量去挖这个漏洞,因为一般能挖到的,基本就能拿到权限~~~

  • 获取webshell:当我们知道绝对路径且权限为root的时候,可以写入一句话木马
  • 读取敏感文件
  • 尝试发现一些数据库的敏感信息,等等

(要记住,SQL注入产生一切的条件都是用户对参数是可控的,前端传入的参数可以被传入后端数据库执行!!!)

(平时可以自己收集一些万能密码,做密码爆破的时候可以用,配合SQL注入)

3.类型

(这里我们只对常见的分法进行整理~~~)

按注入点

数字型、字符型、搜索型

  • 数字型

带入到数据库中时,变量的数据类型,决定他是那种注入类型

判断是否存在注入

?id=1 and 1=1 #True页面正常

?id=1 and 1=2 #False页面异常

判断字段数量

?id=1 order by 3 #页面正常

?id=1 order by 4 #页面异常

通过Union联合注入判断回显位置

PS:union联合查询,使用--+号

回显位置: 也就是SQL语句在被数据库引擎执行后的结果返回的位置

PS:如果MySQL版本大于5.0的话,存在内置表可以通过内置Information_schema表查询

可以通过limit函数偏移遍历获取所有表名

可以通过group_concat()函数拼接显示所有表名

  • 字符型

SQL原始语句 select usernmae,password from uname where id ='1 and 1=1';

闭合后得语句

select username,password from uname where id ='1' and 1=1 #' 页面正常

select username,password from uname where id ='1' and 1=2 #' 页面异常

PS:后面注入语句与数字型注入相同,只不过闭合有区别

  • 搜索行

SQL语句:select * from uname where username like '%$a%' ;

闭合语句

select username,password from uname where username like '%a%' and 1=1 #'

?id=a%' and 1=1 #

?id=a%' and 1=2 #(也是闭合的问题)

4.注入方法

1. union联合注入

union有一个十分严格的约束条件,因为是联合查询,必须保证左右两边查询结果字段数量必须相同

2. 报错注入

页面会返回报错/错误信息,可以使用报错函数进行注入操作

3. 布尔盲注

页面没有数据回显、也没有报错。只返回两种情况:异常(True)/正常(false),通过返回页面结果判断去注入

4. 时间盲注

不能根据页面返回内容判断任何信息,也无报错,但会显示时间的长短

5. 宽字节注入

程序员为了防止SQL注入,对用户输入得特殊字符(\'")等进行处理,在特殊字符前加上斜杠('\')进行转义

6. 堆叠注入

使用(mysqli_multi_query)函数,同时执行多条SQL语句时的注入

7. Cookie注入/XFF/HTTP头

GET 在url 传递参数、POST 在 POST 正文传递参数和值,COOKIE 在 cookie 头传值

(日常工作中报错和盲注偏多~~~)

5.注入流程

  • 1. 判断是否存在注入,注入是字符型还是数字型
  • 2. 猜解SQL查询语句中的字段数
  • 3. 确定显示的字段回显位置
  • 4. 获取当前数据库
  • 5. 获取数据库中的表
  • 6. 获取表中的字段名
  • 7. 查询到账户的数据

(如果很熟悉的话,后面可以省去一部分,当然也有对应的工具,不过,还是手挖更好点,因为在工作中很多其实都是用工具测不出来的~~~)

这里以联合注入为例

1. 判断是否存在注入

?id=1 and 1=1 --+ True页面正常

?id=1 and 1=2 --+ Flase页面异常

2. 判断字段数

?id=1 order by 4 --+ 页面正常

?id=1 order by 5 --+ 页面异常

(那么就是4位)

3. 判断回显位置

?id=1 union select 1,2,3,4 --+

4. 查询数据库名

?id=1 select 1,2,3,database() --+(在加粗的地方进行查询)

5. 查询数据表

如果MySQL版本大于5.0的话,存在内置表可以通过内置Information_schema表查询

?id=1 union select 1,table_name,from information_schema.tables where table_schema = database() --+

6. 查询字段名称

?id=1 union select 1,cloumn_name,from information_schema.columns where table_name = 'web' --+

7. 查询字段值

select 1,username,password, from web

注入类型判断关键就在于闭合问题!!!!

好了,今天就说到这里,下次给大家分享具体每种注入方法的注入手段~~~~

基础的大家一定要学扎实,不然后面会没办法进行下去的,要划重点自己记忆,练习!!!

工具后面讲完了会给大家分享的!!

标签:渗透,漏洞,--+,SQL,页面,id,select,注入
From: https://blog.csdn.net/m0_59518755/article/details/140793418

相关文章

  • Python sqlite3 删除数据
    要从SQLite表中删除记录,你需要使用DELETEFROM语句。要删除特定的记录,你需要同时使用WHERE子句。要更新特定的记录,你需要同时使用WHERE子句。语法以下是SQLite中DELETE查询的语法- DELETEFROMtable_name[WHEREClause]PythonCopy例子假设我们使用以下查询创建了......
  • mysql 8 临时表空间
    mysql>optimizetableiuap_apdoc_coredoc.productapplyrange;+--------------------------------------+----------+----------+-------------------------------------------------------------------+|Table|Op|Msg_type|......
  • mongodb数据迁移mysql
    1、安装MongoDB参考链接https://blog.csdn.net/qq_45664055/article/details/119794071http://bbs.itying.com/topic/5bd675d80e525017c449479d1.1创建repo文件,MongoDB数据库不在yum的官方仓库,通过配置如下文件,可以通过yum下载MongoDBvi/etc/yum.repos.d/mongodb-org-4......
  • 忘记MySQL密码的处理措施(取消密码认证,直接登录)
    忘记MySQL密码/etc/my.cnf.d/mysql-server.cnf删除#号,取消注释skip-grant-tables选项下参数重启mysqld服务后,直接回车登录查看status状态直接修改密码无法成功,提示在skip-grant-tables选项下使用FLUSHPRIVILEGES;命令刷新权限即可回到上面删除掉skip-grant-tables......
  • MYSQL学习总结
    事务:一个不可拆分的操作,要么全部执行完,要么全都不执行;隔离级别:总共有四个,分别是ReadUncommitted(读取未提交内容),ReadCommitted(读取提交内容),RepeatableRead(可重读),Serializable(可串行化);ReadUncommitted(读取未提交内容):一个事务可以读取另一个事务未提交的数据;如果另一个事务......
  • Mysql时间互转
    第一种情况:日期转字符串1、函数:date_format(date,format)selectdate_format(now(),'%Y-%m-%d%H:%i:%S');第二种情况:日期转时间戳1、函数:unix_timestamp(data)selectunix_timestamp(now());第三种情况:字符串转日期1、函数:str_to_date(str,format);注:format格式必须......
  • MySQL安装
    1、安装成功的步骤#获取rpmsudorpm-Uvhhttps://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm#直接安装yuminstall-ymysql-community-server#查看服务systemctlstatusmysql2、安装成功后续#安装成功后续#启动systemctlstartmysqld.s......
  • 分享一个MySQL数据库表结构导出word文档最方便的方法
    原文链接:https://blog.csdn.net/typ1805/article/details/836587081、使用的是MySQL-Front工具,这个工具使用非常方便,尤其是导出数据的时候,几百万的数据一两分钟就导完了,推荐使用。MySQL-Front下载(只有3.93M):https://mysql-front.en.softonic.com/注:新版本和老版本的区别比较大,有......
  • 【MySQL】MySQL关系型数据库与非关系型数据库的比较及代码示例
    目录一、关系型数据库(RDBMS)概览1.1MySQL介绍1.2数据结构1.3事务处理二、非关系型数据库(NoSQL)概览2.1MongoDB介绍2.2数据结构2.3事务处理三、核心差异比较3.1数据结构3.2数据操作3.3可扩展性3.4事务处理四、实战技巧与建议五、总结        ......
  • 【MySQL】MySQL数据类型详解及代码示例
    目录数值类型整数类型浮点数和定点数类型字符串类型定长字符串(CHAR)可变长度字符串(VARCHAR)文本类型(TEXT)日期和时间类型二进制类型特殊类型        在数据库设计中,选择合适的数据类型对于数据库的性能和存储效率至关重要。MySQL作为最流行的关系型数据库管......