
Web應用程序對用戶輸入的數據未進行嚴格過濾或轉義導致攻擊者能將惡意腳本注入到網頁中并被瀏覽器執行。常用手段若沒有任何過濾可以采取scriptalert(1)/script部分可能需要js符號閉合則采取scriptalert(1)/script會過濾script但未存在大小寫過濾則可采取Scriptalert(1)/Script會有大小寫過濾且會過濾script未有重寫法過濾則可采取Scrscriptiptalert(1)/scrscriptipt若過濾了實體轉義的空格則可用回車代替a%0Aherfjavascript:alert(1)若存在html實體轉義則可采取事件監聽常用事件監聽方法錯誤觸發img srcx onerroralert(1)鏈接點擊a herfjavascript:alert(1)鼠標移動onmouseoveralert(1)“第一關第一步觀察環境urlhttp://xss/level1.php?nametest頁面顯示第二步查看源碼按F12第三步構造payloadscriptalert(1)/script即可驗證是否含有xss漏洞第二關第一步觀察環境urlhttp://127.0.0.1/xss-labs-master/level2.php?keywordtest頁面顯示輸入scriptalert(1)/script結果沒有顯示查看源碼發現輸入符號明顯發現做了過濾但是沒有完全過濾那就直接閉合value參數執行XSS語句輸入scriptalert(1)/script即可第三關輸入“scriptalert(1)/script”源代碼顯示采用第二關方法是可行的但是徹底過濾了那就不采用script轉為使用javascript的onmouseover屬性輸入 οnmοuseοveralert(1)因為源代碼使用了htmlspecialchars函數過濾輸入把預定義的字符轉換為 HTML 實體。第四關輸入“scriptalert(1)/script”顯示發現變為空格但可以閉合value值在輸入 οnmοuseοveralert(1)即可第五關輸入scriptalert(1)/script代碼顯示則script過濾為scr_ipt輸入 οnmοuseοveralert(1)代碼顯示則onmouseover也被過濾那就采用閉合超鏈接輸入a hrefjavascript:alert(1),然后點擊超鏈接即可第六關輸入scriptalert(1)/script代碼顯示則script過濾為scr_ipt輸入 οnmοuseοveralert(1)代碼顯示則onmouseover也被過濾那就采用閉合超鏈接輸入a hrefjavascript:alert(1)代碼顯示發現超鏈接長度不夠爆破那就采用閉合大小寫混用方式看過濾是否嚴格輸入scRiptalert(1)/scRipt即可第七關輸入“scriptalert(1)/script”代碼顯示則script完全過濾為空輸入scRiptalert(1)/scRipt代碼顯示則大小寫混用也被過濾那就采用閉合復寫看是否過濾script輸入scscriptriptalert(1)/scscriptript即可第八關發現超鏈接點擊進去看到輸入的值即為herf值考慮讓連接中包含javascript的偽協議來運行alert(1)進行彈窗達成xss攻擊則輸入javascript:alert(1)再點擊超鏈接顯示script再次嚴格過濾那就考慮把語句改為unicode編碼看是否能繞過輸入ascii碼轉unicode語句即可第九關也是包含超鏈接那就直接輸入javascript:alert(1)顯示被轉義了在采用上輪輸入發現也被轉義默認輸入也被轉義那就看直接的http協議是否能訪問輸入http://www.baidu.com發現可以那就先將上輪輸入轉義再在后面注釋掉http協議即可第十關在url的keyword后輸入1再看源碼發現隱藏表單那就將隱藏表單的type改為text讓我們能看到回顯在keyword后輸入123t_linktypetextt_historytypetextt_sorttypetext,多了個輸入框且源碼變為說明僅接受t_sort的值那就在t_sort文本框輸入t_sorttypetext οnmοuseοveralert(1)即可第十一關在url的keyword后輸入123再看源碼發現隱藏表單那就將隱藏表單的type改為text讓我們能看到回顯在keyword后輸入123t_linktypetextt_historytypetextt_sorttypetextt_reftypetext,發現失敗因為雙引號被過濾了但是t_ref參數這個參數有點像http的請求頭的refer值。隱藏表單確實有值那就跟之前一樣閉合打開hackbar點擊load url再勾選referer將referer:后內容改為typetext οnmοuseοveralert(1)點擊執行后點擊輸入框即可第十二關前車之鑒直接看源碼發現這個Ua跟請求頭里的user_agent一樣那么就用之前的方法在hackbar上修改useragent的值typetext οnmοuseοveralert(1)點擊執行點擊輸入框即可第十三關前車之鑒查看源碼發現有個cook類似于請求頭的cookie那就用之前發放在hackbar上修改cookie的值usertypetext οnmοuseοveralert(1)點擊執行點擊輸入框第十四關頁面引用了exif.js讀取圖的元數據包括注釋且沒有過濾因此在圖的注釋/描述字段上傳帶有惡意代碼的scriptalert(1)/script再將該圖上傳即可第十五關稍作嘗試發現本身具有HTML實體編碼把實體轉義了直接構造無法執行腳本F12發現有個ngInclude相當于前端的include把返回頁面通過innerHTML方法嵌入html頁面加載內部的html時會自動執行其中語句外部不會執行其中語句但不會執行script標簽內容因此考慮在上傳本地頁面中添加惡意語句payload可以構造為事件報錯監聽?srclevel1.php?nameimg src1 onerroralert(1)或者用戶交互事件監聽?srclevel1.php?namea hrefXXXX onmouseoveralert(1)把鼠標移到這里/a或者點擊超鏈接?srclevel1.php?namea hrefjavascript:alert(1)第十六關F12查看源代碼發現test是插入到center標簽中沒必要閉合測試關鍵字,輸入scriptalert(1)/script輸入a hrefXXX οnmοuseοveralert(1)發現script和空格都被實體化了故只能采用用戶交互時間監聽不準用空格就用回車%0Apayload為a%0Aonmouseoveralert(1)將鼠標移動到這里/a或者a%0Aonmouseoveralert(1)用戶在滑動過程中必定會觸碰更隱蔽第十七關F12查看源代碼embed標簽定義一個區域可以放圖片、視頻、音頻等內容但是當打不開文件時會存在錯誤區域可以綁定各種事件嘗試各種標簽發現會對字符轉義為html實體導致無法執行其中語句只能采用事件監聽但是注意embed標簽不支持onerror事件故構造payload%20onmouseoveralert(1)本關需要使用chrome瀏覽器firefox不支持embed標簽第十八關基本同第十七關只是將空格轉移為了html實體導致無法執行后續語句故構造payload%0aonmouseoveralert(1)第十九關和第二十關采用flash觸發的xss漏洞但目前已經全面停用暫且難以復現后面兩關