互联网中存在着无数的Web站点,在每个站点中都存放着大量的Web资源,那系统该如何区分用户准备访问的是哪个站点中的哪个资源呢?
比如在Linux系统中我们要对某个文件进行操作,首先必须要知道该文件的确切路径。同样的道理,我们要访问互联网中的某个Web资源,也必须要知道它在互联网中的确切路径。
这就要求必须要有一种可以为互联网中所有资源进行统一定位的机制,这就是URL。
URL(Uniform Resource Locator,统一资源定位符)是互联网中标准的资源地址表示方法,其一般格式为:
- “协议名”指明了访问网络资源所使用的协议,一般都为HTTP或HTTPS协议,默认为HTTP协议。
- 在URL中如果指明路径,则是打开一个具体的网页或是某个具体的文件,如果路径省略,则是打开相应网站的首页。
- 参数用于客户端向服务器传递数据,从而实现客户端与服务器之间的交互。参数可以有多个,中间用&分隔。
比如URL:
表示用户要以HTTP协议去访问网站www.test.com中名为a.html的页面。
假设网站www.test.com在Web服务器中的主目录是/var/www/html,那么a.html在服务器中的文件路径就是/var/www/html/a.html。
再比如在Web服务器中,某个网页文件的路径是
那么这个网页文件所对应的URL地址就是
对于初学者一定要理解,URL中的主机名,其实对应的就是Web服务器上的主目录,比如URL地址“http://www.test.com/”在Web服务器中所对应的就是网站主目录/var/www/html。
理解了这点之后,自然很容易就能搞清楚URL地址和文件路径之间的对应关系。
另外这里还涉及一个网站首页的概念。
网站首页是指客户端在访问网站时所默认打开的页面,首页文件通常都是以index命名,比如index.html、index.php等。
由于目前大部分都是动态网站,所以对于一个PHP开发的网站,首页文件通常都是index.php。所以URL地址“http://www.test.com/”就等同于“http://www.test.com/indext.php”,都表示要去访问Web服务器中的/var/www/html/index.php文件。
实际上对于普通用户通常不需要了解所有页面的URL,因为有关定位的URL信息可以隐含在超文本信息之中,而且在利用浏览器显示时,该段超文本信息会被加亮或被加上下划线。用户直接单击该段超文本信息,浏览器将自动调用所指定的Web资源。但对于要学习Web安全的同学,URL则是我们必须要搞清楚的一个重要概念。
下面仍是通过一个CTF例题来加深对URL的理解。
攻防世界-Web-baby_web
打开的页面中显示“Hello World”,查看源码没有任何信息,在BP中抓包也没有信息。
题目描述:想想初始页面是哪个,再观察默认访问的URL是http://220.249.52.133:45555/1.php,所以这个题目应该是要求我们去访问index.php。
将URL改成是访问index.php,但是又会自动跳转到页面1.php,这时Burpsuite就又可以派上用场了。
在Burpsuite中拦截数据包之后发送到Repeater模块,然后在请求行中将访问的页面改为index.php,发送出去之后,在响应报文的头部发现flag。
这个题目其实是做了一个自动跳转,当用户访问首页index.php时,就会自动跳转到1.php。如果通过浏览器访问,那么用户无法控制页面的跳转,但是在Burpsuite中可以拦截数据,并对数据传输的整个过程进行控制,因而就可以绕过自动跳转的限制,从而查看到index.php的代码。