SEED Labs 2.0: SQL Injection Attack Lab

SEED Labs 2.0: SQL Injection Attack Lab
JohnnySQL Injection Attack Lab
Task 1: Get Familiar with SQL Statements
Task 2: SQL Injection Attack on SELECT Statement
Task 2.1: SQL Injection Attack from webpage
查看文档的PHP源码:
1 | $sql = "SELECT id, name, eid, salary, birth, ssn, address, email, |
可以看到sql语句是进行拼接的所以存在SQL注入。并且如果有返回就直接显示对应用户的信息。所以我们只用保持这个sql语句能正常执行并且返回记录。
构造如下
1 | admin '; # |
密码随意,因为会被注释掉.
成功!
Task 2.2: SQL Injection Attack from command line
由于是URL请求,需要进行转码。
打开在线工具直接进行转码
注入成功
Task 2.3: Append a new SQL statement.
题目让我们使用;
分开两条语句。
我们尝试修改Alice的工资为10
修改前:
构造语句
1 | admin '; update credential set Salary=10 where Name='Alice';# |
但是注入失败
Task 3: SQL Injection Attack on UPDATE Statement
Task 3.1: Modify your own salary.
可以看到源码是进行字符串拼接来构造sql语句的,所以我们可以使用和上一个任务类似的方式添加一条修改语句.
构造如下:
我们选在在Nickname之后添加
1 | test', Salary = 50000 where id='1';# |
利用成功
Task 3.2: Modify other people’ salary.
修改别人的工资只需要将条件修改即可
1 | test', Salary = 1 where name='Boby';# |
修改前:
修改后:
Task 3.3: Modify other people’ password.
查看源代码,他会自动给我们将密码进行sha1存储,同时Password字段后面还有phoneNumber字段,所以我们在PhoneNumber输入框进行注释,password就正常填入我们想要修改的密码
进行如下构造
1 | ' where name='Boby';# |
password = deadbeef
虽然提示
但是查看数据库,还是修改成功
登录用户看看,可以使用我们的密码进行登录
Task 4: Countermeasure — Prepared Statement
安全页面上 我们使用之前的方法还是可以进行sql注入
我们现在就修改unsafe.php
的工作流来修复漏洞
可以看到攻击失败