转载文章,原文来源: 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
若是文章中什么不对或者写的很差的地方,请你们多多指正,谢谢!码字不易,点个赞加个关注吧!