在HTTP请求报文中,请求头是我们需要重点了解的部分,下面是请求头中的主要内容:
(1) Host,指定被请求资源的URL。
(2) User-Agent,客户端操作系统和浏览器的版本信息。很多网站通过它来判断操作系统和浏览器类型,来展示对应的页面。也有很多通过UA来判断访问是否合法,是用户访问还是程序访问等。
Windows版本与内核的对应关系:例题:貌似有点难
实验吧 http://ctf5.shiyanbar.com/phpaudit/
打开链接之后,提示“错误!你的IP不在允许列表之内!”,并且给出了网站源码。我们首先来分析一下这段代码。
$_SERVER是一个全局变量,与$_GET、$_POST一样,可用于获取客户端的信息。在这段代码中,使用了三种不同的获取客户端IP的方法,
$_SERVER[“REMOTE_ADDR”]获取的是客户端与服务器三次握手建立TCP连接时的IP,这个无法伪造。
$_SERVER[‘HTTP_CLIENT_IP’]和$_SERVER[“HTTP_X_FORWARDED_FOR]都是通过HTTP头来获取信息,因而都是可以伪造的。它们分别获取的是HTTP请求头“CLIENT-IP”和”X-FORWARDED-FOR”域的信息,不过“CLIENT-IP”不属于标准的头信息,而”X-FORWARDED-FOR”则是,因而修改该属性更为可取。.
比如我们自己编写下面一个脚本文件:
默认情况下只能获取到$_SERVER[“REMOTE_ADDR”],这是因为HTTP请求头中默认并没有那两个值。
我们利用Burpsuite截获报免费云主机域名文,然后在其中增加两个头部信息,并发送出去,这时服务器可以通过三种方法来获取到客户端的IP。
搞清楚这些问题之后,这道题目的解法就很简单了,只要将“CLIENT-IP”或是“X-FORWARDED-FOR”修改为1.1.1.1即可。
最后还是需要说明一下,既然$_SERVER[“REMOTE_ADDR”]获取的是客户端的真实IP,而且用户无法伪造,那么服务器为什么不用这种方法来获取客户端IP呢?这是因为在局域网环境下,客户端与服务器之间直接通信,通过三次握手建立连接,此时获取的IP自然没问题。但是互联网的网络环境就复杂得多了,在服务器的前面一般会有防火墙,在客户端也可以设置代理服务器,也就是说与服务器三次握手的往往并非是客户端,而是这些中间设备,这都会导致利用$_SERVER[“REMOTE_ADDR”]获取的IP不准确。而利用$_SERVER[‘HTTP_CLIENT_IP’]和$_SERVER[“HTTP_X_FORWARDED_FOR]获取的IP直接来自客户端发来的消息头,不受中间设备的干扰,因而更为准确,只是这也为***留下了利用的空间。
本文作者:晨光运维工程师web服务应用是最为常见的应用之一,主要是通过对公网放行服务器的端口供客户访问来提供服务。这类服务对数据安全、访问控制的要求会比较高。但最为核心的还是后端服务器主机层,当后端主机不能正常工作时,前端展示的web服务一定是收到牵连的,如何…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。