蜻蜓安全編寫外掛模組 webcrack 實踐

湯青松發表於2022-05-10

一、背景

蜻蜓安全工作臺是一個安全工具整合平臺,整合市面上主流的安全工具,並按照工作場景進行編排,目前主要預製了四個場景:資訊收集、黑盒掃描、POC批量驗證、程式碼審計;
最大特點就是整合的工具多、種類全,你可以將你想要的工具編排成任意一個場景,快速打造屬於自己的安全工作臺~

在這篇文章中將講解,如何支援自定義工具;工具中需要用docker映象方式進行封裝,下面說下工具如何封裝。

我以弱口令檢測工具WebCrack為例,講解如何在蜻蜓安全工作臺中提交工具。

二、學習工具使用

2.1 工具下載

從官網或者GitHub將工具下載下來

git clone https://github.com/yzddmr6/WebCrack

返回內容如下

Cloning into 'WebCrack'...
remote: Enumerating objects: 104, done.
remote: Counting objects: 100% (31/31), done.
remote: Compressing objects: 100% (25/25), done.
remote: Total 104 (delta 9), reused 17 (delta 3), pack-reused 73
Receiving objects: 100% (104/104), 138.12 KiB | 867.00 KiB/s, done.
Resolving deltas: 100% (30/30), done.

2.2 安裝工具的依賴

 cd WebCrack && pip3 install -r requirements.txt

返回結果

Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: bs4 in /Users/tangqingsong/Library/Python/3.8/lib/python/site-packages (from -r requirements.txt (line 1)) (0.0.1)
Requirement already satisfied: lxml in /Users/tangqingsong/Library/Python/3.8/lib/python/site-packages (from -r requirements.txt (line 2)) (4.8.0)
Requirement already satisfied: requests in /Users/tangqingsong/Library/Python/3.8/lib/python/site-packages (from -r requirements.txt (line 3)) (2.27.1)
Requirement already satisfied: beautifulsoup4 in /Users/tangqingsong/Library/Python/3.8/lib/python/site-packages (from bs4->-r requirements.txt (line 1)) (4.11.1)
Requirement already satisfied: charset-normalizer~=2.0.0 in /Users/tangqingsong/Library/Python/3.8/lib/python/site-packages (from requests->-r requirements.txt (line 3)) (2.0.12)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /Users/tangqingsong/Library/Python/3.8/lib/python/site-packages (from requests->-r requirements.txt (line 3)) (1.26.9)
Requirement already satisfied: certifi>=2017.4.17 in /Users/tangqingsong/Library/Python/3.8/lib/python/site-packages (from requests->-r requirements.txt (line 3)) (2021.10.8)
Requirement already satisfied: idna<4,>=2.5 in /Users/tangqingsong/Library/Python/3.8/lib/python/site-packages (from requests->-r requirements.txt (line 3)) (3.3)
Requirement already satisfied: soupsieve>1.2 in /Users/tangqingsong/Library/Python/3.8/lib/python/site-packages (from beautifulsoup4->bs4->-r requirements.txt (line 1)) (2.3.2.post1)

2.3 學習使用方法

現在學習工具使用方法,為後續接入做準備

➜  WebCrack git:(master) python3 webcrack.py 

+---------------------------------------------------+
| __          __  _      _____                _     |
| \ \        / / | |    / ____|              | |    |
|  \ \  /\  / /__| |__ | |     _ __ __ _  ___| | __ |
|   \ \/  \/ / _ \ '_ \| |    | '__/ _' |/ __| |/ / |
|    \  /\  /  __/ |_) | |____| | | (_| | (__|   <  |
|     \/  \/ \___|_.__/ \_____|_|  \__,_|\___|_|\_\ |
|                                                   |
|                 code by @yzddmr6                  |
|                  version: 2.2                     |
+---------------------------------------------------+

File or Url:

2.4 改造工具

在上沒使用的體驗中,發現還需要進行互動,這非常不方便,我想執行一條命令就可以讓他工作,所以需要改動程式碼

改動程式碼之前,需要分析主入口檔案,其中有一個變數名url_file_name

    url_file_name = input('File or Url:\n')

    if '://' in url_file_name:
        CrackTask().run(1, url_file_name)
    else:
        url_list = []
        if os.path.exists(url_file_name):

我把他的修改成這個從引數中獲取即可

    url_file_name = sys.argv[1]

接下來我用permeate搭建一個靶場,然後將登入地址放進去

python3 webcrack.py http://*.*.*/home/index.php?m=user&a=login

返回結果如下,可以看到接收引數成功了,並且已經執行成功。

➜  WebCrack git:(master) ✗ python3 webcrack.py http://xx.xx.xx/home/index.php\?m\=user\&a\=login
2022-05-09 19:36:53  id: 1 [*] Start: http://xx.xx.xx/home/index.php?m=user&a=login
2022-05-09 19:36:53  id: 1 [*] http://xx.xx.xx/home/index.php?m=user&a=login 進度: (1/27) checking: admin admin
.....中間過程刪減....
2022-05-09 19:36:53  id: 1 [*] http://xx.xx.xx/home/index.php?m=user&a=login 進度: (2/27) checking: admin 123456
2022-05-09 19:36:56  id: 1 [*] http://xx.xx.xx/home/index.php?m=user&a=login 啟動萬能密碼爆破模組
2022-05-09 19:36:56  id: 1 [*] http://xx.xx.xx/home/index.php?m=user&a=login 進度: (1/25) checking: admin' or 'a'='a admin' or 'a'='a
2022-05-09 19:36:56  id: 1 [*] Rechecking... http://xx.xx.xx/home/index.php?m=user&a=login admin' or 'a'='a admin' or 'a'='a
2022-05-09 19:36:56  id: 1 [+] Success: http://xx.xx.xx/home/index.php?m=user&a=login  admin' or 'a'='a/admin' or 'a'='a
➜  WebCrack git:(master) ✗ 

從反饋的結果來看,工具使用了萬能密碼暴力破解成功了。

三、學習映象製作方法

現在我們已經知道工具如何接入,只需要讓程式執行他就行了,所以我們需要學習蜻蜓安全工作臺外掛的一些基本規則,學習規則很簡單。

我們只需要將蜻蜓已經寫好的外掛下載下來,看看之前的外掛怎麼寫的就可以了。

3.1 案例分析

如下圖是蜻蜓安全工作臺已經編寫好的外掛,

我們隨意挑選一個案例,以長亭的xray工具接入為例,

可以看到工具一共有三個目錄:codetoolsDockerfile

我們先分析一下 dockerfile 檔案

FROM daxia/qingting:base

COPY ./code /root/code
COPY ./tools /data/tools

CMD ["php","/root/code/index.php"]

從Dockerfile檔案中可以看到其實映象製作,只需要把兩個目錄複製到映象就可以了,然後讓他啟動執行一個主入口檔案;

我們接下來再繼續看主入口檔案所在的code目錄,開啟檔案檢視,index.php 內容如下

從這個圖中可以看到,外掛的流程其實是讀取要掃描的目標,然後將目標丟給工具去掃描,然後將掃描的結果儲存到資料庫

四、製作工具映象

現在我們開始嘗試自己寫外掛,首先將xray的整個資料夾複製一份,新的資料夾名字叫做webcrack,然後把tools裡面的內容刪除

接著將最開始下載的webcrack程式碼複製過來,如下圖所示

接下來我們再分析index.php的具體邏輯,這裡劇透一下,我們只看index.php就行,其他地方不用看了,用之前的配置就行了。

然後我們開始替換檔案內容,直接將檔案內容的xray改成webcrack,如下圖所示

再劇透一個地方,我們只需要改這兩個函式就行了。

4.1 呼叫工具

首先我們需要關注執行工具的函式,這裡面我們只需要關注CMD 這個命令

把這個命令改成webcrack的呼叫命令就行了

4.2 錄入資料

然後再看下一個匯入資料的函式writeData

在這個方法裡可以看到只做了三件事,首先讀取工具的結果,然後將結果的JSON字串轉換為陣列,之後插入資料庫即可。


作者:湯青松
微信:songboy8888
日期:2022年05月09日

相關文章