成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊 Wafw00f 源碼及流量特征

安全 應用安全
所謂源碼解析并不會完整分析其源碼中的所有功能,比如 日志、輸出、展示 等功能不在我們分析的范圍內,而其對 WAF 的檢測邏輯、所發流量的特征、WAF 識別的指紋等將是重點要分析的地方。

wafw00f介紹

這不是本次的重點,相關介紹及使用方法相信大家已經了解,所以此處就直接引用其開發者對該工具的介紹。

1668779762_63778ef2c9b5f811b18aa.png!small?1668779761475

To do its magic, WAFW00F does the following:

  • Sends a normal HTTP request and analyses the response; this identifies a number of WAF solutions.通過發送正常的?HTTP?請求并且分析其返回包,判斷其是否使用 WAF ,若使用確認WAF類型
  • If that is not successful, it sends a number of (potentially malicious) HTTP requests and uses simple logic to deduce which WAF it is.若是無法通過正常的?HTTP?請求結果分析出是否使用WAF以及其類型,則構造惡意的請求通過簡單的邏輯再次進行判斷
  • If that is also not successful, it analyses the responses previously returned and uses another simple algorithm to guess if a WAF or security solution is actively responding to our attacks.如果這也不成功,它會分析之前返回的響應,并使用另一種簡單的算法來猜測?WAF或安全解決方案是否正在積極響應我們的攻擊

使用場景/方法

這不是本次的重點,想要具體了解其用法去其github主頁即可

??https://github.com/EnableSecurity/wafw00f??

本工具的作用上面已經很詳細的描述出來了,概括一下很簡單:探測目標是否存在WAF,也可以說wafw00f是一個Web應用防火墻(WAF)指紋識別的工具。

使用方法不難,此處不做介紹,若想進一步了解見:WEB 防火墻探測工具 -- wafw00f 使用教程 - General 的個人博客

wafw00f 源碼解析

所謂源碼解析并不會完整分析其源碼中的所有功能,比如 日志、輸出、展示 等功能不在我們分析的范圍內,而其對 WAF 的檢測邏輯、所發流量的特征、WAF 識別的指紋等將是重點要分析的地方。

流程:

  • 解析源碼含義,分析特征
  • 抓包觀察

源碼文件結構

為了方便大家之后去看源碼,此處簡單描述一下源碼的組成,其中沒有描述的說明其用不大,大家自己去看就知道了,其中標注important是本工具的主要功能文件,后續將重點說明。

1668779769_63778ef9467c1c452a6b5.png!small?1668779767856

  • bin
  • lib

asciiarts.py

evillib.py用于向目標建立連接發起請求( important )

  • plugins?用于判斷各個WAF的指紋 ( important )

aliyundun.py阿里云盾的特征值匹配文件

huaweicloud.py****華為云的特征值匹配文件

baidu.py百度云加速的特征匹配文件

……

還有很多特征文件大家自己去看就好

  • __init__.py
  • main.py該工具主要的檢測、判斷功能的類與函數都在該文件中實現( important )
  • manager.py?加載plugins?中的WAF?指紋判斷文件識別目標WAF類型
  • wafprio.py

上述非important的文件起到的作用多是一些起到 輸出選項、連接 等功能的文件/函數,所以不做特殊介紹

基本流程

請求的流程并不復雜,和最開始介紹處的流程如出一轍:

  • 發送正常HTTP?請求,并判斷是否存在WAF若存在根據指紋判斷其類型
  • 若正常HTTP?檢測不出WAF?,則附加惡意的請求嘗試出發WAF并分析其類型

最后所謂的根據算法猜測,流量特征不明顯,不在此次分析的范圍內,實際用處也不大。

請求運行流程( important)

以第一次的正常HTTP請求探測為例(其余的都一致)。

1668779774_63778efe6b5b2740e1822.png!small?1668779773039

由于對 Python 并不是太了解,所以作用域的表示采用了C++中的::(若是不對請及時指出會做更改)。

main.py分析

完整的源碼就不放在這占地方了,大家隨時可到其github主頁獲取,此處直接分析其重點部分

由上述流程可以看出,所有的請求均是從class WAFW00F中發起,所以該類就是我們分析的重中之重!

請求的具體實現(比如請求中攜帶了哪些內容)將在分析evillib.py文件是分析,此處主要分析何時要發出何種請求。

從main()函數出發看其邏輯:(解析參數等功能將直接略過)

沒有指定其余參數

  • 對輸入的URL?做相關處理后放到target?中傳入WAFW00F進行處理

attacker = WAFW00F(target, debuglevel=options.verbose, path=path,followredirect=options.followredirect, extraheaders=extraheaders,proxies=proxies)

# 若請求沒有結果則說明目標網站或本地網絡有問題
if attacker.rq is None:
log.error('Site %s appears to be down' % hostname)
continue

  • 由于第一次做的是常規探測,若此處就匹配到了WAF的指紋則輸出結束即可,具體的輸出等邏輯不是重點,略過;
  • 若無法分析出其是否存在WAF?或匹配不出WAF?則通過identwaf()函數進步拼湊惡意參數進行探測;
waf = attacker.identwaf(options.findall)
log.info('Identified WAF: %s' % waf)
  • 進入identwaf()?函數后,便會嘗試匹配各個WAF的特征;
def identwaf(self, findall=False):
detected = list()
try:
self.attackres = self.performCheck(self.centralAttack)
except RequestBlocked:
return detected
for wafvendor in self.checklist:
self.log.info('Checking for %s' % wafvendor)
if self.wafdetections[wafvendor](self):
detected.append(wafvendor)
if not findall:
break
self.knowledge['wafname'] = detected
return detected

這就是基本的流程。

解析來如果還沒有確定出WAF便會進入其自己提供的一個算法,但這并不是我們對流量特征分析所要關注的地方,所以就不探討了。

下面到了激動人心的時刻,WAFW00F類中到底是如何實現的呢?

class WAFW00F

一上來就中了大獎:

class WAFW00F(waftoolsengine):

xsstring = '<script>alert("XSS");</script>'
sqlistring = "UNION SELECT ALL FROM information_schema AND ' or SLEEP(5) or '"
lfistring = '../../../../etc/passwd'
rcestring = '/bin/cat /etc/passwd; ping 127.0.0.1; curl google.com'
xxestring = '<!ENTITY xxe SYSTEM "file:///etc/shadow">]><pwn>&hack;</pwn>'

WAFW00F這個工具所要構造拼接的惡意代碼在一開始就全部列出了,而且在之后的使用中絕無變化,要構造惡意的請求就是從上述5個字符串中選擇1個或多個直接使用。

可以看到改用據用于判斷是否存在WAF的語句就以下五類:

  • XSS類                     <script>alert("XSS");</script>
  • SQL注入類              UNION SELECT ALL FROM information_schema AND ' or SLEEP(5) or '
  • 遍歷類                    ../../../../etc/passwd
  • 命令執行/拼接類    /bin/cat /etc/passwd; ping 127.0.0.1; curl google.com
  • XXE類                     <!ENTITY xxe SYSTEM "file:///etc/shadow">]><pwn>&hack;</pwn>

那么有了這些語句,WAFW00F又該如何拼接呢?

def normalRequest(self):
return self.Request()

def customRequest(self, headers=None):
return self.Request(headers=headers)

def nonExistent(self):
return self.Request(path=self.path + str(random.randrange(100, 999)) + '.html')

def xssAttack(self):
return self.Request(path=self.path, params= {'s': self.xsstring})

def xxeAttack(self):
return self.Request(path=self.path, params= {'s': self.xxestring})

def lfiAttack(self):
return self.Request(path=self.path + self.lfistring)

def centralAttack(self):
return self.Request(path=self.path, params={'a': self.xsstring, 'b': self.sqlistring, 'c': self.lfistring})

def sqliAttack(self):
return self.Request(path=self.path, params= {'s': self.sqlistring})

def oscAttack(self):
return self.Request(path=self.path, params= {'s': self.rcestring})

具體邏輯并不難理解,拿出幾種幾個來說一下。

1:def xssAttack(self)

def xssAttack(self):
return self.Request(path=self.path, params= {'s': self.xsstring})

例如給一個簡單的例子:我們傳給wafw00f的URL為:http://127.0.0.1:9000則經過該參數拼接后的請求就為:

http://127.0.0.1:9000/?s=<script>alert("XSS");</script>(URL編碼前 )。

2:def centralAttack(self):

def centralAttack(self):
return self.Request(path=self.path, params={'a': self.xsstring, 'b': self.sqlistring, 'c': self.lfistring})

例如給一個簡單的例子:我們傳給wafw00f的URL為:http://127.0.0.1:9000則經過該參數拼接后的請求就為:

http://127.0.0.1:9000/?s=<script>alert("XSS");</script>&b=UNION SELECT ALL FROM information_schema AND ' or SLEEP(5) or '&c=../../../../etc/passwd(URL編碼前 )

從前面的流程可以看出,在def identwaf(self, findall=False):中調用的拼接的語句的方法就是本方法,拼接進三個語句,

其他的邏輯相同。

evillib.py分析

上面只是在上層對要拼接哪些參數進行構造,實際上組合成完整的 HTTP 報文調用requests.get()進行請求的是在該文件中。

wafw00f中若沒有通過—headers指定頭部的話,會使用自己默認的—headers這個默認的 headers 就定義在該文件中。

def_headers = {'Accept'         : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.9',
'DNT' : '1', # Do Not Track request header
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3770.100 Safari/537.36',
'Upgrade-Insecure-Requests': '1' #
}

默認情況下,接下來通過requests.get()請求時便會使用該頭部,

def Request(self, headers=None, path=None, params={}, delay=0, timeout=7):
try:
time.sleep(delay)
if not headers:
h = self.headers
else: h = headers
req = requests.get(self.target, proxies=self.proxies, headers=h, timeout=timeout,
allow_redirects=self.allowredir, params=params, verify=False)
self.log.info('Request Succeeded')
self.log.debug('Headers: %s\\n' % req.headers)
self.log.debug('Content: %s\\n' % req.content)
self.requestnumber += 1
return req
except requests.exceptions.RequestException as e:
self.log.error('Something went wrong %s' % (e.__str__()))

指紋的識別

拿Huawei Cloud WAF的指紋來說

#!/usr/bin/env python
'''
Copyright (C) 2022, WAFW00F Developers.
See the LICENSE file for copying permission.
'''

NAME = 'Huawei Cloud Firewall (Huawei)'

def is_waf(self):
schemes = [

# 匹配 cookie
self.matchCookie(r'^HWWAFSESID='),
# 匹配 header 中的 Server
self.matchHeader(('Server', r'HuaweiCloudWAF')),
# 匹配 body
self.matchContent(r'hwclouds\\.com'),
self.matchContent(r'hws_security@')
]
if any(i for i in schemes):
return True
return False

CSDN使用華為云防護

1668779785_63778f0905b4c22ca27ee.png!small?1668779783711

其余腳本見:wafw00f/wafw00f/plugins at master · EnableSecurity/wafw00f

wafw00f 流量

1668779788_63778f0ccb052e89a938d.png!small?1668779787707

1668779791_63778f0faeaf4c7812b12.png!small?1668779790449

本文作者:Deutsh, 轉載請注明來自FreeBuf.COM

責任編輯:武曉燕 來源: FreeBuf.COM
相關推薦

2023-10-08 12:14:42

Sentinel流量控制

2023-08-09 09:11:57

算法分發效果

2019-07-23 07:30:27

特征工程加密流量安全

2021-09-08 06:51:53

CountDownLa閉鎖源碼

2017-09-06 14:32:50

開源協議CEO

2014-12-31 15:05:11

Android流量監控

2021-09-07 07:53:42

Semaphore 信號量源碼

2021-07-07 05:00:17

初始化源碼

2020-07-02 22:42:18

Java異常編程

2020-04-21 22:59:50

Redis搭建選舉

2017-03-06 16:51:52

Java泛型實現

2019-08-13 08:18:31

Windows 10錯誤0xa00f429Windows

2010-07-08 14:02:35

UML建模流程

2021-08-10 07:00:00

Nacos Clien服務分析

2021-10-11 09:41:20

React位運算技巧前端

2021-12-30 22:50:32

KafkaConsumer 源碼

2012-05-21 13:35:35

應用流量

2020-05-06 22:07:53

UbuntuLinux操作系統

2023-07-10 08:01:37

軟件行業GPT

2022-02-28 09:31:02

開發環境后端前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 特a毛片 | 欧美区日韩区 | 亚洲高清成人在线 | 成人国产精品 | 欧美激情一区 | 一区二区三区中文字幕 | 国产精品人人做人人爽 | 嫩草影院黄 | 日韩在线小视频 | 亚洲精品电影在线观看 | 久久精品男人的天堂 | 亚洲国产精品久久人人爱 | 色综合一区二区 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 国产毛片久久久 | 成人精品久久久 | 一级片在线观看 | 日韩黄色小视频 | 九色在线观看 | 亚洲国产成人av好男人在线观看 | 久久99精品久久久久久秒播九色 | 久久久久久久久毛片 | 午夜激情免费视频 | 午夜精品一区二区三区在线视频 | 精品视频一区二区三区 | 国产精品久久国产愉拍 | 欧美一区二区三区在线 | 亚洲欧美一区二区三区视频 | 欧美在线视频一区 | 久草在线高清 | 国产男女视频网站 | 日韩欧美三区 | 91资源在线 | 亚洲女人天堂成人av在线 | 久久久久中文字幕 | 在线超碰 | 亚洲网站在线观看 | 欧美一区二区免费电影 | 欧美黄a| 91综合在线视频 | 国产视频一区在线观看 |