1.反射型XSS-get

出现一个这样的页面,直接输入特殊字符,看是否被过滤掉

image-20231128232940236

image-20231128233033393

似乎没啥异常,直接查看源代码,

接着输入测试代码:

1
<script>alert(1)</script>

如下:

image-20231128233451221

结果发现输不下了,接下来就用到了我们浏览器的开发者工具

image-20231128234101696

我们改一下长度限制,改成2000吧,然后再输入

1
<script>alert(1)</script>

结果有了:

image-20231128234416769

2.反射型XSS-Post

映入眼帘的就是登录界面,为了针对性地练习XSS,直接点击提示,得到登陆账号和密码,随即登录

image-20231128234658246

得到的是一个输入框

image-20231128234932447

接下来的解题步骤与get的反射型XSS的一样,

两者的区别在于,get型是以url方式提交数据,而post型是以表单的方式提交数据

也就是说,再上一个get型的题目里我们可以通过url来改变参数利用漏洞,而在这里不可以

3.存储型XSS

1.DOM型XSS

先输入一些特殊字符看是否过滤

1
1''<>&

image-20231129000700819

可以发现并没有什么过滤,然后直接输入

1
<script>alert(1)</script>

直接出现弹窗

image-20231129211212632

2.DOM型XSS-X

点击蓝色字体出现两行字,

image-20231129212001844

查看源代码发现调用的函数domss()中存在XSS漏洞,且是在a标签里的

image-20231129211950656

接下来输入

1
#' onclick='alert(1)'>

点击“让往事随风”,随后就出现了弹窗

image-20231129213134212

4.xss盲打

丝- XSS盲打是个啥

“xss盲打”是指在攻击者对数据提交后展现的后台未知的情况下,网站采用了攻击者插入了带真实攻击功能的xss攻击代码(通常是使用script标签引入远程的js)的数据。当未知后台在展现时没有对这些提交的数据进行过滤,那么后台管理人员在操作时就会触发xss来实现攻击者预定好的“真实攻击功能”。
也就是只有从后台才能看到前端输入的内容,从前端无法判断是否存在xss
原文链接:https://blog.csdn.net/weixin_51446936/article/details/117482606

出现了两个框,随意输入一些信息,出现了“谢谢参与……”,但看不到刚刚所输入的内容,说明已经被存储到后台

image-20231129214237250

接下来我们点击提示,进入所给的网站(在没有提示的情况下,用disearch扫描后台)发现是一个登陆界面,通过爆破得到账号密码登陆后就出现弹窗

image-20231129215423680

5.XSS过滤

输入特殊字符发现没有对它们过滤

image-20231129223622377

输入

1
<script>alert(1)</script>

结果如下,事实证明,确实是对script语句过滤了

image-20231129223854699

查看源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
      </div>
<div class="page-content">

<div id="xssr_main">
<p class="xssr_title">阁下,请问你觉得人生苦短吗?</p>
<form method="get">
<input class="xssr_in" type="text" name="message" />
<input class="xssr_submit" type="submit" name="submit" value="submit" />
</form>
<p>别说这些'>'的话,不要怕,就是干!</p> </div>


</div><!-- /.page-content -->
</div>
</div><!-- /.main-content -->

尝试一下大小写绕过,没问题

image-20231129224615374

6.xss之htmlspecialchars

  • 了解一下什么是htmlspecialchars:

htmlspecialchars()就是把一些预定的字符转换为实体,


预定义的字符是:

&(和号) 成为&

“ (双引号) 成为 "

‘ (单引号) 成为 '

< (小于) 成为 <

> (大于) 成为 >


 在前端显示正常,在后端源代码中则是转换后的字符串,

​ 也就是说:该函数能把预定义的字符串编码后显示在后端,然后再在后端转换为原来的形式显示在前端

htmlspecialchars()常见的有效flag常量:

  • ENT_COMPAT:会转换双引号,不转换单引号

  • ENT_QUOTES:单引号和双引号都转换

  • ENT_NOQUOTES:单双引号都不转换

现在进入靶场:

先输入特殊字符测试是否存在过滤

image-20231130003629421

查看源代码:

image-20231130003731956

显而易见,单引号没有被过滤

然后我们根据a标签插入的herf特性输入测试代码:

1
’ onclick='alert(1)'

image-20231130004234488

1
javascript:alert(document.cookie)

image-20231130004537302

7.XSS之href输出

打开网页,是一个输入框,输入特殊字符,发现对它们过滤了

image-20231130192515060

由于输出在a标签的href属性里面,我们可以使用Javascript协议来执行js

直接输入:

1
Javascript:alert(1)

出现弹窗:

image-20231130193104874

8.XSS之JS

输入”555“,查看源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
$ms='555';
if($ms.length != 0){
if($ms == 'tmac'){
$('#fromjs').text('tmac确实厉害,看那小眼神..')
}else {
// alert($ms);
$('#fromjs').text('无论如何不要放弃心中所爱..')
}

}


</script>

输入tmac,

image-20231130194304746

我们尝试造成闭合,先把前面的script语句闭合,再插入自己的语句

1
a'</script><script>alert(111)</script>

然后弹框出现

image-20231130195112567

更深入的了解:https://www.cnblogs.com/zhaijiahui/p/6928462.html