目录

(一)配置环境

(1)phpstudy 的安装

(2)xss-labs 的安装

(二)XSS漏洞的一些基础知识

(1)XSS漏洞的定义

(2)XSS漏洞的原理

(3)XSS漏洞的分类

1、反射型

2、存储型

3、DOM型

(4)XSS 漏洞的验证

(三)xss-labs

(1)第一关

(2)第二关

(3)第三关

(4) 第四关

1、补充知识

2、第四关

(5)第五关

1、补充知识

2、第五关

(6)第六关

(7)第七关

(8)第八关

(9)第九关

(10)第十关

(11)第十一关

(12)第十二关

(13)第十三关

(14)第十四关

1、补充知识

2、第十四关

(15)第十五关

(16) 第十六关

(17)第十七关

(18)第十八关

(19)第十九关和第二十关


(一)配置环境

(1)phpstudy 的安装

这里可以去看看我写的另外一个文章

SQL注入之sqli-labs_清丶酒孤欢ゞ的博客-CSDN博客

这里面详细的讲了phpstudy的安装与搭建。

(2)xss-labs 的安装

mirrors / do0dl3 / xss-labs · GitCode

点击克隆里面的下载源码,随便选一个形式,然后将文件解压到 phpstudy 下的www 目录下

打开 phpstudy 中的 apache ,在浏览器中输入 127.0.0.1/xss-labs-master,如果出现以下图片就是成功搭建了

(二)XSS漏洞的一些基础知识

(1)XSS漏洞的定义

跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意JS代码,当用户浏览该页面时,嵌入Web里面的JS代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!

(2)XSS漏洞的原理

利用我们知道的方法,向web页面插入Js代码,让Js代码可以被浏览器执行,访问该页面的用户则被攻击

(3)XSS漏洞的分类

1、反射型

反射型XSS又称非持久性XSS,这种攻击往往具有一次性。

攻击者通过邮件等形式将包含XSS代码的链接发送给正常用户,当用户点击时,服务器接受该用户的请求并进行处理,然后把带有XSS的代码发送给用户。用户浏览器解析执行代码,触发XSS漏洞。

2、存储型

存储型XSS又称持久型XSS,攻击脚本存储在目标服务器的数据库中,具有更强的隐蔽性。

攻击者在论坛、博客、留言板中,发帖的过程中嵌入XSS攻击代码,帖子被目标服务器存储在数据库中。当用户进行正常访问时,触发XSS代码。

3、DOM型

DOM型XSS全称Document Object Model,使用DOM动态访问更新文档的内容、结构及样式。

HTML标签都是节点,节点组成了节点树。通过HTML DOM 可以对树上的所有节点进行修改。

服务器响应不会处理攻击者脚本,而是用户浏览器处理这个响应时,DOM对象就会处理XSS代码,触发XSS漏洞。

DOM 详解:DOM文档对象模型_谢公子的博客-CSDN博客

(4)XSS 漏洞的验证

我们可以用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做PoC。

POC                漏洞的验证与检测

EXP                漏洞的完整利用工具

shellcode        利用漏洞时,多执行的代码

payload        攻击载荷        功能是建立与目标的连接

<script>alert(/xss/)</script>        弹出一个窗口             常用
<script>confirm('xss')</script>      弹出一个确认框
<script>prompt('xss)</script>        弹出一个输入框

(三)xss-labs

(1)第一关

进入第一关,我们看到他默认name参数为test,并且在页面中显示出来了,我们随便改变参数值,

可以看到相应的发生了变化,再看源码

他将这个参数值直接放到<h2>这个标签里面了,所以我们判断为反射型xss

因为反射型xss 的原理为:攻击者在url 中插入xss 代码,服务端将url 中的xss 代码输出到页面上,攻击者将带有xss 代码的 url发送给用户,用户打开后收到攻击。

这里我们先用一个简单的弹窗代码来尝试一下是否进行了过滤等操作

http://127.0.0.1/xss-labs-master/level1.php?name=<script>alert(1)</script>

<script>是Js 的标签,alert()就是弹出一个对话框,并显示括号里的内容,后面的是闭合符

并且我们再看一眼源代码

发现没有任何过滤。

(2)第二关

我们发现他是get 型,应该还是反射型xss,我们输入test,在源码中可以看到进行了输出,但是当我们用上一关的<script>alert(1)</script>方法,却发现没有成功,我们打开源码

首先可以看到在<h2>标签这里他将‘<’ 和 ’>‘ 进行了编码,而在输入<input>  这个标签中,他是没有被编码的,但是可以看到我们的注入语句被放到了value 值当中,这样浏览器是不会执行我们的注入语句的,所以我们要构造闭合

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

这里的"是为了与value的双引号进行闭合,然后 > 这个符号是为了闭合<input>这个标签从而使得后面的成为HTML中的另一个标签而可以被浏览器执行,// 则是将后面的 "> 进行注释

提交后成功过关。

我们可以进入下载的xss-labs的根目录下的 less-2.php 文件下

我们可以看到之所以在<h2>中 < 和 > 被编码是因为 htmlspecialchars() 这个函数的原因,

参考链接:PHP htmlspecialchars() 函数 (w3school.com.cn)

其实除了使用这种闭合方式也可以使用其他方法,比如以下几种

1、当鼠标经过输入框时就会弹出弹窗

" onmouseover=alert(1)//

2、当鼠标点击输入框时就会弹出弹窗

" onclick=alert(1)//

其实都是一样的,都是构造闭合,再注入一些弹窗代码等

(3)第三关

我们首先依旧是用 poc 试一下,发现并没有成功,我们ctrl + u看一下网页源代码

可以看到他将我们输入的 < 和 > 编码了,我们尝试使用上一关的办法

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

发现依旧不行,然后我们开始,但是我们可以写一个不包含< 和 >的语句,也就是上一关后面补充的法一法二,发现成功过关

我们可以去根目录下看一下源代码

可以看到两处均用了 htmlspecialchars 这个函数

(4) 第四关

1、补充知识

str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)

str_ireplace() 函数不区分大小写进行替换

2、第四关

老规矩,先用poc 试一下,理所当然的没有成功,

第一处进行了尖括号的编码,第二处直接将我们的尖括号删掉了,但是和我们又有什么关系呢,依旧是

" onmouseover=alert(1)//

成功过关

看一眼源代码

(5)第五关

1、补充知识

strtolower() 函数 把所有字符转化为小写

2、第五关

poc看一下这关是什么鬼

他将我们的script 中间插了一个_ 进去,我们尝试使用大小写绕过

<scRipt>alert(1)</script>

不行,再尝试使用闭合

" onmouseover=alert(1)//

on也被替换了,这里可以用伪协议来进行构造

"> <a href=javascript:alert(1)>1</a>//

这里的javascript: 就是javascript伪协议,就是将javascript:后面的代码当JavaScript来执行,并将结果值返回给当前页面。具体请见

javascript伪协议是什么? - html中文网

所以学xss最好要有一点html、js的知识,如果之前没了解过可以多查一查了解一下。

执行后我们点击后面的链接

这个是要手动点的,还有一种直接触发的

"><iframe src=javascript:alert(1)>

但是不会直接跳到下一关,需要你自己改一下URL

成功。看一下源代码

第一行可以看到将我们输入的参数全部小写了,第二行和第三行可以看到他进行了替换

(6)第六关

poc试一下,好像和第五关很像,看不出什么东西,再用伪协议试一下,

发现href 也进行了替换,试一下大小写绕过

"><a hrEf=javascript:alert(1)>xss</a>//

成功,看一下源代码

发现只进行了替换,没有将我们传入的参数转化成小写。

(7)第七关

poc,发现script 直接被替换为空了,大小写绕过尝试,也不行,双写关键词绕过

"><scrscriptipt>alert(1)</scrscriptipt>//

成功,这里是将一个script 插入到另一个script 里面了,会将里面那个script 过滤掉,然后前后合在一起又变成了 script

看一下源代码

先是转换为小写,然后就是许多替换

(8)第八关

这里poc不行,大小写绕过不行,伪协议还是不行,

要先进行html字符实体转换,也就是Unicode转化为ASCII,

HTML字符实体转换,网页字符实体编码 (qqxiuzi.cn)

将转化后的代码复制粘贴过去就行了,点击友情链接就行了

(9)第九关

提示我们链接不合法,我吗先用伪链接试一下,也不行,在后面加上一个真实可访问的链接,如

http://www.baidu.com

javascript:alert(1)http://www.baidu.com

显示出来了,但是script 被替换了,所以对javascript:alert(1)进行html字符实体转换,再一次提交,注意,要再http 前面加上注释符 //

成功,看一下源码

进行了if 判断,如果里面存在 http:// 这个就可以了,所以我们的注入语句后面的 http://www.baidu.com 也可以直接就写 http:// 就可以了

(10)第十关

发现没有输入框,直接在搜索框改,然后发现没有什么反应,我们 打开网页源代码

可以看到这里有几个被隐藏的输入框,type="hidden"  就是隐藏表单的意思,

然后我们看一下哪个可以进行注入

keyword=test&t_link=" type="text" onmouseover=alert(1)// & t_history=" type="text" onmouseover=alert(1)// & t_sort=" type="text" onmouseover=alert(1)//

然后看到页面出现一个输入框,鼠标经过,提示成功,我们看一下网页源代码

可以看到只有t_sort 可以进行注入,看一下源码

也可以发现 t_sort 后面的 value属性有输入

(11)第十一关

和第十关一样,但是有四个隐藏表单,我们依旧尝试上一关代码

keyword=test &t_link=" type="text" onmouseover=alert(1)// &t_history=" type="text" onmouseover=alert(1)// &t_sort=" type="text" onmouseover=alert(1)// &t_ref=" type="text" onmouseover=alert(1)//

不行,被替换了,但是下面那个ref 却没有替换直接输出,而且后面的属性值可以知道这是referer 值,我们直接改referer 值,这里用的是浏览器的插件 ModHeader ,你也可以使用burp suite抓包修改

那个onfocus 和 onclick 一样的用法

上源码

(12)第十二关

这次是 User-Agent了……

然后就是ModHeader 修改UA了

" type="text" onfocus="alert(1)

哦对了,图片就是上一关有了,哦对了,不用的时候把ModHeader 关掉,不然会影响正常使用的

(13)第十三关

cookie 注入,

user=" type="text" onfocus="alert(1)

这里加个user是根据实际情况决定的

他的输入格式是这样,咱们就套一下呗

(14)第十四关

1、补充知识

开启这关之前呢我们要先知道Exif xss

什么是Exif

可交换图像文件格式,是专门为数码相机的照片设定的,可记录数码照片的属性信息和拍摄数据。

比如我们这里随便拿一张照片

右键,点击属性,点详细信息,这里有很多可修改的内容,比如我们修改标题为

'"<script>alert(1)</script>    这里的引号是为了闭合前面的信息

因为有些网站可以读取exif 信息,当传入一张含有恶意信息的图片的时候,就可以触发payload

随便找一个网站,我这里找的是 EXIF Data Viewer

选择文件,将我们事先构造好的图片上传上去,就会有弹窗弹出了,说明我们的恶意代码被执行了,该网站存在这样一个漏洞

如果我们将这个1 替换为cookie 的话,而且我们将这个图片传到某个论坛上面,那么别的用户点击你这张图的时候就会读取Exif 信息,将他们的cookie 发送到我们这里,那么这就变成了一个存储型xss漏洞了,所以危害比较大的,但是这里只是一个反射型的xss

2、第十四关

进入后发现页面中显示错误,我们看一下源码

搜索这个网站发现打不开了,没关系,我们将这个替换成我们用的那个 EXIF data的网址

然后操作和上面一样的了。

(15)第十五关

看一下网页源码

AngularJS ng-include 指令 | 菜鸟教程 (runoob.com)

ng-include 是 angular js 中的东西,其作用相当于php的include函数。这里就

是将1.gif这个文件给包含进来。

ng-include 属性的值可以是一个表达式,返回一个文件名。

默认情况下,包含的文件需要包含在用一个域名下

特别值得注意的几点如下:1.ng-include,如果单纯指定地址,必须要加引号2.ng-include,加载外部html,script标签中的内容不执行3.ng-include,加载外部html中含有style标签样式可以识别

直接构造

?src='level1.php?name=<img src=1 onerror=alert(1)>'

因为这里参数值算是一个地址,所以需要添加引号。

但是level1.php不是一个php文件吗?

这里解释一下

这是因为我们不是单纯的去包含level1.php,而是在后面添加了name参数值的。这就有点像是在访问了该参数值中地址之后把它响应在浏览器端的html文件给包含进来的意思。

然后 onerror 函数的话,是在img 这个标签无法正常执行的时候触发的,所以这里的src 我们随便填一个不存在的地址,就可以触发后面的弹窗了。

onerror 事件 | 菜鸟教程 (runoob.com)

我们看一下level1 构造后的代码

成功过关

(16) 第十六关

ctrl + u 看一下网页源代码,发现有一处位置显现了test,poc 试一下,发现 script 、/、 空格都被编码成同样的空格字符实体了。

所以我们尝试使用一个不包含这些的语句,如我们上一关使用的<img> 标签,这个是单标签

<img%0asrc=1%0aonerror=alert(1)>

因为空格也被编码了,所以我们用空格的url编码%0a 来代替

URL编码对照表_liaonn5的博客-CSDN博客_换行符url编码

成功,看一下源码

第四行就是将空格被编码成字符实体了。

(17)第十七关

这一关中间是一个flash 插件,但是好像没法正常显示出来……

但是没有关系,打开网页源代码

可以看到我们传入的参数被放到 embed这个标签里面的src 值里面了,<embed>标签就是引入一个swf文件到浏览器端,并且它的src属性值没有添加引号,所以不用闭合,可能可以利用,poc 一下

不出意料的被编码成字符实体了,而且我们输入的参数与a连在了一起,作为了一个链接了,我们在前面加上空格试试看

可以看到与src 分离开来了可以尝试构造一个不会被编码成字符实体的语句,如:

level17.php?arg01=a&arg02= onmouseover=alert(1)

还有其他方法,比如onclick 等等

(18)第十八关

这一关和上一关一样的,只是把flash 换成了图片而已,构造的语句都一样

(19)第十九关和第二十关

这里就不写这个解题过程了,主要是因为现在 flash 技术全面停止使用,而且牵扯到的东西太复杂了(绝对不是因为不会哈哈哈),要是真的感兴趣可以自行去了解一下

XSS注入之xss-labs相关推荐

  1. 【渗透测试】XSS注入原理

    目录 XSS注入原理 XSS的危害: XSS分类 XSS平台--漏洞利用 总结 答疑 XSS注入原理 XSS 攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, ...

  2. XSS注入(1)-两个简单测试理解反射型xss注入和存储型xss注入

    XSS注入(1)-两个例子理解反射型xss注入和存储型xss注入 XSS全称 Cross Site Script,为使与css语言重名,所以我们将其称为xss跨站脚本攻击.它指的是恶意攻击者往Web页 ...

  3. web漏洞利用---XSS注入攻击

    XSS漏洞简介 XSS注入漏洞又称为"跨站脚本攻击(Cross Site Scripting)",为了不和层叠样式表(Cascading Style Sheets,CSS)混淆,所 ...

  4. [风一样的创作]防XSS注入攻击

    一.首先大概理解下什么是XSS注入攻击 XSS注入攻击本质上就是通过你服务本身的接口把一些HTML,CSS,JS,SQL语句等内容存储进你的服务里面,一般是数据库里面,这时候就可以通过这些存储进去的内 ...

  5. WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等...

    核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Websh ...

  6. 第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击...

    第三百九十二节,Django+Xadmin打造上线标准的在线教育平台-sql注入攻击,xss攻击,csrf攻击 sql注入攻击 也就是黑客通过表单提交的地方,在表单里输入了sql语句,就是通过SQL语 ...

  7. SQL 登录注入脚本_常见web安全问题,SQL注入、XSS、CSRF,基本原理以及如何防御...

    1.SQL注入 原理: 1).SQL命令可查询.插入.更新.删除等,命令的串接.而以分号字元为不同命 令的区别.(原本的作用是用于SubQuery或作为查询.插入.更新.删除--等 的条件式) 2). ...

  8. XSS 注入漏洞处理

    今年是进入网络安全行业第1年,之前总是道听途说各种漏洞,不以为然..前一阵子才切身体会到了漏洞,嗯,也是自己造成的,就是XSS注入漏洞. 该漏洞的意思是攻击者往 Web 页面里插入恶意 Script ...

  9. php登录框注入,分享一个php的防火墙,拦截SQL注入和xss

    这个是一个一个基于php的防火墙程序,拦截sql注入和xss攻击,无需服务器支持 安装 composer require xielei/waf 使用说明 $waf = new \Xielei\Waf\ ...

  10. Java防止Xss注入json_浅谈 React 中的 XSS 攻击

    作者:陈吉 转发链接:https://mp.weixin.qq.com/s/HweEFh78WXLawyQr_Vsl5g 前言 前端一般会面临 XSS 这样的安全风险,但随着 React 等现代前端框 ...

最新文章

  1. TypeError: only integer scalar arrays can be converted to a scalar index一例
  2. 两种常见挂载Jenkins slave节点的方法
  3. 什么是E-MapReduce
  4. 你有没有遇到过“世外高人”,可以说说吗?
  5. 利用WPF建立自适应窗口大小布局的WinForm窗口
  6. python如何截长图_python+selenium实现长截图
  7. 常用图像处理库都有哪些?
  8. java webservice原理_WebService的工作原理
  9. gamit数据处理—5.遇到的问题
  10. 基于阿里云产品和开源Hudi结合
  11. 流行购车平台易车买车划算吗?
  12. 将html转换为word文档的几种方式
  13. 第八章 磁盘存储器的管理(二)——文件存储空间的管理
  14. 新一届CMO获奖名单公布:人大附中、上海中学霸榜,深圳中学选手夺魁
  15. 命令行登陆北邮校园网
  16. 基于Redis的BloomFilter实现
  17. 【每日一题2019-11-14】-蓝桥杯 prev37 分巧克力
  18. 关于逸马驰骋兄转移数据库的一种方案(记录下)
  19. 人脸识别评价参数之FAR和FRR
  20. 空调压缩机常见故障与检修

热门文章

  1. Android——.pem格式证书转换为.bks
  2. 5分钟带你了解Python中的容器型数据类型--列表1
  3. 怎么用计算机弹大田后生仔,林啟得 《大田后生仔》吉他谱C调吉他弹唱谱
  4. python字典操作首字母与星期的对应_python:第五章 字典与集合作业
  5. python中怎样定位字符串中元素的位置_python查找字符串位置
  6. 基于Opencv的图像处理-高光调整算法
  7. linux硬盘速度测试方法
  8. xavier / acts-as-tree-with-dotted-ids
  9. 一招,提高 Github 成员微信群运营效率
  10. 杠杆炒股亏盈计算方法?