网络安全——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,并登录(用户名:admin,密码:password);单击左侧"DVWA Security"标签,设置安全等级为"Low"并提交。

(二)查找漏洞

1、数字测试:单击"SQL Injection"标签,即SQL注入。攻击者在web表单或者页面请求的查询字符串中通过注入恶意的SQL命令,从而使数据库执行恶意的SQL语句。在"User ID"编辑框输入数字1,查看结果后,再输入2。可看出,输入的参数被传入Web后台;

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、渗透测试中常用的几个函数和表库名有哪些?

3、二阶SQL注入流程是什么?


七、实验截图:
相关推荐
网安墨雨13 分钟前
iOS应用网络安全之HTTPS
web安全·ios·https
vortex531 分钟前
Burp与其他安全工具联动及代理设置教程
网络·安全
明矾java1 小时前
Mysql-SQL执行流程解析
数据库·sql·mysql
xserver22 小时前
ensp 基于端口安全的财务部网络组建
网络·安全
NY63 小时前
mysql运维篇笔记——日志,主从复制,分库分表,读写分离
数据库·sql
x66ccff4 小时前
HTTPS如何通过CA证书实现安全通信,以及HTTPS的局限性
网络协议·安全·https
梁小憨憨4 小时前
机器学习(Machine Learning)的安全问题
人工智能·安全·机器学习
Gauss松鼠会5 小时前
GaussDB数据库中SQL诊断解析之配置SQL限流
数据库·人工智能·sql·mysql·gaussdb
猿经验5 小时前
如何使用PSQL Tool还原pg数据库(sql格式)
数据库·sql
toto41212 小时前
线程安全与线程不安全
java·开发语言·安全