xss |
您所在的位置:网站首页 › 替代alert › xss |
XSS原理跨站脚本攻击(Cross Site Scripting 为和CSS(层叠样式表)区分,故简称为XSS)是指恶意攻击者在Web页面中插入恶意javascript代码(也可能包含html代码),当用户浏览网页之时,嵌入其中Web里面的javascript代码会被执行,从而达到恶意攻击用户的目的。初次了解XSS,肯定先从XSS-labs靶场搞起,了解绕过姿势。 下载链接:https://github.com/do0dl3/xss-labs 下载源码后直接搭建在phpstudy的根目录下,在浏览器上访问本地即可搭建成功,搭建成功界面如下 即可开启XSS之旅!!! 第一关第一次进来直接尝试弹窗alert(11) ,第一关没有任何过滤,发现成功绕过!! payload:level1.php?name=alert(11) 先输入 111alert(111) 尝试,发现页面没有任何改变,查看页面源代码,没有过滤,发现可以通过闭合前面的 “ 和 > 就可能成功,再次进行尝试,,发现成功绕过!! 通过闭合 ” > ,闭合后的语句是 alert(222) payload:level2.php?keyword=111">alert(111) 同道理,先输入alert(1111) ,查看网页源代码,发现< > 被转义过滤了 查看关卡3 php代码,发现有htmlspecialchars()函数,作用是把预定义的字符 "" (大于)转换为 HTML 实体,函数详情见:https://www.runoob.com/php/func-string-htmlspecialchars.html 默认是只编码双引号的,而且单引号无论如何都不转义,用 ’ 来闭合,换一种方法有输入框,于是想用onclick点击事件进行触发弹窗,构造payload,点击输入框就成功绕过了。 payload:level3.php?keyword=' onclick=alert(1)// 首先键入alert(1),没有反应,查看页面源代码,发现 直接没有了,猜测是被过滤了,那就闭合 “ 来onclick试一下,发现成功绕过! 查看php代码: level4.php?keyword=" onclick=alert(1)// 首次判断过滤点,直接键入 ‘ “ < > script onclick 查看过滤信息 ,查看网页源代码,查看过滤点,发现过滤 script和onclick,又尝试换大小写绕过,还是不成功,尝试换标签绕过,使用JS伪协议( javascript:alert(1) )绕过,简单说就是把javascript: 后面的代码当成 javascript来执行。 尝试通过闭合 ” 和 < 再加上a标签,JS伪协议,发现成功绕过! ! 查看php源代码: level5.php?keyword=">11// 同理键入 ‘ “ < > script onclick ,查看网页源代码,发现和上一关过滤一样,通过 “ >闭合,试试大小写绕过,发现成功绕过!! level6.php?keyword=">alert(1) 同理键入 ‘ “ < > script onclick href,发现直接把script , on , href都替换为空了,换大小写绕过,还是被替换,那就换双写绕过,发现可以成功绕过!! 查看php源代码: level7.php?keyword=">11// 依旧输入 ‘ “ < > script onclick href,发现该过滤的基本都过滤了,但是输入的内容在a标签里面,href可以自动解码html实体编码,直接试试编码script中的r,发现成功绕过!!! 查看php源代码: payload要输入在文本框内,如果输入在地址栏里必须要进行url编码才可通过。 level8.php?keyword=javasc#114;ipt:alert(1) 输入 ‘ “ < > script onclick href,发现过滤了,使用JS伪协议,输入发现可以成功显示,但是并未成功传入a标签中,显示 ”您的链接不合法?有没有!“ ,我们查一下合法的链接格式,查到合法的URL格式: http(s)://: / ?# 1.协议名:http 或 https 协议; 所以我们猜测应该至少含有 http://:,我们再次尝试JS伪协议+/http://发现过滤了script,使用上关payload+ http://: ,发现成功绕过。 查看php源代码: http:// 前必须要含有注释//,不然不成功 level9.php?keyword=javasc#114;ipt:alert(1)//http:// 进入发现,没有可以进行传参的地方,先随便输入111,查看网页源代码,发现有三个Input被隐藏了。 那通过根据input的name来修改type来看是否可以显示文本框,修改payload为: t_link" type='text'>//&t_history" type='text'>//&t_sort=" type='text'>// 发现成功显示文本框 通过网页源代码,看出是t_sort的文本框被弹出,使用onclick事件,发现成功绕过。 查看php源代码: &t_sort=" type='text' onclick=javascript:alert(12)>// 进去发现和上一关一样,有四个Input被隐藏,像上关一样根据name进行构造,发现是t_sort进行传值,但是并没有什么用,同时发现t_ref的value变成了第10关的网址,猜到大概率是referer. 通过Burpsuite抓包,发现没有referer的值,手动添加referer,payload是第十关的payload,成功绕过!! referer:&t_sort=" type='text' onclick=javascript:alert(12)>// 同十一关,依旧没有文本框,随便输入11之后,查看页面源代码,发现t_ua有显示版本等信息,于是打开Burpsuit抓包。 通过数据包显示,本关通过User-Agent传值,于是修改User-Agent信息里添加onclick事件 即可绕过。 查看php源代码: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0 "type="text" onclick=javascript:alert(1)// 直接查看页面源代码,按照之前的套路,直接burpsuite抓包,盲猜是cookie传参 通过修改cookie,构造文本框,使用onclick事件,成功绕过!! 查看php源代码: Cookie: user=" type='text' onclick=javascript:alert(1)// 一直打不开,一直不出页面,网上说有问题,跳过!! 通过查看网页源代码,发现有一个新发现 ,ng-include ,去查一下用法:ng-include指令用于包含外部的 HTML 文件。意思是可以打开外部的网页文件。ng-include详情:https://www.runoob.com/angularjs/ng-ng-include.html 那就是说,如果输入第一关的路径,就可以跳转到第一关,输入第一关的过关信息即可成功,尝试一下 自己输入alert(11) 发现被转义了,但是用 查看php源代码: level15.php?src='level1.php?name= 查看网页源代码,感觉没什么特别的,老规矩 输入 ’ ” script onclick 来看看过滤了什么,发现过滤了 “ ‘ script 还有空格 ,所以可以用 a标签 onclick事件绕过,空格用换行符%0a替代,尝试一下,成功绕过!! 查看php源代码: level16.php?keyword=111 看网页源代码发现有embed标签,去查embed标签作用, 标签定义了一个容器,用来嵌入外部应用或者互动程序(插件)。标签详情见:www.runoob.com/tags/tag-embed.html 简单来说就是嵌入图片,视频等,通过' " script onclick ,过滤了’ “ 和 可以用 onclick 或者 onmouseover进行绕过,我用火狐浏览器,,按道理说是可以成功的,但是没反应,换了Microsoft Edge,发现可以成功绕过!!不太清楚为什么,可能是火狐浏览器不兼容的缘故,这也说明了如果长时间解决不了问题,就换多个浏览器进行尝试,排查原因。 查看php源代码: level17.php?arg01=123 onmousedown=alert(1)&arg02=b 查看网页源码和php源代码发现,和十七关一样,payload的也一样。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |