web应用程序及其所有构成组件应部署检查“所有类型的用户输入”的程序来实
行边界确认,具体而言:
1。采用表单处理程序的输入确认机制,检查用户在登录阶段潜在的恶意输入;(XSS过滤步骤应放在URL解码之后,以防止攻击者采用多重嵌套的URL编码,逃避检测);
在服务器本地磁盘上的web应用程序审计日志应妥善(隐秘)存放并设
置密码以及访问权限,
甚至禁止通过内网访问,或者将其移动至“移动存储介质”,必要时,
用非连入网络的单机保存和维护
2。金融业务类web应用程序(如网络银行)中特定账户的转入
及转出资金数量异常;
3。普通用户无法查看或修改的请求数据被更改;4。请求或者查询中包含任何标准(或公认的)攻击字符串注
入;
5。自定义的警报标准(取决于web应用的安全功能是否支持)
甚至包含:
cookie中特定参数被修改,利用浏览器代理工具修改HTTP请求或隐藏表单字段时,
都有被检测出的风险;
管理应用程序 :web应用程序的管理员登录页面(常应用于论坛,博客等整站程序的后台)的验证机制薄弱且存在漏
洞,导致(黑客)可以获取webshell甚至cmdshell,找出管理后台的地址就是关键所在;
换句话说,当其他用户的web浏览器访问一个被注入恶意HTML代码并存储显示的页面时,这些有漏洞的浏览器会执行其中的恶意 JavaScript脚本部分,造成:
1。访问非预期的第三方挂马站点(术语“XSS跨站脚本”由此而生);这个漏洞是由于令牌仅与会话本身相关联,而不与账户密码相关联的设计缺陷导致的。
2。不同的 web 服务器以及 web 应用程序平台,使用不同前缀的会话令牌名称,可用以识别目标站点采用
的相关技术,例如:
JSESSIONID(Java 平台);ASPSESSIONID(Microsoft IIS web 服务器);
ASP.NET_sessionId(Microsoft ASP.NET);
CFID / CFTOKEN(cold fusion);PHPSESSID(PHP)。这是最准确有效识别目标服务器采用的开发技术的办法,即使目标返回错误的页面被自定义,或者采
用其他手段来隐藏相关的信息。
隐藏表单字段,URL 查询字符串,以及HTTP cookie 是常见的三个传送会话令牌的区域。这些区域的内容可以使用 burp Intruder 或者其他浏览器代理软件来查看,修改。
当同一个用户在不同时间请求相资源时,客户端(通常是web浏览器)在HTTP请求中
携带该请求头,用以向服务端(通常是web服务器)说明:最近一次收到的上个相同
资源的时间。
服务端将该时间(If-Modified-Since的值)的资源状态与服务器当前系统时间的资
源状态作比较;
如果资源没有更新,则服务器在随后的HTTP响应将第一行第2项的数字状态码置为
304,并且响应体为空,表明要客户端直接读取保存在本地缓存的资源副本。
如果资源在这段时间已更新,则服务端会在响应体中包含相应的更新资源。这样不但
可以提升其它用户端访问web站点的效率,速度;同时也减轻服务器处理与传输大量
相同资源的负荷 。
表示发出本次请求的宿主页面对应的URL。例如用户因为单击某页面的超链接,则产生的HTTP请求第
一行第2项就是包含目标资源的URL(不含HOST值的非完整URL)
Referer 的值就是超链接所在(宿主)页面的完整URL。由于Mozilla 的 Netscape 浏览器是在万维网发展早期阶段占主导地位的web浏览器,且首次
使用该字段 ;
当时的其它浏览器厂商为了让web站点与用户相信其产品与Mozilla的标准兼容,均使用带 Mozilla值的 user-Agent 消息头。
这个不成文规矩(或历史原因)延续到现在,导致多数浏览器生成的HTTP请求都带有Mozilla
值的 user-Agent消息头。
用于标识响应主体内容(资源)的有效时间。在这个时间之前,浏览器可以使用该资源在本地缓存
的副本;
如果响应中的 Date 消息头(即服务器上的系统时间)晚于 Expires的值,可能表示该资源已有更
新版本:
服务器会将响应消息头中的 Cache-control 与 Pragma 消息头的值置为 no-cache ,指示浏览器
不要读取本地缓存中的旧版资源,并在响应体中发送新版资源。
当响应第一行第2项的状态码为3xx 时,该消息头可能包含:将之前的客户端请求重定向至何处的
信息。
具体而言,当状态码为 301 Moved Permanently 时,将浏览器永久重定向至 Location字段指示
的URL。
当状态码为 302 Found 时,仅将本次浏览器的请求URL重定向至 Location字段指示的URL;但在
后续的客户端请求中不会重定向。
将该 cookies 的值发送给客户端,客服端在随后的请求中的 cookies 消息头中携带同样的
值,服务端根据该值来为每个客户端提供个性化以及自定义的web页面元素,功能设置,或其
它隐私的信息等。
或之前客户端请求中的 Authorization 消息头的值与服务器所支持的内置HTTP身
份验证的证书类型不符,则服务器将响应第一行第2项的状态码置为401,表示之前
的请求错误,同时将该消息头的值置为服务器支持的内置HTTP身份验证类型,用以
告诉客户端重新发送包含正确证书类型的请求。
1。服务器采用 set-cookie 消息头在响应中发布 cookie,cookie一般由 “名 / 值对” 构成,注
意其不包含任何空字符;也可仅由不含空字符的字符串组成;
2。多数情况中,客户端自动在每次请求的 cookie 消息头中携带,而请求方法,请求体,请求的部
分URL等参数则需由用户或应用程序指定;
3。服务器可在响应中使用多个 set-cookie 字段发布多个 cookie ;客户端可在请求中用一
个 cookie字段携带所有 cookie,但不同 cookie 之间需用分号隔开;
4。只有服务器发布的 set-cookie 字段可设置除 cookie 值本身外的其它参数,用以控制或限
定 cookie 的属性与浏览器处理它们的方式;
expires:指定了 cookie 的有效时间。浏览器在本地磁盘中保
存 cookie ,意味着可重复使用 cookie,直到有效日为止。
当不含 expires 参数时,该 cookie 为一次性使用,即不会
保存在本地磁盘,而且仅在当前浏览器与服务器的会话中有
效,重新建立会话即失效(例如重启浏览器进程等)
指定 cookie 的有效域。设置该参数后,即便位于有效域外的
攻击者劫持到 cookie ,也无法加以利用。
指定 cookie 的有效URL路径。该 cookie 在站点的其它URL中使用
无效。
设置该参数表示禁止通过客户端 JavaScript 脚本代码直
接访问 cookie。
表示将上个请求重定向至响应的 location 消息头指定的URL中,并且
往后的请求均会访问新的URL(永久重定向)
表示仅将上个请求重定向至响应的 location 消息头指定的URL中,并且往后的请求不会被重
定向(暂时重定向)
表示客户端提交了一个无效的HTTP请求(通常是通过浏览器地址栏,或其它方式修
改了请求URL的原因,例如插入空字符,或在结尾加上类似撇号,连字符等攻击字
符串来尝试SQL注入)
服务器要求进行HTTP身份验证,它会在响应的 www-Authenticate 消息头中指出其
支持那种验证类型。客户端应重新按要求发送验证请求。
所请求的URL不支持请求使用的方法。例如请求禁止 put 方法的URL则会返
回该状态码。
表示请求体的内容过长,无法处理(通常意味着目标站点存
在某种缓冲区溢出漏洞,但已被修补或者屏蔽)
表示服务器处理请求时遇到错误,并且web应用程序无法继续处理该
请求。此时应检查该响应的其余部分来了解错误原因。
表示web服务器暂时无法或没空响应本次请求,或者服务器忙碌,或者
正在维护,或者到本地的物理线路通信问题等。
典型 web 应用程序功能 该功能对应的可能漏洞列表 (目标站点的 web 应用程序是否具备该功能)
(尝试对目标站点发起相应的攻击)
客户端确认功能 可能存在服务器没有采用确认检查的漏洞
数据库交互功能 可能存在各种SQL注入漏洞
文件上传与下载功能 可能存在路径遍历漏洞,存储型跨站脚本漏洞
显示用户提交的数据的功能(如论坛) 可能存在跨站脚本漏洞
动态重定向功能 尝试执行重定向与消息头注入攻击
社交网络功能 尝试执行用户名枚举攻击;可能存在存储型跨站脚本漏洞
登录功能 尝试执行用户名枚举攻击或者蛮力攻击
(基于暴力破解或者字典文件,彩虹表破解);可能存在弱口令漏洞
多阶段登录功能。 可能存在对应的登录(逻辑)漏洞
会话状态功能。 尝试进行推测会话令牌的攻击
访问控制功能。 尝试横向与纵向提权
用户伪装功能。 尝试提权
使用明文通信(漏洞)。 尝试会会话劫持,收集证书与其它敏感数据
站外链接(友情链接)功能。 尝试 HTTP Referer 字段注入攻击
使用第三方开源或商业的现成 web 应用程
序组件,模块,对第三方组件已知的漏洞进行
相应攻击
电子邮件交互功能。 尝试电子邮件命令注入攻击
【注入攻击基础】
只需查找 HTML页面源代码的相应字符串来定位,并且使用 burp suite 来查看,修改隐藏表单字段与重新启用元 素。
URL 参数,如查询字符串:通常可在浏览器地址栏中直接修改,但在 burp suite 中修改更直观方便。另外,对于一些使用“表述性状态转移”与将查询字符串转换成静态结果安全显示在浏览器地址栏的 web 应用程序,以burp 的代理来修改会更有效。
效果是欺骗某些信任此字段(以此字段为判断依据)的 web 应用程序。
强调一点:若直接修改已加密的原始数据散列值发送,会导致数据被破坏性修改,使服务器或者 web 应用程序无
法还原明文,导致攻击失败。
参考专题:一种加密 / 模糊数据 的实现―― ASP.NET viewState
有时只需设置浏览器禁用 Javascript 即可绕过该控件,或者用 burp 删除 / 修改 Javascript 中执行安全验
证的代码部分,再行发送即可。
攻击者可以利用控件的漏洞或者采用各种方式绕过控件。对于后者,如果在服务器端没有部署额外的输入检
查,则 web 应用程序的服务端部分“会以不安全的行为”来处理这些输入的数据,从而达到攻击者的目
的。
提高用户访问 / 登录站点时的速度体验。(对于合法输入字符而言)减少输入数据在服务端进行检查,并
回传客户端的时间开销。
如果不采用客户端控件,检查并通知客户端更正一个非法输入的字符需要重复向服务器发送请求进行检查,
再次加载相同页面供用户输入。这不仅增加多余的数据来回传输时间,也增加服务器的负担(假设服务器需
在本机给每位用户进行检查)。