0x00 开篇
端口复竽暌姑一向是木马病毒常用的手段,在我们进行安然测试时,有时也是须要端口复竽暌姑的。
端口复竽暌姑的一般前提有如下一些:
- 办事器只对外开放某一端口(80端口或其他随便率性少量端口),其他端口全部被封逝世
- 为了躲避防火墙
- 隐蔽本身后门
- 转发不出端口
- 内网渗入渗出(如:当当前办事器处于内网之中,内网IP为10.10.10.10开放终端登录端口但并纰谬外网开放,经由过程外网IP:111.111.111.111进行端口映射并只开放80端口,经由过程端口复竽暌姑,直连内网)。
综上,所认为了实现我们的各类小目标,端口复竽暌姑技巧,照样有那么点须要。
本文重要以Windows体系端口复竽暌姑为主,Linux的端口复竽暌姑相对于Windows简单和轻易实现,不做评论辩论。
0x01 端口复竽暌姑要点
端口复竽暌姑,不克不及用一般的 socket 套接字直接监听,如许会导致法度榜样自身无法运行,或者相干占用端口办事无法运行,所以,办法临时只有在本地做些四肢举动。
第一种,端口复竽暌姑重定向
例:在本地建立两个套接字 sock1 、 scok2 , scok1 监听80端口,当有连接来到时, Sock2 连接重定向端口,将 Sock1 接收到的数据加以断定并经由过程 Sock2 转发。如许就能经由过程拜访目标机80端口来连接重定向端口了。
在端口复竽暌姑技巧中最重要的一个函数是 setsockopt() ,这个函数就决定了端口的重绑定问题。
实验解释:本文实验均在理论实验中,所有办事中心件均在体系应用层运行。
第二种,端口复竽暌姑
例:在本地建立一个监听和本地开放一样的端口如80端口,当有连接来到时,断定是否是本身的数据包,如不雅是则处理数据,不然不处理,交给源法度榜样。
端口复竽暌姑其实没有大年夜家想象的那么神秘和复杂,个中端口重定向只是应用了本地环回地址127.0.0.1转发接收外来数据,端口复竽暌姑只是应用了 socket 的相干特点,仅此罢了。
TCP的端口复竽暌姑就一段代码实现,如下
- s = socket(AF_INET,SOCK_STREAM,0);
- setsockopt(s,SOL_SOCKET,SO_REUSEADDR,&buf,1));
- server.sin_family=AF_INET;
- server.sin_port=htons(80);
- server.sin_addr.s_addr=htonl(“127.0.0.1”);
百度百科的解释: setsockopt() 函数,用于随便率性类型、随便率性状况套接口的设制揭捉?项值。尽管在不合协定层上存在选项,但本函数决定义了最高的“套接口”层次上的选项。
在缺省前提下,一个套接口不克不及与一个已在应用中的本地地址绑缚(bind()))。但有时会须要“重用”地址。因为每一个连接都由本地地址和远端地址的组合独一肯定,所以只要远端地址不合,两个套接口与一个地址绑缚并无大年夜碍。为了通知套接话柄现不要因为一个地址已被一个套接口应用就不让它与另一个套接口绑缚,应用法度榜样可在 bind() 调用前先设置 SO_REUSEADDR 选项。请留意仅在 bind() 调用时钙揭捉?项才被解释;故此无需(但也无害)将一个不会共用地址的套接口设置钙揭捉?项,或者在 bind() 对这个或其他套接口无影响情况下设置或清除这一选项。
SO_REUSEADDR 供给如下四个功能:
- SO_REUSEADDR:许可启动一个监听办事器并绑缚其众所周知端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在。这平日是重启监听办事器时出现,若不设置此选项,则bind时将掉足。
- SO_REUSEADDR:许可在同一端口上启动同一办事器的多个实例,只要每个实例绑缚一个不合的本地IP地址即可。对于TCP,我们根本弗成能启动绑缚雷同IP地址和雷同端标语的多个办事器。
- SO_REUSEADDR:许可单个过程绑缚同一端口到多个套接口上,只要每个绑缚指定不合的本地IP地址即可。这一般不消于TCP办事器。
- SO_REUSEADDR:许可完全反复的绑缚:当一个IP地址和端口绑定到某个套接口上时,还许可此IP地址和端口绑缚到另一个套接口上。一般来说,这个特点仅在支撑多播的体系上才有,并且只对UDP套接口而言(TCP不支撑多播)。
一般地,我们须要设置 socket 为非浊宣模式,启事如不雅我们是浊宣模式,有可能会导致原有占用端口办事无法应用或自身法度榜样无法应用,由此可见,端口复竽暌姑应用非浊宣模式是比较保险的。
我们用python代码解释,如下:
然而理论事实是须要考验的,当有些端口设置非浊宣时,启事它的数据传输持续性,可能会导致数据接收异常或者无法接收到数据情况,非浊宣对于短暂型连接影响不大年夜,但对持久性连接可能会有影响,比如3389端口的转发复竽暌姑,所以应用非浊宣须要视端口情况而定。
起首外部 IP(192.168.2.1) 连接本地 IP(192.168.1.1) 的 80 端口,因为本地 IP(192.168.1.1) 端口复竽暌姑绑定了 80 端口,所以复竽暌姑绑定端口监听到了外部 IP(192.168.2.1) 地址流量,断定是否为HTTP流量,如不雅是则发送回本地 80 端口,不然本地 IP(192.168.1.1) 地址连接本地 ip(127.0.0.1) 的 3389 端口,大年夜本地 IP(127.0.0.1) 端口 3389 获取到的流量由本地 IP(192.168.1.1) 地址发送到外部 IP(192.168.2.1) 地址上,这个过程就完成了全部端口复竽暌姑重定向。
推荐阅读
Netcraft 10月Web服务器排名:Nginx首超微软排第二
Netcraft 宣布了2017年10月 Web 办事器查询拜访申报,本月 Netcraft一共统计了1,815,237,491 个站点和 6,886,362 台收集计算机,排名前三的依然是 Microsoft、Apache 和 nginx 。在 10 月>>>详细阅读
本文标题:聊聊端口复用的实现和坑点
地址:http://www.17bianji.com/lsqh/38630.html
1/2 1