首页 > 数据库 >SQL注入基础及SQLmap

SQL注入基础及SQLmap

时间:2023-01-18 20:22:22浏览次数:62  
标签:SQLmap 语句 -- 数据库 获取 SQL 注入

SQL注入基础及SQLmap

一、数据库基础

1.数据库基本概念

Oracle、MySQL、SQL Server、Access、DB2、Sqlite3都使用SQL语言(增删改查等基础内容相同,扩展内容各不相同)

SQL:结构化查询语言,特点是解释型语言(JS、php、python)

虚拟机语言:java、c#

编译语言:c、c++

解释型语言容易出现注入漏洞(数据代码不区分)!!!

2.数据库内容

①数据(Data):图像、语音、文字等

在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据

②数据库(Database):Access、MSSQL、Oracle、SQLITE、MySQL等

数据库是按照数据结构来组织、存储和管理数据的“仓库”

③数据库管理系统(DBMS):Access、MSSQL、Oracle、SQLITE、MySQL等

数据库管理系统(database management system)是一种操纵和管理数据库的软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性

④结构化查询语句(SQL):

结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系型数据库系统

如何区分数据库和数据库管理系统:在桌面上新建一个excel,这个excel是数据库,而excel这个软件就是数据库管理系统;这两个概念几乎是成对出现

3.数据库特性

①静态网页:

html或者htm,是一种静态的页面格式,不需要服务器解析其中的脚本。由浏览器如(IE、Chrome等)解析

Ⅰ不依赖数据库
Ⅱ灵活性差,制作、更新、维护麻烦
Ⅲ交互性交差,在功能方面有较大的限制
Ⅳ安全,不存在SQL注入漏洞 CDN 高速缓存 WEB CACHE存放的这些内容

②动态网页:

asp、aspx、php、jsp等,由相应的脚本引擎来解释执行,根据指令生成静态网页

Ⅰ依赖数据库
Ⅱ灵活性好,维护简便
Ⅲ交互性好,功能强大
Ⅳ存在安全风险,可能存在SQL注入漏洞

4.WEB应用工作原理

1

二、SQL注入基础

1.SQL注入定义

通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令

具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句

2.SQL注入的本质

代码与数据不区分

3.SQL注入的成因

未对用户提交的参数数据进行校验或有效的过滤,直接进行SQL语句拼接,改变了原有SQL语句的语义,传入数据库解析引擎中执行

4.触发SQL注入

所有的输入只要和数据库进行交互的,都有可能触发SQL注入
常见的包括:

①Get参数触发SQL注入
②POST参数触发SQL注入
③Cookie触发SQL注入
④其他参与sql执行的输入都有可能进行SQL注入

5.SQL注入的步骤

①判断Web环境是否可以SQL注入

如果URL仅是对网页的访问,则不存在SQL注入问题,如:http://news.xxx.com /12345.html就是普通的网页访问;只有对数据库进行动态查询的业务才可能存在SQL注入,如:http://music.baidu.com/search?key=11,其中?key=11表示数据库查询变量,这种语句会在数据库中执行,因此可能会给数据库带来威胁

②寻找SQL注入点

判断是否存在注入点:通过输入一些特殊语句,根据浏览器返回的信息,判断是否存在注入点以及获取数据库类型等有用信息(通过访问正常的业务逻辑即可)

寻找闭合(前方闭合、后方闭合):

普通查询 插入语句 模糊查询
'和" ')和") %'和%"

若上表方式都无法闭合,也有可能是不需要闭合的

注释符闭合/引号闭合:--、#、'、"

尝试sql语句是否可以注入:and 1=1 和 and 1=2。若输入and 1=1页面返回结果,则可能and成功执行或者and被过滤,此时再输入and 1=2,若是and被过滤,那么依旧显示id=x的查询结果;若是成功执行,and 1=2和id=x都生效,但1不等于2,所以无法查询出数据

获取列数

id=1 order by 3 -- 报错

id=1 order by 2 -- 可以执行

数据库列数为2列

找到回显点

id=-1 union select 1,2(有多少列数,后面就有几个数字)

union select为联合查询,将两个表的内容一起输出(若两个表列数不一样则会报错,所以需要判断列数);id=-1是为了让前面的查询语句无法查询从而不行显示内容,以便后面的查询语句成功执行并显示;1,2就是回显点(我们要针对回显点注入)

获取数据库名

id=-1 union select 1,database() --

获取表名

union select group_concat(table_name) from information_schema.tables where table_schema='数据库名'

group_concat:把若干列数据合成一列,如select 1,2,3输出一行三列的数据;select group_concat(1,2,3)输出一行一列的数据1,2,3,即组合输出

获取列名

union select group_concat(column_name) from information_schema.columns where table_name='表名'

获取数据

union select 1,group_concat(username,'->',password separator '</br>') from users --

separator '</br>'为换行;查询内容中间可以用符号隔开

③猜解用户名和密码

数据库中存放的表名、字段名都是有规律可言的,例如MySQL数据库中系统自带的information_schema信息数据库中保存着关于MySQL服务器所维护的所有其他数据库的信息,当前MySQL实例中所有数据库的信息存放在SCHEMATA表,所有表信息存放在TABLES表中,所有表中列信息存放在COLUMNS表中

攻击者可以通过构建特殊数据库语句在数据库中依次查找表名、字段名、用户名和密码的长度,以及内容DUMP拖库。这个猜测过程可以通过网上现成的大量注入工具快速实现,并借助破解网站破译用户密码

④寻找WEB管理后台入口

通常WEB后台管理的界面不面向普通用户开放,要寻找到后台的登录路径,可以利用扫描工具快速搜索到可能的登录地址,利用社会工程学依次进行尝试,就可以试出管理台的入口地址

⑤入侵和破坏

成功登录后台管理后,接下来就可以任意进行破坏行为,如篡改网页、上传木马、修改、泄漏用户信息,进一步入侵数据库服务器或者获得服务器控制权限

6.SQL注入的作用

绕过登录验证:使用万能密码登录网站后台等
获取敏感数据:获取网站管理员帐号、密码等
文件系统操作:列目录,读取、写入文件等
注册表操作:读取、写入、删除注册表等
执行系统命令:远程执行命令

补充:数据库注释语法

-- :sql单行注释(--后面有个空格)

#:sql单行注释(#后可以没有空格)

/**/:sql多行注释

21

三、注入漏洞分类

按数据类型分类:

数字型和字符型

测试语句:

22

按返回结果分类:

先错注入和盲注(布尔/时间)

四、SQLmap

1.常用指令

攻击目标:

-u "url"    包含sql漏洞的页面url

-p id     手动指定sql注入的参数

获取内容:

--dbs         获取数据库名

--tables 获取表名

--columns  获取字段名

--dump 获取数据

--password 获取密码(加密的)

--user 获取用户名

--current -db 获取正在使用的数据库名称

--file-read "/etc/passwd" 读取文件内容

指定已知内容:

-D pikachu    指定名为piikachu的数据库

-D pikachu --tables 从piakchu数据库中获取表名

-T users     指定名为users的表

-C username,password 指定username和password的列

测试等级:

--level=1 可选1到5级(注入深度不同),默认1,极限3

风险等级:

--risk=1 可选1到3(注入时可能会目标服务器造成影响,1没有风险,2会进行时间盲注这类语句,会造成服务器卡顿等影响服务器正常业务,3可能会修改服务器数据,风险较大),默认1,一般1,极限3

输出等级:

-v 1 可选0到6 默认1 一般1 极限3 注入过程在命令行中显示的详细程度1,0只显示error,1还显示info信息

替换模板:

--tamper "space2comment" 将空格替换成注释(可以使用各种替换模板来绕过过滤),还有base64encode、equaltolike、charencode、ramdomcomments、randomcase等模板

自定义数据:

--cookie="PHPSESSID=2q6ekir9rqerocenebnmhblv23; security=low" 自定义cookie(需要登陆才可以访问的页面)

--data="user=xxx&pass=xxx" 自定义post表单数据

例:dvwa-Medium

16

17

--proxy="" 自定义代理

--random-agent 隐藏sqlmap特征,使用真正的浏览器ua去攻击(因为法律规定,sqlmap访问带有特定表示,可以被服务器识别出是sqlmap)

--second-url="url" 若注入点和回显点不在同一页面,使用此参数设置回显点

例:dvwa-High

先提交请求,使用burp抓包

18

19

修改payload(设置回显点)

20

其他选项:

--batch 不适用交互式攻击(自动选择默认选项)

--purge 清空缓存(sqlmap.py --purge在sqlmap出现一系列问题时使用)

DVWA示例:

难度low

查询数据库

2

提示获得了302重定向,是否跟踪链接,DVWA靶机不能随意访问,会直接跳转至登陆页面,所以需要带着身份验证信息(cookie)去攻击

3

提示数据库管理系统是Mysql,询问是否跳过其他数据库的尝试,我们这里跳过(Y大写,回车默认是Y)

询问测试等级和风险等级是否是level1(默认1即可)

4

提示get参数id是注入点,是否想测试其他参数(N大写,回车默认是N),默认回车即可

5

可以看到爆出的数据库

6

获取表名:先指定数据库,再--tables获取表

7

8

获取user表中的列名:

9

10

获取user和password数据:

15

提示询问是否爆破(回车即可)

11

提示询问字典和爆破配置(回车即可)

12

13

爆出信息

14

五、SQL注入的防御

1.SQL注入的危害

①数据库信息泄漏:数据库中存放的用户的隐私信息的泄露

②网页篡改:通过操作数据库对特定网页进行篡改

③网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击

④数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改

⑤服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统

⑥破坏硬盘数据,瘫痪全系统

一些类型的数据库系统能够让SQL指令操作文件系统,这使得SQL注入的危害被进一步放大

2.防御思路

过滤特殊字符:

单引号、双引号、斜杠、反斜杠、冒号、空格、空字符等字符

过滤的对象:

用户的输入
提交的URL请求中的参数部分
从cookie中得到的数据
部署防SQL注入系统(WAF或者数据库防火墙等)或脚本

标签:SQLmap,语句,--,数据库,获取,SQL,注入
From: https://www.cnblogs.com/vinslow/p/17060498.html

相关文章

  • MySQL如何快速禁用账户登入 & 如何复制/复用账户密码
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:叶金荣文章来源:GreatSQL社区原创......
  • Mysql之以月为单位给表建立分区
    以月为单位给表建立分区ALTERTABLExxxxPARTITIONBYRANGE(to_days(`CREATE_TIME`))(PARTITIONfrom202301VALUESLESSTHAN(TO_DAYS('2023-02-01')),PARTITION......
  • 堆叠注入
    一、堆叠注入原理**stackedinjection**在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在;结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想......
  • 通过Canal将云上MySQL数据同步到华为云ES(CSS)中
    背景:A部门想将mysql中多张表join成一个sql查询语句,然后将结果同步到es中供搜索使用环境信息:源端mysql在阿里云上,有公网ip目标端es在华为云上,三节点操作步骤与目......
  • docker远程进入Mysql数据库报1251错误
    docker远程连接mysql数据库报1251错误,如下图所示。   解决方法:1、进入容器dockerexec-itmysql/bin/bash#mysql为数据库容器名称   2、进入mysql输......
  • SQL258 找到每个人的任务
    题目描述有一个person表,主键是id,有一个任务(task)表如下,主键也是id请你找到每个人的任务情况,并且输出出来,没有任务的也要输出,而且输出结果按照person的id升序排序思路......
  • MS SQL Server 日志审核工具
    手动审核数据库活动是一项艰巨的任务。有效实现这一目标的最佳方法是使用全面的解决方案来简化和自动化数据库和活动监控。该解决方案还应使数据库管理员能够监控、跟踪、即......
  • MySQL5.7版本以上数据库,如何修改密码(以8.0.12为例)?
    1.首先,管理员权限打开CMD窗口,cd到mysql安装目录的bin文件夹下(路径默认在c盘这个位置,可以去高级系统设置Path环境里查看)2.输入mysql-uroot-p输入密码3.然后输入us......
  • Ubuntu20.4安装mysql指定版本
    由于前面遇到的坑决定在Ubuntu20.4安装mysql与本地一致的mysql版本步骤如下~~1.下载安装包wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_8.0......
  • sqltools 数据库结构查询器 遍历工具
    下载地址:https://files-cdn.cnblogs.com/files/licin/sqltools.rar?t=1674025517开发语言:C#支持数据库:MySQL/SqlServer搜索字段名;表名;  搜索描述和字段名; ......