一時髦起,我下載了D-link無線路由器(型號:DIR-100 revA)的固件法度v1.13。利用東西Binwalk,很快的就從中發(fā)現(xiàn)并提掏出一個只讀SquashFS文件系統(tǒng),沒用多大年夜工夫我就將這個固件法度的web server (/bin/webs)加載到了IDA中:

/bin/webs中的字符信息
基于上面的字符信息可以看出,這個/bin/webs二進(jìn)制法度是一個點(diǎn)竄版的thttpd,供給路由器治理員界面把持功能。看起來是顛末端臺灣明泰科技(D-Link的一個子公司)的點(diǎn)竄。他們乃至很有心計的將他們良多自定義的函數(shù)名都輔以“alpha”前綴:

明泰科技的自定義函數(shù)
這個alpha_auth_check函數(shù)看起來很成心思!
這個函數(shù)被良多處所調(diào)用,最較著的一個是來自alpha_httpd_parse_request函數(shù):

調(diào)用alpha_auth_check函數(shù)
我們可以看到alpha_auth_check函數(shù)領(lǐng)受一個參數(shù)(是存放在存放器$s2里);假定alpha_auth_check返回-1(0xFFFFFFFF),法度將會跳到alpha_httpd_parse_request的結(jié)尾處,不然,它將繼續(xù)措置要求。
存放器$s2在被alpha_auth_check函數(shù)利用前的一些把持代碼顯示,它是一個指向一個數(shù)據(jù)布局體的指針,里面有一個char*指針,會指向從HTTP要求里領(lǐng)遭到的各類數(shù)據(jù);好比HTTP頭信息和要求地址URL:

$s2是一個指向一個數(shù)據(jù)布局體的指針
我們此刻可以摹擬出alpha_auth_check函數(shù)和數(shù)據(jù)布局體的大年夜概模樣:

alpha_auth_check本身是一個很是簡單的函數(shù)。它會針對http_request_t布局體里的一些指針進(jìn)行字符串strcmp比較把持,然后調(diào)用check_login函數(shù),實(shí)際上就是身份驗(yàn)證查抄。假定一旦有字符串比較成功或check_login成功,它會返回1;否者,它會重定向?yàn)g覽器到登錄頁,返回-1;

alpha_auth_check函數(shù)代碼片段
這些字符串比較過程看起來很是有趣。它們提取要求的URL地址(在http_request_t數(shù)據(jù)布局體的偏移量0xB8處),查抄它們是不是含有字符串“graphic/”或“public/”。這些都是位于路由器的Web目次下的公開子目次,假定要求地址包含如許的字符串,這些要求便可以不經(jīng)身份認(rèn)證就可以履行。
但是,這最后一個strcmp倒是相當(dāng)?shù)奈矍颍?/P>

alpha_auth_check函數(shù)中一個很是有趣的字符串比較
這個把持是將http_request_t布局體中偏移量0xD0的字符串指針和字符串“xmlset_roodkcableoj28840ybtide”比較,假定字符匹配,就會跳過check_login函數(shù),alpha_auth_check把持返回1(認(rèn)證經(jīng)由過程)。
我在谷歌上搜刮了一下“xmlset_roodkcableoj28840ybtide”字符串,只發(fā)此刻一個俄羅斯論壇里提到過它,說這是一個在/bin/webs里一個“很是有趣”的一行。我很是同意。
那么,這個神秘的字符串事實(shí)是和甚么東西進(jìn)行比較?假定回顧一下調(diào)用路徑,我們會發(fā)現(xiàn)http_request_t布局體被傳進(jìn)了好幾個函數(shù):

事實(shí)證實(shí),http_request_t布局體中處在偏移量0xD0處的指針是由httpd_parse_request函數(shù)賦值的:

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

將http_request_t + 0xD0指針指向頭信息User-Agent字符串
這代碼實(shí)際上就是:

知道了http_request_t偏移量0xD0處的指針指向User-Agent頭信息,我們可以猜測出alpha_auth_check函數(shù)的布局:

換句話說,假定瀏覽器的User-Agent值是“xmlset_roodkcableoj28840ybtide”(不帶引號),你便可以不經(jīng)任何認(rèn)證而能拜候web節(jié)制界面,可以或許查看/點(diǎn)竄路由器的設(shè)置(下面是D-Link路由器(DI-524UP)的截圖,我沒有DIR-100型號的,但DI-524UP型號利用的是不異的固件):

拜候型號DI-524UP路由器的主界面
基于HTML頁上的源代碼信息和Shodan搜刮成果,差不多可以得出如許的結(jié)論:下面的這些型號的D-Link路由器將會遭到影響:
• DIR-100
• DI-524
• DI-524UP
• DI-604S
• DI-604UP
• DI-604+
• TM-G5240
除此以外,幾款Planex路由器明顯也是用的一樣的固件法度:
• BRL-04UR
• BRL-04CW
你很酷呀,D-Link。
腳注:全能的網(wǎng)友指出,字符串“xmlset_roodkcableoj28840ybtide”是一個倒序文,反過來讀就是“editby04882joelbackdoor_teslmx”——edit by 04882joel backdoor _teslmx,這個后門的作者真是位天才!