web(xss漏洞作业)

web安全作业(xss漏洞)

需要掌握的知识

  1. XSS漏洞(原理、分类、危害、常用的payload)
  2. XSS平台的搭建与使用

理论作业

1.xss 漏洞原理?

2.XSS的类型?

3.反射型XSS和存储型XSS的区别?

4.XSS的攻击过程?

5.XSS常用的payload构造方法?

1.原理:攻击者在有漏洞的前端页面嵌入恶意代码,导致受害者访问页面时不知情的情况下触发恶意代码,获取受害者关键信息。
其本质上还是对输入输出的过滤限制不严格,导致精心构造的恶意脚本输入后,在前端被当做有效代码并执行。

2.可以分为反射型,存储型,DOM型

3.区别:
反射型xss与服务端交互,一次性,又称非持久型xss
存储型又叫持久型xss,攻击脚本将被永久地放在目标服务器的数据库或文件中,具有很高的隐蔽性

4.xss攻击过程:用户请求一个经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。

5.常见payload构造方法:
' onclick="alert('xss')"
'><img src="#" onmuouseover="alert('xss')">
"><img src=1 onerror=alert("xss")>
<script>alert(1)</script>
<svg onload=alert(1)>
<a href=javascript:alert(1)>
onclick=alert(1);

实践作业

任务1:完成dvwa的XSS实验

任务2:完成pikachu的(反射型XSS、存储型XSS、DOM型XSS)XSS实验

任务3:找到book网站的XSS漏洞

任务4:xss-labs-master靶场练习

任务一 dvwa的xss实验

low级别xss

Reflected xss

源代码:

fig:

可以看到low级别只判断了name参数是否为空,并没有对name参数做任何过滤和检查,存在非常明显的xss漏洞

所以我们输入 <script> alert('goodevenning') </script>,直接执行我们的js代码

fig:

fig:

Stored xss

源代码:

fig:

trim(string,charlist) : 移除string字符两侧的预定义字符,预定义字符包括\t 、 \n 、\x0B 、\r以及空格,可选参数charlist支持添加额外需要删除的字符

stripslashes(string): 去除掉string字符的反斜杠\

mysqli_real_escape_string(string,connection) :函数会对字符串string中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义。

GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。

可以看出,low级别的代码对我们输入的message和name并没有进行XSS过滤,而且数据存储在数据库中,存在比较明显的存储型XSS漏洞

我们输入 Twilight 和 <script>alert('sparkle')</script>,可以看到,我们的js代码立即就执行了

fig:

fig:

DOM xss

源代码:

fig:

可见low级别没有任何的保护性措施,页面对default参数没有任何的过滤

所以构造xss代码然后回车访问即可

xss_d/?default=<script>alert('Twilight Sparkle')</script>fig:

fig:

medium级别xss

Reflected xss

源代码:

fig:

pre元素可定义预格式化的文本。被包围在pre元素中的文本通常会保留空格和换行符,而文本也会呈现为等宽字体。

可以看到该级别的代码只是在low级别上增加了对script的过滤,并没有多大用,可以直接大写绕过,也可以换标签

<SCRIPT>alert('暮光闪闪')</SCRIPT>

fig:

然后看网页代码发现,虽然躲过了过滤,但是最后输出的却是小写

fig:

Stored xss

源代码:

fig:

addslashes(string) :函数返回在预定义字符之前添加反斜杠的字符串,预定义字符 ' 、" 、\ 、NULL

strip_tags(string) :函数剥去string字符串中的 HTML、XML 以及 PHP 的标签

htmlspecialchars(string): 把预定义的字符 "<" (小于)、 ">" (大于)、& 、‘’、“” 转换为 HTML 实体,防止浏览器将其作为HTML元素

当我们再次输入1 和 <script>alert('hack')</script>,strip_tags函数把<script>标签给剥除了,addslashes函数把 ' 转义成了 \ '

fig:

在操作之前,先去数据库删去之前插入的数据

fig:

虽然message参数把xss都给过滤了,但是name参数只过滤了<script>标签,唯一一点就是name参数有长度限制,最大长度为10

所以我们选择抓包

fig:

修改经过url编码后的<script>al为%3CSCRIPT%3Ealert('hack')%3C%2FSCRIPT%3E

放包后就可以看到

fig:

DOM xss

源代码:

fig:

可以看到,medium级别的代码先检查了default参数是否为空,如果不为空则将default等于获取到的default值。这里还使用了stripos 用于检测default值中是否有 <script> ,如果有的话,则将 default=English 。

很明显,这里过滤了<script> (不区分大小写),那么我们可以使用

<imgsrc=1 onerror=('hack')>

然而没有弹窗,查看网页代码发现确实插入到value,但是没有插入到option标签的值中,所以img没有发挥任何作用

fig:

因此要先闭合之前的标签,构造语句:

<option value=' " + lang + " '> " + decodeURI(lang) + " </option>

default=></option><img src=1 onerror=alert("fluttershy")>

结果还是没有执行,因为</option>闭合了option标签,所以img没有插入,只插入了>

于是我们继续构造语句去闭合select标签,这下我们的img标签就是独立的一条语句了

default= ></option></select><img src=1 onerror=alert('fluttershy')>成功插入并弹窗

fig:

high级别xss

Reflected xss

源代码:

fig:

preg_replace( '/<(.)s(.)c(.)r(.)i(.)p(.)t/i', '', $_GET[ 'name' ] ); 该句使用正则表达式过滤,*代表一个或多个任意字符,i不区分大小写。因此只能使用新标签img,body等标签的事件或者iframe等标签的src注入恶意js代码

输入<img src=1 onerror=alert("Sunset-Shimmer")>

意思是,当图片显示错误时,然后执行 alert('hack') ,这里我们的src=1肯定显示错误啊,所以就执行alert语句。

fig:

Stored xss

源代码:

fig:

相比medium,只是在name参数处用了正则表达式过滤而已,依然可以抓包修改,不过要用img标签

<img src=1 onerror=alert('rainbow-dash')>

经过URL编码后

%3Cimg%20src%3D1%20%20onerror%3Dalert('rainbow-dash')%3E%20%0A%0A

接着放包就可以看到,当然搞完后要去数据库把它删了

fig:

DOM xss

源代码:

fig:

可以看出用了白名单,必须有其中一个才行,但是只检测default参数,所以我们双参数绕过即可

default=English&=<script>alert('startlight-glimmer')</script>

fig:

任务2:完成pikachu的XSS实验

反射型xss(get)

首先随便输入一个试试,看有没有过滤什么字符

fig:

发现没有过滤什么便插入js语句,这里有长度限制,可以F12看网页源码能不能修改长度,不能再抓包

fig:

改成100后就直接输入语句即可,<script>alert("Apple-Jack")</script>fig:

fig:

反射型xss(post)

登陆密码admin,123456

然后和上面一样的操作

直接输入<script>alert("my-little-pony")</script>fig:

虽然这个页面有xss漏洞,但是由于是POST方式,我们不能把嵌入到url中,所以我们需要换一种思路去利用该类型的漏洞。

xss反射型(post)利用方式

  • 攻击者伪造表单自动提交页面
  • 用户request伪造页面,触发表单
  • 页面js自动post表单数据,触发xss。访问存在post型xss漏洞的网站
  • 执行js窃取cookie
  • 攻击者利用cookie伪造用户登录,造成危害

存储型xss

步骤与之前一样第一步插入特殊字符看是否有过滤,第二步直接插入完整的js代码

<script>alert("Pinkie-Pie")</script>

fig:

DOM型xss

DOM可以简单理解为一个访问HTML的标准的编程接口,可以使得js通过该接口对整个HTML界面进行各种操作,并且DOM是前端的操作不会涉及到后端。

操作和之前差不多,先输入特殊字符看有没有过滤

fig:

发现没啥回显,输入123看下网页代码

fig:

提示说:

可以看到这是一段js代码并且调用了dom中getElementById获取到了标签 Id 为 text的内容赋值给str,然后又把 str 的内容通过字符串拼接的方式写到了 a 标签的 href 属性中,a标签会写到 Id 为 dom的 div 标签中。

输入的内容放在a标签内,没编码(由第一个输入验证的),是双引号

我们可以尝试闭合的方式构造一个我们想要的payload(javascript:alert("rethym"))(#' onclick=alert("xss")>)

点击what do you see?

fig:

  • DOM型xss-x

先测试过滤,结果有点奇怪,输入123看网页代码,发现和上一个差不多

payload一样

任务3:找到book网站的XSS漏洞

在签写留言处,有xss漏洞,可以通过网页源码看出

在内容框中插入<script>alert("xss")</script>

留言成功后,网页返回到查看留言的地方时会出现弹窗,是存储型xss

fig:

在作者处插入<script>alert("xss")</script>也可以,img标签失败了,估计标题处也是,都是插入到数据库的存储型xss漏洞

fig:

任务4:xss-labs-master靶场练习

这个之后用新文件写在一起,这里不做展示

posted @   zdytom  阅读(224)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示