2.3 命令执行漏洞
由于之前读过 GoAhead 2.1.8
的源码,所以知道 WebMgr
中定义 cgi
的逻辑为:
先通过 websFormDefine 定义不同的cgi接口要调用的函数,然后再通过 websUrlHandlerDefine 加载 websFormHandler
举个例子:
websFormDefine((int)"FLoidForm", (int)sub_1C918);
websUrlHandlerDefine("/GponForm", 0, 0, &websFormHandler, 0);
这意味着当 url
中的 path
以 /GponForm
开头时,会使用 websFormHandler
去处理,然后 websFormHandler
会寻找通过 websFormDefine()
定义的各种路径,然后调用对应的函数。 在这里,就是访问 /GponForm/FloidForm
时会调用 sub_1C918
完成相关操作。
在 exp
中,通过对 /GponForm/diag_Form
发送请求最终实现了命令执行。根据上文,可以找到 /GponForm/diag_Form
调用了函数 sub_1A390
,结合 system()
的调用流程,我们可以知道 sub_1A390
调用了 sub_1A684
,最终通过 system()
执行命令。