Web应用安全之OS命令安全隐患
来源:互联网 发布:淘宝为什么没有比价了 编辑:程序博客网 时间:2024/06/01 21:44
概要
Web应用开发使用的编程语言大多提供了通过Shell调用OS命令的功能,如果调用方法不当,就可能导致意料之外的OS命令被执行。称为OS命令注入。
典型攻击流程
1.从外部下载专门用来攻击软件。
2.对下载的软件授予执行权限。
3.从内部攻击OS漏洞以取得管理员权限(Local Exploit)
4.攻击者在服务器上为所欲为。
可进行的恶意行为
1.浏览、篡改或删除Web服务器内的文件。
2.对外发送邮件。
3.攻击其他服务器。
例子1
发送邮件时,接收页面脚本如下system("/usr/sbin/sendmail -i <template.txt> $mail");
当我们实施OS命令注入时,在表单的邮箱地址输入123@qq.com;cat /etc/passwd
页面上会显示 /etc/passwd/的内容
安全隐患产生原因
因为shell提供了一次启动多个命令的语法,因此外界就可以在参数中做手脚,使在原有命令的基础上执行其它的命令。
还有一种情况是虽然开发者没想要调用OS命令,但在无意中使用了内部会启动Shell的函数,典型例子为Perl的open函数。
综上所述:
1.通过Shell调用OS命令时,没有转义Shell的元字符。
2.使用了内部调用Shell的函数
一
$ echo aaa ; echo bbb #连续执行命令
aaa
bbb
$ echo aaa & echo bbb #在后台和前台执行
aaa
bbb
[1] + Done echo aaa
$ echo aaa && echo bbb #如果第一个命令执行成功就执行第二个命令
aaa
bbb
$ cat aaa || echo bbb #如果第一个命令执行失败就执行第二个命令
cat : aaa : No such file or direction
bbb
$ wc ' ls ' #将倒引号(')中的字符串作为命令执行
13 34 350 oscom001.php
40 99 839 sqlo001.php
53 133 1189 total
$ echo aaa | wc #将第一个命令的输出作为第2个命令的输入
1 1 4
windos的cmd.exe 中能够使用&来连续执行多条命令,另外|(管道功能)、&&或||的用法也和Unix一样。
Shell中拥有特殊意义字符被称为元字符,把元字符当作普通字符使用时需要考虑转义。参考Shell相关手册。
而在指定OS命令参数的字符串中混入了Shell的元字符,就会使攻击着添加的OS命令被执行。
二
如Perl的open函数,是用于打开文件的函数,然而根据open的调用方法的不同,有些情况下会通过Shell执行OS命令。例如通过open函数启动Linux的pwd命令(显示当前目录名的命令)只要像下面的CGI脚本一样,调用open函数时在命令名后面加上管道符号|即可。
#! /usr/bin/perl
print "Content-Type: text/plain\n\n<body>";
open FL, ' /bin/pwd | ' or die $!;
print <FL>
close FL;
print "</body>";
当前目录名就会通过pwd命令显示出来。
但是如果外界能指定文件名,就通过在文件名的前后加上管道符号 | 来实施OS命令注入攻击。
例如
file = ls + /sbin|
原因总结
需要同时满足以下三项条件
1.使用了内部调用Shell的函数(system、open等)
2.将外界传入的参数传递给内部调用Shell的函数
3.参数中Shell的元字符没有被转义
对策
推荐度由高到低
1.选择不调用OS命令的实现方法。
2.避免使用内部调用Shell的函数。
3.不将外界输入的字符串传递给命令行参数。
4.使用安全的函数对传递给OS命令的参数进行转义、
在设计阶段决定对策方针
总体设计阶段
1.决定主要功能的代码实现方针。
2.尽量利用专门的程序库,迫不得已时再使用OS命令来实现。
详细设计阶段
1.设计各功能的详细的实现方式时,极力避免使用内部调用Shell的函数。
2.只要使用内部调用Shell的函数时,讨论决定是将参数固定,还是由标准输入来指定参数。
关于内部调用Shell的函数
PHP
system() exec() passthru() proc_open() popen() shell_exec() ',,,'
Perl
exec() system() '...' qx/.../ open()
Ruby
exec() system() '...'
阅读全文
0 0
- Web应用安全之OS命令安全隐患
- 10大重要的Web应用安全隐患
- Web应用安全之CSRF
- Android应用安全隐患现状,资源文件加密/安全防护进化史
- web应用安全之XSS基础
- Web应用安全之XSS高阶
- Web应用安全之发送邮件
- WEB应用安全之常见安全漏洞
- Web之困:现代Web应用安全指南
- Web应用安全控制
- Web应用安全学习
- Web应用安全学习
- Web应用安全测试
- 1、web应用安全
- web应用安全相关
- Web应用安全测试
- Web应用安全防护
- 有关于WEB服务以及web应用的一些安全隐患总结资料
- Android 文件读写和文件夹创建和删除总结
- 大数模板
- Qt 调用CUDA动态库配置
- 面试题:C++如何只在堆上或栈上生成对象
- 软件更新后 version `GLIBCXX_3.4.15' not found
- Web应用安全之OS命令安全隐患
- 指针基础使用详解
- VS2013编写C++程序检测内存泄漏
- CF
- Android 蓝牙RFCOMM/L2CAP 阻塞问题 -- 文件传输失败
- ns安装出现的问题
- 剑指offer——把数组排成最小的数_____
- 第五次上机实验
- (四)项目结构介绍