麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 網(wǎng)管 > 路由交換 > 正文

如何反編譯D-Link路由器固件程序并發(fā)現(xiàn)它的后門

2020-02-09 23:50:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

OK,又是周末晚上,沒(méi)有約會(huì),只有一大瓶Shasta汽水和全是快節(jié)奏的音樂(lè)…那就研究一下程序吧。

一時(shí)興起,我下載了D-link無(wú)線路由器(型號(hào):DIR-100 revA)的固件程序 v1.13。使用工具Binwalk,很快的就從中發(fā)現(xiàn)并提取出一個(gè)只讀SquashFS文件系統(tǒng),沒(méi)用多大功夫我就將這個(gè)固件程序的web server(/bin/webs)加載到了IDA中:

Strings inside /bin/webs

/bin/webs中的字符信息

基于上面的字符信息可以看出,這個(gè)/bin/webs二進(jìn)制程序是一個(gè)修改版的thttpd,提供路由器管理員界面操作功能。看起來(lái)是經(jīng)過(guò)了臺(tái)灣明泰科技(D-Link的一個(gè)子公司)的修改。他們甚至很有心計(jì)的將他們很多自定義的函數(shù)名都輔以“alpha”前綴:

Alphanetworks' custom functions

明泰科技的自定義函數(shù)

這個(gè)alpha_auth_check函數(shù)看起來(lái)很有意思!

這個(gè)函數(shù)被很多地方調(diào)用,最明顯的一個(gè)是來(lái)自alpha_httpd_parse_request函數(shù):

Function call to alpha_auth_check

調(diào)用alpha_auth_check函數(shù)

我們可以看到alpha_auth_check函數(shù)接收一個(gè)參數(shù)(是存放在寄存器$s2里);如果alpha_auth_check返回-1(0xFFFFFFFF),程序?qū)?huì)跳到alpha_httpd_parse_request的結(jié)尾處,否則,它將繼續(xù)處理請(qǐng)求。

寄存器$s2在被alpha_auth_check函數(shù)使用前的一些操作代碼顯示,它是一個(gè)指向一個(gè)數(shù)據(jù)結(jié)構(gòu)體的指針,里面有一個(gè)char*指針,會(huì)指向從HTTP請(qǐng)求里接收到的各種數(shù)據(jù);比如HTTP頭信息和請(qǐng)求地址URL:

$s2 is a pointer to a data structure

$s2是一個(gè)指向一個(gè)數(shù)據(jù)結(jié)構(gòu)體的指針

我們現(xiàn)在可以模擬出alpha_auth_check函數(shù)和數(shù)據(jù)結(jié)構(gòu)體的大概樣子:

struct http_request_t{ char unknown[0xB8]; char *url; // At offset 0xB8 into the data structure};int alpha_auth_check(struct http_request_t *request);

alpha_auth_check本身是一個(gè)非常簡(jiǎn)單的函數(shù)。它會(huì)針對(duì)http_request_t結(jié)構(gòu)體里的一些指針進(jìn)行字符串strcmp比較操作,然后調(diào)用check_login函數(shù),實(shí)際上就是身份驗(yàn)證檢查。如果一旦有字符串比較成功或check_login成功,它會(huì)返回1;否者,它會(huì)重定向?yàn)g覽器到登錄頁(yè),返回-1;

alpha_auth_check code snippet

alpha_auth_check函數(shù)代碼片段

這些字符串比較過(guò)程看起來(lái)非常有趣。它們提取請(qǐng)求的URL地址(在http_request_t數(shù)據(jù)結(jié)構(gòu)體的偏移量0xB8處),檢查它們是否含有字符串“graphic/” 或 “public/”。這些都是位于路由器的Web目錄下的公開子目錄,如果請(qǐng)求地址包含這樣的字符串,這些請(qǐng)求就可以不經(jīng)身份認(rèn)證就能執(zhí)行。

然而,這最后一個(gè)strcmp卻是相當(dāng)?shù)奈矍颍?/P>

An interesting string comparison in alpha_auth_check

alpha_auth_check函數(shù)中一個(gè)非常有趣的字符串比較

這個(gè)操作是將http_request_t結(jié)構(gòu)體中偏移量0xD0的字符串指針和字符串“xmlset_roodkcableoj28840ybtide”比較,如果字符匹配,就會(huì)跳過(guò)check_login函數(shù),alpha_auth_check操作返回1(認(rèn)證通過(guò))。

我在谷歌上搜索了一下“xmlset_roodkcableoj28840ybtide”字符串,只發(fā)現(xiàn)在一個(gè)俄羅斯論壇里提到過(guò)它,說(shuō)這是一個(gè)在/bin/webs里一個(gè)“非常有趣”的一行。我非常同意。

那么,這個(gè)神秘的字符串究竟是和什么東西進(jìn)行比較?如果回顧一下調(diào)用路徑,我們會(huì)發(fā)現(xiàn)http_request_t結(jié)構(gòu)體被傳進(jìn)了好幾個(gè)函數(shù):

call_graph

事實(shí)證明,http_request_t結(jié)構(gòu)體中處在偏移量 0xD0處的指針是由httpd_parse_request函數(shù)賦值的:

Checks for the User-Agent HTTP header

檢查HTTP頭信息中的User-Agent值

Populates http_request_t + 0xD0 with a pointer to the User-Agent header string

將http_request_t + 0xD0指針指向頭信息User-Agent字符串

這代碼實(shí)際上就是:

if(strstr(header, "User-Agent:") != NULL){ http_request_t->0xD0 = header + strlen("User-Agent:") + strspn(header, " /t");}

知道了http_request_t偏移量0xD0處的指針指向User-Agent頭信息,我們可以推測(cè)出alpha_auth_check函數(shù)的結(jié)構(gòu):

#define AUTH_OK 1#define AUTH_FAIL -1int alpha_auth_check(struct http_request_t *request){ if(strstr(request->url, "graphic/") || strstr(request->url, "public/") || strcmp(request->user_agent, "xmlset_roodkcableoj28840ybtide") == 0) { return AUTH_OK; } else { // These arguments are probably user/pass or session info if(check_login(request->0xC, request->0xE0) != 0) { return AUTH_OK; } } return AUTH_FAIL;}

換句話說(shuō),如果瀏覽器的User-Agent值是 “xmlset_roodkcableoj28840ybtide”(不帶引號(hào)),你就可以不經(jīng)任何認(rèn)證而能訪問(wèn)web控制界面,能夠查看/修改路由器的 設(shè)置(下面是D-Link路由器(DI-524UP)的截圖,我沒(méi)有 DIR-100型號(hào)的,但DI-524UP型號(hào)使用的是相同的固件):

Accessing the admin page of a DI-524UP

訪問(wèn)型號(hào)DI-524UP路由器的主界面

基于HTML頁(yè)上的源代碼信息和Shodan搜索結(jié)果,差不多可以得出這樣的結(jié)論:下面的這些型號(hào)的D-Link路由器將會(huì)受到影響:

  • DIR-100
  • DI-524
  • DI-524UP
  • DI-604S
  • DI-604UP
  • DI-604+
  • TM-G5240

除此之外,幾款Planex路由器顯然也是用的同樣的固件程序:

  • BRL-04UR
  • BRL-04CW

你很酷呀,D-Link。

腳注:萬(wàn) 能的網(wǎng)友指出,字符串“xmlset_roodkcableoj28840ybtide”是一個(gè)倒序文,反過(guò)來(lái)讀就是 “editby04882joelbackdoor_teslmx”――edit by 04882joel backdoor _teslmx,這個(gè)后門的作者真是位天才!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 超碰97最新 | 欧美成人se01短视频在线看 | 日本精品视频一区二区三区四区 | 午夜视频亚洲 | 5xx免费看 | 国产亚洲精品yxsp | 热99精品视频 | 性少妇freeseⅹbbwhd | 欧美一级美国一级 | 中韩毛片| 久久狠狠高潮亚洲精品 | 国产午夜精品在线 | 日本一道aⅴ不卡免费播放 视屏一区 | 99热1| 久久av免费观看 | 91看片成人 | 在线视频观看国产 | 激情网站免费观看 | 精品一区视频 | 久久草在线视频免费 | 国产精品久久久久久久四虎电影 | 国产男女爽爽爽爽爽免费视频 | 久久久久久久九九九九 | 91av爱爱| 日韩中文字幕一区二区三区 | 免费观看一区 | 一级一级一级毛片 | 亚洲免费资源 | 久久综合久久精品 | www日韩在线| 一区二区三区欧美在线 | 免费a级作爱片免费观看欧洲 | 久久久久国产成人免费精品免费 | 欧美囗交 | 久久精品在这里 | 国产亚洲高清视频 | 精品久久久久久久久久久aⅴ | 91精品国产91 | 最新中文字幕免费视频 | 有色视频在线观看 | 欧美成人理论片乱 |