命令执行漏洞

发布于 2022-03-16  131 次阅读


原理

用户输入的数据被当做系统命令进行执行

函数

system() 他不需要echo输出、他可以返回多行结果
exec() 没回显,要有echo才能输出。返回结果只有最后一行
shell_exec() 没回显,要有echo才能输出.返回多行结果
`` [反引号] 执行命令并且返回结果 (shell_exec 特殊写法)
passthru() 执system特点一样 且其可以输出二进制,比如图像数据。
popen() 执行命令才是核心

区别

  • 代码执行:用户输入的数据当作后端代码执行
  • 命令执行:用户输入的数据当作系统命令执行

代码执行 和 命令执行 (转换)
RCE (远程代码/命令执行) 可以通过漏洞拿下服务器

靶场实操

先对本地搭建的cms代码审计

image-20220314132925886

​ shell_exec("{$mysqlBin}mysqldump --force --quick $command1 --add-drop-table $command2 $command3 --host=\"{$db["host"]}\" $command5 --user=\"{$db["username"]}\" --password=\"{$db["password"]}\" \"{$db["dbname"]}\" $tablesstr > $dumpFile");

控制$dumpFile = $backupFileName . "-%s.sql";

image-20220314183300840

提交并用burp抓包

image-20220314183602389

修改数据包,将filename值修改到GET传参,值为上图

image-20220314183634694

应该是写马成功了

访问一下看看

image-20220314183846197

成功,

image-20220314184355741

找到flag


本当の声を響かせてよ