入门必备知识:深入浅出学SQL注入

admin 2024年2月7日09:04:45评论14 views字数 3463阅读11分32秒阅读模式

介绍

SQL注入是一种常见的安全漏洞,攻击者通过构造恶意输入来干扰Web应用程序正常的SQL查询逻辑,从而获取、修改或者删除数据库中的敏感信息。在各类注入类型中,数字型注入和字符型注入是两种最为基础且常见的形式。

数字型注入

首先,我们来看数字型注入。当Web应用的参数为整数值时,如用户ID、订单号或页码等,若程序未对用户输入进行充分过滤和校验,就可能留下安全隐患。

假设URL为"http://www.xxx12.com/1.php?id=2",根据这个地址我们可以推测后台执行的SQL语句可能是"select * from table where id=8"。为了验证是否存在注入漏洞,可以通过以下步骤进行测试:

1、在ID参数后添加单引号('),尝试闭合SQL语句,例如访问"http://www.xxx12.com/1.php?id=2'",如果出现错误提示,则可能存在注入点,因为对于数字类型的字段来说,额外的单引号会导致语法错误。

2、使用逻辑判断语句进一步验证,例如访问"http://www.xxx12.com/1.php?id=2 and 1=1",若页面返回正常且数据无差异,则说明注入可能生效,因为"and 1=1"始终为真,不会改变原查询结果。

3、再次使用逻辑判断语句,访问"http://www.xxx12.com/1.php?id=2 and 1=2",若页面无法查询出数据,说明注入有效,因为"and 1=2"为假,会使得整个条件表达式失效,从而影响查询结果。

数字型注入通常出现在弱类型语言(如ASP、PHP)编写的Web应用中,这类语言允许变量自动推导类型,给注入攻击提供了可乘之机。

字符型注入

接下来是字符型注入。这种情况下,当参数为字符串类型时,例如用户名、邮箱等,会出现字符型注入的情况。此时,字符串值被单引号(')闭合。攻击者需找到合适的注入点,通过闭合原有的SQL语句并插入注释符来绕过原查询逻辑。

例如,一个注入实例可能是:"http://www.xxx12.com//login.php?username=admin'-- ",这里的"--"用于注释掉SQL语句后面的代码,使得原本的认证逻辑失效。

对于不同的数据库系统,其字符串连接符有所不同,如MySQL使用concat()函数或空格,SQL Server使用"+",Oracle使用"||"等。攻击者需要根据目标数据库系统的特性灵活构造恶意注入语句。

无论是POST注入(即注入字段存在于POST请求体中),还是Cookie注入(注入字段存在于HTTP Cookie中),以及其他诸如延时注入(利用数据库系统的延时特性)、搜索注入(针对搜索引擎功能的注入)、Base64注入(注入的数据经过Base64编码处理)等,它们本质上都可以归类为数字型或字符型注入的一种表现形式,关键都在于如何通过构造非法输入来影响SQL查询逻辑并达到攻击目的。

因此,防御SQL注入的关键在于对所有不受信任的用户输入进行全面的安全处理,包括但不限于参数化查询、预编译SQL语句以及合理运用Web框架提供的安全过滤函数等措施,确保应用程序在任何情况下都能正确地处理和解析用户输入,避免潜在的SQL注入风险。

场景演示

一、手工SQL注入测试

1、正常的SQL执行语句为

入门必备知识:深入浅出学SQL注入

2、当我们在id参数后添加单引号时,系统出现错误提示。

入门必备知识:深入浅出学SQL注入

3、若我们在该语句末尾加入"and 1=1",会发现请求结果与原始请求保持一致。

入门必备知识:深入浅出学SQL注入

4、若在语句末尾加入"and 1=2",尽管没有错误反馈,但实际上并未查询出任何信息,这种情况

很大可能存在SQL注入漏洞。

入门必备知识:深入浅出学SQL注入

5、我们尝试通过逐步增加字段数来探测其实际字段总数,当增加到第14个字段时,查询依然正常,说明表中存在至少14个字段。

入门必备知识:深入浅出学SQL注入

6、然而,在尝试设置为15个字段时出现了错误,由此确认该表共有14个字段。

入门必备知识:深入浅出学SQL注入

7、接下来,我们想要明确显示的具体列信息以便获取表名等关键数据。这时采用的是union select查询方法。需要注意的是,union查询的机制是:只有当前面的查询不正确时,后面的union select子句才会生效。从下图中我们可以看到用户ID、账号和密码分别位于表中的第1、2和3个字段。

入门必备知识:深入浅出学SQL注入

8、随后我们进一步尝试破解数据库名称。

入门必备知识:深入浅出学SQL注入

9、紧接着,着手爆破具体的表名。

入门必备知识:深入浅出学SQL注入

10、继续进行以揭示字段名的爆破操作。

入门必备知识:深入浅出学SQL注入

11、最后,针对重要字段进行测试,例如对账号密码进行盲注攻击。这里以admin用户的密码为例进行测试,因为存在两个admin账户,因此结果显示了两个密码。

入门必备知识:深入浅出学SQL注入

其中,sdwmy用户的密码为

入门必备知识:深入浅出学SQL注入

二、sqlmap自动化测试

在使用sqlmap工具测试之前,先来介绍一下sqlmap这款测试工具。sqlmap是一款强大的开源自动化SQL注入工具,主要用于安全渗透测试和漏洞研究。它基于Python编写,设计目标是自动检测并利用Web应用程序中的SQL注入漏洞,并进一步获取数据库服务器的控制权或提取敏感信息。主要特点和功能包括:

1、自动化检测:sqlmap能够全自动检测SQL注入漏洞,无需手动构造Payload(攻击载荷)。
2、广泛支持:支持多种数据库系统,如MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等。
3、深度探测与利用:不仅能识别出注入点,还能通过各种技术(如基于布尔的盲注、时间延迟盲注、基于错误的注入等)深入探测数据库结构,获取表名、列名以及数据内容。
4、文件操作与命令执行:在特定条件下,sqlmap还可以实现从数据库服务器上下载或上传文件,甚至执行操作系统命令。
5、指纹识别:通过独特的指纹识别技术,sqlmap可以准确识别出后台运行的数据库管理系统类型及版本。
6、高效扫描:支持代理设置,优化了算法以提高扫描效率,并提供多种绕过WAF(Web应用防火墙)和其他防护机制的方法。
7、交互式与非交互式模式:用户可以选择在命令行界面下进行详细的手动配置和交互,或者使用--batch参数以非交互方式自动执行任务。

1、在使用sqlmap工具时,我们将目标URL直接作为参数传递给sqlmap.py -u "url"。这里请注意:如果URL不包含引号,则仅针对单一参数执行;若用引号包裹整个URL,则会视为一个整体参数来运行。为了实现自动化处理和避免手动确认提示,可添加--batch选项,例如:sqlmap.py -u "http://127.0.0.1/mysql.php?news_id=1" --batch,这样sqlmap将默认接受所有操作。

入门必备知识:深入浅出学SQL注入

2、通过运行sqlmap,可以成功识别出目标服务器的环境信息,其中包括操作系统为Windows系统、使用的数据库是MySQL、Web应用程序采用PHP版本、Web服务器是Apache版本以及MySQL的具体版本等信息。

入门必备知识:深入浅出学SQL注入

3、下一步,查询当前所连接的数据库名称。

sqlmap.py -u "http://127.0.0.1/mysql.php?news_id=1" --current-db

入门必备知识:深入浅出学SQL注入

4、查询以获取服务器上所有的数据库列表。

sqlmap.py -u "http://127.0.0.1/mysql.php?news_id=1" --dbs

入门必备知识:深入浅出学SQL注入

入门必备知识:深入浅出学SQL注入

5、在已知的cysql数据库中,进一步查询它所包含的所有表名。

sqlmap.py -u "http://127.0.0.1/mysql.php?news_id=1" --tables D cysql

入门必备知识:深入浅出学SQL注入

入门必备知识:深入浅出学SQL注入

6、接着,对cysql数据库中的user表进行分析,找出该表所拥有的所有字段名。

sqlmap.py -u "http://127.0.0.1/mysql.php?news_id=1" --tables D cysql -T user --columns

入门必备知识:深入浅出学SQL注入

入门必备知识:深入浅出学SQL注入

7、最后,在确定了user表的字段结构后,我们执行查询操作以获取user表中存储的账号(用户名)和密码信息。

sqlmap.py -u "http://127.0.0.1/mysql.php?news_id=1" D cysql -T user --dump -C 'username,password'

入门必备知识:深入浅出学SQL注入

入门必备知识:深入浅出学SQL注入

总结

本文解析了SQL注入原理并辅以场景演示,通过手工检测和自动化工具的运用,让读者更能了解如何有效防御这一安全威胁。希望各位在阅读实践后,能更好地掌握防范SQL注入技巧,在安全测试中确保系统数据的安全稳固。

原文始发于微信公众号(迪哥讲事):入门必备知识:深入浅出学SQL注入

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月7日09:04:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   入门必备知识:深入浅出学SQL注入https://cn-sec.com/archives/2477214.html

发表评论

匿名网友 填写信息