Tap Lan 实战之“伪装的路由” 2/2

20151230
使用微信扫一扫查看全文干货

0×00 摘要

上次写的 《5毛钱打造自己的”伪装路由“1/2》很多人都说已经有人写了… 其实不管别人写没写,上次的文章是为这次文章做铺垫的,需要有这些知识,而之前有人写过类似的但是没有讲清楚原理,而这篇文章是必须要弄清原理,不然没发继续下面的尝试了。所以这篇文章肯定没有撞文了…

0×01 起因

Web ”汪” 最近老是被坑爹同事调戏,平时回答问题都很敷衍的,结果因为一时的疏忽而把自己给套进去了。事情是这样的: 某天早晨逗比同事跑过来神秘兮兮的跑过来告诉我,说他看到安服的哥们们都开着黑窗口黑黑绿绿的窗口一大片看起来好牛逼。问,他们应该不会被黑吧?即使要黑也很难吧?敷衍了一句:不难! 结果换来了一个鄙视的眼神:“吹牛逼吧你!” 要是能黑掉随便一个安服的人,请你吃一个星期羊肉泡馍! 虽然Web“汪”写了4、5年的破PHP代码,但不带这么鄙视吧。不过想想吃的,本来郁闷而不安的心情顿时一扫而空,为了接下来半年的泡馍我准备把安服一锅端了,嘿嘿…

0×02 分析

其实分析对于做任何事情都很重要的,了解了你的目标你才能清楚的知道你要做什么,要怎么去做。现在我们的目标很明确了,就是旁边整个安服团队了。已经在内网了,那么我们怎么对他们下手呢?arp ? dns欺骗 ? 或者钓鱼?又或者… 其实这些方案基本都被排除了,先不说公司安服人员本身自身安全意识都比较高,其次电脑的各种安全加固防护措施肯定是做了,即使没做也是个别的,而我们的目标是要把整个安服给拿下来。其实常规思路肯定是,拿下他们的头儿,再以他们头儿的“名义”去黑下面的人就简单多了。其实最头疼的不是怎么去拿下目标,而是再过程中不被发现,并且不惊动报警系统。而最大的挑战是公司内网盘路部署的一台APT防御设备,如下图:

这货就是东巽的APT防御设备,据说包含了虚拟执行引擎和内网攻击行为探测功能。其实这台设备的管理后台到是进去看过,确确实实能够对常见的内网扫描工具和arp欺骗行为进行记录,最主要这货还提供报警服务,我这边一开扫描器立马短信报警通知。而自己有没有权限暂时关掉它部分模块的权限所以,最大的难题是怎么绕开它的检测。其实到这里可能大家都会想到一个词 “降维” 如果跟它不再一个维度那么它还怎么去探测,怎么去报警?嘿嘿…

所以这次我们这次就进行实战 Tap Lan, 上一篇文章讲的估计有不少人都不知道这个是做什么用的,其实就是一种比较老的技术“搭线攻击”而它的作用就是对一根网线上的数据进行镜像。好处就是把它接入网络中它既不产生数据也不产生交互所以剩下的就是怎么对它进行伪装处理,让它接入上去后而不被发现。其实就如题目所说的 “路由” ! 这次我们准备制作一个伪装的路由,里面装了特殊的 “芯片” 以达到我们窃取数据的目的。

所需材料:

1. 坏掉的路由(当然如果你是土豪可以忽略)
2. 树莓派一台
3. 杜邦线,活着其他任何可以导通电流的细线缆就行
4. 一节带网线的水晶头
5. 一条micro usb的线
6. 万用表
7. 电烙铁
8. 热熔枪
9. usb转ttl (方便调试树莓派用)
10. …

如下图所示:

注意:其实最主要就是一个路由+一个树莓派,其他都是辅助设备有些可有可无,根据具体情况而定。

0×03 制作过程:

首先我们要对路由动手,我们可以利用路由后面的几个RJ45网口插座来做搭线的接口,先拆开路由后看看里面的东西,拆过的小伙伴基本都知道一般路由里面是啥样子了,如下图:

在这里我们并不需要路由的主板,我们只需要它的RJ45底座,所以我们这里需要把它拆下来,这里其实如果有风枪就好拆了,我这里是用电烙铁一点一点的扣下来的。过程只能说跟跋山涉水的艰苦过程有一拼了。拆下来的后我们就需要对底座进行处理,如下图:

如果看过上一篇我写的打造tap lan 的话你应该知道接下来我要做什么了,如果没有看过请先看下上一篇文章里面tap lan的原理和制作过程,这里我们用电烙铁按照之前文章里面写的方法进行接线处理,不过这里就不需要链接三个RJ45的底座了,其中搭线的地方我们用一根 网线进行搭线链接,这样方便我们另外一头的水晶头直接可以接入树莓派进行处理了。如下图所示:

注意:

从旁路中我们可以镜像所有的流量,这次我们的目标是流量里面的HTTP协议信息,而协议信息里面分为两个一个是请求(REQUEST),另外一个是返回信息(RESPONSE),我们知道每次http请求时候里面都会携带cookie信息(如果有Cookie),做过开发的同学都知道在基于HTTP API中,不管是手机客户端还是第三方PC应用,在http请求时候必然也会携带“会话令牌”不管是cookie里面的sessionID还是手机里面的token信息,都会出现在http请求里面引次我们搭线后只要能够获取request信息就行,经过实验验证搭线搭在目标线缆上面的 (4号线,6号线)上面就能够获取到所有的请求信息。

下来我们线把这个做好的tap lan 链接到网络中查看校验下我们处理的有没有问题,接上树莓派我们直接在里面调试看看能否正常工作,如图所示:

其实看到灯亮了时候基本能够保证至少线是没有问题的,我们在看看接两根线的情况下,网卡你能够获取到的信息有哪些用USB转TTL接入后电脑上用minicom链接登陆树莓派查看网卡信息:

可以看到ip地址是169.xx.xx.xx其实就是没有获取到IP地址,因为只有两根线接入肯定不能获取到正常的ip地址了,可以看到TX上面已经有部 流量了,我们用抓包工具看看,这里用ngrep当然tcpdump也是没有任何问题的,用你顺手的就行,开启抓包程序后,手机上面随便访问下网页开几个 app测试下看看能不能抓到数据包,如下图所示:


可以看到已经可以抓到数据了,那么接下来就是怎么把树莓派装到路由的这个空壳子里面,路由外壳中现在剩下就是一个地需要改造,也是树莓派必须的,“电 源”! 我们找根micro usb的线,把它接到我们拆下来的dc口上面。这里需要注意下电压,默认大多数路由的电压是9V的,如果需要用原装的电源需要给里面在接一个9v转5v 的降压模块,不过我手里刚好有一根DC转USB的线,所以找个常用5v充电器头就可以了。但正负电压可不能接错,大多数情况下红色一般是正极,但为保证不 出错,所以需要用万用表测量下,正负极关系如图所示:

用烙铁按照正负极关系接好后我们再用热熔枪把拆下来的东西粘上去,并且把我们的伪装“芯片”树莓派也放进去看看效果怎么样,让它看起来至少从外面看不出来有啥区别,不让所谓的伪装就没有做到位,如下图所示:

其实装进去后就有点想哭的感觉,树莓派的电源口离壳子边缘太近根本接不上去,这时候也只能把电源线直接焊接上去,不过印象中树莓派的GPIO接口是直接可以接供电电源的,我们去找下GPIO接口看看它的接口结构图:

从图中我们可以看到右上角和右下角刚好有一个5V和接地的接口,通过测试接入后却是可以对树莓派进行供电,这样我们又得把minicor口在拆掉直接接到这两个接口上面,如下图所示:

至此我们的树莓派和路由基本就已经改造完成,全部装机后我们在做最后的测试以保证能够正常的运行:

到这里我们基本上已经全部完成了,但是如果不做处理只是吧所有的数据包保存下来那么估计没多长时间就撑爆了。所以在这里我们再用python撸几行代码对数据包处理下,这里我从数据包中过滤出来后排除js,css,image等信息后把剩下的直接保存在sqlite中,代码如下:

import subprocess as sub
 import time
 import sqlite3
 class SnifferHttp:
     def __init__(self):
         self.filter = [‘.jpg’, ’.png’, ’.gif’, ’.css’, ’.js’, ’.swf’]
         self.lineNum    = 0
         self.httpPakage = []
         self.conn = sqlite3.connect(‘httpData.db’)
         self.cursor = self.conn.cursor()
  createTableSql = ’create table if not exists httpinfo (id INTEGER PRIMARY KEY AUTOINCREMENT, raw_data TEXT, host TEXT, src_ip TEXT, tar_ip TEXT, time TEXT)’
         self.cursor.execute(createTableSql)
         self.conn.commit()
     def savePakage(self):
         isFilter = False
         src_ip  = ’’
         tar_ip  = ’’
         host    = ’’
         rawData = ’’
         now_time = time.strftime(‘%Y-%m-%d %H:%I:%S’)
         for s in self.httpPakage:
             if s.startswith(‘T ’):
                ips = s.split(‘ ’)
                src_ip = ips[1].split(‘:’)[0].strip(‘\n’)
                tar_ip  = ips[3].split(‘:’)[0].strip(‘\n’)
             if s[0:4].lower() == ’host’:
                host = s.split(‘:’)[1].strip(‘\n’)
             if s[0:3].lower() == ’get’:
                q = s.split(‘ ’)[1].lower()
                for f in self.filter:
                    if q.find(f) != -1:
                        isFilter = True
         rawData = ’’.join(self.httpPakage)
         if not isFilter:
      self.cursor.execute(‘‘‘INSERT INTO httpinfo (raw_data, host, src_ip, tar_ip, time) VALUES(?, ?, ?, ?, ?)’’’, (rawData, host, src_ip, tar_ip, now_time))
             self.conn.commit()
         self.httpPakage = []
     def run(self):
         p = sub.Popen([‘ngrep’, ’-q’, ’-W’, ’byline’, ’^(GET|POST).*’], stdout=sub.PIPE)
         for row in iter(p.stdout.readline, b’’):
             if self.lineNum > 2 and row != ’\n’:
                if row != ’.\n’:
                    self.httpPakage.append(row)
                else:
                    try:
                        self.savePakage()
                    except Exception, e:
                        pass
                                
             else:
                self.lineNum += 1
 def main():
     SnifferHttp().run()
 if __name__ == ’__main__’:
     main()

代码写完后,在树莓派中启动项里面加入启动脚本来执行这个就行。每次通电启动后,脚本会主动过滤信息并保存下来。最后趁着下班后没人的时候,把我们这个特殊设备直接接入网络环境中,如图所示:

隔天去杂物室把自己做的特殊设备再拿回来,看看满满的数据信息,嘿嘿….. 某个黑阔的硬盘中小电影不少啊…

0×04 结束语:

其实这里我们得反思一下,如果你们也遇到这样的攻击时候,用什么样的有效方法能够进行检查,活着发现这种攻击呢?欢迎各位看官进行讨论。

带着数据信息和战果给那位坑爹的同事瞅了瞅,结果这货直接又来了一句:你要是能把技术总监黑掉,我请你半年的, 嘿嘿…