新聞中心
在前面的內(nèi)容中,我們使用TEW-654TR路由器的tftp服務實現(xiàn)了獲取目標的管理權限。但是要是tftp沒有開放到外網(wǎng)怎么辦?另尋他徑:在這一篇中會我們來分析一個web應用上的漏洞。

創(chuàng)新互聯(lián)公司是專業(yè)的寧城網(wǎng)站建設公司,寧城接單;提供成都網(wǎng)站建設、做網(wǎng)站,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行寧城網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
初步分析
使用代理軟件抓登錄時候的數(shù)據(jù)包,可以看到發(fā)送的http請求如上圖所示。數(shù)據(jù)發(fā)送給了my_cgi.cgi這個腳本。我們分析一下這個文件看看。
rootfs git:(master) find . -name my_cgi.cgi ./usr/bin/my_cgi.cgi rootfs git:(master) file ./usr/bin/my_cgi.cgi ./usr/bin/my_cgi.cgi: ELF 32-bit LSB executable, MIPS, MIPS-II version 1 (SYSV), dynamically linked (uses shared libs), stripped
通過抓包知道用戶在登錄頁面輸入的兩個參數(shù)分別是’user_name’和’user_pwd’,那么我們在CGI腳本中搜索這兩個字符串看看。
有幾行字符串看起來是SQL查詢的語句,尤其是:
select level from user where user_name='%s' and user_pwd='%s'
看起來應該是根據(jù)用戶名和密碼去數(shù)據(jù)庫查詢,看密碼是否正確。上一篇文章的分析我們可以知道,這個路由器是使用SQLite做數(shù)據(jù)庫存儲密碼的。
使用IDA載入my_cgi.cgi。查詢”select level from user where user_name“字符串,可以定位到do_login函數(shù)。
假設&猜想
用戶提交的用戶名和密碼大概是傳遞給sprintf函數(shù)生成SQL語句。存儲在sql變量中,***進入exec_sql函數(shù)。看起來這個過程沒有對數(shù)據(jù)進行轉(zhuǎn)義。除非數(shù)據(jù)在進入do_login函數(shù)之前或者在exec_sql中有做轉(zhuǎn)義,不然很可能存在SQL注入的漏洞。如果我們的假設是正確的,數(shù)據(jù)沒有經(jīng)過處理進入了SQL語句中,那么我們可以使用最傳統(tǒng)的***密碼來繞過登錄驗證:
' or '1'='1
***執(zhí)行的sql就會變成
select level from user where user_name='admin' and user_pwd='' or '1'='1'
這樣查詢語句就會返回成功的結(jié)果。
驗證猜想
我們實驗一下:
果然跟我們預期的一樣。這里需要注意的是能夠以管理員身份登陸是需要一定運氣的。我們構造的SQL語句where條件是or 1=1所以會返回所有的數(shù)據(jù)。恰好管理員的記錄是***條所以以管理員的身份登陸了。如果***條是一個普通用戶的數(shù)據(jù),那么就會以普通用戶的身份登陸了。為了確保一定以管理員身份登陸,可以構造如下語句:
' or level = (select level from user order by level desc limit 1)/*
上面這個語句可以確保***查詢出來的數(shù)據(jù)室level***的用戶的數(shù)據(jù)。
這次我們終于看到了逆向分析的冰山一角。下一篇將會討論使用Qemu虛擬機運行路由器固件,動態(tài)調(diào)試相關的內(nèi)容。
網(wǎng)站題目:逆向路由器固件之SQL注入:web應用上的漏洞
當前URL:http://www.fisionsoft.com.cn/article/dhdppoc.html


咨詢
建站咨詢
