- 0.渗透介绍
- 本次使用靶场为DVMA
- 安全级别Low
- 渗透方向为SQL注入
- 1.渗透步骤
- 设置DVWA安全等级为low
- 选择SQL Injection
- 随便输入一个数字,然后submit。这里测试数字为1。发现会返回对应用户的相关信息,同事URL中也会出现提交的参数信息。这里可以明白连接为GET提交方式。
- 这里可以使用1‘用来检测和利用字符型 SQL 注入漏洞。
- 发现报错,说明存在sql注入漏洞,并且数据库为mysql
- 使用1 and 1 = 1和1 and 1 = 2确定注入类型是否为数字型。发现使用1 and 1 = 1 和 1 and 1 = 2 都可以正常返回值,说明这里不是数字型漏洞。
在 SQL 注入中,1 AND 1=1 是一种常用于检测和确认 SQL 注入漏洞的技术。作用:判断是否存在 SQL 注入漏洞:当应用程序接收用户输入并将其拼接到 SQL 查询语句中时,如果未对输入进行适当的过滤和转义,就可能存在 SQL 注入漏洞。在输入中添加 1 AND 1=1,如果应用程序返回与原始查询相同的结果,则可能存在 SQL 注入漏洞。例如,原始 SQL 查询语句可能是 SELECT * FROM users WHERE id = 1。如果用户输入 1 AND 1=1,则 SQL 查询语句变为 SELECT * FROM users WHERE id = 1 AND 1=1。由于 1=1 始终为真,因此查询结果与原始查询相同,这表明 SQL 语句的结构没有被破坏,可能存在 SQL 注入漏洞。确认 SQL 注入漏洞:1 AND 1=1 通常与 1 AND 1=2 一起使用,以进一步确认 SQL 注入漏洞。如果 1 AND 1=1 返回与原始查询相同的结果,而 1 AND 1=2 返回不同的结果或错误,则可以更肯定地判断存在 SQL 注入漏洞。这是因为 1=2 始终为假,如果应用程序没有正确处理 SQL 注入,则查询结果可能会受到影响。
- 继续判断漏洞类型是否为字符型,使用1' and 1 = 1#,可以返回数据,输入1' and 1 = 2# 没有数据返回,说明注入成功。确定漏洞类型为字符类型。
1' and 1=1# 的作用是:利用单引号闭合: 攻击者首先利用 1' 闭合原始 SQL 语句中的单引号,确保注入的代码能够被正确解析。构造永真条件: 然后使用 and 1=1 构造一个永真条件,保证查询语句的结构不会因为注入而改变。注释剩余代码: 最后使用 # 注释掉原始查询语句的剩余部分,防止其影响注入代码的执行。
- 在文本框输入 1' order by 1# 和 **1' order by 2#**,有数据返回,输入 **1' order by 3#**,页面报错,说明本页面只查询了 2 个字段
1' order by 1# 和 1' order by 2# 这类注入语句,主要利用了 SQL 语句中的 ORDER BY 子句。ORDER BY 子句用于对查询结果进行排序,可以指定排序列名或列在 SELECT 语句中的位置(用数字表示)。作用:这类注入语句主要用于判断 SQL 查询语句中 SELECT 了多少列。原理:ORDER BY 1 表示按第一列排序,ORDER BY 2 表示按第二列排序,以此类推。如果查询语句中只有两列,那么 ORDER BY 2 不会出错,但 ORDER BY 3 就会出错,因为它超出了列数范围。通过不断尝试不同的数字,直到页面返回错误信息,就可以确定查询语句中 SELECT 了多少列。
- 在文本框输入 **1' and 1=2 union select 1,2#**,确认页面中 First name 处显示的是记录集中第一个字段,Surname 处显示的是记录集中第二个字段。可以确认注入方式
1' and 1=2 union select 1,2# 是一种结合了多种 SQL 注入技巧的语句,其目的是利用 UNION 操作符来获取数据库中的敏感信息。作用:这条语句主要用于在已知 SQL 查询语句列数的情况下,获取其他表中的数据。原理:闭合前面的单引号: 1' 用于闭合 SQL 查询语句中可能存在的单引号,这是 SQL 注入的常见起点。构造永假条件: and 1=2 用于构造一个永假条件。 这样做的目的是让原始查询语句返回空结果,以便 UNION 操作符后面的查询语句的结果能够显示出来。使用 UNION 操作符: union select 1,2 使用 UNION 操作符将两个 SELECT 语句的结果合并在一起。 前面的 SELECT 语句由于 and 1=2 的条件而返回空结果,因此最终显示的是 union select 1,2 的结果。 这里的 1,2 表示选择两列,它们的具体内容可以根据需要进行修改。注释掉后面的内容: # 是 SQL 中的注释符,它会将后面的所有内容都视为注释,从而防止后面的 SQL 代码被执行。
- 在文本框输入 **1' and 1=2 union select database(),2#**,原第一个字段处显示当前数据库名称为 dvwa。
- 在文本框输入 1' and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#,原第二个字段处显示当前数据库中的所有表名。发现 guestbook 表和 users 表,根据经验可以判断users 表中极有可能是记录用户名和密码的表
- 在文本框输入 1' and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#,原第二个字段处显示 users 表中的所有字段名。其中发现 user 和 password 字段,极有可能是用户名和密码字段
- 在文本框输入 1' and 1=2 union select user,password from users#,原第一个字段和第二个字段处分别显示表中的用户名和密码
- 在 http://www.cmd5.com 破解 MD5 加密的密码,即可得到密码明文
- 设置DVWA安全等级为low
2.此次渗透测试结束。
- THE END -
最后修改:2025年2月12日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:http://blog.tsaqhm.cn/250212dvwasql/
共有 0 条评论