昨天课程成绩刚出,助教写了一个查分网站,习惯性随手测了一下,下面来看看我是如何在一小时内干掉它的,主要写写思路给大家揭开一点神秘面纱。

信息收集

目标地址:<ip>:16001
首先这个东西就一个登陆一个查询没什么花里胡哨的东西,连个输入框都没有基本没法搞,越简单的东西越难黑不是没有道理的。验证鉴权就在本地存了一个sessionid也没啥好弄的,所以想直接通过这个站是基本没有搞头的。
所以我们来看看能不能从别处入手,服务器是nginx,版本还很新1.17,没有听说什么0day没法弄,那看看能不能通过其他服务入侵吧。nmap扫一圈下来让我大感意外,一般服务器都是尽量少开端口,他这个却是反其道而行之,各种乱七八糟的东西开了很多,随便找几个访问下,有些是其他站,有些是各种配置界面比如某个服务监控的webui。结合我们的目标地址不是80端口可以猜想这个IP暴露在外面的其实是一个路由网关,各个端口通过映射连到内网的其他机器,这个信息对我们接下来的切入点选择很重要。

Hack

因为懒得去看那么多乱七八糟的服务有啥洞了,那么我们就直接一点吧。既然是路由网关肯定有一个路由界面,虽然有可能外网访问不到但是看它开了这么多端口可能注意不到这一点,这给了我们机会。仔细找了下nmap的输出我们发现了这个端口

<ip>:8443

访问看看,很好,果然是路由管理界面,edge router这个品牌家用不是很常见,可能是企业级的?没玩过。routersploit跑一下,顺便查了查也没啥0day爆出……
不过等回来发现了意外惊喜,虽然没跑出漏洞,但是却发现它却没有修改默认密码(routersploit居然还有这么少见品牌的数据可还行)!默认用户名和密码都是ubnt,登上去看看果然和我们的猜想一致,是一个路由网关,16001端口映射到了内网192.168.2.11:16001,至此我们已经获得了路由管理界面权限。

偷天换日

只有路由管理界面权限没什么用我们也不干什么破坏性的事情,我们最终的目标是之前的那个查分网站,服务很少没有系统级0day很难直接搞定,那么我们就换个思路可以偷天换日替换一下它的映射(这个我们已经有路由管理权限可以做到了),从外面看上去效果其实是一样的。不过很遗憾的是我试了下发现它不支持外网的映射,也就是我们必须获得内网某台服务器的权限才能将这个端口转到我们能控制的地方。这可怎么办?我们本来就是拿不下服务器才来改路由,这不又回到原点了么?
这里需要知道的是,路由器其实也有一个操作系统(一般是linux),只不过可能是MIPS架构的,理论上也是可以连进去的。有兴趣的可以了解一下去年护网杯的一道题就是通过获取D-LINK的root权限拿到用户敏感信息。
既然这样我们要是能连进路由器也是可以的,让它自己跑个web服务然后映射到127.0.0.1就行,SSH一般是22端口,很惊喜的是nmap已经告诉我们它是打开的了,用之前ubnt的用户密码登进去,竟然成功了?行吧。

写个简单的黑页,用自带的python httpserver就能跑起来啦,不过这里有个问题可能是版本太低的原因python的httpserver有bug会导致多访问几次就卡死了,想了想为了不造成破坏还是不升级它了,换成ruby自带的吧。可是这里又有个问题我们并不是root权限装不了东西,不过估计root也没密码,试试

sudo su

成功提权root!然后就简单了装个ruby跑起来,替换下路由映射搞定!

总结

大家可以看到其实黑掉一个网站有一万种方法,正面不行可以从侧面入手,本文的技术难度其实也没多高就是弱密码,关键就是这个从蛛丝马迹推测出网络信息,以此目标明确地找到路由管理界面,再想到路由器也可以作为一台服务器,从而完成攻击的思路。
这和前几天发的某校的那个SQL注入不一样,那个可能需要一些技术,但这次这个弱密码网上虽然资料少但也是能搜到的,换言之你上你也行,但很多时候人们缺少的就是攻击思路,比如你不知道路由器也是有操作系统或者根本就不知道这是一个路由网关,那么攻击也就无从谈起了。

节目效果爆炸,里面图是室友P的感谢2333 :)
img