As-Exploits v 1.2 更新

前言

As-Exploits,中國蟻劍后滲透模塊愉阎。

目前插件的定位是蟻劍的一個(gè)微內(nèi)核拓展模塊,可以迅速做到payload的工程化力奋,不用過多時(shí)間浪費(fèi)在插件的結(jié)構(gòu)上诫硕。目前的As-Exlpoits各部分之間基本做到了解耦,新增一個(gè)payload只需要兩步:1.填寫payload刊侯,2. 畫一個(gè)表單章办。其余發(fā)包,回顯處理等事情框架會(huì)自動(dòng)幫你實(shí)現(xiàn)。想要自定義的話只需要繼承父類然后重寫對(duì)應(yīng)方法即可藕届。

其中Payload部分很多借鑒了冰蝎哥斯拉的實(shí)現(xiàn)挪蹭,向其開發(fā)者們表示感謝!

支持列表

模塊名稱\Shell類型 PHP ASPX JSP
基本信息
反彈Shell
內(nèi)存馬
內(nèi)存馬管理
殺軟識(shí)別
提權(quán)輔助
屏幕截圖
ShellCode加載器
Jar加載器

本次更新主要內(nèi)容

aspx增加屏幕截圖模塊

我打我自己

當(dāng)然實(shí)戰(zhàn)中需要較高權(quán)限休偶。

image.png

因?yàn)樵?a target="_blank">Jscript加載Assembly踩坑記里面解決了Jscript加載c#的問題梁厉,所以C#的payload理論上都可以加進(jìn)去,更多其他的用法就看大家自己發(fā)揮了

jsp增加Jar加載器模塊

打一個(gè)jar進(jìn)去通常有兩個(gè)用處:

一是可以用來上傳數(shù)據(jù)庫驅(qū)動(dòng)踏兜。

二是把惡意類打入JVM中词顾,后續(xù)只需要通過反射調(diào)用即可。哥斯拉的實(shí)現(xiàn)方式就是第一次就把所有的payload打入jvm中碱妆,后續(xù)通過反射調(diào)用肉盹。所以后續(xù)通信的流量包都非常的小,只需要傳遞參數(shù)即可疹尾。

冰蝎跟哥斯拉都有類似的功能上忍,研究了一下他們的實(shí)現(xiàn)。

冰蝎

冰蝎的加載jar功能內(nèi)嵌于數(shù)據(jù)庫連接部分纳本,僅用于上傳數(shù)據(jù)庫驅(qū)動(dòng)窍蓝。首先把要打入的jdbc上傳到目標(biāo)的臨時(shí)目錄,然后再用URLClassLoader去加載繁成,這里貼一下代碼吓笙。

net.rebeyond.behinder.ui.controller.DatabaseViewController#loadDriver

  private void loadDriver(String scriptType, String databaseType) throws Exception {
      String driverPath = "net/rebeyond/behinder/resource/driver/";
      Platform.runLater(() -> {
         this.statusLabel.setText("正在上傳數(shù)據(jù)庫驅(qū)動(dòng)……");
      });
      String os = this.currentShellService.shellEntity.getString("os").toLowerCase();
      //根據(jù)系統(tǒng)型號(hào)選擇臨時(shí)目錄
      String remoteDir = os.indexOf("windows") >= 0 ? "c:/windows/temp/" : "/tmp/";
      String libName = null;
      if (scriptType.equals("jsp")) { //根據(jù)類型選擇數(shù)據(jù)庫jdbc
         if (databaseType.equals("sqlserver")) {
            libName = "sqljdbc41.jar";
         } else if (databaseType.equals("mysql")) {
            libName = "mysql-connector-java-5.1.36.jar";
         } else if (databaseType.equals("oracle")) {
            libName = "ojdbc5.jar";
         }
      } else if (scriptType.equals("aspx")) {
         if (databaseType.equals("mysql")) {
            libName = "mysql.data.dll";
         } else if (databaseType.equals("oracle")) {
            libName = "Oracle.ManagedDataAccess.dll";
         }
      }

      byte[] driverFileContent = Utils.getResourceData(driverPath + libName);
      String remotePath = remoteDir + libName;
      //將jar先上傳到臨時(shí)目錄
      this.currentShellService.uploadFile(remotePath, driverFileContent, true);
      Platform.runLater(() -> {
         this.statusLabel.setText("驅(qū)動(dòng)上傳成功,正在加載驅(qū)動(dòng)……");
      });
      //將libPath傳遞給服務(wù)端加載
      JSONObject loadRes = this.currentShellService.loadJar(remotePath);
      if (loadRes.getString("status").equals("fail")) {
         throw new Exception("驅(qū)動(dòng)加載失敗:" + loadRes.getString("msg"));
      } else {
         Platform.runLater(() -> {
            if (scriptType.equals("jsp")) {
               this.statusLabel.setText("驅(qū)動(dòng)加載成功巾腕,請(qǐng)?jiān)俅吸c(diǎn)擊“連接”面睛。");
            }

            this.statusLabel.setText("驅(qū)動(dòng)加載成功。");
         });
      }
   }

webshell獲取到libPath然后用URLClassLoader去加載祠墅。

net.rebeyond.behinder.payload.java.Loader

image.png

哥斯拉

哥斯拉的操作就比較秀了侮穿。因?yàn)榇蛉胍粋€(gè)jar不像打入一個(gè)class一樣,直接有defineClass方法去接收一個(gè)字節(jié)數(shù)組毁嗦。據(jù)我的研究亲茅,沒有直接接收一個(gè)jar的字節(jié)數(shù)組的方法。打入jar需要使用URLClassLoader這個(gè)類狗准,大概有兩種方式克锣,一種是利用http協(xié)議,遠(yuǎn)程獲取所要加載的jar腔长。另一種是file協(xié)議袭祟,從本地路徑去讀取jar。

每次都額外搭一個(gè)http當(dāng)然不方便捞附,并且目標(biāo)還不一定出網(wǎng)巾乳。但是file協(xié)議的話還需要把jar寫到磁盤中您没,文件就會(huì)落地,增加了被發(fā)現(xiàn)的風(fēng)險(xiǎn)胆绊。

但是我們回過頭想氨鹏,既然通過file協(xié)議加載jar,肯定會(huì)有一個(gè)通過路徑找到文件压状,然后把文件讀取到內(nèi)存的過程仆抵,如果我們能跳過這個(gè)根據(jù)路徑找文件的過程,直接把文件的內(nèi)容寫到字節(jié)數(shù)組里不就可以文件不落地了嗎种冬?

哥斯拉就是采用的這種做法镣丑,利用兩個(gè)子類分別繼承了URLStreamHandler跟URLConnection,然后利用反射模擬了讀取文件的過程娱两。

創(chuàng)建了一種新的協(xié)議jarmembuff

image.png

然后把收到的jar文件的字節(jié)數(shù)組給放到變量里莺匠。

image.png

這樣就實(shí)現(xiàn)了文件不落地,將jar打入內(nèi)存的目的谷婆。

本人在As-Exploits里也采用了這種做法慨蛙。

小實(shí)驗(yàn)

這里做一個(gè)小實(shí)驗(yàn)

寫一個(gè)彈框測(cè)試類

import java.io.IOException;

public class calc {
    public calc() {
        try {
            Runtime.getRuntime().exec("calc");
        } catch (IOException var2) {
            var2.printStackTrace();
        }

    }
}

jar -cvf打包成jar

開個(gè)web項(xiàng)目辽聊,寫一個(gè)test.jsp如下纪挎。去查找calc這個(gè)類并且實(shí)例化。如果實(shí)例化成功則會(huì)彈出我們的計(jì)算器跟匆。

<%

    Class.forName("calc").newInstance();

%>

在第一次訪問的時(shí)候找不到這個(gè)類肯定會(huì)報(bào)錯(cuò)

image.png

然后打開插件异袄,選擇要打入的jar文件。這里可以點(diǎn)按鈕選擇玛臂,也可以直接在輸入框輸入絕對(duì)路徑烤蜕。

image.png

exploit!

image.png

再去刷新頁面迹冤,彈出計(jì)算器讽营。

image.png

支持返回包加密

選擇reverse解碼器

image.png

返回包數(shù)據(jù)

image.png

內(nèi)存馬兼容Spring

其中 內(nèi)存馬管理 以及AntSword類型內(nèi)存馬支持Tomcat(5-9)、Spring

首先要Spring中默認(rèn)沒有pageContext的依賴泡徙,所以相關(guān)的依賴部分都要去除橱鹏。蟻劍的jsp很早就不依賴pageContext了,相關(guān)文章以前也寫過堪藐,不知道的同學(xué)可以翻一翻我的博客:yzddmr6.tk莉兰。

這里有兩個(gè)細(xì)節(jié)

關(guān)于反射的坑

在研究過程中可以發(fā)現(xiàn)哥斯拉中的payload基本都是用反射實(shí)現(xiàn)的,這樣的好處就是可以不添加任何依賴礁竞。這也是為什么哥斯拉只有8m的原因糖荒。

去除掉所有的pageContext后,在Spring中獲取servlet沒有問題模捂,但是卸載的時(shí)候內(nèi)存馬管理模塊報(bào)了一個(gè)這樣的錯(cuò)誤:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">15e0d5bERROR:// java.lang.NoSuchMethodException: org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedContext.removeChild(org.apache.catalina.Container)adc1b2c</pre>

定位一下問題出在這里

image.png

意思就是在StandardContext中找不到removeChild這個(gè)方法捶朵。

調(diào)試一下發(fā)現(xiàn)蜘矢,Spring中獲取到的StandardContext示例為其一個(gè)子類,叫做TomcatEmbeddedContext综看。雖然Spring中內(nèi)置了Tomcat硼端,但這個(gè)是Spring特有的。

image.png

TomcatEmbeddedContext繼承了StandardContext寓搬,并且沒有對(duì)removeChild進(jìn)行改寫珍昨,如果父類有這個(gè)方法應(yīng)該是可以調(diào)用的。

那為什么會(huì)找不到方法呢句喷?這里要提一下反射中g(shù)etMethods 跟getDeclaredMethods 的區(qū)別:

getMethods 獲取所有公有方法(包括父類方法)

getDeclaredMethods 獲取本類中的所有方法 (只拿本類中的)

哥斯拉中用的getDeclaredMethod镣典,也就是只能獲取到本類中的方法,自然反射拿不到父類的removeChild唾琼。

所以解決辦法要么把getDeclaredMethod換成getMethod兄春,因?yàn)閞emoveChild本來就是public的,要么就直接調(diào)用removeChild方法锡溯,不采用反射赶舆。在這里我采用了后者。

image.png

在內(nèi)存馬模塊同理祭饭,這里直接全部改了芜茵,不再用反射。

addServletMapping的兼容性問題

要注意的是倡蝙,在添加servlet的過程中九串,會(huì)涉及到addServletMapping函數(shù)的兼容性問題,并且很多文章中并沒有仔細(xì)分析具體的版本號(hào)寺鸥。這里貼一下我研究的結(jié)果:

tomcat7 只能addServletMapping

tomcat8 addServletMapping/addServletMappingDecoded都可以

tomcat9 只能addServletMappingDecoded

在這里要么用反射猪钮,兩種方法都try一下。在這里提供一個(gè)更好的解決辦法胆建,使用ApplicationServletRegistration這個(gè)類烤低。ApplicationServletRegistration對(duì)wrapper做了封裝,自動(dòng)會(huì)處理兩種方法的兼容性笆载。

Spring下運(yùn)行截圖

獲取Servlet

image.png

打入蟻劍內(nèi)存馬

image.png

再次獲取Servlet扑馁,發(fā)現(xiàn)已經(jīng)有了,并且在第一位宰译。

image.png

連接成功

image.png

卸載Servlet

image.png

卸載后再次獲取Servlet列表

image.png

雖然我們可以通過setLoadOnStartup把servlet放在第一位檐蚜,但是面對(duì)需要鑒權(quán)的shiro等目標(biāo)打入一個(gè)servlet內(nèi)存馬還是有不小的局限性。所以目前filter內(nèi)存馬依舊是主流沿侈。但是蟻劍是支持listener類型的闯第,listener的優(yōu)先級(jí)還在filter之上。所以以后可能直接跳過filter缀拭,直接加入listener的payload。

現(xiàn)有模塊介紹

基本信息

獲取當(dāng)前服務(wù)端信息。

支持類型:php/jsp/aspx

php

image

jsp

image

aspx

image

反彈Shell

跟MSF聯(lián)動(dòng)

支持類型:php/jsp/aspx

Payload目前支持以下類型:

  • java/meterpreter/reverse_tcp

  • java/shell/reverse_tcp

  • java/meterpreter/bind_tcp

  • java/shell/bind_tcp

  • php/meterpreter/reverse_tcp

  • php/shell/reverse_tcp

  • php/meterpreter/bind_tcp

  • php/shell/bind_tcp

  • windows/meterpreter/reverse_tcp

  • windows/x64/meterpreter/reverse_tcp


    image

內(nèi)存馬

一鍵打入內(nèi)存Webshell宋下,由于時(shí)間倉促,目前僅支持Servlet型內(nèi)存馬篡腌。

支持類型:jsp

可打入的內(nèi)存馬種類:

  • AntSword

  • Behinder

  • Godzilla-Base64

  • reGerog
    組件名稱為注冊(cè)的Servlet的名稱,可以起一個(gè)具有迷惑性的名字來隱藏自己勾效。
    其中AntSword類型支持Tomcat(5-9)嘹悼、Spring。


    image

打入哥斯拉內(nèi)存馬

打入Godzilla-Base64內(nèi)存馬

image

在哥斯拉中連接成功

image

殺軟識(shí)別

數(shù)據(jù)來源是key師傅的項(xiàng)目:avList

通過tasklist /svc獲取當(dāng)前進(jìn)程列表层宫,識(shí)別出其中的殺軟杨伙。

支持類型:php/jsp/aspx

目前支持手動(dòng)跟自動(dòng)兩種獲取方式:

  • 自動(dòng)獲取
    自動(dòng)執(zhí)行tasklist /svc并分析回顯數(shù)據(jù)。

  • 手動(dòng)獲取
    手動(dòng)輸入tasklist /svc的結(jié)果萌腿。

    image

提權(quán)輔助

通過systeminfo來獲取補(bǔ)丁信息限匣,從而給出提權(quán)建議。

支持類型:php/jsp/aspx

同樣支持手動(dòng)跟自動(dòng)兩種獲取方式毁菱。

image

屏幕截圖

獲取目標(biāo)當(dāng)前屏幕截圖米死。

支持類型:jsp/aspx

image

ShellCode加載器

加載shellcode至內(nèi)存運(yùn)行。(shellcode為hex格式贮庞,且不能有多余空格或換行)

支持類型:aspx

以msf為例:msfvenom生成hex格式的shellcode

image

粘貼進(jìn)輸入框峦筒,點(diǎn)擊exploit

image

收到Meterpreter會(huì)話

image

Jar加載器

加載Jar到JVM內(nèi)存中。過程中文件不落地贸伐,可用于上傳數(shù)據(jù)庫驅(qū)動(dòng)等勘天。

支持類型:jsp

image

注意事項(xiàng)

本插件僅供合法的滲透測(cè)試以及愛好者參考學(xué)習(xí)怔揩,請(qǐng)勿用于非法用途捉邢,否則自行承擔(dān)相關(guān)責(zé)任。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末商膊,一起剝皮案震驚了整個(gè)濱河市伏伐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晕拆,老刑警劉巖藐翎,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異实幕,居然都是意外死亡吝镣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門昆庇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來末贾,“玉大人,你說我怎么就攤上這事整吆」澳欤” “怎么了辉川?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)拴测。 經(jīng)常有香客問我乓旗,道長(zhǎng),這世上最難降的妖魔是什么集索? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任屿愚,我火速辦了婚禮,結(jié)果婚禮上务荆,老公的妹妹穿的比我還像新娘渺鹦。我一直安慰自己,他們只是感情好蛹含,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布毅厚。 她就那樣靜靜地躺著,像睡著了一般浦箱。 火紅的嫁衣襯著肌膚如雪吸耿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天酷窥,我揣著相機(jī)與錄音咽安,去河邊找鬼。 笑死蓬推,一個(gè)胖子當(dāng)著我的面吹牛妆棒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沸伏,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼糕珊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了毅糟?” 一聲冷哼從身側(cè)響起红选,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姆另,沒想到半個(gè)月后喇肋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迹辐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年蝶防,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片明吩。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡间学,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情菱鸥,我是刑警寧澤宗兼,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站氮采,受9級(jí)特大地震影響殷绍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鹊漠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一主到、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躯概,春花似錦登钥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姿锭,卻和暖如春塔鳍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呻此。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工轮纫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人焚鲜。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓掌唾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親忿磅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糯彬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容