1、最近學web滲透,無意間發現一個有意思的站點:
(1)用戶的參數都在url路徑里面,並未通過類似? a=xxx&b=yyy形式傳參
(2)整個站點能讓輸入的只有這一個search框,沒有其他用戶交互的地方了;
(3) 這里既然有輸入框,那么可能的漏洞有:
- xss:反射型,比如用戶的輸入被后台又輸出到頁面; 存儲型:后台數據庫或日志記錄了用戶的查詢關鍵詞,然后管理員或運維人員在頁面查看用戶的查詢記錄,導致中招
- sql注入:如果后台把用戶輸入的關鍵詞存入數據庫,這里就有sql注入的可能;
(4)思路有了,於是挨個嘗試,但這里都沒發現問題:
- xss:反射型,搜索框一直會顯示search,下面會顯示no result,不會在頁面展示任何用戶的輸入,此路不通;存儲型:也不知道后台會不會在頁面展示用戶的搜索記錄,暫時無解;
- sql注入:這里沒有源碼,不知道有沒有用單雙引號、括號閉合,頁面也沒找到顯錯點,只能嘗試盲注.....
2、人肉嘗試了一圈,試了無數payload,效率及其低下,而且全都沒卵用,只能借助工具:xray+awvs; 這兩款神奇的介紹和安裝、使用方法google一下可以找到一大堆,這里不再贅述;安裝好后,直接運行,awvs給出的掃描出兩個嚴重漏洞:
(1)sql注入:在/News/detail/id/[*].html路徑在存在盲注,並且還列舉了payload
(2)xss:給出了受影響的網頁和payload:
漏洞的類型和路徑都給了,接下來挨個驗證;
3、(1)sql注入是盲注,且頁面沒有顯錯點,人工驗證效率較低,這里先用burp在提示的路徑抓包, 然后在payload的地方標注*號,
接着上sqlmap,不過比較遺憾,跑了好幾次都沒結果,無法繼續dump庫、表和數據,這里暫時放棄;
不過這里繼續手動挨個嘗試payload,發現確實是這樣的,沒誤報,比如這里輸入true payload,能看到返回正確的頁面:
輸入false的payload,頁面顯示不存在:
(2)接着驗證xss漏洞:根據掃描結果,這里先看看用戶的輸入被輸出在頁面的哪個地方,如下:中間還被加上了小於號<
既然用戶在url的輸入又被輸出到頁面,這里就有機可乘:把原來的輸入改成</script>標簽繼續嘗試,結果並未彈窗;查看源碼,發現</script>標簽被放在了</html>后面,無法閉合,導致alert沒法執行;
既然script標簽被限制,只能改用其他標簽,比如<img scr=1 onerror=alert(666)>來驗證,成功彈窗,如下:證明awvs掃出來的xss漏洞是真的
換成chrome繼續嘗試並未彈窗,查看源碼發現alert居然被過濾了,不得不佩服chrome的開發團隊。這里從側面反應了chrome比firefox安全!
(3)以上是awvs報的漏洞,這里還有另一款神奇xray,也報了漏洞,如下:
有兩個也是xss,點開看細節,給出了url和payload;
s
這里也給出了payload在頁面展示的地方,可以發現一個小竅門:通過構造超長的url參數,讓script標簽完整的在頁面展示,而不是像上面那樣</script>被放在最末尾,導致無法閉合前面的標簽;
按照提示,構造url,成功彈窗,說明這個反射型的xss也是對的;
參考: