命令执行漏洞,用户通过浏览器在远程服务器上执行任意系统命令,严格意义上,与代码执行漏洞还是有一定的区别。

0x01漏洞实例

例1:

$target=$_REQUEST['ip'];

$cmd = shell_exec('ping '.$target);

echo "

{$cmd}

";

?>

提交 http://127.0.0.1/cmd.php?ip=|net user

提交以后,命令变成了 shell_exec('ping '.|net user)

0x02 常用命令执行函数

exec()、system()、popen()、passthru()、proc_open()、pcntl_exec()、shell_exec() 、反引号` 实际上是使用shell_exec()函数

system() 输出并返回最后一行shell结果。

exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。

passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。

popen()、proc_open() 不会直接返回执行结果,而是返回一个文件指针

#system('net user');

#passthru ('dir');

#echo exec('whoami');

#echo shell_exec('whoami');

#echo `whoami`;

?>

0x03 漏洞利用及绕过姿势

| 命令管道符

<>>> 文件重定向符

测试: 0 | dir c:

代码只过滤了部分特殊字符,可以考虑用其他字符进行测试,这边列举一下Window/Linux可利用的特殊字符:

windows支持:

|     直接执行后面的语句      ping 127.0.0.1|whoami

||    前面出错执行后面的 ,前面为假       ping  2 || whoami

&   前面的语句为假则直接执行后面的,前面可真可假                       ping 127.0.0.1&whoami

&&前面的语句为假则直接出错,后面的也不执行,前面只能为真    ping 127.0.0.1&&whoami

Linux支持:

;     前面的执行完执行后面的      ping 127.0.0.1;whoami

|     管道符,显示后面的执行结果   ping 127.0.0.1|whoami

11   当前面的执行出错时执行后面的   ping 1||whoami

&   前面的语句为假则直接执行后面的,前面可真可假                       ping 127.0.0.1&whoami

&&前面的语句为假则直接出错,后面的也不执行,前面只能为真    ping 127.0.0.1&&whoami

0x04 如何防止命令执行漏洞

PHP内置的两个函数可以有效防止命令执行:

escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。资料参考:http://cn.php.net/manual/zh/function.escapeshellarg.php

escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。资料参考:http://cn.php.net/manual/zh/function.escapeshellcmd.php

当然,修复方法还有很多方式,修复方式一般有两种思维:

1、黑名单:过滤特殊字符或替换字符  2、白名单:只允许特殊输入的类型/长度

修复代码示例一:

$target=$_REQUEST['ip'];

$octet = explode( ".", $target );

if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {

$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

$cmd = shell_exec('ping '.$target);

echo "

{$cmd}

";

}

else {

echo '

ERROR: You have entered an invalid IP.

';

}

?>

修复代码示例二:

$target=$_REQUEST['ip'];

$cmd = shell_exec('ping '. escapeshellcmd($target));

echo "

{$cmd}

";

?>

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。

参考文章:

命令执行漏洞  http://www.jianshu.com/p/1e706f13b088

ASP代码审计 -4&period;命令执行漏洞总结

命令执行漏洞: 保存为cmd.asp,提交链接: http://localhost/cmd.asp?ip=127.0.0.1 即可执行命令

2020&sol;1&sol;28 PHP代码审计之命令执行漏洞

0x00 命令执行漏洞原理 应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system.exec.shell_exec.passthru.popen.proc_popen等函数可以执行 ...

PHP代码审计笔记--代码执行漏洞

漏洞形成原因:客户端提交的参数,未经任何过滤,传入可以执行代码的函数,造成代码执行漏洞. 常见代码注射函数: 如:eval.preg_replace+/e.assert.call_user_func. ...

ASP代码审计学习笔记 -4&period;命令执行漏洞

命令执行漏洞: 保存为cmd.asp,提交链接: http://localhost/cmd.asp?ip=127.0.0.1 即可执行命令

Kali学习笔记30:身份认证与命令执行漏洞

文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 实验环境: Kali机器:192.168.163.13 ...

PHP代码审计学习之命令执行漏洞挖掘及防御

[1]可能存在命令执行漏洞的函数: 00x1:常用的命令执行函数:exec.system.shell_exec.passthru 00x2:常用的函数处理函数:call_user_func.call_ ...

php代码审计5审计命令执行漏洞

命令执行漏洞:通过易受攻击的应用程序在主机操作系统上执行任意命令,用户提供的数据(表单,cookie,http头等)未过滤 挖掘思路:用户能够控制函数输入,存在可执行代码的危险函数 命令执行和代码执行 ...

2011-11-14&colon;命令执行漏洞防御,PHP反序列化漏洞产生原因,笔记

命令执行漏洞防御尽量不要使用系统执行命令在进入执行命令函数方法之前,变量一定要做好过滤,对敏感字符进行转义在使用动态函数之前,确保使用的函数是指定的函数之一对PHP语言来说,不能完全控制的危险函数最好 ...

PHP命令执行漏洞初探

PHP命令执行漏洞初探 Mirror王宇阳 by PHP 命令执行 PHP提供如下函数用于执行外部应用程序:例如:system().shell_exec().exec().passthru() sys ...

随机推荐

mysql&colon;添加索引

ALTER TABLE tb_user_type ADD INDEX user_type_index3 (report_type_id) ALTER TABLE tb_user_type ADD IN ...

XML入门级的简单学习

xml案例<?xml version="1.0" encoding="ISO-8859-1"?> Ge ...

BZOJ4195 程序自动分析

Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或x ...

Chrome 控制台不完全指南【转载】

Chrome的开发者工具已经强大到没朋友的地步了,特别是其功能丰富界面友好的console,使用得当可以有如下功效: 更高「逼格」更快「开发调试」更强「进阶级的Frontender」 Bug无处遁形「 ...

C&plus;&plus;使用之常量的定义

在介绍C++的常前,先看下下面的代码. for (int i = 0; i < 512; ++i) { …; } 512是什么,它具有什么含义?在代码中若直接使用类似512这些“魔数”(magi ...

Internet Explorer 11(IE11)无法切换第三方输入法

Windows 8.1搭载了新的IE11版本,还发布了IE11 for Windows 7. IE11除了支持全尺寸Win设备以外,还比IE10更快速流畅,支持3D等高性能的浏览体验.全新F12开发者 ...

mul8&lowbar;unsigned multipliter

李亚民老师更注重硬件设计思想的训练.他给出的硬件设计方法更贴近底层硬件,下面看看他的设计思想:                                                      ...

C语言缓冲区(缓存)详解

缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区.缓冲区根据其对应的是输入设备还是输出设备,分为输 ...

IIS 加载 JSON 错误 404 解决办法

MIME设置:在IIS的站点属性的HTTP头设置里,选MIME 映射中点击”文件类型”-”新类型”,添加一个文件类型:关联扩展名:*.json内容类型(MIME):application/x-java ...

python虚拟环境搭建大全(转)

Pipenv & 虚拟环境 本教程将引导您完成安装和使用 Python 包. 它将向您展示如何安装和使用必要的工具,并就最佳做法做出强烈推荐.请记住, Python 用于许多不同的目的.准确地 ...

php代码审计命令执行,PHP代码审计笔记--命令执行漏洞相关推荐

  1. linux shell命令分布执行,Linux学习笔记:bash特性之多命令执行,shell脚本

    今天我们学习了bash特性多命令执行包括各个命令之间的逻辑关系.其中包含"与""或""非"命令的执行.下面即为我们所学习的这些逻辑命令关系之 ...

  2. 深入浅出话命令(Command)-笔记(-)

    深入浅出话命令(Command)-笔记(-) 一 基本概念 命令的基本元素: 命令(Command):实现了ICommand接口的类,平常使用最多的是RoutedCommand类. 命令源(Comma ...

  3. GCC笔记 命令行分析

    1984年,Richard Stallman发起了自由软件运动,GNU (Gnu's Not Unix)项目应运而生,3年后,最初版的GCC横空出世,成为第一款可移植.可优化.支持ANSI C的开源C ...

  4. 设计模式学习笔记——命令(Command)模式

    设计模式学习笔记--命令(Command)模式 @(设计模式)[设计模式, 命令模式, command] 设计模式学习笔记命令Command模式 基本介绍 命令案例 类图 实现代码 Command接口 ...

  5. Linux shell命令示例介绍-个人笔记

    转载: https://blog.csdn.net/zhangwu1241/article/details/60871000 Linux中命令示例介绍-个人笔记 为了方便以后查阅,会对在Linux学习 ...

  6. Linux学习笔记---命令篇

    Linux学习笔记-命令篇 本笔记是根据尚硅谷的Linux视频,经过自己的总结得出来的笔记,分为两个大章节,一-四章讲的是Linux的文件目录结构.vim编辑器.网络配置和系统管理.进程和服务.第二个 ...

  7. 易语言学习笔记——命令篇

    易语言学习笔记20180711 一. 命令概述 1.     什么是命令:命令是一个功能调用的开始. 2.     命令的参数:调用一个功能方法时候输入的数据或者条件. 3.     命令的返回值:调 ...

  8. Linux常用命令,个人学习笔记

    以下是小生在学习linux过程中整理的笔记,因为个人比较菜,笔记比较细啰嗦,希望能给需要的小伙伴一点帮助. 1.立即关机 poweroff 跳出虚拟机,显示鼠标ctrl+alt 进入虚拟机,隐藏鼠标c ...

  9. 《Python 黑帽子》学习笔记 - 命令行选项和参数处理 - Day 4

    在学习书中 netcat 代码的时候,发现其命令行选项和参数的处理存在一些小问题,由于调用 getopt 模块的 getopt() 函数时参数设置不当,会引起代码执行时获取不到参数值或引发异常.该问题 ...

最新文章

  1. 离职后为讨薪资删公司数据,一技术开发工程师被判 11 个月
  2. 图像处理库OpenCV参考网址
  3. Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作
  4. JMETER分布式部署注意事项
  5. kubernetes failed to start sandbox
  6. 啊哈C语言 第7章 有了它你能做更多的事(第27-28讲)
  7. IntelliJ IDEA中项目界面右上角中没有SVN工具按钮
  8. napi娃娃_第二十九章 干妈
  9. HDU 2037 (贪心或记忆化搜索)
  10. Kaggle案例泰坦尼克号问题
  11. 【国信安实训】——文件上传漏洞
  12. 关于transform-style:preserve-3d的些许明了
  13. Python中abs()与fabs()的区别
  14. 【题解】曼哈顿模拟赛(洛谷)
  15. 查看、修改 nginx分布服务器ip
  16. uniapp的打包h5页面收不到验证码接口
  17. 集成第三方SDK——支付宝支付
  18. Linux 7.9.三台机器机器免密码登录
  19. 学完C语言可以学什么--C/C++图形库Easyx(万字教程,一文入门)
  20. AE基础教程(12)——第12章 轨道遮罩

热门文章

  1. 可以免费下载视频素材和模板网站汇总
  2. WAS6.1JNDI数据源配置测试代码
  3. 本站最全-unity常用API大全(万字详解),不信你不收藏
  4. 微众银行为甘肃省职业院校技能大赛“区块链技术与应用”赛项提供技术支持
  5. IMX6ULL与IMX6UL异同(主要是优化了其成本:安全功能减低,优化功耗EMC SIM模块删除等与但和I.MX6UltraLite芯片是PIN-2-PIN兼容的)
  6. Python覆盖率框架Coverage初探
  7. 不清楚用电脑怎么图片转文字?来看看这三个方法吧
  8. 李沐学AI之数据探索性分析
  9. 程序员依然是这个时代,贫寒学子翻身的不二选择
  10. OSChina 周一乱弹 —— 怎么搭讪学医的女孩,说你有病!