【智能设备-针对固件中http程序的url接口与处理函数的关系,以及授权配置相关问题的分析】此文章归类为:智能设备。
针对固件中http程序的url接口与处理函数的关系,以及授权配置相关问题的分析
在固件分析http中,常常遇到以下问题,比如url接口和对应的处理函数怎么配对的?有时候缺失了符号表看不到ida函数名阻碍了逆向分析。还有页面的接口如何配置权限,怎么挖到未授权漏洞?
本文以dlink某款设备的jhttpd程序为例,分析以上问题
jhttpd放ida里打开后,看到在main函数中,做了一系列初始化init,初始化部分先不深入,其中关注到httpd_poll这个函数,根据linux网络编程的知识,判断这里很可能是创建poll模型服务器,处理客户端连接和通信
进入其中,看到poll函数,accept函数,确认判断没错。这一部分是通过 accept 接受新的客户端连接,并将其加入到连接管理中。

这一部分是根据连接状态调用不同的处理函数,其中重点关注到httpd_do_recv中,可以通过函数名猜测这是处理客户端请求的

跟进后,看到其中对内容做了get和post的匹配

这里跟进进入httpd_dowith_get函数,应该是处理get请求的

最后到了httpd_send_file函数中的这部分(在此之前还有几层调用,贴出来意义不大先忽略了),v17这里是通过httpd_find_ext_file等函数返回出来的,经过动调可以确认是url对应的处理函数的指针,那么猜测这里大概率是通过url接口名从哈希表中获取的函数指针

httpd_find_ext_file函数内容如下,可以确认判断没错,确实有一张哈希表gl_vfile_ext_hash,里面应该有存储函数指针。同时,这张表是在bss段的,说明是在程序初始化后填数据进去的的。这里去找这张哈希表的调用


通过层层回溯,确认了这样一条调用链,main --> mem_init_fun --> httpd_file_ext_init --> httpd_file_ext_add,查看其中内容,可以确认这里是初始化函数名和接口名在哈希表中
其中httpd_file_ext_init函数这里有个名称很醒目的全局变量httpd_cgi_all_fun

更多【智能设备-针对固件中http程序的url接口与处理函数的关系,以及授权配置相关问题的分析】相关视频教程:www.yxfzedu.com