史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式 & 網頁設計技術文件 (http://forum.slime.com.tw/f138.html)
-   -   危險無處不在 Html標籤帶來的安全隱患 (http://forum.slime.com.tw/thread176332.html)

psac 2006-06-05 11:53 AM

危險無處不在 Html標籤帶來的安全隱患
 
危險無處不在 Html標籤帶來的安全隱患

WWW服務是因特網上最重要的服務之一,提供給客戶各種各樣的訊息資源,而把這種訊息資源組織起來的一個很重要的東西就是Html超文本語言,然後經過應用的發展就出現了其他的如UBB等標籤但是最終都是以Html代碼來實現的。經過研究發現,即使是最安全的安全代碼(已經排除了通常所說的Xss漏洞)也無法避免另外一種惱人的攻擊方式,配合不嚴格的程式,可能被人利用產生更大的威脅。

  我們就以現在廣泛存在於論壇,文章系統,Blog系統等腳本程式中的,然後通過腳本程式的轉換成為了<img src=http://www.cnbct.org/loveshell.jpg>。<img>標籤

  是在當前的網頁面嵌入一個圖片,現在的論壇程式在發帖子以及個人頭像那裡都有這個功能,當瀏覽器遇到這個Html標記的時候就會根據src的地
址,這裡是去尋找網路資源,當找到這個圖片的時候就會訪問並且下載這個資源然後在本機進行解析,
在瀏覽器裡顯示出這個圖片,如果找不到這個資源就會顯示一個紅叉表示出錯了。這裡是個很正常的圖
片,所以一切都順利進行,但是不知道大家想過沒有,如果這個資源是其他類型的資源譬如一個網頁一個eXe文件或者是一個asp網頁面,當不是圖片類型文件的時候,結果會怎麼樣呢?

  答案很明顯,是圖片顯示一個紅X,我們的Exe文件也沒有下載,Html網頁面也沒有執行,這是理所當然的東西,因為IE或者其他瀏覽器會把取得的資源當作圖片解析,這樣就會產生錯誤從而顯示紅X了。到這裡大家也許還覺得沒有什麼用,但是如果我們把圖片的地址改成
http://127.0.0.1:88/imgtest/test.asp...內容的話

<%
dim fso,file //定義Fso對像


Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set fso = Server.createObject("Scripting.FileSystemObject")
path = server.mappath("imgtest.txt") //打開同目錄imgtest.txt

set file=fso.opentextfile(path, ForAppending, TRUE)
file.write("有人來了: ") //寫內容
file.write(request.Servervariables("QUERY_STRING"))
file.write vbCrLf
file.close
set file = nothing
set fso = nothing
%>

大家可以測試看看,我們的訪問被記錄了,甚至還得到了提交的參數,但是這對於瀏覽器來說是未知的,因為我們只看到了一個紅X。到這裡我們也許知道我們可以用這個東西做什麼了!就是可以以瀏覽者的身份悄悄去訪問一個網頁面,甚至支持Get的參數請求,這很重要,理解了這個就可以在後面發揮我們的想像力來利用這個來做什麼!

  1、刷流量:我們可以在一個流量大的論壇把自己的圖像設置成要刷的網頁面,然後每一個瀏覽者都會去訪問下我們的網頁面,不管他是否看到了,但是他訪問了,不是麼?

  2、破壞:這個讓人很惱火,對於動網論壇如果把你的圖像設置成logout.asp的話,呵呵,所有看了你的帖子的人都會被T了,很爽吧!

  呵呵,至於幻影論壇,大家可以試試,但是這是很不道德的!

  3、黑客:這個是我們最感興趣的,可以跨越權限做一些事情,因為現在很多的程式對於前台都是防守較好,但是後台就不是那麼嚴密了。如果程式中取得資料的時候是用request("id")這樣的方法取得的話,那麼我們就可以利用標籤向Cgi腳本提交資料了,注意必須不能是request.form("username2")這種嚴格指定了取得的變數來源的方式,因為我們的變數只能通過URL提交也就是上面說的QUERY_STRING方式。這對於寫法不嚴密的程式是很致命的,要例子的話動網就是一個,動網Sql版本後台的messages.asp裡取得資料的方式就是request,代碼如下:

......
Sub Del()
Dim Dnum
If Request("username") = "" Then
Body = Body + "<br>" + "請輸入要批量刪除的用戶名。"
Exit Sub
End If
Sql = "select COUNT(*) FROM Dv_Message where Sender = '" & Request("username") & "'"
Set Rs = Dvbbs.Execute(Sql)
......

這本來是後台的必須要有後台管理權限才能訪問的,但是我們構造這樣一個Url:

http://bbs.dvbbs.net/admin/messages.asp?action=del&user=';update/**/Dv_User/**/set/**/UserEmail=(select/**/top/**/1/**/

[Username]/**/from/**/Dv_admin)/**/where[UserName]='loveshell';--

  或者類似的語句了,然後放到[Img]標籤裡。大家也許覺得管理員看自己帖子的可能性也不大,但是要知道論壇短信也是支持和發帖子一樣的[img]標籤的,所以如果能給管理員發個短信,在裡面構造我們的Img標籤只要他一打開短信就會種招的哦!如果可以和社會工程學聯一塊,殺人不沾血啊,呵呵!有點遺憾的是彷彿動網對&等符號做了轉換,大家可以嘗試突破,更何況網路上寫法不嚴密的程式何止千萬。

  4 想像力 大家賺錢都這麼辛苦,如果把IMG標籤裡的地址改成附件下載地址的話,呵呵,說說而已,沒有測試。

  5 ......

  再說說對這個問題如何防禦,如果想保留這個[IMG]標籤但是又不想出問題的話,是需要轉換的,譬如限定後綴必須是jpg,呵呵這可以通過URL編碼加#JPG饒過,反正我覺得如果有限制的話一般都是能饒過的,即使你限制了IMG,那好,還有Flash標籤呢,還有Rm標籤呢?......

  防禦和利用都是艱難的。


所有時間均為台北時間。現在的時間是 09:11 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1