青創(chuàng)文章系統(tǒng)安全性分析
更新時(shí)間:2007年01月16日 00:00:00 作者:
最近受到了點(diǎn)打擊,精神恍惚,所以被請(qǐng)到精神病院兼職做研究工作去了,研究什么?嘿嘿,當(dāng)然是被人家研究!每天都被研究很是不爽,而且好久沒寫B(tài)log了,所以今天我也得來研究點(diǎn)東東才是。
研究對(duì)象偶找的是青創(chuàng)網(wǎng)絡(luò)文章系統(tǒng)(QcNews),這是一套 ASP + Access 的文章系統(tǒng),它的最新版是去年2月出的1.5.2.23.7.0,呵呵,看來作者好久沒有更新了。
一不小心發(fā)現(xiàn)了幾個(gè)洞洞,估計(jì)有人早就發(fā)現(xiàn)了的,哇,大哥啊這樣你就不對(duì)了嘛,發(fā)現(xiàn)了漏洞不公布出來還要自己玩,那多不好,偶幫你發(fā)布了哈。
估計(jì)本文發(fā)布的時(shí)候,漏洞補(bǔ)丁已經(jīng)出來了,使用這套系統(tǒng)的朋友快去打補(bǔ)丁吧。
另:在官方下的exe里面默認(rèn)安裝模式帶了一個(gè)瀏覽器插件,不爽。
1、 任意會(huì)員登陸/資料修改漏洞
系統(tǒng)只是通過cookies的username值判斷用戶的,看代碼:
if Request.Cookies("qcdn")("user_name")="" then
呵呵,但是cookies我們是可以偽造的,所以呢現(xiàn)在我們能夠以任意前臺(tái)帳號(hào)登陸了。同理,在前臺(tái)用戶修改資料那里也是根據(jù)cookies的username判斷的,我們也可以隨便修改任何人的資料的哦。
2、 SQL注入漏洞
第一個(gè)地方是用戶評(píng)論那里,也就是 remarkList.asp 這個(gè)文件。 Unid 沒有過濾危險(xiǎn)字符就直接帶入了 SQL 語(yǔ)句,直接可以用工具注射。當(dāng)條件為真就會(huì)有評(píng)論,為假就沒有評(píng)論,所以你得找一個(gè)有評(píng)論的文章注射。
第二個(gè)地方有點(diǎn)隱蔽,是在每篇文章的“推薦好友”那里( SendMail.asp 文件)。這里不可以直接注射,但是它的 Unid 會(huì)放到頁(yè)面的隱藏域,當(dāng)你填上好友郵箱提交的時(shí)候 Unid 就會(huì)被帶入 SQL 語(yǔ)句,同樣沒有過濾危險(xiǎn)字符。條件為真就會(huì)彈出“郵件發(fā)送失敗”(因?yàn)槲覜]有裝JMail的),假的條件頁(yè)面就會(huì)報(bào)錯(cuò)。
這個(gè)SQL注射漏洞將導(dǎo)致后臺(tái)用戶名及其 MD5 加密密碼泄漏,如果密碼不是很復(fù)雜,那么入侵者將很快暴破。
3、 后臺(tái)普通帳戶修改任意后臺(tái)帳戶密碼漏洞
我們先看看 admin_EditPass.asp 的關(guān)鍵代碼:
if request("method") = 1 then
Unid = Request.Form("Unid")
if Trim(Request.Form("username")) = "" then
Errmsg = "<li>請(qǐng)輸入用戶名。"
FoundErr = true
else
username = Qcdn.checkStr(Trim(Request.Form("username")))
end if
if Trim(Request.Form("pass1")) = "" or Trim(Request.Form("pass2")) = "" then
Errmsg = Errmsg + "<li>請(qǐng)輸入密碼及確認(rèn)密碼。"
FoundErr = true
elseif Trim(Request.Form("pass1"))<>Trim(Request.Form("pass2")) then
Errmsg = Errmsg + "<li>輸入的密碼和確認(rèn)密碼不符。"
FoundErr = true
else
password = Qcdn.checkStr(Trim(Request.Form("pass1")))
password = md5(password,16)
end if
if FoundErr then
Call Qcdn.Err_List(Errmsg,1)
Response.end
end if
sql = "Update article_admin set username = '"& username &"',[password] = '"& password &"' where id = " & Unid
conn.execute(sql)
Response.write("<script>alert(""修改成功"");location.href=""admin_EditPass.asp"";</script>")
Response.end
end if
注意 SQL 語(yǔ)句“"Update article_admin set username = '"& username &"',[password] = '"& password &"' where id = " & Unid”,Unid、username、password都是通過表單提交的,而且都沒有驗(yàn)證,所以我們只要知道后臺(tái)用戶的 id ,然后更改密碼修改隱藏域中的unid,就可以修改他的密碼了。
4、 后臺(tái)帳戶刪除網(wǎng)站任意文件漏洞
在后臺(tái)有個(gè)“上傳文件管理”功能,可以刪除上傳的文件。觀察其 URL ,形式是:http://localhost/QcNews/admin_picmang.asp?Action=Del&FileName=2003121162475.jpg
FileName就是要?jiǎng)h除的文件名了,文件在 Upfiles 文件夾。試試構(gòu)造 FileName跳出這個(gè)目錄。作者也考慮到了這個(gè)問題,所以有這樣一段判斷代碼:
if left(trim(arrFileName(i)),3)<>"../" and left(trim(arrFileName(i)),1)<>"/" then
雖然過濾了跳出目錄的一種情況,不過我們可以構(gòu)造類似http://localhost/QcNews/admin_picmang.asp?Action=Del&FileName=lake2/../../index.asp的 URL 來刪除任意文件。
5、 后臺(tái)普通帳戶直接獲取管理員權(quán)限漏洞
這套系統(tǒng)的后臺(tái)有3種不同權(quán)限的帳戶:管理員、錄入員、審核員。管理員有所有的權(quán)限,錄入員只能發(fā)帖子,審核員審核帖子。但是作者最大的疏忽卻是:錄入員和審核員具有管理員一樣的權(quán)限。
雖然普通帳戶看不到其他管理功能的鏈接,但是我們直接在瀏覽器里面輸入實(shí)現(xiàn)相應(yīng)功能的文件地址就能像管理員一樣管理了。比如說備份數(shù)據(jù)庫(kù),我以錄入員登陸系統(tǒng),然后直接在瀏覽器里輸入 http://localhost/QcNews/admin_backupdata.asp ,呵呵,怎么樣,可以備份數(shù)據(jù)庫(kù)了哦。其他的功能亦然。
6、 后臺(tái)數(shù)據(jù)庫(kù)備份漏洞
嗯,從 SQL 注射到后臺(tái),現(xiàn)在我們可以利用數(shù)據(jù)庫(kù)備份得到 webshell 了。
還是老規(guī)矩,改 asp 為 gif ,然后上傳、備份。但是上傳圖片那里系統(tǒng)會(huì)首先檢查文件是不是圖片格式,單純的改 asp 為 gif 是不行的了。怎么辦?
你一定還記得那個(gè)把 asp 代碼 copy 到一個(gè)圖片文件末尾的圖片 ASP 法吧,呵呵,就是傳這樣的圖片然后備份之。
由于偶在被人家研究空閑時(shí)間有限,勉強(qiáng)就找了這么幾個(gè) bug ,不過足夠?qū)κ褂么缶W(wǎng)站造成威脅了,當(dāng)然我寫此文章的目的不是教大家去黑站,而是希望我們的網(wǎng)絡(luò)更安全一些……
閣下如有什么要給我交流的,來精神病院聊聊吧,撥打電話120 找胡主席^_^
研究對(duì)象偶找的是青創(chuàng)網(wǎng)絡(luò)文章系統(tǒng)(QcNews),這是一套 ASP + Access 的文章系統(tǒng),它的最新版是去年2月出的1.5.2.23.7.0,呵呵,看來作者好久沒有更新了。
一不小心發(fā)現(xiàn)了幾個(gè)洞洞,估計(jì)有人早就發(fā)現(xiàn)了的,哇,大哥啊這樣你就不對(duì)了嘛,發(fā)現(xiàn)了漏洞不公布出來還要自己玩,那多不好,偶幫你發(fā)布了哈。
估計(jì)本文發(fā)布的時(shí)候,漏洞補(bǔ)丁已經(jīng)出來了,使用這套系統(tǒng)的朋友快去打補(bǔ)丁吧。
另:在官方下的exe里面默認(rèn)安裝模式帶了一個(gè)瀏覽器插件,不爽。
1、 任意會(huì)員登陸/資料修改漏洞
系統(tǒng)只是通過cookies的username值判斷用戶的,看代碼:
if Request.Cookies("qcdn")("user_name")="" then
呵呵,但是cookies我們是可以偽造的,所以呢現(xiàn)在我們能夠以任意前臺(tái)帳號(hào)登陸了。同理,在前臺(tái)用戶修改資料那里也是根據(jù)cookies的username判斷的,我們也可以隨便修改任何人的資料的哦。
2、 SQL注入漏洞
第一個(gè)地方是用戶評(píng)論那里,也就是 remarkList.asp 這個(gè)文件。 Unid 沒有過濾危險(xiǎn)字符就直接帶入了 SQL 語(yǔ)句,直接可以用工具注射。當(dāng)條件為真就會(huì)有評(píng)論,為假就沒有評(píng)論,所以你得找一個(gè)有評(píng)論的文章注射。
第二個(gè)地方有點(diǎn)隱蔽,是在每篇文章的“推薦好友”那里( SendMail.asp 文件)。這里不可以直接注射,但是它的 Unid 會(huì)放到頁(yè)面的隱藏域,當(dāng)你填上好友郵箱提交的時(shí)候 Unid 就會(huì)被帶入 SQL 語(yǔ)句,同樣沒有過濾危險(xiǎn)字符。條件為真就會(huì)彈出“郵件發(fā)送失敗”(因?yàn)槲覜]有裝JMail的),假的條件頁(yè)面就會(huì)報(bào)錯(cuò)。
這個(gè)SQL注射漏洞將導(dǎo)致后臺(tái)用戶名及其 MD5 加密密碼泄漏,如果密碼不是很復(fù)雜,那么入侵者將很快暴破。
3、 后臺(tái)普通帳戶修改任意后臺(tái)帳戶密碼漏洞
我們先看看 admin_EditPass.asp 的關(guān)鍵代碼:
if request("method") = 1 then
Unid = Request.Form("Unid")
if Trim(Request.Form("username")) = "" then
Errmsg = "<li>請(qǐng)輸入用戶名。"
FoundErr = true
else
username = Qcdn.checkStr(Trim(Request.Form("username")))
end if
if Trim(Request.Form("pass1")) = "" or Trim(Request.Form("pass2")) = "" then
Errmsg = Errmsg + "<li>請(qǐng)輸入密碼及確認(rèn)密碼。"
FoundErr = true
elseif Trim(Request.Form("pass1"))<>Trim(Request.Form("pass2")) then
Errmsg = Errmsg + "<li>輸入的密碼和確認(rèn)密碼不符。"
FoundErr = true
else
password = Qcdn.checkStr(Trim(Request.Form("pass1")))
password = md5(password,16)
end if
if FoundErr then
Call Qcdn.Err_List(Errmsg,1)
Response.end
end if
sql = "Update article_admin set username = '"& username &"',[password] = '"& password &"' where id = " & Unid
conn.execute(sql)
Response.write("<script>alert(""修改成功"");location.href=""admin_EditPass.asp"";</script>")
Response.end
end if
注意 SQL 語(yǔ)句“"Update article_admin set username = '"& username &"',[password] = '"& password &"' where id = " & Unid”,Unid、username、password都是通過表單提交的,而且都沒有驗(yàn)證,所以我們只要知道后臺(tái)用戶的 id ,然后更改密碼修改隱藏域中的unid,就可以修改他的密碼了。
4、 后臺(tái)帳戶刪除網(wǎng)站任意文件漏洞
在后臺(tái)有個(gè)“上傳文件管理”功能,可以刪除上傳的文件。觀察其 URL ,形式是:http://localhost/QcNews/admin_picmang.asp?Action=Del&FileName=2003121162475.jpg
FileName就是要?jiǎng)h除的文件名了,文件在 Upfiles 文件夾。試試構(gòu)造 FileName跳出這個(gè)目錄。作者也考慮到了這個(gè)問題,所以有這樣一段判斷代碼:
if left(trim(arrFileName(i)),3)<>"../" and left(trim(arrFileName(i)),1)<>"/" then
雖然過濾了跳出目錄的一種情況,不過我們可以構(gòu)造類似http://localhost/QcNews/admin_picmang.asp?Action=Del&FileName=lake2/../../index.asp的 URL 來刪除任意文件。
5、 后臺(tái)普通帳戶直接獲取管理員權(quán)限漏洞
這套系統(tǒng)的后臺(tái)有3種不同權(quán)限的帳戶:管理員、錄入員、審核員。管理員有所有的權(quán)限,錄入員只能發(fā)帖子,審核員審核帖子。但是作者最大的疏忽卻是:錄入員和審核員具有管理員一樣的權(quán)限。
雖然普通帳戶看不到其他管理功能的鏈接,但是我們直接在瀏覽器里面輸入實(shí)現(xiàn)相應(yīng)功能的文件地址就能像管理員一樣管理了。比如說備份數(shù)據(jù)庫(kù),我以錄入員登陸系統(tǒng),然后直接在瀏覽器里輸入 http://localhost/QcNews/admin_backupdata.asp ,呵呵,怎么樣,可以備份數(shù)據(jù)庫(kù)了哦。其他的功能亦然。
6、 后臺(tái)數(shù)據(jù)庫(kù)備份漏洞
嗯,從 SQL 注射到后臺(tái),現(xiàn)在我們可以利用數(shù)據(jù)庫(kù)備份得到 webshell 了。
還是老規(guī)矩,改 asp 為 gif ,然后上傳、備份。但是上傳圖片那里系統(tǒng)會(huì)首先檢查文件是不是圖片格式,單純的改 asp 為 gif 是不行的了。怎么辦?
你一定還記得那個(gè)把 asp 代碼 copy 到一個(gè)圖片文件末尾的圖片 ASP 法吧,呵呵,就是傳這樣的圖片然后備份之。
由于偶在被人家研究空閑時(shí)間有限,勉強(qiáng)就找了這么幾個(gè) bug ,不過足夠?qū)κ褂么缶W(wǎng)站造成威脅了,當(dāng)然我寫此文章的目的不是教大家去黑站,而是希望我們的網(wǎng)絡(luò)更安全一些……
閣下如有什么要給我交流的,來精神病院聊聊吧,撥打電話120 找胡主席^_^
相關(guān)文章
DVBBS7.0Sp2前臺(tái)提權(quán)漏洞利用程序[Kendy版]源碼
DVBBS7.0Sp2前臺(tái)提權(quán)漏洞利用程序[Kendy版]源碼...2007-01-01找出通病 通殺國(guó)內(nèi)軟件防火墻的弱點(diǎn)
找出通病 通殺國(guó)內(nèi)軟件防火墻的弱點(diǎn)...2007-01-01