*** 测试后端组件*
一**:注入操作系统命令
大多数Web服务器平台发展迅速,现在他们已经能够使用内置的API与服务器的操作系统进行几乎任何必需的交互。如正确使用,这些API可帮助开发者访问文件系统,连接其他进程,进行安全的网络通信。但是,许多时候,开发者使用更高级的技术直接向服务器发送操作系统命令。但是,如果应用程序向操作系统传送用户提交的输入,那么就很可能会受到命令注入攻击,由此攻击者能够提交专门设计的输入,修改开发者想要执行的命令。
常用于发出执行系统命令的函数,如php中的exec和ASP中的wscript.shell函数,通常并不限制命令的可执行范围。
eg1:
通过Perl注入
eg2:
通过ASP注入
eg3:
通过动态执行注入
许多Web脚本语言支持动态执行在运行时生成的代码。这种特性允许开发者创建可根据各种数据和条件动态修改其代码的应用程序。
eg4:
查找OS
查找OS命令注入漏洞
0x02
查找动态执行漏洞
动态执行漏洞最常见于PHP,Perl等语言。但基本上,任何应用程序平台都可能会向基于脚本的解释器(有时位于其他后端服务器上)传送用户提交的输入。
防止OS命令注入:
防止OS命令注入漏洞的最佳方法是完全避免直接调用操作系统命令。
几乎所有Web应用程序所需要执行的每个任务都可以使用内置API完成,而且攻击者无法控制这些API,使其执行其他预料之外的命令。
防止脚本注入漏洞
最佳方法:避免将用户提交的输入或者来自用户的数据传给任何动态执行或包含函数。
如有可能,使用一份由已知可靠的值组成的“白名单”,并拒绝任何没有出现在这个名单上的输入,如果做不到,应根据一组已知无害的字符【如字母数字字符(空白符除外)检查在输入中使用的字符】
0x03
路径遍历漏洞
windows平台接受斜线(/)和反斜线()作为目录分隔符,而UNIX平台只接受斜线作为分隔符。另外,一些Web应用程序过滤两者之一。即使完全确信Web服务器运行的是UNIX操作系统,但应用程序仍然可能被windows后端组件调用。为此,当探查遍历漏洞时,最好两者都进行测试。
渗透测试:
一定要对输入中的每一个斜线与点进行编码:16位unicode,双倍URL编码,超长UTF-8unicode编码
2:如果应用程序尝试通过删除遍历序列来净化用户输入,但没有以递归的方式应用这种过滤,那么可以用一个序列替换另一个序列来避开过滤。
....//
..../
..../ ////\
0x04
利用路径遍历漏洞
1:获取有用文件
操作系统与应用程序的密码文件
服务器与应用程序配置文件,以发现其他漏洞或优化另一次攻击。
可能包含数据库证书的包含文件。
应用程序使用的数据源,如mysql数据库文件或XML文件。
服务器可执行页面的源代码,以执行代码审计。
可能包含用户名和会话令牌的应用程序日志文件。
2:如果发现一个允许写入访问的路径遍历漏洞,那么渗透测试的主要目标是应该利用它在服务器上执行任意命令。利用漏洞实现这一目标的方法包括以下几种:
1:在用户的启动文件夹中创建脚本
2:当用户下一次连接时,修改in.ftpd等文件执行任意命令。
向一个拥有执行许可的Web目录写入脚本,从浏览器调用他们。
0x05 防止路径遍历漏洞
避免向任何文件系统API传送用户提交的数据是防止路径遍历漏洞的最有效方法。
最好将以下组合在一起使用
1:对用户提交的文件名进行解码与规范化之后,应用程序应检查该文件名是否包含路径遍历序列(使用反斜线或斜线)或空字节。停止请求,拒接净化。
2:对用户提交的文件名进行解码与规范化之后,使用一个硬编码,允许允许访问的文件类型列表
3:对用户提交的文件名进行一切的过滤后,应用程序应使用适当的文件系统API确认是否一切正常,以及使用该文件名访问的文件是否位于应用程序=指定的起始目录中。