远程代码执行 remote code execute
远程命令执行 remote command execute
远程代码执行包含远程命令执行(通过代码调用系统命令)
远程系统命令执行
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器 。
现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。 在这种平台上往往会出现远程系统命令执行的漏洞,不信的话现在就可以找你们运维部的系统测试一下,会有意想不到的"收获"
测试
1.对pikachu网站的命令执行的地方抓包看效果
看代码
代码中方法解释:
stristr方法:
查找 "world" 在 "Hello world!" 中的第一次出现,并返回字符串的剩余部分:
<?php
echo stristr("Hello world!","WORLD");
?>
结果: world!
php_uname方法:
php_uname — 返回运行 PHP 的系统的有关信息。
原型:string php_uname ([ string $mode = “a” ] )。返回运行php的操作系统的相关描述,
和 phpinfo() 最顶端上输出的是同一个字符串。 如果仅仅要获取操作系统的名称。可以考虑使用常量
PHP_OS,不过要注意该常量会包含 PHP 构建(built)时的操作系统名。
参数:
mode 是单个字符,用于定义要返回什么信息:
‘a’:此为默认。包含序列 “s n r v m” 里的所有模式。
’s’:操作系统名称。例如: FreeBSD。
‘n’:主机名。例如: localhost.example.com。
‘r’:版本名称,例如: 5.1.2-RELEASE。
‘v’:版本信息。操作系统之间有很大的不同。
‘m’:机器类型。例如:i386。
示例
echo php_uname('s'); windows、linux等
shell_exec #执行系统指令
示例: shell_exec('ping','192.168.0.25')
大家发现这个代码中并没有对系统指令数据进行任何的过滤,那么如果我们执行如下指令 ping
192.168.0.25 & ipconfig 或者 ping 192.168.0.25 && ipconfig ,两个指令都执行了,效果如下: 注:一个&和两个&是有些区别的,一个&:如果前一个指令错了,后面的指令照样会执行 两个&:如果前一个指令执行错了,那么后面的指令就不会执行了。
那么回到pikachu,我们就可以执行任意我们想执行的指令了