一、HTTP协议
1、HTTP
什么是HTTP?
超文本传输协议,HTTP是基于B/S架构进行通信的,而HTTP的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要是Web浏览器,例如Firefox、InternetExplorer、Google chrome、Safari、Opera等
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。
HTTP的特性
(1)客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。
(2)HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力,每个请求都是独立的。就是网页一关闭,浏览器和服务端的连接就会断开,下次打开网页又要重新连接,服务器无法从你一打开的连接上恢复上一次的会话,即HTTP协议自身不对请求和响应之间的通信状态进行保存。
(3)HTTP目前支持持久连接,在HTTP /0.9和1.0中,连接在单个请求/响应对之后关闭。在HTTP /1.1中,引入了保持活动机制,其中连接可以重用于多个请求。持久连接表示使用同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法。即当客户端发送另一个请求时,它会使用同一个连接。这一直继续到客户端或服务器端认为会话已经结束,其中一方中断连接。
二、注入漏洞
1、什么是SQL注入
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行指定的SQL语句。具体来说,它是利用现有应用程序,将SQL语句注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入SQL语句得到一个存在安全漏洞的网站上的数据,而不是按照设计者意图去执行SQL语句。
2、注入攻击的两大关键条件
(1)、用户可以控制输入;
(2)、原本要执行的代码拼接了用户输入的数据。
三、xss漏洞
xss(cross site script)跨站脚本攻击,指的是攻击者往web页面插入恶意脚本代码,当用户浏览时,嵌入web页面里的脚本代码就会执行,从而达到恶意攻击用户的特殊目的
漏洞原因:
生成html过程中,html语法中含有特殊意义的字符(元字符)没有被正确处理,服务器端没有对用户输入进行安全方面的校验,攻击者很容易通过正常输入手段,夹带一些恶意html代码,当受害者的浏览器访问目标服务器上被恶意注入脚本的页面后,由于它对目标服务器的信任,这段恶意脚本的执行不会受到阻碍,因此,受害者的cookie被窃取,受害者服务器被控制,简单的来说,就是太相信用户的输入,没有做过滤,没有防御
漏洞危害:
1、窃取用户cookie
2、通过javascript篡改网页
3、篡改网页
4、控制用户浏览器
xss类型:
1、反射型:
通过将恶意脚本代码插入到URL中,当URL被打开是,恶意代码被HTML解析,运行
特点:非持久性,必须是受害者点击后才能引起
2、存储型:
攻击者发现一个存在xss漏洞的借口或页面后构造一个恶意的html脚本(payload),将其插入到页面,存储到服务器数据库里.使得所有浏览该页面的用户都受到安全威胁
特点:持久性,危害更大
3、DOM型:
dom就是一个树状的模型,你可以编写Javascript代码根据dom一层一层的节点,去遍历/获取/修改对应的节点,对象,值。简单去理解就是因为他输出点在DOM。dom - xss是通过url传入参数去控制触发的)分析完dom-xss之后,再说说存储型xss,其实也很好理解,存储型xss,自然就是存入了数据库,再取出来,导致的xss。
反射型xss实际上是包括了dom - xss了,关键点仍然是在通过url控制了页面的输出(dom-xss也类似,只因为输出地点不同而导致结果不一致)。
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞
在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。
也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
四、SSRF漏洞
1、什么是SSRF
服务器端请求伪造(Server-Side Request Forgery, SSRF)
攻击的目标是从外网无法访问的内部系统
Web应用脚本提供了从其他服务器应用获得数据的功能,但没有对目标地址进行过滤和限制
可能出现的地方:
**社交分享功能:**获取超链接的标题等内容进行显示
**转码服务:**通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
**在线翻译:**给网址翻译对应网页的内容
**图片加载/下载:**例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片
**图片/文章收藏功能:**主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验
**云服务厂商:**它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试
网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作
**数据库内置功能:**数据库的比如mongodb的copyDatabase函数
**邮件系统:**比如接收邮件服务器地址
编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等
未公开的api实现以及其他扩展调用URL的功能:可以利用google 语法加上这些关键字去寻找SSRF漏洞
一些的url中的关键字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……
从远程服务器请求资源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php)
常见的缺陷函数
PHP:file_get_contents、fsockopen、curl_exec等
五、CSRF漏洞
CSRF即跨站请求攻击。简单的说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作(如发邮件,发消息,甚至财产操作(如转账和购买商品))。因为浏览器之前认证过,所以被访问的站点会觉得是这是真正的用户操作而去运行。
这就利用了web中用户身份认证验证的一个漏洞:简单的身份验证仅仅能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
其实可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包含:以你的名义发送邮件;发消息;盗取你的账号;甚至于购买商品、虚拟货币转账…造成的问题包含个人隐私泄露以及财产安全。
CSRF攻击攻击原理及过程如下:
1、用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A
2、在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3、用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
4、网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
5、浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。