xss闯关

BUU上的[第二章 web进阶]XSS闯关

第一关

第一关很简单,没有任何过滤,直接输入:<script>alert()</script>即可。

第二关

第二关可以输入xss和<script>alert()</script>分别查看页面源代码,看看哪里变了。下面是输入发生变化的代码。

复制代码
if(location.search == ""){//查看url中是否有查询字符串,包括开头的?,如果有,返回字符串,如果没有返回空字符
            location.search = "?username=xss"//将url中的查询字符串命名为?username=xss,且不会再改变。
        }
        var username = 'xss';//输入
        document.getElementById('ccc').innerHTML= "Welcome " + escape(username);//找到ID为 'ccc' 的HTML元素,并将其内部的HTML内容替换为 "Welcome " 加上 username 变量的值(username 的值经过 escape() 函数处理),使用双斜线进行过滤。

输入:?username=xss';alert(1);//

第三关

输入第二关的payload,发现多了一个单引号和斜线,形成了闭合。

输入:?username='';alert(1);//

第四关

进入第四关发现页面在不断的跳转,输入:?jumpUrl=javascript:alert(1)

javascript:会将此后面的语句当作代码执行,所以,输入此后的再次跳转就会执行alert(1)。

第五关

查看页面源代码,发现一段js代码。

复制代码
if(getQueryVariable('autosubmit') !== false){//查看url中是否有autosubmit参数如果有,返回它的值,如果没有,返回false,没有的话执行if语句
    var autoForm = document.getElementById('autoForm');//通过 ID 获取页面中的表单元素,假设表单的 ID 是 autoForm。
    autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');//如果没有action,执行location.href,有action且action!=false,执行getQueryVariable('action')。将最后的值赋值给autoForm.action。
    autoForm.submit();//提交表单
}else{
    
}
function getQueryVariable(variable){
    var query = window.location.search.substring(1);//获取当前页面的查询字符串(即 URL 中 `?` 后的部分)
    var vars = query.split("&");//按&符号将参数拆解成数组
    for (var i=0;i<vars.length;i++) {
        var pair = vars[i].split("=");//通过=将数据分为参数和值
        if(pair[0] == variable){return pair[1];}//如果参数是查询的参数,返回它的值
    }
    return(false);//返回false
}

综上,我们需要有autosubmit进入if语句,然后利用action参数进行xss注入。

输入:?autosubmit=1&action=JavaScript:alert(1);//

第六关

查看页面源代码,发现一个链接,不过里面是一堆js代码,在下面找到一段js代码:

复制代码
<script type="text/javascript">
    if(location.search == ""){//查询有没有查询的参数,好像也没啥东西。
        location.search = "?username=xss"
    }
</script>

看别的师傅了解到沙箱逃逸,先传参{ {7*9}},发现被运算。

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

'a'.constructor 返回 String 构造函数。

.prototype 访问 String 的原型对象。

.charAt 是 String 原型上的一个方法,用于获取字符串中指定位置的字符。

=[].join; 将 String.prototype.charAt 方法重写为数组的 join 方法。这意味着当你尝试调用 charAt 方法时,实际上会调用 join 方法。

这样绕过了AngularJS的防御机制,使得后面的代码可以执行。

eval函数接受一个字符串参数,并将其作为AngularJS表达式进行求值。在这里,字符串参数包含恶意代码 x=1} } };alert(1)//'。这段代码试图关闭现有的AngularJS表达式,然后触发一个JavaScript alert弹窗,以实现攻击目的。

最终得到flag:n1book{xss_is_so_interesting}

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄3 天前
JavaScript 隐式全局变量解析
javascript
汉堡大王95273 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大3 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师3 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端