首页 > 其他分享 >buuctf [第二章 web进阶]XSS闯关

buuctf [第二章 web进阶]XSS闯关

时间:2023-05-16 15:45:41浏览次数:48  
标签:username XSS buuctf 进阶 xss 代码 javascript alert 源码

本题每一关都需要我们使用alert弹窗

level1

URL为

http://7db5b895-7c64-4b97-a85e-bc011762312f.node4.buuoj.cn:81/level1?username=xss

查看源码可知get传的username直接被输出
image

所以直接注入js代码即可

?username=<script>alert(1)</script>

level2

level2对输入的username使用escape进行了编码,如果直接注入js代码就没法执行了
image

观察前面的var username='xss';,如果我们注入

?username=xss';alert(1);'xss

那么前面的代码中两个单引号就会被闭合,并执行以下代码,pass

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

level3

仍然使用level2注入的username=xss';alert(1);'xss,但是没有pass。查看源代码,发现第一个单引号被转义了
image
那么给它再加一个单引号就行了

?username=xss'';alert(1);'xss

解释为

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

level4

查看源码,本题将获取到的jumpUrl的值作为目标地址,倒计时结束后使用location.href进行重定向。
image

使用伪协议,javascript:alert(1)将javascript后面的部分当成js代码,倒计时为0时,网页便会重定向到javascript:alert(1)执行alert(1)

?jumpUrl=javascript:alert(1)

level5

看源码,填写的表单名为autoForm。如果autosubmit的值非空,并且action的值非空,那么autoForm.action(表单提交的目标地址)就是action的值,否则目标地址是当前页。
image
所以只要让autosubmit的值非空,action的值为伪协议,即可将表单提交到javascript:alert(1),实现弹窗

?autosubmit=1&action=javascript:alert(1)

level6

尝试?username=<script>alert(1)</script>不成功,查看源码,&#x3c;是将左尖括号进行了unicode编码
image

看到源码引入了一个js
image
该js为AngularJS框架,其思想是基于html编写模板
image
而该模板存在xss模板注入漏洞,当输入?username={{4*3}}时会被计算
image
由此构造一个定式payload

?username={{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

chatGPT给出的解释为

具体来说,该代码将字符串 'a'.constructor.prototype.charAt=[].join; 赋值给了 $rootScope 对象的原型上的 charAt 方法。这样,在后续的代码执行中,如果有类似 'a'[index] 这样的表达式出现,就会被转化为 ['a'].join('')[index],从而执行任意代码。

接着,代码通过调用 $eval 方法来执行包含恶意代码的字符串 'x=1} } };alert(1)//'。其中,由于该字符串包含了一个未闭合的 JavaScript 函数,因此 $eval 方法在解析时会自动将字符串补足缺失的括号。最终,该字符串将被解析为如下的 JavaScript 代码:

x = 1; // 执行恶意代码
}
// 下述代码已经失效
// }
// ;
alert(1); // 输出弹窗

标签:username,XSS,buuctf,进阶,xss,代码,javascript,alert,源码
From: https://www.cnblogs.com/nemuzuki/p/17405834.html

相关文章

  • C++ 图进阶系列之剖析二分图的染色算法和匈牙利算法
    1.前言二分图又称作二部图或称为偶图,是图论中的一种特殊类型,有广泛的应用场景。什么是二分图?二分图一般指无向图。看待问题要有哲学思想,有二分图也可以是有向图。如果图中所有顶点集合能分成两个独立的子集,且任一子集中的任意顶点之间没有边连接,则称这样的图为二分图。......
  • buuctf [第二章 web进阶]SSRF Training
    首先点击interstingchallenge,查看后台源码。可以看到是将输入的ip通过safe_request_url()调用check_inner_ip()来判断是不是内网ip。如果是内网ip,那么直接输出;如果不是,则会创建一个curl会话,并向目标url发起请求,将返回结果输出。根据主页提示,flag位于flag.php中,但是如果直接输......
  • 指针进阶(3)————玩转指针
    指针进阶内容不多,但面面俱到,都是精华1.回调函数:2.详解qsort函数参数:3.模拟实现qsort函数回调函数就是,把一个函数的地址,放在函数指针中,然后将该指针作为一个参数,传到另一个函数中,在这个函数内部使用了外部写好的一个函数.举一个例子,看完你一定明白了例子:voidmenu(void){ print......
  • 40+JavaScript进阶单行代码
    数组//生成数组0-99的数组//方案1constcreateArr=(n)=>Array.from(newArray(n),(v,i)=>i);letarr=createArr(100);console.log(arr);//方案2constcreateArr=(n)=>newArray(n).fill(0).map((v,i)=>i)......
  • 【2023 · CANN训练营第一季】进阶班笔记1
    1.在AscendCL中,关于媒体数据处理V1版本中的内存申请/释放接口acldvppMalloc/acldvppFree:该接口主要用于分配内存给Device侧媒体数据处理时使用,申请的大页内存满足数据处理的要求(例如,内存首地址128字节对齐)。调用该接口申请内存后,如果内存不使用,需及时调用acldvppFree接口释放内存频......
  • buuctf [网鼎杯 2020 朱雀组]phpweb
    首先访问网站,发现警告,说的是后端时区设置不对,这引导我们看看index源码是怎么查询时间的Warning:date():Itisnotsafetorelyonthesystem'stimezonesettings.Youarerequiredtousethedate.timezonesettingorthedate_default_timezone_set()function.Incase......
  • c++进阶项目—基于多态的职工管理系统
    一、管理系统需求公司中职工分为三类:普通员工、经理、老板显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责1、普通员工职责:完成经理交给的任务2、经理职责:完成老板交给的任务,并下发任务给员工3、老板职责:管理公司所有事务管理系统中需要实现的功能如下:1、退出管理程序:退......
  • 指针进阶(2)——玩转指针
    今天内容不多,但都是精华。1.数组参数和指针参数2.函数指针2.1笔试题3.函数指针数组1.数组参数和指针参数例1:一维数组传参voidtest(intarr[]){}voidtest(intarr[10]){}voidtest(int*arr){}voidtest2(int*arr2[20]){}voidtest2(int**arr2){}传参的时候,*arr2......
  • Scanner进阶使用
    1. (if的使用会在后续学习)其他类型像int,float型等就把相应的都变成nextInt()/hasNextInt()  nextFloat()/hasNextFloat()(Scanner其实就是和键盘相关联,可以输入一些东西,然后运行。)......
  • python进阶-虚拟环境
    python两个模块:os:Thismoduleprovidesaportablewayofusingoperatingsystemdependentfunctionality.这个模块提供了一种方便的使用操作系统函数的方法。sys:Thismoduleprovidesaccesstosomevariablesusedormaintainedbytheinterpreterandtofunction......