常见web漏洞学习之xss学习


常见web漏洞学习之xss学习

原理

跨站脚本攻击,就是将恶意代码嵌入到前端js代码中(反射型,DOM型)或是数据库中(存储型)当用户点击或访问就会触发xss代码执行,盗取用户cookies或session

要注意的是可能存在浏览器的影响,会阻止js代码执行

测试流程

  1. 找到注入点
  2. 输入一组“特殊字符+唯一标识字符”,查看返回结果
  3. 源码找到唯一标识字符,判断是否可以构造闭合
  4. 结合绕过方式,执行

分类

反射型,存储型,DOM型

简单来说,反射型就是构造的恶意代码由于过滤不严格,使得嵌入到前端js页面中进行执行

玩玩pikachu靶场

反射型

输入长度被限制了,先将文本框的最大限制20改大些

image-20210713160014148

以get方式提交的,可以直接在url中看到提交的xss

image-20210713160325433

who is ,i don't care!

image-20210713162302066

看一下源码

image-20210713162627176

存储型

payload

<script>alert(document.cookie)</script>

image-20210714152233253

image-20210714152544701

其他用户访问也会触发

kali

image-20210714153107662

区别

反射型数据交互只和前端js代码,没有进行存储,而存储型则是被写入到了后端,其他用户访问也会中招

DOM型

那什么是dom呢?简单来说dom就是通过层次分明的结果组织,来展示HTML标签抽象成代码里的对象,可以管理文档,增删改查规则,是一个HTML标准接口

在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用

image-20210714105849246

而dom型xss用一个例子来讲就是,页面中的”下一页按钮”点击之后并没有url的改变也就是参数没变,而是通过HTML代码中的dom来执行的

输入特殊字符'<">666被过滤为666

image-20210714120425068

查看源码

image-20210714120824574

结合源码构造payload效果为点击弹窗

1
<a href='#' onclick="alert('xss')">'>就让往事都随风,都随风吧</a>

payload

#' onclick="alert('xss')">

点击'>就让往事都随风,都随风吧

image-20210714151950066

绕过方式

大小写绕过

贴一段师傅源码

区分大小写过滤<script>标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//前端 1.html:
<html>
<head lang="en">
<meta charset="UTF-8">
<title>反射型XSS</title>
</head>
<body>
<form action="action4.php" method="post">
<input type="text" name="name" />
<input type="submit" value="提交">
</form>
</body>
</html>

//后端 action4.php:
<?php
$name=$_POST["name"];
if($name!=null){
$name=preg_replace("/<script>/","",$name); //过滤<script>
$name=preg_replace("/<\/script>/","",$name); //过滤</script>
echo $name;
}
?>

嵌套<script>标签绕过

其他源码同上,加了一个i,不区分大小写过滤<script>标签

1
2
$name=preg_replace("/<script>/i","",$name);    //不区分大小写过滤 <script>
$name=preg_replace("/<\/script>/i","",$name); //不区分大小写过滤 </script>

payload<scr<script>ipt>alert('hack')</scr</script>ipt>

过滤所有内容

其他源码同上

1
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] ); //过滤了<script及其之间的所有内容

虽然script标签不能使用了,但img、body等标签的事件或者 iframe 等标签的 src 注入恶意的 js 代码

payload<img src=1 οnerrοr=alert('hack')>

其他继续补充

利用手段

盗取cookie

参考文章

HTML DOM是什么

Pikachu靶场:DOM型XSS以及DOM型XSS-X

DOM型XSS(pikachu)

XSS(跨站脚本)漏洞详解之XSS跨站脚本攻击漏洞的解决


文章作者: l0odrd
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 l0odrd !
  目录