前景提要:
Web发展:
静态 → 动态:应用程序、数据库造成每个人看到的内容不同、根据用户输入返回不同结果;
攻击面:
基本就是 web application、database、browser这种。主要就是因为程序猿理想化的用户,提交了一些千奇百怪的请求,恶意的、意想不到的各种各样的请求,造成了和缓冲区溢出一样的结果,然后就被恶意的拿到了shell。
HTTP协议基础:
明文协议:没有内建的机密性机制、在网路节点抓包嗅探,可以看到所有的明文信息;
HTTPS只能在传输过程中,提高 传输层安全。HTTPS也不是不可以被侦听。中间人模式就可以破这种安全。
公钥加密私钥解密的HTTPS,请求过程:服务器端把自己的公钥发送给客户端,客户端把生成的对称密钥用这个公钥加密起来,发送回服务器端,服务器端用私钥查看。之后的通信还是使用客户端生成的这个对称密钥。现在都用AES的这种加密,确实暴力破解做起来有难度。
BUT攻击人自己生成一个伪造CA,与客户端通信,然后自己再与真正的服务器端通信。不用暴力破解,一样可以通过欺骗达到效果,不要过分迷信HTTPS。
7层明文协议:
每一次客户端向服务器端,都是独立的过程。当然这只是排除下层UDP协议来看。
COOKIE:使用cookie实现对客户端进行跟踪。Cookie不能固定,要经常更换才可以。类似工卡。如果cookie混乱就可以进入别人的会话啦。Cookie ≈ session ID 真正的session是在服务器端的,客户端拿到了只是session ID。只要把session ID更改成别人的服务器就会被欺骗啦。
HTTP协议基础:Cycle(一个请求一个响应)
请求/响应 head and body
Header:
Set-Cookie:服务器给客户端sessionID(有被窃取的风险)。
Content-Length:响应body部分的字节长度(暴力破解过程中,可以作为判断破解成功的一个标志)。
Location:重定向用户到另一个页面,可识别身份认证后允许访问的页面。
COOKIE:客户端发给服务器证明用户状态的信息(头=值成对出现)。
Referrer:发起新请求之前的用户位于哪个页面。
服务器基于此头的安全限制(来源A访问可以,来源B访问被限制)很容易被修改绕过。
状态码:判断请求情况
100s:服务器相应的信息,还有后续的处理,没有单独出现,一般伴随其他状态码。这不重要。
200s:请求被服务器成功接收并处理后返回的响应结果;
300s:重定向,通常在身份认证成功后重定向到一个安全页面(301永久重定向,每次访问都跳/302临时性的重定向,比如身份认证后可以跳/304 没改过);
400s:
401:需要身份认证
403:拒绝访问
404:目标未发现,乱请求时候
405:方法不允许
500s:服务器内部出错(503:服务不可用)