|
無意間發現某站點存在 SQL 注入漏洞,于是利用這個漏洞提權并獲取服務器控制權。這個案例很典型,像是教科書式的典型入侵步驟,下面就以這個案例展示從 SQL 注入到獲取目標服務器控制權限的全過程。
發現
訪問某站點的搜索頁面,發現輸入單引號“'”就直接報錯,這就說明這個頁面存在 注入的可能。為了證實這點,首先閉合請求訪問語句,然后對比返回結果的差異。
發現訪問
http://foo/rss.ASPx?keyword=lucky
以及
http://foo/rss.ASPx?keyword=lucky'));
都可以被執行,但是返回的結果不同。根據下面的錯誤信息,是注釋掉了 ORDER BY 。
分析
根據上面的情況,能非常肯定的斷定這個腳本存在很嚴重的 SQL 注入漏洞。下一步,嘗試構建插入 SQL 語句
http://foo/rss.ASPx?keyword=lucky'));SELECT%20SERVERPROPERTY%20('edition');--
發現服務器的報錯信息為 SQL 語句語法錯誤,SQL 構建不成功。幾次嘗試注入均不成功,于是休息下先把重點放到服務器本身
掃描目標主機開放的端口,發現目標主機的 3389 端口是開放的。用遠程桌面訪問這個端口,可以訪問。萬事俱備,看來思路還得回到如何利用這個 SQL 注入漏洞。
此時靈光一現,是不是服務器的腳本分割用戶輸入的空格(%20),然后組成 SQL 語句查詢?那么將空格轉換成 TAB(%09)試試看,重新發起請求
http://foo/rss.ASPx?keyword=lucky'));SELECT%09SERVERPROPERTY%09('edition');--
并沒有報錯,說明判斷是正確的。接下來的事情就好辦了,調用 SQL 外部命令將 Guest 用戶解禁并加入管理組。
提權
解禁 Guest 用戶
相當于服務器執行
再將 Guest 加入到管理員組
相當于服務器執行
上述請求順利執行成功,然后打開目標主機的遠程登錄,輸入用戶名“guest”密碼為空登錄,結果順利登錄 (運氣和相貌都很重要 :P)。
重新關上 Guest 帳戶,并通知主機管理員,至此攻擊結束。
后記
正如上文所描述的,SQL 漏洞危害非常的巨大,但我相信國內很多中小站點還普遍存在著這樣的漏洞。這里有些個人的不完全建議
1、代碼要對輸入的參數做到充分的過濾,并盡可能得考慮極端情況
2、錯誤信息盡可能的少,否則無關的人看不懂而有心的人就會提起興趣
3、不要以管理員的身份運行服務器進程
4、某些情況下,NET 命令對于攻擊者而言就是“微軟牌”的木馬
5、嚴格控制遠程登錄訪問者的來源
6、如果可能的情況下,不是很推薦使用 Windows 作為服務器操作系統
it知識庫:典型的 SQL 注入過程,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。