【靶场实操】sql-labs通关详解----第一节:基础注入方式(Less-1~Less-10)

目录

一、注入方式简要概括

1.1 SQL常见注入方式

1.2 爆破函数

二、靶场实操

2.1 Less-1

2.1.1 判断类型

2.1.2 联合注入查询

2.2 Less-2

2.2.1 判断类型

2.2.2 注入攻击

2.2.3 字符型与数字型漏洞对比

2.3 Less-3

2.3.1 判断

2.3.2 注入

2.4 Less-4

2.4.1 判断

2.4.2 注入

2.5 Less-5(布尔盲注)

2.5.1 单引号闭合和不闭合测试

2.5.2 布尔盲注一般步骤

2.5.3 注入

2.6 Less-6

2.7 Less-7

2.8 Less-8

2.9 Less-9(时间盲注)

2.9.1 测试注入点

2.9.2 时间注入简述

2.9.3 注入


在一切开始之前,我们先来了解一下sql-labs。

SQL-Labs是一个专注于SQL注入攻击的在线靶场,提供了从基础到高级的多个关卡,供学习者实践和挑战

一、注入方式简要概括
1.1 SQL常见注入方式
  • 错误注入(Error-based Injection):攻击者利用应用程序返回的错误消息来识别漏洞。通过在SQL查询中插入恶意代码引发数据库错误,根据错误消息获得关于数据库结构和内容的信息;
  • 联合查询注入(Union-based Injection): 利用UNION操作符将多个查询结果合并成一个结果集,获取数据库中其他表的数据,从而泄露敏感信息;
  • 时间盲注(Time- based Blind Injection):攻击者通过在SQL查询中插入恶意代码,利用数据库的延时函数来确定查询是否成功执行,通过观察应用程序在响应时间方面的差异推断数据库信息;
  • 布尔盲注(Boolean-based Blind Injection):通过在SQL查询语句中插入恶意代码,利用布尔逻辑来逐位猜测查询结果,通过观察应用程序在不同条件下的行为来推断数据库信息;
  • 存储过程注入(Stored Procedure Injection):攻击者利用应用程序调用的存储过程中存在的漏洞,通过插入恶意参数执行未经授权的数据库操作;
  • 盲注(Blind Injection):包括布尔盲注、时间盲注和基于报错的注入,攻击者通过观察页面的响应来判断数据库中的信息;
  • 堆叠注入:在SQL语句末尾添加额外的SQL语句,执行多条SQL命令;
  • 二次注入:攻击者通过构造数据,使得在第二次请求中执行第一次请求中构造的SQL语句;
  • User-Agent注入:通过修改HTTP头中的User- Agent字段进行注入;
  • Cookie注入:通过在Cookie中注入恶意的SQL代码;
  • 宽字节注入:利用字符编码特性进行注入,常见于使用GBK编码的数据库。
1.2 爆破函数

1.经度爆破(mysql>=5.7x)

and ST_LatFromGeoHash(concat(0x7e,(select user()),0x7e))--+

2.纬度爆破(mysql>=5.7x)

and ST_LongFromGeoHash(concat(0x7e,(select user()),0x7e))--+

3.获取数据库版本信息

')or (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
​
select count(*), concat(version(), floor(rand(0) * 2))x from information

4.获取当前数据库

')or (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

5.updatexml()

updatexml(1,1,1) 一共可以接收三个参数,报错位置在第二个参数

6.extractvalue()

extractvalue(1,1) 一共可以接收两个参数,报错位置在第二个参数

二、靶场实操
2.1 Less-1
2.1.1 判断类型

现在,让我们来正式开始靶场实操。

来到第一关

对于很多SQL注入漏洞,我们第一步要做的是判断“是否存在漏洞”,下面的字提示我们输入数字值的id作为参数,我们输入一个1来试一下

?id=1

同理再将id改为2或3,输入结果不同。不同的数字值返回不同的内容,这说明我们输入的内容被直接代入到数据库查询语句中,在数据库里面查询了。


接下来我们判断SQL语句是否拼接,是字符型还是数字型

我们在id=1后加了一个单引号,结果数据库报错,这说明数据库存在漏洞。继续使用--注释掉后续的内容,又返回了正确的结果,至此注入初获成功。

上面的实验验证了第一关为字符型且存在SQL注入漏洞。因为该页面存在回显,所以我们可以使用联合查询来攻破。

2.1.2 联合注入查询

联合注入的第一步首先要知道表格有几列,如果报错就是超过列数,如果正常显示就是没有超出

?id=1'order by 3 --+

order by 3的时候还正常输出,4的时候报错,这证明此数据库有三列。

第二步我们要爆出显示位,也就是看表格里面哪一列会在页面显示。

?id=-1'union select 1,2,3 --+

可以看出表格的第2,3列是在页面中显示的,这说明本表格大概是一个如下的结构,第一列是id之类的标识字段,在页面中不显示,第二列是名字,第三列是密码。(注意:我们这里只说明了有三列数据,并没有证明有几行,在上面博主只是做了id=1,2,3的三个例子,很可能不只三行)

### SQLi Labs 靶场闯关教程详解 #### 关于SQLi Labs靶场概述 SQLi Labs是一个用于学习和SQL注入技术的Web应用程序集合。该平台设计了一系列不同难度级别的挑战,帮助安全研究人员理解和掌握各种类型的SQL注入漏洞利用方法。 #### 数值型SQL注入例解析 对于数值型SQL注入攻击,在`Less-2`这一关卡中,当向URL参数`id`附加单引号(`http://10.10.10.129/Less-2/?id=1'`)时可以触发异常响应[^2]。这种行为表明服务器端未正确处理特殊字符输入,从而可能允许攻击者构造特定查询语句来控后台数据库逻辑。 #### 自动化工具辅助下的高级技巧展示 针对更复杂的场景比如`Less-15`,可以通过配置并运行sqlmap这样的自动化渗透测试软件来进行高效检测与利用。具体作上会涉及到设置合适的选项如指定目标文件路径以及所需获取的信息类型等命令行参数[^1]。 ```bash python sqlmap.py -u "http://example.com/vulnerable.php?id=1" --batch --dump ``` 上述脚本展示了如何使用sqlmap批量模式自动探测并导出受影响表内的全部数据记录。 #### POST请求方式SQL注入战演练 在面对基于POST提交的数据交互形式时,则需借助Burp Suite这类中间人代理工具先行拦截并修改HTTP流量后再传递给sqlmap进一步分析处理。例如`Less-12`里提到的方法就是先保存包含恶意负载的消息体至本地文本文件再作为源码供给后续步骤调用[^4]。 #### 成功SQL注入的前提条件说明 要成功发动一次有效的SQL注入攻击至少满足三项基本要素:一是存在可被外部篡改影响内部流程走向的关键变量;二是缺乏足够的防护措施使得非法指令得以顺利传达至解释引擎层面;三是整个业务逻辑确依赖关系型存储机制完成核心功能现过程中的某些环节[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值