type
status
date
slug
summary
tags
category
icon
password
程序分析
这个固件是用的luci框架编写的,其中
/etc/config/luci通常是luci框架的配置文件,/usr/lib/lua/luci 通常是 LuCI 框架的核心文件所在的目录
Luci采用的是MVC的Web框架,即Model、View、Controller。
这里我们最先做的事找到无鉴权的API接口
显然,此类固件的
cgi部分是用Lua所写的。我们既然想要挖未授权的漏洞,那么首先就要找到无鉴权的API接口,定位到/usr/lib/lua/luci/controller/eweb/api.lua文件。可以看到,只有对
/cgi-bin/luci/api/auth发送请求的时候,不需要权限验证:在 LuCI 的控制器中注册一个路由条目(entry),让
URL 路径/api/auth对应执行rpc_auth函数。同时设置sysauth = false表示这个接口不需要用户登录认证(即“免登录访问”,不需要认证,可以匿名访问)。这意味着当用户访问
/api/auth 路径时,将调用 rpc_auth 函数。在 luci 框架中 sysauth 属性控制是否需要系统级的用户认证才能访问该路由,这里的 sysauth 属性为 false ,表示无需进行系统认证即可访问。
这个就是我们要找的无鉴权的api接口,之后我们看这个接口的具体作用
这个接口调用
rpc_auth函数这里首先引入4个模块,这几个模块其实都是对应的不同文件,
jsonrpc:用于处理 JSON-RPC 请求。
http:用于处理 HTTP 请求和响应。
ltn12:用于处理数据流。
_tbl:假设是一个包含无认证功能的模块(noauth),用于处理实际的 JSON-RPC 方法。
然后获取
HTTP_CONTENT_LENGTH 的长度是否大于 1000 字节,如果不大于的话会将准备 HTTP 响应的类型设置为 application/json之后重点看
这里用
/usr/lib/lua/luci/utils/jsonrpc.lua中的handle及其相关函数,可以得知这里通过JSON数据的method字段定位并调用noauth.lua中对应的函数,同时将Json数据的params字段内容作为参数传入。- 作者:wgiegie
- 链接:https://tangly1024.com/article/2993ecc9-5160-807e-97ee-e606d18305dc
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。