轉載文章,原文來源: https://juejin.cn/post/695413...
ftp連接:我最經常使用的一個,ftp://ftp.ncbi.nlm.nih.gov/genomes/refseq/ 打開訪達html
片斷ID:假若有個名爲 example.html 的文檔中包含一個 id 屬性值爲 myelement 的元素,那麼使用 example.html#myelement 這個 URL 便可直接導航至該元素,該 URL 中的 #myelement 即稱爲 URL 片斷標誌符。簡單來講就是錨點。web
查找第一個: ,:在哪裏,那 :前面的就是協議名,若是在協議中獲取了不應獲取的字符,那麼將認爲這是一個相對的 URL ,並非一個協議名。瀏覽器
字符串//應該算跟在協議名後面的,若是發現有該字符 則會跳過該字符 若是沒有找到便無論了!因此 http:baidu.com 也是能夠訪問的! 瀏覽器中還能夠用反斜槓 \ 來代替正斜杆,firefox除外!服務器
依次掃描url,若是這三個符號中 哪一個先出現便以哪一個爲準來截取
/(正斜槓)、?(問號)、#(井號)
從url裏提取出來的信息,就算受權部分信息!
除了IE跟safari其餘瀏覽器還接受 ;(分號)也算受權信息部分中可接受的分隔符!xss
結合以上信息 咱們分析下如下連接:post
ftp://admin:admin@192.168.1.100:21
這樣的連接我常常用來登錄ftp!這樣便會以admin的身份 密碼爲:admin
ftp協議去登錄主機192.168.1.100,端口號是21端口!測試
若是受權部分的結尾跟着一個正斜杆,某些場景裏,跟着一個反斜槓或者分號,就像以前提到的,依次掃描下一個? #或字符串結尾符,那個先出現便以哪一個爲準!截取出來的部分就是路徑信息!最後根據unix路徑語義進行規範化整理!網站
若是在上一條解析裏,後面跟着的是一個問號,便繼續掃描下一個 # 或到字符串結尾,哪一個先出現便以哪一個爲準!中間的部分即是查詢字符串。編碼
若是成功解析完上一條信息,它最後還跟着#號 那麼從這個符號到字符串的結尾便算片斷ID了,片斷ID是不會發送到服務器的!通常用來跳到A標籤的錨連接 或者用來js的 location.hash 取值 等等!url
http://xss1.com&action=test@w...
這個連接會跳轉到哪裏了,咱們按照上面的思路來模擬一下瀏覽器的解析過程。
http://xss1.com\@www.baidu.com
按照 URL 的解析思路,大膽想想這個 URL 會去哪裏了?
http://xss1.com;.baidu.com/
在不一樣的瀏覽器對;的處理不太同樣。
一些瀏覽器會自動的把url糾正成http://xss1.com/;.baidu.com/
,谷歌瀏覽器認爲這不是一個url,喚起查詢引擎,safari會認爲這是一個錯誤。
經過對瀏覽器對URL 解析的一個分析,我想你們都知道了,答案是:不是。
///////www.baidu.com
這些連接都能正常的訪問到百度。
ⅅʳºℙˢ.ʷººʸⓊⁿ.ºʳℊ
再看看這個連接也是能正常解析的(雖然這個網站不存在的,可是解析是沒有問題的),可是你會發現若是把上面這個連接插入到語雀、掘金、有道雲筆記插入連接會出現不同的狀況。有興趣能夠嘗試一下
http://ⅅʳºℙˢ.ʷººʸⓊⁿ.ºʳℊ
上面這些奇奇怪怪的連接都能正常訪問,爲何了?
這裏須要提到的是針對域名的編碼:Punycode。通過Punycode編碼後的域名是會被DNS服務器所識別的!
舉個🌰拿中文域名來講,由於操做系統的核心都是英文組成,DNS服務器的解析也是由英文代碼交換,因此DNS服務器上並不支持直接的中文域名解析。 全部中文域名的解析都須要轉成punycode碼,而後由DNS解析punycode碼。最後咱們成功的訪問到了咱們要去網站!只不過今天咱們這裏 punycode編碼的解析過程並非由dns服務器來解析的 而是在瀏覽器訪問時就給解碼回來!
先看一個例子:http://www.baidu.com@qq.com, 你們認爲這個連接爲跳轉到哪裏去,安裝第二小節的解析規則很簡單,跳轉到qq.com。由於@前面的信息被解析成了受權信息。 因此咱們這段連接爲何去qq.com 而不是去baidu.com 算由於一個@符 讓瀏覽器認爲www.baidu.com 算一段用戶信息 然後面的纔算主機名 他要去訪問的地址。因此咱們有時候若是你想假裝找不到跳轉漏洞也能夠如此實現!而且在谷歌、firefox你還能夠這樣寫http:www.baidu.com@qq.com。
在《web之困》中講了其實url地址是能夠用進制來代替的!只不過算把ip地址給轉換成進制來訪問!
十進制 —||||||> 十六進制 —||||||> 八進制 而後在訪問時 指定協議而後加個0
http://0[八進制] 好比 115.239.210.26, 首先用.分割數字 115 239 210 26 ,而後選擇10進制轉換16進制!(要用0來表示前綴,能夠是一個0也能夠是多個0 跟XSS中多加幾個0來繞過過濾同樣!)。首先把這四段數字給 轉成 16 進制!結果:73 ef d2 1a 而後把 73efd21a 這十六進制一塊兒轉換成8進制!,結果就是16373751032,而後指定協議 http:// 用0表示前綴 加上結果 連接:http://0016373751032。
百度首頁 IP 14.215.177.38
若是文章中什麼不對或者寫的很差的地方,請你們多多指正,謝謝!碼字不易,點個贊加個關注吧!