跨站脚本漏洞(XSS)文字部分
·XSS的过滤和绕过(filter&htmlspecialchars)
·XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
·XSS是一种发生在Web前端的漏洞,所以其危害的对象也主要是前端用户
·XSS漏洞可以用来进行钓鱼攻击、钓鱼攻击、前端js挖矿、用户cookie获取。甚至可以结合浏览器自身的漏洞对用户主机进行远程控制等
交互的数据一般不会存在数据库里面,一次性,所见即所得,一般出现在查询类页面等。
交互的数据会被存在数据库里面,永久性存储,一般出现在留言板,注册等页面。
不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出时候产生的问题,一次性也属于反射型。
形成XSS漏洞的主要原因是对程序对输入和输出的控制不够严格,导致“静心构造”的脚本输入后,在疏导前端时被浏览器当做有效代码解析执行从而产生危害。
②输入一组"特殊字符+唯一 识别字符”,点击提交后,查看返回的源码,是否有做对应的处理;
③通过搜索定位到唯一 字符,结合唯一 字符前后语法确认是否可以构造执行js的条件(构造闭合) ;
④提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞;
1.-般查询接容易出现反射型XSS ,留言板容易出现存储型XS ;
2.由于后台可能存在过滤措施构造的script可能会 被过滤掉,而无法生效,或者环境限制了执行 (浏览器 ) ;
GET方式的XSS漏洞更加容易被利用,一般利用方式是将带有跨脚本的URL伪装后发送给目标而POST方式由于是以表单方式提交,无法直接使用URL方式进行攻击,如何利用?
POST是以表单方式在请求体里面提交;反射的 XSS 攻击比存储的XSS 攻击危险性要小,当用户访问特定页面时,这会引起持续的问题,但更为常见。任何从 GET 或 POST 请求获取参数并以某种方式向用户显示该参数的页面都可能面临风险。未能将查询字符串参数视为不受信任的内容的页面可以允许构造恶意 URL。攻击者将在电子邮件、评论部分或论坛中传播这些恶意 URL。由于链接指向用户信任的站点,因此他们更有可能单击它,不知道它会造成什么危害。
在代码评审中,反射的 XSS 漏洞很容易被忽略,因为诱惑是只检查与数据存储交互的代码。检查以下类型的页面时要特别小心:
- 搜索结果- 搜索条件是否显示回用户?是写在页名里吗?你确定它被正确逃脱吗?
- 错误页- 如果您有抱怨输入无效的错误消息,当输入显示回用户时是否正确转义?您的 404 页是否提到要搜索的路径?
- 表单提交- 如果页面 POST 数据,表单提交的任何部分数据是否显示回用户?如果表单提交被拒绝 – 错误页面是否允许注入恶意代码?错误提交的表单是否预先填充了以前提交的值?
我们的示例黑客演示了恶意制作的 GET 请求。但是,应谨慎对待 POST 请求。如果不防止跨站点请求伪造,攻击者可以很容易地构造恶意 POST 请求。即使您确实可以抵御CSRF,攻击者也会经常使用漏洞组合来构建有毒的 POST 请求。
存储型XSS漏洞跟反射型形成的原因一样,不同的是存储型XSS下攻击者可以将脚本注入后台存储起来,构成更加持久的危害,因此存储型XSS也称“永久型”XSS。 漏洞百科
发生在目标网站中目标用户额浏览器层面上,当用户浏览器渲染HTML文档的过程中出现了不被预期的脚本指令执行,XSS就会发生,为不喝层叠样式表的绰号混淆,故将跨站脚本攻击缩写为XSS。一般分为反射型、存储型、DOM型、
通过JavaScript,可以重构整个HTML文档。您可以添加、移除,改变或重排页面上的项目。
要改变页面上的某个东西,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口,炼铜对HTML元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)。
所以,你可以吧DOM理解为一个一个访问HTML的标准编程接口。
<script type= "text/javascript">
x=document.getElementById("myHeader")alert(x.innerHTML)}</script>
<h1 id="myHeader" οnclick="getValue()">这是标题<</h1>
1、大小写,比如:<SCRIPT>aLeRT(111)</sCRIpt>
2、拼凑:<scri<script>pt>alert(111)</scri<script>pt>
3、使用注释进行干扰:<scrip<!--test-->pt>alert(111)</sc<!--test-->ript>
后台过滤了特殊字符,比如<script>标签,但该标签可以被各种编码,后台不一定会过滤,当浏览器对该编码进行识别时,会翻译成正常的标签,从而执行。
<img src=x οnerrοr="alert('xss')"将alert('xss')进行URL编码,可以执行吗
<img src=x οnerrοr="alert%28%27xss%27%29"/>
并不会执行,why?因为这些属性标签并不会正常的解析这些编码
< img src=x οnerrοr= "alert("xss')" />可以把alert( xSS )进行htm|编码
<imgsrc=xοnerrοr="alert('xss')"/>
οnmοuseοver= "alert('xss')" />
注意,将事件标签里面并不会执行<script></script>标签里面的代码
XSS绕过的姿势有很多,取决于你的思路和对前端技术的掌握程度
htmlspecialchars()函数吧预定义的字符转化为HTML实体。
要防止反射的 XSS 攻击,请确保来自 HTTP 请求的任何动态内容不能用于在页面上注入 JavaScript。
网页由 HTML(通常在模板文件中描述)为设计,在呈现页面时将动态内容编织在一起。已存储XSS 攻击利用来自后端数据存储的动态内容的不当处理。攻击者使用可编辑字段插入一些 JavaScript 代码,并在页面加载时对其进行评估。除非您的网站是内容管理系统,否则很少希望用户创作原始 HTML。相反,您应该转义来自数据存储的所有动态内容,以便浏览器知道它应被视为 HTML 标记的内容,而不是原始 HTML。
" |
" |
# |
# |
& |
& |
' |
' |
( |
( |
) |
) |
/ |
/ |
; |
; |
< |
< |
> |
> |
·过滤:根据业务需求进行过滤,比如输入点要求输入手机号,则只允许驶入手机号格式的数字。
·转义:所有输出到前端的数据都根据输出点进行转义,比如输出去到html中进行html实体转义,输入到JS里面进行js转义。