pikachu靶场-xss

XSS漏洞攻击原理

跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

一般XSS可以分为如下几种常见类型:

1.反射性XSS;

2.存储型XSS;

3.DOM型XSS;

XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。

  1. 反射型xss(get)

看到xss输入框,直接跟看到后台要试万能密码一样去试xss一句话

<script>alert('mlws')</script>

限制了输入内容的长度

f12,选择输入框,把最大长度改为100

再次输入代码

或者直接在网址栏修改

  1. 反射型xss(post)

给了提示为post形式

打开提示给了账号密码

进入界面,输入账号密码admin/123456

登录成功后的界面

打开bp进行抓包

输入test点击submit

它会在界面回显你输入的内容,所以可能存在xss漏洞

对message进行修改

payload:

<script>alert("mlws")</script>

payload自动进行了url编码,我们对其进行url编码(也就是对以上的payload进行两次url编码)

在浏览器中打开response

  1. 存储型xss

存储型xss又称持久型xss,攻击脚本将脚本永久的放在目标服务器的数据库或文件中,具有很高的隐蔽性。

攻击方式:常见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。

输入payload:

<script>alert("mlws")</script>

每次打开都会显示弹窗,所以为存储型xss

  1. DOM型xss

输入测试代码

"'<>script

通过what do you see找到script

获取ID为text的值传参给str,str拼接到a标签里面,需要把前面的标签给闭合

设置payload为

'><img src=x onerror=alert(/xss/)>
  1. DOM型xss-x

点击右侧的按钮,就会弹出一句话

找到下面的源码

使用window.location.search获取url的赋值值给str,经过url解码,取出的内容赋值给txss,将txss中的 “+” 替换为 “空格” 赋值给xss,最后将xss拼接到a标签中。和上面的方法相同,payload需要闭合标签。

'><img src=x onmouseover="alert(/xss/)">

需要点击“有些”蓝色文字,显示上面图片那一行

鼠标悬停在这个图片上就会弹出xss

  1. xss之盲打

xss盲打是一种攻击场景。我们输出的payload不会再前端进行输出,当管理员查看时就会遭到xss攻击。

一样输入payload

<script>alert('mlws')</script>

登录后台模拟管理员查看信息

看到xss弹出,因为我用的公共靶场,所以弹得1

弹了两次框,可以看到我们写的xss也在里面

  1. xss之过滤

输入测试的语句

回显如下

过滤掉了script和<>

尝试双写script和大小写绕过(双写无效)

<SCRIPT>alert('mlws')</SCRIPT>
  1. xss之htmlspecialchars

PHP htmlspecialchars() 函数

htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。

预定义的字符是:

  • & (和号)成为 &

  • " (双引号)成为 "

  • ’ (单引号)成为 ’

  • < (小于)成为 <

  • .> (大于)成为 >

用法:htmlspecialchars(string,flags,character-set,double_encode)

示例:
<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
?>

输入测试payload

<SCRIPT>alert('mlws')</SCRIPT>

可以看到<>被转义

只有'(单引号)未被转义

可以直接利用单引号构造payload

#' onclick='alert(1)'

点击蓝色链接成功弹窗

  1. xss之href输出

输入<script>alert(1)</script>进行测试,没法弹窗,查看源代码被转义

尝试伪协议绕过

javascript:alert(/xss/)

成功弹窗

  1. xss之js输出

输入<script>alert(1)</script>测试一下

查看源代码

首先要用’;闭合掉当前的语句,然后插入新语句,然后再用//注释掉老语句遗留下来的’;

payload:

';alert(1);//

成功弹窗

猜你喜欢

转载自blog.csdn.net/qq_29977871/article/details/129493271