0x00前言本文从渗透的角度总结了几种常用的内网渗透和内网代理工具,并介绍了它们的简单原理和使用方法。0x01nps-npc1.1简介nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可以支持任意tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面、内网dns解析等...),还支持内网http代理、内网socks5代理、p2p等,并拥有强大的web管理终端。有公网IP的服务器(vps)运行服务器(NPS),一台或多台运行于内网的服务器或一台PC运行客户端(NPC)1.2特点Go语言编程支持跨平台代理web,支持多个protocols管理终端1.3如何使用https://github.com/ehang-io/nps/releasesNPS安装配置找到你服务器对应版本的服务器:cd~wgethttps://github.com/cnlh/nps/发布/下载/v0.23.2/linux_amd64_server.tar.gztarxzvflinux_amd64_server.tar.gzcd~/npsnps目录下会有nps可执行文件、conf配置目录和网页目录。我们只需要修改conf/nps.conf:vimconf/nps。conf需要修改#web下的几个参数,web_host=服务器IP或域名web_username=admin(登录用户名)web_password=你的密码web_port=8080(web管理端口)修改#bridge,改变NPC的连接端口。比如我们拿到一个限制权限的服务器,有防火墙,可能只有部分端口(80、443)可以出网,所以我们需要修改才能出网。##bridgebridge_type=tcpbridge_port=443#修改连接端口bridge_ip=0.0.0.0start#Mac/Linux./npstest|start|stop|restart|status测试配置文件|start|stop|restart|status#Windowsnps.exetest|start|stop|restart|status测试配置文件|start|stop|restart|statusNPC./npc-server=你的IP:8024-vkey=唯一验证password-type=tcp创建新客户端后,也可以在+查看看,详细的客户端连接命令:web管理端可以通过一种新的方法在客户端界面添加客户端连接,每个连接的vkey是唯一区分的。每个客户端在建立连接后,可以建立多条不同协议的隧道,每条隧道都是不同的代理。代理的内网机器可以通过不同的协议和端口连接。0x02frp2.1简介frp是一款专注于内网穿透的高性能反向代理应用,支持TCP、UDP、HTTP、HTTPS等协议。通过具有公网IP的节点中转,可以将内网业务安全便捷的暴露在公网中。2.2特点客户端与服务器端的通信支持TCP、KCP、Websocket等多种协议。端口复用,多个服务通过同一个服务器端口暴露。跨平台,但支持的插件种类比nps少一些,功能也多。通过rdp访问本机,修改frps.ini文件。为了安全起见,最好在这里配置认证。如果服务端和客户端公共配置中的token参数相同,则认证通过:#frps.ini[common]bind_port=7000#用于身份验证,请自行修改,确保服务端和client一致对于x.x.x.x:#frpc.ini[common]server_addr=x.x.x.xserver_port=7000#用于身份验证,请自行修改,并保证server和client一致token=abcdefgh[rdp]type=tcplocal_ip=127.0.0.1local_port=3389remote_port=6000启动frpc:./frpc-c./frpc.ini通过rdp访问远程机器,地址为:x.x.x.x:6000开机自启动对于Windows系统,为了方便使用,您可以将其配置为在启动时静默启动。在frpc.exe同级目录下创建一个start_frpc.vbs:'start_frpc.vbs'请根据实际情况修改路径CreateObject("WScript.Shell").Run"""D:\ProgramFiles\frp_windows_amd64\frpc。exe"""&"-c"&"""D:\ProgramFiles\frp_windows_amd64\frpc.ini""",0复制start_frpc.vbs文件,打开如下目录,注意把改成你的用户名称:C:\右键单击??Users\\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup并将其粘贴为快捷方式。2、通过SSH访问公司内网机器frps的部署步骤同上。启动frpc,配置如下:#frpc.ini[common]server_addr=x.x.x.xserver_port=7000#用于身份验证,请自行修改,并保证服务端和客户端一致token=abcdefgh[ssh]type=tcplocal_ip=127.0.0.1local_port=22remote_port=6000通过SSH访问内网机器,假设用户名为test:ssh-oPort=6000test@x.x.x.x3。通过自定义域名访问内网部署的Web服务有时候希望别人通过域名访问或者测试我们在本地搭建的Web服务,但是由于本机没有公网IP,域名无法访问被解析到本地机器。这个功能可以通过frp来实现。下面以http服务为例,https服务的配置方法相同。替换vhost_http_port为vhost_https_port,type可以设置为https。修改frps.ini文件,设置http访问端口为8080:#frps.ini[common]bind_port=7000vhost_http_port=8080#用于身份验证,请自行修改,保证服务端和客户端token一致=abcdefgh启动frps:./frps-c./frps.ini修改frpc.ini文件,假设frps所在服务器IP为x.x.x.x,local_port为本机web服务对应的端口,并绑定自定义域名www.yourdomain.com:#frpc。ini[common]server_addr=x.x.x.xserver_port=7000#用于身份验证,请自行修改,并保证服务端和客户端一致token=abcdefgh[web]type=httplocal_port=80custom_domains=www.yourdomain.com启动frpc:./frpc-c./frpc.ini将www.yourdomain.com的域名A记录解析为IPx.x.x.x。如果服务器已有对应的域名,也可以将CNAME记录解析为服务器的原域名。通过浏览器访问http://www.yourdomain.com:8080,访问内网机器上的Web服务。4、对外提供简单的文件访问服务通过static_file插件,可以对外提供简单的基于HTTP的文件访问服务。frps的部署步骤同上。启动frpc,启用static_file插件,配置如下:#frpc.ini[common]server_addr=x.x.x.xserver_port=7000#用于身份验证,请自行修改,并确保服务端和客户端是consistenttoken=abcdefgh[test_static_file]type=tcpremote_port=6000plugin=static_file#要对外暴露的文件目录plugin_local_path=/tmp/file#访问URL中要去掉的前缀,保留内容为文件路径待访问plugin_strip_prefix=staticplugin_http_user=abcplugin_http_passwd=abc通过浏览器访问http://x.x.x.x:6000/static/查看位于/tmp/file目录下的文件,会要求输入已经设置的用户名和密码.2.4常用功能1.统计面板(Dashboard)通过浏览器查看frp的状态和代理统计的展示。注意:仪表板尚未针对显示大量代理数据进行优化。如果Dashboard访问速度慢,请不要启用此功能。开启此功能需要在frps.ini中指定dashboard服务使用的端口:[common]dashboard_port=7500#dashboard用户名密码,默认为admindashboard_user=admindashboard_pwd=admin通过http://[server_addr打开浏览器]:7500访问dashboard界面,默认用户名和密码都是admin。2、加密和压缩这两个功能默认是不开启的。您需要通过frpc.ini中的配置为指定的agent开启加密和压缩功能。压缩算法使用snappy:#frpc.ini[ssh]type=tcplocal_port=22remote_port=6000use_encryption=trueuse_compression=truev如果公司内网防火墙已经识别并阻止流量访问外网,比如禁止SSH协议等,通过设置use_encryption=true,frpc和frps之间的通信内容将被加密传输。有效防止流量被拦截。如果传输的消息长度较长,通过设置use_compression=true对传输内容进行压缩,可以有效减少frpc和frps之间的网络流量,加快流量转发,但会额外消耗一些CPU资源。从v0.25.0版本开始,TLS支持frpc和frps之间通过TLS协议进行加密传输。通过在frpc.ini中common配置tls_enable=true开启该功能,更加安全。对于端口复用,建立TLS连接的frp的第一个字节是0x17。注意:开启此功能后,除xtcp外,其他use_encryption都不需要设置。3、代理限速目前支持在客户端的代理配置中设置代理级限速,限制单个代理可以占用的带宽。#frpc.ini[ssh]type=tcplocal_port=22remote_port=6000bandwidth_limit=1MB在proxy配置中添加bandwidth_limit字段开启该功能,目前只支持MB和KB单位。4.范围端口映射可以在frpc配置文件中指定映射多个端口,目前只支持tcp和udp类型。这个功能是通过range:段落标签来实现的。客户端会解析这个标签中的配置,拆分成多个代理。每个代理都以数字作为后缀命名。例如映射6个本地端口6000-6005、6007,主要配置如下:#frpc.ini[range:test_tcp]type=tcplocal_ip=127.0.0.1local_port=6000-6006,6007remote_port=6000-6006,6007实际连接成功之后会创建8个proxy,分别命名为test_tcp_0、test_tcp_1...test_tcp_7。0x03ew3.1简介EW是一套便携的网络渗透工具,具有SOCKSv5服务架设和端口转发两大核心功能,可用于复杂的网络环境,完成网络渗透。但是,该工具不再更新。..3.2特点轻量级,C语言编写,可设置多级代理跨平台但只支持Socks5代理端口均为1080,服务均为SOCKSv5代理服务。该工具有6种命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)。1.转发到SOCKSv5服务器$./ew-sssocksd-l10802。重新启动SOCKSv5服务器的操作分为两步:a)首先在一台有公网ip的主机A上运行如下命令:$./ew-srcsocks-l1080-e8888b)在target上启动SOCKSv5服务主机B,成功反弹到公网主机$./ew-srssocks-d1.1.1.1-e8888的8888端口。3、多级级联工具中包含的三个端口转发命令,其参数格式为:$./ew-slcx_listen-l1080-e8888$./ew-slcx_tran-l1080-f2.2.2.3-g9999$./ew-slcx_slave-d1.1.1.1-e8888-f2.2.2.3-g9999通过这些端口转发指令,可以将网络深层基于TCP的服务转发到根,比如SOCKSv5。先提供两个“二级级联”本地SOCKS测试样例:a)lcx_tran的用法$./ew-sssocksd-l9999$./ew-slcx_tran-l1080-f127.0.0.1-g9999b)lcx_listen、lcx_slave的用法$./ew-slcx_listen-l1080-e8888$./ew-sssocksd-l9999$./ew-slcx_slave-d127.0.0.1-e8888-f127.0.0.1-g9999提供“三级级联”本地SOCKS测试用例参考$./ew-srcsocks-l1080-e8888$./ew-slcx_slave-d127.0.0.1-e8888-f127.0.0.1-g9999$./ew-slcx_listen-l9999-e7777$./ew-srssocks-d127.0.0.1-e7777数据流向:SOCKSv5->1080->8888->9999->7777->rssocks0x04ngrok4.1简介ngrok是一个反向代理,通过publicendpoint和之间建立安全通道本地运行Web服务器,使内部主机的服务可以暴露在外部网络中。ngrok可以抓取和分析所有通道的流量,供后期分析和回放,因此ngrok可以轻松辅助服务器程序测试。4.2特点官方维护,一般比较稳定和跨平台,闭源,有流量记录和重发功能4.3使用方法进入ngrok官网(https://ngrok.com/),注册一个ngrok账号,下载ngrok;根据官网代码给出的授权,运行如下授权命令;./ngrokauthtoken1hAotxhmORtzCYvUc3BsxDBPh1H_*********************./ngrokhttp80可以把本机80端口的http服务暴露给公网,并且公网域名会提供。可以通过官网的UI界面查看数据包和流量(但是要付费==,)也可以使用一些命令将内网的文件和其他TCP服务暴露到公网。授权设置文件共享ngrokhttp-auth="user:password"file:///Users/alan/share未授权设置文件共享ngrokhttp"file:///C:\Users\alan\PublicFolder"将host的3389的TCP端口暴露在公网的ngroktcp3389更多使用方法参考:https://ngrok.com/docs0xFF参考链接内网渗透内网渗透-https://xz.aliyun.com/t/7701开源内网渗透工具frp简单教程-https://segmentfault.com/a/1190000021876836http://rootkiter.com/EarthWorm/