【web-攻击后端组件】(7.1)注入操作系统命令:Perl、ASP、动态执行、OS命令注入

目录

一、攻击后端组件

1.1、简介:

二、注入操作系统命令

2.1、简述:

2.2、Perl、ASP注入

示例:

2.3、动态执行注入

简述:

示例:

2.4、OS命令注入

简述:

2.5、动态执行漏洞

简述:

过程:

2.6、防止OS命令注入

简述:

2.7、防止脚本注入漏洞

简述:


一、攻击后端组件

1.1、简介:

1、一系列后端业务关键资源包括网络资源(Web服务、后端Web服务器、邮件服务器)和本地资源(如文件系统)面向因特网的接口及操作系统接口,且应用程序服务器还作为这些后端组件的自主访问控制层。任何能够与后端组件进行任意交互的攻击都将能够突破Web应用程序实施的整个访问控制模型, 从而以未授权方式访问敏感数据和功能。

2、数据在不同组件间传递时, 它们将由不同类和的API和接口解释。被核心应用程序视为"安全"的数据,在支持不同编码、转义字符、字段分隔符或字符串终止符的上层组件看来可能极不安全,上层组件可能会有相对多的功能是应用程序在正常情况下所不会调用的。利用注入漏洞的攻击者通常不仅能够突破应用程序的访问控制, 甚至能够利用后端组件支持的其他功能来攻破组件基础架构的关键部分。



二、注入操作系统命令

2.1、简述:

1、大多数Web服务器平台发展迅速, 现在它们已能够使用内置的API与服务器的操作系统进行几乎任何必需的交互。API可帮助开发者访问文件系统、连接其他进程、进行安全的网络通信。但许多时候,开发者选择使用更高级的技术直接向服务器发送操作系统命令。由于这些技术功能强大、操作简单,并且通常能够立即解决特定的问题,但如果应用程序向操作系统命令传送用户提交的输入, 那么就很可能会受到命令注入攻击,攻击者能够提交专门设计的输入,修改开发者想要执行的命令。

2、常用于发出操作系统命令的函数,如PHP中的exec和ASP中的wscript.shell函数,通常并不限制命令的可执行范围。即使开发者准备使用API执行相对善意的任务, 如列出目录的内容,攻击者还是可以对其进行破坏,写入任意文件或启动其他程序。所有的注入命令都可在Web服务器的进程中安全运行, 它具有足够强大的功能, 使得攻击者能够完全控制整个服务器。

3、许多非定制和定制Web应用程序中都存在这种命令注入缺陷。企业服务器或防火墙、打印机和路由器之类的设备的管理界面的应用程序中,这类缺陷尤其许遍。因为操作系统交互允许开发者使用合并用户提交的数据的直接命令,所以这些应用程序都对交互过程提出了特殊要求

2.2、Perl、ASP注入

示例:

用于服务器管理的Web应用程序代码的一部分。这项功能允许管理员在服务器上指定一个目录, 并查看它的磁盘使用情况

通过提交精心设计的、包含shell元字符的输入,攻击者可对这项功能进行各种方式的利用。对处理命令的解释器而言, 这些字符有着特殊的含义,并可破坏开发者想要执行的命令。

1、Perl CGI代码编写(Perl注入):管道符"|" 可用于将一个进程的输出重定向到另一个进程的输入, 从而将几个命令连接在一起。攻击者可以利用这种行为注入另外一个命令并获得输出结果

2、C#代码编写(ASP注入):&字符用于将几个命令组合在一起。提交一个包含&字符的文件名和另外一个命令就可以执行该命令井显示其结果

2.3、动态执行注入

简述:

许多Web脚本语言支持动态执行在运行时生成的代码。这种特性允许开发者创建可根据各种数据和条件动态修改其代码的应用程序。如果用户输入合并到可动态执行的代码中,那么攻击者就可以提交专门设计的输入, 破坏原有的数据, 指定服务器执行自己的命令, 就好像这些命令是由最初的开发者编写的一样。攻击者的第一个目标通常是注入运行操作系统命令的API


示例:

1、一个搜索功能 该功能允许用户创建保存的搜索, 然后在用户界面上以链接的形式动态生成这些搜索。用户使用URL访问该搜索功能

2、服务器端应用程序通过动态生成变量来执行这项功能,生成的变量包含在URL中storedsearch参数中指定的名/值对,此处, 它创建值为home的变量search

例如:/ssarch.php?storedsearch=\$search%3dhome

3、提交专门设计的输入,由eval函数动态执行, 从而在服务器端应用程序中注入任意PHP命令。分号字符可用于在单独一个参数中将几个命令连接在一起

例如:使用file_get_contents或system命令加上/etc/password(即检索/etc/password内容)

将;%20echo%20file_get_contents('/etc/password')拼接到变量值后面

即:/ssarch.php?storedsearch=\$search%3dhome;%20echo%20file_get_contents('/etc/password')

2.4、OS命令注入

简述:

1、在应用程序解析过程中,通过调用外部进程或访问文件系统,能确定Web应用程序与基础操作系统交互的情形。开始攻击前要探查所有这些功能, 寻找命令注人漏洞,但应用程序发出的操作系统命令中可能包含用户提交的任何数据项, 包括每个URL、请求主体参数及cookie,对应用程序进行全面彻底的测试,必须检在每项应用程序功能中的所有这些数据项。

2、不同的命令解释器处理shell元字符的方式各不相同。任何类型的应用程序开发平台或Web服务器可能会调用任何shell解释器,在它自己或任何其他主机的操作系统上运行。所以不能根据对Web服务器操作系统的了解, 对应用程序如何处理元字符做出任何假设。

有两种类型的元字符可用于在一个现有的预先设定的命令中注入一个独立的命令

字符,| &和换行符可用于将几个命令逐个连接在一起,可以成对使用这些字符以达到不同的效果。如在windows命令解释器中, 使用&&则第二个命令只有在第一个命令成功执行后才会运行。使用||则总运行第二个命令, 无论第一个命令是否成功执行

反引号(`)用于将一个独立的命令包含在最初的命令处理的数据中。把一个注入的命令放在反引号内shell阐释器就会执行该命令, 并用这个命令的结果代替被包含的文本, 然后继续执行得到的命令字符串

3、可以注入一个命令, 但它不会返回结果, 也不会以任何可确定的方式影响应用程序随后的处理过程。或者由于几个命令连接在一起, 注入命令的执行结果在执行过程中丢失了。通常, 检测命令注入是否可行的最可靠方法是使用时间延迟推断, 类似于利用SQL盲注。如果一个潜在的漏洞可能存在, 那么就可以使用其他方法确定这个漏洞, 井获得注入命令的执行结果

4、使用所发现的任何一个可成功实施攻击的注入字符串, 尝试注入另一个更有用的命令(如ls或dir), 确定是否能够将命令结果返回到浏览器上

5、如果不能直接获得命令执行结果:

A、可以尝试打开一条通向自己计算机的带外通道。尝试使用TFTP上传工具至服务器,使用telnet或netcat建立一个通向自己计算机的反向shell,并使用mail命令通过SMTP发送命令结果

B、可以将命令结果重定向到Web根目录下的一个文件, 然后使用浏览器直接获取结果

6、找到注入命令的方法并能够获得命令执行结果,确定自己权限(通过使用whoami或类似命令, 或者尝试向一个受保护的目录写入一个无害的文件)。再设法提升自己的权限, 进而秘密访问应用程序中的敏感数据, 或者通过被攻破的服务器攻击其他主机

7、由于某些字符被过滤掉, 或者应用程序所使用的命令API的特殊行为, 可能无法注入一个完全独立的命令。但攻击者仍然可以破坏所执行的命令的行为,得到想要的结果。

2.5、动态执行漏洞

简述:

动态执行漏洞最常见于PHP和Perl等语言。但任何应用程序平台都可能会向基于脚本的解释器(有时位于其他后端服务器上)传送用户提交的输入


过程:

1、用户提交的所有数据项都可提交给动态执行函数。其中最常见的数据项是cookie参数名称和参数值, 以及作为前一项操作结果保存在用户资料中的永久数据

2、向目标参数提交下列值

;echo%2033333

echo%2033333

;respinse.write%2033333

respinse.write%2033333

3、监控应用程序的响应,如果字符串33333被单独返回,表示应用程序可能受到脚本命令注入

4、如果字符串33333并未返回,寻找任何表示输入被动态执行的错误消息;可能需要对语法进行调整,以实现注入任意命令的目的

5、如果攻击的应用程序使用PHP, 可使用phpinfo(),如果它成功执行,应用程序将返回PHP环境的配置信息

6、如果应用程序可能易于受到攻击,注入一些造成时间延迟的命令确认这一点,如syscem( 'ping%20127.0.0.1')

2.6、防止OS命令注入

简述:

1、防止OS命令注入漏洞的最佳方法是完全避免直接调用操作系统命令。几乎Web应用程序所需要执行的每个任务都可以使用内置API完成, 而且攻击者无法控制这些API, 使其执行其他预料之外的命令。

2、如果无法避免要在传送给操作系统命令解释器的命令字符串中插入用户提交的数据, 应用程序应实施严格的防御来防止漏洞发生。如使用一份 "白名单" 限制用户只输入一组特殊的值。或应将输入范围限制为少数字符,如仅字母数字字符。应拒绝包含任何其他数据(包括任何元字符或空白符)的输入

3、应用程序应使用命令API通过它的名称和命令行参数启动特殊的进程,而不是向支持命令链接与重定向的shell解释器传送命令字符串, 从而实施另一层保护。如Java API Runtime.exec和ASP.NET API Process.Start并不支持shell元字符,它们能够确保仅执行开发者想要执行的命令。

2.7、防止脚本注入漏洞

简述:

防止脚本注入漏洞的最佳方法是避免将用户提交的输入或者来自用户的数据传送给任何动态执行或包含函数。如果由于某种原因必须传送用户提交的输入, 那么应对相关输入进行严格的确认检查以阻止任何攻击。使用可靠的值组成的“白名单”,并拒绝任何没有出现在这个名单上的输入。如果无法做到这一点, 应根据一组已知无害的字符[如字母数字字符(空白符除外)]检查在输入中使用的字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色地带(崛起)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值