网络安全——SQL注入实验

一、实验目的要求:

二、实验设备与环境:

三、实验原理:

四、实验步骤:

五、实验现象、结果记录及整理:

六、分析讨论与思考题解答:

七、实验截图:


一、实验目的要求:

1、掌握SQL注入的原理。

2、通过开源网站渗透平台DVWA实战,掌握常见的SQL注入方法。

3、具体内容:

1)学习配置开源网站渗透平台DVWA(Damn Vulnerable Web Application)。

2)学习常见的SQL语句:create、select、drop、union等。

3)学习相关SQL注入方法并在实验平台验证


二、实验设备与环境:
三、实验原理:

1 SQL 基础

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

标准的SQL命令有select、insert、update、delete、create和drop,其中,select语句是SQL的核心,用于查询数据库并检索你所指定条件的数据。select语句有五个主要的子句,from是唯一必须的子句。每一个子句都有大量的选择项、参数等。SELECT语句的格式为:

select column1[,column2]

from table1[,table2] (指定表)

where "conditions"\] (条件) \[group by "column-list"\] (聚合函数) \[having "conditions\] (为组指定条件) \[order by "column-list"\] (顺序显示结果) **2** **、** **SQL** **注入原理** SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。 SQL注入的基本思想: 1)查找入口:常见入口主要有表单提交(GET、POST)、URL参数提交(GET)、HTTP请求头部可修改的值(Referer、User_Agent等); 2)判断SQL注入漏洞的类型(字符型、整型等); 3)确定SELECT语句的字段数; 4)查找数据库以及user表; 5)确定users表对应的字段名; 6)获取全部用户信息; **3** **、** **DVWA** **平台** DVWA是一款基于PHP和mysql开发的web靶场练习平台,集成了常见的web漏洞如sql注入,xss,密码破解等常见漏洞。此平台可自定义安全等级,分别为低、中、高三个等级。此次实验运用的是低等级。这个等级是针对完全的安全脆弱和没有安全性可言的网站。 ###### **四、实验步骤:** (一)启动平台 1、启动服务:执行命令,启动Web相关服务,启动apache2服务和mysql服务。 "# service apache2 start" "# service mysql start" 2、等级设置:访问地址:[http://locallhost/dvwa](http://locallhost/dvwa "http://locallhost/dvwa"),并登录(用户名:admin,密码:password);单击左侧"DVWA Security"标签,设置安全等级为"Low"并提交。 (二)查找漏洞 1、数字测试:单击"SQL Injection"标签,即SQL注入。攻击者在web表单或者页面请求的查询字符串中通过注入恶意的SQL命令,从而使数据库执行恶意的SQL语句。在"User ID"编辑框输入数字1,查看结果后,再输入2。可看出,输入的参数被传入Web后台; ![](https://file.jishuzhan.net/article/1735683613501952002/3dfb57d92644b88294ddccdf7ed46597.webp) 2、字符测试:继续在编辑框输入内容,输入"User ID:1'",发现SQL报错。其原因是,标准的SQL查询语句为"select firstname,surname from users where id = '1';",当再加入一个引号时,则导致语法错误,"select firstname,surname from users where id = '1'';"。 3、得出结论:Web漏洞为id,漏洞类型为:字符型。 (三)执行SQL注入 1、猜测字段数:输入"1' union select 1,2#"。union 是联和查询的一个关键字,这个有一个前提就是必须满足所有的列是相同的,所以在这前面必须要添加一些没有意义的列来作为填充。输出了First name、Surname。实际上后台执行的SQL语句为"select firstname,surname from users where id = '1' union select 1,2#'";字符'#'恰好起到注释的作用。再输入"1' union select 1,2,3#",结果报错,提示SQL语句字段数不对应,可得出字段数是2。 2、获取数据库名、用户名:输入"1' union select database(),user()#",联合查询以获取数据库信息。得出当前使用的数据库为:dvwa,当前的用户名:root@localhost。 3、获取当前用户表:输入"-1' union select table_name,2 from information_schema.tables where table_schema= 'dvwa'#",结果输出表为guestbook表、users表。我们已获得数据库名称为dvwa,数据库表为users。 4、获取用户表列名:"-1' union select column_name,2 from information_schema.columns where table_schema= 'dvwa' and table_name= 'users'#"。该数据表存储了mysql数据库中的所有列的列名。结果输出用户表user存在重要的两列:user、password。根据这两列就可以轻松获取网站的用户信息。 5、获取全部用户信息:"-1' union select user,password from users#"。将表中的信息全部输出,获取的密码经过了MD5加密,可以在网站PMD5在线解密。 6、测试:以用户1337为例,解密后的密码为charley。选择"Brute Force"标签,即进行暴力破解。验证密码正确性。输入用户名和经过解密后的密码,单击"Login"按钮,成功登录,SQL注入成功。 ###### 五、**实验现象、结果记录及整理:** 1、在查找漏洞中,通过2次测试,得出漏洞为id、漏洞类型为字符型,但在实际运用中,需通过多次测试,才可找出; 2、在执行SQL注入中,先是反复猜测字段数、再获取数据库名、用户名、当前用户表、用户表列名,层层递进,最后得到全部用户信息。采用从外到内的方法逐一突破,并获取有用的数据。 ###### **六、分析讨论与思考题解答:** 1、实际场景中,SQL注入的基本步骤是什么? 1)注入点测试 2)查询字段数 3)判断回显位 4)查询数据库的基本信息 5)爆数据库名 6)爆数据库表名 7)爆字段名 2、渗透测试中常用的几个函数和表库名有哪些? ![](https://file.jishuzhan.net/article/1735683613501952002/2d13b0727f013f37fad92a4c0d9878f0.webp) 3、二阶SQL注入流程是什么? ![](https://file.jishuzhan.net/article/1735683613501952002/d0a5f598bf51e85e15bc0e8bfb1022c8.webp) *** ** * ** *** ###### 七、实验截图: ![](https://file.jishuzhan.net/article/1735683613501952002/44d5a3ef65f338338ccdca786d3e71ab.webp) ![](https://file.jishuzhan.net/article/1735683613501952002/6fbdb60df8dcc1b04105d06b1f8c1b16.webp) ![](https://file.jishuzhan.net/article/1735683613501952002/c49688218e381e7922c5d84c279c1812.webp) ![](https://file.jishuzhan.net/article/1735683613501952002/5a18bf7771ffea9be46806753fe55912.webp) ![](https://file.jishuzhan.net/article/1735683613501952002/8ac852d9eeca614c0215c55d4ee9f7c2.webp) ![](https://file.jishuzhan.net/article/1735683613501952002/09e575e67613135a95b85873c7a116f6.webp) ![](https://file.jishuzhan.net/article/1735683613501952002/c27256358eb5afb4eb72e3f3d68cb47b.webp) ![](https://file.jishuzhan.net/article/1735683613501952002/80ab6f0b4c24d162462b472f21b34c11.webp) ![](https://file.jishuzhan.net/article/1735683613501952002/f9e5771a5cf9a163a501a92cf2e99cac.webp) ![](https://file.jishuzhan.net/article/1735683613501952002/1a146bec7437a08471233dd94a115ece.webp) ![](https://file.jishuzhan.net/article/1735683613501952002/9b26f64dddf31ec8fc9bbc3e26ae857a.webp)

相关推荐
Python私教35 分钟前
Rust:重新定义系统编程的安全与效率边界
开发语言·安全·rust
不务专业的程序员--阿飞1 小时前
【SQL 如何解锁递归】
java·数据库·sql
iSee8572 小时前
DocsGPT 远程命令执行漏洞复现(CVE-2025-0868)
安全·web安全
Always_away2 小时前
数据库系统概论|第七章:数据库设计—课程笔记
数据库·笔记·sql·学习
w23617346014 小时前
OAuth安全架构深度剖析:协议机制与攻防实践
安全·oauth·安全架构
筑梦之月4 小时前
全流量解析:让安全防御从“被动挨打”升级为“主动狩猎”
网络·安全
唐山柳林4 小时前
城市生命线综合管控系统解决方案-守护城市生命线安全
java·安全·servlet
Waitccy5 小时前
深度解析网闸策略:构建坚固的网络安全防线
网络·安全·web安全
非凡ghost6 小时前
猫眼浏览器:简约安全,极速浏览
安全·软件需求