漏洞之执行漏洞

执行漏洞

执行漏洞分为:  代码执行漏洞和命令执行漏洞

 

一、代码执行漏洞

代码执行漏洞是程序能够调用函数, 将字符串转化为可执行代码, 且没有考虑到攻击者可以利用字符串, 造成代码执行漏洞。很难通过黑盒查找漏洞,大部分都是根据源代码判断代码执行漏洞

 

1. 相关函数:

PHP: eval、assert、preg_replace()、+/e模式(PHP版本<5.5.0)

Javascript: eval

Vbscript:Execute、Eval

Python: exec

Java: Java中没有php中eval函数这种直接可以将字符串转化为代码执行的函数,但是有反射机制,并且有各种基于反射机制的表达式引擎,如:OGNL、SpEL、MVEL等,这些都能造成代码执行漏洞。

 

2. 演示

有一个test.php程序:

<?php
    eval($_GET['para']);
    ...
?>

意思接受参数para, 并且将para的值转化为php可执行文件, 是一种动态执行。(包含执行)

攻击者通过传递的参数来进行攻击:

http://www.***.com/test.php?para=phpinfo();

这样字符串phpinfo(); 就会被转化为php可执行命令执行, 当然攻击者还可以进行随心所欲的写入、越权操作甚至一句话木马等。

 

3.  引申

菜刀工具原理也是基于这个原理

 

4. 防范与修复

  • 对于eval()函数一定要保证用户不能轻易接触eval参数或者用正则严格判断输入的数据格式。
  • 对于字符串一定要使用单引号包裹可控代码,并且插入前进行addslashes()
  • 对于preg_replace放弃使用e修饰符.如果必须要用e修饰符,请保证第二个参数中,对于正则匹配出的对象,用单引号包裹。

参考:  代码执行漏洞

 

 

二、命令执行漏洞

当应用需要调用一些外部程序时就会用到一些执行系统命令的函数。

1. 相关函数 (已php为例)

  • system(args) 有回显
  • passthru(args)(有回显)
  • exec(args) (回显最后一行-必须echo输出)
  • shell_exec(args) (无回显-必须输出)
  • 反引号:``
  • popen(handle,mode)(无回显)
  • proc_open(‘cmd’,‘flag’,‘flag’)(无回显)
  • $process = proc_open(‘dir’,$des,$pipes);
  • echo stream_get_contents($pipes[1])

 

2. 演示

比如有一个test.php如下:

<?php
    echo shell_exec($_GET['cmd']);
?>

接受para参数, 并且作为行命令执行:

http://www.***.com/test.php?cmd=ipconfig

 

3. 危害

  • 盗取webshell, 执行系统命令, 读取文件等
  • 反弹shell
  • 控制整个网站甚至整个服务器

 

4. 防范

  • 如在php.ini中的disable_function添加禁用高危函数
  • 严格过滤关键字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值