什么是asp
1.1 概述
?很多人声称自己了解 SQL 注入,但他们听说或经历的情况都是比较常见的。SQL 注入是影响企业运营且最具破坏性的漏洞之一,它会泄露保存在应用程序数据库中的敏感信息,包括用户名、口令、姓名、地址、电话号码以及信用卡明细等易被利用的信息。?那么,应该怎样来准确定义 SOL 注入呢? SOL注入(SOLIniection)是这样一种漏洞;应用程序在向后台数据库传递 SOL(Structured Query Language,结构化查询语言)查询时,如果为攻击者提供了影响该查询的能力,就会引发 SOL 注入。攻击者通过影响传递给数据库的内容来修改 SOL 自身的语法和功能,并且会影响 SOL 所支持数据库和操作系统的功能和灵活性。SOL注入不只是一种会影响 Web 应用的漏洞;对于任何从不可信源获取输入的代码来说,如果使用该输入来构造动态 SOL 语句,就很可能也会受到攻击(例如,客户端/服务器架构中的”胖客户端”程序)。在过去,典型的 SOL注入更多的是针对服务器端的数据库,然而根据目前的HITML5规范,攻击者可以采用完全相同的办法,执行 JavaScript 或其他代码访问客户端数据库以窃取数据。移动应用程序(比如 Android平台)也与之类似,恶意应用程序或客户端脚本也可以采用类似的方式进行 SQL 注入攻击。?自 SQL 数据库开始连接至 Web 应用起,SQL 注入就可能已经存在。Rain Forest Puppy 因首次发现它(或至少将其引入了公众的视野)而备受赞誉。1998年圣诞节,Rain Forest Puppy 为 Phrack撰写了一篇名为”NT Web Technology Vulnerabilities”(NT Web 技术漏洞)的文章。2000年早期,Rain Forest Puppy 还发布了一篇关于 SQL注入的报告,其中详述了如何使用 SOL注入来破坏一个当时很流行的 Web 站点。自此,许多研究人员开始研究并细化利用 SQL 注入进行攻击的技术。但时至今日,仍有许多开发人员和安全专家对 SQL 注入不甚了解。?本章将介绍 SQL 注入的成因。首先概述 Web 应用通用的构建方式,为理解 SQL 注入的产生过程提供一些背景知识。接下来从 Web 应用的代码层介绍引发 SQL 注入的因素以及哪些开发实践和行为会引发 SQL 注入。
?1.2 理解 Web 应用的工作原理
?大多数人在日常生活中都会用到 Web 应用。有时是作为假期生活的一部分,有时是为了访问 e-mail、预定假期、从在线商店购买商品或是查看感兴趣的新闻消息等。Web 应用的形式有很多种。?不管是用何种语言编写的 Web 应用,有一点是相同的∶它们都具有交互性并且多半是数据库驱动的。在互联网中,数据库驱动的 Web 应用非常普遍。它们通常都包含一个后台数据库和很多 Web 页面,这些页面中包含了使用某种编程语言编写的服务器端脚本,而这些脚本则能够根据 Web 页面与用户的交互从数据库中提取特定的信息。电子商务是数据库驱动的 Web 应用的最常见形式之一。电子商务应用的很多信息,如产品信息、库存水平、价格、邮资、包装成本等均保存在数据库中。如果读者曾经从电子零售商那里在线购买过商品和产品,那么应该不会对这种类型的应用感到陌生。数据库驱动的 Web 应用通常包含三层∶表示层(Web 浏览器或呈现引擎)、逻辑层(如 C#、ASP、.NET、PHP、JSP等编程语言)和存储层(如 Microsoft SQL Server、MySQL、Oracle 等数据库)。Web 浏览器(表示层,如 Internet Explorer、Safari、Firefox等)向中间层(逻辑层)发送请求,中间层通过查询、更新数据库(存储层)来响应该请求。?下面看一个在线零售商店的例子。该在线商店提供了一个搜索表单,顾客可以按特定的兴趣对商品进行过滤、分类。另外,它还提供了对所显示商品作进一步筛选的选项,以满足顾客在经济上的预算需求。
可以使用下列 URL 查看商店中所有价格低于$100 的商品∶
http∶//www. victim.com/products.php?val=100。
?下列 PHP脚本说明了如何将用户输入(val)传递给动态创建的 SQL 语句。
当请求上述 URL时,将会执行下列 PHP 代码段∶
?// 连接到数据库?
$conn = mysql_connect(“localhost”,”username”,”password”);
// 使用输入动态创建 SQL 语句
?$query = “SELECT * FROM Products WHERE Price <‘$ GET[“val”]'”?”ORDER BY ProductDescription”;?
//对数据库执行查询
?$result = mysql_query ($query);
//迭代返回的记录集?
while($row = mysql_fetch_array(Sresult,MYsQL_ASsoC))?
//将结果显示在浏览器中
?echo “Description :($row[‘ProductDescription’])<br>” .?”product ID :($row[‘ProductID’] )<br>”.”price : {Srow[‘Price’] ) <br><br>”;
?接下来的代码示例更清晰地说明了 PHP 脚本构造并执行的 SOL 语句。该语句返回数据库中所有价格低于$100 的商品,之后在 Web 浏览器上显示并呈现这些商品以方便顾客在预算范围内继续购物。一般来说,所有可交互的数据库驱动的 Web 应用均以相同的(至少是类似的)方式运行∶
SELECT FROM Products WHERE Price <‘100.00’ ORDER BY ProductDescription;?
1.2.1 一种简单的应用架构?前面讲过,数据库驱动的 Web 应用通常包含三层∶ 表示层、逻辑层和存储层。为更好地帮助读者理解 Web 应用技术是如何进行交互的,从而为用户带来功能丰富的 Web 体验,我们借助图 1-1 来说明前面描述的那个简单的三层架构示例。?表示层是应用的最高层,它显示与商品浏览、购买、购物车等服务相关的信息,并通过将结果输出到浏览器/客户端层和网络上的所有其他层来与应用架构的其他层进行通信。逻辑层是从表示层剥离出来的,作为单独的一层,它通过执行细节处理来控制应用的功能。数据层包括数据库服务器,用于对信息进行存储和检索。数据层保证数据独立于应用服务器或业务逻辑。将数据作为单独的一层还可以提高程序的可扩展性和性能。在图 1-1 中,Web 浏览器(表示层)向中间层(逻辑层)发送请求,中间层通过查询、更新数据库(存储层)响应该请求。三层架构中一条最基本的规则是∶表示层不应直接与数据层通信。在三层架构中,所有通信都必须经过中间层。从概念上看,三层架构是一种线性关系。?表示层?存储层?逻辑层?访问http;//www.victim.com?加载、编译并执行 index.sp?执行 SQL脚本引繁 RDBMs o?返回数据?发送 HTML?是现HTML?编程语言;C#、ASP、.NET、PHP、JSP等?Web 浏览器/星现引擎?数据库∶ MSSQL、MySQL、Oracle 等
图1-1 简单的三层架构
?在图 1-1中,用户激活 Web 浏览器并连接到 http∶//www.victim.com。位于逻辑层的 Web 服务器从文件系统中加载脚本并将其传递给脚本引擎,脚本引擎负责解析并执行脚本。脚本使用数据库连接程序打开存储层连接并对数据库执行 SQL 语句。数据库将数据返回给数据库连接程序,后者将其传递给逻辑层的脚本引擎。逻辑层在将 Web 页面以 HTML 格式返回给表示层的用户的 Web 浏览器之前,先执行相关的应用或业务逻辑规则。用户的 Web浏览器呈现 HITML并借助代码的图形化表示展现给用户。所有操作都将在数秒内完成,并且对用户是透明的。
1.2.2 一种较复杂的架构?三层解决方案不具有扩展性,所以最近几,年研究人员不断地对一层架构进行改进,并在可扩展性和可维护性基础之上创建了一种新概念; n 层应用程序开发范式。其中包括一种 4 层解决方案,该方案在 Web 服务器和数据库之间使用了一层中间件(通常称为应用服务器)。n 层架构中的应用服务器负责将 API(应用编程接口)提供给业务逻辑和业务流程以供程序使用。可以根据需要引入其他的 Web 服务器。此外,应用服务器可以与多个数据源通信,包括数据库、大型机以及其他旧式系统。
? 图1-2 描绘了一种简单的 4 层架构。
?在图 1-2 中,Web 浏览器(表示层)向中间层(逻辑层)发送请求,后者依次调用由位于应用层的应用服务器提供的 API,应用层通过查询、更新数据库(存储层)来响应该请求。?在图 1-2 中,用户激活Web 浏览器并连接到 http;//www.victim.com。位于逻辑层的 Web 服务器从文件系统中加载脚本并将其传递给脚本引擎,脚本引擎负责解析并执行脚本。脚本调用由位于应用层的应用服务器提供的 API。应用服务器使用数据库连接程序打开存储层连接并对数据库执行 SOL 语句。数据库将数据返回给数据库连接程序,应用服务器在将数据返回给 Web服务器之前先执行相关的应用或业务逻辑规则。Web 服务器在将数据以 HTML 格式返回给表示层的用户的 Web 浏览器之前先执行最后的有关逻辑。用户的 Web 浏览器呈现HTML 并借助代码的图形化表示展现给用户。所有操作都将在数秒内完成,并且对用户是透明的。?表示层访向 http:/wwx yictim.com[?逻辑层加载、编译并执行?index.asp(脚本引擎】?脚本?呈现 HTML’?发送 FTML?编程语言∶C#、ASP、 .NET、PHP、JSP 等?Web 浏览器/呈现引擎?图1-2 4 层架构?应用层?存储层执行sQL?与数据存储交互,利用应用程序和业务逻辑?kDBMS?返回数据?为Web 服务器提供数据数据库∶ MSSQL、?CFC、EB、SOAP、RMI Web 服务等?MySQL、Oracle 等?分层架构的基本思想是将应用分解成多个逻辑块(或层),其中每一层都分配有通用或特定的角色。各个层可以部署在不同的机器上,或者部署于同一台机器上,但实际在概念上是彼此分离的。使用的层越多,每一层的角色就越具体。将应用的职责分成多个层能使应用更易于扩展,可以更好地为开发人员分配开发任务,提高应用的可读性和组件的可复用性。该方法还可以通过消除单点失败来提高应用的健壮性。例如,决定更换数据库提供商时,只需修改应用层的相关部分即可,表示层和逻辑层可保持不变。在互联网上,3 层架构和 4 层架构是最常见的部署架构。正如前面介绍的,n 层架构非常灵活,在概念上它支持多层之间的逻辑分离,并且支持以多种方式进行部署。
信息安全战术防御局 Information Security Tactical Defense Agency 信息安全战术防御局。 AI渗透、攻防、护网、逆向、信息安全知识分享公众号。 5篇原创内容 –> 公众号
Burp Suite 安装和环境配置
Burp Suite代理和浏览器设置
渗透必备工具之Cobalt Strike