网络信息安全技术HTTP协议简介与web安全
Posted i春秋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络信息安全技术HTTP协议简介与web安全相关的知识,希望对你有一定的参考价值。
如今,终端设备普及率越来越高,特别是智能手机几乎已经是人手一部了。我们每天都会通过手机浏览新闻、聊微信、聊……我们已经生活在信息时代,高速膨胀的信息让我们措手不及。而在这一切的背后有一个重要的东西在支撑着,这就是HTTP协议。
HTTP协议(HyperText Transfer Protocol)又叫超文本传输协议,位于ISO的OSI中的第七层——应用层(ISO & OSI不要晕)
其版本有:0.9、1.0、1.1、2,我们现在使用最广泛的是1.1版本。0.9版本目前已经很少使用,该版本在请求时不会携带版本号并且该版本不支持POST;自1.0版本就开始支持在请求时附加HTTP协议的版本号,经过修正又出现了1.1版本,这个版本目前使用最广泛,而HTTP /1.1优于HTTP /1.0的部分主要有:
HTTP协议有request和response,其中request由客户端发出请求,response由服务端返回。如下:
通过抓包软件我们可以很详细的看到客户端请求的整个过程,常用的抓包软件有:Burpsuite、Fiddler等,这里我们使用Burpsuite来演示,首先打开burpsuite然后在浏览器端设置好代理,抓取的HTTP包:
客户端向ip.cn发送了一个HTTP请求,服务端返回:
从返回包中可以看到服务端返回了一个200标识码,在HTTP中不同的标识码有不同的含义,下面就简单介绍一下:
·2xx成功——请求已成功被服务器接收、理解、并接受
·4xx请求错误——请求含有词法错误或者无法被执行
·5xx服务器错误——服务器在处理某个正确请求时发生错误
我们经常会见到的几种标识码有:200(请求成功)、302(请求跳转)、404(请求资源不存在)、403(权限不足)、401(未授权)、405(请求的方式不允许)、500(内部服务器错误)、502(网关错误)、503(服务不可用)如果希望了解更详细的状态码信息可以参考RFC2616中的第十节Status Code Definitions(http://www.rfc-editor.org/rfc/rfc2616.pdf)
在错误代码405中有一个名词“请求方式”,这里的请求方式就是:
GET就是一种请求方式,同样的还有POST、OPTIONS、PUT、MOVE、DELETE、TRACE,关于这些方式的详细介绍不展开有兴趣可以自行百度。其实在安全测试的过程中,我们通常会去检查目标服务器所支持的HTTP请求方法,一般情况下服务器应该只允许GET、POST方式,也建议使用GET、POST方法,同时禁用那些不安全的HTTP方法。当然也有人说,你们一直都说XXX不好会导致安全问题,实际案例中真的有类似的情况发生吗?下面就说一起因为服务器开启了不安全的HTTP方法导致的一起安全事件。
我们都知道一个非常经典的漏洞:服务器存在允许PUT方式和MOVE方式,这时我们可以通过PUT方式传一个webshell.txt然后通过MOVE方式结合解析漏洞这样就可以很快的拿到网站的webshell。即使现在存在这种问题的服务器以及很少,但是还是发现了某台服务器存在该漏洞并且已经被多名黑客入侵:
可以看到黑客首先PUT了一个webshell的文本文件然后结合IIS6的解析漏洞成功的拿下了服务器。同时在进行取证的过程中还发现服务器被黑客上传的大量的提权文件、木马文件。发现服务器中被黑客建立了一个隐藏账号:$b*b*
可以看到至少在15年的12月份就已经被黑客入侵,为了不打草惊蛇我没有更改黑客隐藏账号的密码,因为黑客的账号不在线所以不能通过WCE直接读取,通过导出系统中的sam文件和system文件然后利用samdump2导出账号以及密码hash然后利用彩虹表进行破解:
dump出黑客的密码hash,通过在线彩虹表破解得出密码:
登陆黑客账号,发现桌面有多款恶意攻击,其中存在一款SSH爆破工具:
在shell.txt中发现了黑客所使用的服务器(或者肉鸡之一):
下载cs(二进制)文件,然后执行cs文件,反向追踪过程中该地址已经失效了所以不能准确判断cs文件的具体功能,猜测应该是Linux下的远控木马或者DDoS木马。
有时候我们会在HTTP请求包中看到这么一个字段:X-Forwarded-For:ip,proxy1,proxy2…那么这个字段究竟是干嘛的呢?
简单来说X-Forwarded-For就是用来记录客户端的IP的,例如我的IP是:8.8.8.8那么HTTP就会通过X-Forwarded-For:8.8.8.8将我的IP传给服务端。
那么其中的proxyN又是什么呢?有时候我们的请求会通过一层或者多层代理,proxy就是用来记录代理IP的,这样理论上服务器就可以获取你数据包的流经路径以及真实IP。但是,实施情况是因为X-Forwarded-For是在HTTP请求数据包中,而请求包是位于客户端由客户端发起也就是说这个数据包我们是完全可控的,如果后端程序依靠X-Forwarded-For字段值来判断用户IP而进行下一步操作的话那么就会导致安全问题。
假设场景1:现在存在某私有系统,因为业务特殊性,只允许给公司某固定IP用户可访问,如果后端代码是通过X-Forwarded-For来获取用户IP。
假设场景2:投票系统,通过X-Forwarded-For来判断用户是否进行多次投票。
假设场景3:某些web系统会通过X-Forwarded-For来获取用户IP,进而展示在页面上(常见于各种CMS后台)
场景很多不一一列举,接下来谈谈三种场景可能产生的安全问题。
场景1:我们可以通过在请求包中伪造IP来绕过限制登录敏感系统,通过Burpsuite拦截数据包之后更改X-Forwarded-For为允许的IP地址即可成功绕过限制;
场景2:拦截数据包---发送数据包至intruder模块,之后设置X-Forwarded-For的值为变量,轻则可以进行批量投票,重则导致严重的安全问题。
接下来就用一个实例来演示怎么快速、批量找0day。在php中通过会使用$_SERVER["HTTP_CLIENT_IP"]来获取IP,我们的思路就是在github中搜索$_SERVER["HTTP_CLIENT_IP"],然后审计代码,如果代码将获取的IP带入了数据库并且没有经过过滤,或者程序过滤了但是存在Bypass的可能性,那么这样我们就成功的找到了一个注入漏洞。
通过github搜索到某程序,其中的get_ip.php代码如下:
通过PHP中的$_SERVER全局变量中的不同参数获取IP,其中HTTP_CLIENT_IP也是可以通过HTTP头伪造的。这段代码很简单,获取了$ip并且这个值我们是可控的,接下来我们就要找这个变量是否被带入了数据库。
因为这个获取IP的功能是单个PHP的文件,所以如果程序需要调用这个功能肯定会进行include,所以只需要搜索:include 'get_ip.php'最终搜索include_once 'get_ip.php';发现krate.php调用了该php文件:
带入了我们可控的变量ip并且没有做任何过滤即带入了数据库进行查询,所以这是一个典型的注入漏洞。整个过程持续的时间5分钟不到,这样我们就在5分钟之内成功发掘了一枚0day。
场景3:如果没有对用户的IP进行数据校验或者过滤,那么可能会导致XSS的产生。
获取用户IP没有任何的过滤,直接echo,导致XSS产生。
HTTP使用广泛,正因为如此我们才更应该注重与其相关的安全问题与其相关的防护措施。本文仅仅是对部分HTTP相关的安全问题进行讨论与披露,也仅起到了一个抛砖引玉的作用。
本文主要介绍了HTTP协议及一些常见的安全问题,想要了解更多网络信息安全技术请关注i春秋社区。
以上是关于网络信息安全技术HTTP协议简介与web安全的主要内容,如果未能解决你的问题,请参考以下文章
网络工程师笔记-网络安全技术
JavaWeb:01——Web与HTTP协议简介
信息安全技术及应用 互联网安全协议
计算机网络-----http和https的区别与联系
软考信息安全工程师应用技术考试大纲
创作赢红包网络安全——传输层安全协议