逆向路由器韌體之SQL注入 Part3

2021-09-22 17:09:21 字數 1868 閱讀 1209

另尋他徑

在前面的內容

中,我們使用tew-654tr路由器的tftp服務實現了獲取目標的管理許可權。但是要是tftp沒有開放到外網怎麼辦?另尋他徑:在這一篇中會我們來分析乙個web應用上的漏洞。

初步分析

使用**軟體抓登入時候的資料報,可以看到傳送的http請求如上圖所示。資料傳送給了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

通過抓包知道使用者在登入頁面輸入的兩個引數分別是』user_name』和』user_pwd』,那麼我們在cgi指令碼中搜尋這兩個字串看看。

有幾行字串看起來是sql查詢的語句,尤其是:

select level from user where user_name='

%s' and user_pwd='

%s'

使用ida載入my_cgi.cgi。查詢」select level from user where user_name「字串,可以定位到do_login函式。

假設&猜想

使用者提交的使用者名稱和密碼大概是傳遞給sprintf函式生成sql語句。儲存在sql變數中,最後進入exec_sql函式。看起來這個過程沒有對資料進行轉義。除非資料在進入do_login函式之前或者在exec_sql中有做轉義,不然很可能存在sql注入的漏洞。如果我們的假設是正確的,資料沒有經過處理進入了sql語句中,那麼我們可以使用最傳統的萬能密碼來繞過登入驗證:

'

or '1'='1

最後執行的sql就會變成

select level from user where user_name='

admin

' and user_pwd='' or '

1'='

1'

這樣查詢語句就會返回成功的結果。

驗證猜想

我們實驗一下:

果然跟我們預期的一樣。這裡需要注意的是能夠以管理員身份登陸是需要一定運氣的。我們構造的sql語句where條件是or 1=1所以會返回所有的資料。恰好管理員的記錄是第一條所以以管理員的身份登陸了。如果第一條是乙個普通使用者的資料,那麼就會以普通使用者的身份登陸了。為了確保一定以管理員身份登陸,可以構造如下語句:

'

or level = (select level from user order by level desc limit 1)/*

上面這個語句可以確保最後查詢出來的資料室level最高的使用者的資料。

修改 ubnt 路由器韌體

tar xvf er e50.v1.10.11.5274269.tar unsquashfs squashfs.tmp此時,在同級目錄邊會出現squashfs root資料夾,裡面即為我們解壓出來的檔案。想改啥就可以在這裡改了。更多選項請輸入unsquashfs help 修改完成後重新打包。mks...

php 小公尺路由器 小公尺路由器韌體修改

小公尺路由器官方提供的韌體是自定義格式,而且刷機時要驗證rsa簽名,因此只刷自製韌體幾乎不可能。通過對韌體工具mkxqimage的分析,基本弄清楚了韌體打包和解包的流程,如果採用自己的rsa私鑰打包韌體,然後用自己的rsa公鑰替換 usr share xiaoqiang public.pem,那麼就...

優酷路由器刷openwrt韌體一

2 解壓 tar xvf openwrt a02809f.tar 進入根目錄 root bruvin lu openwrt 18.06.2 ls bin config feeds key build logs readme staging dir toolchain version.date bsd...