命令执行函数

1、什么是命令执行

命令执行(Remote Command Execution, RCE)

Web应用的脚本代码在执行命令的时候过滤不严

从而注入一段攻击者能够控制的代码,在服务器上以Web服务的后台权限远程执行恶意指令

成因

  • 代码层过滤不严
  • 系统的漏洞造成命令注入
  • 调用的第三方组件存在代码执行漏洞常见的命令执行函数
    • PHP:exec、shell_exec、system、passthru、popen、proc_open等
    • ASP.NET:System.Diagnostics.Start.Process、System.Diagnostics.Start.ProcessStartInfo等
    • Java:java.lang.runtime.Runtime.getRuntime、java.lang.runtime.Runtime.exec等

2、常用命令执行函数

(1)system

该函数会把执行结果输出
并把输出结果的最后一行作为字符串返回
如果执行失败则返回false
这个也最为常用

<?php highlight_file(__FILE__); system('pwd'); system('whoami'); ?>

(2)exec

不输出结果,返回执行结果的最后一行
可以使用output进行输出

<?php highlight_file(__FILE__); exec('pwd',$b); var_dump($b); ?>

(3)passthru

此函数只调用命令
并把运行结果原样地直接输出
没有返回值。

<?php highlight_file(__FILE__); passthru('ls'); ?>

(4)shell_exec

不输出结果,返回执行结果
使用反引号(``)时调用的就是此函数

<?php highlight_file(__FILE__); var_dump(shell_exec('ls')); ?>

(5)ob_start

此函数将打开输出缓冲,当输出缓冲激活后,脚本将不会输出内容(除http标头外)
相反需要输出的内容被存储在内部缓冲区中。

内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中

想要输出存储在内部缓冲区中的内容

可以使用 ob_end_flush() 函数
另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容

<?php ob_start("system"); echo "whoami"; ob_end_flush(); ?>

3、命令连接符

Windows和Linux都支持的命令连接符:

  • cmd1 | cmd2 只执行cmd2- cmd1 || cmd2 只有当cmd1执行失败后,cmd2才被执行
  • cmd1 & cmd2 先执行cmd1,不管是否成功,都会执行cmd2
  • cmd1 && cmd2 先执行cmd1,cmd1执行成功后才执行cmd2,否则不执行cmd2
    Linux还支持分号;
  • cmd1 ; cmd2 按顺序依次执行,先执行cmd1再执行cmd2

4.常见类型

| A|B:无论执行的A命令是否正确,B命令都执行

|| A||B:只有在A命令没有执行失败的前提下,B命令才可以执行

& A&B:不管A是否执行成功,B命令都会执行

&& A&&B:只有在A命令成功执行的前提下,B命令才可以执行

5.命令执行函数

在PHP中具有执行系统命令功能的函数如下: 1、system2、exec3、shell_exec 4、passthru 5、popen 6、proc_popen 7、`反引号 8、ob_start 9、mail函数+LD_PRELOAD执行系统命令

6.命令执行漏洞的利用

权限问题

OS命令注入漏洞,攻击者直接继承Web用户权限,在服务器上执行任意命令,危害特别大。以下命令均在windows系统下测试成功

1、查看系统文件

bash

?cmd=type c:\windows\system32\drivers\etc\hosts

2、显示当前路径

bash

?cmd=cd

3、显示当前权限

bash

?cmd=whoami

4、写文件

bash

?cmd=echo "<?php phpinfo();?>" > C:\phpStudy\WWW\Commandi\shell.php #页面没有报错,说明文件写入成功,访问shell.php文件,同理我们可以写入一个一句话木马

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MS02423

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值