反弹Shell执行pty泄露黑客命令记录?

反弹Shell执行pty泄露黑客命令记录?

python -c import pty; pty.spawn("/bin/bash")

做过渗透的小伙伴对这个命令都不会陌生,通常利用web漏洞进行反弹shell后,都会执行python的pty.spawn得到一个功能相对完善的伪终端,比如支持命令补全、使用vim等需要终端控制的程序。但是这也会导致攻击者执行过的命令被写入到当前用户的.bash_history中。

凭空出现的history

在今年的护网中,攻击队利用某组件的RCE漏洞拿到了云上服务器的权限,执行扫描的行为触发了主机安全的告警,联系客户后上机排查。

SSH登录后发现攻击队执行的所有命令记录都被写入到了history?

我们第一反应是攻击队通过漏洞拿到了权限后,进一步信息收集拿到SSH凭据后,直接通过SSH登录后执行的操作,但是还没有来得及清理痕迹就被关机了。

没有SSH登录记录?

初步推测攻击队如果是通过SSH登录操作的话,日志一定会有记录SSH的登录记录。

查看secure日志和last命令的记录,除了客户自己登录进行关机的操作,7月7号均未发现其他ip有登录过服务器的行为。

难道是攻击队定向删除过SSH的登录日志?我们又对全盘做了数据恢复,恢复出来的都是2023年的SSH日志,说明这段时间的SSH登录记录并没有被删除过。

为什么history凭空会记录攻击队执行过的命令记录?因为我们都知道正常的反弹shell后执行的命令是不会被记录的,那么究竟是如何触发的呢?

pty伪终端竟然会写入.bash_history?

为了找出凭空出现攻击队history的原因,我们又拉取了主机安全的高危命令告警进程树。

[
    {
        "pid": 24846,
        "exe": "/www/server/logs/ns",
        "account": "root:root",
        "cmdline": "./ns -h 192.168.1.1/16 -o 192.txt -d",
        "ssh_service": "10.80.12.42:22",
        "ssh_source": "172.18.164.245:59590",
        "start_time": 1751878635,
        "type": 1
    },
    {
        "pid": 6980,
        "exe": "/usr/bin/bash",
        "account": "root:root",
        "cmdline": "/bin/bash",
        "ssh_service": "10.80.12.42:22",
        "ssh_source": "172.18.164.245:59590",
        "start_time": 1751874803,
        "type": 2
    },
    {
        "pid": 6979,
        "exe": "/usr/bin/python2.7",
        "account": "root:root",
        "cmdline": "python -c import pty; pty.spawn(\"/bin/bash\")",
        "ssh_service": "10.80.12.42:22",
        "ssh_source": "172.18.164.245:59590",
        "start_time": 1751874803,
        "type": 3
    },
    {
        "pid": 6977,
        "exe": "/usr/bin/bash",
        "account": "root:root",
        "cmdline": "/bin/bash",
        "ssh_service": "10.80.12.42:22",
        "ssh_source": "172.18.164.245:59590",
        "start_time": 1751874803,
        "type": 4
    }
]

可以看到执行扫描动作的父父进程竟然是pty.spawn!说明攻击队拿到反弹shell后,通过执行pty.spawn后拿到功能完善的伪终端。在方便渗透的同时,伪终端也继承了父进程root用户的环境变量,将攻击队所有命令执行的记录写入到了.bash_history,即便没有用SSH登录过。

估计攻击队也没有预料到自己所有的命令记录会被写入到history中。

为什么主机安全记录的进程链会有ssh_source?

正常来说,反弹shell和SSH登录没有什么关系,为什么高危命令能够记录到ssh_source?

经过沟通后发现,被攻击的这个漏洞组件并不是通过系统服务systemd拉起的,而是客户SSH登录到服务器后用root用户手动运行的。

所以通过父进程的关联就能拿到初始的父进程是通过SSH执行的。不然很容易被父进程误导,误以为是攻击队是通过SSH登录进来后执行的 python -c import pty; pty.spawn(\"/bin/bash\")

探究:什么情况下pty会把命令记录写入history?

通过守护进程拉起

SSH登录后执行

而本文出现的恰好是第二种情况,其实是否记录还是取决于当前pty继承的环境变量。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

发表评论